@revideo/2d 0.1.10 → 0.2.1-alpha.891

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 (195) hide show
  1. package/lib/code/CodeCursor.d.ts +74 -74
  2. package/lib/code/CodeCursor.js +352 -286
  3. package/lib/code/CodeDiffer.d.ts +21 -16
  4. package/lib/code/CodeDiffer.js +39 -41
  5. package/lib/code/CodeFragment.d.ts +16 -8
  6. package/lib/code/CodeFragment.js +36 -36
  7. package/lib/code/CodeHighlighter.d.ts +59 -59
  8. package/lib/code/CodeHighlighter.js +1 -1
  9. package/lib/code/CodeMetrics.d.ts +12 -8
  10. package/lib/code/CodeMetrics.js +26 -24
  11. package/lib/code/CodeRange.d.ts +21 -5
  12. package/lib/code/CodeRange.js +131 -124
  13. package/lib/code/CodeScope.d.ts +18 -8
  14. package/lib/code/CodeScope.js +59 -61
  15. package/lib/code/CodeSelection.d.ts +9 -4
  16. package/lib/code/CodeSelection.js +8 -8
  17. package/lib/code/CodeSignal.d.ts +74 -47
  18. package/lib/code/CodeSignal.js +206 -189
  19. package/lib/code/CodeTokenizer.d.ts +1 -1
  20. package/lib/code/CodeTokenizer.js +41 -41
  21. package/lib/code/DefaultHighlightStyle.d.ts +2 -2
  22. package/lib/code/DefaultHighlightStyle.js +96 -96
  23. package/lib/code/LezerHighlighter.d.ts +21 -19
  24. package/lib/code/LezerHighlighter.js +101 -101
  25. package/lib/code/diff.d.ts +12 -9
  26. package/lib/code/diff.js +218 -205
  27. package/lib/code/extractRange.d.ts +7 -4
  28. package/lib/code/extractRange.js +79 -71
  29. package/lib/code/index.d.ts +1 -1
  30. package/lib/code/index.js +1 -1
  31. package/lib/components/Audio.d.ts +11 -11
  32. package/lib/components/Audio.js +115 -109
  33. package/lib/components/Bezier.d.ts +18 -18
  34. package/lib/components/Bezier.js +86 -75
  35. package/lib/components/Circle.d.ts +95 -90
  36. package/lib/components/Circle.js +85 -74
  37. package/lib/components/Code.d.ts +244 -211
  38. package/lib/components/Code.js +317 -269
  39. package/lib/components/CodeBlock.d.ts +109 -67
  40. package/lib/components/CodeBlock.js +414 -373
  41. package/lib/components/CubicBezier.d.ts +36 -36
  42. package/lib/components/CubicBezier.js +52 -49
  43. package/lib/components/Curve.d.ts +208 -198
  44. package/lib/components/Curve.js +270 -269
  45. package/lib/components/Grid.d.ts +47 -42
  46. package/lib/components/Grid.js +63 -56
  47. package/lib/components/Icon.d.ts +55 -50
  48. package/lib/components/Icon.js +58 -50
  49. package/lib/components/Img.d.ts +86 -79
  50. package/lib/components/Img.js +193 -181
  51. package/lib/components/Knot.d.ts +97 -78
  52. package/lib/components/Knot.js +81 -60
  53. package/lib/components/Latex.d.ts +12 -12
  54. package/lib/components/Latex.js +77 -65
  55. package/lib/components/Layout.d.ts +455 -413
  56. package/lib/components/Layout.js +666 -681
  57. package/lib/components/Line.d.ts +61 -49
  58. package/lib/components/Line.js +216 -193
  59. package/lib/components/Media.d.ts +35 -35
  60. package/lib/components/Media.js +135 -134
  61. package/lib/components/Node.d.ts +875 -830
  62. package/lib/components/Node.js +1383 -1314
  63. package/lib/components/Path.d.ts +35 -14
  64. package/lib/components/Path.js +100 -89
  65. package/lib/components/Polygon.d.ts +60 -55
  66. package/lib/components/Polygon.js +71 -66
  67. package/lib/components/QuadBezier.d.ts +29 -29
  68. package/lib/components/QuadBezier.js +50 -45
  69. package/lib/components/Ray.d.ts +28 -28
  70. package/lib/components/Ray.js +71 -64
  71. package/lib/components/Rect.d.ts +115 -108
  72. package/lib/components/Rect.js +78 -72
  73. package/lib/components/SVG.d.ts +165 -139
  74. package/lib/components/SVG.js +609 -541
  75. package/lib/components/Shape.d.ts +44 -35
  76. package/lib/components/Shape.js +112 -127
  77. package/lib/components/Spline.d.ts +46 -40
  78. package/lib/components/Spline.js +190 -175
  79. package/lib/components/Txt.d.ts +55 -44
  80. package/lib/components/Txt.js +156 -155
  81. package/lib/components/TxtLeaf.d.ts +20 -16
  82. package/lib/components/TxtLeaf.js +177 -158
  83. package/lib/components/Video.d.ts +41 -41
  84. package/lib/components/Video.js +138 -135
  85. package/lib/components/View2D.d.ts +21 -21
  86. package/lib/components/View2D.js +98 -85
  87. package/lib/components/index.d.ts +1 -1
  88. package/lib/components/index.js +1 -1
  89. package/lib/components/types.d.ts +22 -9
  90. package/lib/components/types.js +1 -1
  91. package/lib/curves/ArcSegment.d.ts +36 -24
  92. package/lib/curves/ArcSegment.js +145 -94
  93. package/lib/curves/CircleSegment.d.ts +26 -16
  94. package/lib/curves/CircleSegment.js +56 -49
  95. package/lib/curves/CubicBezierSegment.d.ts +18 -13
  96. package/lib/curves/CubicBezierSegment.js +79 -46
  97. package/lib/curves/CurveDrawingInfo.d.ts +9 -9
  98. package/lib/curves/CurveDrawingInfo.js +1 -1
  99. package/lib/curves/CurvePoint.d.ts +13 -13
  100. package/lib/curves/CurvePoint.js +1 -1
  101. package/lib/curves/CurveProfile.d.ts +5 -5
  102. package/lib/curves/CurveProfile.js +1 -1
  103. package/lib/curves/KnotInfo.d.ts +8 -8
  104. package/lib/curves/KnotInfo.js +1 -1
  105. package/lib/curves/LineSegment.d.ts +19 -14
  106. package/lib/curves/LineSegment.js +42 -42
  107. package/lib/curves/Polynomial.d.ts +110 -110
  108. package/lib/curves/Polynomial.js +249 -239
  109. package/lib/curves/Polynomial2D.d.ts +20 -20
  110. package/lib/curves/Polynomial2D.js +46 -42
  111. package/lib/curves/PolynomialSegment.d.ts +42 -37
  112. package/lib/curves/PolynomialSegment.js +83 -81
  113. package/lib/curves/QuadBezierSegment.d.ts +12 -12
  114. package/lib/curves/QuadBezierSegment.js +71 -41
  115. package/lib/curves/Segment.d.ts +12 -7
  116. package/lib/curves/Segment.js +2 -3
  117. package/lib/curves/UniformPolynomialCurveSampler.d.ts +34 -34
  118. package/lib/curves/UniformPolynomialCurveSampler.js +68 -62
  119. package/lib/curves/createCurveProfileLerp.d.ts +17 -6
  120. package/lib/curves/createCurveProfileLerp.js +211 -208
  121. package/lib/curves/getBezierSplineProfile.d.ts +8 -4
  122. package/lib/curves/getBezierSplineProfile.js +145 -101
  123. package/lib/curves/getCircleProfile.d.ts +10 -4
  124. package/lib/curves/getCircleProfile.js +72 -40
  125. package/lib/curves/getPathProfile.d.ts +2 -2
  126. package/lib/curves/getPathProfile.js +135 -112
  127. package/lib/curves/getPointAtDistance.d.ts +7 -4
  128. package/lib/curves/getPointAtDistance.js +12 -12
  129. package/lib/curves/getPolylineProfile.d.ts +8 -4
  130. package/lib/curves/getPolylineProfile.js +67 -54
  131. package/lib/curves/getRectProfile.d.ts +9 -4
  132. package/lib/curves/getRectProfile.js +117 -52
  133. package/lib/curves/index.d.ts +1 -1
  134. package/lib/curves/index.js +1 -1
  135. package/lib/decorators/canvasStyleSignal.d.ts +3 -3
  136. package/lib/decorators/canvasStyleSignal.js +10 -10
  137. package/lib/decorators/colorSignal.d.ts +1 -1
  138. package/lib/decorators/colorSignal.js +7 -7
  139. package/lib/decorators/compound.d.ts +4 -2
  140. package/lib/decorators/compound.js +43 -23
  141. package/lib/decorators/computed.d.ts +1 -1
  142. package/lib/decorators/computed.js +9 -9
  143. package/lib/decorators/defaultStyle.d.ts +5 -2
  144. package/lib/decorators/defaultStyle.js +11 -11
  145. package/lib/decorators/filtersSignal.d.ts +28 -8
  146. package/lib/decorators/filtersSignal.js +87 -64
  147. package/lib/decorators/index.d.ts +1 -1
  148. package/lib/decorators/index.js +1 -1
  149. package/lib/decorators/initializers.d.ts +5 -2
  150. package/lib/decorators/initializers.js +18 -19
  151. package/lib/decorators/nodeName.d.ts +1 -1
  152. package/lib/decorators/nodeName.js +4 -4
  153. package/lib/decorators/signal.d.ts +40 -20
  154. package/lib/decorators/signal.js +113 -104
  155. package/lib/decorators/spacingSignal.d.ts +1 -1
  156. package/lib/decorators/spacingSignal.js +13 -13
  157. package/lib/decorators/vector2Signal.d.ts +13 -7
  158. package/lib/decorators/vector2Signal.js +15 -13
  159. package/lib/index.d.ts +1 -1
  160. package/lib/index.js +1 -1
  161. package/lib/jsx-dev-runtime.d.ts +3 -3
  162. package/lib/jsx-dev-runtime.js +3 -3
  163. package/lib/jsx-runtime.d.ts +19 -9
  164. package/lib/jsx-runtime.js +18 -18
  165. package/lib/partials/Filter.d.ts +24 -16
  166. package/lib/partials/Filter.js +69 -69
  167. package/lib/partials/Gradient.d.ts +30 -24
  168. package/lib/partials/Gradient.js +69 -58
  169. package/lib/partials/Pattern.d.ts +14 -9
  170. package/lib/partials/Pattern.js +30 -24
  171. package/lib/partials/ShaderConfig.d.ts +81 -74
  172. package/lib/partials/ShaderConfig.js +22 -23
  173. package/lib/partials/index.d.ts +1 -1
  174. package/lib/partials/index.js +1 -1
  175. package/lib/partials/types.d.ts +19 -6
  176. package/lib/partials/types.js +1 -1
  177. package/lib/scenes/Scene2D.d.ts +42 -23
  178. package/lib/scenes/Scene2D.js +161 -151
  179. package/lib/scenes/index.d.ts +1 -1
  180. package/lib/scenes/index.js +1 -1
  181. package/lib/scenes/makeScene2D.d.ts +7 -5
  182. package/lib/scenes/makeScene2D.js +10 -10
  183. package/lib/scenes/useScene2D.d.ts +2 -2
  184. package/lib/scenes/useScene2D.js +3 -3
  185. package/lib/utils/CanvasUtils.d.ts +93 -21
  186. package/lib/utils/CanvasUtils.js +186 -105
  187. package/lib/utils/diff.d.ts +25 -18
  188. package/lib/utils/diff.js +84 -87
  189. package/lib/utils/index.d.ts +1 -1
  190. package/lib/utils/index.js +1 -1
  191. package/lib/utils/is.d.ts +4 -2
  192. package/lib/utils/is.js +2 -2
  193. package/lib/utils/makeSignalExtensions.d.ts +11 -4
  194. package/lib/utils/makeSignalExtensions.js +17 -17
  195. package/package.json +5 -5
