@twick/2d 0.11.0

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 (537) hide show
  1. package/LICENSE +21 -0
  2. package/editor/editor/NodeInspectorConfig.d.ts +3 -0
  3. package/editor/editor/NodeInspectorConfig.d.ts.map +1 -0
  4. package/editor/editor/PreviewOverlayConfig.d.ts +3 -0
  5. package/editor/editor/PreviewOverlayConfig.d.ts.map +1 -0
  6. package/editor/editor/Provider.d.ts +17 -0
  7. package/editor/editor/Provider.d.ts.map +1 -0
  8. package/editor/editor/SceneGraphTabConfig.d.ts +3 -0
  9. package/editor/editor/SceneGraphTabConfig.d.ts.map +1 -0
  10. package/editor/editor/icons/CircleIcon.d.ts +2 -0
  11. package/editor/editor/icons/CircleIcon.d.ts.map +1 -0
  12. package/editor/editor/icons/CodeBlockIcon.d.ts +2 -0
  13. package/editor/editor/icons/CodeBlockIcon.d.ts.map +1 -0
  14. package/editor/editor/icons/CurveIcon.d.ts +2 -0
  15. package/editor/editor/icons/CurveIcon.d.ts.map +1 -0
  16. package/editor/editor/icons/GridIcon.d.ts +2 -0
  17. package/editor/editor/icons/GridIcon.d.ts.map +1 -0
  18. package/editor/editor/icons/IconMap.d.ts +3 -0
  19. package/editor/editor/icons/IconMap.d.ts.map +1 -0
  20. package/editor/editor/icons/ImgIcon.d.ts +2 -0
  21. package/editor/editor/icons/ImgIcon.d.ts.map +1 -0
  22. package/editor/editor/icons/LayoutIcon.d.ts +2 -0
  23. package/editor/editor/icons/LayoutIcon.d.ts.map +1 -0
  24. package/editor/editor/icons/LineIcon.d.ts +2 -0
  25. package/editor/editor/icons/LineIcon.d.ts.map +1 -0
  26. package/editor/editor/icons/NodeIcon.d.ts +2 -0
  27. package/editor/editor/icons/NodeIcon.d.ts.map +1 -0
  28. package/editor/editor/icons/RayIcon.d.ts +2 -0
  29. package/editor/editor/icons/RayIcon.d.ts.map +1 -0
  30. package/editor/editor/icons/RectIcon.d.ts +2 -0
  31. package/editor/editor/icons/RectIcon.d.ts.map +1 -0
  32. package/editor/editor/icons/ShapeIcon.d.ts +2 -0
  33. package/editor/editor/icons/ShapeIcon.d.ts.map +1 -0
  34. package/editor/editor/icons/TxtIcon.d.ts +2 -0
  35. package/editor/editor/icons/TxtIcon.d.ts.map +1 -0
  36. package/editor/editor/icons/VideoIcon.d.ts +2 -0
  37. package/editor/editor/icons/VideoIcon.d.ts.map +1 -0
  38. package/editor/editor/icons/View2DIcon.d.ts +2 -0
  39. package/editor/editor/icons/View2DIcon.d.ts.map +1 -0
  40. package/editor/editor/index.d.ts +4 -0
  41. package/editor/editor/index.d.ts.map +1 -0
  42. package/editor/editor/tree/DetachedRoot.d.ts +2 -0
  43. package/editor/editor/tree/DetachedRoot.d.ts.map +1 -0
  44. package/editor/editor/tree/NodeElement.d.ts +8 -0
  45. package/editor/editor/tree/NodeElement.d.ts.map +1 -0
  46. package/editor/editor/tree/TreeElement.d.ts +15 -0
  47. package/editor/editor/tree/TreeElement.d.ts.map +1 -0
  48. package/editor/editor/tree/TreeRoot.d.ts +3 -0
  49. package/editor/editor/tree/TreeRoot.d.ts.map +1 -0
  50. package/editor/editor/tree/ViewRoot.d.ts +2 -0
  51. package/editor/editor/tree/ViewRoot.d.ts.map +1 -0
  52. package/editor/editor/tree/index.d.ts +4 -0
  53. package/editor/editor/tree/index.d.ts.map +1 -0
  54. package/editor/editor/tsconfig.build.tsbuildinfo +1 -0
  55. package/editor/index.css +33 -0
  56. package/editor/index.js +341 -0
  57. package/editor/index.js.map +1 -0
  58. package/lib/code/CodeCursor.d.ts +83 -0
  59. package/lib/code/CodeCursor.d.ts.map +1 -0
  60. package/lib/code/CodeCursor.js +306 -0
  61. package/lib/code/CodeDiffer.d.ts +28 -0
  62. package/lib/code/CodeDiffer.d.ts.map +1 -0
  63. package/lib/code/CodeDiffer.js +51 -0
  64. package/lib/code/CodeFragment.d.ts +42 -0
  65. package/lib/code/CodeFragment.d.ts.map +1 -0
  66. package/lib/code/CodeFragment.js +72 -0
  67. package/lib/code/CodeHighlighter.d.ts +71 -0
  68. package/lib/code/CodeHighlighter.d.ts.map +1 -0
  69. package/lib/code/CodeHighlighter.js +2 -0
  70. package/lib/code/CodeMetrics.d.ts +11 -0
  71. package/lib/code/CodeMetrics.d.ts.map +1 -0
  72. package/lib/code/CodeMetrics.js +29 -0
  73. package/lib/code/CodeRange.d.ts +41 -0
  74. package/lib/code/CodeRange.d.ts.map +1 -0
  75. package/lib/code/CodeRange.js +179 -0
  76. package/lib/code/CodeScope.d.ts +16 -0
  77. package/lib/code/CodeScope.d.ts.map +1 -0
  78. package/lib/code/CodeScope.js +72 -0
  79. package/lib/code/CodeSelection.d.ts +6 -0
  80. package/lib/code/CodeSelection.d.ts.map +1 -0
  81. package/lib/code/CodeSelection.js +13 -0
  82. package/lib/code/CodeSignal.d.ts +60 -0
  83. package/lib/code/CodeSignal.d.ts.map +1 -0
  84. package/lib/code/CodeSignal.js +194 -0
  85. package/lib/code/CodeTokenizer.d.ts +8 -0
  86. package/lib/code/CodeTokenizer.d.ts.map +1 -0
  87. package/lib/code/CodeTokenizer.js +50 -0
  88. package/lib/code/DefaultHighlightStyle.d.ts +3 -0
  89. package/lib/code/DefaultHighlightStyle.d.ts.map +1 -0
  90. package/lib/code/DefaultHighlightStyle.js +98 -0
  91. package/lib/code/LezerHighlighter.d.ts +22 -0
  92. package/lib/code/LezerHighlighter.d.ts.map +1 -0
  93. package/lib/code/LezerHighlighter.js +89 -0
  94. package/lib/code/diff.d.ts +31 -0
  95. package/lib/code/diff.d.ts.map +1 -0
  96. package/lib/code/diff.js +236 -0
  97. package/lib/code/extractRange.d.ts +17 -0
  98. package/lib/code/extractRange.d.ts.map +1 -0
  99. package/lib/code/extractRange.js +102 -0
  100. package/lib/code/index.d.ts +14 -0
  101. package/lib/code/index.d.ts.map +1 -0
  102. package/lib/code/index.js +14 -0
  103. package/lib/components/Audio.d.ts +14 -0
  104. package/lib/components/Audio.d.ts.map +1 -0
  105. package/lib/components/Audio.js +118 -0
  106. package/lib/components/Bezier.d.ts +23 -0
  107. package/lib/components/Bezier.d.ts.map +1 -0
  108. package/lib/components/Bezier.js +81 -0
  109. package/lib/components/Circle.d.ts +193 -0
  110. package/lib/components/Circle.d.ts.map +1 -0
  111. package/lib/components/Circle.js +178 -0
  112. package/lib/components/Code.d.ts +231 -0
  113. package/lib/components/Code.d.ts.map +1 -0
  114. package/lib/components/Code.js +325 -0
  115. package/lib/components/CodeBlock.d.ts +133 -0
  116. package/lib/components/CodeBlock.d.ts.map +1 -0
  117. package/lib/components/CodeBlock.js +461 -0
  118. package/lib/components/CubicBezier.d.ts +70 -0
  119. package/lib/components/CubicBezier.d.ts.map +1 -0
  120. package/lib/components/CubicBezier.js +81 -0
  121. package/lib/components/Curve.d.ts +204 -0
  122. package/lib/components/Curve.d.ts.map +1 -0
  123. package/lib/components/Curve.js +284 -0
  124. package/lib/components/Grid.d.ts +76 -0
  125. package/lib/components/Grid.d.ts.map +1 -0
  126. package/lib/components/Grid.js +91 -0
  127. package/lib/components/Icon.d.ts +59 -0
  128. package/lib/components/Icon.d.ts.map +1 -0
  129. package/lib/components/Icon.js +58 -0
  130. package/lib/components/Img.d.ts +118 -0
  131. package/lib/components/Img.d.ts.map +1 -0
  132. package/lib/components/Img.js +245 -0
  133. package/lib/components/Knot.d.ts +90 -0
  134. package/lib/components/Knot.d.ts.map +1 -0
  135. package/lib/components/Knot.js +68 -0
  136. package/lib/components/Latex.d.ts +39 -0
  137. package/lib/components/Latex.d.ts.map +1 -0
  138. package/lib/components/Latex.js +101 -0
  139. package/lib/components/Layout.d.ts +419 -0
  140. package/lib/components/Layout.d.ts.map +1 -0
  141. package/lib/components/Layout.js +706 -0
  142. package/lib/components/Line.d.ts +160 -0
  143. package/lib/components/Line.d.ts.map +1 -0
  144. package/lib/components/Line.js +346 -0
  145. package/lib/components/Media.d.ts +65 -0
  146. package/lib/components/Media.d.ts.map +1 -0
  147. package/lib/components/Media.js +303 -0
  148. package/lib/components/Node.d.ts +836 -0
  149. package/lib/components/Node.d.ts.map +1 -0
  150. package/lib/components/Node.js +1317 -0
  151. package/lib/components/Path.d.ts +20 -0
  152. package/lib/components/Path.d.ts.map +1 -0
  153. package/lib/components/Path.js +97 -0
  154. package/lib/components/Polygon.d.ts +113 -0
  155. package/lib/components/Polygon.d.ts.map +1 -0
  156. package/lib/components/Polygon.js +123 -0
  157. package/lib/components/QuadBezier.d.ts +62 -0
  158. package/lib/components/QuadBezier.d.ts.map +1 -0
  159. package/lib/components/QuadBezier.js +76 -0
  160. package/lib/components/Ray.d.ts +62 -0
  161. package/lib/components/Ray.d.ts.map +1 -0
  162. package/lib/components/Ray.js +96 -0
  163. package/lib/components/Rect.d.ts +114 -0
  164. package/lib/components/Rect.d.ts.map +1 -0
  165. package/lib/components/Rect.js +76 -0
  166. package/lib/components/Rive.d.ts +22 -0
  167. package/lib/components/Rive.d.ts.map +1 -0
  168. package/lib/components/Rive.js +117 -0
  169. package/lib/components/SVG.d.ts +178 -0
  170. package/lib/components/SVG.d.ts.map +1 -0
  171. package/lib/components/SVG.js +577 -0
  172. package/lib/components/Shape.d.ts +40 -0
  173. package/lib/components/Shape.d.ts.map +1 -0
  174. package/lib/components/Shape.js +134 -0
  175. package/lib/components/Spline.d.ts +89 -0
  176. package/lib/components/Spline.d.ts.map +1 -0
  177. package/lib/components/Spline.js +256 -0
  178. package/lib/components/Txt.d.ts +53 -0
  179. package/lib/components/Txt.d.ts.map +1 -0
  180. package/lib/components/Txt.js +173 -0
  181. package/lib/components/TxtLeaf.d.ts +21 -0
  182. package/lib/components/TxtLeaf.d.ts.map +1 -0
  183. package/lib/components/TxtLeaf.js +181 -0
  184. package/lib/components/Video.d.ts +69 -0
  185. package/lib/components/Video.d.ts.map +1 -0
  186. package/lib/components/Video.js +283 -0
  187. package/lib/components/View2D.d.ts +28 -0
  188. package/lib/components/View2D.d.ts.map +1 -0
  189. package/lib/components/View2D.js +93 -0
  190. package/lib/components/index.d.ts +29 -0
  191. package/lib/components/index.d.ts.map +1 -0
  192. package/lib/components/index.js +29 -0
  193. package/lib/components/types.d.ts +17 -0
  194. package/lib/components/types.d.ts.map +1 -0
  195. package/lib/components/types.js +2 -0
  196. package/lib/curves/ArcSegment.d.ts +26 -0
  197. package/lib/curves/ArcSegment.d.ts.map +1 -0
  198. package/lib/curves/ArcSegment.js +97 -0
  199. package/lib/curves/CircleSegment.d.ts +18 -0
  200. package/lib/curves/CircleSegment.d.ts.map +1 -0
  201. package/lib/curves/CircleSegment.js +52 -0
  202. package/lib/curves/CubicBezierSegment.d.ts +18 -0
  203. package/lib/curves/CubicBezierSegment.d.ts.map +1 -0
  204. package/lib/curves/CubicBezierSegment.js +55 -0
  205. package/lib/curves/CurveDrawingInfo.d.ts +11 -0
  206. package/lib/curves/CurveDrawingInfo.d.ts.map +1 -0
  207. package/lib/curves/CurveDrawingInfo.js +2 -0
  208. package/lib/curves/CurvePoint.d.ts +15 -0
  209. package/lib/curves/CurvePoint.d.ts.map +1 -0
  210. package/lib/curves/CurvePoint.js +2 -0
  211. package/lib/curves/CurveProfile.d.ts +7 -0
  212. package/lib/curves/CurveProfile.d.ts.map +1 -0
  213. package/lib/curves/CurveProfile.js +2 -0
  214. package/lib/curves/KnotInfo.d.ts +12 -0
  215. package/lib/curves/KnotInfo.d.ts.map +1 -0
  216. package/lib/curves/KnotInfo.js +2 -0
  217. package/lib/curves/LineSegment.d.ts +16 -0
  218. package/lib/curves/LineSegment.d.ts.map +1 -0
  219. package/lib/curves/LineSegment.js +45 -0
  220. package/lib/curves/Polynomial.d.ts +118 -0
  221. package/lib/curves/Polynomial.d.ts.map +1 -0
  222. package/lib/curves/Polynomial.js +259 -0
  223. package/lib/curves/Polynomial2D.d.ts +22 -0
  224. package/lib/curves/Polynomial2D.d.ts.map +1 -0
  225. package/lib/curves/Polynomial2D.js +45 -0
  226. package/lib/curves/PolynomialSegment.d.ts +39 -0
  227. package/lib/curves/PolynomialSegment.d.ts.map +1 -0
  228. package/lib/curves/PolynomialSegment.js +86 -0
  229. package/lib/curves/QuadBezierSegment.d.ts +17 -0
  230. package/lib/curves/QuadBezierSegment.d.ts.map +1 -0
  231. package/lib/curves/QuadBezierSegment.js +49 -0
  232. package/lib/curves/Segment.d.ts +9 -0
  233. package/lib/curves/Segment.d.ts.map +1 -0
  234. package/lib/curves/Segment.js +3 -0
  235. package/lib/curves/UniformPolynomialCurveSampler.d.ts +43 -0
  236. package/lib/curves/UniformPolynomialCurveSampler.d.ts.map +1 -0
  237. package/lib/curves/UniformPolynomialCurveSampler.js +73 -0
  238. package/lib/curves/createCurveProfileLerp.d.ts +32 -0
  239. package/lib/curves/createCurveProfileLerp.d.ts.map +1 -0
  240. package/lib/curves/createCurveProfileLerp.js +351 -0
  241. package/lib/curves/getBezierSplineProfile.d.ts +12 -0
  242. package/lib/curves/getBezierSplineProfile.d.ts.map +1 -0
  243. package/lib/curves/getBezierSplineProfile.js +137 -0
  244. package/lib/curves/getCircleProfile.d.ts +4 -0
  245. package/lib/curves/getCircleProfile.d.ts.map +1 -0
  246. package/lib/curves/getCircleProfile.js +44 -0
  247. package/lib/curves/getPathProfile.d.ts +3 -0
  248. package/lib/curves/getPathProfile.d.ts.map +1 -0
  249. package/lib/curves/getPathProfile.js +128 -0
  250. package/lib/curves/getPointAtDistance.d.ts +4 -0
  251. package/lib/curves/getPointAtDistance.d.ts.map +1 -0
  252. package/lib/curves/getPointAtDistance.js +15 -0
  253. package/lib/curves/getPolylineProfile.d.ts +4 -0
  254. package/lib/curves/getPolylineProfile.d.ts.map +1 -0
  255. package/lib/curves/getPolylineProfile.js +58 -0
  256. package/lib/curves/getRectProfile.d.ts +4 -0
  257. package/lib/curves/getRectProfile.d.ts.map +1 -0
  258. package/lib/curves/getRectProfile.js +57 -0
  259. package/lib/curves/index.d.ts +17 -0
  260. package/lib/curves/index.d.ts.map +1 -0
  261. package/lib/curves/index.js +17 -0
  262. package/lib/decorators/canvasStyleSignal.d.ts +5 -0
  263. package/lib/decorators/canvasStyleSignal.d.ts.map +1 -0
  264. package/lib/decorators/canvasStyleSignal.js +12 -0
  265. package/lib/decorators/colorSignal.d.ts +2 -0
  266. package/lib/decorators/colorSignal.d.ts.map +1 -0
  267. package/lib/decorators/colorSignal.js +9 -0
  268. package/lib/decorators/compound.d.ts +26 -0
  269. package/lib/decorators/compound.d.ts.map +1 -0
  270. package/lib/decorators/compound.js +49 -0
  271. package/lib/decorators/computed.d.ts +9 -0
  272. package/lib/decorators/computed.d.ts.map +1 -0
  273. package/lib/decorators/computed.js +18 -0
  274. package/lib/decorators/defaultStyle.d.ts +2 -0
  275. package/lib/decorators/defaultStyle.d.ts.map +1 -0
  276. package/lib/decorators/defaultStyle.js +14 -0
  277. package/lib/decorators/filtersSignal.d.ts +13 -0
  278. package/lib/decorators/filtersSignal.d.ts.map +1 -0
  279. package/lib/decorators/filtersSignal.js +73 -0
  280. package/lib/decorators/index.d.ts +11 -0
  281. package/lib/decorators/index.d.ts.map +1 -0
  282. package/lib/decorators/index.js +11 -0
  283. package/lib/decorators/initializers.d.ts +4 -0
  284. package/lib/decorators/initializers.d.ts.map +1 -0
  285. package/lib/decorators/initializers.js +27 -0
  286. package/lib/decorators/nodeName.d.ts +9 -0
  287. package/lib/decorators/nodeName.d.ts.map +1 -0
  288. package/lib/decorators/nodeName.js +13 -0
  289. package/lib/decorators/signal.d.ts +183 -0
  290. package/lib/decorators/signal.d.ts.map +1 -0
  291. package/lib/decorators/signal.js +285 -0
  292. package/lib/decorators/spacingSignal.d.ts +2 -0
  293. package/lib/decorators/spacingSignal.d.ts.map +1 -0
  294. package/lib/decorators/spacingSignal.js +15 -0
  295. package/lib/decorators/vector2Signal.d.ts +9 -0
  296. package/lib/decorators/vector2Signal.d.ts.map +1 -0
  297. package/lib/decorators/vector2Signal.js +15 -0
  298. package/lib/index.d.ts +9 -0
  299. package/lib/index.d.ts.map +1 -0
  300. package/lib/index.js +9 -0
  301. package/lib/jsx-dev-runtime.d.ts +3 -0
  302. package/lib/jsx-dev-runtime.d.ts.map +1 -0
  303. package/lib/jsx-dev-runtime.js +3 -0
  304. package/lib/jsx-runtime.d.ts +12 -0
  305. package/lib/jsx-runtime.d.ts.map +1 -0
  306. package/lib/jsx-runtime.js +23 -0
  307. package/lib/partials/Filter.d.ts +82 -0
  308. package/lib/partials/Filter.d.ts.map +1 -0
  309. package/lib/partials/Filter.js +135 -0
  310. package/lib/partials/Gradient.d.ts +31 -0
  311. package/lib/partials/Gradient.d.ts.map +1 -0
  312. package/lib/partials/Gradient.js +63 -0
  313. package/lib/partials/Pattern.d.ts +13 -0
  314. package/lib/partials/Pattern.d.ts.map +1 -0
  315. package/lib/partials/Pattern.js +27 -0
  316. package/lib/partials/ShaderConfig.d.ts +81 -0
  317. package/lib/partials/ShaderConfig.d.ts.map +1 -0
  318. package/lib/partials/ShaderConfig.js +25 -0
  319. package/lib/partials/index.d.ts +5 -0
  320. package/lib/partials/index.d.ts.map +1 -0
  321. package/lib/partials/index.js +5 -0
  322. package/lib/partials/types.d.ts +35 -0
  323. package/lib/partials/types.d.ts.map +1 -0
  324. package/lib/partials/types.js +2 -0
  325. package/lib/scenes/Scene2D.d.ts +29 -0
  326. package/lib/scenes/Scene2D.d.ts.map +1 -0
  327. package/lib/scenes/Scene2D.js +180 -0
  328. package/lib/scenes/index.d.ts +4 -0
  329. package/lib/scenes/index.d.ts.map +1 -0
  330. package/lib/scenes/index.js +4 -0
  331. package/lib/scenes/makeScene2D.d.ts +5 -0
  332. package/lib/scenes/makeScene2D.d.ts.map +1 -0
  333. package/lib/scenes/makeScene2D.js +11 -0
  334. package/lib/scenes/useScene2D.d.ts +3 -0
  335. package/lib/scenes/useScene2D.d.ts.map +1 -0
  336. package/lib/scenes/useScene2D.js +5 -0
  337. package/lib/tsconfig.build.tsbuildinfo +1 -0
  338. package/lib/utils/CanvasUtils.d.ts +23 -0
  339. package/lib/utils/CanvasUtils.d.ts.map +1 -0
  340. package/lib/utils/CanvasUtils.js +138 -0
  341. package/lib/utils/diff.d.ts +31 -0
  342. package/lib/utils/diff.d.ts.map +1 -0
  343. package/lib/utils/diff.js +97 -0
  344. package/lib/utils/index.d.ts +3 -0
  345. package/lib/utils/index.d.ts.map +1 -0
  346. package/lib/utils/index.js +3 -0
  347. package/lib/utils/is.d.ts +8 -0
  348. package/lib/utils/is.d.ts.map +1 -0
  349. package/lib/utils/is.js +10 -0
  350. package/lib/utils/makeSignalExtensions.d.ts +4 -0
  351. package/lib/utils/makeSignalExtensions.d.ts.map +1 -0
  352. package/lib/utils/makeSignalExtensions.js +20 -0
  353. package/lib/utils/video/ffmpeg-client.d.ts +5 -0
  354. package/lib/utils/video/ffmpeg-client.d.ts.map +1 -0
  355. package/lib/utils/video/ffmpeg-client.js +32 -0
  356. package/lib/utils/video/mp4-parser-manager.d.ts +3 -0
  357. package/lib/utils/video/mp4-parser-manager.d.ts.map +1 -0
  358. package/lib/utils/video/mp4-parser-manager.js +55 -0
  359. package/lib/utils/video/parser/index.d.ts +2 -0
  360. package/lib/utils/video/parser/index.d.ts.map +1 -0
  361. package/lib/utils/video/parser/index.js +2 -0
  362. package/lib/utils/video/parser/parser.d.ts +21 -0
  363. package/lib/utils/video/parser/parser.d.ts.map +1 -0
  364. package/lib/utils/video/parser/parser.js +168 -0
  365. package/lib/utils/video/parser/sampler.d.ts +16 -0
  366. package/lib/utils/video/parser/sampler.d.ts.map +1 -0
  367. package/lib/utils/video/parser/sampler.js +56 -0
  368. package/lib/utils/video/parser/segment.d.ts +48 -0
  369. package/lib/utils/video/parser/segment.d.ts.map +1 -0
  370. package/lib/utils/video/parser/segment.js +239 -0
  371. package/lib/utils/video/parser/sink.d.ts +9 -0
  372. package/lib/utils/video/parser/sink.d.ts.map +1 -0
  373. package/lib/utils/video/parser/sink.js +22 -0
  374. package/lib/utils/video/parser/utils.d.ts +10 -0
  375. package/lib/utils/video/parser/utils.d.ts.map +1 -0
  376. package/lib/utils/video/parser/utils.js +22 -0
  377. package/package.json +53 -0
  378. package/src/editor/NodeInspectorConfig.tsx +76 -0
  379. package/src/editor/PreviewOverlayConfig.tsx +67 -0
  380. package/src/editor/Provider.tsx +93 -0
  381. package/src/editor/SceneGraphTabConfig.tsx +81 -0
  382. package/src/editor/icons/CircleIcon.tsx +7 -0
  383. package/src/editor/icons/CodeBlockIcon.tsx +8 -0
  384. package/src/editor/icons/CurveIcon.tsx +7 -0
  385. package/src/editor/icons/GridIcon.tsx +7 -0
  386. package/src/editor/icons/IconMap.ts +35 -0
  387. package/src/editor/icons/ImgIcon.tsx +8 -0
  388. package/src/editor/icons/LayoutIcon.tsx +9 -0
  389. package/src/editor/icons/LineIcon.tsx +7 -0
  390. package/src/editor/icons/NodeIcon.tsx +7 -0
  391. package/src/editor/icons/RayIcon.tsx +7 -0
  392. package/src/editor/icons/RectIcon.tsx +7 -0
  393. package/src/editor/icons/ShapeIcon.tsx +7 -0
  394. package/src/editor/icons/TxtIcon.tsx +8 -0
  395. package/src/editor/icons/VideoIcon.tsx +7 -0
  396. package/src/editor/icons/View2DIcon.tsx +10 -0
  397. package/src/editor/index.css +0 -0
  398. package/src/editor/index.ts +17 -0
  399. package/src/editor/tree/DetachedRoot.tsx +23 -0
  400. package/src/editor/tree/NodeElement.tsx +74 -0
  401. package/src/editor/tree/TreeElement.tsx +72 -0
  402. package/src/editor/tree/TreeRoot.tsx +10 -0
  403. package/src/editor/tree/ViewRoot.tsx +20 -0
  404. package/src/editor/tree/index.module.scss +38 -0
  405. package/src/editor/tree/index.ts +3 -0
  406. package/src/editor/tsconfig.build.json +5 -0
  407. package/src/editor/tsconfig.json +12 -0
  408. package/src/editor/tsdoc.json +4 -0
  409. package/src/editor/vite-env.d.ts +1 -0
  410. package/src/lib/code/CodeCursor.ts +445 -0
  411. package/src/lib/code/CodeDiffer.ts +78 -0
  412. package/src/lib/code/CodeFragment.ts +97 -0
  413. package/src/lib/code/CodeHighlighter.ts +75 -0
  414. package/src/lib/code/CodeMetrics.ts +47 -0
  415. package/src/lib/code/CodeRange.test.ts +74 -0
  416. package/src/lib/code/CodeRange.ts +216 -0
  417. package/src/lib/code/CodeScope.ts +101 -0
  418. package/src/lib/code/CodeSelection.ts +24 -0
  419. package/src/lib/code/CodeSignal.ts +327 -0
  420. package/src/lib/code/CodeTokenizer.ts +54 -0
  421. package/src/lib/code/DefaultHighlightStyle.ts +98 -0
  422. package/src/lib/code/LezerHighlighter.ts +113 -0
  423. package/src/lib/code/diff.test.ts +311 -0
  424. package/src/lib/code/diff.ts +319 -0
  425. package/src/lib/code/extractRange.ts +126 -0
  426. package/src/lib/code/index.ts +13 -0
  427. package/src/lib/components/Audio.ts +131 -0
  428. package/src/lib/components/Bezier.ts +105 -0
  429. package/src/lib/components/Circle.ts +266 -0
  430. package/src/lib/components/Code.ts +526 -0
  431. package/src/lib/components/CodeBlock.ts +576 -0
  432. package/src/lib/components/CubicBezier.ts +112 -0
  433. package/src/lib/components/Curve.ts +455 -0
  434. package/src/lib/components/Grid.ts +135 -0
  435. package/src/lib/components/Icon.ts +96 -0
  436. package/src/lib/components/Img.ts +319 -0
  437. package/src/lib/components/Knot.ts +157 -0
  438. package/src/lib/components/Latex.ts +122 -0
  439. package/src/lib/components/Layout.ts +1092 -0
  440. package/src/lib/components/Line.ts +429 -0
  441. package/src/lib/components/Media.ts +379 -0
  442. package/src/lib/components/Node.ts +1940 -0
  443. package/src/lib/components/Path.ts +137 -0
  444. package/src/lib/components/Polygon.ts +171 -0
  445. package/src/lib/components/QuadBezier.ts +100 -0
  446. package/src/lib/components/Ray.ts +125 -0
  447. package/src/lib/components/Rect.ts +187 -0
  448. package/src/lib/components/Rive.ts +156 -0
  449. package/src/lib/components/SVG.ts +797 -0
  450. package/src/lib/components/Shape.ts +143 -0
  451. package/src/lib/components/Spline.ts +344 -0
  452. package/src/lib/components/Txt.test.tsx +81 -0
  453. package/src/lib/components/Txt.ts +203 -0
  454. package/src/lib/components/TxtLeaf.ts +205 -0
  455. package/src/lib/components/Video.ts +397 -0
  456. package/src/lib/components/View2D.ts +98 -0
  457. package/src/lib/components/__tests__/children.test.tsx +142 -0
  458. package/src/lib/components/__tests__/clone.test.tsx +126 -0
  459. package/src/lib/components/__tests__/generatorTest.ts +28 -0
  460. package/src/lib/components/__tests__/mockScene2D.ts +45 -0
  461. package/src/lib/components/__tests__/query.test.tsx +122 -0
  462. package/src/lib/components/__tests__/state.test.tsx +60 -0
  463. package/src/lib/components/index.ts +28 -0
  464. package/src/lib/components/types.ts +35 -0
  465. package/src/lib/curves/ArcSegment.ts +159 -0
  466. package/src/lib/curves/CircleSegment.ts +77 -0
  467. package/src/lib/curves/CubicBezierSegment.ts +78 -0
  468. package/src/lib/curves/CurveDrawingInfo.ts +11 -0
  469. package/src/lib/curves/CurvePoint.ts +15 -0
  470. package/src/lib/curves/CurveProfile.ts +7 -0
  471. package/src/lib/curves/KnotInfo.ts +10 -0
  472. package/src/lib/curves/LineSegment.ts +62 -0
  473. package/src/lib/curves/Polynomial.ts +355 -0
  474. package/src/lib/curves/Polynomial2D.ts +62 -0
  475. package/src/lib/curves/PolynomialSegment.ts +124 -0
  476. package/src/lib/curves/QuadBezierSegment.ts +64 -0
  477. package/src/lib/curves/Segment.ts +17 -0
  478. package/src/lib/curves/UniformPolynomialCurveSampler.ts +94 -0
  479. package/src/lib/curves/createCurveProfileLerp.ts +471 -0
  480. package/src/lib/curves/getBezierSplineProfile.ts +223 -0
  481. package/src/lib/curves/getCircleProfile.ts +86 -0
  482. package/src/lib/curves/getPathProfile.ts +178 -0
  483. package/src/lib/curves/getPointAtDistance.ts +21 -0
  484. package/src/lib/curves/getPolylineProfile.test.ts +21 -0
  485. package/src/lib/curves/getPolylineProfile.ts +89 -0
  486. package/src/lib/curves/getRectProfile.ts +139 -0
  487. package/src/lib/curves/index.ts +16 -0
  488. package/src/lib/decorators/canvasStyleSignal.ts +16 -0
  489. package/src/lib/decorators/colorSignal.ts +9 -0
  490. package/src/lib/decorators/compound.ts +72 -0
  491. package/src/lib/decorators/computed.ts +18 -0
  492. package/src/lib/decorators/defaultStyle.ts +18 -0
  493. package/src/lib/decorators/filtersSignal.ts +136 -0
  494. package/src/lib/decorators/index.ts +10 -0
  495. package/src/lib/decorators/initializers.ts +32 -0
  496. package/src/lib/decorators/nodeName.ts +13 -0
  497. package/src/lib/decorators/signal.test.ts +90 -0
  498. package/src/lib/decorators/signal.ts +345 -0
  499. package/src/lib/decorators/spacingSignal.ts +15 -0
  500. package/src/lib/decorators/vector2Signal.ts +30 -0
  501. package/src/lib/globals.d.ts +2 -0
  502. package/src/lib/index.ts +8 -0
  503. package/src/lib/jsx-dev-runtime.ts +2 -0
  504. package/src/lib/jsx-runtime.ts +46 -0
  505. package/src/lib/parse-svg-path.d.ts +14 -0
  506. package/src/lib/partials/Filter.ts +180 -0
  507. package/src/lib/partials/Gradient.ts +102 -0
  508. package/src/lib/partials/Pattern.ts +34 -0
  509. package/src/lib/partials/ShaderConfig.ts +117 -0
  510. package/src/lib/partials/index.ts +4 -0
  511. package/src/lib/partials/types.ts +58 -0
  512. package/src/lib/scenes/Scene2D.ts +242 -0
  513. package/src/lib/scenes/index.ts +3 -0
  514. package/src/lib/scenes/makeScene2D.ts +16 -0
  515. package/src/lib/scenes/useScene2D.ts +6 -0
  516. package/src/lib/tsconfig.build.json +5 -0
  517. package/src/lib/tsconfig.json +10 -0
  518. package/src/lib/tsdoc.json +4 -0
  519. package/src/lib/utils/CanvasUtils.ts +306 -0
  520. package/src/lib/utils/diff.test.ts +453 -0
  521. package/src/lib/utils/diff.ts +148 -0
  522. package/src/lib/utils/index.ts +2 -0
  523. package/src/lib/utils/is.ts +11 -0
  524. package/src/lib/utils/makeSignalExtensions.ts +30 -0
  525. package/src/lib/utils/video/declarations.d.ts +1 -0
  526. package/src/lib/utils/video/ffmpeg-client.ts +50 -0
  527. package/src/lib/utils/video/mp4-parser-manager.ts +72 -0
  528. package/src/lib/utils/video/parser/index.ts +1 -0
  529. package/src/lib/utils/video/parser/parser.ts +257 -0
  530. package/src/lib/utils/video/parser/sampler.ts +72 -0
  531. package/src/lib/utils/video/parser/segment.ts +302 -0
  532. package/src/lib/utils/video/parser/sink.ts +29 -0
  533. package/src/lib/utils/video/parser/utils.ts +31 -0
  534. package/src/tsconfig.base.json +19 -0
  535. package/src/tsconfig.build.json +8 -0
  536. package/src/tsconfig.json +5 -0
  537. package/tsconfig.project.json +7 -0
