@revideo/2d 0.2.3 → 0.2.4-alpha.894

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 (197) hide show
  1. package/editor/index.css +1 -1
  2. package/editor/index.js +529 -245
  3. package/lib/code/CodeCursor.d.ts +74 -74
  4. package/lib/code/CodeCursor.js +352 -286
  5. package/lib/code/CodeDiffer.d.ts +21 -16
  6. package/lib/code/CodeDiffer.js +39 -41
  7. package/lib/code/CodeFragment.d.ts +16 -8
  8. package/lib/code/CodeFragment.js +36 -36
  9. package/lib/code/CodeHighlighter.d.ts +59 -59
  10. package/lib/code/CodeHighlighter.js +1 -1
  11. package/lib/code/CodeMetrics.d.ts +12 -8
  12. package/lib/code/CodeMetrics.js +26 -24
  13. package/lib/code/CodeRange.d.ts +21 -5
  14. package/lib/code/CodeRange.js +131 -124
  15. package/lib/code/CodeScope.d.ts +18 -8
  16. package/lib/code/CodeScope.js +59 -61
  17. package/lib/code/CodeSelection.d.ts +9 -4
  18. package/lib/code/CodeSelection.js +8 -8
  19. package/lib/code/CodeSignal.d.ts +74 -47
  20. package/lib/code/CodeSignal.js +206 -189
  21. package/lib/code/CodeTokenizer.d.ts +1 -1
  22. package/lib/code/CodeTokenizer.js +41 -41
  23. package/lib/code/DefaultHighlightStyle.d.ts +2 -2
  24. package/lib/code/DefaultHighlightStyle.js +96 -96
  25. package/lib/code/LezerHighlighter.d.ts +21 -19
  26. package/lib/code/LezerHighlighter.js +101 -101
  27. package/lib/code/diff.d.ts +12 -9
  28. package/lib/code/diff.js +218 -205
  29. package/lib/code/extractRange.d.ts +7 -4
  30. package/lib/code/extractRange.js +79 -71
  31. package/lib/code/index.d.ts +1 -1
  32. package/lib/code/index.js +1 -1
  33. package/lib/components/Audio.d.ts +11 -11
  34. package/lib/components/Audio.js +115 -109
  35. package/lib/components/Bezier.d.ts +18 -18
  36. package/lib/components/Bezier.js +86 -75
  37. package/lib/components/Circle.d.ts +95 -90
  38. package/lib/components/Circle.js +85 -74
  39. package/lib/components/Code.d.ts +244 -211
  40. package/lib/components/Code.js +317 -269
  41. package/lib/components/CodeBlock.d.ts +109 -67
  42. package/lib/components/CodeBlock.js +414 -373
  43. package/lib/components/CubicBezier.d.ts +36 -36
  44. package/lib/components/CubicBezier.js +52 -49
  45. package/lib/components/Curve.d.ts +208 -198
  46. package/lib/components/Curve.js +270 -269
  47. package/lib/components/Grid.d.ts +47 -42
  48. package/lib/components/Grid.js +63 -56
  49. package/lib/components/Icon.d.ts +55 -50
  50. package/lib/components/Icon.js +58 -50
  51. package/lib/components/Img.d.ts +86 -79
  52. package/lib/components/Img.js +193 -181
  53. package/lib/components/Knot.d.ts +97 -78
  54. package/lib/components/Knot.js +81 -60
  55. package/lib/components/Latex.d.ts +12 -12
  56. package/lib/components/Latex.js +77 -65
  57. package/lib/components/Layout.d.ts +455 -413
  58. package/lib/components/Layout.js +666 -681
  59. package/lib/components/Line.d.ts +61 -49
  60. package/lib/components/Line.js +216 -193
  61. package/lib/components/Media.d.ts +35 -35
  62. package/lib/components/Media.js +135 -134
  63. package/lib/components/Node.d.ts +875 -830
  64. package/lib/components/Node.js +1383 -1314
  65. package/lib/components/Path.d.ts +35 -14
  66. package/lib/components/Path.js +100 -89
  67. package/lib/components/Polygon.d.ts +60 -55
  68. package/lib/components/Polygon.js +71 -66
  69. package/lib/components/QuadBezier.d.ts +29 -29
  70. package/lib/components/QuadBezier.js +50 -45
  71. package/lib/components/Ray.d.ts +28 -28
  72. package/lib/components/Ray.js +71 -64
  73. package/lib/components/Rect.d.ts +115 -108
  74. package/lib/components/Rect.js +78 -72
  75. package/lib/components/SVG.d.ts +165 -139
  76. package/lib/components/SVG.js +609 -541
  77. package/lib/components/Shape.d.ts +44 -35
  78. package/lib/components/Shape.js +112 -127
  79. package/lib/components/Spline.d.ts +46 -40
  80. package/lib/components/Spline.js +190 -175
  81. package/lib/components/Txt.d.ts +55 -44
  82. package/lib/components/Txt.js +156 -155
  83. package/lib/components/TxtLeaf.d.ts +20 -16
  84. package/lib/components/TxtLeaf.js +177 -158
  85. package/lib/components/Video.d.ts +41 -41
  86. package/lib/components/Video.js +138 -135
  87. package/lib/components/View2D.d.ts +21 -21
  88. package/lib/components/View2D.js +98 -85
  89. package/lib/components/index.d.ts +1 -1
  90. package/lib/components/index.js +1 -1
  91. package/lib/components/types.d.ts +22 -9
  92. package/lib/components/types.js +1 -1
  93. package/lib/curves/ArcSegment.d.ts +36 -24
  94. package/lib/curves/ArcSegment.js +145 -94
  95. package/lib/curves/CircleSegment.d.ts +26 -16
  96. package/lib/curves/CircleSegment.js +56 -49
  97. package/lib/curves/CubicBezierSegment.d.ts +18 -13
  98. package/lib/curves/CubicBezierSegment.js +79 -46
  99. package/lib/curves/CurveDrawingInfo.d.ts +9 -9
  100. package/lib/curves/CurveDrawingInfo.js +1 -1
  101. package/lib/curves/CurvePoint.d.ts +13 -13
  102. package/lib/curves/CurvePoint.js +1 -1
  103. package/lib/curves/CurveProfile.d.ts +5 -5
  104. package/lib/curves/CurveProfile.js +1 -1
  105. package/lib/curves/KnotInfo.d.ts +8 -8
  106. package/lib/curves/KnotInfo.js +1 -1
  107. package/lib/curves/LineSegment.d.ts +19 -14
  108. package/lib/curves/LineSegment.js +42 -42
  109. package/lib/curves/Polynomial.d.ts +110 -110
  110. package/lib/curves/Polynomial.js +249 -239
  111. package/lib/curves/Polynomial2D.d.ts +20 -20
  112. package/lib/curves/Polynomial2D.js +46 -42
  113. package/lib/curves/PolynomialSegment.d.ts +42 -37
  114. package/lib/curves/PolynomialSegment.js +83 -81
  115. package/lib/curves/QuadBezierSegment.d.ts +12 -12
  116. package/lib/curves/QuadBezierSegment.js +71 -41
  117. package/lib/curves/Segment.d.ts +12 -7
  118. package/lib/curves/Segment.js +2 -3
  119. package/lib/curves/UniformPolynomialCurveSampler.d.ts +34 -34
  120. package/lib/curves/UniformPolynomialCurveSampler.js +68 -62
  121. package/lib/curves/createCurveProfileLerp.d.ts +17 -6
  122. package/lib/curves/createCurveProfileLerp.js +211 -208
  123. package/lib/curves/getBezierSplineProfile.d.ts +8 -4
  124. package/lib/curves/getBezierSplineProfile.js +145 -101
  125. package/lib/curves/getCircleProfile.d.ts +10 -4
  126. package/lib/curves/getCircleProfile.js +72 -40
  127. package/lib/curves/getPathProfile.d.ts +2 -2
  128. package/lib/curves/getPathProfile.js +135 -112
  129. package/lib/curves/getPointAtDistance.d.ts +7 -4
  130. package/lib/curves/getPointAtDistance.js +12 -12
  131. package/lib/curves/getPolylineProfile.d.ts +8 -4
  132. package/lib/curves/getPolylineProfile.js +67 -54
  133. package/lib/curves/getRectProfile.d.ts +9 -4
  134. package/lib/curves/getRectProfile.js +117 -52
  135. package/lib/curves/index.d.ts +1 -1
  136. package/lib/curves/index.js +1 -1
  137. package/lib/decorators/canvasStyleSignal.d.ts +3 -3
  138. package/lib/decorators/canvasStyleSignal.js +10 -10
  139. package/lib/decorators/colorSignal.d.ts +1 -1
  140. package/lib/decorators/colorSignal.js +7 -7
  141. package/lib/decorators/compound.d.ts +4 -2
  142. package/lib/decorators/compound.js +43 -23
  143. package/lib/decorators/computed.d.ts +1 -1
  144. package/lib/decorators/computed.js +9 -9
  145. package/lib/decorators/defaultStyle.d.ts +5 -2
  146. package/lib/decorators/defaultStyle.js +11 -11
  147. package/lib/decorators/filtersSignal.d.ts +28 -8
  148. package/lib/decorators/filtersSignal.js +87 -64
  149. package/lib/decorators/index.d.ts +1 -1
  150. package/lib/decorators/index.js +1 -1
  151. package/lib/decorators/initializers.d.ts +5 -2
  152. package/lib/decorators/initializers.js +18 -19
  153. package/lib/decorators/nodeName.d.ts +1 -1
  154. package/lib/decorators/nodeName.js +4 -4
  155. package/lib/decorators/signal.d.ts +40 -20
  156. package/lib/decorators/signal.js +113 -104
  157. package/lib/decorators/spacingSignal.d.ts +1 -1
  158. package/lib/decorators/spacingSignal.js +13 -13
  159. package/lib/decorators/vector2Signal.d.ts +13 -7
  160. package/lib/decorators/vector2Signal.js +15 -13
  161. package/lib/index.d.ts +1 -1
  162. package/lib/index.js +1 -1
  163. package/lib/jsx-dev-runtime.d.ts +3 -3
  164. package/lib/jsx-dev-runtime.js +3 -3
  165. package/lib/jsx-runtime.d.ts +19 -9
  166. package/lib/jsx-runtime.js +18 -18
  167. package/lib/partials/Filter.d.ts +24 -16
  168. package/lib/partials/Filter.js +69 -69
  169. package/lib/partials/Gradient.d.ts +30 -24
  170. package/lib/partials/Gradient.js +69 -58
  171. package/lib/partials/Pattern.d.ts +14 -9
  172. package/lib/partials/Pattern.js +30 -24
  173. package/lib/partials/ShaderConfig.d.ts +81 -74
  174. package/lib/partials/ShaderConfig.js +22 -23
  175. package/lib/partials/index.d.ts +1 -1
  176. package/lib/partials/index.js +1 -1
  177. package/lib/partials/types.d.ts +19 -6
  178. package/lib/partials/types.js +1 -1
  179. package/lib/scenes/Scene2D.d.ts +42 -23
  180. package/lib/scenes/Scene2D.js +161 -151
  181. package/lib/scenes/index.d.ts +1 -1
  182. package/lib/scenes/index.js +1 -1
  183. package/lib/scenes/makeScene2D.d.ts +7 -5
  184. package/lib/scenes/makeScene2D.js +10 -10
  185. package/lib/scenes/useScene2D.d.ts +2 -2
  186. package/lib/scenes/useScene2D.js +3 -3
  187. package/lib/utils/CanvasUtils.d.ts +93 -21
  188. package/lib/utils/CanvasUtils.js +186 -105
  189. package/lib/utils/diff.d.ts +25 -18
  190. package/lib/utils/diff.js +84 -87
  191. package/lib/utils/index.d.ts +1 -1
  192. package/lib/utils/index.js +1 -1
  193. package/lib/utils/is.d.ts +4 -2
  194. package/lib/utils/is.js +2 -2
  195. package/lib/utils/makeSignalExtensions.d.ts +11 -4
  196. package/lib/utils/makeSignalExtensions.js +17 -17
  197. package/package.json +5 -5