@@ -1,15 +1,23 @@
1
- import { BBox, PossibleVector2, SignalValue, SimpleSignal, ThreadGenerator, TimingFunction, Vector2 } from '@revideo/core';
2
- import { CurveProfile } from '../curves';
3
- import { Curve, CurveProps } from './Curve';
1
+ import {
2
+ BBox,
3
+ PossibleVector2,
4
+ SignalValue,
5
+ SimpleSignal,
6
+ ThreadGenerator,
7
+ TimingFunction,
8
+ Vector2,
9
+ } from '@revideo/core';
10
+ import {CurveProfile} from '../curves';
11
+ import {Curve, CurveProps} from './Curve';
4
12
  export interface LineProps extends CurveProps {
5
- /**
6
- * {@inheritDoc Line.radius}
7
- */
8
- radius?: SignalValue<number>;
9
- /**
10
- * {@inheritDoc Line.points}
11
- */
12
- points?: SignalValue<SignalValue<PossibleVector2>[]>;
13
+ /**
14
+ * {@inheritDoc Line.radius}
15
+ */
16
+ radius?: SignalValue<number>;
17
+ /**
18
+ * {@inheritDoc Line.points}
19
+ */
20
+ points?: SignalValue<SignalValue<PossibleVector2>[]>;
13
21
  }
