@efxlab/motion-canvas-2d 4.0.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 (455) hide show
  1. package/editor/index.css +40 -0
  2. package/editor/index.js +525 -0
  3. package/editor/index.js.map +1 -0
  4. package/lib/code/CodeCursor.d.ts +84 -0
  5. package/lib/code/CodeCursor.d.ts.map +1 -0
  6. package/lib/code/CodeCursor.js +315 -0
  7. package/lib/code/CodeDiffer.d.ts +28 -0
  8. package/lib/code/CodeDiffer.d.ts.map +1 -0
  9. package/lib/code/CodeDiffer.js +51 -0
  10. package/lib/code/CodeFragment.d.ts +42 -0
  11. package/lib/code/CodeFragment.d.ts.map +1 -0
  12. package/lib/code/CodeFragment.js +72 -0
  13. package/lib/code/CodeHighlighter.d.ts +69 -0
  14. package/lib/code/CodeHighlighter.d.ts.map +1 -0
  15. package/lib/code/CodeHighlighter.js +2 -0
  16. package/lib/code/CodeMetrics.d.ts +11 -0
  17. package/lib/code/CodeMetrics.d.ts.map +1 -0
  18. package/lib/code/CodeMetrics.js +29 -0
  19. package/lib/code/CodeRange.d.ts +43 -0
  20. package/lib/code/CodeRange.d.ts.map +1 -0
  21. package/lib/code/CodeRange.js +185 -0
  22. package/lib/code/CodeScope.d.ts +16 -0
  23. package/lib/code/CodeScope.d.ts.map +1 -0
  24. package/lib/code/CodeScope.js +72 -0
  25. package/lib/code/CodeSelection.d.ts +6 -0
  26. package/lib/code/CodeSelection.d.ts.map +1 -0
  27. package/lib/code/CodeSelection.js +13 -0
  28. package/lib/code/CodeSignal.d.ts +63 -0
  29. package/lib/code/CodeSignal.d.ts.map +1 -0
  30. package/lib/code/CodeSignal.js +206 -0
  31. package/lib/code/CodeTokenizer.d.ts +8 -0
  32. package/lib/code/CodeTokenizer.d.ts.map +1 -0
  33. package/lib/code/CodeTokenizer.js +50 -0
  34. package/lib/code/DefaultHighlightStyle.d.ts +3 -0
  35. package/lib/code/DefaultHighlightStyle.d.ts.map +1 -0
  36. package/lib/code/DefaultHighlightStyle.js +98 -0
  37. package/lib/code/LezerHighlighter.d.ts +22 -0
  38. package/lib/code/LezerHighlighter.d.ts.map +1 -0
  39. package/lib/code/LezerHighlighter.js +91 -0
  40. package/lib/code/diff.d.ts +31 -0
  41. package/lib/code/diff.d.ts.map +1 -0
  42. package/lib/code/diff.js +236 -0
  43. package/lib/code/extractRange.d.ts +17 -0
  44. package/lib/code/extractRange.d.ts.map +1 -0
  45. package/lib/code/extractRange.js +102 -0
  46. package/lib/code/index.d.ts +14 -0
  47. package/lib/code/index.d.ts.map +1 -0
  48. package/lib/code/index.js +14 -0
  49. package/lib/components/Bezier.d.ts +22 -0
  50. package/lib/components/Bezier.d.ts.map +1 -0
  51. package/lib/components/Bezier.js +80 -0
  52. package/lib/components/Camera.d.ts +172 -0
  53. package/lib/components/Camera.d.ts.map +1 -0
  54. package/lib/components/Camera.js +239 -0
  55. package/lib/components/Circle.d.ts +191 -0
  56. package/lib/components/Circle.d.ts.map +1 -0
  57. package/lib/components/Circle.js +178 -0
  58. package/lib/components/Code.d.ts +238 -0
  59. package/lib/components/Code.d.ts.map +1 -0
  60. package/lib/components/Code.js +331 -0
  61. package/lib/components/CodeBlock.d.ts +131 -0
  62. package/lib/components/CodeBlock.d.ts.map +1 -0
  63. package/lib/components/CodeBlock.js +462 -0
  64. package/lib/components/CubicBezier.d.ts +69 -0
  65. package/lib/components/CubicBezier.d.ts.map +1 -0
  66. package/lib/components/CubicBezier.js +81 -0
  67. package/lib/components/Curve.d.ts +202 -0
  68. package/lib/components/Curve.d.ts.map +1 -0
  69. package/lib/components/Curve.js +284 -0
  70. package/lib/components/Grid.d.ts +75 -0
  71. package/lib/components/Grid.d.ts.map +1 -0
  72. package/lib/components/Grid.js +91 -0
  73. package/lib/components/Icon.d.ts +58 -0
  74. package/lib/components/Icon.d.ts.map +1 -0
  75. package/lib/components/Icon.js +58 -0
  76. package/lib/components/Img.d.ts +116 -0
  77. package/lib/components/Img.d.ts.map +1 -0
  78. package/lib/components/Img.js +233 -0
  79. package/lib/components/Knot.d.ts +89 -0
  80. package/lib/components/Knot.d.ts.map +1 -0
  81. package/lib/components/Knot.js +68 -0
  82. package/lib/components/Latex.d.ts +49 -0
  83. package/lib/components/Latex.d.ts.map +1 -0
  84. package/lib/components/Latex.js +206 -0
  85. package/lib/components/Layout.d.ts +423 -0
  86. package/lib/components/Layout.d.ts.map +1 -0
  87. package/lib/components/Layout.js +699 -0
  88. package/lib/components/Line.d.ts +158 -0
  89. package/lib/components/Line.d.ts.map +1 -0
  90. package/lib/components/Line.js +315 -0
  91. package/lib/components/Node.d.ts +843 -0
  92. package/lib/components/Node.d.ts.map +1 -0
  93. package/lib/components/Node.js +1335 -0
  94. package/lib/components/Path.d.ts +18 -0
  95. package/lib/components/Path.d.ts.map +1 -0
  96. package/lib/components/Path.js +96 -0
  97. package/lib/components/Polygon.d.ts +157 -0
  98. package/lib/components/Polygon.d.ts.map +1 -0
  99. package/lib/components/Polygon.js +183 -0
  100. package/lib/components/QuadBezier.d.ts +61 -0
  101. package/lib/components/QuadBezier.d.ts.map +1 -0
  102. package/lib/components/QuadBezier.js +76 -0
  103. package/lib/components/Ray.d.ts +60 -0
  104. package/lib/components/Ray.d.ts.map +1 -0
  105. package/lib/components/Ray.js +95 -0
  106. package/lib/components/Rect.d.ts +112 -0
  107. package/lib/components/Rect.d.ts.map +1 -0
  108. package/lib/components/Rect.js +76 -0
  109. package/lib/components/SVG.d.ts +175 -0
  110. package/lib/components/SVG.d.ts.map +1 -0
  111. package/lib/components/SVG.js +582 -0
  112. package/lib/components/Shape.d.ts +39 -0
  113. package/lib/components/Shape.d.ts.map +1 -0
  114. package/lib/components/Shape.js +134 -0
  115. package/lib/components/Spline.d.ts +87 -0
  116. package/lib/components/Spline.d.ts.map +1 -0
  117. package/lib/components/Spline.js +230 -0
  118. package/lib/components/Txt.d.ts +51 -0
  119. package/lib/components/Txt.d.ts.map +1 -0
  120. package/lib/components/Txt.js +172 -0
  121. package/lib/components/TxtLeaf.d.ts +20 -0
  122. package/lib/components/TxtLeaf.d.ts.map +1 -0
  123. package/lib/components/TxtLeaf.js +185 -0
  124. package/lib/components/Video.d.ts +110 -0
  125. package/lib/components/Video.d.ts.map +1 -0
  126. package/lib/components/Video.js +267 -0
  127. package/lib/components/View2D.d.ts +25 -0
  128. package/lib/components/View2D.d.ts.map +1 -0
  129. package/lib/components/View2D.js +85 -0
  130. package/lib/components/index.d.ts +27 -0
  131. package/lib/components/index.d.ts.map +1 -0
  132. package/lib/components/index.js +27 -0
  133. package/lib/components/types.d.ts +17 -0
  134. package/lib/components/types.d.ts.map +1 -0
  135. package/lib/components/types.js +2 -0
  136. package/lib/curves/ArcSegment.d.ts +26 -0
  137. package/lib/curves/ArcSegment.d.ts.map +1 -0
  138. package/lib/curves/ArcSegment.js +116 -0
  139. package/lib/curves/CircleSegment.d.ts +18 -0
  140. package/lib/curves/CircleSegment.d.ts.map +1 -0
  141. package/lib/curves/CircleSegment.js +60 -0
  142. package/lib/curves/CubicBezierSegment.d.ts +18 -0
  143. package/lib/curves/CubicBezierSegment.d.ts.map +1 -0
  144. package/lib/curves/CubicBezierSegment.js +60 -0
  145. package/lib/curves/CurveDrawingInfo.d.ts +11 -0
  146. package/lib/curves/CurveDrawingInfo.d.ts.map +1 -0
  147. package/lib/curves/CurveDrawingInfo.js +2 -0
  148. package/lib/curves/CurvePoint.d.ts +15 -0
  149. package/lib/curves/CurvePoint.d.ts.map +1 -0
  150. package/lib/curves/CurvePoint.js +2 -0
  151. package/lib/curves/CurveProfile.d.ts +7 -0
  152. package/lib/curves/CurveProfile.d.ts.map +1 -0
  153. package/lib/curves/CurveProfile.js +2 -0
  154. package/lib/curves/KnotInfo.d.ts +12 -0
  155. package/lib/curves/KnotInfo.d.ts.map +1 -0
  156. package/lib/curves/KnotInfo.js +2 -0
  157. package/lib/curves/LineSegment.d.ts +16 -0
  158. package/lib/curves/LineSegment.d.ts.map +1 -0
  159. package/lib/curves/LineSegment.js +51 -0
  160. package/lib/curves/Polynomial.d.ts +118 -0
  161. package/lib/curves/Polynomial.d.ts.map +1 -0
  162. package/lib/curves/Polynomial.js +263 -0
  163. package/lib/curves/Polynomial2D.d.ts +22 -0
  164. package/lib/curves/Polynomial2D.d.ts.map +1 -0
  165. package/lib/curves/Polynomial2D.js +51 -0
  166. package/lib/curves/PolynomialSegment.d.ts +39 -0
  167. package/lib/curves/PolynomialSegment.d.ts.map +1 -0
  168. package/lib/curves/PolynomialSegment.js +88 -0
  169. package/lib/curves/QuadBezierSegment.d.ts +17 -0
  170. package/lib/curves/QuadBezierSegment.d.ts.map +1 -0
  171. package/lib/curves/QuadBezierSegment.js +53 -0
  172. package/lib/curves/Segment.d.ts +9 -0
  173. package/lib/curves/Segment.d.ts.map +1 -0
  174. package/lib/curves/Segment.js +3 -0
  175. package/lib/curves/UniformPolynomialCurveSampler.d.ts +43 -0
  176. package/lib/curves/UniformPolynomialCurveSampler.d.ts.map +1 -0
  177. package/lib/curves/UniformPolynomialCurveSampler.js +74 -0
  178. package/lib/curves/createCurveProfileLerp.d.ts +32 -0
  179. package/lib/curves/createCurveProfileLerp.d.ts.map +1 -0
  180. package/lib/curves/createCurveProfileLerp.js +351 -0
  181. package/lib/curves/getBezierSplineProfile.d.ts +12 -0
  182. package/lib/curves/getBezierSplineProfile.d.ts.map +1 -0
  183. package/lib/curves/getBezierSplineProfile.js +140 -0
  184. package/lib/curves/getCircleProfile.d.ts +4 -0
  185. package/lib/curves/getCircleProfile.d.ts.map +1 -0
  186. package/lib/curves/getCircleProfile.js +44 -0
  187. package/lib/curves/getPathProfile.d.ts +3 -0
  188. package/lib/curves/getPathProfile.d.ts.map +1 -0
  189. package/lib/curves/getPathProfile.js +128 -0
  190. package/lib/curves/getPointAtDistance.d.ts +4 -0
  191. package/lib/curves/getPointAtDistance.d.ts.map +1 -0
  192. package/lib/curves/getPointAtDistance.js +15 -0
  193. package/lib/curves/getPolylineProfile.d.ts +4 -0
  194. package/lib/curves/getPolylineProfile.d.ts.map +1 -0
  195. package/lib/curves/getPolylineProfile.js +58 -0
  196. package/lib/curves/getRectProfile.d.ts +4 -0
  197. package/lib/curves/getRectProfile.d.ts.map +1 -0
  198. package/lib/curves/getRectProfile.js +57 -0
  199. package/lib/curves/index.d.ts +17 -0
  200. package/lib/curves/index.d.ts.map +1 -0
  201. package/lib/curves/index.js +17 -0
  202. package/lib/decorators/canvasStyleSignal.d.ts +5 -0
  203. package/lib/decorators/canvasStyleSignal.d.ts.map +1 -0
  204. package/lib/decorators/canvasStyleSignal.js +12 -0
  205. package/lib/decorators/colorSignal.d.ts +2 -0
  206. package/lib/decorators/colorSignal.d.ts.map +1 -0
  207. package/lib/decorators/colorSignal.js +9 -0
  208. package/lib/decorators/compound.d.ts +27 -0
  209. package/lib/decorators/compound.d.ts.map +1 -0
  210. package/lib/decorators/compound.js +49 -0
  211. package/lib/decorators/computed.d.ts +9 -0
  212. package/lib/decorators/computed.d.ts.map +1 -0
  213. package/lib/decorators/computed.js +18 -0
  214. package/lib/decorators/defaultStyle.d.ts +2 -0
  215. package/lib/decorators/defaultStyle.d.ts.map +1 -0
  216. package/lib/decorators/defaultStyle.js +13 -0
  217. package/lib/decorators/filtersSignal.d.ts +11 -0
  218. package/lib/decorators/filtersSignal.d.ts.map +1 -0
  219. package/lib/decorators/filtersSignal.js +73 -0
  220. package/lib/decorators/index.d.ts +11 -0
  221. package/lib/decorators/index.d.ts.map +1 -0
  222. package/lib/decorators/index.js +11 -0
  223. package/lib/decorators/initializers.d.ts +4 -0
  224. package/lib/decorators/initializers.d.ts.map +1 -0
  225. package/lib/decorators/initializers.js +27 -0
  226. package/lib/decorators/nodeName.d.ts +9 -0
  227. package/lib/decorators/nodeName.d.ts.map +1 -0
  228. package/lib/decorators/nodeName.js +13 -0
  229. package/lib/decorators/signal.d.ts +183 -0
  230. package/lib/decorators/signal.d.ts.map +1 -0
  231. package/lib/decorators/signal.js +285 -0
  232. package/lib/decorators/spacingSignal.d.ts +2 -0
  233. package/lib/decorators/spacingSignal.d.ts.map +1 -0
  234. package/lib/decorators/spacingSignal.js +15 -0
  235. package/lib/decorators/vector2Signal.d.ts +8 -0
  236. package/lib/decorators/vector2Signal.d.ts.map +1 -0
  237. package/lib/decorators/vector2Signal.js +15 -0
  238. package/lib/index.d.ts +9 -0
  239. package/lib/index.d.ts.map +1 -0
  240. package/lib/index.js +9 -0
  241. package/lib/jsx-dev-runtime.d.ts +3 -0
  242. package/lib/jsx-dev-runtime.d.ts.map +1 -0
  243. package/lib/jsx-dev-runtime.js +3 -0
  244. package/lib/jsx-runtime.d.ts +12 -0
  245. package/lib/jsx-runtime.d.ts.map +1 -0
  246. package/lib/jsx-runtime.js +23 -0
  247. package/lib/partials/Filter.d.ts +82 -0
  248. package/lib/partials/Filter.d.ts.map +1 -0
  249. package/lib/partials/Filter.js +137 -0
  250. package/lib/partials/Gradient.d.ts +31 -0
  251. package/lib/partials/Gradient.d.ts.map +1 -0
  252. package/lib/partials/Gradient.js +63 -0
  253. package/lib/partials/Pattern.d.ts +13 -0
  254. package/lib/partials/Pattern.d.ts.map +1 -0
  255. package/lib/partials/Pattern.js +27 -0
  256. package/lib/partials/ShaderConfig.d.ts +81 -0
  257. package/lib/partials/ShaderConfig.d.ts.map +1 -0
  258. package/lib/partials/ShaderConfig.js +25 -0
  259. package/lib/partials/index.d.ts +5 -0
  260. package/lib/partials/index.d.ts.map +1 -0
  261. package/lib/partials/index.js +5 -0
  262. package/lib/partials/types.d.ts +35 -0
  263. package/lib/partials/types.d.ts.map +1 -0
  264. package/lib/partials/types.js +2 -0
  265. package/lib/scenes/Scene2D.d.ts +23 -0
  266. package/lib/scenes/Scene2D.d.ts.map +1 -0
  267. package/lib/scenes/Scene2D.js +152 -0
  268. package/lib/scenes/index.d.ts +4 -0
  269. package/lib/scenes/index.d.ts.map +1 -0
  270. package/lib/scenes/index.js +4 -0
  271. package/lib/scenes/makeScene2D.d.ts +5 -0
  272. package/lib/scenes/makeScene2D.d.ts.map +1 -0
  273. package/lib/scenes/makeScene2D.js +12 -0
  274. package/lib/scenes/useScene2D.d.ts +3 -0
  275. package/lib/scenes/useScene2D.d.ts.map +1 -0
  276. package/lib/scenes/useScene2D.js +5 -0
  277. package/lib/tsconfig.build.tsbuildinfo +1 -0
  278. package/lib/tsconfig.tsbuildinfo +1 -0
  279. package/lib/utils/CanvasUtils.d.ts +21 -0
  280. package/lib/utils/CanvasUtils.d.ts.map +1 -0
  281. package/lib/utils/CanvasUtils.js +138 -0
  282. package/lib/utils/diff.d.ts +31 -0
  283. package/lib/utils/diff.d.ts.map +1 -0
  284. package/lib/utils/diff.js +97 -0
  285. package/lib/utils/index.d.ts +4 -0
  286. package/lib/utils/index.d.ts.map +1 -0
  287. package/lib/utils/index.js +4 -0
  288. package/lib/utils/is.d.ts +8 -0
  289. package/lib/utils/is.d.ts.map +1 -0
  290. package/lib/utils/is.js +10 -0
  291. package/lib/utils/makeSignalExtensions.d.ts +4 -0
  292. package/lib/utils/makeSignalExtensions.d.ts.map +1 -0
  293. package/lib/utils/makeSignalExtensions.js +20 -0
  294. package/lib/utils/withDefaults.d.ts +20 -0
  295. package/lib/utils/withDefaults.d.ts.map +1 -0
  296. package/lib/utils/withDefaults.js +23 -0
  297. package/package.json +54 -0
  298. package/src/editor/NodeInspectorConfig.tsx +76 -0
  299. package/src/editor/PreviewOverlayConfig.tsx +65 -0
  300. package/src/editor/Provider.tsx +109 -0
  301. package/src/editor/SceneGraphTabConfig.tsx +87 -0
  302. package/src/editor/icons/CircleIcon.tsx +7 -0
  303. package/src/editor/icons/CodeBlockIcon.tsx +8 -0
  304. package/src/editor/icons/CurveIcon.tsx +7 -0
  305. package/src/editor/icons/GridIcon.tsx +7 -0
  306. package/src/editor/icons/IconMap.ts +35 -0
  307. package/src/editor/icons/ImgIcon.tsx +8 -0
  308. package/src/editor/icons/LayoutIcon.tsx +9 -0
  309. package/src/editor/icons/LineIcon.tsx +7 -0
  310. package/src/editor/icons/NodeIcon.tsx +7 -0
  311. package/src/editor/icons/RayIcon.tsx +7 -0
  312. package/src/editor/icons/RectIcon.tsx +7 -0
  313. package/src/editor/icons/ShapeIcon.tsx +7 -0
  314. package/src/editor/icons/TxtIcon.tsx +8 -0
  315. package/src/editor/icons/VideoIcon.tsx +7 -0
  316. package/src/editor/icons/View2DIcon.tsx +10 -0
  317. package/src/editor/index.css +0 -0
  318. package/src/editor/index.ts +19 -0
  319. package/src/editor/shortcuts.ts +27 -0
  320. package/src/editor/tree/DetachedRoot.tsx +27 -0
  321. package/src/editor/tree/NodeElement.tsx +72 -0
  322. package/src/editor/tree/TreeElement.tsx +70 -0
  323. package/src/editor/tree/TreeRoot.tsx +10 -0
  324. package/src/editor/tree/ViewRoot.tsx +20 -0
  325. package/src/editor/tree/index.module.scss +45 -0
  326. package/src/editor/tree/index.ts +4 -0
  327. package/src/editor/tree/navigation.ts +145 -0
  328. package/src/editor/tsconfig.build.json +5 -0
  329. package/src/editor/tsconfig.json +12 -0
  330. package/src/editor/tsdoc.json +4 -0
  331. package/src/editor/utils/SignalSet.ts +37 -0
  332. package/src/editor/utils/index.ts +1 -0
  333. package/src/editor/vite-env.d.ts +1 -0
  334. package/src/lib/code/CodeCursor.ts +468 -0
  335. package/src/lib/code/CodeDiffer.ts +77 -0
  336. package/src/lib/code/CodeFragment.ts +96 -0
  337. package/src/lib/code/CodeHighlighter.ts +73 -0
  338. package/src/lib/code/CodeMetrics.ts +47 -0
  339. package/src/lib/code/CodeRange.test.ts +113 -0
  340. package/src/lib/code/CodeRange.ts +222 -0
  341. package/src/lib/code/CodeScope.ts +100 -0
  342. package/src/lib/code/CodeSelection.ts +28 -0
  343. package/src/lib/code/CodeSignal.ts +348 -0
  344. package/src/lib/code/CodeTokenizer.ts +54 -0
  345. package/src/lib/code/DefaultHighlightStyle.ts +98 -0
  346. package/src/lib/code/LezerHighlighter.ts +113 -0
  347. package/src/lib/code/diff.test.ts +311 -0
  348. package/src/lib/code/diff.ts +319 -0
  349. package/src/lib/code/extractRange.ts +125 -0
  350. package/src/lib/code/index.ts +13 -0
  351. package/src/lib/components/Bezier.ts +103 -0
  352. package/src/lib/components/Camera.ts +359 -0
  353. package/src/lib/components/Circle.ts +269 -0
  354. package/src/lib/components/Code.ts +532 -0
  355. package/src/lib/components/CodeBlock.ts +581 -0
  356. package/src/lib/components/CubicBezier.ts +115 -0
  357. package/src/lib/components/Curve.ts +455 -0
  358. package/src/lib/components/Grid.ts +134 -0
  359. package/src/lib/components/Icon.ts +95 -0
  360. package/src/lib/components/Img.ts +305 -0
  361. package/src/lib/components/Knot.ts +156 -0
  362. package/src/lib/components/Latex.ts +249 -0
  363. package/src/lib/components/Layout.ts +1071 -0
  364. package/src/lib/components/Line.ts +394 -0
  365. package/src/lib/components/Node.ts +1949 -0
  366. package/src/lib/components/Path.ts +132 -0
  367. package/src/lib/components/Polygon.ts +238 -0
  368. package/src/lib/components/QuadBezier.ts +103 -0
  369. package/src/lib/components/Ray.ts +126 -0
  370. package/src/lib/components/Rect.ts +186 -0
  371. package/src/lib/components/SVG.ts +788 -0
  372. package/src/lib/components/Shape.ts +146 -0
  373. package/src/lib/components/Spline.ts +318 -0
  374. package/src/lib/components/Txt.test.tsx +81 -0
  375. package/src/lib/components/Txt.ts +204 -0
  376. package/src/lib/components/TxtLeaf.ts +210 -0
  377. package/src/lib/components/Video.ts +368 -0
  378. package/src/lib/components/View2D.ts +85 -0
  379. package/src/lib/components/__logs__/image-without-source.md +17 -0
  380. package/src/lib/components/__logs__/line-without-points.md +30 -0
  381. package/src/lib/components/__logs__/reactive-playback-rate.md +21 -0
  382. package/src/lib/components/__logs__/spline-with-insufficient-knots.md +24 -0
  383. package/src/lib/components/__tests__/children.test.tsx +142 -0
  384. package/src/lib/components/__tests__/clone.test.tsx +126 -0
  385. package/src/lib/components/__tests__/generatorTest.ts +27 -0
  386. package/src/lib/components/__tests__/mockScene2D.ts +50 -0
  387. package/src/lib/components/__tests__/query.test.tsx +122 -0
  388. package/src/lib/components/__tests__/state.test.tsx +60 -0
  389. package/src/lib/components/index.ts +26 -0
  390. package/src/lib/components/types.ts +35 -0
  391. package/src/lib/curves/ArcSegment.ts +155 -0
  392. package/src/lib/curves/CircleSegment.ts +77 -0
  393. package/src/lib/curves/CubicBezierSegment.ts +78 -0
  394. package/src/lib/curves/CurveDrawingInfo.ts +11 -0
  395. package/src/lib/curves/CurvePoint.ts +15 -0
  396. package/src/lib/curves/CurveProfile.ts +7 -0
  397. package/src/lib/curves/KnotInfo.ts +10 -0
  398. package/src/lib/curves/LineSegment.ts +62 -0
  399. package/src/lib/curves/Polynomial.ts +355 -0
  400. package/src/lib/curves/Polynomial2D.ts +62 -0
  401. package/src/lib/curves/PolynomialSegment.ts +124 -0
  402. package/src/lib/curves/QuadBezierSegment.ts +64 -0
  403. package/src/lib/curves/Segment.ts +17 -0
  404. package/src/lib/curves/UniformPolynomialCurveSampler.ts +93 -0
  405. package/src/lib/curves/createCurveProfileLerp.ts +471 -0
  406. package/src/lib/curves/getBezierSplineProfile.ts +227 -0
  407. package/src/lib/curves/getCircleProfile.ts +86 -0
  408. package/src/lib/curves/getPathProfile.ts +177 -0
  409. package/src/lib/curves/getPointAtDistance.ts +21 -0
  410. package/src/lib/curves/getPolylineProfile.test.ts +21 -0
  411. package/src/lib/curves/getPolylineProfile.ts +88 -0
  412. package/src/lib/curves/getRectProfile.ts +138 -0
  413. package/src/lib/curves/index.ts +16 -0
  414. package/src/lib/decorators/canvasStyleSignal.ts +15 -0
  415. package/src/lib/decorators/colorSignal.ts +9 -0
  416. package/src/lib/decorators/compound.ts +85 -0
  417. package/src/lib/decorators/computed.ts +18 -0
  418. package/src/lib/decorators/defaultStyle.ts +15 -0
  419. package/src/lib/decorators/filtersSignal.ts +133 -0
  420. package/src/lib/decorators/index.ts +10 -0
  421. package/src/lib/decorators/initializers.ts +34 -0
  422. package/src/lib/decorators/nodeName.ts +13 -0
  423. package/src/lib/decorators/signal.test.ts +89 -0
  424. package/src/lib/decorators/signal.ts +348 -0
  425. package/src/lib/decorators/spacingSignal.ts +15 -0
  426. package/src/lib/decorators/vector2Signal.ts +35 -0
  427. package/src/lib/globals.d.ts +3 -0
  428. package/src/lib/index.ts +8 -0
  429. package/src/lib/jsx-dev-runtime.ts +2 -0
  430. package/src/lib/jsx-runtime.ts +45 -0
  431. package/src/lib/parse-svg-path.d.ts +14 -0
  432. package/src/lib/partials/Filter.ts +185 -0
  433. package/src/lib/partials/Gradient.ts +103 -0
  434. package/src/lib/partials/Pattern.ts +35 -0
  435. package/src/lib/partials/ShaderConfig.ts +122 -0
  436. package/src/lib/partials/index.ts +4 -0
  437. package/src/lib/partials/types.ts +58 -0
  438. package/src/lib/scenes/Scene2D.ts +195 -0
  439. package/src/lib/scenes/index.ts +3 -0
  440. package/src/lib/scenes/makeScene2D.ts +19 -0
  441. package/src/lib/scenes/useScene2D.ts +6 -0
  442. package/src/lib/tsconfig.build.json +12 -0
  443. package/src/lib/tsconfig.json +14 -0
  444. package/src/lib/tsdoc.json +4 -0
  445. package/src/lib/utils/CanvasUtils.ts +306 -0
  446. package/src/lib/utils/diff.test.ts +453 -0
  447. package/src/lib/utils/diff.ts +148 -0
  448. package/src/lib/utils/index.ts +3 -0
  449. package/src/lib/utils/is.ts +11 -0
  450. package/src/lib/utils/makeSignalExtensions.ts +29 -0
  451. package/src/lib/utils/withDefaults.tsx +26 -0
  452. package/src/tsconfig.base.json +18 -0
  453. package/src/tsconfig.build.json +8 -0
  454. package/src/tsconfig.json +5 -0
  455. package/tsconfig.project.json +7 -0
