From 8635febb1a397e2cd11c7abed27f2ef106c2aa10 Mon Sep 17 00:00:00 2001 From: verekia <522007+verekia@users.noreply.github.com> Date: Fri, 20 Dec 2024 17:29:38 +0700 Subject: [PATCH] Remove example project, live preview of shader thumbnails, Next 14, React 18 --- bun.lockb | Bin 187912 -> 199280 bytes .../eslint.config.js-old | 0 docs/next.config.ts | 7 -- docs/package.json | 14 +-- docs/public/shaders/simplex-noise.webp | Bin 28316 -> 16384 bytes .../src/app/dots-orbit/page.tsx | 48 +++++---- docs/src/app/globals.css | 8 ++ .../src/app/grain-clouds/page.tsx | 22 +++- docs/src/app/layout.tsx | 20 ++-- .../src/app/mesh-gradient/page.tsx | 40 ++++--- .../src/app/neuro-noise/page.tsx | 40 ++++--- docs/src/app/page.tsx | 100 ++++++++++++++++-- docs/src/app/shader-item.tsx | 39 +++++++ docs/src/app/shader-thumbnail.tsx | 21 ---- .../src/app/smoke-ring/page.tsx | 42 +++++--- .../src/app/stepped-simplex-noise/page.tsx | 46 +++++--- .../vite.config.js => docs/vite.config.js-old | 0 example/.gitignore | 24 ----- example/README.md | 8 -- example/index.html | 25 ----- example/package.json | 31 ------ example/src/App.jsx | 49 --------- example/src/main.jsx | 10 -- example/src/styles.css | 7 -- example/tsconfig.json | 20 ---- package.json | 3 +- 26 files changed, 310 insertions(+), 314 deletions(-) rename example/eslint.config.js => docs/eslint.config.js-old (100%) delete mode 100644 docs/next.config.ts rename example/src/shaders/dots-orbit-example.tsx => docs/src/app/dots-orbit/page.tsx (68%) rename example/src/shaders/grain-clouds-example.tsx => docs/src/app/grain-clouds/page.tsx (70%) rename example/src/shaders/mesh-gradient-example.tsx => docs/src/app/mesh-gradient/page.tsx (66%) rename example/src/shaders/neuro-noise-example.tsx => docs/src/app/neuro-noise/page.tsx (67%) create mode 100644 docs/src/app/shader-item.tsx delete mode 100644 docs/src/app/shader-thumbnail.tsx rename example/src/shaders/smoke-ring-example.tsx => docs/src/app/smoke-ring/page.tsx (67%) rename example/src/shaders/stepped-simplex-noise-example.tsx => docs/src/app/stepped-simplex-noise/page.tsx (67%) rename example/vite.config.js => docs/vite.config.js-old (100%) delete mode 100644 example/.gitignore delete mode 100644 example/README.md delete mode 100644 example/index.html delete mode 100644 example/package.json delete mode 100644 example/src/App.jsx delete mode 100644 example/src/main.jsx delete mode 100644 example/src/styles.css delete mode 100644 example/tsconfig.json diff --git a/bun.lockb b/bun.lockb index fb749bba71370a6424e9cd768d9c6abfe91b408b..e9b5e8bd8d4a4aceadc7a830c2babaf7ff2201dd 100755 GIT binary patch delta 34863 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 delta 27880 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
VB%PE<(R!;PG9BJ{_$-KYYaNQ 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 diff --git a/example/eslint.config.js b/docs/eslint.config.js-old similarity index 100% rename from example/eslint.config.js rename to docs/eslint.config.js-old diff --git a/docs/next.config.ts b/docs/next.config.ts deleted file mode 100644 index e9ffa30..0000000 --- a/docs/next.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { NextConfig } from "next"; - -const nextConfig: NextConfig = { - /* config options here */ -}; - -export default nextConfig; diff --git a/docs/package.json b/docs/package.json index 1b7d3ce..37e060a 100644 --- a/docs/package.json +++ b/docs/package.json @@ -3,21 +3,23 @@ "version": "0.0.0", "private": true, "scripts": { - "dev": "next dev --turbopack", + "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" }, "dependencies": { - "react": "^19.0.0", - "react-dom": "^19.0.0", - "next": "^15.1.0" + "@paper-design/shaders-react": "workspace:*", + "leva": "0.9.34", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "next": "^14.2.21" }, "devDependencies": { "typescript": "^5.7.2", "@types/node": "^22.10.2", - "@types/react": "^19.0.1", - "@types/react-dom": "^19.0.2", + "@types/react": "^18.3.12", + "@types/react-dom": "^18.3.1", "postcss": "^8.4.49", "tailwindcss": "^3.4.16", "eslint": "^9.16.0", diff --git a/docs/public/shaders/simplex-noise.webp b/docs/public/shaders/simplex-noise.webp index ef95771e9bd09c8576fdb2bed3fd6cf4345abe46..ecd819be16086aca5228663db0da3295734bc8b1 100644 GIT binary patch literal 16384 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 diff --git a/example/src/shaders/dots-orbit-example.tsx b/docs/src/app/dots-orbit/page.tsx similarity index 68% rename from example/src/shaders/dots-orbit-example.tsx rename to docs/src/app/dots-orbit/page.tsx index 990df2c..c82c6e2 100644 --- a/example/src/shaders/dots-orbit-example.tsx +++ b/docs/src/app/dots-orbit/page.tsx @@ -1,26 +1,29 @@ +'use client'; + import { DotsOrbit, type DotsOrbitParams, dotsOrbitPresets } from '@paper-design/shaders-react'; import { useControls, button, folder } from 'leva'; +import Link from 'next/link'; import { useEffect } from 'react'; /** * You can copy/paste this example to use DotsOrbit in your app */ -const DotsOrbitExample = () => { - return ( - - ); -}; +// const DotsOrbitExample = () => { +// return ( +// +// ); +// }; /** * This example has controls added so you can play with settings in the example app @@ -28,7 +31,7 @@ const DotsOrbitExample = () => { const defaults = dotsOrbitPresets[0].params; -export const DotsOrbitWithControls = () => { +const DotsOrbitWithControls = () => { const [params, setParams] = useControls(() => { const presets: DotsOrbitParams = Object.fromEntries( dotsOrbitPresets.map((preset) => [preset.name, button(() => setParams(preset.params))]) @@ -58,5 +61,14 @@ export const DotsOrbitWithControls = () => { setParams(defaults); }, []); - return ; + return ( + <> + + + + + + ); }; + +export default DotsOrbitWithControls; diff --git a/docs/src/app/globals.css b/docs/src/app/globals.css index 6b717ad..8e689d5 100644 --- a/docs/src/app/globals.css +++ b/docs/src/app/globals.css @@ -19,3 +19,11 @@ body { background: var(--background); font-family: Arial, Helvetica, sans-serif; } + +#leva__root button { + background-color: var(--leva-colors-elevation3); + + &:hover { + box-shadow: inset 0 0 0 var(--leva-borderWidths-hover) var(--leva-colors-accent1); + } +} diff --git a/example/src/shaders/grain-clouds-example.tsx b/docs/src/app/grain-clouds/page.tsx similarity index 70% rename from example/src/shaders/grain-clouds-example.tsx rename to docs/src/app/grain-clouds/page.tsx index 52f142a..2c76892 100644 --- a/example/src/shaders/grain-clouds-example.tsx +++ b/docs/src/app/grain-clouds/page.tsx @@ -1,13 +1,16 @@ +'use client'; + import { GrainClouds, type GrainCloudsParams, grainCloudsPresets } from '@paper-design/shaders-react'; import { button, folder, useControls } from 'leva'; +import Link from 'next/link'; import { useEffect } from 'react'; /** * You can copy/paste this example to use GrainClouds in your app */ -const GrainCloudsExample = () => { - return ; -}; +// const GrainCloudsExample = () => { +// return ; +// }; /** * This example has controls added so you can play with settings in the example app @@ -15,7 +18,7 @@ const GrainCloudsExample = () => { const defaults = grainCloudsPresets[0].params; -export const GrainCloudsWithControls = () => { +const GrainCloudsWithControls = () => { const [params, setParams] = useControls(() => { const presets: GrainCloudsParams = Object.fromEntries( grainCloudsPresets.map((preset) => [preset.name, button(() => setParams(preset.params))]) @@ -41,5 +44,14 @@ export const GrainCloudsWithControls = () => { setParams(defaults); }, []); - return ; + return ( + <> + + + + + + ); }; + +export default GrainCloudsWithControls; diff --git a/docs/src/app/layout.tsx b/docs/src/app/layout.tsx index c2fbf51..22221e8 100644 --- a/docs/src/app/layout.tsx +++ b/docs/src/app/layout.tsx @@ -1,16 +1,16 @@ import type { Metadata } from 'next'; -import { Geist, Geist_Mono } from 'next/font/google'; +// import { Geist, Geist_Mono } from 'next/font/google'; import './globals.css'; -const geistSans = Geist({ - variable: '--font-geist-sans', - subsets: ['latin'], -}); +// const geistSans = Geist({ +// variable: '--font-geist-sans', +// subsets: ['latin'], +// }); -const geistMono = Geist_Mono({ - variable: '--font-geist-mono', - subsets: ['latin'], -}); +// const geistMono = Geist_Mono({ +// variable: '--font-geist-mono', +// subsets: ['latin'], +// }); export const metadata: Metadata = { title: 'Paper Shaders – Zero-dependency ultra-fast shaders', @@ -24,7 +24,7 @@ export default function RootLayout({ }>) { return ( - {children} + {children} ); } diff --git a/example/src/shaders/mesh-gradient-example.tsx b/docs/src/app/mesh-gradient/page.tsx similarity index 66% rename from example/src/shaders/mesh-gradient-example.tsx rename to docs/src/app/mesh-gradient/page.tsx index 53494be..12f7dcc 100644 --- a/example/src/shaders/mesh-gradient-example.tsx +++ b/docs/src/app/mesh-gradient/page.tsx @@ -1,22 +1,25 @@ +'use client'; + import { MeshGradient, type MeshGradientParams, meshGradientPresets } from '@paper-design/shaders-react'; import { useControls, button, folder } from 'leva'; +import Link from 'next/link'; import { useEffect } from 'react'; /** * You can copy/paste this example to use MeshGradient in your app */ -const MeshGradientExample = () => { - return ( - - ); -}; +// const MeshGradientExample = () => { +// return ( +// +// ); +// }; /** * This example has controls added so you can play with settings in the example app @@ -24,7 +27,7 @@ const MeshGradientExample = () => { const defaults = meshGradientPresets[0].params; -export const MeshGradientWithControls = () => { +const MeshGradientWithControls = () => { const [params, setParams] = useControls(() => { const presets: MeshGradientParams = Object.fromEntries( meshGradientPresets.map((preset) => [preset.name, button(() => setParams(preset.params))]) @@ -51,5 +54,14 @@ export const MeshGradientWithControls = () => { setParams(defaults); }, []); - return ; + return ( + <> + + + + + + ); }; + +export default MeshGradientWithControls; diff --git a/example/src/shaders/neuro-noise-example.tsx b/docs/src/app/neuro-noise/page.tsx similarity index 67% rename from example/src/shaders/neuro-noise-example.tsx rename to docs/src/app/neuro-noise/page.tsx index 729e80e..411fa3c 100644 --- a/example/src/shaders/neuro-noise-example.tsx +++ b/docs/src/app/neuro-noise/page.tsx @@ -1,22 +1,25 @@ +'use client'; + import { NeuroNoise, type NeuroNoiseParams, neuroNoisePresets } from '@paper-design/shaders-react'; import { useControls, button, folder } from 'leva'; +import Link from 'next/link'; import { useEffect } from 'react'; /** * You can copy/paste this example to use NeuroNoise in your app */ -const NeuroNoiseExample = () => { - return ( - - ); -}; +// const NeuroNoiseExample = () => { +// return ( +// +// ); +// }; /** * This example has controls added so you can play with settings in the example app @@ -24,7 +27,7 @@ const NeuroNoiseExample = () => { const defaults = neuroNoisePresets[0].params; -export const NeuroNoiseWithControls = () => { +const NeuroNoiseWithControls = () => { const [params, setParams] = useControls(() => { const presets: NeuroNoiseParams = Object.fromEntries( neuroNoisePresets.map((preset) => [preset.name, button(() => setParams(preset.params))]) @@ -51,5 +54,14 @@ export const NeuroNoiseWithControls = () => { setParams(defaults); }, []); - return ; + return ( + <> + + + + + + ); }; + +export default NeuroNoiseWithControls; diff --git a/docs/src/app/page.tsx b/docs/src/app/page.tsx index 7a96df5..d54f31c 100644 --- a/docs/src/app/page.tsx +++ b/docs/src/app/page.tsx @@ -1,26 +1,104 @@ +'use client'; + import meshGradientImg from '../../public/shaders/mesh-gradient.webp'; import simplexNoiseImg from '../../public/shaders/simplex-noise.webp'; import grainCloudsImg from '../../public/shaders/grain-clouds.webp'; import neuroNoiseImg from '../../public/shaders/neuro-noise.webp'; import dotOrbitImg from '../../public/shaders/dot-orbit.webp'; import smokeRingImg from '../../public/shaders/smoke-ring.webp'; -import { ShaderThumbnail } from './shader-thumbnail'; +import { ShaderItem } from './shader-item'; +import { + DotsOrbit, + GrainClouds, + MeshGradient, + NeuroNoise, + SmokeRing, + SteppedSimplexNoise, +} from '@paper-design/shaders-react'; const shaders = [ - { name: 'simplex noise', image: simplexNoiseImg }, - { name: 'grain clouds', image: grainCloudsImg }, - { name: 'mesh gradient', image: meshGradientImg }, - { name: 'neuro noise', image: neuroNoiseImg }, - { name: 'dot orbit', image: dotOrbitImg }, - { name: 'smoke ring', image: smokeRingImg }, + { + name: 'simplex noise', + image: simplexNoiseImg, + url: '/stepped-simplex-noise', + ShaderComponent: SteppedSimplexNoise, + shaderConfig: { + color1: '#56758f', + color2: '#91be6f', + color3: '#f94346', + color4: '#f9c54e', + color5: '#ffffff', + scale: 1.5, + speed: 0.25, + stepsNumber: 13, + }, + }, + { + name: 'grain clouds', + image: grainCloudsImg, + url: '/grain-clouds', + ShaderComponent: GrainClouds, + shaderConfig: { + color1: '#73a6ff', + color2: '#ffffff', + scale: 0.7, + grainAmount: 0, + speed: 0.3, + }, + }, + { + name: 'mesh gradient', + image: meshGradientImg, + url: '/mesh-gradient', + ShaderComponent: MeshGradient, + shaderConfig: { speed: 0.2 }, + }, + { + name: 'neuro noise', + image: neuroNoiseImg, + url: '/neuro-noise', + ShaderComponent: NeuroNoise, + shaderConfig: { scale: 2.5 }, + }, + { + name: 'dot orbit', + image: dotOrbitImg, + url: '/dots-orbit', + ShaderComponent: DotsOrbit, + shaderConfig: { + color1: '#cf2a30', + color2: '#396a4e', + color3: '#f0a519', + color4: '#5d3f73', + dotSize: 0.15, + dotSizeRange: 0.05, + scale: 16, + speed: 2, + spreading: 0.25, + }, + }, + { + name: 'smoke ring', + image: smokeRingImg, + url: '/smoke-ring', + ShaderComponent: SmokeRing, + shaderConfig: { + colorBack: '#3d84ff', + color1: '#ffffff', + color2: '#ffffff', + speed: 1, + thickness: 0.7, + noiseScale: 1.8, + }, + }, ]; export default function Home() { return ( <> -
-
-
Paper
+
+
+
Paper

Paper Shaders

ultra fast zero-dependency shaders for your designs

@@ -31,7 +109,7 @@ export default function Home() {
{shaders.map((shader) => ( - + ))}
diff --git a/docs/src/app/shader-item.tsx b/docs/src/app/shader-item.tsx new file mode 100644 index 0000000..5b11913 --- /dev/null +++ b/docs/src/app/shader-item.tsx @@ -0,0 +1,39 @@ +'use client'; + +import Image, { StaticImageData } from 'next/image'; +import Link from 'next/link'; +import { useState } from 'react'; + +export function ShaderItem({ + name, + image, + url, + ShaderComponent, + shaderConfig, +}: { + name: string; + image: StaticImageData; + url: string; + ShaderComponent: React.ComponentType<{ style: React.CSSProperties } & Record>; + shaderConfig: Record; +}) { + const [isHovered, setIsHovered] = useState(false); + + return ( + setIsHovered(true)} + onMouseLeave={() => setIsHovered(false)} + > +
+ {isHovered ? ( + + ) : ( + {`Preview + )} +
+
{name}
+ + ); +} diff --git a/docs/src/app/shader-thumbnail.tsx b/docs/src/app/shader-thumbnail.tsx deleted file mode 100644 index 56bd2f9..0000000 --- a/docs/src/app/shader-thumbnail.tsx +++ /dev/null @@ -1,21 +0,0 @@ -'use client'; - -import Image, { StaticImageData } from 'next/image'; -import { useState } from 'react'; - -export function ShaderThumbnail({ name, image }: { name: string; image: StaticImageData }) { - const [isHovered, setIsHovered] = useState(false); - - return ( -
- {`Preview -
{name}
-
- ); -} diff --git a/example/src/shaders/smoke-ring-example.tsx b/docs/src/app/smoke-ring/page.tsx similarity index 67% rename from example/src/shaders/smoke-ring-example.tsx rename to docs/src/app/smoke-ring/page.tsx index 7cbfad8..229ac11 100644 --- a/example/src/shaders/smoke-ring-example.tsx +++ b/docs/src/app/smoke-ring/page.tsx @@ -1,23 +1,26 @@ +'use client'; + import { SmokeRing, type SmokeRingParams, smokeRingPresets } from '@paper-design/shaders-react'; import { useControls, button, folder } from 'leva'; +import Link from 'next/link'; import { useEffect } from 'react'; /** * You can copy/paste this example to use SmokeRing in your app */ -const SmokeRingExample = () => { - return ( - - ); -}; +// const SmokeRingExample = () => { +// return ( +// +// ); +// }; /** * This example has controls added so you can play with settings in the example app @@ -25,7 +28,7 @@ const SmokeRingExample = () => { const defaults = smokeRingPresets[0].params; -export const SmokeRingWithControls = () => { +const SmokeRingWithControls = () => { const [params, setParams] = useControls(() => { const presets: SmokeRingParams = Object.fromEntries( smokeRingPresets.map((preset) => [preset.name, button(() => setParams(preset.params))]) @@ -52,5 +55,14 @@ export const SmokeRingWithControls = () => { setParams(defaults); }, []); - return ; + return ( + <> + + + + + + ); }; + +export default SmokeRingWithControls; diff --git a/example/src/shaders/stepped-simplex-noise-example.tsx b/docs/src/app/stepped-simplex-noise/page.tsx similarity index 67% rename from example/src/shaders/stepped-simplex-noise-example.tsx rename to docs/src/app/stepped-simplex-noise/page.tsx index 4b45e14..7b523f7 100644 --- a/example/src/shaders/stepped-simplex-noise-example.tsx +++ b/docs/src/app/stepped-simplex-noise/page.tsx @@ -1,3 +1,5 @@ +'use client'; + import { SteppedSimplexNoise, type SteppedSimplexNoiseParams, @@ -5,26 +7,27 @@ import { } from '@paper-design/shaders-react'; import { useControls, button, folder } from 'leva'; +import Link from 'next/link'; import { useEffect } from 'react'; /** * You can copy/paste this example to use SteppedSimplexNoise in your app */ -const SteppedSimplexNoiseExample = () => { - return ( - - ); -}; +// const SteppedSimplexNoiseExample = () => { +// return ( +// +// ); +// }; /** * This example has controls added so you can play with settings in the example app @@ -32,7 +35,7 @@ const SteppedSimplexNoiseExample = () => { const defaults = steppedSimplexNoisePresets[0].params; -export const SteppedSimplexNoiseWithControls = () => { +const SteppedSimplexNoiseWithControls = () => { const [params, setParams] = useControls(() => { const presets: SteppedSimplexNoiseParams = Object.fromEntries( steppedSimplexNoisePresets.map((preset) => [preset.name, button(() => setParams(preset.params))]) @@ -61,5 +64,14 @@ export const SteppedSimplexNoiseWithControls = () => { setParams(defaults); }, []); - return ; + return ( + <> + + + + + + ); }; + +export default SteppedSimplexNoiseWithControls; diff --git a/example/vite.config.js b/docs/vite.config.js-old similarity index 100% rename from example/vite.config.js rename to docs/vite.config.js-old diff --git a/example/.gitignore b/example/.gitignore deleted file mode 100644 index a547bf3..0000000 --- a/example/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/example/README.md b/example/README.md deleted file mode 100644 index f768e33..0000000 --- a/example/README.md +++ /dev/null @@ -1,8 +0,0 @@ -# React + Vite - -This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. - -Currently, two official plugins are available: - -- [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh -- [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh diff --git a/example/index.html b/example/index.html deleted file mode 100644 index 6b4c6e9..0000000 --- a/example/index.html +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - Example – Paper Shaders - - - - - -
- - - diff --git a/example/package.json b/example/package.json deleted file mode 100644 index 272a9a8..0000000 --- a/example/package.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "example", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "vite build", - "lint": "eslint .", - "preview": "vite preview" - }, - "dependencies": { - "@paper-design/shaders-react": "workspace:*", - "leva": "0.9.34", - "react": "^18.3.1", - "react-dom": "^18.3.1", - "wouter": "^3.3.5" - }, - "devDependencies": { - "@eslint/js": "^9.13.0", - "@types/react": "^18.3.12", - "@types/react-dom": "^18.3.1", - "@vitejs/plugin-react": "^4.3.3", - "eslint": "^9.13.0", - "eslint-plugin-react": "^7.37.2", - "eslint-plugin-react-hooks": "^5.0.0", - "eslint-plugin-react-refresh": "^0.4.14", - "globals": "^15.11.0", - "vite": "^5.4.10" - } -} diff --git a/example/src/App.jsx b/example/src/App.jsx deleted file mode 100644 index c16b19d..0000000 --- a/example/src/App.jsx +++ /dev/null @@ -1,49 +0,0 @@ -import { Router, Switch, Route, Link } from 'wouter'; -import { DotsOrbitWithControls } from './shaders/dots-orbit-example'; -import { MeshGradientWithControls } from './shaders/mesh-gradient-example'; -import { GrainCloudsWithControls } from './shaders/grain-clouds-example'; -import { NeuroNoiseWithControls } from './shaders/neuro-noise-example'; -import { SmokeRingWithControls } from './shaders/smoke-ring-example'; -import { SteppedSimplexNoiseWithControls } from './shaders/stepped-simplex-noise-example'; - -const App = () => { - return ( - - - -

Paper Shaders examples

- -
    -
  • - Dots Pattern: Orbit -
  • -
  • - Grain Clouds -
  • -
  • - Mesh Gradient -
  • -
  • - Neuro Noise -
  • -
  • - Smoke Ring -
  • -
  • - Stepped Simplex Noise -
  • -
-
- - - - - - - -
-
- ); -}; - -export default App; diff --git a/example/src/main.jsx b/example/src/main.jsx deleted file mode 100644 index c98ca90..0000000 --- a/example/src/main.jsx +++ /dev/null @@ -1,10 +0,0 @@ -import { StrictMode } from 'react'; -import { createRoot } from 'react-dom/client'; -import './styles.css'; -import App from './App.jsx'; - -createRoot(document.getElementById('root')).render( - - - -); diff --git a/example/src/styles.css b/example/src/styles.css deleted file mode 100644 index 0fde604..0000000 --- a/example/src/styles.css +++ /dev/null @@ -1,7 +0,0 @@ -#leva__root button { - background-color: var(--leva-colors-elevation3); - - &:hover { - box-shadow: inset 0 0 0 var(--leva-borderWidths-hover) var(--leva-colors-accent1); - } -} diff --git a/example/tsconfig.json b/example/tsconfig.json deleted file mode 100644 index 2bd8d98..0000000 --- a/example/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "compilerOptions": { - "target": "ES2020", - "useDefineForClassFields": true, - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "strict": true, - "noUnusedLocals": false, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src"] -} diff --git a/package.json b/package.json index 4147464..23ae84a 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,6 @@ "license": "MIT", "workspaces": [ "docs", - "example", "packages/shaders", "packages/shaders-react" ], @@ -13,7 +12,7 @@ "build": "bun run build.js", "publish-all": "run-s clean build && bun run publish.js", "publish-all-test": "run-s clean build && bun run publish.js --dry-run", - "dev:example": "bun run --filter example dev", + "dev:docs": "bun run --filter docs dev", "dev:packages": "nodemon --watch 'packages/*/src/**/*' --ext ts,tsx --exec 'bun run build' --on-change-only", "dev": "run-s clean build && run-p dev:*", "clean": "rimraf packages/*/dist"