14
22
  /**
15
23
  * A node for drawing lines and polygons.
@@ -117,42 +125,46 @@ export interface LineProps extends CurveProps {
117
125
  * ```
118
126
  */
119
127
  export declare class Line extends Curve {
120
- /**
121
- * Rotate the points to minimize the overall distance traveled when tweening.
122
- *
123
- * @param points - The points to rotate.
124
- * @param reference - The reference points to which the distance is measured.
125
- * @param closed - Whether the points form a closed polygon.
126
- */
127
- private static rotatePoints;
128
- /**
129
- * Distribute additional points along the polyline.
130
- *
131
- * @param points - The points of a polyline along which new points should be
132
- * distributed.
133
- * @param count - The number of points to add.
134
- */
135
- private static distributePoints;
136
- /**
137
- * The radius of the line's corners.
138
- */
139
- readonly radius: SimpleSignal<number, this>;
140
- /**
141
- * The points of the line.
142
- *
143
- * @remarks
144
- * When set to `null`, the Line will use the positions of its children as
145
- * points.
146
- */
147
- readonly points: SimpleSignal<SignalValue<PossibleVector2>[] | null, this>;
148
- protected tweenPoints(value: SignalValue<SignalValue<PossibleVector2>[] | null>, time: number, timingFunction: TimingFunction): ThreadGenerator;
149
- private tweenedPoints;
150
- constructor(props: LineProps);
151
- protected childrenBBox(): BBox;
152
- parsedPoints(): Vector2[];
153
- profile(): CurveProfile;
154
- protected lineWidthCoefficient(): number;
155
- drawOverlay(context: CanvasRenderingContext2D, matrix: DOMMatrix): void;
156
- private parsePoints;
128
+ /**
129
+ * Rotate the points to minimize the overall distance traveled when tweening.
130
+ *
131
+ * @param points - The points to rotate.
132
+ * @param reference - The reference points to which the distance is measured.
133
+ * @param closed - Whether the points form a closed polygon.
134
+ */
135
+ private static rotatePoints;
136
+ /**
137
+ * Distribute additional points along the polyline.
138
+ *
139
+ * @param points - The points of a polyline along which new points should be
140
+ * distributed.
141
+ * @param count - The number of points to add.
142
+ */
143
+ private static distributePoints;
144
+ /**
145
+ * The radius of the line's corners.
146
+ */
147
+ readonly radius: SimpleSignal<number, this>;
148
+ /**
149
+ * The points of the line.
150
+ *
151
+ * @remarks
152
+ * When set to `null`, the Line will use the positions of its children as
153
+ * points.
154
+ */
155
+ readonly points: SimpleSignal<SignalValue<PossibleVector2>[] | null, this>;
156
+ protected tweenPoints(
157
+ value: SignalValue<SignalValue<PossibleVector2>[] | null>,
158
+ time: number,
159
+ timingFunction: TimingFunction,
160
+ ): ThreadGenerator;
161
+ private tweenedPoints;
162
+ constructor(props: LineProps);
163
+ protected childrenBBox(): BBox;
164
+ parsedPoints(): Vector2[];
165
+ profile(): CurveProfile;
166
+ protected lineWidthCoefficient(): number;
167
+ drawOverlay(context: CanvasRenderingContext2D, matrix: DOMMatrix): void;
168
+ private parsePoints;
157
169
  }