@@ -0,0 +1,45 @@
1
+ import type {
2
+ ComponentChildren,
3
+ FunctionComponent,
4
+ JSXProps,
5
+ Node,
6
+ NodeConstructor,
7
+ } from './components';
8
+
9
+ export namespace JSX {
10
+ export type Element = Node;
11
+ export type ElementClass = Node;
12
+ export interface ElementChildrenAttribute {
13
+ children: any;
14
+ }
15
+ }
16
+
17
+ function isClassComponent(
18
+ // eslint-disable-next-line @typescript-eslint/ban-types
19
+ fn: Function,
20
+ ): fn is new (...args: unknown[]) => unknown {
21
+ return !!fn.prototype?.isClass;
22
+ }
23
+
24
+ export const Fragment = Symbol.for('@efxlab/motion-canvas-2d/fragment');
25
+ export function jsx(
26
+ type: NodeConstructor | FunctionComponent | typeof Fragment,
27
+ config: JSXProps,
28
+ key?: any,
29
+ ): ComponentChildren {
30
+ const {ref, children, ...rest} = config;
31
+ const flatChildren = Array.isArray(children) ? children.flat() : children;
32
+
33
+ if (type === Fragment) {
34
+ return flatChildren;
35
+ }
36
+
37
+ if (isClassComponent(type)) {
38
+ const node = new type({...rest, children: flatChildren, key});
39
+ ref?.(node);
40
+ return node;
41
+ } else {
42
+ return type({...rest, ref, children: flatChildren, key});
43
+ }
44
+ }
45
+ export {jsx as jsxs};
@@ -0,0 +1,14 @@
1
+ declare module 'parse-svg-path' {
2
+ export type PathCommand = [
3
+ string,
4
+ number,
5
+ number,
6
+ number,
7
+ number,
8
+ number,
9
+ number,
10
+ number,
11
+ ];
12
+ function parse(path: string): PathCommand[];
13
+ export default parse;
14
+ }
@@ -0,0 +1,185 @@
1
+ import {
2
+ createSignal,
3
+ map,
4
+ SignalValue,
5
+ SimpleSignal,
6
+ transformScalar,
7
+ } from '@efxlab/motion-canvas-core';
8
+
9
+ /**
10
+ * All possible CSS filter names.
11
+ *
12
+ * @internal
13
+ */
14
+ export type FilterName =
15
+ | 'invert'
16
+ | 'sepia'
17
+ | 'grayscale'
18
+ | 'brightness'
19
+ | 'contrast'
20
+ | 'saturate'
21
+ | 'hue'
22
+ | 'blur';
23
+
24
+ /**
25
+ * Definitions of all possible CSS filters.
26
+ *
27
+ * @internal
28
+ */
29
+ export const FILTERS: Record<string, Partial<FilterProps>> = {
30
+ invert: {
31
+ name: 'invert',
32
+ },
33
+ sepia: {
34
+ name: 'sepia',
35
+ },
36
+ grayscale: {
37
+ name: 'grayscale',
38
+ },
39
+ brightness: {
40
+ name: 'brightness',
41
+ default: 1,
42
+ },
43
+ contrast: {
44
+ name: 'contrast',
45
+ default: 1,
46
+ },
47
+ saturate: {
48
+ name: 'saturate',
49
+ default: 1,
50
+ },
51
+ hue: {
52
+ name: 'hue-rotate',
53
+ unit: 'deg',
54
+ scale: 1,
55
+ },
56
+ blur: {
57
+ name: 'blur',
58
+ transform: true,
59
+ unit: 'px',
60
+ scale: 1,
61
+ },
62
+ };
63
+
64
+ /**
65
+ * A unified abstraction for all CSS filters.
66
+ */
67
+ export interface FilterProps {
68
+ name: string;
69
+ value: SignalValue<number>;
70
+ unit: string;
71
+ scale: number;
72
+ transform: boolean;
73
+ default: number;
74
+ }
75
+
76
+ export class Filter {
77
+ public get name() {
78
+ return this.props.name;
79
+ }
80
+
81
+ public get default() {
82
+ return this.props.default;
83
+ }
84
+
85
+ public readonly value: SimpleSignal<number, Filter>;
86
+ private readonly props: FilterProps;
87
+
88
+ public constructor(props: Partial<FilterProps>) {
89
+ this.props = {
90
+ name: 'invert',
91
+ default: 0,
92
+ unit: '%',
93
+ scale: 100,
94
+ transform: false,
95
+ ...props,
96
+ value: props.value ?? props.default ?? 0,
97
+ };
98
+ this.value = createSignal(this.props.value, map, this);
99
+ }
100
+
101
+ public isActive() {
102
+ return this.value() !== this.props.default;
103
+ }
104
+
105
+ public serialize(matrix: DOMMatrix): string {
106
+ let value = this.value();
107
+ if (this.props.transform) {
108
+ value = transformScalar(value, matrix);
109
+ }
110
+
111
+ return `${this.props.name}(${value * this.props.scale}${this.props.unit})`;
112
+ }
113
+ }
114
+
115
+ /**
116
+ * Create an {@link https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/invert | invert} filter.
117
+ *
118
+ * @param value - The value of the filter.
119
+ */
120
+ export function invert(value?: SignalValue<number>) {
121
+ return new Filter({...FILTERS.invert, value});
122
+ }
123
+
124
+ /**
125
+ * Create a {@link https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/sepia | sepia} filter.
126
+ *
127
+ * @param value - The value of the filter.
128
+ */
129
+ export function sepia(value?: SignalValue<number>) {
130
+ return new Filter({...FILTERS.sepia, value});
131
+ }
132
+
133
+ /**
134
+ * Create a {@link https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/grayscale | grayscale} filter.
135
+ *
136
+ * @param value - The value of the filter.
137
+ */
138
+ export function grayscale(value?: SignalValue<number>) {
139
+ return new Filter({...FILTERS.grayscale, value});
140
+ }
141
+
142
+ /**
143
+ * Create a {@link https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/brightness | brightness} filter.
144
+ *
145
+ * @param value - The value of the filter.
146
+ */
147
+ export function brightness(value?: SignalValue<number>) {
148
+ return new Filter({...FILTERS.brightness, value});
149
+ }
150
+
151
+ /**
152
+ * Create a {@link https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/contrast | contrast} filter.
153
+ *
154
+ * @param value - The value of the filter.
155
+ */
156
+ export function contrast(value?: SignalValue<number>) {
157
+ return new Filter({...FILTERS.contrast, value});
158
+ }
159
+
160
+ /**
161
+ * Create a {@link https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/saturate | saturate} filter.
162
+ *
163
+ * @param value - The value of the filter.
164
+ */
165
+ export function saturate(value?: SignalValue<number>) {
166
+ return new Filter({...FILTERS.saturate, value});
167
+ }
168
+
169
+ /**
170
+ * Create a {@link https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/hue-rotate | hue} filter.
171
+ *
172
+ * @param value - The value of the filter in degrees.
173
+ */
174
+ export function hue(value?: SignalValue<number>) {
175
+ return new Filter({...FILTERS.hue, value});
176
+ }
177
+
178
+ /**
179
+ * Create a {@link https://developer.mozilla.org/en-US/docs/Web/CSS/filter-function/blur | blur} filter.
180
+ *
181
+ * @param value - The value of the filter in pixels.
182
+ */
183
+ export function blur(value?: SignalValue<number>) {
184
+ return new Filter({...FILTERS.blur, value});
185
+ }
@@ -0,0 +1,103 @@
1
+ import {
2
+ Color,
3
+ PossibleColor,
4
+ PossibleVector2,
5
+ SignalValue,
6
+ SimpleSignal,
7
+ Vector2Signal,
8
+ unwrap,
9
+ } from '@efxlab/motion-canvas-core';
10
+ import {computed} from '../decorators/computed';
11
+ import {initial, initializeSignals, signal} from '../decorators/signal';
12
+ import {vector2Signal} from '../decorators/vector2Signal';
13
+
14
+ export type GradientType = 'linear' | 'conic' | 'radial';
15
+
16
+ export interface GradientStop {
17
+ offset: SignalValue<number>;
18
+ color: SignalValue<PossibleColor>;
19
+ }
20
+
21
+ export interface GradientProps {
22
+ type?: SignalValue<GradientType>;
23
+ fromX?: SignalValue<number>;
24
+ fromY?: SignalValue<number>;
25
+ from?: SignalValue<PossibleVector2>;
26
+ toX?: SignalValue<number>;
27
+ toY?: SignalValue<number>;
28
+ to?: SignalValue<PossibleVector2>;
29
+ angle?: SignalValue<number>;
30
+ fromRadius?: SignalValue<number>;
31
+ toRadius?: SignalValue<number>;
32
+ stops?: GradientStop[];
33
+ }
34
+
35
+ export class Gradient {
36
+ @initial('linear')
37
+ @signal()
38
+ declare public readonly type: SimpleSignal<GradientType, this>;
39
+
40
+ @vector2Signal('from')
41
+ declare public readonly from: Vector2Signal<this>;
42
+
43
+ @vector2Signal('to')
44
+ declare public readonly to: Vector2Signal<this>;
45
+
46
+ @initial(0)
47
+ @signal()
48
+ declare public readonly angle: SimpleSignal<number, this>;
49
+ @initial(0)
50
+ @signal()
51
+ declare public readonly fromRadius: SimpleSignal<number, this>;
52
+ @initial(0)
53
+ @signal()
54
+ declare public readonly toRadius: SimpleSignal<number, this>;
55
+ @initial([])
56
+ @signal()
57
+ declare public readonly stops: SimpleSignal<GradientStop[], this>;
58
+
59
+ public constructor(props: GradientProps) {
60
+ initializeSignals(this, props);
61
+ }
62
+
63
+ @computed()
64
+ public canvasGradient(context: CanvasRenderingContext2D): CanvasGradient {
65
+ let gradient: CanvasGradient;
66
+ switch (this.type()) {
67
+ case 'linear':
68
+ gradient = context.createLinearGradient(
69
+ this.from.x(),
70
+ this.from.y(),
71
+ this.to.x(),
72
+ this.to.y(),
73
+ );
74
+ break;
75
+ case 'conic':
76
+ gradient = context.createConicGradient(
77
+ this.angle(),
78
+ this.from.x(),
79
+ this.from.y(),
80
+ );
81
+ break;
82
+ case 'radial':
83
+ gradient = context.createRadialGradient(
84
+ this.from.x(),
85
+ this.from.y(),
86
+ this.fromRadius(),
87
+ this.to.x(),
88
+ this.to.y(),
89
+ this.toRadius(),
90
+ );
91
+ break;
92
+ }
93
+
94
+ for (const {offset, color} of this.stops()) {
95
+ gradient.addColorStop(
96
+ unwrap(offset),
97
+ new Color(unwrap(color)).serialize(),
98
+ );
99
+ }
100
+
101
+ return gradient;
102
+ }
103
+ }
@@ -0,0 +1,35 @@
1
+ import {SimpleSignal} from '@efxlab/motion-canvas-core';
2
+ import {computed} from '../decorators/computed';
3
+ import {initial, initializeSignals, signal} from '../decorators/signal';
4
+
5
+ export type CanvasRepetition =
6
+ | null
7
+ | 'repeat'
8
+ | 'repeat-x'
9
+ | 'repeat-y'
10
+ | 'no-repeat';
11
+
12
+ // TODO Support custom transformation matrices
13
+ export interface PatternProps {
14
+ image: CanvasImageSource;
15
+ repetition?: CanvasRepetition;
16
+ }
17
+
18
+ export class Pattern {
19
+ @signal()
20
+ declare public readonly image: SimpleSignal<CanvasImageSource, this>;
21
+ @initial(null)
22
+ @signal()
23
+ declare public readonly repetition: SimpleSignal<CanvasRepetition, this>;
24
+
25
+ public constructor(props: PatternProps) {
26
+ initializeSignals(this, props);
27
+ }
28
+
29
+ @computed()
30
+ public canvasPattern(
31
+ context: CanvasRenderingContext2D,
32
+ ): CanvasPattern | null {
33
+ return context.createPattern(this.image(), this.repetition());
34
+ }
35
+ }
@@ -0,0 +1,122 @@
1
+ import {
2
+ experimentalLog,
3
+ SignalValue,
4
+ useLogger,
5
+ useScene,
6
+ WebGLConvertible,
7
+ } from '@efxlab/motion-canvas-core';
8
+ import {Node} from '../components';
9
+
10
+ /**
11
+ * Describes a shader program used to apply effects to nodes.
12
+ *
13
+ * @experimental
14
+ */
15
+ export interface ShaderConfig {
16
+ /**
17
+ * The source code of the fragment shader.
18
+ *
19
+ * @example
20
+ * ```glsl
21
+ * #version 300 es
22
+ * precision highp float;
23
+ *
24
+ * #include "@efxlab/motion-canvas-core/shaders/common.glsl"
25
+ *
26
+ * void main() {
27
+ * out_color = texture(core_source_tx, source_uv);
28
+ * }
29
+ * ```
30
+ */
31
+ fragment: string;
32
+
33
+ /**
34
+ * Custom uniforms to be passed to the shader.
35
+ *
36
+ * @remarks
37
+ * The keys of this object will be used as the uniform names.
38
+ * The values can be either a number or an array of numbers.
39
+ * The following table shows how the values will be mapped to GLSL types.
40
+ *
41
+ * | TypeScript | GLSL |
42
+ * | ---------------------------------- | ------- |
43
+ * | `number` | `float` |
44
+ * | `[number, number]` | `vec2` |
45
+ * | `[number, number, number]` | `vec3` |
46
+ * | `[number, number, number, number]` | `vec4` |
47
+ *
48
+ * @example
49
+ * ```ts
50
+ * const shader = {
51
+ * // ...
52
+ * uniforms: {
53
+ * my_value: () => 1,
54
+ * my_vector: [1, 2, 3],
55
+ * },
56
+ * };
57
+ * ```
58
+ *
59
+ * ```glsl
60
+ * uniform float my_value;
61
+ * uniform vec3 my_vector;
62
+ * ```
63
+ */
64
+ uniforms?: Record<string, SignalValue<number | number[] | WebGLConvertible>>;
65
+
66
+ /**
67
+ * A custom hook run before the shader is used.
68
+ *
69
+ * @remarks
70
+ * Gives you low-level access to the WebGL context and the shader program.
71
+ *
72
+ * @param gl - WebGL context.
73
+ * @param program - The shader program.
74
+ */
75
+ setup?: (gl: WebGL2RenderingContext, program: WebGLProgram) => void;
76
+
77
+ /**
78
+ * A custom hook run after the shader is used.
79
+ *
80
+ * @remarks
81
+ * Gives you low-level access to the WebGL context and the shader program.
82
+ * Can be used to clean up resources created in the {@link setup} hook.
83
+ *
84
+ * @param gl - WebGL context.
85
+ * @param program - The shader program.
86
+ */
87
+ teardown?: (gl: WebGL2RenderingContext, program: WebGLProgram) => void;
88
+ }
89
+
90
+ export type PossibleShaderConfig =
91
+ | (ShaderConfig | string)[]
92
+ | ShaderConfig
93
+ | string
94
+ | null;
95
+
96
+ export function parseShader(
97
+ this: Node,
98
+ value: PossibleShaderConfig,
99
+ ): ShaderConfig[] {
100
+ let result: ShaderConfig[];
101
+ if (!value) {
102
+ result = [];
103
+ } else if (typeof value === 'string') {
104
+ result = [{fragment: value}];
105
+ } else if (Array.isArray(value)) {
106
+ result = value.map(item =>
107
+ typeof item === 'string' ? {fragment: item} : item,
108
+ );
109
+ } else {
110
+ result = [value];
111
+ }
112
+
113
+ if (!useScene().experimentalFeatures && result.length > 0) {
114
+ result = [];
115
+ useLogger().log({
116
+ ...experimentalLog(`Node uses experimental shaders.`),
117
+ inspect: this.key,
118
+ });
119
+ }
120
+
121
+ return result;
122
+ }
@@ -0,0 +1,4 @@
1
+ export * from './Filter';
2
+ export * from './Gradient';
3
+ export * from './Pattern';
4
+ export * from './types';
@@ -0,0 +1,58 @@
1
+ import {Color, PossibleColor} from '@efxlab/motion-canvas-core';
2
+ import type {Gradient} from './Gradient';
3
+ import type {Pattern} from './Pattern';
4
+
5
+ export type FlexDirection = 'row' | 'row-reverse' | 'column' | 'column-reverse';
6
+
7
+ export type FlexWrap = 'nowrap' | 'wrap' | 'wrap-reverse';
8
+
9
+ export type FlexBasis =
10
+ | Length
11
+ | 'content'
12
+ | 'max-content'
13
+ | 'min-content'
14
+ | 'fit-content'
15
+ | null;
16
+
17
+ export type FlexContent =
18
+ | 'center'
19
+ | 'start'
20
+ | 'end'
21
+ | 'space-between'
22
+ | 'space-around'
23
+ | 'space-evenly'
24
+ | 'stretch';
25
+
26
+ export type FlexItems = 'center' | 'start' | 'end' | 'stretch' | 'baseline';
27
+
28
+ export type TextWrap = boolean | 'pre';
29
+
30
+ export type LayoutMode = boolean | null;
31
+
32
+ /**
33
+ * Represents a length used by most layout properties.
34
+ *
35
+ * @remarks
36
+ * The value can be either:
37
+ * - `number` - the desired length in pixels
38
+ * - `${number}%` - a string with the desired length in percents, for example
39
+ * `'50%'`
40
+ */
41
+ export type Length = number | `${number}%`;
42
+
43
+ /**
44
+ * Represents a desired length used internally by layout Nodes.
45
+ *
46
+ * @remarks
47
+ * When the desired length is set to `null` it represents a default value for
48
+ * whatever property it describes.
49
+ */
50
+ export type DesiredLength = Length | null;
51
+
52
+ /**
53
+ * Represents a length limit used by layout properties such as `max-width`.
54
+ */
55
+ export type LengthLimit = Length | null | 'max-content' | 'min-content';
56
+
57
+ export type PossibleCanvasStyle = null | PossibleColor | Gradient | Pattern;
58
+ export type CanvasStyle = null | Color | Gradient | Pattern;