@@ -0,0 +1,259 @@
1
+ import { clamp } from '@twick/core';
2
+ /**
3
+ * A polynomial in the form ax^3 + bx^2 + cx + d up to a cubic polynomial.
4
+ *
5
+ * Source code liberally taken from:
6
+ * https://github.com/FreyaHolmer/Mathfs/blob/master/Runtime/Curves/Polynomial.cs
7
+ */
8
+ export class Polynomial {
9
+ /**
10
+ * Constructs a constant polynomial
11
+ *
12
+ * @param c0 - The constant coefficient
13
+ */
14
+ static constant(c0) {
15
+ return new Polynomial(c0);
16
+ }
17
+ /**
18
+ * Constructs a linear polynomial
19
+ *
20
+ * @param c0 - The constant coefficient
21
+ * @param c1 - The linear coefficient
22
+ */
23
+ static linear(c0, c1) {
24
+ return new Polynomial(c0, c1);
25
+ }
26
+ /**
27
+ * Constructs a quadratic polynomial
28
+ *
29
+ * @param c0 - The constant coefficient
30
+ * @param c1 - The linear coefficient
31
+ * @param c2 - The quadratic coefficient
32
+ */
33
+ static quadratic(c0, c1, c2) {
34
+ return new Polynomial(c0, c1, c2);
35
+ }
36
+ /**
37
+ * Constructs a cubic polynomial
38
+ *
39
+ * @param c0 - The constant coefficient
40
+ * @param c1 - The linear coefficient
41
+ * @param c2 - The quadratic coefficient
42
+ * @param c3 - The cubic coefficient
43
+ */
44
+ static cubic(c0, c1, c2, c3) {
45
+ return new Polynomial(c0, c1, c2, c3);
46
+ }
47
+ /**
48
+ * The degree of the polynomial
49
+ */
50
+ get degree() {
51
+ if (this.c3 !== 0) {
52
+ return 3;
53
+ }
54
+ else if (this.c2 !== 0) {
55
+ return 2;
56
+ }
57
+ else if (this.c1 !== 0) {
58
+ return 1;
59
+ }
60
+ return 0;
61
+ }
62
+ constructor(c0, c1, c2, c3) {
63
+ this.c0 = c0;
64
+ this.c1 = c1 ?? 0;
65
+ this.c2 = c2 ?? 0;
66
+ this.c3 = c3 ?? 0;
67
+ }
68
+ /**
69
+ * Return the nth derivative of the polynomial.
70
+ *
71
+ * @param n - The number of times to differentiate the polynomial.
72
+ */
73
+ differentiate(n = 1) {
74
+ switch (n) {
75
+ case 0:
76
+ return this;
77
+ case 1:
78
+ return new Polynomial(this.c1, 2 * this.c2, 3 * this.c3, 0);
79
+ case 2:
80
+ return new Polynomial(2 * this.c2, 6 * this.c3, 0, 0);
81
+ case 3:
82
+ return new Polynomial(6 * this.c3, 0, 0, 0);
83
+ default:
84
+ throw new Error('Unsupported derivative');
85
+ }
86
+ }
87
+ eval(t, derivative = 0) {
88
+ if (derivative !== 0) {
89
+ return this.differentiate(derivative).eval(t);
90
+ }
91
+ return this.c3 * (t * t * t) + this.c2 * (t * t) + this.c1 * t + this.c0;
92
+ }
93
+ /**
94
+ * Split the polynomial into two polynomials of the same overall shape.
95
+ *
96
+ * @param u - The point at which to split the polynomial.
97
+ */
98
+ split(u) {
99
+ const d = 1 - u;
100
+ const pre = new Polynomial(this.c0, this.c1 * u, this.c2 * u * u, this.c3 * u * u * u);
101
+ const post = new Polynomial(this.eval(0), d * this.differentiate(1).eval(u), ((d * d) / 2) * this.differentiate(2).eval(u), ((d * d * d) / 6) * this.differentiate(3).eval(u));
102
+ return [pre, post];
103
+ }
104
+ /**
105
+ * Calculate the roots (values where this polynomial = 0).
106
+ *
107
+ * @remarks
108
+ * Depending on the degree of the polynomial, returns between 0 and 3 results.
109
+ */
110
+ roots() {
111
+ switch (this.degree) {
112
+ case 3:
113
+ return this.solveCubicRoots();
114
+ case 2:
115
+ return this.solveQuadraticRoots();
116
+ case 1:
117
+ return this.solveLinearRoot();
118
+ case 0:
119
+ return [];
120
+ default:
121
+ throw new Error(`Unsupported polynomial degree: ${this.degree}`);
122
+ }
123
+ }
124
+ /**
125
+ * Calculate the local extrema of the polynomial.
126
+ */
127
+ localExtrema() {
128
+ return this.differentiate().roots();
129
+ }
130
+ /**
131
+ * Calculate the local extrema of the polynomial in the unit interval.
132
+ */
133
+ localExtrema01() {
134
+ const all = this.localExtrema();
135
+ const valids = [];
136
+ for (let i = 0; i < all.length; i++) {
137
+ const t = all[i];
138
+ if (t >= 0 && t <= 1) {
139
+ valids.push(all[i]);
140
+ }
141
+ }
142
+ return valids;
143
+ }
144
+ /**
145
+ * Return the output value range within the unit interval.
146
+ */
147
+ outputRange01() {
148
+ let range = [this.eval(0), this.eval(1)];
149
+ // Expands the minimum or maximum value of the range to contain the given
150
+ // value.
151
+ const encapsulate = (value) => {
152
+ if (range[1] > range[0]) {
153
+ range = [Math.min(range[0], value), Math.max(range[1], value)];
154
+ }
155
+ else {
156
+ range = [Math.min(range[1], value), Math.max(range[0], value)];
157
+ }
158
+ };
159
+ this.localExtrema01().forEach(t => encapsulate(this.eval(t)));
160
+ return range;
161
+ }
162
+ solveCubicRoots() {
163
+ const a = this.c0;
164
+ const b = this.c1;
165
+ const c = this.c2;
166
+ const d = this.c3;
167
+ // First, depress the cubic to make it easier to solve
168
+ const aa = a * a;
169
+ const ac = a * c;
170
+ const bb = b * b;
171
+ const p = (3 * ac - bb) / (3 * aa);
172
+ const q = (2 * bb * b - 9 * ac * b + 27 * aa * d) / (27 * aa * a);
173
+ const dpr = this.solveDepressedCubicRoots(p, q);
174
+ // We now have the roots of the depressed cubic, now convert back to the
175
+ // normal cubic
176
+ const undepressRoot = (r) => r - b / (3 * a);
177
+ switch (dpr.length) {
178
+ case 1:
179
+ return [undepressRoot(dpr[0])];
180
+ case 2:
181
+ return [undepressRoot(dpr[0]), undepressRoot(dpr[1])];
182
+ case 3:
183
+ return [
184
+ undepressRoot(dpr[0]),
185
+ undepressRoot(dpr[1]),
186
+ undepressRoot(dpr[2]),
187
+ ];
188
+ default:
189
+ return [];
190
+ }
191
+ }
192
+ solveDepressedCubicRoots(p, q) {
193
+ // t³+pt+q = 0
194
+ // Triple root - one solution. solve x³+q = 0 => x = cr(-q)
195
+ if (this.almostZero(p)) {
196
+ return [Math.cbrt(-q)];
197
+ }
198
+ const TAU = Math.PI * 2;
199
+ const discriminant = 4 * p * p * p + 27 * q * q;
200
+ if (discriminant < 0.00001) {
201
+ // Two or three roots guaranteed, use trig solution
202
+ const pre = 2 * Math.sqrt(-p / 3);
203
+ const acosInner = ((3 * q) / (2 * p)) * Math.sqrt(-3 / p);
204
+ const getRoot = (k) => pre *
205
+ Math.cos((1 / 3) * Math.acos(clamp(-1, 1, acosInner)) - (TAU / 3) * k);
206
+ // If acos hits 0 or TAU/2, the offsets will have the same value,
207
+ // which means we have a double root plus one regular root on our hands
208
+ if (acosInner >= 0.9999) {
209
+ // two roots - one single and one double root
210
+ return [getRoot(0), getRoot(2)];
211
+ }
212
+ if (acosInner <= -0.9999) {
213
+ // two roots - one single and one double root
214
+ return [getRoot(1), getRoot(2)];
215
+ }
216
+ return [getRoot(0), getRoot(1), getRoot(2)];
217
+ }
218
+ if (discriminant > 0 && p < 0) {
219
+ // one root
220
+ const coshInner = (1 / 3) *
221
+ Math.acosh(((-3 * Math.abs(q)) / (2 * p)) * Math.sqrt(-3 / p));
222
+ const r = -2 * Math.sign(q) * Math.sqrt(-p / 3) * Math.cosh(coshInner);
223
+ return [r];
224
+ }
225
+ if (p > 0) {
226
+ // one root
227
+ const sinhInner = (1 / 3) * Math.asinh(((3 * q) / (2 * p)) * Math.sqrt(3 / p));
228
+ const r = -2 * Math.sqrt(p / 3) * Math.sinh(sinhInner);
229
+ return [r];
230
+ }
231
+ // no roots
232
+ return [];
233
+ }
234
+ solveQuadraticRoots() {
235
+ const a = this.c2;
236
+ const b = this.c1;
237
+ const c = this.c0;
238
+ const rootContent = b * b - 4 * a * c;
239
+ if (this.almostZero(rootContent)) {
240
+ // two equivalent solutions at one point
241
+ return [-b / (2 * a)];
242
+ }
243
+ if (rootContent >= 0) {
244
+ const root = Math.sqrt(rootContent);
245
+ // crosses at two points
246
+ const r0 = (-b - root) / (2 * a);
247
+ const r1 = (-b + root) / (2 * a);
248
+ return [Math.min(r0, r1), Math.max(r0, r1)];
249
+ }
250
+ return [];
251
+ }
252
+ solveLinearRoot() {
253
+ return [-this.c0 / this.c1];
254
+ }
255
+ almostZero(value) {
256
+ return Math.abs(0 - value) <= Number.EPSILON;
257
+ }
258
+ }
259
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9seW5vbWlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY3VydmVzL1BvbHlub21pYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVsQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBS3JCOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQVU7UUFDL0IsT0FBTyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQVUsRUFBRSxFQUFVO1FBQ3pDLE9BQU8sSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVTtRQUN4RCxPQUFPLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUNqQixFQUFVLEVBQ1YsRUFBVSxFQUNWLEVBQVUsRUFDVixFQUFVO1FBRVYsT0FBTyxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE1BQU07UUFDZixJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQzthQUFNLElBQUksSUFBSSxD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
@@ -0,0 +1,22 @@
1
+ import { BBox, Vector2 } from '@twick/core';
2
+ import { Polynomial } from './Polynomial';
3
+ export declare class Polynomial2D {
4
+ readonly c0: Vector2 | Polynomial;
5
+ readonly c1: Vector2 | Polynomial;
6
+ readonly c2?: Vector2 | undefined;
7
+ readonly c3?: Vector2 | undefined;
8
+ readonly x: Polynomial;
9
+ readonly y: Polynomial;
10
+ constructor(c0: Vector2, c1: Vector2, c2: Vector2, c3: Vector2);
11
+ constructor(c0: Vector2, c1: Vector2, c2: Vector2);
12
+ constructor(x: Polynomial, y: Polynomial);
13
+ eval(t: number, derivative?: number): Vector2;
14
+ split(u: number): [Polynomial2D, Polynomial2D];
15
+ differentiate(n?: number): Polynomial2D;
16
+ evalDerivative(t: number): Vector2;
17
+ /**
18
+ * Calculate the tight axis-aligned bounds of the curve in the unit interval.
19
+ */
20
+ getBounds(): BBox;
21
+ }
22
+ //# sourceMappingURL=Polynomial2D.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Polynomial2D.d.ts","sourceRoot":"","sources":["../../src/lib/curves/Polynomial2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAExC,qBAAa,YAAY;aAQL,EAAE,EAAE,OAAO,GAAG,UAAU;aACxB,EAAE,EAAE,OAAO,GAAG,UAAU;aACxB,EAAE,CAAC,EAAE,OAAO;aACZ,EAAE,CAAC,EAAE,OAAO;IAV9B,SAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,SAAgB,CAAC,EAAE,UAAU,CAAC;gBAEX,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO;gBAClD,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO;gBACrC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU;IAmBxC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO;IAOxC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC;IAM9C,aAAa,CAAC,CAAC,SAAI,GAAG,YAAY;IAIlC,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAIzC;;OAEG;IACI,SAAS,IAAI,IAAI;CAQzB"}
@@ -0,0 +1,45 @@
1
+ import { BBox, Vector2 } from '@twick/core';
2
+ import { Polynomial } from './Polynomial';
3
+ export class Polynomial2D {
4
+ constructor(c0, c1, c2, c3) {
5
+ this.c0 = c0;
6
+ this.c1 = c1;
7
+ this.c2 = c2;
8
+ this.c3 = c3;
9
+ if (c0 instanceof Polynomial) {
10
+ this.x = c0;
11
+ this.y = c1;
12
+ }
13
+ else if (c3 !== undefined) {
14
+ this.x = new Polynomial(c0.x, c1.x, c2.x, c3.x);
15
+ this.y = new Polynomial(c0.y, c1.y, c2.y, c3.y);
16
+ }
17
+ else {
18
+ this.x = new Polynomial(c0.x, c1.x, c2.x);
19
+ this.y = new Polynomial(c0.y, c1.y, c2.y);
20
+ }
21
+ }
22
+ eval(t, derivative = 0) {
23
+ return new Vector2(this.x.differentiate(derivative).eval(t), this.y.differentiate(derivative).eval(t));
24
+ }
25
+ split(u) {
26
+ const [xPre, xPost] = this.x.split(u);
27
+ const [yPre, yPost] = this.y.split(u);
28
+ return [new Polynomial2D(xPre, yPre), new Polynomial2D(xPost, yPost)];
29
+ }
30
+ differentiate(n = 1) {
31
+ return new Polynomial2D(this.x.differentiate(n), this.y.differentiate(n));
32
+ }
33
+ evalDerivative(t) {
34
+ return this.differentiate().eval(t);
35
+ }
36
+ /**
37
+ * Calculate the tight axis-aligned bounds of the curve in the unit interval.
38
+ */
39
+ getBounds() {
40
+ const rangeX = this.x.outputRange01();
41
+ const rangeY = this.y.outputRange01();
42
+ return BBox.fromPoints(new Vector2(Math.min(...rangeX), Math.max(...rangeY)), new Vector2(Math.max(...rangeX), Math.min(...rangeY)));
43
+ }
44
+ }
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9seW5vbWlhbDJELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jdXJ2ZXMvUG9seW5vbWlhbDJELnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFeEMsTUFBTSxPQUFPLFlBQVk7SUFPdkIsWUFDa0IsRUFBd0IsRUFDeEIsRUFBd0IsRUFDeEIsRUFBWSxFQUNaLEVBQVk7UUFIWixPQUFFLEdBQUYsRUFBRSxDQUFzQjtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFzQjtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFVO1FBQ1osT0FBRSxHQUFGLEVBQUUsQ0FBVTtRQUU1QixJQUFJLEVBQUUsWUFBWSxVQUFVLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBZ0IsQ0FBQztRQUM1QixDQUFDO2FBQU0sSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFHLEVBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFHLEVBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUcsRUFBYyxDQUFDLENBQUMsRUFBRSxFQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFHLEVBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRU0sSUFBSSxDQUFDLENBQVMsRUFBRSxVQUFVLEdBQUcsQ0FBQztRQUNuQyxPQUFPLElBQUksT0FBTyxDQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ3hDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsQ0FBUztRQUNwQixNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsT0FBTyxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU0sYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU0sY0FBYyxDQUFDLENBQVM7UUFDN0IsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUNwQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQ3JELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FDdEQsQ0FBQztJQUNKLENBQUM7Q0FDRiJ9
@@ -0,0 +1,39 @@
1
+ import { type BBox, type Vector2 } from '@twick/core';
2
+ import type { CurvePoint } from './CurvePoint';
3
+ import type { Polynomial2D } from './Polynomial2D';
4
+ import { Segment } from './Segment';
5
+ import { UniformPolynomialCurveSampler } from './UniformPolynomialCurveSampler';
6
+ export declare abstract class PolynomialSegment extends Segment {
7
+ protected readonly curve: Polynomial2D;
8
+ protected readonly length: number;
9
+ protected readonly pointSampler: UniformPolynomialCurveSampler;
10
+ get arcLength(): number;
11
+ abstract get points(): Vector2[];
12
+ protected constructor(curve: Polynomial2D, length: number);
13
+ getBBox(): BBox;
14
+ /**
15
+ * Evaluate the polynomial at the given t value.
16
+ *
17
+ * @param t - The t value at which to evaluate the curve.
18
+ */
19
+ eval(t: number): CurvePoint;
20
+ /**
21
+ * Split the curve into two separate polynomials at the given t value. The two
22
+ * resulting curves form the same overall shape as the original curve.
23
+ *
24
+ * @param t - The t value at which to split the curve.
25
+ */
26
+ abstract split(t: number): [PolynomialSegment, PolynomialSegment];
27
+ getPoint(distance: number): CurvePoint;
28
+ transformPoints(matrix: DOMMatrix): Vector2[];
29
+ /**
30
+ * Return the tangent of the point that sits at the provided t value on the
31
+ * curve.
32
+ *
33
+ * @param t - The t value at which to evaluate the curve.
34
+ */
35
+ tangent(t: number): Vector2;
36
+ draw(context: CanvasRenderingContext2D | Path2D, start?: number, end?: number, move?: boolean): [CurvePoint, CurvePoint];
37
+ protected abstract doDraw(context: CanvasRenderingContext2D | Path2D): void;
38
+ }
39
+ //# sourceMappingURL=PolynomialSegment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PolynomialSegment.d.ts","sourceRoot":"","sources":["../../src/lib/curves/PolynomialSegment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,IAAI,EAAE,KAAK,OAAO,EAAC,MAAM,aAAa,CAAC;AAE5E,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,6BAA6B,EAAC,MAAM,iCAAiC,CAAC;AAE9E,8BAAsB,iBAAkB,SAAQ,OAAO;IAUnD,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY;IACtC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAVnC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,6BAA6B,CAAC;IAE/D,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,aAA6B,MAAM,IAAI,OAAO,EAAE,CAAC;IAEjD,SAAS,aACY,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM;IAM5B,OAAO,IAAI,IAAI;IAItB;;;;OAIG;IACI,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU;IAUlC;;;;;OAKG;aACa,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAEjE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAWtC,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE;IAIpD;;;;;OAKG;IACI,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAI3B,IAAI,CACT,OAAO,EAAE,wBAAwB,GAAG,MAAM,EAC1C,KAAK,SAAI,EACT,GAAG,SAAI,EACP,IAAI,UAAO,GACV,CAAC,UAAU,EAAE,UAAU,CAAC;IAyC3B,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,GAAG,IAAI;CAC5E"}
@@ -0,0 +1,86 @@
1
+ import { transformVectorAsPoint } from '@twick/core';
2
+ import { moveTo } from '../utils';
3
+ import { Segment } from './Segment';
4
+ import { UniformPolynomialCurveSampler } from './UniformPolynomialCurveSampler';
5
+ export class PolynomialSegment extends Segment {
6
+ get arcLength() {
7
+ return this.length;
8
+ }
9
+ constructor(curve, length) {
10
+ super();
11
+ this.curve = curve;
12
+ this.length = length;
13
+ this.pointSampler = new UniformPolynomialCurveSampler(this);
14
+ }
15
+ getBBox() {
16
+ return this.curve.getBounds();
17
+ }
18
+ /**
19
+ * Evaluate the polynomial at the given t value.
20
+ *
21
+ * @param t - The t value at which to evaluate the curve.
22
+ */
23
+ eval(t) {
24
+ const tangent = this.tangent(t);
25
+ return {
26
+ position: this.curve.eval(t),
27
+ tangent,
28
+ normal: tangent.perpendicular,
29
+ };
30
+ }
31
+ getPoint(distance) {
32
+ const closestPoint = this.pointSampler.pointAtDistance(this.arcLength * distance);
33
+ return {
34
+ position: closestPoint.position,
35
+ tangent: closestPoint.tangent,
36
+ normal: closestPoint.tangent.perpendicular,
37
+ };
38
+ }
39
+ transformPoints(matrix) {
40
+ return this.points.map(point => transformVectorAsPoint(point, matrix));
41
+ }
42
+ /**
43
+ * Return the tangent of the point that sits at the provided t value on the
44
+ * curve.
45
+ *
46
+ * @param t - The t value at which to evaluate the curve.
47
+ */
48
+ tangent(t) {
49
+ return this.curve.evalDerivative(t).normalized;
50
+ }
51
+ draw(context, start = 0, end = 1, move = true) {
52
+ let curve = null;
53
+ let startT = start;
54
+ let endT = end;
55
+ let points = this.points;
56
+ if (start !== 0 || end !== 1) {
57
+ const startDistance = this.length * start;
58
+ const endDistance = this.length * end;
59
+ startT = this.pointSampler.distanceToT(startDistance);
60
+ endT = this.pointSampler.distanceToT(endDistance);
61
+ const relativeEndT = (endT - startT) / (1 - startT);
62
+ const [, startSegment] = this.split(startT);
63
+ [curve] = startSegment.split(relativeEndT);
64
+ points = curve.points;
65
+ }
66
+ if (move) {
67
+ moveTo(context, points[0]);
68
+ }
69
+ (curve ?? this).doDraw(context);
70
+ const startTangent = this.tangent(startT);
71
+ const endTangent = this.tangent(endT);
72
+ return [
73
+ {
74
+ position: points[0],
75
+ tangent: startTangent,
76
+ normal: startTangent.perpendicular,
77
+ },
78
+ {
79
+ position: points.at(-1),
80
+ tangent: endTangent,
81
+ normal: endTangent.perpendicular,
82
+ },
83
+ ];
84
+ }
85
+ }
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9seW5vbWlhbFNlZ21lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2N1cnZlcy9Qb2x5bm9taWFsU2VnbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsc0JBQXNCLEVBQTBCLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHaEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RSxNQUFNLE9BQWdCLGlCQUFrQixTQUFRLE9BQU87SUFHckQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBSUQsWUFDcUIsS0FBbUIsRUFDbkIsTUFBYztRQUVqQyxLQUFLLEVBQUUsQ0FBQztRQUhXLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUdqQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksNkJBQTZCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxJQUFJLENBQUMsQ0FBUztRQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhDLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE9BQU87WUFDUCxNQUFNLEVBQUUsT0FBTyxDQUFDLGFBQWE7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFVTSxRQUFRLENBQUMsUUFBZ0I7UUFDOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxD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
@@ -0,0 +1,17 @@
1
+ import { Vector2 } from '@twick/core';
2
+ import { PolynomialSegment } from './PolynomialSegment';
3
+ /**
4
+ * A spline segment representing a quadratic Bézier curve.
5
+ */
6
+ export declare class QuadBezierSegment extends PolynomialSegment {
7
+ readonly p0: Vector2;
8
+ readonly p1: Vector2;
9
+ readonly p2: Vector2;
10
+ private static el;
11
+ get points(): Vector2[];
12
+ constructor(p0: Vector2, p1: Vector2, p2: Vector2);
13
+ split(t: number): [PolynomialSegment, PolynomialSegment];
14
+ protected static getLength(p0: Vector2, p1: Vector2, p2: Vector2): number;
15
+ protected doDraw(context: CanvasRenderingContext2D | Path2D): void;
16
+ }
17
+ //# sourceMappingURL=QuadBezierSegment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"QuadBezierSegment.d.ts","sourceRoot":"","sources":["../../src/lib/curves/QuadBezierSegment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAO,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAEtD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,iBAAiB;aASpC,EAAE,EAAE,OAAO;aACX,EAAE,EAAE,OAAO;aACX,EAAE,EAAE,OAAO;IAT7B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAiB;IAElC,IAAW,MAAM,IAAI,OAAO,EAAE,CAE7B;gBAGiB,EAAE,EAAE,OAAO,EACX,EAAE,EAAE,OAAO,EACX,EAAE,EAAE,OAAO;IActB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAiB/D,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM;cAUtD,MAAM,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM;CAGrE"}
@@ -0,0 +1,49 @@
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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ import { Vector2, lazy } from '@twick/core';
8
+ import { quadraticCurveTo } from '../utils';
9
+ import { Polynomial2D } from './Polynomial2D';
10
+ import { PolynomialSegment } from './PolynomialSegment';
11
+ /**
12
+ * A spline segment representing a quadratic Bézier curve.
13
+ */
14
+ export class QuadBezierSegment extends PolynomialSegment {
15
+ get points() {
16
+ return [this.p0, this.p1, this.p2];
17
+ }
18
+ constructor(p0, p1, p2) {
19
+ super(new Polynomial2D(p0,
20
+ // 2*(-p0+p1)
21
+ p0.flipped.add(p1).scale(2),
22
+ // p0-2*p1+p2
23
+ p0.sub(p1.scale(2)).add(p2)), QuadBezierSegment.getLength(p0, p1, p2));
24
+ this.p0 = p0;
25
+ this.p1 = p1;
26
+ this.p2 = p2;
27
+ }
28
+ split(t) {
29
+ const a = new Vector2(this.p0.x + (this.p1.x - this.p0.x) * t, this.p0.y + (this.p1.y - this.p0.y) * t);
30
+ const b = new Vector2(this.p1.x + (this.p2.x - this.p1.x) * t, this.p1.y + (this.p2.y - this.p1.y) * t);
31
+ const p = new Vector2(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);
32
+ const left = new QuadBezierSegment(this.p0, a, p);
33
+ const right = new QuadBezierSegment(p, b, this.p2);
34
+ return [left, right];
35
+ }
36
+ static getLength(p0, p1, p2) {
37
+ // Let the browser do the work for us instead of calculating the arclength
38
+ // manually.
39
+ QuadBezierSegment.el.setAttribute('d', `M ${p0.x} ${p0.y} Q ${p1.x} ${p1.y} ${p2.x} ${p2.y}`);
40
+ return QuadBezierSegment.el.getTotalLength();
41
+ }
42
+ doDraw(context) {
43
+ quadraticCurveTo(context, this.p1, this.p2);
44
+ }
45
+ }
46
+ __decorate([
47
+ lazy(() => document.createElementNS('http://www.w3.org/2000/svg', 'path'))
48
+ ], QuadBezierSegment, "el", void 0);
49
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVhZEJlemllclNlZ21lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2N1cnZlcy9RdWFkQmV6aWVyU2VnbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXREOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGlCQUFpQjtJQUl0RCxJQUFXLE1BQU07UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsWUFDa0IsRUFBVyxFQUNYLEVBQVcsRUFDWCxFQUFXO1FBRTNCLEtBQUssQ0FDSCxJQUFJLFlBQVksQ0FDZCxFQUFFO1FBQ0YsYUFBYTtRQUNiLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0IsYUFBYTtRQUNiLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FDNUIsRUFDRCxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDeEMsQ0FBQztRQWJjLE9BQUUsR0FBRixFQUFFLENBQVM7UUFDWCxPQUFFLEdBQUYsRUFBRSxDQUFTO1FBQ1gsT0FBRSxHQUFGLEVBQUUsQ0FBUztJQVk3QixDQUFDO0lBRU0sS0FBSyxDQUFDLENBQVM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQ25CLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQ3ZDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3hDLENBQUM7UUFDRixNQUFNLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDdkMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDeEMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXBFLE1BQU0sSUFBSSxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuRCxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQVcsRUFBRSxFQUFXLEVBQUUsRUFBVztRQUM5RCwwRUFBMEU7UUFDMUUsWUFBWTtRQUNaLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQy9CLEdBQUcsRUFDSCxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQ3RELENBQUM7UUFDRixPQUFPLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRWtCLE1BQU0sQ0FBQyxPQUEwQztRQUNsRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBckRnQjtJQURkLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQyxDQUFDO21DQUN6QyJ9
@@ -0,0 +1,9 @@
1
+ import type { Vector2 } from '@twick/core';
2
+ import type { CurvePoint } from './CurvePoint';
3
+ export declare abstract class Segment {
4
+ abstract readonly points: Vector2[];
5
+ abstract draw(context: CanvasRenderingContext2D | Path2D, start: number, end: number, move: boolean): [CurvePoint, CurvePoint];
6
+ abstract getPoint(distance: number): CurvePoint;
7
+ abstract get arcLength(): number;
8
+ }
9
+ //# sourceMappingURL=Segment.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Segment.d.ts","sourceRoot":"","sources":["../../src/lib/curves/Segment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAE7C,8BAAsB,OAAO;IAC3B,kBAAyB,MAAM,EAAE,OAAO,EAAE,CAAC;aAE3B,IAAI,CAClB,OAAO,EAAE,wBAAwB,GAAG,MAAM,EAC1C,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,GACZ,CAAC,UAAU,EAAE,UAAU,CAAC;aAEX,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAEtD,aAAoB,SAAS,IAAI,MAAM,CAAC;CACzC"}
@@ -0,0 +1,3 @@
1
+ export class Segment {
2
+ }
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VnbWVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY3VydmVzL1NlZ21lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxPQUFnQixPQUFPO0NBYTVCIn0=
@@ -0,0 +1,43 @@
1
+ import type { CurvePoint } from './CurvePoint';
2
+ import type { PolynomialSegment } from './PolynomialSegment';
3
+ /**
4
+ * Class to uniformly sample points on a given polynomial curve.
5
+ *
6
+ * @remarks
7
+ * In order to uniformly sample points from non-linear curves, this sampler
8
+ * re-parameterizes the curve by arclength.
9
+ */
10
+ export declare class UniformPolynomialCurveSampler {
11
+ private readonly curve;
12
+ private sampledDistances;
13
+ /**
14
+ * @param curve - The curve to sample
15
+ * @param samples - How many points to sample from the provided curve. The
16
+ * more points get sampled, the higher the resolution–and
17
+ * therefore precision–of the sampler.
18
+ */
19
+ constructor(curve: PolynomialSegment, samples?: number);
20
+ /**
21
+ * Discard all previously sampled points and resample the provided number of
22
+ * points from the curve.
23
+ *
24
+ * @param samples - The number of points to sample.
25
+ */
26
+ resample(samples: number): void;
27
+ /**
28
+ * Return the point at the provided distance along the sampled curve's
29
+ * arclength.
30
+ *
31
+ * @param distance - The distance along the curve's arclength for which to
32
+ * retrieve the point.
33
+ */
34
+ pointAtDistance(distance: number): CurvePoint;
35
+ /**
36
+ * Return the t value for the point at the provided distance along the sampled
37
+ * curve's arc length.
38
+ *
39
+ * @param distance - The distance along the arclength
40
+ */
41
+ distanceToT(distance: number): number;
42
+ }
43
+ //# sourceMappingURL=UniformPolynomialCurveSampler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"UniformPolynomialCurveSampler.d.ts","sourceRoot":"","sources":["../../src/lib/curves/UniformPolynomialCurveSampler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAE3D;;;;;;GAMG;AACH,qBAAa,6BAA6B;IAUtC,OAAO,CAAC,QAAQ,CAAC,KAAK;IATxB,OAAO,CAAC,gBAAgB,CAAgB;IAExC;;;;;OAKG;gBAEgB,KAAK,EAAE,iBAAiB,EACzC,OAAO,SAAK;IAKd;;;;;OAKG;IACI,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAsBtC;;;;;;OAMG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAIpD;;;;;OAKG;IACI,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAoB7C"}