158
- //# sourceMappingURL=Line.d.ts.map
170
+ //# sourceMappingURL=Line.d.ts.map
@@ -1,17 +1,42 @@
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
- };
19
+ };
7
20
  var Line_1;
8
- import { BBox, createSignal, threadable, tween, unwrap, useLogger, Vector2, } from '@revideo/core';
9
- import { getPolylineProfile } from '../curves';
10
- import { calculateLerpDistance, polygonLength, polygonPointsLerp, } from '../curves/createCurveProfileLerp';
11
- import { computed, initial, nodeName, signal } from '../decorators';
12
- import { arc, drawLine, drawPivot, lineTo, moveTo } from '../utils';
13
- import { Curve } from './Curve';
14
- import { Layout } from './Layout';
21
+ import {
22
+ BBox,
23
+ createSignal,
24
+ threadable,
25
+ tween,
26
+ unwrap,
27
+ useLogger,
28
+ Vector2,
29
+ } from '@revideo/core';
30
+ import {getPolylineProfile} from '../curves';
31
+ import {
32
+ calculateLerpDistance,
33
+ polygonLength,
34
+ polygonPointsLerp,
35
+ } from '../curves/createCurveProfileLerp';
36
+ import {computed, initial, nodeName, signal} from '../decorators';
37
+ import {arc, drawLine, drawPivot, lineTo, moveTo} from '../utils';
38
+ import {Curve} from './Curve';
39
+ import {Layout} from './Layout';
15
40
  /**
16
41
  * A node for drawing lines and polygons.
17
42
  *
@@ -117,196 +142,194 @@ import { Layout } from './Layout';
117
142
  * });
118
143
  * ```
119
144
  */
