@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.
- package/editor/index.css +40 -0
- package/editor/index.js +525 -0
- package/editor/index.js.map +1 -0
- package/lib/code/CodeCursor.d.ts +84 -0
- package/lib/code/CodeCursor.d.ts.map +1 -0
- package/lib/code/CodeCursor.js +315 -0
- package/lib/code/CodeDiffer.d.ts +28 -0
- package/lib/code/CodeDiffer.d.ts.map +1 -0
- package/lib/code/CodeDiffer.js +51 -0
- package/lib/code/CodeFragment.d.ts +42 -0
- package/lib/code/CodeFragment.d.ts.map +1 -0
- package/lib/code/CodeFragment.js +72 -0
- package/lib/code/CodeHighlighter.d.ts +69 -0
- package/lib/code/CodeHighlighter.d.ts.map +1 -0
- package/lib/code/CodeHighlighter.js +2 -0
- package/lib/code/CodeMetrics.d.ts +11 -0
- package/lib/code/CodeMetrics.d.ts.map +1 -0
- package/lib/code/CodeMetrics.js +29 -0
- package/lib/code/CodeRange.d.ts +43 -0
- package/lib/code/CodeRange.d.ts.map +1 -0
- package/lib/code/CodeRange.js +185 -0
- package/lib/code/CodeScope.d.ts +16 -0
- package/lib/code/CodeScope.d.ts.map +1 -0
- package/lib/code/CodeScope.js +72 -0
- package/lib/code/CodeSelection.d.ts +6 -0
- package/lib/code/CodeSelection.d.ts.map +1 -0
- package/lib/code/CodeSelection.js +13 -0
- package/lib/code/CodeSignal.d.ts +63 -0
- package/lib/code/CodeSignal.d.ts.map +1 -0
- package/lib/code/CodeSignal.js +206 -0
- package/lib/code/CodeTokenizer.d.ts +8 -0
- package/lib/code/CodeTokenizer.d.ts.map +1 -0
- package/lib/code/CodeTokenizer.js +50 -0
- package/lib/code/DefaultHighlightStyle.d.ts +3 -0
- package/lib/code/DefaultHighlightStyle.d.ts.map +1 -0
- package/lib/code/DefaultHighlightStyle.js +98 -0
- package/lib/code/LezerHighlighter.d.ts +22 -0
- package/lib/code/LezerHighlighter.d.ts.map +1 -0
- package/lib/code/LezerHighlighter.js +91 -0
- package/lib/code/diff.d.ts +31 -0
- package/lib/code/diff.d.ts.map +1 -0
- package/lib/code/diff.js +236 -0
- package/lib/code/extractRange.d.ts +17 -0
- package/lib/code/extractRange.d.ts.map +1 -0
- package/lib/code/extractRange.js +102 -0
- package/lib/code/index.d.ts +14 -0
- package/lib/code/index.d.ts.map +1 -0
- package/lib/code/index.js +14 -0
- package/lib/components/Bezier.d.ts +22 -0
- package/lib/components/Bezier.d.ts.map +1 -0
- package/lib/components/Bezier.js +80 -0
- package/lib/components/Camera.d.ts +172 -0
- package/lib/components/Camera.d.ts.map +1 -0
- package/lib/components/Camera.js +239 -0
- package/lib/components/Circle.d.ts +191 -0
- package/lib/components/Circle.d.ts.map +1 -0
- package/lib/components/Circle.js +178 -0
- package/lib/components/Code.d.ts +238 -0
- package/lib/components/Code.d.ts.map +1 -0
- package/lib/components/Code.js +331 -0
- package/lib/components/CodeBlock.d.ts +131 -0
- package/lib/components/CodeBlock.d.ts.map +1 -0
- package/lib/components/CodeBlock.js +462 -0
- package/lib/components/CubicBezier.d.ts +69 -0
- package/lib/components/CubicBezier.d.ts.map +1 -0
- package/lib/components/CubicBezier.js +81 -0
- package/lib/components/Curve.d.ts +202 -0
- package/lib/components/Curve.d.ts.map +1 -0
- package/lib/components/Curve.js +284 -0
- package/lib/components/Grid.d.ts +75 -0
- package/lib/components/Grid.d.ts.map +1 -0
- package/lib/components/Grid.js +91 -0
- package/lib/components/Icon.d.ts +58 -0
- package/lib/components/Icon.d.ts.map +1 -0
- package/lib/components/Icon.js +58 -0
- package/lib/components/Img.d.ts +116 -0
- package/lib/components/Img.d.ts.map +1 -0
- package/lib/components/Img.js +233 -0
- package/lib/components/Knot.d.ts +89 -0
- package/lib/components/Knot.d.ts.map +1 -0
- package/lib/components/Knot.js +68 -0
- package/lib/components/Latex.d.ts +49 -0
- package/lib/components/Latex.d.ts.map +1 -0
- package/lib/components/Latex.js +206 -0
- package/lib/components/Layout.d.ts +423 -0
- package/lib/components/Layout.d.ts.map +1 -0
- package/lib/components/Layout.js +699 -0
- package/lib/components/Line.d.ts +158 -0
- package/lib/components/Line.d.ts.map +1 -0
- package/lib/components/Line.js +315 -0
- package/lib/components/Node.d.ts +843 -0
- package/lib/components/Node.d.ts.map +1 -0
- package/lib/components/Node.js +1335 -0
- package/lib/components/Path.d.ts +18 -0
- package/lib/components/Path.d.ts.map +1 -0
- package/lib/components/Path.js +96 -0
- package/lib/components/Polygon.d.ts +157 -0
- package/lib/components/Polygon.d.ts.map +1 -0
- package/lib/components/Polygon.js +183 -0
- package/lib/components/QuadBezier.d.ts +61 -0
- package/lib/components/QuadBezier.d.ts.map +1 -0
- package/lib/components/QuadBezier.js +76 -0
- package/lib/components/Ray.d.ts +60 -0
- package/lib/components/Ray.d.ts.map +1 -0
- package/lib/components/Ray.js +95 -0
- package/lib/components/Rect.d.ts +112 -0
- package/lib/components/Rect.d.ts.map +1 -0
- package/lib/components/Rect.js +76 -0
- package/lib/components/SVG.d.ts +175 -0
- package/lib/components/SVG.d.ts.map +1 -0
- package/lib/components/SVG.js +582 -0
- package/lib/components/Shape.d.ts +39 -0
- package/lib/components/Shape.d.ts.map +1 -0
- package/lib/components/Shape.js +134 -0
- package/lib/components/Spline.d.ts +87 -0
- package/lib/components/Spline.d.ts.map +1 -0
- package/lib/components/Spline.js +230 -0
- package/lib/components/Txt.d.ts +51 -0
- package/lib/components/Txt.d.ts.map +1 -0
- package/lib/components/Txt.js +172 -0
- package/lib/components/TxtLeaf.d.ts +20 -0
- package/lib/components/TxtLeaf.d.ts.map +1 -0
- package/lib/components/TxtLeaf.js +185 -0
- package/lib/components/Video.d.ts +110 -0
- package/lib/components/Video.d.ts.map +1 -0
- package/lib/components/Video.js +267 -0
- package/lib/components/View2D.d.ts +25 -0
- package/lib/components/View2D.d.ts.map +1 -0
- package/lib/components/View2D.js +85 -0
- package/lib/components/index.d.ts +27 -0
- package/lib/components/index.d.ts.map +1 -0
- package/lib/components/index.js +27 -0
- package/lib/components/types.d.ts +17 -0
- package/lib/components/types.d.ts.map +1 -0
- package/lib/components/types.js +2 -0
- package/lib/curves/ArcSegment.d.ts +26 -0
- package/lib/curves/ArcSegment.d.ts.map +1 -0
- package/lib/curves/ArcSegment.js +116 -0
- package/lib/curves/CircleSegment.d.ts +18 -0
- package/lib/curves/CircleSegment.d.ts.map +1 -0
- package/lib/curves/CircleSegment.js +60 -0
- package/lib/curves/CubicBezierSegment.d.ts +18 -0
- package/lib/curves/CubicBezierSegment.d.ts.map +1 -0
- package/lib/curves/CubicBezierSegment.js +60 -0
- package/lib/curves/CurveDrawingInfo.d.ts +11 -0
- package/lib/curves/CurveDrawingInfo.d.ts.map +1 -0
- package/lib/curves/CurveDrawingInfo.js +2 -0
- package/lib/curves/CurvePoint.d.ts +15 -0
- package/lib/curves/CurvePoint.d.ts.map +1 -0
- package/lib/curves/CurvePoint.js +2 -0
- package/lib/curves/CurveProfile.d.ts +7 -0
- package/lib/curves/CurveProfile.d.ts.map +1 -0
- package/lib/curves/CurveProfile.js +2 -0
- package/lib/curves/KnotInfo.d.ts +12 -0
- package/lib/curves/KnotInfo.d.ts.map +1 -0
- package/lib/curves/KnotInfo.js +2 -0
- package/lib/curves/LineSegment.d.ts +16 -0
- package/lib/curves/LineSegment.d.ts.map +1 -0
- package/lib/curves/LineSegment.js +51 -0
- package/lib/curves/Polynomial.d.ts +118 -0
- package/lib/curves/Polynomial.d.ts.map +1 -0
- package/lib/curves/Polynomial.js +263 -0
- package/lib/curves/Polynomial2D.d.ts +22 -0
- package/lib/curves/Polynomial2D.d.ts.map +1 -0
- package/lib/curves/Polynomial2D.js +51 -0
- package/lib/curves/PolynomialSegment.d.ts +39 -0
- package/lib/curves/PolynomialSegment.d.ts.map +1 -0
- package/lib/curves/PolynomialSegment.js +88 -0
- package/lib/curves/QuadBezierSegment.d.ts +17 -0
- package/lib/curves/QuadBezierSegment.d.ts.map +1 -0
- package/lib/curves/QuadBezierSegment.js +53 -0
- package/lib/curves/Segment.d.ts +9 -0
- package/lib/curves/Segment.d.ts.map +1 -0
- package/lib/curves/Segment.js +3 -0
- package/lib/curves/UniformPolynomialCurveSampler.d.ts +43 -0
- package/lib/curves/UniformPolynomialCurveSampler.d.ts.map +1 -0
- package/lib/curves/UniformPolynomialCurveSampler.js +74 -0
- package/lib/curves/createCurveProfileLerp.d.ts +32 -0
- package/lib/curves/createCurveProfileLerp.d.ts.map +1 -0
- package/lib/curves/createCurveProfileLerp.js +351 -0
- package/lib/curves/getBezierSplineProfile.d.ts +12 -0
- package/lib/curves/getBezierSplineProfile.d.ts.map +1 -0
- package/lib/curves/getBezierSplineProfile.js +140 -0
- package/lib/curves/getCircleProfile.d.ts +4 -0
- package/lib/curves/getCircleProfile.d.ts.map +1 -0
- package/lib/curves/getCircleProfile.js +44 -0
- package/lib/curves/getPathProfile.d.ts +3 -0
- package/lib/curves/getPathProfile.d.ts.map +1 -0
- package/lib/curves/getPathProfile.js +128 -0
- package/lib/curves/getPointAtDistance.d.ts +4 -0
- package/lib/curves/getPointAtDistance.d.ts.map +1 -0
- package/lib/curves/getPointAtDistance.js +15 -0
- package/lib/curves/getPolylineProfile.d.ts +4 -0
- package/lib/curves/getPolylineProfile.d.ts.map +1 -0
- package/lib/curves/getPolylineProfile.js +58 -0
- package/lib/curves/getRectProfile.d.ts +4 -0
- package/lib/curves/getRectProfile.d.ts.map +1 -0
- package/lib/curves/getRectProfile.js +57 -0
- package/lib/curves/index.d.ts +17 -0
- package/lib/curves/index.d.ts.map +1 -0
- package/lib/curves/index.js +17 -0
- package/lib/decorators/canvasStyleSignal.d.ts +5 -0
- package/lib/decorators/canvasStyleSignal.d.ts.map +1 -0
- package/lib/decorators/canvasStyleSignal.js +12 -0
- package/lib/decorators/colorSignal.d.ts +2 -0
- package/lib/decorators/colorSignal.d.ts.map +1 -0
- package/lib/decorators/colorSignal.js +9 -0
- package/lib/decorators/compound.d.ts +27 -0
- package/lib/decorators/compound.d.ts.map +1 -0
- package/lib/decorators/compound.js +49 -0
- package/lib/decorators/computed.d.ts +9 -0
- package/lib/decorators/computed.d.ts.map +1 -0
- package/lib/decorators/computed.js +18 -0
- package/lib/decorators/defaultStyle.d.ts +2 -0
- package/lib/decorators/defaultStyle.d.ts.map +1 -0
- package/lib/decorators/defaultStyle.js +13 -0
- package/lib/decorators/filtersSignal.d.ts +11 -0
- package/lib/decorators/filtersSignal.d.ts.map +1 -0
- package/lib/decorators/filtersSignal.js +73 -0
- package/lib/decorators/index.d.ts +11 -0
- package/lib/decorators/index.d.ts.map +1 -0
- package/lib/decorators/index.js +11 -0
- package/lib/decorators/initializers.d.ts +4 -0
- package/lib/decorators/initializers.d.ts.map +1 -0
- package/lib/decorators/initializers.js +27 -0
- package/lib/decorators/nodeName.d.ts +9 -0
- package/lib/decorators/nodeName.d.ts.map +1 -0
- package/lib/decorators/nodeName.js +13 -0
- package/lib/decorators/signal.d.ts +183 -0
- package/lib/decorators/signal.d.ts.map +1 -0
- package/lib/decorators/signal.js +285 -0
- package/lib/decorators/spacingSignal.d.ts +2 -0
- package/lib/decorators/spacingSignal.d.ts.map +1 -0
- package/lib/decorators/spacingSignal.js +15 -0
- package/lib/decorators/vector2Signal.d.ts +8 -0
- package/lib/decorators/vector2Signal.d.ts.map +1 -0
- package/lib/decorators/vector2Signal.js +15 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +9 -0
- package/lib/jsx-dev-runtime.d.ts +3 -0
- package/lib/jsx-dev-runtime.d.ts.map +1 -0
- package/lib/jsx-dev-runtime.js +3 -0
- package/lib/jsx-runtime.d.ts +12 -0
- package/lib/jsx-runtime.d.ts.map +1 -0
- package/lib/jsx-runtime.js +23 -0
- package/lib/partials/Filter.d.ts +82 -0
- package/lib/partials/Filter.d.ts.map +1 -0
- package/lib/partials/Filter.js +137 -0
- package/lib/partials/Gradient.d.ts +31 -0
- package/lib/partials/Gradient.d.ts.map +1 -0
- package/lib/partials/Gradient.js +63 -0
- package/lib/partials/Pattern.d.ts +13 -0
- package/lib/partials/Pattern.d.ts.map +1 -0
- package/lib/partials/Pattern.js +27 -0
- package/lib/partials/ShaderConfig.d.ts +81 -0
- package/lib/partials/ShaderConfig.d.ts.map +1 -0
- package/lib/partials/ShaderConfig.js +25 -0
- package/lib/partials/index.d.ts +5 -0
- package/lib/partials/index.d.ts.map +1 -0
- package/lib/partials/index.js +5 -0
- package/lib/partials/types.d.ts +35 -0
- package/lib/partials/types.d.ts.map +1 -0
- package/lib/partials/types.js +2 -0
- package/lib/scenes/Scene2D.d.ts +23 -0
- package/lib/scenes/Scene2D.d.ts.map +1 -0
- package/lib/scenes/Scene2D.js +152 -0
- package/lib/scenes/index.d.ts +4 -0
- package/lib/scenes/index.d.ts.map +1 -0
- package/lib/scenes/index.js +4 -0
- package/lib/scenes/makeScene2D.d.ts +5 -0
- package/lib/scenes/makeScene2D.d.ts.map +1 -0
- package/lib/scenes/makeScene2D.js +12 -0
- package/lib/scenes/useScene2D.d.ts +3 -0
- package/lib/scenes/useScene2D.d.ts.map +1 -0
- package/lib/scenes/useScene2D.js +5 -0
- package/lib/tsconfig.build.tsbuildinfo +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/utils/CanvasUtils.d.ts +21 -0
- package/lib/utils/CanvasUtils.d.ts.map +1 -0
- package/lib/utils/CanvasUtils.js +138 -0
- package/lib/utils/diff.d.ts +31 -0
- package/lib/utils/diff.d.ts.map +1 -0
- package/lib/utils/diff.js +97 -0
- package/lib/utils/index.d.ts +4 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +4 -0
- package/lib/utils/is.d.ts +8 -0
- package/lib/utils/is.d.ts.map +1 -0
- package/lib/utils/is.js +10 -0
- package/lib/utils/makeSignalExtensions.d.ts +4 -0
- package/lib/utils/makeSignalExtensions.d.ts.map +1 -0
- package/lib/utils/makeSignalExtensions.js +20 -0
- package/lib/utils/withDefaults.d.ts +20 -0
- package/lib/utils/withDefaults.d.ts.map +1 -0
- package/lib/utils/withDefaults.js +23 -0
- package/package.json +54 -0
- package/src/editor/NodeInspectorConfig.tsx +76 -0
- package/src/editor/PreviewOverlayConfig.tsx +65 -0
- package/src/editor/Provider.tsx +109 -0
- package/src/editor/SceneGraphTabConfig.tsx +87 -0
- package/src/editor/icons/CircleIcon.tsx +7 -0
- package/src/editor/icons/CodeBlockIcon.tsx +8 -0
- package/src/editor/icons/CurveIcon.tsx +7 -0
- package/src/editor/icons/GridIcon.tsx +7 -0
- package/src/editor/icons/IconMap.ts +35 -0
- package/src/editor/icons/ImgIcon.tsx +8 -0
- package/src/editor/icons/LayoutIcon.tsx +9 -0
- package/src/editor/icons/LineIcon.tsx +7 -0
- package/src/editor/icons/NodeIcon.tsx +7 -0
- package/src/editor/icons/RayIcon.tsx +7 -0
- package/src/editor/icons/RectIcon.tsx +7 -0
- package/src/editor/icons/ShapeIcon.tsx +7 -0
- package/src/editor/icons/TxtIcon.tsx +8 -0
- package/src/editor/icons/VideoIcon.tsx +7 -0
- package/src/editor/icons/View2DIcon.tsx +10 -0
- package/src/editor/index.css +0 -0
- package/src/editor/index.ts +19 -0
- package/src/editor/shortcuts.ts +27 -0
- package/src/editor/tree/DetachedRoot.tsx +27 -0
- package/src/editor/tree/NodeElement.tsx +72 -0
- package/src/editor/tree/TreeElement.tsx +70 -0
- package/src/editor/tree/TreeRoot.tsx +10 -0
- package/src/editor/tree/ViewRoot.tsx +20 -0
- package/src/editor/tree/index.module.scss +45 -0
- package/src/editor/tree/index.ts +4 -0
- package/src/editor/tree/navigation.ts +145 -0
- package/src/editor/tsconfig.build.json +5 -0
- package/src/editor/tsconfig.json +12 -0
- package/src/editor/tsdoc.json +4 -0
- package/src/editor/utils/SignalSet.ts +37 -0
- package/src/editor/utils/index.ts +1 -0
- package/src/editor/vite-env.d.ts +1 -0
- package/src/lib/code/CodeCursor.ts +468 -0
- package/src/lib/code/CodeDiffer.ts +77 -0
- package/src/lib/code/CodeFragment.ts +96 -0
- package/src/lib/code/CodeHighlighter.ts +73 -0
- package/src/lib/code/CodeMetrics.ts +47 -0
- package/src/lib/code/CodeRange.test.ts +113 -0
- package/src/lib/code/CodeRange.ts +222 -0
- package/src/lib/code/CodeScope.ts +100 -0
- package/src/lib/code/CodeSelection.ts +28 -0
- package/src/lib/code/CodeSignal.ts +348 -0
- package/src/lib/code/CodeTokenizer.ts +54 -0
- package/src/lib/code/DefaultHighlightStyle.ts +98 -0
- package/src/lib/code/LezerHighlighter.ts +113 -0
- package/src/lib/code/diff.test.ts +311 -0
- package/src/lib/code/diff.ts +319 -0
- package/src/lib/code/extractRange.ts +125 -0
- package/src/lib/code/index.ts +13 -0
- package/src/lib/components/Bezier.ts +103 -0
- package/src/lib/components/Camera.ts +359 -0
- package/src/lib/components/Circle.ts +269 -0
- package/src/lib/components/Code.ts +532 -0
- package/src/lib/components/CodeBlock.ts +581 -0
- package/src/lib/components/CubicBezier.ts +115 -0
- package/src/lib/components/Curve.ts +455 -0
- package/src/lib/components/Grid.ts +134 -0
- package/src/lib/components/Icon.ts +95 -0
- package/src/lib/components/Img.ts +305 -0
- package/src/lib/components/Knot.ts +156 -0
- package/src/lib/components/Latex.ts +249 -0
- package/src/lib/components/Layout.ts +1071 -0
- package/src/lib/components/Line.ts +394 -0
- package/src/lib/components/Node.ts +1949 -0
- package/src/lib/components/Path.ts +132 -0
- package/src/lib/components/Polygon.ts +238 -0
- package/src/lib/components/QuadBezier.ts +103 -0
- package/src/lib/components/Ray.ts +126 -0
- package/src/lib/components/Rect.ts +186 -0
- package/src/lib/components/SVG.ts +788 -0
- package/src/lib/components/Shape.ts +146 -0
- package/src/lib/components/Spline.ts +318 -0
- package/src/lib/components/Txt.test.tsx +81 -0
- package/src/lib/components/Txt.ts +204 -0
- package/src/lib/components/TxtLeaf.ts +210 -0
- package/src/lib/components/Video.ts +368 -0
- package/src/lib/components/View2D.ts +85 -0
- package/src/lib/components/__logs__/image-without-source.md +17 -0
- package/src/lib/components/__logs__/line-without-points.md +30 -0
- package/src/lib/components/__logs__/reactive-playback-rate.md +21 -0
- package/src/lib/components/__logs__/spline-with-insufficient-knots.md +24 -0
- package/src/lib/components/__tests__/children.test.tsx +142 -0
- package/src/lib/components/__tests__/clone.test.tsx +126 -0
- package/src/lib/components/__tests__/generatorTest.ts +27 -0
- package/src/lib/components/__tests__/mockScene2D.ts +50 -0
- package/src/lib/components/__tests__/query.test.tsx +122 -0
- package/src/lib/components/__tests__/state.test.tsx +60 -0
- package/src/lib/components/index.ts +26 -0
- package/src/lib/components/types.ts +35 -0
- package/src/lib/curves/ArcSegment.ts +155 -0
- package/src/lib/curves/CircleSegment.ts +77 -0
- package/src/lib/curves/CubicBezierSegment.ts +78 -0
- package/src/lib/curves/CurveDrawingInfo.ts +11 -0
- package/src/lib/curves/CurvePoint.ts +15 -0
- package/src/lib/curves/CurveProfile.ts +7 -0
- package/src/lib/curves/KnotInfo.ts +10 -0
- package/src/lib/curves/LineSegment.ts +62 -0
- package/src/lib/curves/Polynomial.ts +355 -0
- package/src/lib/curves/Polynomial2D.ts +62 -0
- package/src/lib/curves/PolynomialSegment.ts +124 -0
- package/src/lib/curves/QuadBezierSegment.ts +64 -0
- package/src/lib/curves/Segment.ts +17 -0
- package/src/lib/curves/UniformPolynomialCurveSampler.ts +93 -0
- package/src/lib/curves/createCurveProfileLerp.ts +471 -0
- package/src/lib/curves/getBezierSplineProfile.ts +227 -0
- package/src/lib/curves/getCircleProfile.ts +86 -0
- package/src/lib/curves/getPathProfile.ts +177 -0
- package/src/lib/curves/getPointAtDistance.ts +21 -0
- package/src/lib/curves/getPolylineProfile.test.ts +21 -0
- package/src/lib/curves/getPolylineProfile.ts +88 -0
- package/src/lib/curves/getRectProfile.ts +138 -0
- package/src/lib/curves/index.ts +16 -0
- package/src/lib/decorators/canvasStyleSignal.ts +15 -0
- package/src/lib/decorators/colorSignal.ts +9 -0
- package/src/lib/decorators/compound.ts +85 -0
- package/src/lib/decorators/computed.ts +18 -0
- package/src/lib/decorators/defaultStyle.ts +15 -0
- package/src/lib/decorators/filtersSignal.ts +133 -0
- package/src/lib/decorators/index.ts +10 -0
- package/src/lib/decorators/initializers.ts +34 -0
- package/src/lib/decorators/nodeName.ts +13 -0
- package/src/lib/decorators/signal.test.ts +89 -0
- package/src/lib/decorators/signal.ts +348 -0
- package/src/lib/decorators/spacingSignal.ts +15 -0
- package/src/lib/decorators/vector2Signal.ts +35 -0
- package/src/lib/globals.d.ts +3 -0
- package/src/lib/index.ts +8 -0
- package/src/lib/jsx-dev-runtime.ts +2 -0
- package/src/lib/jsx-runtime.ts +45 -0
- package/src/lib/parse-svg-path.d.ts +14 -0
- package/src/lib/partials/Filter.ts +185 -0
- package/src/lib/partials/Gradient.ts +103 -0
- package/src/lib/partials/Pattern.ts +35 -0
- package/src/lib/partials/ShaderConfig.ts +122 -0
- package/src/lib/partials/index.ts +4 -0
- package/src/lib/partials/types.ts +58 -0
- package/src/lib/scenes/Scene2D.ts +195 -0
- package/src/lib/scenes/index.ts +3 -0
- package/src/lib/scenes/makeScene2D.ts +19 -0
- package/src/lib/scenes/useScene2D.ts +6 -0
- package/src/lib/tsconfig.build.json +12 -0
- package/src/lib/tsconfig.json +14 -0
- package/src/lib/tsdoc.json +4 -0
- package/src/lib/utils/CanvasUtils.ts +306 -0
- package/src/lib/utils/diff.test.ts +453 -0
- package/src/lib/utils/diff.ts +148 -0
- package/src/lib/utils/index.ts +3 -0
- package/src/lib/utils/is.ts +11 -0
- package/src/lib/utils/makeSignalExtensions.ts +29 -0
- package/src/lib/utils/withDefaults.tsx +26 -0
- package/src/tsconfig.base.json +18 -0
- package/src/tsconfig.build.json +8 -0
- package/src/tsconfig.json +5 -0
- package/tsconfig.project.json +7 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import {CodeRange} from './CodeRange';
|
|
2
|
+
import {CodeTag, resolveCodeTag} from './CodeScope';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Transform the fragments to isolate the given range into its own fragment.
|
|
6
|
+
*
|
|
7
|
+
* @remarks
|
|
8
|
+
* This function will try to preserve the original fragments, resolving them
|
|
9
|
+
* only if they overlap with the range.
|
|
10
|
+
*
|
|
11
|
+
* @param range - The range to extract.
|
|
12
|
+
* @param fragments - The fragments to transform.
|
|
13
|
+
*
|
|
14
|
+
* @returns A tuple containing the transformed fragments and the index of the
|
|
15
|
+
* isolated fragment within.
|
|
16
|
+
*/
|
|
17
|
+
export function extractRange(
|
|
18
|
+
range: CodeRange,
|
|
19
|
+
fragments: CodeTag[],
|
|
20
|
+
): [CodeTag[], number] {
|
|
21
|
+
const [from, to] = range;
|
|
22
|
+
let [fromRow, fromColumn] = from;
|
|
23
|
+
let [toRow, toColumn] = to;
|
|
24
|
+
if (fromRow > toRow || (fromRow === toRow && fromColumn > toColumn)) {
|
|
25
|
+
[fromRow, fromColumn] = to;
|
|
26
|
+
[toRow, toColumn] = from;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
let currentRow = 0;
|
|
30
|
+
let currentColumn = 0;
|
|
31
|
+
const newFragments: CodeTag[] = [];
|
|
32
|
+
let index = -1;
|
|
33
|
+
let found = false;
|
|
34
|
+
let extracted = '';
|
|
35
|
+
|
|
36
|
+
for (const fragment of fragments) {
|
|
37
|
+
if (found) {
|
|
38
|
+
newFragments.push(fragment);
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const resolved = resolveCodeTag(fragment, false);
|
|
43
|
+
const lines = resolved.split('\n');
|
|
44
|
+
const newRows = lines.length - 1;
|
|
45
|
+
const lastColumn = lines[newRows].length;
|
|
46
|
+
const nextColumn = newRows > 0 ? lastColumn : currentColumn + lastColumn;
|
|
47
|
+
|
|
48
|
+
if (
|
|
49
|
+
fromRow > currentRow + newRows ||
|
|
50
|
+
(fromRow === currentRow + newRows && fromColumn > nextColumn)
|
|
51
|
+
) {
|
|
52
|
+
currentRow += newRows;
|
|
53
|
+
currentColumn = nextColumn;
|
|
54
|
+
newFragments.push(fragment);
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
for (let i = 0; i < resolved.length; i++) {
|
|
59
|
+
const char = resolved.charAt(i);
|
|
60
|
+
if (fromRow === currentRow && fromColumn >= currentColumn) {
|
|
61
|
+
if (fromColumn === currentColumn) {
|
|
62
|
+
index = newFragments.length + 1;
|
|
63
|
+
newFragments.push(resolved.slice(0, i), '');
|
|
64
|
+
} else if (char === '\n') {
|
|
65
|
+
index = newFragments.length + 1;
|
|
66
|
+
newFragments.push(
|
|
67
|
+
resolved.slice(0, i) + ' '.repeat(fromColumn - currentColumn),
|
|
68
|
+
'',
|
|
69
|
+
);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
if (index !== -1 && toRow === currentRow && toColumn >= currentColumn) {
|
|
74
|
+
if (toColumn === currentColumn) {
|
|
75
|
+
newFragments.push(resolved.slice(i));
|
|
76
|
+
found = true;
|
|
77
|
+
break;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
if (char === '\n') {
|
|
81
|
+
if (currentColumn < toColumn) {
|
|
82
|
+
extracted += '\n';
|
|
83
|
+
if (i + 1 < resolved.length) {
|
|
84
|
+
newFragments.push(resolved.slice(i + 1));
|
|
85
|
+
}
|
|
86
|
+
} else {
|
|
87
|
+
newFragments.push(resolved.slice(i));
|
|
88
|
+
}
|
|
89
|
+
found = true;
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
if (index !== -1) {
|
|
95
|
+
extracted += char;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
if (char === '\n') {
|
|
99
|
+
currentRow++;
|
|
100
|
+
currentColumn = 0;
|
|
101
|
+
} else {
|
|
102
|
+
currentColumn++;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (index === -1) {
|
|
107
|
+
newFragments.push(fragment);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if (index === -1) {
|
|
112
|
+
index = newFragments.length + 1;
|
|
113
|
+
const missingRows = fromRow - currentRow;
|
|
114
|
+
const missingColumns =
|
|
115
|
+
missingRows > 0 ? fromColumn : fromColumn - currentColumn;
|
|
116
|
+
newFragments.push(
|
|
117
|
+
'\n'.repeat(missingRows) + ' '.repeat(missingColumns),
|
|
118
|
+
'',
|
|
119
|
+
);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
newFragments[index] = extracted;
|
|
123
|
+
|
|
124
|
+
return [newFragments, index];
|
|
125
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './CodeCursor';
|
|
2
|
+
export * from './CodeDiffer';
|
|
3
|
+
export * from './CodeFragment';
|
|
4
|
+
export * from './CodeHighlighter';
|
|
5
|
+
export * from './CodeRange';
|
|
6
|
+
export * from './CodeScope';
|
|
7
|
+
export * from './CodeSelection';
|
|
8
|
+
export * from './CodeSignal';
|
|
9
|
+
export * from './CodeTokenizer';
|
|
10
|
+
export * from './DefaultHighlightStyle';
|
|
11
|
+
export * from './diff';
|
|
12
|
+
export * from './extractRange';
|
|
13
|
+
export * from './LezerHighlighter';
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import {BBox, SerializedVector2, Vector2} from '@efxlab/motion-canvas-core';
|
|
2
|
+
import {CurveProfile} from '../curves';
|
|
3
|
+
import {PolynomialSegment} from '../curves/PolynomialSegment';
|
|
4
|
+
import {computed} from '../decorators';
|
|
5
|
+
import {DesiredLength} from '../partials';
|
|
6
|
+
import {arc, drawLine, drawPivot, moveTo} from '../utils';
|
|
7
|
+
import {Curve} from './Curve';
|
|
8
|
+
|
|
9
|
+
export interface BezierOverlayInfo {
|
|
10
|
+
curve: Path2D;
|
|
11
|
+
handleLines: Path2D;
|
|
12
|
+
controlPoints: Vector2[];
|
|
13
|
+
startPoint: Vector2;
|
|
14
|
+
endPoint: Vector2;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export abstract class Bezier extends Curve {
|
|
18
|
+
public override profile(): CurveProfile {
|
|
19
|
+
const segment = this.segment();
|
|
20
|
+
return {
|
|
21
|
+
segments: [segment],
|
|
22
|
+
arcLength: segment.arcLength,
|
|
23
|
+
minSin: 0,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
protected abstract segment(): PolynomialSegment;
|
|
28
|
+
|
|
29
|
+
protected abstract overlayInfo(matrix: DOMMatrix): BezierOverlayInfo;
|
|
30
|
+
|
|
31
|
+
@computed()
|
|
32
|
+
protected childrenBBox(): BBox {
|
|
33
|
+
return BBox.fromPoints(...this.segment().points);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
protected override desiredSize(): SerializedVector2<DesiredLength> {
|
|
37
|
+
return this.segment().getBBox().size;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
protected override offsetComputedLayout(box: BBox): BBox {
|
|
41
|
+
box.position = box.position.sub(this.segment().getBBox().center);
|
|
42
|
+
return box;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
public override drawOverlay(
|
|
46
|
+
context: CanvasRenderingContext2D,
|
|
47
|
+
matrix: DOMMatrix,
|
|
48
|
+
) {
|
|
49
|
+
const size = this.computedSize();
|
|
50
|
+
const box = this.childrenBBox().transformCorners(matrix);
|
|
51
|
+
const offset = size.mul(this.offset()).scale(0.5).transformAsPoint(matrix);
|
|
52
|
+
const overlayInfo = this.overlayInfo(matrix);
|
|
53
|
+
|
|
54
|
+
context.lineWidth = 1;
|
|
55
|
+
context.strokeStyle = 'white';
|
|
56
|
+
context.fillStyle = 'white';
|
|
57
|
+
|
|
58
|
+
// Draw the curve itself first so everything else gets drawn on top of it
|
|
59
|
+
context.stroke(overlayInfo.curve);
|
|
60
|
+
|
|
61
|
+
context.fillStyle = 'white';
|
|
62
|
+
context.globalAlpha = 0.5;
|
|
63
|
+
|
|
64
|
+
context.beginPath();
|
|
65
|
+
context.stroke(overlayInfo.handleLines);
|
|
66
|
+
|
|
67
|
+
context.globalAlpha = 1;
|
|
68
|
+
context.lineWidth = 2;
|
|
69
|
+
|
|
70
|
+
// Draw start and end points
|
|
71
|
+
for (const point of [overlayInfo.startPoint, overlayInfo.endPoint]) {
|
|
72
|
+
moveTo(context, point);
|
|
73
|
+
context.beginPath();
|
|
74
|
+
arc(context, point, 4);
|
|
75
|
+
context.closePath();
|
|
76
|
+
context.stroke();
|
|
77
|
+
context.fill();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Draw the control points
|
|
81
|
+
context.fillStyle = 'black';
|
|
82
|
+
for (const point of overlayInfo.controlPoints) {
|
|
83
|
+
moveTo(context, point);
|
|
84
|
+
context.beginPath();
|
|
85
|
+
arc(context, point, 4);
|
|
86
|
+
context.closePath();
|
|
87
|
+
context.fill();
|
|
88
|
+
context.stroke();
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Draw the offset marker
|
|
92
|
+
context.lineWidth = 1;
|
|
93
|
+
context.beginPath();
|
|
94
|
+
drawPivot(context, offset);
|
|
95
|
+
context.stroke();
|
|
96
|
+
|
|
97
|
+
// Draw the bounding box
|
|
98
|
+
context.beginPath();
|
|
99
|
+
drawLine(context, box);
|
|
100
|
+
context.closePath();
|
|
101
|
+
context.stroke();
|
|
102
|
+
}
|
|
103
|
+
}
|
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import {
|
|
2
|
+
all,
|
|
3
|
+
DEFAULT,
|
|
4
|
+
easeInOutCubic,
|
|
5
|
+
InterpolationFunction,
|
|
6
|
+
modify,
|
|
7
|
+
PossibleVector2,
|
|
8
|
+
Reference,
|
|
9
|
+
SignalValue,
|
|
10
|
+
SimpleSignal,
|
|
11
|
+
threadable,
|
|
12
|
+
ThreadGenerator,
|
|
13
|
+
TimingFunction,
|
|
14
|
+
tween,
|
|
15
|
+
unwrap,
|
|
16
|
+
Vector2,
|
|
17
|
+
} from '@efxlab/motion-canvas-core';
|
|
18
|
+
import {cloneable, signal} from '../decorators';
|
|
19
|
+
import {Curve} from './Curve';
|
|
20
|
+
import {Node, NodeProps} from './Node';
|
|
21
|
+
import {Rect, RectProps} from './Rect';
|
|
22
|
+
|
|
23
|
+
export interface CameraProps extends NodeProps {
|
|
24
|
+
/**
|
|
25
|
+
* {@inheritDoc Camera.scene}
|
|
26
|
+
*/
|
|
27
|
+
scene?: Node;
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* {@inheritDoc Camera.zoom}
|
|
31
|
+
*/
|
|
32
|
+
zoom?: SignalValue<number>;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/**
|
|
36
|
+
* A node representing an orthographic camera.
|
|
37
|
+
*
|
|
38
|
+
* @preview
|
|
39
|
+
* ```tsx editor
|
|
40
|
+
* import {Camera, Circle, makeScene2D, Rect} from '@efxlab/motion-canvas-2d';
|
|
41
|
+
* import {all, createRef} from '@efxlab/motion-canvas-core';
|
|
42
|
+
*
|
|
43
|
+
* export default makeScene2D(function* (view) {
|
|
44
|
+
* const camera = createRef<Camera>();
|
|
45
|
+
* const rect = createRef<Rect>();
|
|
46
|
+
* const circle = createRef<Circle>();
|
|
47
|
+
*
|
|
48
|
+
* view.add(
|
|
49
|
+
* <>
|
|
50
|
+
* <Camera ref={camera}>
|
|
51
|
+
* <Rect
|
|
52
|
+
* ref={rect}
|
|
53
|
+
* fill={'lightseagreen'}
|
|
54
|
+
* size={100}
|
|
55
|
+
* position={[100, -50]}
|
|
56
|
+
* />
|
|
57
|
+
* <Circle
|
|
58
|
+
* ref={circle}
|
|
59
|
+
* fill={'hotpink'}
|
|
60
|
+
* size={120}
|
|
61
|
+
* position={[-100, 50]}
|
|
62
|
+
* />
|
|
63
|
+
* </Camera>
|
|
64
|
+
* </>,
|
|
65
|
+
* );
|
|
66
|
+
*
|
|
67
|
+
* yield* all(
|
|
68
|
+
* camera().centerOn(rect(), 3),
|
|
69
|
+
* camera().rotation(180, 3),
|
|
70
|
+
* camera().zoom(1.8, 3),
|
|
71
|
+
* );
|
|
72
|
+
* yield* camera().centerOn(circle(), 2);
|
|
73
|
+
* yield* camera().reset(1);
|
|
74
|
+
* });
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export class Camera extends Node {
|
|
78
|
+
/**
|
|
79
|
+
* The scene node that the camera is rendering.
|
|
80
|
+
*/
|
|
81
|
+
@signal()
|
|
82
|
+
declare public readonly scene: SimpleSignal<Node, this>;
|
|
83
|
+
|
|
84
|
+
public constructor({children, ...props}: CameraProps) {
|
|
85
|
+
super(props);
|
|
86
|
+
|
|
87
|
+
if (!this.scene()) {
|
|
88
|
+
this.scene(new Node({}));
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (children) {
|
|
92
|
+
this.scene().add(children);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* The zoom level of the camera.
|
|
98
|
+
*
|
|
99
|
+
* @defaultValue 1
|
|
100
|
+
*/
|
|
101
|
+
@cloneable(false)
|
|
102
|
+
@signal()
|
|
103
|
+
declare public readonly zoom: SimpleSignal<number, this>;
|
|
104
|
+
|
|
105
|
+
protected getZoom(): number {
|
|
106
|
+
return 1 / this.scale.x();
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
protected setZoom(value: SignalValue<number>) {
|
|
110
|
+
this.scale(modify(value, unwrapped => 1 / unwrapped));
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
protected getDefaultZoom() {
|
|
114
|
+
return this.scale.x.context.getInitial();
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
protected *tweenZoom(
|
|
118
|
+
value: SignalValue<number>,
|
|
119
|
+
duration: number,
|
|
120
|
+
timingFunction: TimingFunction,
|
|
121
|
+
interpolationFunction: InterpolationFunction<number>,
|
|
122
|
+
): ThreadGenerator {
|
|
123
|
+
const from = this.scale.x();
|
|
124
|
+
yield* tween(duration, v => {
|
|
125
|
+
this.zoom(
|
|
126
|
+
1 / interpolationFunction(from, 1 / unwrap(value), timingFunction(v)),
|
|
127
|
+
);
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Resets the camera's position, rotation and zoom level to their original
|
|
133
|
+
* values.
|
|
134
|
+
*
|
|
135
|
+
* @param duration - The duration of the tween.
|
|
136
|
+
* @param timingFunction - The timing function to use for the tween.
|
|
137
|
+
*/
|
|
138
|
+
@threadable()
|
|
139
|
+
public *reset(
|
|
140
|
+
duration: number,
|
|
141
|
+
timingFunction: TimingFunction = easeInOutCubic,
|
|
142
|
+
): ThreadGenerator {
|
|
143
|
+
yield* all(
|
|
144
|
+
this.position(DEFAULT, duration, timingFunction),
|
|
145
|
+
this.zoom(DEFAULT, duration, timingFunction),
|
|
146
|
+
this.rotation(DEFAULT, duration, timingFunction),
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Centers the camera on the specified position without changing the zoom
|
|
152
|
+
* level.
|
|
153
|
+
*
|
|
154
|
+
* @param position - The position to center the camera on.
|
|
155
|
+
* @param duration - The duration of the tween.
|
|
156
|
+
* @param timingFunction - The timing function to use for the tween.
|
|
157
|
+
* @param interpolationFunction - The interpolation function to use for the
|
|
158
|
+
* tween.
|
|
159
|
+
*/
|
|
160
|
+
public centerOn(
|
|
161
|
+
position: PossibleVector2,
|
|
162
|
+
duration: number,
|
|
163
|
+
timingFunction?: TimingFunction,
|
|
164
|
+
interpolationFunction?: InterpolationFunction<Vector2>,
|
|
165
|
+
): ThreadGenerator;
|
|
166
|
+
/**
|
|
167
|
+
* Centers the camera on the specified node without changing the zoom level.
|
|
168
|
+
*
|
|
169
|
+
* @param node - The node to center the camera on.
|
|
170
|
+
* @param duration - The duration of the tween.
|
|
171
|
+
* @param timingFunction - The timing function to use for the tween.
|
|
172
|
+
* @param interpolationFunction - The interpolation function to use for the
|
|
173
|
+
* tween.
|
|
174
|
+
*/
|
|
175
|
+
public centerOn(
|
|
176
|
+
node: Node,
|
|
177
|
+
duration: number,
|
|
178
|
+
timingFunction?: TimingFunction,
|
|
179
|
+
interpolationFunction?: InterpolationFunction<Vector2>,
|
|
180
|
+
): ThreadGenerator;
|
|
181
|
+
@threadable()
|
|
182
|
+
public *centerOn(
|
|
183
|
+
positionOrNode: Node | PossibleVector2,
|
|
184
|
+
duration: number,
|
|
185
|
+
timing: TimingFunction = easeInOutCubic,
|
|
186
|
+
interpolationFunction: InterpolationFunction<Vector2> = Vector2.lerp,
|
|
187
|
+
): ThreadGenerator {
|
|
188
|
+
const position =
|
|
189
|
+
positionOrNode instanceof Node
|
|
190
|
+
? positionOrNode
|
|
191
|
+
.absolutePosition()
|
|
192
|
+
.transformAsPoint(this.scene().worldToLocal())
|
|
193
|
+
: positionOrNode;
|
|
194
|
+
yield* this.position(position, duration, timing, interpolationFunction);
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* Makes the camera follow a path specified by the provided curve.
|
|
199
|
+
*
|
|
200
|
+
* @remarks
|
|
201
|
+
* This will not change the orientation of the camera. To make the camera
|
|
202
|
+
* orient itself along the curve, use {@link followCurveWithRotation} or
|
|
203
|
+
* {@link followCurveWithRotationReverse}.
|
|
204
|
+
*
|
|
205
|
+
* If you want to follow the curve in reverse, use {@link followCurveReverse}.
|
|
206
|
+
*
|
|
207
|
+
* @param curve - The curve to follow.
|
|
208
|
+
* @param duration - The duration of the tween.
|
|
209
|
+
* @param timing - The timing function to use for the tween.
|
|
210
|
+
*/
|
|
211
|
+
@threadable()
|
|
212
|
+
public *followCurve(
|
|
213
|
+
curve: Curve,
|
|
214
|
+
duration: number,
|
|
215
|
+
timing: TimingFunction = easeInOutCubic,
|
|
216
|
+
): ThreadGenerator {
|
|
217
|
+
yield* tween(duration, value => {
|
|
218
|
+
const t = timing(value);
|
|
219
|
+
const point = curve
|
|
220
|
+
.getPointAtPercentage(t)
|
|
221
|
+
.position.transformAsPoint(curve.localToWorld());
|
|
222
|
+
|
|
223
|
+
this.position(point);
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
/**
|
|
228
|
+
* Makes the camera follow a path specified by the provided curve in reverse.
|
|
229
|
+
*
|
|
230
|
+
* @remarks
|
|
231
|
+
* This will not change the orientation of the camera. To make the camera
|
|
232
|
+
* orient itself along the curve, use {@link followCurveWithRotation} or
|
|
233
|
+
* {@link followCurveWithRotationReverse}.
|
|
234
|
+
*
|
|
235
|
+
* If you want to follow the curve forward, use {@link followCurve}.
|
|
236
|
+
*
|
|
237
|
+
* @param curve - The curve to follow.
|
|
238
|
+
* @param duration - The duration of the tween.
|
|
239
|
+
* @param timing - The timing function to use for the tween.
|
|
240
|
+
*/
|
|
241
|
+
@threadable()
|
|
242
|
+
public *followCurveReverse(
|
|
243
|
+
curve: Curve,
|
|
244
|
+
duration: number,
|
|
245
|
+
timing: TimingFunction = easeInOutCubic,
|
|
246
|
+
) {
|
|
247
|
+
yield* tween(duration, value => {
|
|
248
|
+
const t = 1 - timing(value);
|
|
249
|
+
const point = curve
|
|
250
|
+
.getPointAtPercentage(t)
|
|
251
|
+
.position.transformAsPoint(curve.localToWorld());
|
|
252
|
+
|
|
253
|
+
this.position(point);
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/**
|
|
258
|
+
* Makes the camera follow a path specified by the provided curve while
|
|
259
|
+
* pointing the camera the direction of the tangent.
|
|
260
|
+
*
|
|
261
|
+
* @remarks
|
|
262
|
+
* To make the camera follow the curve without changing its orientation, use
|
|
263
|
+
* {@link followCurve} or {@link followCurveReverse}.
|
|
264
|
+
*
|
|
265
|
+
* If you want to follow the curve in reverse, use
|
|
266
|
+
* {@link followCurveWithRotationReverse}.
|
|
267
|
+
*
|
|
268
|
+
* @param curve - The curve to follow.
|
|
269
|
+
* @param duration - The duration of the tween.
|
|
270
|
+
* @param timing - The timing function to use for the tween.
|
|
271
|
+
*/
|
|
272
|
+
@threadable()
|
|
273
|
+
public *followCurveWithRotation(
|
|
274
|
+
curve: Curve,
|
|
275
|
+
duration: number,
|
|
276
|
+
timing: TimingFunction = easeInOutCubic,
|
|
277
|
+
) {
|
|
278
|
+
yield* tween(duration, value => {
|
|
279
|
+
const t = timing(value);
|
|
280
|
+
const {position, normal} = curve.getPointAtPercentage(t);
|
|
281
|
+
const point = position.transformAsPoint(curve.localToWorld());
|
|
282
|
+
const angle = normal.flipped.perpendicular.degrees;
|
|
283
|
+
|
|
284
|
+
this.position(point);
|
|
285
|
+
this.rotation(angle);
|
|
286
|
+
});
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
/**
|
|
290
|
+
* Makes the camera follow a path specified by the provided curve in reverse
|
|
291
|
+
* while pointing the camera the direction of the tangent.
|
|
292
|
+
*
|
|
293
|
+
* @remarks
|
|
294
|
+
* To make the camera follow the curve without changing its orientation, use
|
|
295
|
+
* {@link followCurve} or {@link followCurveReverse}.
|
|
296
|
+
*
|
|
297
|
+
* If you want to follow the curve forward, use
|
|
298
|
+
* {@link followCurveWithRotation}.
|
|
299
|
+
*
|
|
300
|
+
* @param curve - The curve to follow.
|
|
301
|
+
* @param duration - The duration of the tween.
|
|
302
|
+
* @param timing - The timing function to use for the tween.
|
|
303
|
+
*/
|
|
304
|
+
@threadable()
|
|
305
|
+
public *followCurveWithRotationReverse(
|
|
306
|
+
curve: Curve,
|
|
307
|
+
duration: number,
|
|
308
|
+
timing: TimingFunction = easeInOutCubic,
|
|
309
|
+
) {
|
|
310
|
+
yield* tween(duration, value => {
|
|
311
|
+
const t = 1 - timing(value);
|
|
312
|
+
const {position, normal} = curve.getPointAtPercentage(t);
|
|
313
|
+
const point = position.transformAsPoint(curve.localToWorld());
|
|
314
|
+
const angle = normal.flipped.perpendicular.degrees;
|
|
315
|
+
|
|
316
|
+
this.position(point);
|
|
317
|
+
this.rotation(angle);
|
|
318
|
+
});
|
|
319
|
+
}
|
|
320
|
+
|
|
321
|
+
protected override transformContext(context: CanvasRenderingContext2D) {
|
|
322
|
+
const matrix = this.localToParent().inverse();
|
|
323
|
+
context.transform(
|
|
324
|
+
matrix.a,
|
|
325
|
+
matrix.b,
|
|
326
|
+
matrix.c,
|
|
327
|
+
matrix.d,
|
|
328
|
+
matrix.e,
|
|
329
|
+
matrix.f,
|
|
330
|
+
);
|
|
331
|
+
}
|
|
332
|
+
|
|
333
|
+
public override hit(position: Vector2): Node | null {
|
|
334
|
+
const local = position.transformAsPoint(this.localToParent());
|
|
335
|
+
return this.scene().hit(local);
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
protected override drawChildren(context: CanvasRenderingContext2D) {
|
|
339
|
+
(this.scene() as Camera).drawChildren(context);
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
// eslint-disable-next-line @typescript-eslint/naming-convention
|
|
343
|
+
public static Stage({
|
|
344
|
+
children,
|
|
345
|
+
cameraRef,
|
|
346
|
+
scene,
|
|
347
|
+
...props
|
|
348
|
+
}: RectProps & {cameraRef?: Reference<Camera>; scene?: Node}) {
|
|
349
|
+
const camera = new Camera({scene: scene, children});
|
|
350
|
+
|
|
351
|
+
cameraRef?.(camera);
|
|
352
|
+
|
|
353
|
+
return new Rect({
|
|
354
|
+
clip: true,
|
|
355
|
+
...props,
|
|
356
|
+
children: [camera],
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
}
|