@basementstudio/shader-lab 0.1.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/.biome/plugins/README.md +21 -0
- package/.biome/plugins/no-anchor-element.grit +12 -0
- package/.biome/plugins/no-relative-parent-imports.grit +10 -0
- package/.biome/plugins/no-unnecessary-forwardref.grit +9 -0
- package/.changeset/README.md +17 -0
- package/.changeset/config.json +11 -0
- package/.editorconfig +40 -0
- package/.env.example +81 -0
- package/.gitattributes +19 -0
- package/.github/workflows/canary.yml +80 -0
- package/.github/workflows/ci.yml +37 -0
- package/.github/workflows/release.yml +56 -0
- package/.tldrignore +84 -0
- package/.vscode/extensions.json +20 -0
- package/.vscode/settings.json +105 -0
- package/README.md +119 -0
- package/biome.json +249 -0
- package/bun.lock +1224 -0
- package/next.config.ts +131 -0
- package/package.json +73 -0
- package/packages/shader-lab-react/CHANGELOG.md +9 -0
- package/packages/shader-lab-react/README.md +119 -0
- package/packages/shader-lab-react/assets/patterns/bars/1.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/bars/2.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/bars/3.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/bars/4.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/bars/5.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/bars/6.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/candles/1.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/candles/2.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/candles/3.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/candles/4.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/shapes/1.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/shapes/2.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/shapes/3.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/shapes/4.svg +4 -0
- package/packages/shader-lab-react/assets/patterns/shapes/5.svg +3 -0
- package/packages/shader-lab-react/assets/patterns/shapes/6.svg +4 -0
- package/packages/shader-lab-react/assets/textures/blue-noise.png +0 -0
- package/packages/shader-lab-react/package.json +36 -0
- package/packages/shader-lab-react/scripts/fix-esm-specifiers.mjs +57 -0
- package/packages/shader-lab-react/scripts/prepare-dist.mjs +4 -0
- package/packages/shader-lab-react/src/ambient/three-tsl.d.ts +146 -0
- package/packages/shader-lab-react/src/ambient/three-webgpu.d.ts +51 -0
- package/packages/shader-lab-react/src/easings.ts +4 -0
- package/packages/shader-lab-react/src/index.ts +35 -0
- package/packages/shader-lab-react/src/lib/editor/custom-shader/shared.ts +2 -0
- package/packages/shader-lab-react/src/renderer/ascii-atlas.ts +83 -0
- package/packages/shader-lab-react/src/renderer/ascii-pass.ts +416 -0
- package/packages/shader-lab-react/src/renderer/asset-url.ts +3 -0
- package/packages/shader-lab-react/src/renderer/blend-modes.ts +229 -0
- package/packages/shader-lab-react/src/renderer/contracts.ts +54 -0
- package/packages/shader-lab-react/src/renderer/create-webgpu-renderer.ts +48 -0
- package/packages/shader-lab-react/src/renderer/crt-pass.ts +1040 -0
- package/packages/shader-lab-react/src/renderer/custom-shader-pass.ts +108 -0
- package/packages/shader-lab-react/src/renderer/custom-shader-runtime.ts +309 -0
- package/packages/shader-lab-react/src/renderer/dither-textures.ts +99 -0
- package/packages/shader-lab-react/src/renderer/dithering-pass.ts +322 -0
- package/packages/shader-lab-react/src/renderer/gradient-pass.ts +521 -0
- package/packages/shader-lab-react/src/renderer/halftone-pass.ts +932 -0
- package/packages/shader-lab-react/src/renderer/ink-pass.ts +802 -0
- package/packages/shader-lab-react/src/renderer/live-pass.ts +194 -0
- package/packages/shader-lab-react/src/renderer/media-pass.ts +187 -0
- package/packages/shader-lab-react/src/renderer/media-texture.ts +66 -0
- package/packages/shader-lab-react/src/renderer/particle-grid-pass.ts +389 -0
- package/packages/shader-lab-react/src/renderer/pass-node.ts +209 -0
- package/packages/shader-lab-react/src/renderer/pattern-atlas.ts +133 -0
- package/packages/shader-lab-react/src/renderer/pattern-pass.ts +552 -0
- package/packages/shader-lab-react/src/renderer/pipeline-manager.ts +369 -0
- package/packages/shader-lab-react/src/renderer/pixel-sorting-pass.ts +277 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/color/tonemapping.ts +87 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/cosine-palette.ts +9 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/common.ts +31 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/curl-noise-3d.ts +36 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/curl-noise-4d.ts +36 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/fbm.ts +13 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/perlin-noise-3d.ts +96 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/ridge-noise.ts +24 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/simplex-noise-3d.ts +79 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/simplex-noise-4d.ts +89 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/turbulence.ts +56 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/value-noise-3d.ts +32 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/voronoi-noise-3d.ts +60 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.ts +15 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/bloom.ts +11 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.ts +24 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/grain-texture-pattern.ts +9 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/repeating-pattern.ts +11 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/atan2.ts +9 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-conj.ts +9 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-cos.ts +10 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-div.ts +11 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-log.ts +7 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-mobius.ts +12 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-mul.ts +9 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-pow.ts +16 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-sin.ts +10 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-sqrt.ts +18 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-tan.ts +12 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-to-polar.ts +10 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/hyperbolic.ts +20 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/index.ts +48 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/rotate.ts +15 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/screen-aspect-uv.ts +15 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-box-2d.ts +6 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-diamond.ts +6 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-rhombus.ts +27 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-sphere.ts +6 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/smax.ts +7 -0
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/smin.ts +7 -0
- package/packages/shader-lab-react/src/renderer/text-pass.ts +176 -0
- package/packages/shader-lab-react/src/runtime-clock.ts +42 -0
- package/packages/shader-lab-react/src/runtime-frame.ts +29 -0
- package/packages/shader-lab-react/src/shader-lab-composition.tsx +163 -0
- package/packages/shader-lab-react/src/timeline.ts +283 -0
- package/packages/shader-lab-react/src/types/editor.ts +5 -0
- package/packages/shader-lab-react/src/types.ts +141 -0
- package/packages/shader-lab-react/tsconfig.build.json +8 -0
- package/packages/shader-lab-react/tsconfig.json +21 -0
- package/postcss.config.mjs +5 -0
- package/public/assets/fonts/msdf/geist-mono/GeistMono-Regular-msdf-atlas.png +0 -0
- package/public/assets/fonts/msdf/geist-mono/GeistMono-Regular-msdf.json +1412 -0
- package/public/assets/patterns/bars/1.svg +3 -0
- package/public/assets/patterns/bars/2.svg +3 -0
- package/public/assets/patterns/bars/3.svg +3 -0
- package/public/assets/patterns/bars/4.svg +3 -0
- package/public/assets/patterns/bars/5.svg +3 -0
- package/public/assets/patterns/bars/6.svg +3 -0
- package/public/assets/patterns/candles/1.svg +3 -0
- package/public/assets/patterns/candles/2.svg +3 -0
- package/public/assets/patterns/candles/3.svg +3 -0
- package/public/assets/patterns/candles/4.svg +3 -0
- package/public/assets/patterns/shapes/1.svg +3 -0
- package/public/assets/patterns/shapes/2.svg +3 -0
- package/public/assets/patterns/shapes/3.svg +3 -0
- package/public/assets/patterns/shapes/4.svg +4 -0
- package/public/assets/patterns/shapes/5.svg +3 -0
- package/public/assets/patterns/shapes/6.svg +4 -0
- package/public/fonts/geist/Geist-Mono.woff2 +0 -0
- package/public/textures/blue-noise.png +0 -0
- package/public/textures/crt-mask.png +0 -0
- package/src/app/design/page.tsx +398 -0
- package/src/app/favicon.ico +0 -0
- package/src/app/globals.css +280 -0
- package/src/app/layout.tsx +89 -0
- package/src/app/page.tsx +20 -0
- package/src/app/robots.ts +13 -0
- package/src/app/sitemap.ts +13 -0
- package/src/components/editor/editor-canvas-viewport.tsx +116 -0
- package/src/components/editor/editor-export-dialog.tsx +1177 -0
- package/src/components/editor/editor-timeline-overlay.tsx +983 -0
- package/src/components/editor/editor-topbar.tsx +287 -0
- package/src/components/editor/layer-sidebar.tsx +738 -0
- package/src/components/editor/properties-sidebar-content.tsx +574 -0
- package/src/components/editor/properties-sidebar-fields.tsx +389 -0
- package/src/components/editor/properties-sidebar-utils.ts +178 -0
- package/src/components/editor/properties-sidebar.tsx +421 -0
- package/src/components/ui/button/index.tsx +57 -0
- package/src/components/ui/color-picker/index.tsx +358 -0
- package/src/components/ui/glass-panel/index.tsx +45 -0
- package/src/components/ui/icon-button/index.tsx +46 -0
- package/src/components/ui/select/index.tsx +136 -0
- package/src/components/ui/slider/index.tsx +192 -0
- package/src/components/ui/toggle/index.tsx +34 -0
- package/src/components/ui/typography/index.tsx +61 -0
- package/src/components/ui/xy-pad/index.tsx +160 -0
- package/src/features/editor/components/editor-export-dialog.module.css +271 -0
- package/src/hooks/use-editor-renderer.ts +182 -0
- package/src/lib/app.ts +6 -0
- package/src/lib/cn.ts +7 -0
- package/src/lib/easings.ts +240 -0
- package/src/lib/editor/config/layer-registry.ts +2434 -0
- package/src/lib/editor/custom-shader/shared.ts +28 -0
- package/src/lib/editor/export.ts +420 -0
- package/src/lib/editor/history.ts +71 -0
- package/src/lib/editor/layers.ts +76 -0
- package/src/lib/editor/parameter-schema.ts +75 -0
- package/src/lib/editor/project-file.ts +145 -0
- package/src/lib/editor/shader-export-snippet.ts +37 -0
- package/src/lib/editor/shader-export.ts +315 -0
- package/src/lib/editor/timeline/evaluate.ts +252 -0
- package/src/lib/editor/view-transform.ts +58 -0
- package/src/lib/fonts.ts +28 -0
- package/src/renderer/ascii-atlas.ts +83 -0
- package/src/renderer/ascii-pass.ts +416 -0
- package/src/renderer/blend-modes.ts +229 -0
- package/src/renderer/contracts.ts +161 -0
- package/src/renderer/create-webgpu-renderer.ts +48 -0
- package/src/renderer/crt-pass.ts +1040 -0
- package/src/renderer/custom-shader-pass.ts +117 -0
- package/src/renderer/custom-shader-runtime.ts +309 -0
- package/src/renderer/dither-textures.ts +99 -0
- package/src/renderer/dithering-pass.ts +322 -0
- package/src/renderer/gradient-pass.ts +520 -0
- package/src/renderer/halftone-pass.ts +932 -0
- package/src/renderer/ink-pass.ts +683 -0
- package/src/renderer/live-pass.ts +194 -0
- package/src/renderer/media-pass.ts +187 -0
- package/src/renderer/media-texture.ts +66 -0
- package/src/renderer/particle-grid-pass.ts +389 -0
- package/src/renderer/pass-node-factory.ts +33 -0
- package/src/renderer/pass-node.ts +209 -0
- package/src/renderer/pattern-atlas.ts +97 -0
- package/src/renderer/pattern-pass.ts +552 -0
- package/src/renderer/pipeline-manager.ts +343 -0
- package/src/renderer/pixel-sorting-pass.ts +277 -0
- package/src/renderer/project-clock.ts +57 -0
- package/src/renderer/shaders/tsl/color/tonemapping.ts +86 -0
- package/src/renderer/shaders/tsl/cosine-palette.ts +8 -0
- package/src/renderer/shaders/tsl/noise/common.ts +30 -0
- package/src/renderer/shaders/tsl/noise/curl-noise-3d.ts +35 -0
- package/src/renderer/shaders/tsl/noise/curl-noise-4d.ts +35 -0
- package/src/renderer/shaders/tsl/noise/fbm.ts +12 -0
- package/src/renderer/shaders/tsl/noise/perlin-noise-3d.ts +97 -0
- package/src/renderer/shaders/tsl/noise/ridge-noise.ts +23 -0
- package/src/renderer/shaders/tsl/noise/simplex-noise-3d.ts +78 -0
- package/src/renderer/shaders/tsl/noise/simplex-noise-4d.ts +88 -0
- package/src/renderer/shaders/tsl/noise/turbulence.ts +55 -0
- package/src/renderer/shaders/tsl/noise/value-noise-3d.ts +31 -0
- package/src/renderer/shaders/tsl/noise/voronoi-noise-3d.ts +59 -0
- package/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.ts +14 -0
- package/src/renderer/shaders/tsl/patterns/bloom.ts +10 -0
- package/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.ts +23 -0
- package/src/renderer/shaders/tsl/patterns/grain-texture-pattern.ts +8 -0
- package/src/renderer/shaders/tsl/patterns/repeating-pattern.ts +10 -0
- package/src/renderer/shaders/tsl/utils/atan2.ts +8 -0
- package/src/renderer/shaders/tsl/utils/complex-conj.ts +8 -0
- package/src/renderer/shaders/tsl/utils/complex-cos.ts +9 -0
- package/src/renderer/shaders/tsl/utils/complex-div.ts +10 -0
- package/src/renderer/shaders/tsl/utils/complex-log.ts +6 -0
- package/src/renderer/shaders/tsl/utils/complex-mobius.ts +11 -0
- package/src/renderer/shaders/tsl/utils/complex-mul.ts +8 -0
- package/src/renderer/shaders/tsl/utils/complex-pow.ts +15 -0
- package/src/renderer/shaders/tsl/utils/complex-sin.ts +9 -0
- package/src/renderer/shaders/tsl/utils/complex-sqrt.ts +17 -0
- package/src/renderer/shaders/tsl/utils/complex-tan.ts +11 -0
- package/src/renderer/shaders/tsl/utils/complex-to-polar.ts +9 -0
- package/src/renderer/shaders/tsl/utils/hyperbolic.ts +19 -0
- package/src/renderer/shaders/tsl/utils/index.ts +47 -0
- package/src/renderer/shaders/tsl/utils/rotate.ts +14 -0
- package/src/renderer/shaders/tsl/utils/screen-aspect-uv.ts +14 -0
- package/src/renderer/shaders/tsl/utils/sd-box-2d.ts +5 -0
- package/src/renderer/shaders/tsl/utils/sd-diamond.ts +5 -0
- package/src/renderer/shaders/tsl/utils/sd-rhombus.ts +26 -0
- package/src/renderer/shaders/tsl/utils/sd-sphere.ts +5 -0
- package/src/renderer/shaders/tsl/utils/smax.ts +7 -0
- package/src/renderer/shaders/tsl/utils/smin.ts +6 -0
- package/src/renderer/text-pass.ts +176 -0
- package/src/store/asset-store.ts +193 -0
- package/src/store/editor-store.ts +223 -0
- package/src/store/history-store.ts +172 -0
- package/src/store/index.ts +31 -0
- package/src/store/layer-store.ts +675 -0
- package/src/store/timeline-store.ts +572 -0
- package/src/types/assets.d.ts +6 -0
- package/src/types/css.d.ts +21 -0
- package/src/types/editor.ts +357 -0
- package/src/types/react.d.ts +15 -0
- package/src/types/three-tsl.d.ts +146 -0
- package/src/types/three-webgpu.d.ts +51 -0
- package/tsconfig.json +49 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
export const LAYER_KINDS = ["source", "effect", "model"] as const
|
|
2
|
+
export type LayerKind = (typeof LAYER_KINDS)[number]
|
|
3
|
+
|
|
4
|
+
export const SOURCE_LAYER_TYPES = [
|
|
5
|
+
"image",
|
|
6
|
+
"video",
|
|
7
|
+
"gradient",
|
|
8
|
+
"text",
|
|
9
|
+
"fluid",
|
|
10
|
+
"live",
|
|
11
|
+
"custom-shader",
|
|
12
|
+
] as const
|
|
13
|
+
export type SourceLayerType = (typeof SOURCE_LAYER_TYPES)[number]
|
|
14
|
+
|
|
15
|
+
export const EFFECT_LAYER_TYPES = [
|
|
16
|
+
"ascii",
|
|
17
|
+
"ink",
|
|
18
|
+
"pattern",
|
|
19
|
+
"crt",
|
|
20
|
+
"dithering",
|
|
21
|
+
"halftone",
|
|
22
|
+
"particle-grid",
|
|
23
|
+
"pixelation",
|
|
24
|
+
"pixel-sorting",
|
|
25
|
+
"blur",
|
|
26
|
+
] as const
|
|
27
|
+
export type EffectLayerType = (typeof EFFECT_LAYER_TYPES)[number]
|
|
28
|
+
|
|
29
|
+
export const MODEL_LAYER_TYPES = ["model"] as const
|
|
30
|
+
export type ModelLayerType = (typeof MODEL_LAYER_TYPES)[number]
|
|
31
|
+
|
|
32
|
+
export type LayerType = SourceLayerType | EffectLayerType | ModelLayerType
|
|
33
|
+
|
|
34
|
+
export const BLEND_MODES = [
|
|
35
|
+
"normal",
|
|
36
|
+
"multiply",
|
|
37
|
+
"screen",
|
|
38
|
+
"overlay",
|
|
39
|
+
"darken",
|
|
40
|
+
"lighten",
|
|
41
|
+
"color-dodge",
|
|
42
|
+
"color-burn",
|
|
43
|
+
"hard-light",
|
|
44
|
+
"soft-light",
|
|
45
|
+
"difference",
|
|
46
|
+
"exclusion",
|
|
47
|
+
"hue",
|
|
48
|
+
"saturation",
|
|
49
|
+
"color",
|
|
50
|
+
"luminosity",
|
|
51
|
+
] as const
|
|
52
|
+
export type BlendMode = (typeof BLEND_MODES)[number]
|
|
53
|
+
|
|
54
|
+
export const LAYER_COMPOSITE_MODES = ["filter", "mask"] as const
|
|
55
|
+
export type LayerCompositeMode = (typeof LAYER_COMPOSITE_MODES)[number]
|
|
56
|
+
|
|
57
|
+
export const ASSET_KINDS = ["image", "video", "model"] as const
|
|
58
|
+
export type AssetKind = (typeof ASSET_KINDS)[number]
|
|
59
|
+
|
|
60
|
+
export type Vector2 = { x: number; y: number }
|
|
61
|
+
export type Size = { width: number; height: number }
|
|
62
|
+
|
|
63
|
+
export type ParameterValue =
|
|
64
|
+
| number
|
|
65
|
+
| string
|
|
66
|
+
| boolean
|
|
67
|
+
| [number, number]
|
|
68
|
+
| [number, number, number]
|
|
69
|
+
|
|
70
|
+
export type ParameterType =
|
|
71
|
+
| "number"
|
|
72
|
+
| "boolean"
|
|
73
|
+
| "select"
|
|
74
|
+
| "color"
|
|
75
|
+
| "vec2"
|
|
76
|
+
| "vec3"
|
|
77
|
+
| "text"
|
|
78
|
+
|
|
79
|
+
export type ParameterVisibilityCondition = {
|
|
80
|
+
key: string
|
|
81
|
+
} & (
|
|
82
|
+
| {
|
|
83
|
+
equals: boolean | number | string
|
|
84
|
+
}
|
|
85
|
+
| {
|
|
86
|
+
gte: number
|
|
87
|
+
}
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
type ParameterDefinitionBase<
|
|
91
|
+
TType extends ParameterType,
|
|
92
|
+
TValue extends ParameterValue,
|
|
93
|
+
> = {
|
|
94
|
+
animatable?: boolean
|
|
95
|
+
defaultValue: TValue
|
|
96
|
+
description?: string
|
|
97
|
+
group?: string
|
|
98
|
+
key: string
|
|
99
|
+
label: string
|
|
100
|
+
type: TType
|
|
101
|
+
visibleWhen?: ParameterVisibilityCondition
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export type NumberParameterDefinition = ParameterDefinitionBase<
|
|
105
|
+
"number",
|
|
106
|
+
number
|
|
107
|
+
> & {
|
|
108
|
+
input?: "float" | "int"
|
|
109
|
+
max?: number
|
|
110
|
+
min?: number
|
|
111
|
+
step?: number
|
|
112
|
+
unit?: string
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
export type BooleanParameterDefinition = ParameterDefinitionBase<
|
|
116
|
+
"boolean",
|
|
117
|
+
boolean
|
|
118
|
+
>
|
|
119
|
+
|
|
120
|
+
export type SelectParameterDefinition = ParameterDefinitionBase<
|
|
121
|
+
"select",
|
|
122
|
+
string
|
|
123
|
+
> & {
|
|
124
|
+
options: readonly {
|
|
125
|
+
label: string
|
|
126
|
+
value: string
|
|
127
|
+
}[]
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
export type ColorParameterDefinition = ParameterDefinitionBase<"color", string>
|
|
131
|
+
|
|
132
|
+
export type TextParameterDefinition = ParameterDefinitionBase<
|
|
133
|
+
"text",
|
|
134
|
+
string
|
|
135
|
+
> & {
|
|
136
|
+
maxLength?: number
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export type Vec2ParameterDefinition = ParameterDefinitionBase<
|
|
140
|
+
"vec2",
|
|
141
|
+
[number, number]
|
|
142
|
+
> & {
|
|
143
|
+
max?: number
|
|
144
|
+
min?: number
|
|
145
|
+
step?: number
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
export type Vec3ParameterDefinition = ParameterDefinitionBase<
|
|
149
|
+
"vec3",
|
|
150
|
+
[number, number, number]
|
|
151
|
+
> & {
|
|
152
|
+
max?: number
|
|
153
|
+
min?: number
|
|
154
|
+
step?: number
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export type ParameterDefinition =
|
|
158
|
+
| NumberParameterDefinition
|
|
159
|
+
| BooleanParameterDefinition
|
|
160
|
+
| SelectParameterDefinition
|
|
161
|
+
| ColorParameterDefinition
|
|
162
|
+
| TextParameterDefinition
|
|
163
|
+
| Vec2ParameterDefinition
|
|
164
|
+
| Vec3ParameterDefinition
|
|
165
|
+
|
|
166
|
+
export type ParameterDefinitions = readonly ParameterDefinition[]
|
|
167
|
+
export type LayerParameterValues = Record<string, ParameterValue>
|
|
168
|
+
|
|
169
|
+
export type LayerFrameAdjustment = {
|
|
170
|
+
hue: number
|
|
171
|
+
opacity: number
|
|
172
|
+
saturation: number
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
export interface BaseLayer {
|
|
176
|
+
assetId: string | null
|
|
177
|
+
blendMode: BlendMode
|
|
178
|
+
compositeMode: LayerCompositeMode
|
|
179
|
+
expanded: boolean
|
|
180
|
+
hue: number
|
|
181
|
+
id: string
|
|
182
|
+
kind: LayerKind
|
|
183
|
+
locked: boolean
|
|
184
|
+
name: string
|
|
185
|
+
opacity: number
|
|
186
|
+
params: LayerParameterValues
|
|
187
|
+
runtimeError: string | null
|
|
188
|
+
saturation: number
|
|
189
|
+
type: LayerType
|
|
190
|
+
visible: boolean
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export interface SourceLayer extends BaseLayer {
|
|
194
|
+
kind: "source"
|
|
195
|
+
type: SourceLayerType
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
export interface EffectLayer extends BaseLayer {
|
|
199
|
+
kind: "effect"
|
|
200
|
+
type: EffectLayerType
|
|
201
|
+
}
|
|
202
|
+
|
|
203
|
+
export interface ModelLayer extends BaseLayer {
|
|
204
|
+
kind: "model"
|
|
205
|
+
type: "model"
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
export type EditorLayer = SourceLayer | EffectLayer | ModelLayer
|
|
209
|
+
|
|
210
|
+
export type AssetStatus = "idle" | "loading" | "ready" | "error"
|
|
211
|
+
|
|
212
|
+
export interface EditorAsset {
|
|
213
|
+
createdAt: string
|
|
214
|
+
duration: number | null
|
|
215
|
+
error: string | null
|
|
216
|
+
fileName: string
|
|
217
|
+
id: string
|
|
218
|
+
kind: AssetKind
|
|
219
|
+
mimeType: string
|
|
220
|
+
sizeBytes: number
|
|
221
|
+
status: AssetStatus
|
|
222
|
+
url: string
|
|
223
|
+
width: number | null
|
|
224
|
+
height: number | null
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export const TIMELINE_INTERPOLATIONS = ["linear", "smooth", "step"] as const
|
|
228
|
+
export type TimelineInterpolation = (typeof TIMELINE_INTERPOLATIONS)[number]
|
|
229
|
+
|
|
230
|
+
export type LayerAnimatableProperty =
|
|
231
|
+
| "opacity"
|
|
232
|
+
| "hue"
|
|
233
|
+
| "saturation"
|
|
234
|
+
| "visible"
|
|
235
|
+
export type AnimatableValueType = Exclude<ParameterType, "text"> | "boolean"
|
|
236
|
+
|
|
237
|
+
export type AnimatedPropertyBinding =
|
|
238
|
+
| {
|
|
239
|
+
kind: "layer"
|
|
240
|
+
label: string
|
|
241
|
+
property: LayerAnimatableProperty
|
|
242
|
+
valueType: "boolean" | "number"
|
|
243
|
+
}
|
|
244
|
+
| {
|
|
245
|
+
key: string
|
|
246
|
+
kind: "param"
|
|
247
|
+
label: string
|
|
248
|
+
valueType: AnimatableValueType
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
export interface TimelineKeyframe {
|
|
252
|
+
id: string
|
|
253
|
+
time: number
|
|
254
|
+
value: ParameterValue
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
export interface TimelineTrack {
|
|
258
|
+
binding: AnimatedPropertyBinding
|
|
259
|
+
enabled: boolean
|
|
260
|
+
id: string
|
|
261
|
+
interpolation: TimelineInterpolation
|
|
262
|
+
keyframes: TimelineKeyframe[]
|
|
263
|
+
layerId: string
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
export interface TimelineStateSnapshot {
|
|
267
|
+
currentTime: number
|
|
268
|
+
duration: number
|
|
269
|
+
isPlaying: boolean
|
|
270
|
+
loop: boolean
|
|
271
|
+
selectedKeyframeId: string | null
|
|
272
|
+
selectedTrackId: string | null
|
|
273
|
+
tracks: TimelineTrack[]
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
export type RenderScale = 1 | 0.75 | 0.5
|
|
277
|
+
export type WebGPUStatus =
|
|
278
|
+
| "idle"
|
|
279
|
+
| "unsupported"
|
|
280
|
+
| "initializing"
|
|
281
|
+
| "ready"
|
|
282
|
+
| "error"
|
|
283
|
+
|
|
284
|
+
export interface EditorStateSnapshot {
|
|
285
|
+
canvasSize: Size
|
|
286
|
+
fps: number
|
|
287
|
+
immersiveCanvas: boolean
|
|
288
|
+
outputSize: Size
|
|
289
|
+
panOffset: Vector2
|
|
290
|
+
renderScale: RenderScale
|
|
291
|
+
sidebars: {
|
|
292
|
+
left: boolean
|
|
293
|
+
right: boolean
|
|
294
|
+
}
|
|
295
|
+
theme: "dark" | "light"
|
|
296
|
+
timelinePanelOpen: boolean
|
|
297
|
+
webgpuError: string | null
|
|
298
|
+
webgpuStatus: WebGPUStatus
|
|
299
|
+
zoom: number
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
export interface EditorHistorySnapshot {
|
|
303
|
+
hoveredLayerId: string | null
|
|
304
|
+
layers: EditorLayer[]
|
|
305
|
+
selectedLayerId: string | null
|
|
306
|
+
timeline: Pick<
|
|
307
|
+
TimelineStateSnapshot,
|
|
308
|
+
| "currentTime"
|
|
309
|
+
| "duration"
|
|
310
|
+
| "loop"
|
|
311
|
+
| "selectedKeyframeId"
|
|
312
|
+
| "selectedTrackId"
|
|
313
|
+
| "tracks"
|
|
314
|
+
>
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
export interface HistoryEntry {
|
|
318
|
+
id: string
|
|
319
|
+
label: string
|
|
320
|
+
snapshot: EditorHistorySnapshot
|
|
321
|
+
timestamp: number
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
export interface ExportImageConfig {
|
|
325
|
+
format: "png"
|
|
326
|
+
size: Size
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
export interface ExportVideoConfig {
|
|
330
|
+
duration: number
|
|
331
|
+
format: "mp4" | "webm"
|
|
332
|
+
fps: number
|
|
333
|
+
size: Size
|
|
334
|
+
}
|
|
335
|
+
|
|
336
|
+
export interface PresetAssetReference {
|
|
337
|
+
fileName: string
|
|
338
|
+
id: string
|
|
339
|
+
kind: AssetKind
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
export interface ProjectPresetConfig {
|
|
343
|
+
assets: PresetAssetReference[]
|
|
344
|
+
exportedAt: string
|
|
345
|
+
layers: EditorLayer[]
|
|
346
|
+
selectedLayerId: string | null
|
|
347
|
+
timeline: Pick<TimelineStateSnapshot, "duration" | "loop" | "tracks">
|
|
348
|
+
version: number
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
export interface LayerDefinition {
|
|
352
|
+
assetKind?: AssetKind
|
|
353
|
+
defaultName: string
|
|
354
|
+
kind: LayerKind
|
|
355
|
+
params: ParameterDefinitions
|
|
356
|
+
type: LayerType
|
|
357
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
// Type augmentations and module declarations
|
|
2
|
+
|
|
3
|
+
// React CSS custom properties support
|
|
4
|
+
import "react"
|
|
5
|
+
|
|
6
|
+
declare module "react" {
|
|
7
|
+
interface CSSProperties {
|
|
8
|
+
[key: `--${string}`]: string | number
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
// Global window extensions
|
|
13
|
+
declare global {
|
|
14
|
+
interface Window {}
|
|
15
|
+
}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
declare module "three/tsl" {
|
|
2
|
+
export interface LoopConfig {
|
|
3
|
+
condition?: string
|
|
4
|
+
end: number
|
|
5
|
+
start: number
|
|
6
|
+
type: "float" | "int"
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export type ShaderNodeParams = readonly [
|
|
10
|
+
TSLNode,
|
|
11
|
+
TSLNode,
|
|
12
|
+
TSLNode,
|
|
13
|
+
TSLNode,
|
|
14
|
+
TSLNode,
|
|
15
|
+
TSLNode?,
|
|
16
|
+
...TSLNode[],
|
|
17
|
+
]
|
|
18
|
+
|
|
19
|
+
export type ShaderNodeFn = (
|
|
20
|
+
params: ShaderNodeParams,
|
|
21
|
+
...rest: unknown[]
|
|
22
|
+
) => unknown
|
|
23
|
+
|
|
24
|
+
export interface TSLNode {
|
|
25
|
+
a: TSLNode
|
|
26
|
+
b: TSLNode
|
|
27
|
+
dot(value: unknown): TSLNode
|
|
28
|
+
g: TSLNode
|
|
29
|
+
r: TSLNode
|
|
30
|
+
rgb: TSLNode
|
|
31
|
+
value: unknown
|
|
32
|
+
w: TSLNode
|
|
33
|
+
x: TSLNode
|
|
34
|
+
xx: TSLNode
|
|
35
|
+
xy: TSLNode
|
|
36
|
+
xyz: TSLNode
|
|
37
|
+
xxxx: TSLNode
|
|
38
|
+
xxyy: TSLNode
|
|
39
|
+
xxx: TSLNode
|
|
40
|
+
xzx: TSLNode
|
|
41
|
+
xzyw: TSLNode
|
|
42
|
+
y: TSLNode
|
|
43
|
+
yyy: TSLNode
|
|
44
|
+
yyyy: TSLNode
|
|
45
|
+
yyz: TSLNode
|
|
46
|
+
yzx: TSLNode
|
|
47
|
+
yzw: TSLNode
|
|
48
|
+
z: TSLNode
|
|
49
|
+
zw: TSLNode
|
|
50
|
+
zww: TSLNode
|
|
51
|
+
zxy: TSLNode
|
|
52
|
+
zzww: TSLNode
|
|
53
|
+
www: TSLNode
|
|
54
|
+
wyz: TSLNode
|
|
55
|
+
|
|
56
|
+
add(value: unknown): TSLNode
|
|
57
|
+
addAssign(value: unknown): TSLNode
|
|
58
|
+
and(value: unknown): TSLNode
|
|
59
|
+
or(value: unknown): TSLNode
|
|
60
|
+
assign(value: unknown): TSLNode
|
|
61
|
+
clamp(min?: unknown, max?: unknown): TSLNode
|
|
62
|
+
div(value: unknown): TSLNode
|
|
63
|
+
equal(value: unknown): TSLNode
|
|
64
|
+
fract(): TSLNode
|
|
65
|
+
length(): TSLNode
|
|
66
|
+
greaterThan(value: unknown): TSLNode
|
|
67
|
+
greaterThanEqual(value: unknown): TSLNode
|
|
68
|
+
lessThan(value: unknown): TSLNode
|
|
69
|
+
lessThanEqual(value: unknown): TSLNode
|
|
70
|
+
mul(value: unknown): TSLNode
|
|
71
|
+
mulAssign(value: unknown): TSLNode
|
|
72
|
+
negate(): TSLNode
|
|
73
|
+
normalize(): TSLNode
|
|
74
|
+
sqrt(): TSLNode
|
|
75
|
+
sub(value: unknown): TSLNode
|
|
76
|
+
toVar(): TSLNode
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
export function attribute(name: string, type: string): TSLNode
|
|
80
|
+
export const pointUV: TSLNode
|
|
81
|
+
export const positionLocal: TSLNode
|
|
82
|
+
|
|
83
|
+
export const EPSILON: TSLNode
|
|
84
|
+
export const PI: TSLNode
|
|
85
|
+
export function abs(value: unknown): TSLNode
|
|
86
|
+
export function add(left: unknown, right: unknown): TSLNode
|
|
87
|
+
export function atan(value: unknown): TSLNode
|
|
88
|
+
export function clamp(value: unknown, min?: unknown, max?: unknown): TSLNode
|
|
89
|
+
export function cos(value: unknown): TSLNode
|
|
90
|
+
export function cross(left: unknown, right: unknown): TSLNode
|
|
91
|
+
export function div(left: unknown, right: unknown): TSLNode
|
|
92
|
+
export function dot(left: unknown, right: unknown): TSLNode
|
|
93
|
+
export function Fn(
|
|
94
|
+
fn: ShaderNodeFn,
|
|
95
|
+
layout?: unknown
|
|
96
|
+
): (...args: unknown[]) => TSLNode
|
|
97
|
+
export function Loop(
|
|
98
|
+
config: LoopConfig,
|
|
99
|
+
callback: (...args: unknown[]) => unknown
|
|
100
|
+
): TSLNode
|
|
101
|
+
export function exp(value: unknown): TSLNode
|
|
102
|
+
export function fract(value: unknown): TSLNode
|
|
103
|
+
export function float(value?: unknown): TSLNode
|
|
104
|
+
export function floor(value: unknown): TSLNode
|
|
105
|
+
export function mat2(
|
|
106
|
+
a?: unknown,
|
|
107
|
+
b?: unknown,
|
|
108
|
+
c?: unknown,
|
|
109
|
+
d?: unknown
|
|
110
|
+
): TSLNode
|
|
111
|
+
export function length(value: unknown): TSLNode
|
|
112
|
+
export function log(value: unknown): TSLNode
|
|
113
|
+
export function max(left: unknown, right: unknown): TSLNode
|
|
114
|
+
export function min(left: unknown, right: unknown): TSLNode
|
|
115
|
+
export function mix(left: unknown, right: unknown, factor: unknown): TSLNode
|
|
116
|
+
export function mod(left: unknown, right: unknown): TSLNode
|
|
117
|
+
export function mul(left: unknown, right: unknown): TSLNode
|
|
118
|
+
export const screenSize: TSLNode
|
|
119
|
+
export function select(
|
|
120
|
+
condition: unknown,
|
|
121
|
+
whenTrue: unknown,
|
|
122
|
+
whenFalse: unknown
|
|
123
|
+
): TSLNode
|
|
124
|
+
export function sin(value: unknown): TSLNode
|
|
125
|
+
export function sign(value: unknown): TSLNode
|
|
126
|
+
export function smoothstep(
|
|
127
|
+
edge0: unknown,
|
|
128
|
+
edge1: unknown,
|
|
129
|
+
x: unknown
|
|
130
|
+
): TSLNode
|
|
131
|
+
export function sqrt(value: unknown): TSLNode
|
|
132
|
+
export function pow(base: unknown, exponent: unknown): TSLNode
|
|
133
|
+
export function step(edge: unknown, value: unknown): TSLNode
|
|
134
|
+
export function sub(left: unknown, right: unknown): TSLNode
|
|
135
|
+
export function texture(value: unknown, uv?: unknown): TSLNode
|
|
136
|
+
export function uniform(value?: unknown): TSLNode
|
|
137
|
+
export function uv(): TSLNode
|
|
138
|
+
export function vec2(x?: unknown, y?: unknown): TSLNode
|
|
139
|
+
export function vec3(x?: unknown, y?: unknown, z?: unknown): TSLNode
|
|
140
|
+
export function vec4(
|
|
141
|
+
x?: unknown,
|
|
142
|
+
y?: unknown,
|
|
143
|
+
z?: unknown,
|
|
144
|
+
w?: unknown
|
|
145
|
+
): TSLNode
|
|
146
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
declare module "three/webgpu" {
|
|
2
|
+
export * from "three"
|
|
3
|
+
|
|
4
|
+
import type {
|
|
5
|
+
Camera,
|
|
6
|
+
ColorRepresentation,
|
|
7
|
+
Material,
|
|
8
|
+
Scene,
|
|
9
|
+
TypedArray,
|
|
10
|
+
WebGLRendererParameters,
|
|
11
|
+
WebGLRenderTarget,
|
|
12
|
+
} from "three"
|
|
13
|
+
import type { TSLNode } from "three/tsl"
|
|
14
|
+
|
|
15
|
+
export class MeshBasicNodeMaterial extends Material {
|
|
16
|
+
colorNode: TSLNode | null
|
|
17
|
+
opacityNode: TSLNode | null
|
|
18
|
+
positionNode: TSLNode | null
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export class PointsNodeMaterial extends Material {
|
|
22
|
+
colorNode: TSLNode | null
|
|
23
|
+
opacityNode: TSLNode | null
|
|
24
|
+
positionNode: TSLNode | null
|
|
25
|
+
sizeNode: TSLNode | null
|
|
26
|
+
alphaTest: number
|
|
27
|
+
transparent: boolean
|
|
28
|
+
depthWrite: boolean
|
|
29
|
+
sizeAttenuation: boolean
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export class WebGPURenderer {
|
|
33
|
+
constructor(options?: WebGLRendererParameters & { canvas?: HTMLCanvasElement })
|
|
34
|
+
|
|
35
|
+
dispose(): void
|
|
36
|
+
init(): Promise<void>
|
|
37
|
+
readRenderTargetPixelsAsync(
|
|
38
|
+
target: WebGLRenderTarget,
|
|
39
|
+
x: number,
|
|
40
|
+
y: number,
|
|
41
|
+
width: number,
|
|
42
|
+
height: number,
|
|
43
|
+
): Promise<TypedArray>
|
|
44
|
+
render(scene: Scene, camera: Camera): void
|
|
45
|
+
setAnimationLoop(callback: ((time: number) => void) | null): void
|
|
46
|
+
setClearColor(color: ColorRepresentation, alpha?: number): void
|
|
47
|
+
setPixelRatio(pixelRatio: number): void
|
|
48
|
+
setRenderTarget(target: WebGLRenderTarget | null): void
|
|
49
|
+
setSize(width: number, height: number, updateStyle?: boolean): void
|
|
50
|
+
}
|
|
51
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2023",
|
|
4
|
+
"lib": ["ES2023", "DOM", "DOM.Iterable"],
|
|
5
|
+
"allowJs": true,
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"noEmit": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"module": "esnext",
|
|
11
|
+
"moduleResolution": "bundler",
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"jsx": "react-jsx",
|
|
15
|
+
"incremental": true,
|
|
16
|
+
"noImplicitOverride": true,
|
|
17
|
+
"exactOptionalPropertyTypes": true,
|
|
18
|
+
"useUnknownInCatchVariables": true,
|
|
19
|
+
"noFallthroughCasesInSwitch": true,
|
|
20
|
+
"noImplicitReturns": true,
|
|
21
|
+
"noUncheckedSideEffectImports": true,
|
|
22
|
+
"noUnusedLocals": true,
|
|
23
|
+
"noUnusedParameters": true,
|
|
24
|
+
"noUncheckedIndexedAccess": true,
|
|
25
|
+
"plugins": [
|
|
26
|
+
{
|
|
27
|
+
"name": "next"
|
|
28
|
+
}
|
|
29
|
+
],
|
|
30
|
+
"paths": {
|
|
31
|
+
"@/*": ["./src/*"]
|
|
32
|
+
}
|
|
33
|
+
},
|
|
34
|
+
"include": [
|
|
35
|
+
"next-env.d.ts",
|
|
36
|
+
"**/*.ts",
|
|
37
|
+
"**/*.tsx",
|
|
38
|
+
".next/types/**/*.ts",
|
|
39
|
+
".next/dev/types/**/*.ts",
|
|
40
|
+
"**/*.mts"
|
|
41
|
+
],
|
|
42
|
+
"exclude": [
|
|
43
|
+
"node_modules",
|
|
44
|
+
"**/*.test.ts",
|
|
45
|
+
"**/*.test.tsx",
|
|
46
|
+
"**/*.spec.ts",
|
|
47
|
+
"**/*.spec.tsx"
|
|
48
|
+
]
|
|
49
|
+
}
|