@@ -1,15 +1,36 @@
1
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1
+ var __decorate =
2
+ (this && this.__decorate) ||
3
+ function (decorators, target, key, desc) {
4
+ var c = arguments.length,
5
+ r =
6
+ c < 3
7
+ ? target
8
+ : desc === null
9
+ ? (desc = Object.getOwnPropertyDescriptor(target, key))
10
+ : desc,
11
+ d;
12
+ if (typeof Reflect === 'object' && typeof Reflect.decorate === 'function')
13
+ r = Reflect.decorate(decorators, target, key, desc);
14
+ else
15
+ for (var i = decorators.length - 1; i >= 0; i--)
16
+ if ((d = decorators[i]))
17
+ r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5
18
  return c > 3 && r && Object.defineProperty(target, key, r), r;
6
- };
7
- import { BBox, Vector2, unwrap, useLogger, } from '@revideo/core';
8
- import { CubicBezierSegment, getBezierSplineProfile, } from '../curves';
9
- import { computed, initial, signal } from '../decorators';
10
- import { arc, bezierCurveTo, drawLine, drawPivot, lineTo, moveTo, quadraticCurveTo, } from '../utils';
11
- import { Curve } from './Curve';
12
- import { Knot } from './Knot';
19
+ };
20
+ import {BBox, Vector2, unwrap, useLogger} from '@revideo/core';
21
+ import {CubicBezierSegment, getBezierSplineProfile} from '../curves';
22
+ import {computed, initial, signal} from '../decorators';
23
+ import {
24
+ arc,
25
+ bezierCurveTo,
26
+ drawLine,
27
+ drawPivot,
28
+ lineTo,
29
+ moveTo,
30
+ quadraticCurveTo,
31
+ } from '../utils';
32
+ import {Curve} from './Curve';
33
+ import {Knot} from './Knot';
13
34
  /**
14
35
  * A node for drawing a smooth line through a number of points.
15
36
  *
@@ -54,176 +75,170 @@ import { Knot } from './Knot';
54
75
  * ```
55
76
  */
