@canvas-commons/2d 0.2.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/LICENSE +22 -0
- package/editor/index.css +40 -0
- package/editor/index.js +525 -0
- package/editor/index.js.map +1 -0
- package/lib/index-OvpZ-GsA.d.ts +5673 -0
- package/lib/index-OvpZ-GsA.d.ts.map +1 -0
- package/lib/index.d.ts +2 -0
- package/lib/index.js +10326 -0
- package/lib/index.js.map +1 -0
- package/lib/jsx-dev-runtime.d.ts +2 -0
- package/lib/jsx-dev-runtime.js +2 -0
- package/lib/jsx-runtime.d.ts +2 -0
- package/lib/jsx-runtime.js +28 -0
- package/lib/jsx-runtime.js.map +1 -0
- package/package.json +79 -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/CodeIcon.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 +401 -0
- package/src/lib/components/Circle.ts +310 -0
- package/src/lib/components/Code.ts +532 -0
- package/src/lib/components/CubicBezier.ts +115 -0
- package/src/lib/components/Curve.ts +460 -0
- package/src/lib/components/Grid.ts +134 -0
- package/src/lib/components/Icon.ts +153 -0
- package/src/lib/components/Img.ts +328 -0
- package/src/lib/components/Knot.ts +156 -0
- package/src/lib/components/Latex.ts +537 -0
- package/src/lib/components/Layout.ts +1101 -0
- package/src/lib/components/Line.ts +394 -0
- package/src/lib/components/Node.ts +1941 -0
- package/src/lib/components/Path.ts +132 -0
- package/src/lib/components/Polygon.ts +266 -0
- package/src/lib/components/QuadBezier.ts +103 -0
- package/src/lib/components/Ray.ts +126 -0
- package/src/lib/components/Rect.ts +219 -0
- package/src/lib/components/SVG.ts +853 -0
- package/src/lib/components/Shape.ts +322 -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.ts +18 -0
- package/src/lib/components/__logs__/line-without-points.ts +31 -0
- package/src/lib/components/__logs__/reactive-playback-rate.ts +22 -0
- package/src/lib/components/__logs__/spline-with-insufficient-knots.ts +25 -0
- package/src/lib/components/__tests__/Camera.test.tsx +73 -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__/fontInheritance.test.tsx +102 -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 +169 -0
- package/src/lib/curves/CircleSegment.ts +99 -0
- package/src/lib/curves/CubicBezierSegment.ts +80 -0
- package/src/lib/curves/CurveDrawingInfo.ts +11 -0
- package/src/lib/curves/CurvePoint.ts +15 -0
- package/src/lib/curves/CurveProfile.ts +28 -0
- package/src/lib/curves/KnotInfo.ts +10 -0
- package/src/lib/curves/LineSegment.ts +75 -0
- package/src/lib/curves/Polynomial.ts +355 -0
- package/src/lib/curves/Polynomial2D.ts +62 -0
- package/src/lib/curves/PolynomialSegment.ts +151 -0
- package/src/lib/curves/QuadBezierSegment.ts +66 -0
- package/src/lib/curves/Segment.ts +31 -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 +32 -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/transformSignals.test.ts +858 -0
- package/src/lib/decorators/transformSignals.ts +1633 -0
- package/src/lib/decorators/vector2Signal.ts +35 -0
- package/src/lib/globals.d.ts +2 -0
- package/src/lib/index.ts +9 -0
- package/src/lib/jsx-dev-runtime.ts +2 -0
- package/src/lib/jsx-runtime.ts +45 -0
- package/src/lib/morphers/PathMorpher.ts +8 -0
- package/src/lib/morphers/defaultMorpher.ts +43 -0
- package/src/lib/morphers/index.ts +4 -0
- package/src/lib/morphers/manimMorpher.ts +658 -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/RoughConfig.ts +180 -0
- package/src/lib/partials/ShaderConfig.ts +122 -0
- package/src/lib/partials/index.ts +5 -0
- package/src/lib/partials/types.ts +58 -0
- package/src/lib/scenes/Scene2D.ts +167 -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 +5 -0
- package/src/lib/tsconfig.json +11 -0
- package/src/lib/tsdoc.json +4 -0
- package/src/lib/utils/CanvasUtils.ts +304 -0
- package/src/lib/utils/PathDataBuilder.ts +320 -0
- package/src/lib/utils/diff.test.ts +453 -0
- package/src/lib/utils/diff.ts +148 -0
- package/src/lib/utils/index.ts +5 -0
- package/src/lib/utils/is.ts +11 -0
- package/src/lib/utils/makeSignalExtensions.ts +29 -0
- package/src/lib/utils/rough.ts +513 -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,35 @@
|
|
|
1
|
+
import {
|
|
2
|
+
PossibleVector2,
|
|
3
|
+
Signal,
|
|
4
|
+
Vector2,
|
|
5
|
+
Vector2SignalContext,
|
|
6
|
+
} from '@canvas-commons/core';
|
|
7
|
+
import type {Length} from '../partials';
|
|
8
|
+
import {compound} from './compound';
|
|
9
|
+
import {wrapper} from './signal';
|
|
10
|
+
|
|
11
|
+
export type Vector2LengthSignal<TOwner> = Signal<
|
|
12
|
+
PossibleVector2<Length>,
|
|
13
|
+
Vector2,
|
|
14
|
+
TOwner
|
|
15
|
+
> & {
|
|
16
|
+
x: Signal<Length, number, TOwner>;
|
|
17
|
+
y: Signal<Length, number, TOwner>;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export function vector2Signal(
|
|
21
|
+
prefix?: string | Record<string, string>,
|
|
22
|
+
): PropertyDecorator {
|
|
23
|
+
return (target, key) => {
|
|
24
|
+
compound(
|
|
25
|
+
typeof prefix === 'object'
|
|
26
|
+
? prefix
|
|
27
|
+
: {
|
|
28
|
+
x: prefix ? `${prefix}X` : 'x',
|
|
29
|
+
y: prefix ? `${prefix}Y` : 'y',
|
|
30
|
+
},
|
|
31
|
+
Vector2SignalContext,
|
|
32
|
+
)(target, key);
|
|
33
|
+
wrapper(Vector2)(target, key);
|
|
34
|
+
};
|
|
35
|
+
}
|
package/src/lib/index.ts
ADDED
|
@@ -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('@canvas-commons/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,43 @@
|
|
|
1
|
+
import {CurveProfile} from '../curves/CurveProfile';
|
|
2
|
+
import {createCurveProfileLerp} from '../curves/createCurveProfileLerp';
|
|
3
|
+
import {getPathProfile} from '../curves/getPathProfile';
|
|
4
|
+
import {PathMorpher} from './PathMorpher';
|
|
5
|
+
|
|
6
|
+
function curveProfileToPath(profile: CurveProfile): string {
|
|
7
|
+
const parts: string[] = [];
|
|
8
|
+
let lastEnd: {x: number; y: number} | null = null;
|
|
9
|
+
|
|
10
|
+
for (const segment of profile.segments) {
|
|
11
|
+
const start = segment.getPoint(0).position;
|
|
12
|
+
const end = segment.getPoint(1).position;
|
|
13
|
+
|
|
14
|
+
if (!lastEnd || start.x !== lastEnd.x || start.y !== lastEnd.y) {
|
|
15
|
+
parts.push(`M${start.x},${start.y}`);
|
|
16
|
+
}
|
|
17
|
+
parts.push(`L${end.x},${end.y}`);
|
|
18
|
+
lastEnd = end;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return parts.join('');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Create a path morpher that uses the Kute.js-inspired polygon interpolation
|
|
26
|
+
* algorithm. Paths are sampled into polygons, point counts are equalized, and
|
|
27
|
+
* corresponding points are linearly interpolated.
|
|
28
|
+
*/
|
|
29
|
+
export function defaultMorpher(): PathMorpher {
|
|
30
|
+
return {
|
|
31
|
+
createInterpolator(fromPath: string, toPath: string) {
|
|
32
|
+
const fromProfile = getPathProfile(fromPath);
|
|
33
|
+
const toProfile = getPathProfile(toPath);
|
|
34
|
+
const interpolator = createCurveProfileLerp(fromProfile, toProfile);
|
|
35
|
+
|
|
36
|
+
return (progress: number): string => {
|
|
37
|
+
if (progress <= 0) return fromPath;
|
|
38
|
+
if (progress >= 1) return toPath;
|
|
39
|
+
return curveProfileToPath(interpolator(progress));
|
|
40
|
+
};
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|