├── .eslintignore
├── .eslintrc.json
├── .gitignore
├── .prettierrc.js
├── README.md
├── global.d.ts
├── next-env.d.ts
├── next.config.js
├── package-lock.json
├── package.json
├── public
├── favicon.ico
├── fonts
│ ├── 1.woff2
│ ├── openSans400.woff
│ └── openSans800.woff2
└── vercel.svg
├── src
├── assets
│ └── tileImages
│ │ ├── 1.jpg
│ │ ├── 10.jpg
│ │ ├── 11.jpg
│ │ ├── 12.jpg
│ │ ├── 13.jpg
│ │ ├── 14.jpg
│ │ ├── 15.jpg
│ │ ├── 16.jpg
│ │ ├── 17.jpg
│ │ ├── 18.jpg
│ │ ├── 19.jpg
│ │ ├── 2.jpg
│ │ ├── 20.jpg
│ │ ├── 21.jpg
│ │ ├── 22.jpg
│ │ ├── 23.jpg
│ │ ├── 24.jpg
│ │ ├── 25.jpg
│ │ ├── 26.jpg
│ │ ├── 27.jpg
│ │ ├── 28.jpg
│ │ ├── 29.jpg
│ │ ├── 3.jpg
│ │ ├── 30.jpg
│ │ ├── 31.jpg
│ │ ├── 32.jpg
│ │ ├── 33.jpg
│ │ ├── 34.jpg
│ │ ├── 35.jpg
│ │ ├── 36.jpg
│ │ ├── 37.jpg
│ │ ├── 38.jpg
│ │ ├── 39.jpg
│ │ ├── 4.jpg
│ │ ├── 40.jpg
│ │ ├── 41.jpg
│ │ ├── 42.jpg
│ │ ├── 43.jpg
│ │ ├── 44.jpg
│ │ ├── 45.jpg
│ │ ├── 46.jpg
│ │ ├── 47.jpg
│ │ ├── 48.jpg
│ │ ├── 49.jpg
│ │ ├── 5.jpg
│ │ ├── 50.jpg
│ │ ├── 51.jpg
│ │ ├── 52.jpg
│ │ ├── 53.jpg
│ │ ├── 54.jpg
│ │ ├── 55.jpg
│ │ ├── 56.jpg
│ │ ├── 57.jpg
│ │ ├── 58.jpg
│ │ ├── 59.jpg
│ │ ├── 6.jpg
│ │ ├── 60.jpg
│ │ ├── 61.jpg
│ │ ├── 62.jpg
│ │ ├── 63.jpg
│ │ ├── 64.jpg
│ │ ├── 65.jpg
│ │ ├── 66.jpg
│ │ ├── 67.jpg
│ │ ├── 68.jpg
│ │ ├── 69.jpg
│ │ ├── 7.jpg
│ │ ├── 70.jpg
│ │ ├── 71.jpg
│ │ ├── 72.jpg
│ │ ├── 8.jpg
│ │ └── 9.jpg
├── components
│ ├── Animations
│ │ └── framerTransitions.ts
│ ├── CodeViewer
│ │ ├── CodeViewer.module.scss
│ │ └── CodeViewer.tsx
│ ├── Layout
│ │ ├── Layout.module.scss
│ │ └── Layout.tsx
│ ├── LinkHandler
│ │ └── LinkHandler.tsx
│ ├── PreloadImage
│ │ ├── PreloadImage.module.scss
│ │ └── PreloadImage.tsx
│ ├── ShaderTile
│ │ ├── ShaderTile.module.scss
│ │ └── ShaderTile.tsx
│ └── TilesRenderer
│ │ ├── TilesRenderer.module.scss
│ │ └── TilesRenderer.tsx
├── containers
│ ├── IndexPage
│ │ ├── IndexPage.module.scss
│ │ └── IndexPage.tsx
│ └── Shaders
│ │ ├── 1
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 2
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 3
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 4
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 5
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 6
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 7
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 8
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 9
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 10
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 11
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 12
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 13
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 14
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 15
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 16
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 17
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 18
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 19
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 20
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 21
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 22
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 23
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 24
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 25
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 26
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 27
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 28
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 29
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 30
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 31
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 32
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 33
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 34
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 35
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 36
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 37
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 38
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 39
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 40
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 41
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 42
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 43
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 44
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 45
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 46
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 47
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 48
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 49
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 50
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 51
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 52
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 53
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 54
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 55
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 56
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 57
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 58
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 59
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 60
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 61
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 62
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 63
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 64
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 65
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 66
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 67
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 68
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 69
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 70
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ ├── 71
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
│ │ └── 72
│ │ ├── data.ts
│ │ ├── fragment.glsl
│ │ └── vertex.glsl
├── hooks
│ ├── useElementSize.ts
│ └── useMediaPreload.ts
├── pages
│ ├── 404.tsx
│ ├── _app.tsx
│ ├── index.tsx
│ └── shaders
│ │ ├── 1.tsx
│ │ ├── 10.tsx
│ │ ├── 11.tsx
│ │ ├── 12.tsx
│ │ ├── 13.tsx
│ │ ├── 14.tsx
│ │ ├── 15.tsx
│ │ ├── 16.tsx
│ │ ├── 17.tsx
│ │ ├── 18.tsx
│ │ ├── 19.tsx
│ │ ├── 2.tsx
│ │ ├── 20.tsx
│ │ ├── 21.tsx
│ │ ├── 22.tsx
│ │ ├── 23.tsx
│ │ ├── 24.tsx
│ │ ├── 25.tsx
│ │ ├── 26.tsx
│ │ ├── 27.tsx
│ │ ├── 28.tsx
│ │ ├── 29.tsx
│ │ ├── 3.tsx
│ │ ├── 30.tsx
│ │ ├── 31.tsx
│ │ ├── 32.tsx
│ │ ├── 33.tsx
│ │ ├── 34.tsx
│ │ ├── 35.tsx
│ │ ├── 36.tsx
│ │ ├── 37.tsx
│ │ ├── 38.tsx
│ │ ├── 39.tsx
│ │ ├── 4.tsx
│ │ ├── 40.tsx
│ │ ├── 41.tsx
│ │ ├── 42.tsx
│ │ ├── 43.tsx
│ │ ├── 44.tsx
│ │ ├── 45.tsx
│ │ ├── 46.tsx
│ │ ├── 47.tsx
│ │ ├── 48.tsx
│ │ ├── 49.tsx
│ │ ├── 5.tsx
│ │ ├── 50.tsx
│ │ ├── 51.tsx
│ │ ├── 52.tsx
│ │ ├── 53.tsx
│ │ ├── 54.tsx
│ │ ├── 55.tsx
│ │ ├── 56.tsx
│ │ ├── 57.tsx
│ │ ├── 58.tsx
│ │ ├── 59.tsx
│ │ ├── 6.tsx
│ │ ├── 60.tsx
│ │ ├── 61.tsx
│ │ ├── 62.tsx
│ │ ├── 63.tsx
│ │ ├── 64.tsx
│ │ ├── 65.tsx
│ │ ├── 66.tsx
│ │ ├── 67.tsx
│ │ ├── 68.tsx
│ │ ├── 69.tsx
│ │ ├── 7.tsx
│ │ ├── 70.tsx
│ │ ├── 71.tsx
│ │ ├── 72.tsx
│ │ ├── 8.tsx
│ │ └── 9.tsx
├── seo
│ ├── GoogleAnalytics
│ │ └── GoogleAnalytics.tsx
│ └── Head
│ │ └── Head.tsx
├── styles
│ ├── base
│ │ ├── fonts.scss
│ │ ├── global.scss
│ │ └── reset.scss
│ ├── index.scss
│ └── utils
│ │ └── variables.scss
└── utils
│ ├── functions
│ └── isTouchDevice.ts
│ ├── globalState.ts
│ ├── shaderPage
│ ├── Coords2D.ts
│ ├── Experience.ts
│ ├── MouseMove.ts
│ ├── ShaderPage.module.scss
│ └── ShaderPage.tsx
│ ├── sharedStyles.module.scss
│ └── sharedTypes.ts
└── tsconfig.json
/.eslintignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": [
3 | "eslint:recommended",
4 | "prettier",
5 | "next/core-web-vitals",
6 | "plugin:react-hooks/recommended"
7 | ],
8 | "plugins": ["prettier"],
9 | "rules": {
10 | "prettier/prettier": "error",
11 | "@typescript-eslint/no-unused-vars": "off",
12 | "react/react-in-jsx-scope": "off",
13 | "@next/next/no-document-import-in-page": "off",
14 | "@typescript-eslint/no-empty-interface": "off",
15 | "react/prop-types": 0
16 | },
17 | "settings": {
18 | "react": {
19 | "version": "detect"
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | /node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # next.js
12 | /.next/
13 | /out/
14 |
15 | # production
16 | /build
17 |
18 | # misc
19 | .DS_Store
20 | *.pem
21 |
22 | # debug
23 | npm-debug.log*
24 | yarn-debug.log*
25 | yarn-error.log*
26 |
27 | # local env files
28 | .env.local
29 | .env.development.local
30 | .env.test.local
31 | .env.production.local
32 |
33 | # vercel
34 | .vercel
35 |
36 | # typescript
37 | *.tsbuildinfo
38 |
--------------------------------------------------------------------------------
/.prettierrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | ...require('./node_modules/gts/.prettierrc.json'),
3 | bracketSpacing: true,
4 | endOfLine: 'auto',
5 | printWidth: 100,
6 | };
7 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ## Getting Started
2 |
3 | First install dependencies with:
4 |
5 | ```bash
6 | npm install
7 | # or
8 | yarn install
9 | ```
10 |
11 | Then, run the development server:
12 |
13 | ```bash
14 | npm run dev
15 | # or
16 | yarn dev
17 | ```
18 |
19 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
20 |
--------------------------------------------------------------------------------
/global.d.ts:
--------------------------------------------------------------------------------
1 | declare module '*.glsl' {
2 | const value: string;
3 | export default value;
4 | }
5 |
6 | declare module '*.glb' {
7 | const value: string;
8 | export default value;
9 | }
10 |
--------------------------------------------------------------------------------
/next-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 | ///
3 |
4 | // NOTE: This file should not be edited
5 | // see https://nextjs.org/docs/basic-features/typescript for more information.
6 |
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('next').NextConfig} */
2 | module.exports = {
3 | reactStrictMode: true,
4 | webpack: config => {
5 | config.module.rules.push({
6 | test: /\.(glsl|vs|fs|vert|frag)$/,
7 | exclude: /node_modules/,
8 | use: ['raw-loader', 'glslify-loader'],
9 | });
10 |
11 | config.module.rules.push({
12 | test: /\.(glb|gltf)$/,
13 | use: {
14 | loader: 'file-loader',
15 | options: {
16 | publicPath: '/_next/static/images',
17 | outputPath: 'static/images/',
18 | },
19 | },
20 | });
21 |
22 | return config;
23 | },
24 | };
25 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "app",
3 | "version": "1.0.0",
4 | "private": true,
5 | "scripts": {
6 | "dev": "next dev",
7 | "build": "next build",
8 | "start": "next start",
9 | "lint": "next lint"
10 | },
11 | "dependencies": {
12 | "@tweenjs/tween.js": "^18.6.4",
13 | "clsx": "^1.1.1",
14 | "focus-visible": "^5.2.0",
15 | "fontfaceobserver": "^2.1.0",
16 | "framer-motion": "^6.2.3",
17 | "glsl-noise": "^0.0.0",
18 | "glslify-loader": "^2.0.0",
19 | "next": "12.0.7",
20 | "raw-loader": "^4.0.2",
21 | "react": "17.0.2",
22 | "react-dom": "17.0.2",
23 | "react-syntax-highlighter": "^15.4.5",
24 | "three": "^0.136.0",
25 | "three-stdlib": "^2.6.2",
26 | "troika-three-text": "^0.45.0"
27 | },
28 | "devDependencies": {
29 | "@types/fontfaceobserver": "^2.1.0",
30 | "@types/lodash": "^4.14.178",
31 | "@types/node": "17.0.5",
32 | "@types/react": "17.0.38",
33 | "@types/react-syntax-highlighter": "^13.5.2",
34 | "@types/three": "^0.135.0",
35 | "eslint": "8.5.0",
36 | "eslint-config-next": "12.0.7",
37 | "eslint-plugin-react-hooks": "^4.3.0",
38 | "gts": "^3.1.0",
39 | "prettier": "^2.5.1",
40 | "sass": "^1.45.1",
41 | "typescript": "4.5.4"
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/public/favicon.ico
--------------------------------------------------------------------------------
/public/fonts/1.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/public/fonts/1.woff2
--------------------------------------------------------------------------------
/public/fonts/openSans400.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/public/fonts/openSans400.woff
--------------------------------------------------------------------------------
/public/fonts/openSans800.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/public/fonts/openSans800.woff2
--------------------------------------------------------------------------------
/public/vercel.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/src/assets/tileImages/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/1.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/10.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/11.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/12.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/12.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/13.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/13.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/14.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/14.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/15.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/15.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/16.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/16.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/17.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/17.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/18.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/18.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/19.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/19.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/2.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/20.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/20.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/21.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/21.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/22.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/22.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/23.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/23.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/24.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/24.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/25.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/25.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/26.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/26.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/27.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/27.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/28.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/28.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/29.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/29.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/3.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/30.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/30.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/31.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/31.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/32.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/32.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/33.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/33.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/34.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/34.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/35.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/35.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/36.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/36.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/37.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/37.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/38.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/38.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/39.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/39.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/4.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/40.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/40.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/41.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/41.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/42.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/42.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/43.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/43.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/44.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/44.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/45.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/45.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/46.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/46.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/47.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/47.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/48.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/48.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/49.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/49.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/5.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/50.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/50.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/51.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/51.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/52.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/52.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/53.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/53.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/54.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/54.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/55.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/55.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/56.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/56.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/57.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/57.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/58.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/58.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/59.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/59.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/6.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/60.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/60.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/61.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/61.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/62.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/62.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/63.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/63.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/64.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/64.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/65.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/65.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/66.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/66.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/67.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/67.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/68.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/68.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/69.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/69.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/7.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/70.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/70.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/71.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/71.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/72.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/72.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/8.jpg
--------------------------------------------------------------------------------
/src/assets/tileImages/9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/michalzalobny/book-of-shaders-playground/bfac3532ac8ca1e082f04165e608cf4781cb7e64/src/assets/tileImages/9.jpg
--------------------------------------------------------------------------------
/src/components/Animations/framerTransitions.ts:
--------------------------------------------------------------------------------
1 | import { Transition } from 'framer-motion';
2 |
3 | export const tween: Transition = {
4 | type: 'tween',
5 | ease: 'easeInOut',
6 | duration: 0.4,
7 | };
8 |
9 | export const springSlow: Transition = {
10 | type: 'spring',
11 | stiffness: 350,
12 | damping: 80,
13 | mass: 5,
14 | restDelta: 0.001,
15 | restSpeed: 0.001,
16 | };
17 |
18 | export const springMedium: Transition = {
19 | type: 'spring',
20 | stiffness: 100,
21 | damping: 20,
22 | mass: 1,
23 | restDelta: 0.001,
24 | restSpeed: 0.001,
25 | };
26 |
27 | export const springQuick: Transition = {
28 | type: 'spring',
29 | stiffness: 150,
30 | damping: 15,
31 | restDelta: 0.01,
32 | restSpeed: 0.01,
33 | };
34 |
--------------------------------------------------------------------------------
/src/components/CodeViewer/CodeViewer.module.scss:
--------------------------------------------------------------------------------
1 | .codeContainer {
2 | position: absolute;
3 | top: 0;
4 | left: 0;
5 | width: 100%;
6 | opacity: 1;
7 |
8 | &Hidden {
9 | pointer-events: none;
10 | user-select: none;
11 | }
12 |
13 | pre {
14 | overflow: auto;
15 | padding: 40px !important;
16 | position: relative;
17 | line-height: 1.5;
18 | font-size: 14px;
19 | background: transparent !important;
20 | max-height: 65vh;
21 |
22 | @media screen and (min-width: 767px) {
23 | max-height: 70vh;
24 | }
25 | }
26 | }
27 |
28 | .codeContainerWrapper {
29 | border-radius: 10px;
30 | background-color: rgba(0, 0, 0, 0.55);
31 | box-shadow: 0 0 15px rgba(0, 0, 0, 0.2);
32 | transition: opacity 0.5s cubic-bezier(0.24, 0.05, 0.16, 0.97),
33 | transform 0.5s cubic-bezier(0.36, 0.02, 0.16, 0.97);
34 |
35 | transform: translateY(0);
36 |
37 | &Hidden {
38 | pointer-events: none;
39 | user-select: none;
40 | opacity: 0;
41 | transform: translateY(50px);
42 | }
43 | }
44 |
45 | .background {
46 | position: fixed;
47 | width: 100%;
48 | height: 100%;
49 | top: 0;
50 | left: 0;
51 | z-index: 15;
52 | background-color: rgba(0, 0, 0, 0.7);
53 | backdrop-filter: saturate(180%) blur(8px);
54 |
55 | pointer-events: none;
56 | user-select: none;
57 |
58 | &Opened {
59 | pointer-events: initial;
60 | user-select: initial;
61 | }
62 | }
63 |
64 | .codeBtnWrapper {
65 | cursor: pointer;
66 | position: fixed;
67 | z-index: 5;
68 | bottom: 20px;
69 | right: 40px;
70 | display: flex;
71 | mix-blend-mode: difference;
72 |
73 | @media screen and (min-width: 767px) {
74 | right: initial;
75 | left: 50%;
76 | transform: translateX(-50%);
77 | }
78 | }
79 |
80 | .buttonsWrapper {
81 | display: flex;
82 | position: absolute;
83 | z-index: 1;
84 | bottom: 0;
85 | left: 0;
86 | margin-bottom: 25px;
87 |
88 | &Spacer {
89 | width: 20px;
90 | }
91 | }
92 |
93 | .containersWrapper {
94 | z-index: 20;
95 | width: 85%;
96 | position: fixed;
97 | top: 110px;
98 | left: 50%;
99 | transform: translateX(-50%);
100 | opacity: 1;
101 |
102 | pointer-events: none;
103 | user-select: none;
104 |
105 | &Opened {
106 | pointer-events: initial;
107 | user-select: initial;
108 | }
109 |
110 | @media screen and (min-width: 767px) {
111 | top: 120px;
112 | width: 100rem;
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/src/components/Layout/Layout.module.scss:
--------------------------------------------------------------------------------
1 | .readyWrapper {
2 | position: fixed;
3 | z-index: 50;
4 | top: 0;
5 | left: 0;
6 | width: 100%;
7 | height: 100%;
8 | background-color: var(--white);
9 | opacity: 1;
10 | transition: opacity 0.9s;
11 | transition-delay: 0.3s;
12 | }
13 |
14 | //Check if body has given class
15 | :global(body.isReady) .readyWrapper {
16 | opacity: 0;
17 | user-select: none;
18 | pointer-events: none;
19 | }
20 |
21 | .codeWrapper {
22 | position: fixed;
23 | z-index: 35;
24 | top: 20px;
25 | right: 40px;
26 | display: flex;
27 | mix-blend-mode: difference;
28 | }
29 |
30 | .authorWrapper {
31 | display: none;
32 |
33 | @media screen and (min-width: 767px) {
34 | display: initial;
35 | position: fixed;
36 | z-index: 5;
37 | bottom: 20px;
38 | right: 40px;
39 | display: flex;
40 | mix-blend-mode: difference;
41 | }
42 | }
43 |
44 | .contactSpacer {
45 | width: 8px;
46 | }
47 |
48 | .appBackground {
49 | position: fixed;
50 | z-index: -1;
51 | top: 0;
52 | left: 0;
53 | width: 100%;
54 | height: 100%;
55 | background-color: var(--white);
56 | user-select: none;
57 | pointer-events: none;
58 | }
59 |
--------------------------------------------------------------------------------
/src/components/Layout/Layout.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from 'react';
2 | import clsx from 'clsx';
3 |
4 | import { LinkHandler } from 'components/LinkHandler/LinkHandler';
5 | import { useRouter } from 'next/router';
6 | import sharedStyles from 'utils/sharedStyles.module.scss';
7 |
8 | import styles from './Layout.module.scss';
9 |
10 | interface Props {
11 | isReady: boolean;
12 | children: React.ReactChild;
13 | }
14 |
15 | export const Layout = (props: Props) => {
16 | const { children, isReady } = props;
17 |
18 | const router = useRouter();
19 |
20 | useEffect(() => {
21 | if (isReady && !document.body.classList.contains('isReady')) {
22 | document.body.classList.add('isReady');
23 | }
24 |
25 | return () => {
26 | document.body.classList.remove('isReady');
27 | };
28 | }, [isReady]);
29 |
30 | return (
31 | <>
32 |
33 |
34 |
35 | Shaders Playground by
36 |
37 |
38 |
41 | Michal Zalobny
42 |
43 |
44 |
45 |
46 | {router.pathname === '/' && (
47 |
48 |
52 | GitHub Repo
53 |
54 |
55 | )}
56 | {children}
57 | >
58 | );
59 | };
60 |
--------------------------------------------------------------------------------
/src/components/LinkHandler/LinkHandler.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import Link from 'next/link';
3 |
4 | interface Props {
5 | elHref?: string;
6 | isExternal?: boolean;
7 | onClickFn?: () => void;
8 | children: React.ReactNode;
9 | }
10 |
11 | export const LinkHandler = (props: Props) => {
12 | const { elHref, children, isExternal, onClickFn } = props;
13 |
14 | return (
15 | <>
16 | {isExternal ? (
17 |
18 | {children}
19 |
20 | ) : onClickFn ? (
21 |
24 | ) : (
25 | elHref && (
26 |
27 | {children}
28 |
29 | )
30 | )}
31 | >
32 | );
33 | };
34 |
--------------------------------------------------------------------------------
/src/components/PreloadImage/PreloadImage.module.scss:
--------------------------------------------------------------------------------
1 | .image {
2 | position: absolute;
3 | top: 0;
4 | left: 0;
5 | width: 100%;
6 | height: 100%;
7 | object-fit: cover;
8 | opacity: 0;
9 | transition: opacity 0.45s;
10 | user-select: none;
11 | pointer-events: none;
12 |
13 | &Loaded {
14 | opacity: 1;
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/src/components/PreloadImage/PreloadImage.tsx:
--------------------------------------------------------------------------------
1 | /* eslint-disable @next/next/no-img-element */
2 | import React from 'react';
3 | import clsx from 'clsx';
4 |
5 | import { useMediaPreload } from 'hooks/useMediaPreload';
6 |
7 | import styles from './PreloadImage.module.scss';
8 |
9 | interface Props {
10 | imageSrc: string;
11 | alt: string;
12 | }
13 |
14 | export const PreloadImage = (props: Props) => {
15 | const { alt, imageSrc } = props;
16 |
17 | const { isLoaded } = useMediaPreload({ isImage: true, mediaSrc: imageSrc });
18 |
19 | return (
20 | <>
21 |
26 | >
27 | );
28 | };
29 |
--------------------------------------------------------------------------------
/src/components/ShaderTile/ShaderTile.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import clsx from 'clsx';
3 |
4 | import { LinkHandler } from 'components/LinkHandler/LinkHandler';
5 | import { PreloadImage } from 'components/PreloadImage/PreloadImage';
6 |
7 | import styles from './ShaderTile.module.scss';
8 |
9 | interface Props {
10 | imageSrc: string;
11 | number: string;
12 | elHref: string;
13 | isPro?: boolean;
14 | isSpatial?: boolean;
15 | isMotion?: boolean;
16 | }
17 |
18 | export const ShaderTile = (props: Props) => {
19 | const { isSpatial, isMotion, isPro, elHref, imageSrc, number } = props;
20 |
21 | return (
22 | <>
23 |
24 |
25 |
26 | {isSpatial &&
3D
}
27 | {isPro &&
Pro
}
28 |
29 | {isMotion &&
Motion
}
30 |
31 |
32 | {number}
33 |
34 |
42 |
43 |
44 | >
45 | );
46 | };
47 |
--------------------------------------------------------------------------------
/src/components/TilesRenderer/TilesRenderer.module.scss:
--------------------------------------------------------------------------------
1 | .tilesWrapper {
2 | margin-top: 4rem;
3 | display: grid;
4 | grid-template-columns: 1fr 1fr;
5 | grid-gap: 2rem;
6 | margin-bottom: 8rem;
7 |
8 | @media screen and (min-width: 767px) {
9 | grid-gap: 2rem;
10 | grid-template-columns: 1fr 1fr 1fr;
11 | margin-bottom: 15rem;
12 | }
13 |
14 | @media screen and (min-width: 1024px) {
15 | grid-gap: 4rem;
16 | grid-template-columns: 1fr 1fr 1fr 1fr;
17 | }
18 | }
19 |
20 | .filterText {
21 | display: none;
22 |
23 | @media screen and (min-width: 767px) {
24 | display: initial;
25 | }
26 | }
27 |
28 | .filterWrapper {
29 | margin-top: 2rem;
30 | display: flex;
31 | align-items: center;
32 | }
33 |
34 | .filterBtn {
35 | padding: 6px 18px;
36 | cursor: pointer;
37 |
38 | &:not(:first-child) {
39 | margin-left: 10px;
40 | }
41 | }
42 |
43 | .floatingBorder {
44 | position: absolute;
45 | top: 0;
46 | left: 0;
47 | height: 100%;
48 | width: 90px;
49 | border: 2px solid var(--black);
50 | border-radius: 15px;
51 | user-select: none;
52 | pointer-events: none;
53 | transition: width 0.75s cubic-bezier(0.64, 0.02, 0.16, 0.97),
54 | transform 0.75s cubic-bezier(0.64, 0.02, 0.16, 0.97);
55 | }
56 |
57 | .buttonsWrapper {
58 | display: flex;
59 | align-items: center;
60 | position: relative;
61 |
62 | @media screen and (min-width: 767px) {
63 | margin-left: 10px;
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/src/containers/IndexPage/IndexPage.module.scss:
--------------------------------------------------------------------------------
1 | .wrapper {
2 | width: 75%;
3 | margin: 0 auto;
4 |
5 | @media screen and (min-width: 767px) {
6 | width: 100rem;
7 | }
8 | }
9 |
10 | .title {
11 | font-weight: 800;
12 | font-size: 3.5rem;
13 | color: var(--black);
14 | margin-right: 30px;
15 | }
16 |
17 | .text {
18 | font-size: 13px;
19 | color: var(--black);
20 | white-space: nowrap;
21 | margin-right: 10px;
22 | }
23 |
24 | .titleWrapper {
25 | display: flex;
26 | align-items: center;
27 | flex-wrap: wrap;
28 | }
29 |
30 | .bookInfoWrapper {
31 | display: flex;
32 | align-items: center;
33 | margin-top: 2.5rem;
34 |
35 | @media screen and (min-width: 767px) {
36 | margin-top: 0;
37 | }
38 | }
39 |
40 | .header {
41 | margin-top: 8rem;
42 | display: flex;
43 | flex-direction: column;
44 |
45 | @media screen and (min-width: 767px) {
46 | margin-top: 15rem;
47 | }
48 | }
49 |
50 | .contactWrapper {
51 | display: flex;
52 | align-items: center;
53 | margin-top: 2rem;
54 | }
55 |
56 | .spacer {
57 | margin: 0 8px;
58 | &:before {
59 | content: '/';
60 | font-size: 15px;
61 | color: var(--black);
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/src/containers/IndexPage/IndexPage.tsx:
--------------------------------------------------------------------------------
1 | import React, { useEffect } from 'react';
2 | import clsx from 'clsx';
3 |
4 | import { Head } from 'seo/Head/Head';
5 | import { LinkHandler } from 'components/LinkHandler/LinkHandler';
6 | import { TilesRenderer } from 'components/TilesRenderer/TilesRenderer';
7 | import sharedStyles from 'utils/sharedStyles.module.scss';
8 | import { globalState } from 'utils/globalState';
9 |
10 | import styles from './IndexPage.module.scss';
11 |
12 | export default function IndexPage() {
13 | //Marks that the user has visited landing, and can use the back button on the shader subpage
14 | useEffect(() => {
15 | if (globalState.hasVisitedLanding) return;
16 | globalState.hasVisitedLanding = true;
17 | }, []);
18 |
19 | return (
20 | <>
21 |