@twick/2d 0.14.0 → 1.14.3
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 +21 -21
- package/editor/editor/tsconfig.build.tsbuildinfo +1 -1
- package/lib/components/Audio.d.ts.map +1 -1
- package/lib/components/Audio.js +33 -3
- package/lib/components/CodeBlock.d.ts +1 -1
- package/lib/components/Img.js +23 -23
- package/lib/components/Line.js +31 -31
- package/lib/components/Media.d.ts +6 -0
- package/lib/components/Media.d.ts.map +1 -1
- package/lib/components/Media.js +277 -61
- package/lib/components/Node.d.ts +1 -1
- package/lib/components/Path.d.ts +1 -1
- package/lib/components/SVG.d.ts +1 -1
- package/lib/components/Shape.d.ts +1 -1
- package/lib/components/Spline.js +25 -25
- package/lib/components/Video.d.ts +0 -1
- package/lib/components/Video.d.ts.map +1 -1
- package/lib/components/Video.js +70 -65
- package/lib/tsconfig.build.tsbuildinfo +1 -1
- package/package.json +4 -5
- package/src/editor/NodeInspectorConfig.tsx +76 -76
- package/src/editor/PreviewOverlayConfig.tsx +67 -67
- package/src/editor/Provider.tsx +93 -93
- package/src/editor/SceneGraphTabConfig.tsx +81 -81
- package/src/editor/icons/CircleIcon.tsx +7 -7
- package/src/editor/icons/CodeBlockIcon.tsx +8 -8
- package/src/editor/icons/CurveIcon.tsx +7 -7
- package/src/editor/icons/GridIcon.tsx +7 -7
- package/src/editor/icons/IconMap.ts +35 -35
- package/src/editor/icons/ImgIcon.tsx +8 -8
- package/src/editor/icons/LayoutIcon.tsx +9 -9
- package/src/editor/icons/LineIcon.tsx +7 -7
- package/src/editor/icons/NodeIcon.tsx +7 -7
- package/src/editor/icons/RayIcon.tsx +7 -7
- package/src/editor/icons/RectIcon.tsx +7 -7
- package/src/editor/icons/ShapeIcon.tsx +7 -7
- package/src/editor/icons/TxtIcon.tsx +8 -8
- package/src/editor/icons/VideoIcon.tsx +7 -7
- package/src/editor/icons/View2DIcon.tsx +10 -10
- package/src/editor/index.ts +17 -17
- package/src/editor/tree/DetachedRoot.tsx +23 -23
- package/src/editor/tree/NodeElement.tsx +74 -74
- package/src/editor/tree/TreeElement.tsx +72 -72
- package/src/editor/tree/TreeRoot.tsx +10 -10
- package/src/editor/tree/ViewRoot.tsx +20 -20
- package/src/editor/tree/index.module.scss +38 -38
- package/src/editor/tree/index.ts +3 -3
- package/src/editor/tsconfig.build.json +5 -5
- package/src/editor/tsconfig.json +12 -12
- package/src/editor/tsdoc.json +4 -4
- package/src/editor/vite-env.d.ts +1 -1
- package/src/lib/code/CodeCursor.ts +445 -445
- package/src/lib/code/CodeDiffer.ts +78 -78
- package/src/lib/code/CodeFragment.ts +97 -97
- package/src/lib/code/CodeHighlighter.ts +75 -75
- package/src/lib/code/CodeMetrics.ts +47 -47
- package/src/lib/code/CodeRange.test.ts +74 -74
- package/src/lib/code/CodeRange.ts +216 -216
- package/src/lib/code/CodeScope.ts +101 -101
- package/src/lib/code/CodeSelection.ts +24 -24
- package/src/lib/code/CodeSignal.ts +327 -327
- package/src/lib/code/CodeTokenizer.ts +54 -54
- package/src/lib/code/DefaultHighlightStyle.ts +98 -98
- package/src/lib/code/LezerHighlighter.ts +113 -113
- package/src/lib/code/diff.test.ts +311 -311
- package/src/lib/code/diff.ts +319 -319
- package/src/lib/code/extractRange.ts +126 -126
- package/src/lib/code/index.ts +13 -13
- package/src/lib/components/Audio.ts +168 -131
- package/src/lib/components/Bezier.ts +105 -105
- package/src/lib/components/Circle.ts +266 -266
- package/src/lib/components/Code.ts +526 -526
- package/src/lib/components/CodeBlock.ts +576 -576
- package/src/lib/components/CubicBezier.ts +112 -112
- package/src/lib/components/Curve.ts +455 -455
- package/src/lib/components/Grid.ts +135 -135
- package/src/lib/components/Icon.ts +96 -96
- package/src/lib/components/Img.ts +319 -319
- package/src/lib/components/Knot.ts +157 -157
- package/src/lib/components/Latex.ts +122 -122
- package/src/lib/components/Layout.ts +1092 -1092
- package/src/lib/components/Line.ts +429 -429
- package/src/lib/components/Media.ts +576 -346
- package/src/lib/components/Node.ts +1940 -1940
- package/src/lib/components/Path.ts +137 -137
- package/src/lib/components/Polygon.ts +171 -171
- package/src/lib/components/QuadBezier.ts +100 -100
- package/src/lib/components/Ray.ts +125 -125
- package/src/lib/components/Rect.ts +187 -187
- package/src/lib/components/Rive.ts +156 -156
- package/src/lib/components/SVG.ts +797 -797
- package/src/lib/components/Shape.ts +143 -143
- package/src/lib/components/Spline.ts +344 -344
- package/src/lib/components/Txt.test.tsx +81 -81
- package/src/lib/components/Txt.ts +203 -203
- package/src/lib/components/TxtLeaf.ts +205 -205
- package/src/lib/components/Video.ts +461 -462
- package/src/lib/components/View2D.ts +98 -98
- package/src/lib/components/__tests__/children.test.tsx +142 -142
- package/src/lib/components/__tests__/clone.test.tsx +126 -126
- package/src/lib/components/__tests__/generatorTest.ts +28 -28
- package/src/lib/components/__tests__/mockScene2D.ts +45 -45
- package/src/lib/components/__tests__/query.test.tsx +122 -122
- package/src/lib/components/__tests__/state.test.tsx +60 -60
- package/src/lib/components/index.ts +28 -28
- package/src/lib/components/types.ts +35 -35
- package/src/lib/curves/ArcSegment.ts +159 -159
- package/src/lib/curves/CircleSegment.ts +77 -77
- package/src/lib/curves/CubicBezierSegment.ts +78 -78
- package/src/lib/curves/CurveDrawingInfo.ts +11 -11
- package/src/lib/curves/CurvePoint.ts +15 -15
- package/src/lib/curves/CurveProfile.ts +7 -7
- package/src/lib/curves/KnotInfo.ts +10 -10
- package/src/lib/curves/LineSegment.ts +62 -62
- package/src/lib/curves/Polynomial.ts +355 -355
- package/src/lib/curves/Polynomial2D.ts +62 -62
- package/src/lib/curves/PolynomialSegment.ts +124 -124
- package/src/lib/curves/QuadBezierSegment.ts +64 -64
- package/src/lib/curves/Segment.ts +17 -17
- package/src/lib/curves/UniformPolynomialCurveSampler.ts +94 -94
- package/src/lib/curves/createCurveProfileLerp.ts +471 -471
- package/src/lib/curves/getBezierSplineProfile.ts +223 -223
- package/src/lib/curves/getCircleProfile.ts +86 -86
- package/src/lib/curves/getPathProfile.ts +178 -178
- package/src/lib/curves/getPointAtDistance.ts +21 -21
- package/src/lib/curves/getPolylineProfile.test.ts +21 -21
- package/src/lib/curves/getPolylineProfile.ts +89 -89
- package/src/lib/curves/getRectProfile.ts +139 -139
- package/src/lib/curves/index.ts +16 -16
- package/src/lib/decorators/canvasStyleSignal.ts +16 -16
- package/src/lib/decorators/colorSignal.ts +9 -9
- package/src/lib/decorators/compound.ts +72 -72
- package/src/lib/decorators/computed.ts +18 -18
- package/src/lib/decorators/defaultStyle.ts +18 -18
- package/src/lib/decorators/filtersSignal.ts +136 -136
- package/src/lib/decorators/index.ts +10 -10
- package/src/lib/decorators/initializers.ts +32 -32
- package/src/lib/decorators/nodeName.ts +13 -13
- package/src/lib/decorators/signal.test.ts +90 -90
- package/src/lib/decorators/signal.ts +345 -345
- package/src/lib/decorators/spacingSignal.ts +15 -15
- package/src/lib/decorators/vector2Signal.ts +30 -30
- package/src/lib/globals.d.ts +2 -2
- package/src/lib/index.ts +8 -8
- package/src/lib/jsx-dev-runtime.ts +2 -2
- package/src/lib/jsx-runtime.ts +46 -46
- package/src/lib/parse-svg-path.d.ts +14 -14
- package/src/lib/partials/Filter.ts +180 -180
- package/src/lib/partials/Gradient.ts +102 -102
- package/src/lib/partials/Pattern.ts +34 -34
- package/src/lib/partials/ShaderConfig.ts +117 -117
- package/src/lib/partials/index.ts +4 -4
- package/src/lib/partials/types.ts +58 -58
- package/src/lib/scenes/Scene2D.ts +242 -242
- package/src/lib/scenes/index.ts +3 -3
- package/src/lib/scenes/makeScene2D.ts +16 -16
- package/src/lib/scenes/useScene2D.ts +6 -6
- package/src/lib/tsconfig.build.json +5 -5
- package/src/lib/tsconfig.json +10 -10
- package/src/lib/tsdoc.json +4 -4
- package/src/lib/utils/CanvasUtils.ts +306 -306
- package/src/lib/utils/diff.test.ts +453 -453
- package/src/lib/utils/diff.ts +148 -148
- package/src/lib/utils/index.ts +2 -2
- package/src/lib/utils/is.ts +11 -11
- package/src/lib/utils/makeSignalExtensions.ts +30 -30
- package/src/lib/utils/video/declarations.d.ts +1 -1
- package/src/lib/utils/video/ffmpeg-client.ts +50 -50
- package/src/lib/utils/video/mp4-parser-manager.ts +72 -72
- package/src/lib/utils/video/parser/index.ts +1 -1
- package/src/lib/utils/video/parser/parser.ts +257 -257
- package/src/lib/utils/video/parser/sampler.ts +72 -72
- package/src/lib/utils/video/parser/segment.ts +302 -302
- package/src/lib/utils/video/parser/sink.ts +29 -29
- package/src/lib/utils/video/parser/utils.ts +31 -31
- package/src/tsconfig.base.json +19 -19
- package/src/tsconfig.build.json +8 -8
- package/src/tsconfig.json +5 -5
- package/tsconfig.project.json +7 -7
- package/lib/components/utils/waitUntil.d.ts +0 -7
- package/lib/components/utils/waitUntil.d.ts.map +0 -1
- package/lib/components/utils/waitUntil.js +0 -15
- package/lib/utils/waitUntil.d.ts +0 -7
- package/lib/utils/waitUntil.d.ts.map +0 -1
- package/lib/utils/waitUntil.js +0 -15
- package/src/lib/utils/waitUntil.ts +0 -18
|
@@ -1,102 +1,102 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
PossibleColor,
|
|
3
|
-
PossibleVector2,
|
|
4
|
-
SignalValue,
|
|
5
|
-
SimpleSignal,
|
|
6
|
-
Vector2Signal,
|
|
7
|
-
} from '@twick/core';
|
|
8
|
-
import {Color, unwrap} from '@twick/core';
|
|
9
|
-
import {computed} from '../decorators/computed';
|
|
10
|
-
import {initial, initializeSignals, signal} from '../decorators/signal';
|
|
11
|
-
import {vector2Signal} from '../decorators/vector2Signal';
|
|
12
|
-
|
|
13
|
-
export type GradientType = 'linear' | 'conic' | 'radial';
|
|
14
|
-
|
|
15
|
-
export interface GradientStop {
|
|
16
|
-
offset: SignalValue<number>;
|
|
17
|
-
color: SignalValue<PossibleColor>;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
export interface GradientProps {
|
|
21
|
-
type?: SignalValue<GradientType>;
|
|
22
|
-
fromX?: SignalValue<number>;
|
|
23
|
-
fromY?: SignalValue<number>;
|
|
24
|
-
from?: SignalValue<PossibleVector2>;
|
|
25
|
-
toX?: SignalValue<number>;
|
|
26
|
-
toY?: SignalValue<number>;
|
|
27
|
-
to?: SignalValue<PossibleVector2>;
|
|
28
|
-
angle?: SignalValue<number>;
|
|
29
|
-
fromRadius?: SignalValue<number>;
|
|
30
|
-
toRadius?: SignalValue<number>;
|
|
31
|
-
stops?: GradientStop[];
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export class Gradient {
|
|
35
|
-
@initial('linear')
|
|
36
|
-
@signal()
|
|
37
|
-
public declare readonly type: SimpleSignal<GradientType, this>;
|
|
38
|
-
|
|
39
|
-
@vector2Signal('from')
|
|
40
|
-
public declare readonly from: Vector2Signal<this>;
|
|
41
|
-
|
|
42
|
-
@vector2Signal('to')
|
|
43
|
-
public declare readonly to: Vector2Signal<this>;
|
|
44
|
-
|
|
45
|
-
@initial(0)
|
|
46
|
-
@signal()
|
|
47
|
-
public declare readonly angle: SimpleSignal<number, this>;
|
|
48
|
-
@initial(0)
|
|
49
|
-
@signal()
|
|
50
|
-
public declare readonly fromRadius: SimpleSignal<number, this>;
|
|
51
|
-
@initial(0)
|
|
52
|
-
@signal()
|
|
53
|
-
public declare readonly toRadius: SimpleSignal<number, this>;
|
|
54
|
-
@initial([])
|
|
55
|
-
@signal()
|
|
56
|
-
public declare readonly stops: SimpleSignal<GradientStop[], this>;
|
|
57
|
-
|
|
58
|
-
public constructor(props: GradientProps) {
|
|
59
|
-
initializeSignals(this, props);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
@computed()
|
|
63
|
-
public canvasGradient(context: CanvasRenderingContext2D): CanvasGradient {
|
|
64
|
-
let gradient: CanvasGradient;
|
|
65
|
-
switch (this.type()) {
|
|
66
|
-
case 'linear':
|
|
67
|
-
gradient = context.createLinearGradient(
|
|
68
|
-
this.from.x(),
|
|
69
|
-
this.from.y(),
|
|
70
|
-
this.to.x(),
|
|
71
|
-
this.to.y(),
|
|
72
|
-
);
|
|
73
|
-
break;
|
|
74
|
-
case 'conic':
|
|
75
|
-
gradient = context.createConicGradient(
|
|
76
|
-
this.angle(),
|
|
77
|
-
this.from.x(),
|
|
78
|
-
this.from.y(),
|
|
79
|
-
);
|
|
80
|
-
break;
|
|
81
|
-
case 'radial':
|
|
82
|
-
gradient = context.createRadialGradient(
|
|
83
|
-
this.from.x(),
|
|
84
|
-
this.from.y(),
|
|
85
|
-
this.fromRadius(),
|
|
86
|
-
this.to.x(),
|
|
87
|
-
this.to.y(),
|
|
88
|
-
this.toRadius(),
|
|
89
|
-
);
|
|
90
|
-
break;
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
for (const {offset, color} of this.stops()) {
|
|
94
|
-
gradient.addColorStop(
|
|
95
|
-
unwrap(offset),
|
|
96
|
-
new Color(unwrap(color)).serialize(),
|
|
97
|
-
);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
return gradient;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
1
|
+
import type {
|
|
2
|
+
PossibleColor,
|
|
3
|
+
PossibleVector2,
|
|
4
|
+
SignalValue,
|
|
5
|
+
SimpleSignal,
|
|
6
|
+
Vector2Signal,
|
|
7
|
+
} from '@twick/core';
|
|
8
|
+
import {Color, unwrap} from '@twick/core';
|
|
9
|
+
import {computed} from '../decorators/computed';
|
|
10
|
+
import {initial, initializeSignals, signal} from '../decorators/signal';
|
|
11
|
+
import {vector2Signal} from '../decorators/vector2Signal';
|
|
12
|
+
|
|
13
|
+
export type GradientType = 'linear' | 'conic' | 'radial';
|
|
14
|
+
|
|
15
|
+
export interface GradientStop {
|
|
16
|
+
offset: SignalValue<number>;
|
|
17
|
+
color: SignalValue<PossibleColor>;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface GradientProps {
|
|
21
|
+
type?: SignalValue<GradientType>;
|
|
22
|
+
fromX?: SignalValue<number>;
|
|
23
|
+
fromY?: SignalValue<number>;
|
|
24
|
+
from?: SignalValue<PossibleVector2>;
|
|
25
|
+
toX?: SignalValue<number>;
|
|
26
|
+
toY?: SignalValue<number>;
|
|
27
|
+
to?: SignalValue<PossibleVector2>;
|
|
28
|
+
angle?: SignalValue<number>;
|
|
29
|
+
fromRadius?: SignalValue<number>;
|
|
30
|
+
toRadius?: SignalValue<number>;
|
|
31
|
+
stops?: GradientStop[];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export class Gradient {
|
|
35
|
+
@initial('linear')
|
|
36
|
+
@signal()
|
|
37
|
+
public declare readonly type: SimpleSignal<GradientType, this>;
|
|
38
|
+
|
|
39
|
+
@vector2Signal('from')
|
|
40
|
+
public declare readonly from: Vector2Signal<this>;
|
|
41
|
+
|
|
42
|
+
@vector2Signal('to')
|
|
43
|
+
public declare readonly to: Vector2Signal<this>;
|
|
44
|
+
|
|
45
|
+
@initial(0)
|
|
46
|
+
@signal()
|
|
47
|
+
public declare readonly angle: SimpleSignal<number, this>;
|
|
48
|
+
@initial(0)
|
|
49
|
+
@signal()
|
|
50
|
+
public declare readonly fromRadius: SimpleSignal<number, this>;
|
|
51
|
+
@initial(0)
|
|
52
|
+
@signal()
|
|
53
|
+
public declare readonly toRadius: SimpleSignal<number, this>;
|
|
54
|
+
@initial([])
|
|
55
|
+
@signal()
|
|
56
|
+
public declare readonly stops: SimpleSignal<GradientStop[], this>;
|
|
57
|
+
|
|
58
|
+
public constructor(props: GradientProps) {
|
|
59
|
+
initializeSignals(this, props);
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@computed()
|
|
63
|
+
public canvasGradient(context: CanvasRenderingContext2D): CanvasGradient {
|
|
64
|
+
let gradient: CanvasGradient;
|
|
65
|
+
switch (this.type()) {
|
|
66
|
+
case 'linear':
|
|
67
|
+
gradient = context.createLinearGradient(
|
|
68
|
+
this.from.x(),
|
|
69
|
+
this.from.y(),
|
|
70
|
+
this.to.x(),
|
|
71
|
+
this.to.y(),
|
|
72
|
+
);
|
|
73
|
+
break;
|
|
74
|
+
case 'conic':
|
|
75
|
+
gradient = context.createConicGradient(
|
|
76
|
+
this.angle(),
|
|
77
|
+
this.from.x(),
|
|
78
|
+
this.from.y(),
|
|
79
|
+
);
|
|
80
|
+
break;
|
|
81
|
+
case 'radial':
|
|
82
|
+
gradient = context.createRadialGradient(
|
|
83
|
+
this.from.x(),
|
|
84
|
+
this.from.y(),
|
|
85
|
+
this.fromRadius(),
|
|
86
|
+
this.to.x(),
|
|
87
|
+
this.to.y(),
|
|
88
|
+
this.toRadius(),
|
|
89
|
+
);
|
|
90
|
+
break;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
for (const {offset, color} of this.stops()) {
|
|
94
|
+
gradient.addColorStop(
|
|
95
|
+
unwrap(offset),
|
|
96
|
+
new Color(unwrap(color)).serialize(),
|
|
97
|
+
);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
return gradient;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -1,34 +1,34 @@
|
|
|
1
|
-
import type {SimpleSignal} from '@twick/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
|
-
export interface PatternProps {
|
|
13
|
-
image: CanvasImageSource;
|
|
14
|
-
repetition?: CanvasRepetition;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export class Pattern {
|
|
18
|
-
@signal()
|
|
19
|
-
public declare readonly image: SimpleSignal<CanvasImageSource, this>;
|
|
20
|
-
@initial(null)
|
|
21
|
-
@signal()
|
|
22
|
-
public declare readonly repetition: SimpleSignal<CanvasRepetition, this>;
|
|
23
|
-
|
|
24
|
-
public constructor(props: PatternProps) {
|
|
25
|
-
initializeSignals(this, props);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
@computed()
|
|
29
|
-
public canvasPattern(
|
|
30
|
-
context: CanvasRenderingContext2D,
|
|
31
|
-
): CanvasPattern | null {
|
|
32
|
-
return context.createPattern(this.image(), this.repetition());
|
|
33
|
-
}
|
|
34
|
-
}
|
|
1
|
+
import type {SimpleSignal} from '@twick/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
|
+
export interface PatternProps {
|
|
13
|
+
image: CanvasImageSource;
|
|
14
|
+
repetition?: CanvasRepetition;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class Pattern {
|
|
18
|
+
@signal()
|
|
19
|
+
public declare readonly image: SimpleSignal<CanvasImageSource, this>;
|
|
20
|
+
@initial(null)
|
|
21
|
+
@signal()
|
|
22
|
+
public declare readonly repetition: SimpleSignal<CanvasRepetition, this>;
|
|
23
|
+
|
|
24
|
+
public constructor(props: PatternProps) {
|
|
25
|
+
initializeSignals(this, props);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@computed()
|
|
29
|
+
public canvasPattern(
|
|
30
|
+
context: CanvasRenderingContext2D,
|
|
31
|
+
): CanvasPattern | null {
|
|
32
|
+
return context.createPattern(this.image(), this.repetition());
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -1,117 +1,117 @@
|
|
|
1
|
-
import type {SignalValue, WebGLConvertible} from '@twick/core';
|
|
2
|
-
import {experimentalLog, useLogger, useScene} from '@twick/core';
|
|
3
|
-
import type {Node} from '../components';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* Describes a shader program used to apply effects to nodes.
|
|
7
|
-
*
|
|
8
|
-
* @experimental
|
|
9
|
-
*/
|
|
10
|
-
export interface ShaderConfig {
|
|
11
|
-
/**
|
|
12
|
-
* The source code of the fragment shader.
|
|
13
|
-
*
|
|
14
|
-
* @example
|
|
15
|
-
* ```glsl
|
|
16
|
-
* #version 300 es
|
|
17
|
-
* precision highp float;
|
|
18
|
-
*
|
|
19
|
-
* #include "@twick/core/shaders/common.glsl"
|
|
20
|
-
*
|
|
21
|
-
* void main() {
|
|
22
|
-
* out_color = texture(core_source_tx, source_uv);
|
|
23
|
-
* }
|
|
24
|
-
* ```
|
|
25
|
-
*/
|
|
26
|
-
fragment: string;
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Custom uniforms to be passed to the shader.
|
|
30
|
-
*
|
|
31
|
-
* @remarks
|
|
32
|
-
* The keys of this object will be used as the uniform names.
|
|
33
|
-
* The values can be either a number or an array of numbers.
|
|
34
|
-
* The following table shows how the values will be mapped to GLSL types.
|
|
35
|
-
*
|
|
36
|
-
* | TypeScript | GLSL |
|
|
37
|
-
* | ---------------------------------- | ------- |
|
|
38
|
-
* | `number` | `float` |
|
|
39
|
-
* | `[number, number]` | `vec2` |
|
|
40
|
-
* | `[number, number, number]` | `vec3` |
|
|
41
|
-
* | `[number, number, number, number]` | `vec4` |
|
|
42
|
-
*
|
|
43
|
-
* @example
|
|
44
|
-
* ```ts
|
|
45
|
-
* const shader = {
|
|
46
|
-
* // ...
|
|
47
|
-
* uniforms: {
|
|
48
|
-
* my_value: () => 1,
|
|
49
|
-
* my_vector: [1, 2, 3],
|
|
50
|
-
* },
|
|
51
|
-
* };
|
|
52
|
-
* ```
|
|
53
|
-
*
|
|
54
|
-
* ```glsl
|
|
55
|
-
* uniform float my_value;
|
|
56
|
-
* uniform vec3 my_vector;
|
|
57
|
-
* ```
|
|
58
|
-
*/
|
|
59
|
-
uniforms?: Record<string, SignalValue<number | number[] | WebGLConvertible>>;
|
|
60
|
-
|
|
61
|
-
/**
|
|
62
|
-
* A custom hook run before the shader is used.
|
|
63
|
-
*
|
|
64
|
-
* @remarks
|
|
65
|
-
* Gives you low-level access to the WebGL context and the shader program.
|
|
66
|
-
*
|
|
67
|
-
* @param gl - WebGL context.
|
|
68
|
-
* @param program - The shader program.
|
|
69
|
-
*/
|
|
70
|
-
setup?: (gl: WebGL2RenderingContext, program: WebGLProgram) => void;
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* A custom hook run after the shader is used.
|
|
74
|
-
*
|
|
75
|
-
* @remarks
|
|
76
|
-
* Gives you low-level access to the WebGL context and the shader program.
|
|
77
|
-
* Can be used to clean up resources created in the {@link setup} hook.
|
|
78
|
-
*
|
|
79
|
-
* @param gl - WebGL context.
|
|
80
|
-
* @param program - The shader program.
|
|
81
|
-
*/
|
|
82
|
-
teardown?: (gl: WebGL2RenderingContext, program: WebGLProgram) => void;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
export type PossibleShaderConfig =
|
|
86
|
-
| (ShaderConfig | string)[]
|
|
87
|
-
| ShaderConfig
|
|
88
|
-
| string
|
|
89
|
-
| null;
|
|
90
|
-
|
|
91
|
-
export function parseShader(
|
|
92
|
-
this: Node,
|
|
93
|
-
value: PossibleShaderConfig,
|
|
94
|
-
): ShaderConfig[] {
|
|
95
|
-
let result: ShaderConfig[];
|
|
96
|
-
if (!value) {
|
|
97
|
-
result = [];
|
|
98
|
-
} else if (typeof value === 'string') {
|
|
99
|
-
result = [{fragment: value}];
|
|
100
|
-
} else if (Array.isArray(value)) {
|
|
101
|
-
result = value.map(item =>
|
|
102
|
-
typeof item === 'string' ? {fragment: item} : item,
|
|
103
|
-
);
|
|
104
|
-
} else {
|
|
105
|
-
result = [value];
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
if (!useScene().experimentalFeatures && result.length > 0) {
|
|
109
|
-
result = [];
|
|
110
|
-
useLogger().log({
|
|
111
|
-
...experimentalLog(`Node uses experimental shaders.`),
|
|
112
|
-
inspect: this.key,
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
return result;
|
|
117
|
-
}
|
|
1
|
+
import type {SignalValue, WebGLConvertible} from '@twick/core';
|
|
2
|
+
import {experimentalLog, useLogger, useScene} from '@twick/core';
|
|
3
|
+
import type {Node} from '../components';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Describes a shader program used to apply effects to nodes.
|
|
7
|
+
*
|
|
8
|
+
* @experimental
|
|
9
|
+
*/
|
|
10
|
+
export interface ShaderConfig {
|
|
11
|
+
/**
|
|
12
|
+
* The source code of the fragment shader.
|
|
13
|
+
*
|
|
14
|
+
* @example
|
|
15
|
+
* ```glsl
|
|
16
|
+
* #version 300 es
|
|
17
|
+
* precision highp float;
|
|
18
|
+
*
|
|
19
|
+
* #include "@twick/core/shaders/common.glsl"
|
|
20
|
+
*
|
|
21
|
+
* void main() {
|
|
22
|
+
* out_color = texture(core_source_tx, source_uv);
|
|
23
|
+
* }
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
fragment: string;
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Custom uniforms to be passed to the shader.
|
|
30
|
+
*
|
|
31
|
+
* @remarks
|
|
32
|
+
* The keys of this object will be used as the uniform names.
|
|
33
|
+
* The values can be either a number or an array of numbers.
|
|
34
|
+
* The following table shows how the values will be mapped to GLSL types.
|
|
35
|
+
*
|
|
36
|
+
* | TypeScript | GLSL |
|
|
37
|
+
* | ---------------------------------- | ------- |
|
|
38
|
+
* | `number` | `float` |
|
|
39
|
+
* | `[number, number]` | `vec2` |
|
|
40
|
+
* | `[number, number, number]` | `vec3` |
|
|
41
|
+
* | `[number, number, number, number]` | `vec4` |
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```ts
|
|
45
|
+
* const shader = {
|
|
46
|
+
* // ...
|
|
47
|
+
* uniforms: {
|
|
48
|
+
* my_value: () => 1,
|
|
49
|
+
* my_vector: [1, 2, 3],
|
|
50
|
+
* },
|
|
51
|
+
* };
|
|
52
|
+
* ```
|
|
53
|
+
*
|
|
54
|
+
* ```glsl
|
|
55
|
+
* uniform float my_value;
|
|
56
|
+
* uniform vec3 my_vector;
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
uniforms?: Record<string, SignalValue<number | number[] | WebGLConvertible>>;
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* A custom hook run before the shader is used.
|
|
63
|
+
*
|
|
64
|
+
* @remarks
|
|
65
|
+
* Gives you low-level access to the WebGL context and the shader program.
|
|
66
|
+
*
|
|
67
|
+
* @param gl - WebGL context.
|
|
68
|
+
* @param program - The shader program.
|
|
69
|
+
*/
|
|
70
|
+
setup?: (gl: WebGL2RenderingContext, program: WebGLProgram) => void;
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* A custom hook run after the shader is used.
|
|
74
|
+
*
|
|
75
|
+
* @remarks
|
|
76
|
+
* Gives you low-level access to the WebGL context and the shader program.
|
|
77
|
+
* Can be used to clean up resources created in the {@link setup} hook.
|
|
78
|
+
*
|
|
79
|
+
* @param gl - WebGL context.
|
|
80
|
+
* @param program - The shader program.
|
|
81
|
+
*/
|
|
82
|
+
teardown?: (gl: WebGL2RenderingContext, program: WebGLProgram) => void;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
export type PossibleShaderConfig =
|
|
86
|
+
| (ShaderConfig | string)[]
|
|
87
|
+
| ShaderConfig
|
|
88
|
+
| string
|
|
89
|
+
| null;
|
|
90
|
+
|
|
91
|
+
export function parseShader(
|
|
92
|
+
this: Node,
|
|
93
|
+
value: PossibleShaderConfig,
|
|
94
|
+
): ShaderConfig[] {
|
|
95
|
+
let result: ShaderConfig[];
|
|
96
|
+
if (!value) {
|
|
97
|
+
result = [];
|
|
98
|
+
} else if (typeof value === 'string') {
|
|
99
|
+
result = [{fragment: value}];
|
|
100
|
+
} else if (Array.isArray(value)) {
|
|
101
|
+
result = value.map(item =>
|
|
102
|
+
typeof item === 'string' ? {fragment: item} : item,
|
|
103
|
+
);
|
|
104
|
+
} else {
|
|
105
|
+
result = [value];
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (!useScene().experimentalFeatures && result.length > 0) {
|
|
109
|
+
result = [];
|
|
110
|
+
useLogger().log({
|
|
111
|
+
...experimentalLog(`Node uses experimental shaders.`),
|
|
112
|
+
inspect: this.key,
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * from './Filter';
|
|
2
|
-
export * from './Gradient';
|
|
3
|
-
export * from './Pattern';
|
|
4
|
-
export * from './types';
|
|
1
|
+
export * from './Filter';
|
|
2
|
+
export * from './Gradient';
|
|
3
|
+
export * from './Pattern';
|
|
4
|
+
export * from './types';
|
|
@@ -1,58 +1,58 @@
|
|
|
1
|
-
import type {Color, PossibleColor} from '@twick/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' | 'balance';
|
|
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;
|
|
1
|
+
import type {Color, PossibleColor} from '@twick/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' | 'balance';
|
|
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;
|