@basementstudio/shader-lab 0.1.0 → 1.0.2
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/dist/src/easings.d.ts +3 -0
- package/dist/src/easings.js +3 -0
- package/dist/src/index.d.ts +5 -0
- package/dist/src/index.js +4 -0
- package/dist/src/lib/editor/custom-shader/shared.d.ts +1 -0
- package/dist/src/lib/editor/custom-shader/shared.js +1 -0
- package/dist/src/renderer/ascii-atlas.d.ts +5 -0
- package/dist/src/renderer/ascii-atlas.js +61 -0
- package/dist/src/renderer/ascii-pass.d.ts +50 -0
- package/dist/src/renderer/ascii-pass.js +271 -0
- package/dist/src/renderer/asset-url.d.ts +1 -0
- package/dist/src/renderer/asset-url.js +3 -0
- package/dist/src/renderer/blend-modes.d.ts +4 -0
- package/dist/src/renderer/blend-modes.js +157 -0
- package/dist/src/renderer/contracts.d.ts +26 -0
- package/dist/src/renderer/contracts.js +13 -0
- package/dist/src/renderer/create-webgpu-renderer.d.ts +3 -0
- package/dist/src/renderer/create-webgpu-renderer.js +37 -0
- package/dist/src/renderer/crt-pass.d.ts +72 -0
- package/dist/src/renderer/crt-pass.js +536 -0
- package/dist/src/renderer/custom-shader-pass.d.ts +17 -0
- package/dist/src/renderer/custom-shader-pass.js +79 -0
- package/dist/src/renderer/custom-shader-runtime.d.ts +16 -0
- package/dist/src/renderer/custom-shader-runtime.js +169 -0
- package/dist/src/renderer/dither-textures.d.ts +8 -0
- package/dist/src/renderer/dither-textures.js +66 -0
- package/dist/src/renderer/dithering-pass.d.ts +45 -0
- package/dist/src/renderer/dithering-pass.js +229 -0
- package/dist/src/renderer/gradient-pass.d.ts +39 -0
- package/dist/src/renderer/gradient-pass.js +358 -0
- package/dist/src/renderer/halftone-pass.d.ts +65 -0
- package/dist/src/renderer/halftone-pass.js +530 -0
- package/dist/src/renderer/ink-pass.d.ts +84 -0
- package/dist/src/renderer/ink-pass.js +526 -0
- package/dist/src/renderer/live-pass.d.ts +31 -0
- package/dist/src/renderer/live-pass.js +136 -0
- package/dist/src/renderer/media-pass.d.ts +32 -0
- package/dist/src/renderer/media-pass.js +130 -0
- package/dist/src/renderer/media-texture.d.ts +8 -0
- package/dist/src/renderer/media-texture.js +41 -0
- package/dist/src/renderer/particle-grid-pass.d.ts +48 -0
- package/dist/src/renderer/particle-grid-pass.js +269 -0
- package/dist/src/renderer/pass-node.d.ts +36 -0
- package/dist/src/renderer/pass-node.js +120 -0
- package/dist/src/renderer/pattern-atlas.d.ts +8 -0
- package/dist/src/renderer/pattern-atlas.js +79 -0
- package/dist/src/renderer/pattern-pass.d.ts +58 -0
- package/dist/src/renderer/pattern-pass.js +316 -0
- package/dist/src/renderer/pipeline-manager.d.ts +39 -0
- package/dist/src/renderer/pipeline-manager.js +287 -0
- package/dist/src/renderer/pixel-sorting-pass.d.ts +33 -0
- package/dist/src/renderer/pixel-sorting-pass.js +179 -0
- package/dist/src/renderer/shaders/tsl/color/tonemapping.d.ts +9 -0
- package/dist/src/renderer/shaders/tsl/color/tonemapping.js +59 -0
- package/dist/src/renderer/shaders/tsl/cosine-palette.d.ts +4 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/cosine-palette.ts → dist/src/renderer/shaders/tsl/cosine-palette.js} +3 -4
- package/dist/src/renderer/shaders/tsl/noise/common.d.ts +5 -0
- package/dist/src/renderer/shaders/tsl/noise/common.js +24 -0
- package/dist/src/renderer/shaders/tsl/noise/curl-noise-3d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/curl-noise-3d.js +27 -0
- package/dist/src/renderer/shaders/tsl/noise/curl-noise-4d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/curl-noise-4d.js +27 -0
- package/dist/src/renderer/shaders/tsl/noise/fbm.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/fbm.js +11 -0
- package/dist/src/renderer/shaders/tsl/noise/perlin-noise-3d.d.ts +5 -0
- package/dist/src/renderer/shaders/tsl/noise/perlin-noise-3d.js +66 -0
- package/dist/src/renderer/shaders/tsl/noise/ridge-noise.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/ridge-noise.js +19 -0
- package/dist/src/renderer/shaders/tsl/noise/simplex-noise-3d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/simplex-noise-3d.js +44 -0
- package/dist/src/renderer/shaders/tsl/noise/simplex-noise-4d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/simplex-noise-4d.js +51 -0
- package/dist/src/renderer/shaders/tsl/noise/turbulence.d.ts +7 -0
- package/dist/src/renderer/shaders/tsl/noise/turbulence.js +34 -0
- package/dist/src/renderer/shaders/tsl/noise/value-noise-3d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/value-noise-3d.js +27 -0
- package/dist/src/renderer/shaders/tsl/noise/voronoi-noise-3d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/noise/voronoi-noise-3d.js +45 -0
- package/dist/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.js +13 -0
- package/dist/src/renderer/shaders/tsl/patterns/bloom.d.ts +4 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/patterns/bloom.ts → dist/src/renderer/shaders/tsl/patterns/bloom.js} +4 -6
- package/dist/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.js +16 -0
- package/dist/src/renderer/shaders/tsl/patterns/grain-texture-pattern.d.ts +4 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/patterns/grain-texture-pattern.ts → dist/src/renderer/shaders/tsl/patterns/grain-texture-pattern.js} +3 -4
- package/dist/src/renderer/shaders/tsl/patterns/repeating-pattern.d.ts +4 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/patterns/repeating-pattern.ts → dist/src/renderer/shaders/tsl/patterns/repeating-pattern.js} +4 -6
- package/dist/src/renderer/shaders/tsl/utils/atan2.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/atan2.js +7 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-conj.d.ts +4 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-conj.ts → dist/src/renderer/shaders/tsl/utils/complex-conj.js} +3 -4
- package/dist/src/renderer/shaders/tsl/utils/complex-cos.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-cos.js +9 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-div.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-div.js +6 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-log.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-log.js +6 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-mobius.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-mobius.js +10 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-mul.d.ts +4 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-mul.ts → dist/src/renderer/shaders/tsl/utils/complex-mul.js} +3 -4
- package/dist/src/renderer/shaders/tsl/utils/complex-pow.d.ts +5 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-pow.js +14 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-sin.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-sin.js +9 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-sqrt.d.ts +5 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-sqrt.js +12 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-tan.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-tan.js +11 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-to-polar.d.ts +4 -0
- package/dist/src/renderer/shaders/tsl/utils/complex-to-polar.js +9 -0
- package/dist/src/renderer/shaders/tsl/utils/hyperbolic.d.ts +8 -0
- package/{packages/shader-lab-react/src/renderer/shaders/tsl/utils/hyperbolic.ts → dist/src/renderer/shaders/tsl/utils/hyperbolic.js} +7 -11
- package/dist/src/renderer/shaders/tsl/utils/index.d.ts +38 -0
- package/dist/src/renderer/shaders/tsl/utils/index.js +39 -0
- package/dist/src/renderer/shaders/tsl/utils/rotate.d.ts +2 -0
- package/dist/src/renderer/shaders/tsl/utils/rotate.js +7 -0
- package/dist/src/renderer/shaders/tsl/utils/screen-aspect-uv.d.ts +2 -0
- package/dist/src/renderer/shaders/tsl/utils/screen-aspect-uv.js +6 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-box-2d.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-box-2d.js +5 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-diamond.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-diamond.js +5 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-rhombus.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-rhombus.js +14 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-sphere.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/sd-sphere.js +5 -0
- package/dist/src/renderer/shaders/tsl/utils/smax.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/smax.js +6 -0
- package/dist/src/renderer/shaders/tsl/utils/smin.d.ts +1 -0
- package/dist/src/renderer/shaders/tsl/utils/smin.js +6 -0
- package/dist/src/renderer/text-pass.d.ts +23 -0
- package/dist/src/renderer/text-pass.js +129 -0
- package/dist/src/runtime-clock.d.ts +9 -0
- package/dist/src/runtime-clock.js +20 -0
- package/dist/src/runtime-frame.d.ts +11 -0
- package/dist/src/runtime-frame.js +12 -0
- package/dist/src/shader-lab-composition.d.ts +9 -0
- package/dist/src/shader-lab-composition.js +96 -0
- package/dist/src/timeline.d.ts +8 -0
- package/dist/src/timeline.js +179 -0
- package/dist/src/types/editor.d.ts +3 -0
- package/dist/src/types/editor.js +1 -0
- package/dist/src/types.d.ts +81 -0
- package/dist/src/types.js +1 -0
- package/package.json +28 -65
- package/.biome/plugins/README.md +0 -21
- package/.biome/plugins/no-anchor-element.grit +0 -12
- package/.biome/plugins/no-relative-parent-imports.grit +0 -10
- package/.biome/plugins/no-unnecessary-forwardref.grit +0 -9
- package/.changeset/README.md +0 -17
- package/.changeset/config.json +0 -11
- package/.editorconfig +0 -40
- package/.env.example +0 -81
- package/.gitattributes +0 -19
- package/.github/workflows/canary.yml +0 -80
- package/.github/workflows/ci.yml +0 -37
- package/.github/workflows/release.yml +0 -56
- package/.tldrignore +0 -84
- package/.vscode/extensions.json +0 -20
- package/.vscode/settings.json +0 -105
- package/biome.json +0 -249
- package/bun.lock +0 -1224
- package/next.config.ts +0 -131
- package/packages/shader-lab-react/CHANGELOG.md +0 -9
- package/packages/shader-lab-react/README.md +0 -119
- package/packages/shader-lab-react/package.json +0 -36
- package/packages/shader-lab-react/scripts/fix-esm-specifiers.mjs +0 -57
- package/packages/shader-lab-react/scripts/prepare-dist.mjs +0 -4
- package/packages/shader-lab-react/src/ambient/three-tsl.d.ts +0 -146
- package/packages/shader-lab-react/src/ambient/three-webgpu.d.ts +0 -51
- package/packages/shader-lab-react/src/easings.ts +0 -4
- package/packages/shader-lab-react/src/index.ts +0 -35
- package/packages/shader-lab-react/src/lib/editor/custom-shader/shared.ts +0 -2
- package/packages/shader-lab-react/src/renderer/ascii-atlas.ts +0 -83
- package/packages/shader-lab-react/src/renderer/ascii-pass.ts +0 -416
- package/packages/shader-lab-react/src/renderer/asset-url.ts +0 -3
- package/packages/shader-lab-react/src/renderer/blend-modes.ts +0 -229
- package/packages/shader-lab-react/src/renderer/contracts.ts +0 -54
- package/packages/shader-lab-react/src/renderer/create-webgpu-renderer.ts +0 -48
- package/packages/shader-lab-react/src/renderer/crt-pass.ts +0 -1040
- package/packages/shader-lab-react/src/renderer/custom-shader-pass.ts +0 -108
- package/packages/shader-lab-react/src/renderer/custom-shader-runtime.ts +0 -309
- package/packages/shader-lab-react/src/renderer/dither-textures.ts +0 -99
- package/packages/shader-lab-react/src/renderer/dithering-pass.ts +0 -322
- package/packages/shader-lab-react/src/renderer/gradient-pass.ts +0 -521
- package/packages/shader-lab-react/src/renderer/halftone-pass.ts +0 -932
- package/packages/shader-lab-react/src/renderer/ink-pass.ts +0 -802
- package/packages/shader-lab-react/src/renderer/live-pass.ts +0 -194
- package/packages/shader-lab-react/src/renderer/media-pass.ts +0 -187
- package/packages/shader-lab-react/src/renderer/media-texture.ts +0 -66
- package/packages/shader-lab-react/src/renderer/particle-grid-pass.ts +0 -389
- package/packages/shader-lab-react/src/renderer/pass-node.ts +0 -209
- package/packages/shader-lab-react/src/renderer/pattern-atlas.ts +0 -133
- package/packages/shader-lab-react/src/renderer/pattern-pass.ts +0 -552
- package/packages/shader-lab-react/src/renderer/pipeline-manager.ts +0 -369
- package/packages/shader-lab-react/src/renderer/pixel-sorting-pass.ts +0 -277
- package/packages/shader-lab-react/src/renderer/shaders/tsl/color/tonemapping.ts +0 -87
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/common.ts +0 -31
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/curl-noise-3d.ts +0 -36
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/curl-noise-4d.ts +0 -36
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/fbm.ts +0 -13
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/perlin-noise-3d.ts +0 -96
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/ridge-noise.ts +0 -24
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/simplex-noise-3d.ts +0 -79
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/simplex-noise-4d.ts +0 -89
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/turbulence.ts +0 -56
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/value-noise-3d.ts +0 -32
- package/packages/shader-lab-react/src/renderer/shaders/tsl/noise/voronoi-noise-3d.ts +0 -60
- package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.ts +0 -15
- package/packages/shader-lab-react/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.ts +0 -24
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/atan2.ts +0 -9
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-cos.ts +0 -10
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-div.ts +0 -11
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-log.ts +0 -7
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-mobius.ts +0 -12
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-pow.ts +0 -16
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-sin.ts +0 -10
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-sqrt.ts +0 -18
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-tan.ts +0 -12
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/complex-to-polar.ts +0 -10
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/index.ts +0 -48
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/rotate.ts +0 -15
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/screen-aspect-uv.ts +0 -15
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-box-2d.ts +0 -6
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-diamond.ts +0 -6
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-rhombus.ts +0 -27
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/sd-sphere.ts +0 -6
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/smax.ts +0 -7
- package/packages/shader-lab-react/src/renderer/shaders/tsl/utils/smin.ts +0 -7
- package/packages/shader-lab-react/src/renderer/text-pass.ts +0 -176
- package/packages/shader-lab-react/src/runtime-clock.ts +0 -42
- package/packages/shader-lab-react/src/runtime-frame.ts +0 -29
- package/packages/shader-lab-react/src/shader-lab-composition.tsx +0 -163
- package/packages/shader-lab-react/src/timeline.ts +0 -283
- package/packages/shader-lab-react/src/types/editor.ts +0 -5
- package/packages/shader-lab-react/src/types.ts +0 -141
- package/packages/shader-lab-react/tsconfig.build.json +0 -8
- package/packages/shader-lab-react/tsconfig.json +0 -21
- package/postcss.config.mjs +0 -5
- 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 +0 -1412
- package/public/assets/patterns/bars/1.svg +0 -3
- package/public/assets/patterns/bars/2.svg +0 -3
- package/public/assets/patterns/bars/3.svg +0 -3
- package/public/assets/patterns/bars/4.svg +0 -3
- package/public/assets/patterns/bars/5.svg +0 -3
- package/public/assets/patterns/bars/6.svg +0 -3
- package/public/assets/patterns/candles/1.svg +0 -3
- package/public/assets/patterns/candles/2.svg +0 -3
- package/public/assets/patterns/candles/3.svg +0 -3
- package/public/assets/patterns/candles/4.svg +0 -3
- package/public/assets/patterns/shapes/1.svg +0 -3
- package/public/assets/patterns/shapes/2.svg +0 -3
- package/public/assets/patterns/shapes/3.svg +0 -3
- package/public/assets/patterns/shapes/4.svg +0 -4
- package/public/assets/patterns/shapes/5.svg +0 -3
- package/public/assets/patterns/shapes/6.svg +0 -4
- 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 +0 -398
- package/src/app/favicon.ico +0 -0
- package/src/app/globals.css +0 -280
- package/src/app/layout.tsx +0 -89
- package/src/app/page.tsx +0 -20
- package/src/app/robots.ts +0 -13
- package/src/app/sitemap.ts +0 -13
- package/src/components/editor/editor-canvas-viewport.tsx +0 -116
- package/src/components/editor/editor-export-dialog.tsx +0 -1177
- package/src/components/editor/editor-timeline-overlay.tsx +0 -983
- package/src/components/editor/editor-topbar.tsx +0 -287
- package/src/components/editor/layer-sidebar.tsx +0 -738
- package/src/components/editor/properties-sidebar-content.tsx +0 -574
- package/src/components/editor/properties-sidebar-fields.tsx +0 -389
- package/src/components/editor/properties-sidebar-utils.ts +0 -178
- package/src/components/editor/properties-sidebar.tsx +0 -421
- package/src/components/ui/button/index.tsx +0 -57
- package/src/components/ui/color-picker/index.tsx +0 -358
- package/src/components/ui/glass-panel/index.tsx +0 -45
- package/src/components/ui/icon-button/index.tsx +0 -46
- package/src/components/ui/select/index.tsx +0 -136
- package/src/components/ui/slider/index.tsx +0 -192
- package/src/components/ui/toggle/index.tsx +0 -34
- package/src/components/ui/typography/index.tsx +0 -61
- package/src/components/ui/xy-pad/index.tsx +0 -160
- package/src/features/editor/components/editor-export-dialog.module.css +0 -271
- package/src/hooks/use-editor-renderer.ts +0 -182
- package/src/lib/app.ts +0 -6
- package/src/lib/cn.ts +0 -7
- package/src/lib/easings.ts +0 -240
- package/src/lib/editor/config/layer-registry.ts +0 -2434
- package/src/lib/editor/custom-shader/shared.ts +0 -28
- package/src/lib/editor/export.ts +0 -420
- package/src/lib/editor/history.ts +0 -71
- package/src/lib/editor/layers.ts +0 -76
- package/src/lib/editor/parameter-schema.ts +0 -75
- package/src/lib/editor/project-file.ts +0 -145
- package/src/lib/editor/shader-export-snippet.ts +0 -37
- package/src/lib/editor/shader-export.ts +0 -315
- package/src/lib/editor/timeline/evaluate.ts +0 -252
- package/src/lib/editor/view-transform.ts +0 -58
- package/src/lib/fonts.ts +0 -28
- package/src/renderer/ascii-atlas.ts +0 -83
- package/src/renderer/ascii-pass.ts +0 -416
- package/src/renderer/blend-modes.ts +0 -229
- package/src/renderer/contracts.ts +0 -161
- package/src/renderer/create-webgpu-renderer.ts +0 -48
- package/src/renderer/crt-pass.ts +0 -1040
- package/src/renderer/custom-shader-pass.ts +0 -117
- package/src/renderer/custom-shader-runtime.ts +0 -309
- package/src/renderer/dither-textures.ts +0 -99
- package/src/renderer/dithering-pass.ts +0 -322
- package/src/renderer/gradient-pass.ts +0 -520
- package/src/renderer/halftone-pass.ts +0 -932
- package/src/renderer/ink-pass.ts +0 -683
- package/src/renderer/live-pass.ts +0 -194
- package/src/renderer/media-pass.ts +0 -187
- package/src/renderer/media-texture.ts +0 -66
- package/src/renderer/particle-grid-pass.ts +0 -389
- package/src/renderer/pass-node-factory.ts +0 -33
- package/src/renderer/pass-node.ts +0 -209
- package/src/renderer/pattern-atlas.ts +0 -97
- package/src/renderer/pattern-pass.ts +0 -552
- package/src/renderer/pipeline-manager.ts +0 -343
- package/src/renderer/pixel-sorting-pass.ts +0 -277
- package/src/renderer/project-clock.ts +0 -57
- package/src/renderer/shaders/tsl/color/tonemapping.ts +0 -86
- package/src/renderer/shaders/tsl/cosine-palette.ts +0 -8
- package/src/renderer/shaders/tsl/noise/common.ts +0 -30
- package/src/renderer/shaders/tsl/noise/curl-noise-3d.ts +0 -35
- package/src/renderer/shaders/tsl/noise/curl-noise-4d.ts +0 -35
- package/src/renderer/shaders/tsl/noise/fbm.ts +0 -12
- package/src/renderer/shaders/tsl/noise/perlin-noise-3d.ts +0 -97
- package/src/renderer/shaders/tsl/noise/ridge-noise.ts +0 -23
- package/src/renderer/shaders/tsl/noise/simplex-noise-3d.ts +0 -78
- package/src/renderer/shaders/tsl/noise/simplex-noise-4d.ts +0 -88
- package/src/renderer/shaders/tsl/noise/turbulence.ts +0 -55
- package/src/renderer/shaders/tsl/noise/value-noise-3d.ts +0 -31
- package/src/renderer/shaders/tsl/noise/voronoi-noise-3d.ts +0 -59
- package/src/renderer/shaders/tsl/patterns/bloom-edge-pattern.ts +0 -14
- package/src/renderer/shaders/tsl/patterns/bloom.ts +0 -10
- package/src/renderer/shaders/tsl/patterns/canvas-weave-pattern.ts +0 -23
- package/src/renderer/shaders/tsl/patterns/grain-texture-pattern.ts +0 -8
- package/src/renderer/shaders/tsl/patterns/repeating-pattern.ts +0 -10
- package/src/renderer/shaders/tsl/utils/atan2.ts +0 -8
- package/src/renderer/shaders/tsl/utils/complex-conj.ts +0 -8
- package/src/renderer/shaders/tsl/utils/complex-cos.ts +0 -9
- package/src/renderer/shaders/tsl/utils/complex-div.ts +0 -10
- package/src/renderer/shaders/tsl/utils/complex-log.ts +0 -6
- package/src/renderer/shaders/tsl/utils/complex-mobius.ts +0 -11
- package/src/renderer/shaders/tsl/utils/complex-mul.ts +0 -8
- package/src/renderer/shaders/tsl/utils/complex-pow.ts +0 -15
- package/src/renderer/shaders/tsl/utils/complex-sin.ts +0 -9
- package/src/renderer/shaders/tsl/utils/complex-sqrt.ts +0 -17
- package/src/renderer/shaders/tsl/utils/complex-tan.ts +0 -11
- package/src/renderer/shaders/tsl/utils/complex-to-polar.ts +0 -9
- package/src/renderer/shaders/tsl/utils/hyperbolic.ts +0 -19
- package/src/renderer/shaders/tsl/utils/index.ts +0 -47
- package/src/renderer/shaders/tsl/utils/rotate.ts +0 -14
- package/src/renderer/shaders/tsl/utils/screen-aspect-uv.ts +0 -14
- package/src/renderer/shaders/tsl/utils/sd-box-2d.ts +0 -5
- package/src/renderer/shaders/tsl/utils/sd-diamond.ts +0 -5
- package/src/renderer/shaders/tsl/utils/sd-rhombus.ts +0 -26
- package/src/renderer/shaders/tsl/utils/sd-sphere.ts +0 -5
- package/src/renderer/shaders/tsl/utils/smax.ts +0 -7
- package/src/renderer/shaders/tsl/utils/smin.ts +0 -6
- package/src/renderer/text-pass.ts +0 -176
- package/src/store/asset-store.ts +0 -193
- package/src/store/editor-store.ts +0 -223
- package/src/store/history-store.ts +0 -172
- package/src/store/index.ts +0 -31
- package/src/store/layer-store.ts +0 -675
- package/src/store/timeline-store.ts +0 -572
- package/src/types/assets.d.ts +0 -6
- package/src/types/css.d.ts +0 -21
- package/src/types/editor.ts +0 -357
- package/src/types/react.d.ts +0 -15
- package/src/types/three-tsl.d.ts +0 -146
- package/src/types/three-webgpu.d.ts +0 -51
- package/tsconfig.json +0 -49
- /package/{packages/shader-lab-react/assets → assets}/patterns/bars/1.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/bars/2.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/bars/3.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/bars/4.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/bars/5.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/bars/6.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/candles/1.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/candles/2.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/candles/3.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/candles/4.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/1.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/2.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/3.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/4.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/5.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/patterns/shapes/6.svg +0 -0
- /package/{packages/shader-lab-react/assets → assets}/textures/blue-noise.png +0 -0
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { easings } from "./easings.js";
|
|
2
|
+
function cloneParameterValue(value) {
|
|
3
|
+
if (Array.isArray(value)) {
|
|
4
|
+
return [...value];
|
|
5
|
+
}
|
|
6
|
+
return value;
|
|
7
|
+
}
|
|
8
|
+
function isNumericTuple(value) {
|
|
9
|
+
return (Array.isArray(value) &&
|
|
10
|
+
(value.length === 2 || value.length === 3) &&
|
|
11
|
+
value.every((entry) => typeof entry === "number"));
|
|
12
|
+
}
|
|
13
|
+
function parseHexColor(value) {
|
|
14
|
+
const normalized = value.trim().toLowerCase();
|
|
15
|
+
if (!normalized.startsWith("#")) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const hex = normalized.slice(1);
|
|
19
|
+
if (hex.length === 6 || hex.length === 8) {
|
|
20
|
+
const r = Number.parseInt(hex.slice(0, 2), 16);
|
|
21
|
+
const g = Number.parseInt(hex.slice(2, 4), 16);
|
|
22
|
+
const b = Number.parseInt(hex.slice(4, 6), 16);
|
|
23
|
+
if ([r, g, b].some(Number.isNaN)) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
return [r, g, b];
|
|
27
|
+
}
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
function toHex(channel) {
|
|
31
|
+
return Math.round(Math.min(255, Math.max(0, channel)))
|
|
32
|
+
.toString(16)
|
|
33
|
+
.padStart(2, "0");
|
|
34
|
+
}
|
|
35
|
+
function rgbToHex(r, g, b) {
|
|
36
|
+
return `#${toHex(r)}${toHex(g)}${toHex(b)}`;
|
|
37
|
+
}
|
|
38
|
+
function lerp(a, b, progress) {
|
|
39
|
+
return a + (b - a) * progress;
|
|
40
|
+
}
|
|
41
|
+
function resolveProgress(progress, interpolation) {
|
|
42
|
+
if (interpolation === "step") {
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
if (interpolation === "smooth") {
|
|
46
|
+
return easings.easeInOutCubic(progress);
|
|
47
|
+
}
|
|
48
|
+
return progress;
|
|
49
|
+
}
|
|
50
|
+
function interpolateValue(from, to, progress, interpolation) {
|
|
51
|
+
if (interpolation === "step") {
|
|
52
|
+
return cloneParameterValue(from);
|
|
53
|
+
}
|
|
54
|
+
const eased = resolveProgress(progress, interpolation);
|
|
55
|
+
if (typeof from === "number" && typeof to === "number") {
|
|
56
|
+
return lerp(from, to, eased);
|
|
57
|
+
}
|
|
58
|
+
if (typeof from === "boolean" && typeof to === "boolean") {
|
|
59
|
+
return eased < 0.5 ? from : to;
|
|
60
|
+
}
|
|
61
|
+
if (typeof from === "string" && typeof to === "string") {
|
|
62
|
+
const leftColor = parseHexColor(from);
|
|
63
|
+
const rightColor = parseHexColor(to);
|
|
64
|
+
if (!(leftColor && rightColor)) {
|
|
65
|
+
return eased < 0.5 ? from : to;
|
|
66
|
+
}
|
|
67
|
+
return rgbToHex(lerp(leftColor[0], rightColor[0], eased), lerp(leftColor[1], rightColor[1], eased), lerp(leftColor[2], rightColor[2], eased));
|
|
68
|
+
}
|
|
69
|
+
if (isNumericTuple(from) && isNumericTuple(to) && from.length === to.length) {
|
|
70
|
+
return from.map((entry, index) => lerp(entry, to[index] ?? entry, eased));
|
|
71
|
+
}
|
|
72
|
+
return eased < 0.5 ? cloneParameterValue(from) : cloneParameterValue(to);
|
|
73
|
+
}
|
|
74
|
+
function evaluateTrackAtTime(track, time) {
|
|
75
|
+
if (!track.enabled || track.keyframes.length === 0) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
if (track.keyframes.length === 1) {
|
|
79
|
+
const onlyKeyframe = track.keyframes[0];
|
|
80
|
+
return onlyKeyframe ? cloneParameterValue(onlyKeyframe.value) : null;
|
|
81
|
+
}
|
|
82
|
+
const firstKeyframe = track.keyframes[0];
|
|
83
|
+
const lastKeyframe = track.keyframes[track.keyframes.length - 1];
|
|
84
|
+
if (!(firstKeyframe && lastKeyframe)) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
if (time <= firstKeyframe.time) {
|
|
88
|
+
return cloneParameterValue(firstKeyframe.value);
|
|
89
|
+
}
|
|
90
|
+
if (time >= lastKeyframe.time) {
|
|
91
|
+
return cloneParameterValue(lastKeyframe.value);
|
|
92
|
+
}
|
|
93
|
+
for (let index = 1; index < track.keyframes.length; index += 1) {
|
|
94
|
+
const nextKeyframe = track.keyframes[index];
|
|
95
|
+
const previousKeyframe = track.keyframes[index - 1];
|
|
96
|
+
if (!(nextKeyframe && previousKeyframe) || time > nextKeyframe.time) {
|
|
97
|
+
continue;
|
|
98
|
+
}
|
|
99
|
+
const span = Math.max(nextKeyframe.time - previousKeyframe.time, 1e-6);
|
|
100
|
+
const progress = Math.max(0, Math.min(1, (time - previousKeyframe.time) / span));
|
|
101
|
+
return interpolateValue(previousKeyframe.value, nextKeyframe.value, progress, track.interpolation);
|
|
102
|
+
}
|
|
103
|
+
return cloneParameterValue(lastKeyframe.value);
|
|
104
|
+
}
|
|
105
|
+
function applyBindingOverride(state, binding, value) {
|
|
106
|
+
if (binding.kind === "param") {
|
|
107
|
+
state.params[binding.key] = cloneParameterValue(value);
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (binding.property === "visible" && typeof value === "boolean") {
|
|
111
|
+
state.properties.visible = value;
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
if ((binding.property === "opacity" ||
|
|
115
|
+
binding.property === "hue" ||
|
|
116
|
+
binding.property === "saturation") &&
|
|
117
|
+
typeof value === "number") {
|
|
118
|
+
state.properties[binding.property] = value;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
export function evaluateTimelineForLayers(layers, tracks, time) {
|
|
122
|
+
if (tracks.length === 0) {
|
|
123
|
+
return [];
|
|
124
|
+
}
|
|
125
|
+
const layerStates = new Map();
|
|
126
|
+
const layerIds = new Set(layers.map((layer) => layer.id));
|
|
127
|
+
for (const track of tracks) {
|
|
128
|
+
if (!layerIds.has(track.layerId)) {
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const value = evaluateTrackAtTime(track, time);
|
|
132
|
+
if (value === null) {
|
|
133
|
+
continue;
|
|
134
|
+
}
|
|
135
|
+
let state = layerStates.get(track.layerId);
|
|
136
|
+
if (!state) {
|
|
137
|
+
state = {
|
|
138
|
+
layerId: track.layerId,
|
|
139
|
+
params: {},
|
|
140
|
+
properties: {},
|
|
141
|
+
};
|
|
142
|
+
layerStates.set(track.layerId, state);
|
|
143
|
+
}
|
|
144
|
+
applyBindingOverride(state, track.binding, value);
|
|
145
|
+
}
|
|
146
|
+
return [...layerStates.values()];
|
|
147
|
+
}
|
|
148
|
+
export function resolveEvaluatedLayers(layers, tracks, time) {
|
|
149
|
+
const evaluatedStates = evaluateTimelineForLayers(layers, tracks, time);
|
|
150
|
+
const evaluatedById = new Map(evaluatedStates.map((state) => [state.layerId, state]));
|
|
151
|
+
return layers.map((layer) => {
|
|
152
|
+
const evaluated = evaluatedById.get(layer.id);
|
|
153
|
+
if (!evaluated) {
|
|
154
|
+
return {
|
|
155
|
+
...layer,
|
|
156
|
+
params: { ...layer.params },
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
return {
|
|
160
|
+
...layer,
|
|
161
|
+
hue: typeof evaluated.properties.hue === "number"
|
|
162
|
+
? evaluated.properties.hue
|
|
163
|
+
: layer.hue,
|
|
164
|
+
opacity: typeof evaluated.properties.opacity === "number"
|
|
165
|
+
? evaluated.properties.opacity
|
|
166
|
+
: layer.opacity,
|
|
167
|
+
params: {
|
|
168
|
+
...layer.params,
|
|
169
|
+
...evaluated.params,
|
|
170
|
+
},
|
|
171
|
+
saturation: typeof evaluated.properties.saturation === "number"
|
|
172
|
+
? evaluated.properties.saturation
|
|
173
|
+
: layer.saturation,
|
|
174
|
+
visible: typeof evaluated.properties.visible === "boolean"
|
|
175
|
+
? evaluated.properties.visible
|
|
176
|
+
: layer.visible,
|
|
177
|
+
};
|
|
178
|
+
});
|
|
179
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
export type ShaderLabParameterValue = number | string | boolean | [number, number] | [number, number, number];
|
|
2
|
+
export type ShaderLabLayerKind = "effect" | "source";
|
|
3
|
+
export type ShaderLabSourceLayerType = "custom-shader" | "gradient" | "image" | "live" | "text" | "video";
|
|
4
|
+
export type ShaderLabEffectLayerType = "ascii" | "crt" | "dithering" | "halftone" | "ink" | "particle-grid" | "pattern" | "pixel-sorting";
|
|
5
|
+
export type ShaderLabLayerType = ShaderLabEffectLayerType | ShaderLabSourceLayerType;
|
|
6
|
+
export type ShaderLabBlendMode = "normal" | "multiply" | "screen" | "overlay" | "darken" | "lighten" | "color-dodge" | "color-burn" | "hard-light" | "soft-light" | "difference" | "exclusion" | "hue" | "saturation" | "color" | "luminosity";
|
|
7
|
+
export type ShaderLabCompositeMode = "filter" | "mask";
|
|
8
|
+
export type ShaderLabAssetSource = {
|
|
9
|
+
fileName?: string;
|
|
10
|
+
kind: "image";
|
|
11
|
+
src: string;
|
|
12
|
+
} | {
|
|
13
|
+
fileName?: string;
|
|
14
|
+
kind: "video";
|
|
15
|
+
src: string;
|
|
16
|
+
};
|
|
17
|
+
export type ShaderLabInlineSketchSource = {
|
|
18
|
+
code: string;
|
|
19
|
+
entryExport: string;
|
|
20
|
+
fileName?: string;
|
|
21
|
+
mode: "inline";
|
|
22
|
+
};
|
|
23
|
+
export type ShaderLabModuleSketchSource = {
|
|
24
|
+
entryExport?: string;
|
|
25
|
+
mode: "module";
|
|
26
|
+
sketch: unknown;
|
|
27
|
+
};
|
|
28
|
+
export type ShaderLabSketchSource = ShaderLabInlineSketchSource | ShaderLabModuleSketchSource;
|
|
29
|
+
export type ShaderLabTimelineInterpolation = "linear" | "smooth" | "step";
|
|
30
|
+
export type ShaderLabAnimatedPropertyBinding = {
|
|
31
|
+
kind: "layer";
|
|
32
|
+
label: string;
|
|
33
|
+
property: "hue" | "opacity" | "saturation" | "visible";
|
|
34
|
+
valueType: "boolean" | "number";
|
|
35
|
+
} | {
|
|
36
|
+
key: string;
|
|
37
|
+
kind: "param";
|
|
38
|
+
label: string;
|
|
39
|
+
valueType: "boolean" | "color" | "number" | "select" | "vec2" | "vec3";
|
|
40
|
+
};
|
|
41
|
+
export interface ShaderLabTimelineKeyframe {
|
|
42
|
+
id: string;
|
|
43
|
+
time: number;
|
|
44
|
+
value: ShaderLabParameterValue;
|
|
45
|
+
}
|
|
46
|
+
export interface ShaderLabTimelineTrack {
|
|
47
|
+
binding: ShaderLabAnimatedPropertyBinding;
|
|
48
|
+
enabled: boolean;
|
|
49
|
+
id: string;
|
|
50
|
+
interpolation: ShaderLabTimelineInterpolation;
|
|
51
|
+
keyframes: ShaderLabTimelineKeyframe[];
|
|
52
|
+
layerId: string;
|
|
53
|
+
}
|
|
54
|
+
export interface ShaderLabTimelineConfig {
|
|
55
|
+
duration: number;
|
|
56
|
+
loop: boolean;
|
|
57
|
+
tracks: ShaderLabTimelineTrack[];
|
|
58
|
+
}
|
|
59
|
+
export interface ShaderLabLayerConfig {
|
|
60
|
+
asset?: ShaderLabAssetSource;
|
|
61
|
+
blendMode: ShaderLabBlendMode;
|
|
62
|
+
compositeMode: ShaderLabCompositeMode;
|
|
63
|
+
hue: number;
|
|
64
|
+
id: string;
|
|
65
|
+
kind: ShaderLabLayerKind;
|
|
66
|
+
name: string;
|
|
67
|
+
opacity: number;
|
|
68
|
+
params: Record<string, ShaderLabParameterValue>;
|
|
69
|
+
saturation: number;
|
|
70
|
+
sketch?: ShaderLabSketchSource;
|
|
71
|
+
type: ShaderLabLayerType;
|
|
72
|
+
visible: boolean;
|
|
73
|
+
}
|
|
74
|
+
export interface ShaderLabConfig {
|
|
75
|
+
composition: {
|
|
76
|
+
height: number;
|
|
77
|
+
width: number;
|
|
78
|
+
};
|
|
79
|
+
layers: ShaderLabLayerConfig[];
|
|
80
|
+
timeline: ShaderLabTimelineConfig;
|
|
81
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,73 +1,36 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@basementstudio/shader-lab",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
"
|
|
7
|
-
|
|
3
|
+
"version": "1.0.2",
|
|
4
|
+
"description": "Portable React runtime for Shader Lab exports.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"main": "./dist/src/index.js",
|
|
8
|
+
"types": "./dist/src/index.d.ts",
|
|
9
|
+
"files": [
|
|
10
|
+
"dist",
|
|
11
|
+
"assets"
|
|
8
12
|
],
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
"changeset": "changeset",
|
|
15
|
-
"check": "bun run build:runtime && bun run lint && bun run typecheck:compare",
|
|
16
|
-
"dev": "next dev",
|
|
17
|
-
"dev:https": "next dev --experimental-https",
|
|
18
|
-
"format": "biome format --write .",
|
|
19
|
-
"lighthouse": "bunx @unlighthouse/cli --site http://localhost:3000",
|
|
20
|
-
"lint": "biome lint --max-diagnostics=200",
|
|
21
|
-
"lint:fix": "biome lint --write --unsafe --max-diagnostics=200",
|
|
22
|
-
"release": "changeset publish",
|
|
23
|
-
"release-canary": "changeset publish --tag canary --no-git-tag",
|
|
24
|
-
"version-canary": "changeset version --snapshot canary",
|
|
25
|
-
"version-packages": "changeset version",
|
|
26
|
-
"start": "next start",
|
|
27
|
-
"test": "bun test",
|
|
28
|
-
"typecheck": "tsgo --noEmit",
|
|
29
|
-
"typecheck:runtime": "bun run --cwd packages/shader-lab-react typecheck",
|
|
30
|
-
"typecheck:compare": "bun run typecheck:tsc && bun run typecheck",
|
|
31
|
-
"typecheck:tsc": "tsc --noEmit --incremental false"
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/src/index.d.ts",
|
|
16
|
+
"default": "./dist/src/index.js"
|
|
17
|
+
}
|
|
32
18
|
},
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"@base-ui/react": "^1.3.0",
|
|
36
|
-
"@phosphor-icons/react": "^2.1.10",
|
|
37
|
-
"class-variance-authority": "^0.7.1",
|
|
38
|
-
"motion": "^12.38.0",
|
|
39
|
-
"next": "16.1.4",
|
|
40
|
-
"react": "19.2.4",
|
|
41
|
-
"react-dom": "19.2.4",
|
|
42
|
-
"react-use": "^17.6.0",
|
|
43
|
-
"tailwind-merge": "^3.4.0",
|
|
44
|
-
"three": "^0.183.2",
|
|
45
|
-
"zod": "^4.3.6",
|
|
46
|
-
"zustand": "^5.0.10"
|
|
19
|
+
"publishConfig": {
|
|
20
|
+
"access": "public"
|
|
47
21
|
},
|
|
48
|
-
"
|
|
49
|
-
"@biomejs/biome": "2.3.11",
|
|
50
|
-
"@changesets/changelog-github": "^0.6.0",
|
|
51
|
-
"@changesets/cli": "^2.30.0",
|
|
52
|
-
"@next/bundle-analyzer": "16.1.1",
|
|
53
|
-
"@svgr/webpack": "^8.1.0",
|
|
54
|
-
"@tailwindcss/postcss": "^4.1.18",
|
|
55
|
-
"@types/bun": "^1.3.6",
|
|
56
|
-
"@types/node": "^20.19.30",
|
|
57
|
-
"@types/react": "^19.2.9",
|
|
58
|
-
"@types/react-dom": "^19.2.3",
|
|
59
|
-
"@types/three": "^0.183.1",
|
|
60
|
-
"@typescript/native-preview": "^7.0.0-dev.20260122.3",
|
|
61
|
-
"babel-plugin-react-compiler": "1.0.0",
|
|
62
|
-
"cross-env": "^10.1.0",
|
|
63
|
-
"postcss-preset-env": "^10.6.1",
|
|
64
|
-
"tailwindcss": "^4.1.18",
|
|
22
|
+
"dependencies": {
|
|
65
23
|
"typescript": "^5.9.3"
|
|
66
24
|
},
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
70
|
-
"
|
|
71
|
-
|
|
72
|
-
|
|
25
|
+
"peerDependencies": {
|
|
26
|
+
"react": "^19.0.0",
|
|
27
|
+
"react-dom": "^19.0.0",
|
|
28
|
+
"three": "^0.183.0"
|
|
29
|
+
},
|
|
30
|
+
"scripts": {
|
|
31
|
+
"build": "node ./scripts/prepare-dist.mjs && bun x tsc -p tsconfig.build.json && node ./scripts/fix-esm-specifiers.mjs",
|
|
32
|
+
"lint": "biome lint src --max-diagnostics=200",
|
|
33
|
+
"prepack": "bun run build",
|
|
34
|
+
"typecheck": "bun x tsc -p tsconfig.json --noEmit"
|
|
35
|
+
}
|
|
73
36
|
}
|
package/.biome/plugins/README.md
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
## Plugins
|
|
2
|
-
|
|
3
|
-
### 1. `no-anchor-element.grit`
|
|
4
|
-
Enforces using Next.js `<Link>` component instead of HTML `<a>` elements.
|
|
5
|
-
|
|
6
|
-
### 2. `no-unnecessary-forwardref.grit`
|
|
7
|
-
Checks for unnecessary `forwardRef` usage in React 19 with the compiler.
|
|
8
|
-
|
|
9
|
-
### 3. `no-relative-parent-imports.grit`
|
|
10
|
-
Forbids relative parent imports (`../`) and encourages alias imports (`@/`).
|
|
11
|
-
|
|
12
|
-
## Plugin Configuration
|
|
13
|
-
|
|
14
|
-
The plugins are configured in `biome.json`:
|
|
15
|
-
```json
|
|
16
|
-
"plugins": [
|
|
17
|
-
"./biome-plugins/no-anchor-element.grit",
|
|
18
|
-
"./biome-plugins/no-unnecessary-forwardref.grit",
|
|
19
|
-
"./biome-plugins/no-relative-parent-imports.grit"
|
|
20
|
-
]
|
|
21
|
-
```
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
language js;
|
|
2
|
-
|
|
3
|
-
`<a $attrs>$content</a>` as $anchor where {
|
|
4
|
-
!$anchor <: within `if ($condition) { return ($jsx) }` where {
|
|
5
|
-
$condition <: contains or { `isExternal`, `isExternalSSR` }
|
|
6
|
-
},
|
|
7
|
-
register_diagnostic(
|
|
8
|
-
span = $anchor,
|
|
9
|
-
message = "Use custom Link component instead of <a> element. The Link component handles both internal and external links automatically.",
|
|
10
|
-
severity = "error"
|
|
11
|
-
)
|
|
12
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
language js;
|
|
2
|
-
|
|
3
|
-
`import $imports from $source` as $import where {
|
|
4
|
-
$source <: r"['\"]\.\.\/\.\.\/.*['\"]",
|
|
5
|
-
register_diagnostic(
|
|
6
|
-
span = $import,
|
|
7
|
-
message = "Use alias imports (~/dir/) instead of deep relative imports (../../). Single level imports (../) are allowed for colocated files.",
|
|
8
|
-
severity = "error"
|
|
9
|
-
)
|
|
10
|
-
}
|
package/.changeset/README.md
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Changesets
|
|
2
|
-
|
|
3
|
-
Run `bun run changeset` in a feature branch when a package change should ship.
|
|
4
|
-
|
|
5
|
-
This creates a markdown file in `.changeset` where you choose:
|
|
6
|
-
|
|
7
|
-
- `patch` for fixes
|
|
8
|
-
- `minor` for backward-compatible features
|
|
9
|
-
- `major` for breaking changes
|
|
10
|
-
|
|
11
|
-
Release flow:
|
|
12
|
-
|
|
13
|
-
1. Add a changeset in the PR
|
|
14
|
-
2. Merge the PR to `main`
|
|
15
|
-
3. `release.yml` creates or updates the automated version PR
|
|
16
|
-
4. Merge that generated PR
|
|
17
|
-
5. The package is published to npm
|
package/.changeset/config.json
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://unpkg.com/@changesets/config@3.1.1/schema.json",
|
|
3
|
-
"changelog": "@changesets/cli/changelog",
|
|
4
|
-
"commit": false,
|
|
5
|
-
"fixed": [],
|
|
6
|
-
"linked": [],
|
|
7
|
-
"access": "public",
|
|
8
|
-
"baseBranch": "main",
|
|
9
|
-
"updateInternalDependencies": "patch",
|
|
10
|
-
"ignore": []
|
|
11
|
-
}
|
package/.editorconfig
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
# EditorConfig helps maintain consistent coding styles across different editors
|
|
2
|
-
# https://editorconfig.org
|
|
3
|
-
|
|
4
|
-
root = true
|
|
5
|
-
|
|
6
|
-
[*]
|
|
7
|
-
charset = utf-8
|
|
8
|
-
end_of_line = lf
|
|
9
|
-
indent_style = space
|
|
10
|
-
indent_size = 2
|
|
11
|
-
insert_final_newline = true
|
|
12
|
-
trim_trailing_whitespace = true
|
|
13
|
-
|
|
14
|
-
[*.md]
|
|
15
|
-
trim_trailing_whitespace = false
|
|
16
|
-
|
|
17
|
-
[*.{yml,yaml}]
|
|
18
|
-
indent_size = 2
|
|
19
|
-
|
|
20
|
-
[Makefile]
|
|
21
|
-
indent_style = tab
|
|
22
|
-
|
|
23
|
-
[*.{json,jsonc}]
|
|
24
|
-
indent_size = 2
|
|
25
|
-
|
|
26
|
-
[*.{css,scss}]
|
|
27
|
-
indent_size = 2
|
|
28
|
-
|
|
29
|
-
[*.{ts,tsx,js,jsx,mjs}]
|
|
30
|
-
indent_size = 2
|
|
31
|
-
|
|
32
|
-
[*.svg]
|
|
33
|
-
insert_final_newline = false
|
|
34
|
-
|
|
35
|
-
[{package.json,package-lock.json,bun.lockb}]
|
|
36
|
-
indent_size = 2
|
|
37
|
-
|
|
38
|
-
[.env*]
|
|
39
|
-
insert_final_newline = true
|
|
40
|
-
|
package/.env.example
DELETED
|
@@ -1,81 +0,0 @@
|
|
|
1
|
-
# ============================================
|
|
2
|
-
# Basement Next Starter - Environment Variables
|
|
3
|
-
# ============================================
|
|
4
|
-
# Copy this file to .env.local and fill in the values
|
|
5
|
-
# Run: cp .env.example .env.local
|
|
6
|
-
#
|
|
7
|
-
# Only configure the integrations you need.
|
|
8
|
-
# Remove unused sections to keep your env file clean.
|
|
9
|
-
# ============================================
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
# ============================================
|
|
13
|
-
# CORE (Recommended)
|
|
14
|
-
# ============================================
|
|
15
|
-
|
|
16
|
-
# Base URL for your site (used for SEO, canonical URLs, etc.)
|
|
17
|
-
# Development: http://localhost:3000
|
|
18
|
-
# Production: https://your-domain.com
|
|
19
|
-
NEXT_PUBLIC_BASE_URL="http://localhost:3000"
|
|
20
|
-
|
|
21
|
-
# Draft mode secret for preview functionality
|
|
22
|
-
# Generate a random string: openssl rand -base64 32
|
|
23
|
-
DRAFT_MODE_TOKEN=""
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
# ============================================
|
|
27
|
-
# SANITY CMS (Optional)
|
|
28
|
-
# Headless CMS with visual editing
|
|
29
|
-
# Get credentials: https://sanity.io/manage
|
|
30
|
-
# Docs: https://www.sanity.io/docs
|
|
31
|
-
# ============================================
|
|
32
|
-
|
|
33
|
-
# Required for Sanity
|
|
34
|
-
NEXT_PUBLIC_SANITY_PROJECT_ID=""
|
|
35
|
-
NEXT_PUBLIC_SANITY_DATASET="production"
|
|
36
|
-
NEXT_PUBLIC_SANITY_API_READ_TOKEN=""
|
|
37
|
-
|
|
38
|
-
# Optional - for server-side mutations and visual editing
|
|
39
|
-
# SANITY_PRIVATE_TOKEN=""
|
|
40
|
-
|
|
41
|
-
# Optional - API version (defaults to 2024-03-15)
|
|
42
|
-
# NEXT_PUBLIC_SANITY_API_VERSION="2024-03-15"
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
# ============================================
|
|
46
|
-
# SHOPIFY (Optional)
|
|
47
|
-
# E-commerce platform with cart and checkout
|
|
48
|
-
# Get credentials: https://shopify.dev/docs/storefronts/headless
|
|
49
|
-
# ============================================
|
|
50
|
-
|
|
51
|
-
# Required for Shopify
|
|
52
|
-
# SHOPIFY_STORE_DOMAIN="your-store.myshopify.com"
|
|
53
|
-
# SHOPIFY_STOREFRONT_ACCESS_TOKEN=""
|
|
54
|
-
|
|
55
|
-
# Optional - for revalidation webhooks
|
|
56
|
-
# SHOPIFY_REVALIDATION_SECRET=""
|
|
57
|
-
|
|
58
|
-
# Optional - for customer accounts
|
|
59
|
-
# SHOPIFY_CUSTOMER_ACCOUNT_API_CLIENT_ID=""
|
|
60
|
-
# SHOPIFY_CUSTOMER_ACCOUNT_API_URL=""
|
|
61
|
-
|
|
62
|
-
# ============================================
|
|
63
|
-
# ANALYTICS (Optional)
|
|
64
|
-
# ============================================
|
|
65
|
-
|
|
66
|
-
# Google Analytics
|
|
67
|
-
# NEXT_PUBLIC_GOOGLE_ANALYTICS=""
|
|
68
|
-
|
|
69
|
-
# Google Tag Manager
|
|
70
|
-
# NEXT_PUBLIC_GOOGLE_TAG_MANAGER_ID=""
|
|
71
|
-
|
|
72
|
-
# Facebook
|
|
73
|
-
# NEXT_PUBLIC_FACEBOOK_APP_ID=""
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
# ============================================
|
|
77
|
-
# VERCEL (Auto-populated by Vercel CLI)
|
|
78
|
-
# ============================================
|
|
79
|
-
|
|
80
|
-
# These are automatically set by Vercel
|
|
81
|
-
# VERCEL_OIDC_TOKEN=""
|
package/.gitattributes
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# Git Attributes Configuration
|
|
2
|
-
# This file ensures consistent line endings across all platforms
|
|
3
|
-
#
|
|
4
|
-
# Configuration:
|
|
5
|
-
# * - Applies to all files in the repository
|
|
6
|
-
# text=auto - Git automatically detects text vs binary files
|
|
7
|
-
# eol=lf - Normalizes line endings to LF (Unix-style) for text files
|
|
8
|
-
#
|
|
9
|
-
# Why this matters:
|
|
10
|
-
# - Windows uses CRLF (\r\n) line endings
|
|
11
|
-
# - Unix/Linux/macOS use LF (\n) line endings
|
|
12
|
-
# - This prevents line-ending conflicts and ensures consistent diffs
|
|
13
|
-
#
|
|
14
|
-
# What it does:
|
|
15
|
-
# - On commit: Normalizes all text files to LF line endings
|
|
16
|
-
# - On checkout: Converts to platform-native format if needed
|
|
17
|
-
# - Prevents merge conflicts caused by line ending differences
|
|
18
|
-
|
|
19
|
-
* text=auto eol=lf
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
name: Canary Release
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
workflow_dispatch:
|
|
5
|
-
|
|
6
|
-
permissions:
|
|
7
|
-
contents: read
|
|
8
|
-
id-token: write
|
|
9
|
-
|
|
10
|
-
concurrency:
|
|
11
|
-
group: canary-main
|
|
12
|
-
cancel-in-progress: true
|
|
13
|
-
|
|
14
|
-
jobs:
|
|
15
|
-
canary:
|
|
16
|
-
runs-on: ubuntu-latest
|
|
17
|
-
|
|
18
|
-
steps:
|
|
19
|
-
- name: Checkout
|
|
20
|
-
uses: actions/checkout@v4
|
|
21
|
-
with:
|
|
22
|
-
fetch-depth: 0
|
|
23
|
-
|
|
24
|
-
- name: Setup Bun
|
|
25
|
-
uses: oven-sh/setup-bun@v2
|
|
26
|
-
with:
|
|
27
|
-
bun-version: latest
|
|
28
|
-
|
|
29
|
-
- name: Setup Node for npm publishing
|
|
30
|
-
uses: actions/setup-node@v4
|
|
31
|
-
with:
|
|
32
|
-
node-version: 24
|
|
33
|
-
|
|
34
|
-
- name: Use npm 11.6.2
|
|
35
|
-
run: npm i -g npm@11.6.2
|
|
36
|
-
|
|
37
|
-
- name: Install dependencies
|
|
38
|
-
run: bun install --frozen-lockfile
|
|
39
|
-
|
|
40
|
-
- name: Type check
|
|
41
|
-
run: bun run check
|
|
42
|
-
|
|
43
|
-
- name: Build
|
|
44
|
-
run: bun run build
|
|
45
|
-
|
|
46
|
-
- name: Configure npm for publishing
|
|
47
|
-
run: |
|
|
48
|
-
cat > ~/.npmrc <<'EOF'
|
|
49
|
-
registry=https://registry.npmjs.org/
|
|
50
|
-
access=public
|
|
51
|
-
EOF
|
|
52
|
-
|
|
53
|
-
- name: Check pending changesets
|
|
54
|
-
id: changesets
|
|
55
|
-
run: |
|
|
56
|
-
bunx changeset status --output=changeset-status.json
|
|
57
|
-
node <<'NODE'
|
|
58
|
-
const fs = require('node:fs');
|
|
59
|
-
const status = JSON.parse(fs.readFileSync('changeset-status.json', 'utf8'));
|
|
60
|
-
const releaseCount = Array.isArray(status.releases) ? status.releases.length : 0;
|
|
61
|
-
const hasReleases = releaseCount > 0;
|
|
62
|
-
|
|
63
|
-
fs.appendFileSync(process.env.GITHUB_OUTPUT, `has_releases=${hasReleases}\n`);
|
|
64
|
-
console.log(`Found ${releaseCount} package(s) eligible for canary release.`);
|
|
65
|
-
NODE
|
|
66
|
-
|
|
67
|
-
- name: Version canary packages
|
|
68
|
-
if: steps.changesets.outputs.has_releases == 'true'
|
|
69
|
-
run: bun run version-canary
|
|
70
|
-
|
|
71
|
-
- name: Publish canary packages
|
|
72
|
-
if: steps.changesets.outputs.has_releases == 'true'
|
|
73
|
-
run: bun run release-canary
|
|
74
|
-
env:
|
|
75
|
-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
76
|
-
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
77
|
-
|
|
78
|
-
- name: Skip publish (no pending changesets)
|
|
79
|
-
if: steps.changesets.outputs.has_releases != 'true'
|
|
80
|
-
run: echo "No pending changesets. Skipping canary publish."
|