120
- let Line = Line_1 = class Line extends Curve {
121
- /**
122
- * Rotate the points to minimize the overall distance traveled when tweening.
123
- *
124
- * @param points - The points to rotate.
125
- * @param reference - The reference points to which the distance is measured.
126
- * @param closed - Whether the points form a closed polygon.
127
- */
128
- static rotatePoints(points, reference, closed) {
129
- if (closed) {
130
- let minDistance = Infinity;
131
- let bestOffset = 0;
132
- for (let offset = 0; offset < points.length; offset += 1) {
133
- const distance = calculateLerpDistance(points, reference, offset);
134
- if (distance < minDistance) {
135
- minDistance = distance;
136
- bestOffset = offset;
137
- }
138
- }
139
- if (bestOffset) {
140
- const spliced = points.splice(0, bestOffset);
141
- points.splice(points.length, 0, ...spliced);
142
- }
143
- }
144
- else {
145
- const originalDistance = calculateLerpDistance(points, reference, 0);
146
- const reversedPoints = [...points].reverse();
147
- const reversedDistance = calculateLerpDistance(reversedPoints, reference, 0);
148
- if (reversedDistance < originalDistance) {
149
- points.reverse();
150
- }
151
- }
152
- }
153
- /**
154
- * Distribute additional points along the polyline.
155
- *
156
- * @param points - The points of a polyline along which new points should be
157
- * distributed.
158
- * @param count - The number of points to add.
159
- */
160
- static distributePoints(points, count) {
161
- if (points.length === 0) {
162
- for (let j = 0; j < count; j++) {
163
- points.push(Vector2.zero);
164
- }
165
- return;
166
- }
167
- if (points.length === 1) {
168
- const point = points[0];
169
- for (let j = 0; j < count; j++) {
170
- points.push(point);
171
- }
172
- return;
173
- }
174
- const desiredLength = points.length + count;
175
- const arcLength = polygonLength(points);
176
- let density = count / arcLength;
177
- let i = 0;
178
- while (points.length < desiredLength) {
179
- const pointsLeft = desiredLength - points.length;
180
- if (i + 1 >= points.length) {
181
- density = pointsLeft / arcLength;
182
- i = 0;
183
- continue;
184
- }
185
- const a = points[i];
186
- const b = points[i + 1];
187
- const length = a.sub(b).magnitude;
188
- const pointCount = Math.min(Math.round(length * density), pointsLeft) + 1;
189
- for (let j = 1; j < pointCount; j++) {
190
- points.splice(++i, 0, Vector2.lerp(a, b, j / pointCount));
191
- }
192
- i++;
145
+ let Line = (Line_1 = class Line extends Curve {
146
+ /**
147
+ * Rotate the points to minimize the overall distance traveled when tweening.
148
+ *
149
+ * @param points - The points to rotate.
150
+ * @param reference - The reference points to which the distance is measured.
151
+ * @param closed - Whether the points form a closed polygon.
152
+ */
153
+ static rotatePoints(points, reference, closed) {
154
+ if (closed) {
155
+ let minDistance = Infinity;
156
+ let bestOffset = 0;
157
+ for (let offset = 0; offset < points.length; offset += 1) {
158
+ const distance = calculateLerpDistance(points, reference, offset);
159
+ if (distance < minDistance) {
160
+ minDistance = distance;
161
+ bestOffset = offset;
193
162
  }
163
+ }
164
+ if (bestOffset) {
165
+ const spliced = points.splice(0, bestOffset);
166
+ points.splice(points.length, 0, ...spliced);
167
+ }
168
+ } else {
169
+ const originalDistance = calculateLerpDistance(points, reference, 0);
170
+ const reversedPoints = [...points].reverse();
171
+ const reversedDistance = calculateLerpDistance(
172
+ reversedPoints,
173
+ reference,
174
+ 0,
175
+ );
176
+ if (reversedDistance < originalDistance) {
177
+ points.reverse();
178
+ }
194
179
  }
195
- *tweenPoints(value, time, timingFunction) {
196
- const fromPoints = [...this.parsedPoints()];
197
- const toPoints = this.parsePoints(unwrap(value));
198
- const closed = this.closed();
199
- const diff = fromPoints.length - toPoints.length;
200
- Line_1.distributePoints(diff < 0 ? fromPoints : toPoints, Math.abs(diff));
201
- Line_1.rotatePoints(toPoints, fromPoints, closed);
202
- this.tweenedPoints(fromPoints);
203
- yield* tween(time, value => {
204
- const progress = timingFunction(value);
205
- this.tweenedPoints(polygonPointsLerp(fromPoints, toPoints, progress));
206
- }, () => {
207
- this.tweenedPoints(null);
208
- this.points(value);
209
- });
180
+ }
181
+ /**
182
+ * Distribute additional points along the polyline.
183
+ *
184
+ * @param points - The points of a polyline along which new points should be
185
+ * distributed.
186
+ * @param count - The number of points to add.
187
+ */
188
+ static distributePoints(points, count) {
189
+ if (points.length === 0) {
190
+ for (let j = 0; j < count; j++) {
191
+ points.push(Vector2.zero);
192
+ }
193
+ return;
210
194
  }
211
- constructor(props) {
212
- super(props);
213
- this.tweenedPoints = createSignal(null);
214
- if (props.children === undefined && props.points === undefined) {
215
- useLogger().warn({
216
- message: 'No points specified for the line',
217
- remarks: "<p>The line won&#39;t be visible unless you specify at least two points:</p>\n<pre class=\"\"><code class=\"language-tsx\">&lt;<span class=\"hljs-title class_\">Line</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>Alternatively, you can define the points using the children:</p>\n<pre class=\"\"><code class=\"language-tsx\">&lt;<span class=\"hljs-title class_\">Line</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\">Node</span> <span class=\"hljs-attr\">x</span>=<span class=\"hljs-string\">{100}</span> /&gt;</span></span>\n <span class=\"language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Node</span> /&gt;</span></span>\n <span class=\"language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">Node</span> <span class=\"hljs-attr\">y</span>=<span class=\"hljs-string\">{100}</span> /&gt;</span></span>\n&lt;/<span class=\"hljs-title class_\">Line</span>&gt;</code></pre><p>If you did this intentionally, and want to disable this message, set the\n<code>points</code> property to <code>null</code>:</p>\n<pre class=\"\"><code class=\"language-tsx\">&lt;<span class=\"hljs-title class_\">Line</span> stroke=<span class=\"hljs-string\">&quot;#fff&quot;</span> lineWidth={<span class=\"hljs-number\">8</span>} points={<span class=\"hljs-literal\">null</span>} /&gt;</code></pre>",
218
- inspect: this.key,
219
- });
220
- }
195
+ if (points.length === 1) {
196
+ const point = points[0];
197
+ for (let j = 0; j < count; j++) {
198
+ points.push(point);
199
+ }
200
+ return;
221
201
  }
222
- childrenBBox() {
223
- let points = this.tweenedPoints();
224
- if (!points) {
225
- const custom = this.points();
226
- points = custom
227
- ? custom.map(signal => new Vector2(unwrap(signal)))
228
- : this.children()
229
- .filter(child => !(child instanceof Layout) || child.isLayoutRoot())
230
- .map(child => child.position());
231
- }
232
- return BBox.fromPoints(...points);
202
+ const desiredLength = points.length + count;
203
+ const arcLength = polygonLength(points);
204
+ let density = count / arcLength;
205
+ let i = 0;
206
+ while (points.length < desiredLength) {
207
+ const pointsLeft = desiredLength - points.length;
208
+ if (i + 1 >= points.length) {
209
+ density = pointsLeft / arcLength;
210
+ i = 0;
211
+ continue;
212
+ }
213
+ const a = points[i];
214
+ const b = points[i + 1];
215
+ const length = a.sub(b).magnitude;
216
+ const pointCount = Math.min(Math.round(length * density), pointsLeft) + 1;
217
+ for (let j = 1; j < pointCount; j++) {
218
+ points.splice(++i, 0, Vector2.lerp(a, b, j / pointCount));
219
+ }
220
+ i++;
233
221
  }
234
- parsedPoints() {
235
- return this.parsePoints(this.points());
222
+ }
223
+ *tweenPoints(value, time, timingFunction) {
224
+ const fromPoints = [...this.parsedPoints()];
225
+ const toPoints = this.parsePoints(unwrap(value));
226
+ const closed = this.closed();
227
+ const diff = fromPoints.length - toPoints.length;
228
+ Line_1.distributePoints(diff < 0 ? fromPoints : toPoints, Math.abs(diff));
229
+ Line_1.rotatePoints(toPoints, fromPoints, closed);
230
+ this.tweenedPoints(fromPoints);
231
+ yield* tween(
232
+ time,
233
+ value => {
234
+ const progress = timingFunction(value);
235
+ this.tweenedPoints(polygonPointsLerp(fromPoints, toPoints, progress));
236
+ },
237
+ () => {
238
+ this.tweenedPoints(null);
239
+ this.points(value);
240
+ },
241
+ );
242
+ }
243
+ constructor(props) {
244
+ super(props);
245
+ this.tweenedPoints = createSignal(null);
246
+ if (props.children === undefined && props.points === undefined) {
247
+ useLogger().warn({
248
+ message: 'No points specified for the line',
249
+ remarks:
250
+ '<p>The line won&#39;t be visible unless you specify at least two points:</p>\n<pre class=""><code class="language-tsx">&lt;<span class="hljs-title class_">Line</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>Alternatively, you can define the points using the children:</p>\n<pre class=""><code class="language-tsx">&lt;<span class="hljs-title class_">Line</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">Node</span> <span class="hljs-attr">x</span>=<span class="hljs-string">{100}</span> /&gt;</span></span>\n <span class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">Node</span> /&gt;</span></span>\n <span class="language-xml"><span class="hljs-tag">&lt;<span class="hljs-name">Node</span> <span class="hljs-attr">y</span>=<span class="hljs-string">{100}</span> /&gt;</span></span>\n&lt;/<span class="hljs-title class_">Line</span>&gt;</code></pre><p>If you did this intentionally, and want to disable this message, set the\n<code>points</code> property to <code>null</code>:</p>\n<pre class=""><code class="language-tsx">&lt;<span class="hljs-title class_">Line</span> stroke=<span class="hljs-string">&quot;#fff&quot;</span> lineWidth={<span class="hljs-number">8</span>} points={<span class="hljs-literal">null</span>} /&gt;</code></pre>',
251
+ inspect: this.key,
252
+ });
236
253
  }
237
- profile() {
238
- return getPolylineProfile(this.tweenedPoints() ?? this.parsedPoints(), this.radius(), this.closed());
254
+ }
255
+ childrenBBox() {
256
+ let points = this.tweenedPoints();
257
+ if (!points) {
258
+ const custom = this.points();
259
+ points = custom
260
+ ? custom.map(signal => new Vector2(unwrap(signal)))
261
+ : this.children()
262
+ .filter(child => !(child instanceof Layout) || child.isLayoutRoot())
263
+ .map(child => child.position());
239
264
  }
240
- lineWidthCoefficient() {
241
- const radius = this.radius();
242
- const join = this.lineJoin();
243
- let coefficient = super.lineWidthCoefficient();
244
- if (radius === 0 && join === 'miter') {
245
- const { minSin } = this.profile();
246
- if (minSin > 0) {
247
- coefficient = Math.max(coefficient, 0.5 / minSin);
248
- }
249
- }
250
- return coefficient;
265
+ return BBox.fromPoints(...points);
266
+ }
267
+ parsedPoints() {
268
+ return this.parsePoints(this.points());
269
+ }
270
+ profile() {
271
+ return getPolylineProfile(
272
+ this.tweenedPoints() ?? this.parsedPoints(),
273
+ this.radius(),
274
+ this.closed(),
275
+ );
276
+ }
277
+ lineWidthCoefficient() {
278
+ const radius = this.radius();
279
+ const join = this.lineJoin();
280
+ let coefficient = super.lineWidthCoefficient();
281
+ if (radius === 0 && join === 'miter') {
282
+ const {minSin} = this.profile();
283
+ if (minSin > 0) {
284
+ coefficient = Math.max(coefficient, 0.5 / minSin);
285
+ }
251
286
  }
252
- drawOverlay(context, matrix) {
253
- const box = this.childrenBBox().transformCorners(matrix);
254
- const size = this.computedSize();
255
- const offset = size.mul(this.offset()).scale(0.5).transformAsPoint(matrix);
256
- context.fillStyle = 'white';
257
- context.strokeStyle = 'black';
258
- context.lineWidth = 1;
259
- const path = new Path2D();
260
- const points = (this.tweenedPoints() ?? this.parsedPoints()).map(point => point.transformAsPoint(matrix));
261
- if (points.length > 0) {
262
- moveTo(path, points[0]);
263
- for (const point of points) {
264
- lineTo(path, point);
265
- context.beginPath();
266
- arc(context, point, 4);
267
- context.closePath();
268
- context.fill();
269
- context.stroke();
270
- }
271
- }
272
- context.strokeStyle = 'white';
273
- context.stroke(path);
287
+ return coefficient;
288
+ }
289
+ drawOverlay(context, matrix) {
290
+ const box = this.childrenBBox().transformCorners(matrix);
291
+ const size = this.computedSize();
292
+ const offset = size.mul(this.offset()).scale(0.5).transformAsPoint(matrix);
293
+ context.fillStyle = 'white';
294
+ context.strokeStyle = 'black';
295
+ context.lineWidth = 1;
296
+ const path = new Path2D();
297
+ const points = (this.tweenedPoints() ?? this.parsedPoints()).map(point =>
298
+ point.transformAsPoint(matrix),
299
+ );
300
+ if (points.length > 0) {
301
+ moveTo(path, points[0]);
302
+ for (const point of points) {
303
+ lineTo(path, point);
274
304
  context.beginPath();
275
- drawPivot(context, offset);
276
- context.stroke();
277
- context.beginPath();
278
- drawLine(context, box);
305
+ arc(context, point, 4);
279
306
  context.closePath();
307
+ context.fill();
280
308
  context.stroke();
309
+ }
281
310
  }
282
- parsePoints(points) {
283
- return points
284
- ? points.map(signal => new Vector2(unwrap(signal)))
285
- : this.children().map(child => child.position());
286
- }
287
- };
288
- __decorate([
289
- initial(0),
290
- signal()
291
- ], Line.prototype, "radius", void 0);
292
- __decorate([
293
- initial(null),
294
- signal()
295
- ], Line.prototype, "points", void 0);
296
- __decorate([
297
- threadable()
298
- ], Line.prototype, "tweenPoints", null);
299
- __decorate([
300
- computed()
301
- ], Line.prototype, "childrenBBox", null);
302
- __decorate([
303
- computed()
304
- ], Line.prototype, "parsedPoints", null);
305
- __decorate([
306
- computed()
307
- ], Line.prototype, "profile", null);
308
- Line = Line_1 = __decorate([
309
- nodeName('Line')
310
- ], Line);
311
- export { Line };
312
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9MaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsSUFBSSxFQUNKLFlBQVksRUFJWixVQUFVLEVBR1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsT0FBTyxHQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBZSxrQkFBa0IsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMzRCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRWxFLE9BQU8sRUFBQyxLQUFLLEVBQWEsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQWFoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3R0c7QUFFSSxJQUFNLElBQUksWUFBVixNQUFNLElBQUssU0FBUSxLQUFLO0lBQzdCOzs7Ozs7T0FNRztJQUNLLE1BQU0sQ0FBQyxZQUFZLENBQ3pCLE1BQWlCLEVBQ2pCLFNBQW9CLEVBQ3BCLE1BQWU7UUFFZixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDO1lBQzNCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNuQixLQUFLLElBQUksTUFB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
311
+ context.strokeStyle = 'white';
312
+ context.stroke(path);
313
+ context.beginPath();
314
+ drawPivot(context, offset);
315
+ context.stroke();
316
+ context.beginPath();
317
+ drawLine(context, box);
318
+ context.closePath();
319
+ context.stroke();
320
+ }
321
+ parsePoints(points) {
322
+ return points
323
+ ? points.map(signal => new Vector2(unwrap(signal)))
324
+ : this.children().map(child => child.position());
325
+ }
326
+ });
327
+ __decorate([initial(0), signal()], Line.prototype, 'radius', void 0);
328
+ __decorate([initial(null), signal()], Line.prototype, 'points', void 0);
329
+ __decorate([threadable()], Line.prototype, 'tweenPoints', null);
330
+ __decorate([computed()], Line.prototype, 'childrenBBox', null);
331
+ __decorate([computed()], Line.prototype, 'parsedPoints', null);
332
+ __decorate([computed()], Line.prototype, 'profile', null);
333
+ Line = Line_1 = __decorate([nodeName('Line')], Line);
334
+ export {Line};
335
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGluZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY29tcG9uZW50cy9MaW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQSxPQUFPLEVBQ0wsSUFBSSxFQUNKLFlBQVksRUFJWixVQUFVLEVBR1YsS0FBSyxFQUNMLE1BQU0sRUFDTixTQUFTLEVBQ1QsT0FBTyxHQUNSLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBZSxrQkFBa0IsRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUMzRCxPQUFPLEVBQ0wscUJBQXFCLEVBQ3JCLGFBQWEsRUFDYixpQkFBaUIsR0FDbEIsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxQyxPQUFPLEVBQUMsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBRWxFLE9BQU8sRUFBQyxLQUFLLEVBQWEsTUFBTSxTQUFTLENBQUM7QUFDMUMsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLFVBQVUsQ0FBQztBQWFoQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3R0c7QUFFSSxJQUFNLElBQUksWUFBVixNQUFNLElBQUssU0FBUSxLQUFLO0lBQzdCOzs7Ozs7T0FNRztJQUNLLE1BQU0sQ0FBQyxZQUFZLENBQ3pCLE1BQWlCLEVBQ2pCLFNBQW9CLEVBQ3BCLE1BQWU7UUFFZixJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxXQUFXLEdBQUcsUUFBUSxDQUFDO1lBQzNCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztZQUNuQixLQUFLLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxDQUFDLENBQUM7Z0JBQ2xFLElBQUksUUFBUSxHQUFHLFdBQVcsRUFBRSxDQUFDO29CQUMzQixXQUFXLEdBQUcsUUFBUSxDQUFDO29CQUN2QixVQUFVLEdBQUcsTUFBTSxDQUFDO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQztZQUVELElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBQzdDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztZQUM5QyxDQUFDO1FBQ0gsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLGdCQUFnQixHQUFHLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckUsTUFBTSxjQUFjLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQzdDLE1BQU0sZ0JBQWdCLEdBQUcscUJBQXFCLENBQzVDLGNBQWMsRUFDZCxTQUFTLEVBQ1QsQ0FBQyxDQUNGLENBQUM7WUFDRixJQUFJLGdCQUFnQixHQUFHLGdCQUFnQixFQUFFLENBQUM7Z0JBQ3hDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBaUIsRUFBRSxLQUFhO1FBQzlELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQy9CLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELElBQUksTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUN4QixNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUMvQixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3JCLENBQUM7WUFDRCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQzVDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN4QyxJQUFJLE9BQU8sR0FBRyxLQUFLLEdBQUcsU0FBUyxDQUFDO1FBRWhDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNWLE9BQU8sTUFBTSxDQUFDLE1BQU0sR0FBRyxhQUFhLEVBQUUsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxhQUFhLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQztZQUVqRCxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUMzQixPQUFPLEdBQUcsVUFBVSxHQUFHLFNBQVMsQ0FBQztnQkFDakMsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDTixTQUFTO1lBQ1gsQ0FBQztZQUVELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNwQixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLE1BQU0sTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQ2xDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLEVBQUUsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBRTFFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztnQkFDcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1lBQzVELENBQUM7WUFFRCxDQUFDLEVBQUUsQ0FBQztRQUNOLENBQUM7SUFDSCxDQUFDO0lBd0JVLEFBQUQsQ0FBQyxXQUFXLENBQ3BCLEtBQXlELEVBQ3pELElBQVksRUFDWixjQUE4QjtRQUU5QixNQUFNLFVBQVUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUM7UUFDNUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNqRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFFN0IsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO1FBQ2pELE1BQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEUsTUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRWhELElBQUksQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDL0IsS0FBSyxDQUFDLENBQUMsS0FBSyxDQUNWLElBQUksRUFDSixLQUFLLENBQUMsRUFBRTtZQUNOLE1BQU0sUUFBUSxHQUFHLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxRQUFRLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN4RSxDQUFDLEVBQ0QsR0FBRyxFQUFFO1lBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JCLENBQUMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUlELFlBQW1CLEtBQWdCO1FBQ2pDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUhQLGtCQUFhLEdBQUcsWUFBWSxDQUFtQixJQUFJLENBQUMsQ0FBQztRQUszRCxJQUFJLEtBQUssQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDL0QsU0FBUyxFQUFFLENBQUMsSUFBSSxDQUFDO2dCQUNmLE9BQU8sRUFBRSxrQ0FBa0M7Z0JBQzNDLE9BQU8sK3lEQUFtQjtnQkFDMUIsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHO2FBQ2xCLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBR1MsWUFBWTtRQUNwQixJQUFJLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1osTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzdCLE1BQU0sR0FBRyxNQUFNO2dCQUNiLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFO3FCQUNaLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLFlBQVksTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDLFlBQVksRUFBRSxDQUFDO3FCQUNuRSxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUN4QyxDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUdNLFlBQVk7UUFDakIsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFHZSxPQUFPO1FBQ3JCLE9BQU8sa0JBQWtCLENBQ3ZCLElBQUksQ0FBQyxhQUFhLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLEVBQzNDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFDYixJQUFJLENBQUMsTUFBTSxFQUFFLENBQ2QsQ0FBQztJQUNKLENBQUM7SUFFa0Isb0JBQW9CO1FBQ3JDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFN0IsSUFBSSxXQUFXLEdBQUcsS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFFL0MsSUFBSSxNQUFNLEtBQUssQ0FBQyxJQUFJLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUNyQyxNQUFNLEVBQUMsTUFBTSxFQUFDLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2hDLElBQUksTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNmLFdBQVcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7WUFDcEQsQ0FBQztRQUNILENBQUM7UUFFRCxPQUFPLFdBQVcsQ0FBQztJQUNyQixDQUFDO0lBRWUsV0FBVyxDQUN6QixPQUFpQyxFQUNqQyxNQUFpQjtRQUVqQixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekQsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2pDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRTNFLE9BQU8sQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDO1FBQzVCLE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1FBQzlCLE9BQU8sQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBRXRCLE1BQU0sSUFBSSxHQUFHLElBQUksTUFBTSxFQUFFLENBQUM7UUFDMUIsTUFBTSxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQ3ZFLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FDL0IsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUN0QixNQUFNLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3hCLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7Z0JBQzNCLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQ3BCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsR0FBRyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDcEIsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNmLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1FBQzlCLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckIsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3BCLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDM0IsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBRWpCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQixRQUFRLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQ3ZCLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNwQixPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVPLFdBQVcsQ0FBQyxNQUE2QztRQUMvRCxPQUFPLE1BQU07WUFDWCxDQUFDLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ25ELENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDckQsQ0FBQztDQUNGLENBQUE7QUFySnlCO0lBRnZCLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDVixNQUFNLEVBQUU7b0NBQ2tEO0FBV25DO0lBRnZCLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDYixNQUFNLEVBQUU7b0NBSVA7QUFHUztJQURWLFVBQVUsRUFBRTt1Q0EwQlo7QUFpQlM7SUFEVCxRQUFRLEVBQUU7d0NBYVY7QUFHTTtJQUROLFFBQVEsRUFBRTt3Q0FHVjtBQUdlO0lBRGYsUUFBUSxFQUFFO21DQU9WO0FBdExVLElBQUk7SUFEaEIsUUFBUSxDQUFDLE1BQU0sQ0FBQztHQUNKLElBQUksQ0FzUGhCIn0=