56
77
  export class Spline extends Curve {
57
- constructor(props) {
58
- super(props);
59
- if ((props.children === undefined ||
60
- !Array.isArray(props.children) ||
61
- props.children.length < 2) &&
62
- (props.points === undefined || props.points.length < 2) &&
63
- props.spawner === undefined) {
64
- useLogger().warn({
65
- message: 'Insufficient number of knots specified for spline. A spline needs at least two knots.',
66
- remarks: "<p>The spline won&#39;t be visible unless you specify at least two knots:</p>\n<pre class=\"\"><code class=\"language-tsx\">&lt;<span class=\"hljs-title class_\">Spline</span>\n stroke=<span class=\"hljs-string\">&quot;#fff&quot;</span>\n lineWidth={<span class=\"hljs-number\">8</span>}\n points={[\n [<span class=\"hljs-number\">100</span>, <span class=\"hljs-number\">0</span>],\n [<span class=\"hljs-number\">0</span>, <span class=\"hljs-number\">0</span>],\n [<span class=\"hljs-number\">0</span>, <span class=\"hljs-number\">100</span>],\n ]}\n/&gt;</code></pre><p>For more control over the knot handles, you can alternatively provide the knots\nas children to the spline using the <code>Knot</code> component:</p>\n<pre class=\"\"><code class=\"language-tsx\">&lt;<span class=\"hljs-title class_\">Spline</span> stroke=<span class=\"hljs-string\">&quot;#fff&quot;</span> lineWidth={<span class=\"hljs-number\">8</span>}&gt;\n <span class=\"language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Knot</span> <span class=\"hljs-attr\">x</span>=<span class=\"hljs-string\">{100}</span> <span class=\"hljs-attr\">endHandle</span>=<span class=\"hljs-string\">{[-50,</span> <span class=\"hljs-attr\">0</span>]} /&gt;</span></span>\n <span class=\"language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Knot</span> /&gt;</span></span>\n <span class=\"language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Knot</span> <span class=\"hljs-attr\">y</span>=<span class=\"hljs-string\">{100}</span> <span class=\"hljs-attr\">startHandle</span>=<span class=\"hljs-string\">{[-100,</span> <span class=\"hljs-attr\">50</span>]} /&gt;</span></span>\n&lt;/<span class=\"hljs-title class_\">Spline</span>&gt;</code></pre>",
67
- inspect: this.key,
68
- });
69
- }
70
- }
71
- profile() {
72
- return getBezierSplineProfile(this.knots(), this.closed(), this.smoothness());
73
- }
74
- knots() {
75
- const points = this.points();
76
- if (points) {
77
- return points.map(signal => {
78
- const point = new Vector2(unwrap(signal));
79
- return {
80
- position: point,
81
- startHandle: point,
82
- endHandle: point,
83
- auto: { start: 1, end: 1 },
84
- };
85
- });
86
- }
87
- return this.children()
88
- .filter(this.isKnot)
89
- .map(knot => knot.points());
90
- }
91
- childrenBBox() {
92
- const points = this.profile().segments.flatMap(segment => segment.points);
93
- return BBox.fromPoints(...points);
78
+ constructor(props) {
79
+ super(props);
80
+ if (
81
+ (props.children === undefined ||
82
+ !Array.isArray(props.children) ||
83
+ props.children.length < 2) &&
84
+ (props.points === undefined || props.points.length < 2) &&
85
+ props.spawner === undefined
86
+ ) {
87
+ useLogger().warn({
88
+ message:
89
+ 'Insufficient number of knots specified for spline. A spline needs at least two knots.',
90
+ remarks:
91
+ '<p>The spline won&#39;t be visible unless you specify at least two knots:</p>\n<pre class=""><code class="language-tsx">&lt;<span class="hljs-title class_">Spline</span>\n stroke=<span class="hljs-string">&quot;#fff&quot;</span>\n lineWidth={<span class="hljs-number">8</span>}\n points={[\n [<span class="hljs-number">100</span>, <span class="hljs-number">0</span>],\n [<span class="hljs-number">0</span>, <span class="hljs-number">0</span>],\n [<span class="hljs-number">0</span>, <span class="hljs-number">100</span>],\n ]}\n/&gt;</code></pre><p>For more control over the knot handles, you can alternatively provide the knots\nas children to the spline using the <code>Knot</code> component:</p>\n<pre class=""><code class="language-tsx">&lt;<span class="hljs-title class_">Spline</span> stroke=<span class="hljs-string">&quot;#fff&quot;</span> lineWidth={<span class="hljs-number">8</span>}&gt;\n <span class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">Knot</span> <span class="hljs-attr">x</span>=<span class="hljs-string">{100}</span> <span class="hljs-attr">endHandle</span>=<span class="hljs-string">{[-50,</span> <span class="hljs-attr">0</span>]} /&gt;</span></span>\n <span class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">Knot</span> /&gt;</span></span>\n <span class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">Knot</span> <span class="hljs-attr">y</span>=<span class="hljs-string">{100}</span> <span class="hljs-attr">startHandle</span>=<span class="hljs-string">{[-100,</span> <span class="hljs-attr">50</span>]} /&gt;</span></span>\n&lt;/<span class="hljs-title class_">Spline</span>&gt;</code></pre>',
92
+ inspect: this.key,
93
+ });
94
94
  }
95
- lineWidthCoefficient() {
96
- const join = this.lineJoin();
97
- let coefficient = super.lineWidthCoefficient();
98
- if (join !== 'miter') {
99
- return coefficient;
100
- }
101
- const { minSin } = this.profile();
102
- if (minSin > 0) {
103
- coefficient = Math.max(coefficient, 0.5 / minSin);
104
- }
105
- return coefficient;
95
+ }
96
+ profile() {
97
+ return getBezierSplineProfile(
98
+ this.knots(),
99
+ this.closed(),
100
+ this.smoothness(),
101
+ );
102
+ }
103
+ knots() {
104
+ const points = this.points();
105
+ if (points) {
106
+ return points.map(signal => {
107
+ const point = new Vector2(unwrap(signal));
108
+ return {
109
+ position: point,
110
+ startHandle: point,
111
+ endHandle: point,
112
+ auto: {start: 1, end: 1},
113
+ };
114
+ });
106
115
  }
107
- desiredSize() {
108
- return this.getTightBBox().size;
116
+ return this.children()
117
+ .filter(this.isKnot)
118
+ .map(knot => knot.points());
119
+ }
120
+ childrenBBox() {
121
+ const points = this.profile().segments.flatMap(segment => segment.points);
122
+ return BBox.fromPoints(...points);
123
+ }
124
+ lineWidthCoefficient() {
125
+ const join = this.lineJoin();
126
+ let coefficient = super.lineWidthCoefficient();
127
+ if (join !== 'miter') {
128
+ return coefficient;
109
129
  }
110
- offsetComputedLayout(box) {
111
- box.position = box.position.sub(this.getTightBBox().center);
112
- return box;
130
+ const {minSin} = this.profile();
131
+ if (minSin > 0) {
132
+ coefficient = Math.max(coefficient, 0.5 / minSin);
113
133
  }
114
- getTightBBox() {
115
- const bounds = this.profile().segments.map(segment => segment.getBBox());
116
- return BBox.fromBBoxes(...bounds);
134
+ return coefficient;
135
+ }
136
+ desiredSize() {
137
+ return this.getTightBBox().size;
138
+ }
139
+ offsetComputedLayout(box) {
140
+ box.position = box.position.sub(this.getTightBBox().center);
141
+ return box;
142
+ }
143
+ getTightBBox() {
144
+ const bounds = this.profile().segments.map(segment => segment.getBBox());
145
+ return BBox.fromBBoxes(...bounds);
146
+ }
147
+ drawOverlay(context, matrix) {
148
+ const size = this.computedSize();
149
+ const box = this.childrenBBox().transformCorners(matrix);
150
+ const offset = size.mul(this.offset()).scale(0.5).transformAsPoint(matrix);
151
+ const segments = this.profile().segments;
152
+ context.lineWidth = 1;
153
+ context.strokeStyle = 'white';
154
+ context.fillStyle = 'white';
155
+ const splinePath = new Path2D();
156
+ // Draw the actual spline first so that all control points get drawn on top of it.
157
+ for (let i = 0; i < segments.length; i++) {
158
+ const segment = segments[i];
159
+ const [from, startHandle, endHandle, to] =
160
+ segment.transformPoints(matrix);
161
+ moveTo(splinePath, from);
162
+ if (segment instanceof CubicBezierSegment) {
163
+ bezierCurveTo(splinePath, startHandle, endHandle, to);
164
+ } else {
165
+ quadraticCurveTo(splinePath, startHandle, endHandle);
166
+ }
117
167
  }
118
- drawOverlay(context, matrix) {
119
- const size = this.computedSize();
120
- const box = this.childrenBBox().transformCorners(matrix);
121
- const offset = size.mul(this.offset()).scale(0.5).transformAsPoint(matrix);
122
- const segments = this.profile().segments;
123
- context.lineWidth = 1;
124
- context.strokeStyle = 'white';
125
- context.fillStyle = 'white';
126
- const splinePath = new Path2D();
127
- // Draw the actual spline first so that all control points get drawn on top of it.
128
- for (let i = 0; i < segments.length; i++) {
129
- const segment = segments[i];
130
- const [from, startHandle, endHandle, to] = segment.transformPoints(matrix);
131
- moveTo(splinePath, from);
132
- if (segment instanceof CubicBezierSegment) {
133
- bezierCurveTo(splinePath, startHandle, endHandle, to);
134
- }
135
- else {
136
- quadraticCurveTo(splinePath, startHandle, endHandle);
137
- }
138
- }
139
- context.stroke(splinePath);
140
- for (let i = 0; i < segments.length; i++) {
141
- const segment = segments[i];
142
- context.fillStyle = 'white';
143
- const [from, startHandle, endHandle, to] = segment.transformPoints(matrix);
144
- const handlePath = new Path2D();
145
- context.globalAlpha = 0.5;
146
- // Line from p0 to p1
147
- moveTo(handlePath, from);
148
- lineTo(handlePath, startHandle);
149
- if (segment instanceof CubicBezierSegment) {
150
- // Line from p2 to p3
151
- moveTo(handlePath, endHandle);
152
- lineTo(handlePath, to);
153
- context.beginPath();
154
- context.stroke(handlePath);
155
- }
156
- else {
157
- // Line from p1 to p2
158
- lineTo(handlePath, endHandle);
159
- context.beginPath();
160
- context.stroke(handlePath);
161
- }
162
- context.globalAlpha = 1;
163
- context.lineWidth = 2;
164
- // Draw first point of segment
165
- moveTo(context, from);
166
- context.beginPath();
167
- arc(context, from, 4);
168
- context.closePath();
169
- context.stroke();
170
- context.fill();
171
- // Draw final point of segment only if we're on the last segment.
172
- // Otherwise, it will get drawn as the start point of the next segment.
173
- if (i === segments.length - 1) {
174
- if (to !== undefined) {
175
- moveTo(context, to);
176
- context.beginPath();
177
- arc(context, to, 4);
178
- context.closePath();
179
- context.stroke();
180
- context.fill();
181
- }
182
- }
183
- // Draw the control points
184
- context.fillStyle = 'black';
185
- for (const point of [startHandle, endHandle]) {
186
- if (point.magnitude > 0) {
187
- moveTo(context, point);
188
- context.beginPath();
189
- arc(context, point, 4);
190
- context.closePath();
191
- context.fill();
192
- context.stroke();
193
- }
194
- }
195
- }
196
- context.lineWidth = 1;
168
+ context.stroke(splinePath);
169
+ for (let i = 0; i < segments.length; i++) {
170
+ const segment = segments[i];
171
+ context.fillStyle = 'white';
172
+ const [from, startHandle, endHandle, to] =
173
+ segment.transformPoints(matrix);
174
+ const handlePath = new Path2D();
175
+ context.globalAlpha = 0.5;
176
+ // Line from p0 to p1
177
+ moveTo(handlePath, from);
178
+ lineTo(handlePath, startHandle);
179
+ if (segment instanceof CubicBezierSegment) {
180
+ // Line from p2 to p3
181
+ moveTo(handlePath, endHandle);
182
+ lineTo(handlePath, to);
197
183
  context.beginPath();
198
- drawPivot(context, offset);
199
- context.stroke();
184
+ context.stroke(handlePath);
185
+ } else {
186
+ // Line from p1 to p2
187
+ lineTo(handlePath, endHandle);
200
188
  context.beginPath();
201
- drawLine(context, box);
202
- context.closePath();
203
- context.stroke();
204
- }
205
- isKnot(node) {
206
- return node instanceof Knot;
189
+ context.stroke(handlePath);
190
+ }
191
+ context.globalAlpha = 1;
192
+ context.lineWidth = 2;
193
+ // Draw first point of segment
194
+ moveTo(context, from);
195
+ context.beginPath();
196
+ arc(context, from, 4);
197
+ context.closePath();
198
+ context.stroke();
199
+ context.fill();
200
+ // Draw final point of segment only if we're on the last segment.
201
+ // Otherwise, it will get drawn as the start point of the next segment.
202
+ if (i === segments.length - 1) {
203
+ if (to !== undefined) {
204
+ moveTo(context, to);
205
+ context.beginPath();
206
+ arc(context, to, 4);
207
+ context.closePath();
208
+ context.stroke();
209
+ context.fill();
210
+ }
211
+ }
212
+ // Draw the control points
213
+ context.fillStyle = 'black';
214
+ for (const point of [startHandle, endHandle]) {
215
+ if (point.magnitude > 0) {
216
+ moveTo(context, point);
217
+ context.beginPath();
218
+ arc(context, point, 4);
219
+ context.closePath();
220
+ context.fill();
221
+ context.stroke();
222
+ }
223
+ }
207
224
  }
225
+ context.lineWidth = 1;
226
+ context.beginPath();
227
+ drawPivot(context, offset);
228
+ context.stroke();
229
+ context.beginPath();
230
+ drawLine(context, box);
231
+ context.closePath();
232
+ context.stroke();
233
+ }
234
+ isKnot(node) {
235
+ return node instanceof Knot;
236
+ }
208
237
  }
209
- __decorate([
210
- initial(0.4),
211
- signal()
212
- ], Spline.prototype, "smoothness", void 0);
213
- __decorate([
214
- initial(null),
215
- signal()
216
- ], Spline.prototype, "points", void 0);
217
- __decorate([
218
- computed()
219
- ], Spline.prototype, "profile", null);
220
- __decorate([
221
- computed()
222
- ], Spline.prototype, "knots", null);
223
- __decorate([
224
- computed()
225
- ], Spline.prototype, "childrenBBox", null);
226
- __decorate([
227
- computed()
228
- ], Spline.prototype, "getTightBBox", null);
229
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL1NwbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ0wsSUFBSSxFQUtKLE9BQU8sRUFDUCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsc0JBQXNCLEdBQ3ZCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsR0FBRyxFQUNILGFBQWEsRUFDYixRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sZ0JBQWdCLEdBQ2pCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxLQUFLLEVBQWEsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQWdCNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNILE1BQU0sT0FBTyxNQUFPLFNBQVEsS0FBSztJQTJCL0IsWUFBbUIsS0FBa0I7UUFDbkMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFDRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUztZQUMzQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUM5QixLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDdkQsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQzNCLENBQUM7WUFDRCxT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
238
+ __decorate([initial(0.4), signal()], Spline.prototype, 'smoothness', void 0);
239
+ __decorate([initial(null), signal()], Spline.prototype, 'points', void 0);
240
+ __decorate([computed()], Spline.prototype, 'profile', null);
241
+ __decorate([computed()], Spline.prototype, 'knots', null);
242
+ __decorate([computed()], Spline.prototype, 'childrenBBox', null);
243
+ __decorate([computed()], Spline.prototype, 'getTightBBox', null);
244
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3BsaW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jb21wb25lbnRzL1NwbGluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQ0wsSUFBSSxFQUtKLE9BQU8sRUFDUCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFDTCxrQkFBa0IsRUFHbEIsc0JBQXNCLEdBQ3ZCLE1BQU0sV0FBVyxDQUFDO0FBRW5CLE9BQU8sRUFBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV4RCxPQUFPLEVBQ0wsR0FBRyxFQUNILGFBQWEsRUFDYixRQUFRLEVBQ1IsU0FBUyxFQUNULE1BQU0sRUFDTixNQUFNLEVBQ04sZ0JBQWdCLEdBQ2pCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBQyxLQUFLLEVBQWEsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLFFBQVEsQ0FBQztBQWdCNUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQTBDRztBQUNILE1BQU0sT0FBTyxNQUFPLFNBQVEsS0FBSztJQTJCL0IsWUFBbUIsS0FBa0I7UUFDbkMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWIsSUFDRSxDQUFDLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUztZQUMzQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQztZQUM5QixLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDNUIsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLFNBQVMsSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDdkQsS0FBSyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQzNCLENBQUM7WUFDRCxT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
@@ -1,51 +1,62 @@
1
- import { InterpolationFunction, SignalValue, SimpleSignal, ThreadGenerator, TimingFunction } from '@revideo/core';
2
- import { Node } from './Node';
3
- import { Shape, ShapeProps } from './Shape';
4
- import { TxtLeaf } from './TxtLeaf';
5
- import { ComponentChildren } from './types';
1
+ import {
2
+ InterpolationFunction,
3
+ SignalValue,
4
+ SimpleSignal,
5
+ ThreadGenerator,
6
+ TimingFunction,
7
+ } from '@revideo/core';
8
+ import {Node} from './Node';
9
+ import {Shape, ShapeProps} from './Shape';
10
+ import {TxtLeaf} from './TxtLeaf';
11
+ import {ComponentChildren} from './types';
6
12
  type TxtChildren = string | Node | (string | Node)[];
7
13
  type AnyTxt = Txt | TxtLeaf;
8
14
  export interface TxtProps extends ShapeProps {
9
- children?: TxtChildren;
10
- text?: SignalValue<string>;
15
+ children?: TxtChildren;
16
+ text?: SignalValue<string>;
11
17
  }
12
18
  export declare class Txt extends Shape {
13
- /**
14
- * Create a bold text node.
15
- *
16
- * @remarks
17
- * This is a shortcut for
18
- * ```tsx
19
- * <Txt fontWeight={700} />
20
- * ```
21
- *
22
- * @param props - Additional text properties.
23
- */
24
- static b(props: TxtProps): Txt;
25
- /**
26
- * Create an italic text node.
27
- *
28
- * @remarks
29
- * This is a shortcut for
30
- * ```tsx
31
- * <Txt fontStyle={'italic'} />
32
- * ```
33
- *
34
- * @param props - Additional text properties.
35
- */
36
- static i(props: TxtProps): Txt;
37
- readonly text: SimpleSignal<string, this>;
38
- protected getText(): string;
39
- protected setText(value: SignalValue<string>): void;
40
- protected setChildren(value: SignalValue<ComponentChildren>): void;
41
- protected tweenText(value: SignalValue<string>, time: number, timingFunction: TimingFunction, interpolationFunction: InterpolationFunction<string>): ThreadGenerator;
42
- protected getLayout(): boolean;
43
- constructor({ children, text, ...props }: TxtProps);
44
- protected innerText(): string;
45
- protected parentTxt(): Txt | null;
46
- protected parseChildren(children: ComponentChildren): AnyTxt[];
47
- protected applyFlex(): void;
48
- protected draw(context: CanvasRenderingContext2D): void;
19
+ /**
20
+ * Create a bold text node.
21
+ *
22
+ * @remarks
23
+ * This is a shortcut for
24
+ * ```tsx
25
+ * <Txt fontWeight={700} />
26
+ * ```
27
+ *
28
+ * @param props - Additional text properties.
29
+ */
30
+ static b(props: TxtProps): Txt;
31
+ /**
32
+ * Create an italic text node.
33
+ *
34
+ * @remarks
35
+ * This is a shortcut for
36
+ * ```tsx
37
+ * <Txt fontStyle={'italic'} />
38
+ * ```
39
+ *
40
+ * @param props - Additional text properties.
41
+ */
42
+ static i(props: TxtProps): Txt;
43
+ readonly text: SimpleSignal<string, this>;
44
+ protected getText(): string;
45
+ protected setText(value: SignalValue<string>): void;
46
+ protected setChildren(value: SignalValue<ComponentChildren>): void;
47
+ protected tweenText(
48
+ value: SignalValue<string>,
49
+ time: number,
50
+ timingFunction: TimingFunction,
51
+ interpolationFunction: InterpolationFunction<string>,
52
+ ): ThreadGenerator;
53
+ protected getLayout(): boolean;
54
+ constructor({children, text, ...props}: TxtProps);
55
+ protected innerText(): string;
56
+ protected parentTxt(): Txt | null;
57
+ protected parseChildren(children: ComponentChildren): AnyTxt[];
58
+ protected applyFlex(): void;
59
+ protected draw(context: CanvasRenderingContext2D): void;
49
60
  }
50
61
  export {};
51
- //# sourceMappingURL=Txt.d.ts.map
62
+ //# sourceMappingURL=Txt.d.ts.map