├── .gitignore ├── CONTRIBUTING.md ├── LICENSE.md ├── README.md ├── art ├── ParanormalCoder │ ├── EmojiArt.html │ ├── PerryThePlatypusArt.html │ └── userinfo.json ├── Pranav7651 │ └── bouncingBall.html ├── f4rukyldrm │ ├── terminal.html │ └── userinfo.json ├── fredoist │ ├── ghost.html │ └── userinfo.json ├── manohar │ └── sphare.html ├── ryangolsing │ ├── cup.html │ └── userinfo.json └── vulcanwm │ ├── cloud.html │ ├── house.html │ ├── mask.html │ ├── soap.html │ └── userinfo.json ├── components ├── layout.jsx └── layout.module.css ├── global_art.js ├── next.config.js ├── package-lock.json ├── package.json ├── pages ├── _app.js ├── about.jsx ├── art │ └── [username] │ │ └── [artwork].jsx ├── contributors.jsx ├── embed │ └── [username] │ │ └── [artwork].jsx ├── index.js ├── search.js └── user │ └── [username].jsx ├── public ├── favicon.ico └── profile.jpg └── styles ├── artwork.module.css └── global.css /.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 | 30 | # vercel 31 | .vercel 32 | 33 | # typescript 34 | *.tsbuildinfo 35 | next-env.d.ts 36 | 37 | .env -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | Created some really cool CSS art and want to share them to a community? 2 | 3 | Well you're in the right place! 4 | 5 | Follow these 4 simple steps to showcase your art to the community: 6 | 7 | ## 1. Creating the File 8 | add file button 9 |
    10 |
  1. Press the Add file button and then click Create new file.
  2. 11 |
  3. Name the file /art/[your_username]/[artname].html. An example of the correct file name format would be like the file name in the picture below.
  4. 12 |
13 | File Name 14 |
15 | 16 | ## 2. Adding the HTML/CSS Code 17 | In the space provided, enter your HTML/CSS art code. 18 | 19 | Remember: 20 | - It must consist of HTML and CSS only. **No JavaScript** 21 | - You cannot use a separate CSS file. The CSS code must be embedded using a ` 106 | -------------------------------------------------------------------------------- /art/ParanormalCoder/PerryThePlatypusArt.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | 118 | -------------------------------------------------------------------------------- /art/ParanormalCoder/userinfo.json: -------------------------------------------------------------------------------- 1 | { 2 | "Website": "https://card-portfolio.paranormalcoder.repl.co/", 3 | "GitHub": "https://github.com/BusterSR", 4 | "Name": "Paranormal Coder", 5 | "Image": "https://replit.com/cdn-cgi/image/width=64,quality=80,format=auto/https://storage.googleapis.com/replit/images/1680025403532_11f70c0311a14b51e5a5f06c4004fdae.png" 6 | } 7 | -------------------------------------------------------------------------------- /art/Pranav7651/bouncingBall.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 63 | 64 | 65 | 66 |
67 |
68 |
69 |
70 | 71 | 72 | -------------------------------------------------------------------------------- /art/f4rukyldrm/terminal.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
+
4 |
faruk@ubuntu: ~
5 |
6 |
-
7 |
o
8 |
x
9 |
10 |
11 |
12 |
13 |
faruk@ubuntu : ~$
15 |
16 |
17 |
18 |
19 | -------------------------------------------------------------------------------- /art/f4rukyldrm/userinfo.json: -------------------------------------------------------------------------------- 1 | { 2 | "Website": "https://replit.com/@theguyfromdrive", 3 | "GitHub": "https://github.com/f4rukyldrm", 4 | "Name": "Faruk", 5 | "Image": "https://avatars.githubusercontent.com/u/116651925?v=4" 6 | } -------------------------------------------------------------------------------- /art/fredoist/ghost.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | 90 | -------------------------------------------------------------------------------- /art/fredoist/userinfo.json: -------------------------------------------------------------------------------- 1 | { 2 | "Website": "https://twitter.com/fredoist", 3 | "GitHub": "https://github.com/fredoist", 4 | "Name": "fredoist", 5 | "Image": "https://avatars.githubusercontent.com/u/7684330?v=4" 6 | } 7 | -------------------------------------------------------------------------------- /art/manohar/sphare.html: -------------------------------------------------------------------------------- 1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 | 215 | -------------------------------------------------------------------------------- /art/ryangolsing/cup.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 |
6 |
    7 |
  • 8 |
  • 9 |
  • 10 |
  • 11 |
  • 12 |
13 |
14 |
15 |
16 | 17 | 129 | -------------------------------------------------------------------------------- /art/ryangolsing/userinfo.json: -------------------------------------------------------------------------------- 1 | { 2 | "Website": "https://replit.com/@ryangolsing", 3 | "GitHub": "https://github.com/ryangolsing", 4 | "Name": "ryan", 5 | "Image": "https://avatars.githubusercontent.com/u/131470504?v=4" 6 | } 7 | -------------------------------------------------------------------------------- /art/vulcanwm/cloud.html: -------------------------------------------------------------------------------- 1 |
2 | 31 | -------------------------------------------------------------------------------- /art/vulcanwm/house.html: -------------------------------------------------------------------------------- 1 |
2 | 45 | -------------------------------------------------------------------------------- /art/vulcanwm/mask.html: -------------------------------------------------------------------------------- 1 |
2 | 57 | -------------------------------------------------------------------------------- /art/vulcanwm/soap.html: -------------------------------------------------------------------------------- 1 |
2 | 34 | -------------------------------------------------------------------------------- /art/vulcanwm/userinfo.json: -------------------------------------------------------------------------------- 1 | { 2 | "Website": "https://vulcanwm.is-a.dev", 3 | "GitHub": "https://github.com/VulcanWM", 4 | "Name": "Medea", 5 | "Image": "https://vulcanwm.vercel.app/logo.png" 6 | } -------------------------------------------------------------------------------- /components/layout.jsx: -------------------------------------------------------------------------------- 1 | import Head from 'next/head'; 2 | import Link from "next/link"; 3 | import styles from "./layout.module.css"; 4 | 5 | export const siteTitle = "Global CSS Art"; 6 | 7 | export default function Layout({ pageTitle, navbar, children }) { 8 | return ( 9 |
10 | 11 | 12 | 16 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | {siteTitle} - {pageTitle} 27 | 28 | {navbar != "none" ? 29 | 35 | : 36 | <>} 37 |
38 |
{children}
39 |
40 |
41 | ); 42 | } 43 | -------------------------------------------------------------------------------- /components/layout.module.css: -------------------------------------------------------------------------------- 1 | .content { 2 | padding: 16px; 3 | padding-top: 40px; 4 | } 5 | 6 | .mobilenav { 7 | background: var(--light-background); 8 | overflow: hidden; 9 | position: fixed; 10 | top: 0; 11 | width: 100%; 12 | z-index: 1; 13 | } 14 | 15 | .mobilenav a { 16 | float: left; 17 | display: block; 18 | text-align: center; 19 | padding: 14px 16px; 20 | font-size: 17px; 21 | } -------------------------------------------------------------------------------- /global_art.js: -------------------------------------------------------------------------------- 1 | const Filehound = require('filehound'); 2 | const files = Filehound.create() 3 | .paths('art') 4 | .ext('html') 5 | .findSync(); 6 | export const global_art = [] 7 | files.forEach(function (file) { 8 | global_art.push(file.replace("art/", "").replace(".html", "")); 9 | }); -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = nextConfig 7 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "global-css-art", 3 | "version": "0.1.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "global-css-art", 9 | "version": "0.1.0", 10 | "dependencies": { 11 | "@octokit/core": "^4.2.0", 12 | "filehound": "^1.17.6", 13 | "highlight.js": "^11.7.0", 14 | "next": "13.3.0", 15 | "react": "18.2.0", 16 | "react-dom": "18.2.0", 17 | "react-hook-form": "^7.43.9" 18 | } 19 | }, 20 | "node_modules/@next/env": { 21 | "version": "13.3.0", 22 | "resolved": "https://registry.npmjs.org/@next/env/-/env-13.3.0.tgz", 23 | "integrity": "sha512-AjppRV4uG3No7L1plinoTQETH+j2F10TEnrMfzbTUYwze5sBUPveeeBAPZPm8OkJZ1epq9OyYKhZrvbD6/9HCQ==" 24 | }, 25 | "node_modules/@next/swc-darwin-arm64": { 26 | "version": "13.3.0", 27 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.3.0.tgz", 28 | "integrity": "sha512-DmIQCNq6JtccLPPBzf0dgh2vzMWt5wjxbP71pCi5EWpWYE3MsP6FcRXi4MlAmFNDQOfcFXR2r7kBeG1LpZUh1w==", 29 | "cpu": [ 30 | "arm64" 31 | ], 32 | "optional": true, 33 | "os": [ 34 | "darwin" 35 | ], 36 | "engines": { 37 | "node": ">= 10" 38 | } 39 | }, 40 | "node_modules/@next/swc-darwin-x64": { 41 | "version": "13.3.0", 42 | "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.3.0.tgz", 43 | "integrity": "sha512-oQoqFa88OGgwnYlnAGHVct618FRI/749se0N3S8t9Bzdv5CRbscnO0RcX901+YnNK4Q6yeiizfgO3b7kogtsZg==", 44 | "cpu": [ 45 | "x64" 46 | ], 47 | "optional": true, 48 | "os": [ 49 | "darwin" 50 | ], 51 | "engines": { 52 | "node": ">= 10" 53 | } 54 | }, 55 | "node_modules/@next/swc-linux-arm64-gnu": { 56 | "version": "13.3.0", 57 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.3.0.tgz", 58 | "integrity": "sha512-Wzz2p/WqAJUqTVoLo6H18WMeAXo3i+9DkPDae4oQG8LMloJ3if4NEZTnOnTUlro6cq+S/W4pTGa97nWTrOjbGw==", 59 | "cpu": [ 60 | "arm64" 61 | ], 62 | "optional": true, 63 | "os": [ 64 | "linux" 65 | ], 66 | "engines": { 67 | "node": ">= 10" 68 | } 69 | }, 70 | "node_modules/@next/swc-linux-arm64-musl": { 71 | "version": "13.3.0", 72 | "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.3.0.tgz", 73 | "integrity": "sha512-xPVrIQOQo9WXJYgmoTlMnAD/HlR/1e1ZIWGbwIzEirXBVBqMARUulBEIKdC19zuvoJ477qZJgBDCKtKEykCpyQ==", 74 | "cpu": [ 75 | "arm64" 76 | ], 77 | "optional": true, 78 | "os": [ 79 | "linux" 80 | ], 81 | "engines": { 82 | "node": ">= 10" 83 | } 84 | }, 85 | "node_modules/@next/swc-linux-x64-gnu": { 86 | "version": "13.3.0", 87 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.3.0.tgz", 88 | "integrity": "sha512-jOFlpGuPD7W2tuXVJP4wt9a3cpNxWAPcloq5EfMJRiXsBBOjLVFZA7boXYxEBzSVgUiVVr1V9T0HFM7pULJ1qA==", 89 | "cpu": [ 90 | "x64" 91 | ], 92 | "optional": true, 93 | "os": [ 94 | "linux" 95 | ], 96 | "engines": { 97 | "node": ">= 10" 98 | } 99 | }, 100 | "node_modules/@next/swc-linux-x64-musl": { 101 | "version": "13.3.0", 102 | "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.3.0.tgz", 103 | "integrity": "sha512-2OwKlzaBgmuet9XYHc3KwsEilzb04F540rlRXkAcjMHL7eCxB7uZIGtsVvKOnQLvC/elrUegwSw1+5f7WmfyOw==", 104 | "cpu": [ 105 | "x64" 106 | ], 107 | "optional": true, 108 | "os": [ 109 | "linux" 110 | ], 111 | "engines": { 112 | "node": ">= 10" 113 | } 114 | }, 115 | "node_modules/@next/swc-win32-arm64-msvc": { 116 | "version": "13.3.0", 117 | "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.3.0.tgz", 118 | "integrity": "sha512-OeHiA6YEvndxT46g+rzFK/MQTfftKxJmzslERMu9LDdC6Kez0bdrgEYed5eXFK2Z1viKZJCGRlhd06rBusyztA==", 119 | "cpu": [ 120 | "arm64" 121 | ], 122 | "optional": true, 123 | "os": [ 124 | "win32" 125 | ], 126 | "engines": { 127 | "node": ">= 10" 128 | } 129 | }, 130 | "node_modules/@next/swc-win32-ia32-msvc": { 131 | "version": "13.3.0", 132 | "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.3.0.tgz", 133 | "integrity": "sha512-4aB7K9mcVK1lYEzpOpqWrXHEZympU3oK65fnNcY1Qc4HLJFLJj8AViuqQd4jjjPNuV4sl8jAwTz3gN5VNGWB7w==", 134 | "cpu": [ 135 | "ia32" 136 | ], 137 | "optional": true, 138 | "os": [ 139 | "win32" 140 | ], 141 | "engines": { 142 | "node": ">= 10" 143 | } 144 | }, 145 | "node_modules/@next/swc-win32-x64-msvc": { 146 | "version": "13.3.0", 147 | "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.3.0.tgz", 148 | "integrity": "sha512-Reer6rkLLcoOvB0dd66+Y7WrWVFH7sEEkF/4bJCIfsSKnTStTYaHtwIJAwbqnt9I392Tqvku0KkoqZOryWV9LQ==", 149 | "cpu": [ 150 | "x64" 151 | ], 152 | "optional": true, 153 | "os": [ 154 | "win32" 155 | ], 156 | "engines": { 157 | "node": ">= 10" 158 | } 159 | }, 160 | "node_modules/@octokit/auth-token": { 161 | "version": "3.0.3", 162 | "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.3.tgz", 163 | "integrity": "sha512-/aFM2M4HVDBT/jjDBa84sJniv1t9Gm/rLkalaz9htOm+L+8JMj1k9w0CkUdcxNyNxZPlTxKPVko+m1VlM58ZVA==", 164 | "dependencies": { 165 | "@octokit/types": "^9.0.0" 166 | }, 167 | "engines": { 168 | "node": ">= 14" 169 | } 170 | }, 171 | "node_modules/@octokit/core": { 172 | "version": "4.2.0", 173 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.0.tgz", 174 | "integrity": "sha512-AgvDRUg3COpR82P7PBdGZF/NNqGmtMq2NiPqeSsDIeCfYFOZ9gddqWNQHnFdEUf+YwOj4aZYmJnlPp7OXmDIDg==", 175 | "dependencies": { 176 | "@octokit/auth-token": "^3.0.0", 177 | "@octokit/graphql": "^5.0.0", 178 | "@octokit/request": "^6.0.0", 179 | "@octokit/request-error": "^3.0.0", 180 | "@octokit/types": "^9.0.0", 181 | "before-after-hook": "^2.2.0", 182 | "universal-user-agent": "^6.0.0" 183 | }, 184 | "engines": { 185 | "node": ">= 14" 186 | } 187 | }, 188 | "node_modules/@octokit/endpoint": { 189 | "version": "7.0.5", 190 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.5.tgz", 191 | "integrity": "sha512-LG4o4HMY1Xoaec87IqQ41TQ+glvIeTKqfjkCEmt5AIwDZJwQeVZFIEYXrYY6yLwK+pAScb9Gj4q+Nz2qSw1roA==", 192 | "dependencies": { 193 | "@octokit/types": "^9.0.0", 194 | "is-plain-object": "^5.0.0", 195 | "universal-user-agent": "^6.0.0" 196 | }, 197 | "engines": { 198 | "node": ">= 14" 199 | } 200 | }, 201 | "node_modules/@octokit/graphql": { 202 | "version": "5.0.5", 203 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.5.tgz", 204 | "integrity": "sha512-Qwfvh3xdqKtIznjX9lz2D458r7dJPP8l6r4GQkIdWQouZwHQK0mVT88uwiU2bdTU2OtT1uOlKpRciUWldpG0yQ==", 205 | "dependencies": { 206 | "@octokit/request": "^6.0.0", 207 | "@octokit/types": "^9.0.0", 208 | "universal-user-agent": "^6.0.0" 209 | }, 210 | "engines": { 211 | "node": ">= 14" 212 | } 213 | }, 214 | "node_modules/@octokit/openapi-types": { 215 | "version": "17.0.0", 216 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-17.0.0.tgz", 217 | "integrity": "sha512-V8BVJGN0ZmMlURF55VFHFd/L92XQQ43KvFjNmY1IYbCN3V/h/uUFV6iQi19WEHM395Nn+1qhUbViCAD/1czzog==" 218 | }, 219 | "node_modules/@octokit/request": { 220 | "version": "6.2.3", 221 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.3.tgz", 222 | "integrity": "sha512-TNAodj5yNzrrZ/VxP+H5HiYaZep0H3GU0O7PaF+fhDrt8FPrnkei9Aal/txsN/1P7V3CPiThG0tIvpPDYUsyAA==", 223 | "dependencies": { 224 | "@octokit/endpoint": "^7.0.0", 225 | "@octokit/request-error": "^3.0.0", 226 | "@octokit/types": "^9.0.0", 227 | "is-plain-object": "^5.0.0", 228 | "node-fetch": "^2.6.7", 229 | "universal-user-agent": "^6.0.0" 230 | }, 231 | "engines": { 232 | "node": ">= 14" 233 | } 234 | }, 235 | "node_modules/@octokit/request-error": { 236 | "version": "3.0.3", 237 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", 238 | "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", 239 | "dependencies": { 240 | "@octokit/types": "^9.0.0", 241 | "deprecation": "^2.0.0", 242 | "once": "^1.4.0" 243 | }, 244 | "engines": { 245 | "node": ">= 14" 246 | } 247 | }, 248 | "node_modules/@octokit/types": { 249 | "version": "9.1.2", 250 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.1.2.tgz", 251 | "integrity": "sha512-LPbJIuu1WNoRHbN4UMysEdlissRFpTCWyoKT7kHPufI8T+XX33/qilfMWJo3mCOjNIKu0+43oSQPf+HJa0+TTQ==", 252 | "dependencies": { 253 | "@octokit/openapi-types": "^17.0.0" 254 | } 255 | }, 256 | "node_modules/@swc/helpers": { 257 | "version": "0.4.14", 258 | "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.4.14.tgz", 259 | "integrity": "sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==", 260 | "dependencies": { 261 | "tslib": "^2.4.0" 262 | } 263 | }, 264 | "node_modules/balanced-match": { 265 | "version": "1.0.2", 266 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 267 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 268 | }, 269 | "node_modules/before-after-hook": { 270 | "version": "2.2.3", 271 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", 272 | "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" 273 | }, 274 | "node_modules/bluebird": { 275 | "version": "3.7.2", 276 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", 277 | "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" 278 | }, 279 | "node_modules/brace-expansion": { 280 | "version": "2.0.1", 281 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 282 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 283 | "dependencies": { 284 | "balanced-match": "^1.0.0" 285 | } 286 | }, 287 | "node_modules/busboy": { 288 | "version": "1.6.0", 289 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 290 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 291 | "dependencies": { 292 | "streamsearch": "^1.1.0" 293 | }, 294 | "engines": { 295 | "node": ">=10.16.0" 296 | } 297 | }, 298 | "node_modules/caniuse-lite": { 299 | "version": "1.0.30001478", 300 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001478.tgz", 301 | "integrity": "sha512-gMhDyXGItTHipJj2ApIvR+iVB5hd0KP3svMWWXDvZOmjzJJassGLMfxRkQCSYgGd2gtdL/ReeiyvMSFD1Ss6Mw==", 302 | "funding": [ 303 | { 304 | "type": "opencollective", 305 | "url": "https://opencollective.com/browserslist" 306 | }, 307 | { 308 | "type": "tidelift", 309 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 310 | }, 311 | { 312 | "type": "github", 313 | "url": "https://github.com/sponsors/ai" 314 | } 315 | ] 316 | }, 317 | "node_modules/client-only": { 318 | "version": "0.0.1", 319 | "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", 320 | "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==" 321 | }, 322 | "node_modules/concat-map": { 323 | "version": "0.0.1", 324 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 325 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 326 | }, 327 | "node_modules/deprecation": { 328 | "version": "2.3.1", 329 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", 330 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" 331 | }, 332 | "node_modules/err-code": { 333 | "version": "1.1.2", 334 | "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", 335 | "integrity": "sha512-CJAN+O0/yA1CKfRn9SXOGctSpEM7DCon/r/5r2eXFMY2zCCJBasFhcM5I+1kh3Ap11FsQCX+vGHceNPvpWKhoA==" 336 | }, 337 | "node_modules/extend": { 338 | "version": "3.0.2", 339 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 340 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" 341 | }, 342 | "node_modules/file-js": { 343 | "version": "0.3.0", 344 | "resolved": "https://registry.npmjs.org/file-js/-/file-js-0.3.0.tgz", 345 | "integrity": "sha512-nZlX1pxpV6Mt8BghM3Z150bpsCT1zqil97UryusstZLSs9caYAe0Wph2UKPC3awfM2Dq4ri1Sv99KuK4EIImlA==", 346 | "dependencies": { 347 | "bluebird": "^3.4.7", 348 | "minimatch": "^3.0.3", 349 | "proper-lockfile": "^1.2.0" 350 | } 351 | }, 352 | "node_modules/file-js/node_modules/brace-expansion": { 353 | "version": "1.1.11", 354 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 355 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 356 | "dependencies": { 357 | "balanced-match": "^1.0.0", 358 | "concat-map": "0.0.1" 359 | } 360 | }, 361 | "node_modules/file-js/node_modules/minimatch": { 362 | "version": "3.1.2", 363 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 364 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 365 | "dependencies": { 366 | "brace-expansion": "^1.1.7" 367 | }, 368 | "engines": { 369 | "node": "*" 370 | } 371 | }, 372 | "node_modules/filehound": { 373 | "version": "1.17.6", 374 | "resolved": "https://registry.npmjs.org/filehound/-/filehound-1.17.6.tgz", 375 | "integrity": "sha512-5q4zjFkI8W2zLmvbvyvI//K882IpEj6sMNXPUQlk5H6W4Wh3OSSylEAIEmMLELP9G7ileYjTKPXOn0YzzS55Lg==", 376 | "dependencies": { 377 | "bluebird": "^3.7.2", 378 | "file-js": "0.3.0", 379 | "lodash": "^4.17.21", 380 | "minimatch": "^5.0.0", 381 | "moment": "^2.29.1", 382 | "unit-compare": "^1.0.1" 383 | } 384 | }, 385 | "node_modules/graceful-fs": { 386 | "version": "4.2.11", 387 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 388 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 389 | }, 390 | "node_modules/highlight.js": { 391 | "version": "11.7.0", 392 | "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-11.7.0.tgz", 393 | "integrity": "sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==", 394 | "engines": { 395 | "node": ">=12.0.0" 396 | } 397 | }, 398 | "node_modules/is-plain-object": { 399 | "version": "5.0.0", 400 | "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", 401 | "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", 402 | "engines": { 403 | "node": ">=0.10.0" 404 | } 405 | }, 406 | "node_modules/js-tokens": { 407 | "version": "4.0.0", 408 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 409 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 410 | }, 411 | "node_modules/lodash": { 412 | "version": "4.17.21", 413 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", 414 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" 415 | }, 416 | "node_modules/loose-envify": { 417 | "version": "1.4.0", 418 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 419 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 420 | "dependencies": { 421 | "js-tokens": "^3.0.0 || ^4.0.0" 422 | }, 423 | "bin": { 424 | "loose-envify": "cli.js" 425 | } 426 | }, 427 | "node_modules/minimatch": { 428 | "version": "5.1.6", 429 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 430 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 431 | "dependencies": { 432 | "brace-expansion": "^2.0.1" 433 | }, 434 | "engines": { 435 | "node": ">=10" 436 | } 437 | }, 438 | "node_modules/moment": { 439 | "version": "2.29.4", 440 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", 441 | "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", 442 | "engines": { 443 | "node": "*" 444 | } 445 | }, 446 | "node_modules/nanoid": { 447 | "version": "3.3.6", 448 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 449 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 450 | "funding": [ 451 | { 452 | "type": "github", 453 | "url": "https://github.com/sponsors/ai" 454 | } 455 | ], 456 | "bin": { 457 | "nanoid": "bin/nanoid.cjs" 458 | }, 459 | "engines": { 460 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 461 | } 462 | }, 463 | "node_modules/next": { 464 | "version": "13.3.0", 465 | "resolved": "https://registry.npmjs.org/next/-/next-13.3.0.tgz", 466 | "integrity": "sha512-OVTw8MpIPa12+DCUkPqRGPS3thlJPcwae2ZL4xti3iBff27goH024xy4q2lhlsdoYiKOi8Kz6uJoLW/GXwgfOA==", 467 | "dependencies": { 468 | "@next/env": "13.3.0", 469 | "@swc/helpers": "0.4.14", 470 | "busboy": "1.6.0", 471 | "caniuse-lite": "^1.0.30001406", 472 | "postcss": "8.4.14", 473 | "styled-jsx": "5.1.1" 474 | }, 475 | "bin": { 476 | "next": "dist/bin/next" 477 | }, 478 | "engines": { 479 | "node": ">=14.6.0" 480 | }, 481 | "optionalDependencies": { 482 | "@next/swc-darwin-arm64": "13.3.0", 483 | "@next/swc-darwin-x64": "13.3.0", 484 | "@next/swc-linux-arm64-gnu": "13.3.0", 485 | "@next/swc-linux-arm64-musl": "13.3.0", 486 | "@next/swc-linux-x64-gnu": "13.3.0", 487 | "@next/swc-linux-x64-musl": "13.3.0", 488 | "@next/swc-win32-arm64-msvc": "13.3.0", 489 | "@next/swc-win32-ia32-msvc": "13.3.0", 490 | "@next/swc-win32-x64-msvc": "13.3.0" 491 | }, 492 | "peerDependencies": { 493 | "@opentelemetry/api": "^1.1.0", 494 | "fibers": ">= 3.1.0", 495 | "node-sass": "^6.0.0 || ^7.0.0", 496 | "react": "^18.2.0", 497 | "react-dom": "^18.2.0", 498 | "sass": "^1.3.0" 499 | }, 500 | "peerDependenciesMeta": { 501 | "@opentelemetry/api": { 502 | "optional": true 503 | }, 504 | "fibers": { 505 | "optional": true 506 | }, 507 | "node-sass": { 508 | "optional": true 509 | }, 510 | "sass": { 511 | "optional": true 512 | } 513 | } 514 | }, 515 | "node_modules/node-fetch": { 516 | "version": "2.6.9", 517 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", 518 | "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", 519 | "dependencies": { 520 | "whatwg-url": "^5.0.0" 521 | }, 522 | "engines": { 523 | "node": "4.x || >=6.0.0" 524 | }, 525 | "peerDependencies": { 526 | "encoding": "^0.1.0" 527 | }, 528 | "peerDependenciesMeta": { 529 | "encoding": { 530 | "optional": true 531 | } 532 | } 533 | }, 534 | "node_modules/once": { 535 | "version": "1.4.0", 536 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 537 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 538 | "dependencies": { 539 | "wrappy": "1" 540 | } 541 | }, 542 | "node_modules/picocolors": { 543 | "version": "1.0.0", 544 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 545 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" 546 | }, 547 | "node_modules/postcss": { 548 | "version": "8.4.14", 549 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.14.tgz", 550 | "integrity": "sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==", 551 | "funding": [ 552 | { 553 | "type": "opencollective", 554 | "url": "https://opencollective.com/postcss/" 555 | }, 556 | { 557 | "type": "tidelift", 558 | "url": "https://tidelift.com/funding/github/npm/postcss" 559 | } 560 | ], 561 | "dependencies": { 562 | "nanoid": "^3.3.4", 563 | "picocolors": "^1.0.0", 564 | "source-map-js": "^1.0.2" 565 | }, 566 | "engines": { 567 | "node": "^10 || ^12 || >=14" 568 | } 569 | }, 570 | "node_modules/proper-lockfile": { 571 | "version": "1.2.0", 572 | "resolved": "https://registry.npmjs.org/proper-lockfile/-/proper-lockfile-1.2.0.tgz", 573 | "integrity": "sha512-YNjxtCoY3A+lohlLXWCYrHDhUdfU3MMnuC+ADhloDvJo586LKW23dPrjxGvRGuus05Amcf0cQy6vrjjtbJhWpw==", 574 | "dependencies": { 575 | "err-code": "^1.0.0", 576 | "extend": "^3.0.0", 577 | "graceful-fs": "^4.1.2", 578 | "retry": "^0.10.0" 579 | } 580 | }, 581 | "node_modules/react": { 582 | "version": "18.2.0", 583 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 584 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 585 | "dependencies": { 586 | "loose-envify": "^1.1.0" 587 | }, 588 | "engines": { 589 | "node": ">=0.10.0" 590 | } 591 | }, 592 | "node_modules/react-dom": { 593 | "version": "18.2.0", 594 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 595 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 596 | "dependencies": { 597 | "loose-envify": "^1.1.0", 598 | "scheduler": "^0.23.0" 599 | }, 600 | "peerDependencies": { 601 | "react": "^18.2.0" 602 | } 603 | }, 604 | "node_modules/react-hook-form": { 605 | "version": "7.43.9", 606 | "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.43.9.tgz", 607 | "integrity": "sha512-AUDN3Pz2NSeoxQ7Hs6OhQhDr6gtF9YRuutGDwPQqhSUAHJSgGl2VeY3qN19MG0SucpjgDiuMJ4iC5T5uB+eaNQ==", 608 | "engines": { 609 | "node": ">=12.22.0" 610 | }, 611 | "funding": { 612 | "type": "opencollective", 613 | "url": "https://opencollective.com/react-hook-form" 614 | }, 615 | "peerDependencies": { 616 | "react": "^16.8.0 || ^17 || ^18" 617 | } 618 | }, 619 | "node_modules/retry": { 620 | "version": "0.10.1", 621 | "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", 622 | "integrity": "sha512-ZXUSQYTHdl3uS7IuCehYfMzKyIDBNoAuUblvy5oGO5UJSUTmStUUVPXbA9Qxd173Bgre53yCQczQuHgRWAdvJQ==", 623 | "engines": { 624 | "node": "*" 625 | } 626 | }, 627 | "node_modules/scheduler": { 628 | "version": "0.23.0", 629 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 630 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 631 | "dependencies": { 632 | "loose-envify": "^1.1.0" 633 | } 634 | }, 635 | "node_modules/source-map-js": { 636 | "version": "1.0.2", 637 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 638 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 639 | "engines": { 640 | "node": ">=0.10.0" 641 | } 642 | }, 643 | "node_modules/streamsearch": { 644 | "version": "1.1.0", 645 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 646 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 647 | "engines": { 648 | "node": ">=10.0.0" 649 | } 650 | }, 651 | "node_modules/styled-jsx": { 652 | "version": "5.1.1", 653 | "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", 654 | "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", 655 | "dependencies": { 656 | "client-only": "0.0.1" 657 | }, 658 | "engines": { 659 | "node": ">= 12.0.0" 660 | }, 661 | "peerDependencies": { 662 | "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" 663 | }, 664 | "peerDependenciesMeta": { 665 | "@babel/core": { 666 | "optional": true 667 | }, 668 | "babel-plugin-macros": { 669 | "optional": true 670 | } 671 | } 672 | }, 673 | "node_modules/tr46": { 674 | "version": "0.0.3", 675 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 676 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 677 | }, 678 | "node_modules/tslib": { 679 | "version": "2.5.0", 680 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz", 681 | "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==" 682 | }, 683 | "node_modules/unit-compare": { 684 | "version": "1.0.1", 685 | "resolved": "https://registry.npmjs.org/unit-compare/-/unit-compare-1.0.1.tgz", 686 | "integrity": "sha512-AeLMQr8gcen2WOTwV0Gvi1nKKbY4Mms79MoltZ6hrZV/VANgE/YQly3jtWZJA/fa9m4ajhynq3XMqh5rOyZclA==", 687 | "dependencies": { 688 | "moment": "^2.14.1" 689 | } 690 | }, 691 | "node_modules/universal-user-agent": { 692 | "version": "6.0.0", 693 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", 694 | "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" 695 | }, 696 | "node_modules/webidl-conversions": { 697 | "version": "3.0.1", 698 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 699 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 700 | }, 701 | "node_modules/whatwg-url": { 702 | "version": "5.0.0", 703 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 704 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 705 | "dependencies": { 706 | "tr46": "~0.0.3", 707 | "webidl-conversions": "^3.0.0" 708 | } 709 | }, 710 | "node_modules/wrappy": { 711 | "version": "1.0.2", 712 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 713 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 714 | } 715 | } 716 | } 717 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "global-css-art", 3 | "version": "0.1.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 | "@octokit/core": "^4.2.0", 13 | "filehound": "^1.17.6", 14 | "highlight.js": "^11.7.0", 15 | "next": "13.3.0", 16 | "react": "18.2.0", 17 | "react-dom": "18.2.0", 18 | "react-hook-form": "^7.43.9" 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /pages/_app.js: -------------------------------------------------------------------------------- 1 | import '../styles/global.css'; 2 | import 'highlight.js/styles/github.css'; 3 | 4 | export default function App({ Component, pageProps }) { 5 | return 6 | } 7 | -------------------------------------------------------------------------------- /pages/about.jsx: -------------------------------------------------------------------------------- 1 | import Layout from '../components/layout' 2 | import Link from 'next/link' 3 | 4 | export default function AboutPage( ) { 5 | return ( 6 | 7 |

Global CSS Art

8 |

What is CSS Art?

9 |

CSS Art is a form of digital art that uses Cascading Style Sheets (CSS) to create beautiful and creative designs on the web. CSS Art can range from simple designs to complex and intricate illustrations, all created using only HTML and CSS.

10 |

About Global CSS Art

11 |

Global CSS Art is a community dedicated to bringing together CSS artists from all over the world to share their work, exchange ideas, and collaborate on new projects. Our community is open to all skill levels, from beginners to experts, and we welcome artists from all backgrounds and cultures.

12 |

How to Get Involved

13 |

Check out CONTRIBUTING.md on the GitHub Repo to contribute!

14 |

What you get out of contributing

15 | 20 |

We're excited to have you join our community of CSS artists and look forward to seeing your work!

21 |
22 | ); 23 | } -------------------------------------------------------------------------------- /pages/art/[username]/[artwork].jsx: -------------------------------------------------------------------------------- 1 | import Layout from '../../../components/layout' 2 | import fsPromises from 'fs/promises'; 3 | import path from 'path' 4 | import hljs from 'highlight.js/lib/core' 5 | import xml from 'highlight.js/lib/languages/xml' 6 | import styles from '../../../styles/artwork.module.css' 7 | import React, { useState } from 'react'; 8 | import Link from 'next/link' 9 | hljs.registerLanguage('xml', xml) 10 | 11 | export default function HomePage( {username, artworkCode, artwork, url}) { 12 | const highlightedCode = hljs.highlight(artworkCode, { language: 'xml' }).value 13 | const [alertshow, setalertshow] = useState(false); 14 | function copyText(){ 15 | navigator.clipboard.writeText(url) 16 | setalertshow(true) 17 | } 18 | const [codeShow, setCodeShow] = useState(false); 19 | function codeShowFunc(){ 20 | if (codeShow){ 21 | document.getElementById("showcodebtn").innerText = "Show source code" 22 | setCodeShow(false) 23 | } else { 24 | document.getElementById("showcodebtn").innerText = "Hide source code" 25 | setCodeShow(true) 26 | } 27 | } 28 | return ( 29 | 30 | {alertshow ? 31 | <> 32 | 33 | Artwork URL copied 34 | 35 | : 36 | <>} 37 |
38 |

{artwork}

39 | 41 |
42 | By {username}
43 | 44 |
45 | {codeShow ? 46 |
47 |                 
48 |               
49 | : 50 | <>} 51 |
52 | ); 53 | } 54 | 55 | export async function getServerSideProps({ params }) { 56 | const username = params.username; 57 | const artwork = params.artwork 58 | const filePath = path.join(process.cwd(), `art/${username}/${artwork}.html`); 59 | var artworkCode; 60 | try{ 61 | artworkCode = await (await fsPromises.readFile(filePath)).toString() 62 | } catch { 63 | return { 64 | redirect: { 65 | destination: '/', 66 | permanent: false, 67 | }, 68 | } 69 | } 70 | const url = `https://global-css-art.vercel.app/art/${username}/${artwork}` 71 | return { 72 | props: { 73 | username, 74 | artworkCode, 75 | artwork, 76 | url, 77 | }, 78 | }; 79 | } 80 | -------------------------------------------------------------------------------- /pages/contributors.jsx: -------------------------------------------------------------------------------- 1 | import Layout from '../components/layout' 2 | const { Octokit } = require("@octokit/core"); 3 | 4 | export default function ContributorsPage( {req} ) { 5 | return ( 6 | 7 |

Global CSS Art Contributors

8 |

Contributors:

9 |
    10 | {req.data.map((user, index) => ( 11 |
    12 |
  • {user.login}
  • 13 |
    14 | ))} 15 |
16 |
17 | ); 18 | } 19 | 20 | export async function getStaticProps({ params }) { 21 | const octokit = new Octokit({ 22 | auth: process.env.GITHUB_TOKEN 23 | }) 24 | 25 | const req = await octokit.request('GET /repos/vulcanwm/global-css-art/contributors?per_page=100', { 26 | owner: 'vulcanwm', 27 | repo: 'global-css-art', 28 | headers: { 29 | 'X-GitHub-Api-Version': '2022-11-28' 30 | } 31 | }) 32 | return { 33 | props: { 34 | req 35 | }, 36 | }; 37 | } -------------------------------------------------------------------------------- /pages/embed/[username]/[artwork].jsx: -------------------------------------------------------------------------------- 1 | import Layout from '../../../components/layout' 2 | import fsPromises from 'fs/promises'; 3 | import path from 'path' 4 | 5 | export default function HomePage( {artworkCode, artwork}) { 6 | return ( 7 | 8 |
9 | 10 | ); 11 | } 12 | 13 | export async function getServerSideProps({ params }) { 14 | const username = params.username; 15 | const artwork = params.artwork 16 | const filePath = path.join(process.cwd(), `art/${username}/${artwork}.html`); 17 | var artworkCode; 18 | try{ 19 | artworkCode = await (await fsPromises.readFile(filePath)).toString() 20 | } catch { 21 | return { 22 | redirect: { 23 | destination: '/', 24 | permanent: false, 25 | }, 26 | } 27 | } 28 | return { 29 | props: { 30 | artworkCode, 31 | artwork 32 | }, 33 | }; 34 | } -------------------------------------------------------------------------------- /pages/index.js: -------------------------------------------------------------------------------- 1 | import Layout from '../components/layout' 2 | import Link from 'next/link' 3 | import { useForm } from "react-hook-form"; 4 | import { global_art } from '../global_art'; 5 | import { useRouter } from 'next/router' 6 | 7 | export default function HomePage( {random_art}) { 8 | const { 9 | register, 10 | handleSubmit, 11 | formState: { errors } 12 | } = useForm(); 13 | const router = useRouter() 14 | const onSubmit = (data) => { 15 | const search = data.search 16 | router.push("/search?search=" + search) 17 | }; 18 | return ( 19 | 20 |
21 |

Global CSS Art

22 |
23 | 24 | 25 |
26 |
27 | {random_art.map((artid) => ( 28 |
29 | {artid.split("/")[1]} by {artid.split("/")[0]}
30 |
31 |
32 | ))} 33 |
34 | Artwork has finished! Contribute to add more! 35 |
36 |
37 | ); 38 | } 39 | 40 | export async function getServerSideProps({ params }) { 41 | const random_art = global_art.sort((a, b) => 0.5 - Math.random()); 42 | return { 43 | props: { 44 | random_art 45 | }, 46 | }; 47 | } -------------------------------------------------------------------------------- /pages/search.js: -------------------------------------------------------------------------------- 1 | import Layout from '../components/layout' 2 | import Link from 'next/link' 3 | import { global_art } from '../global_art'; 4 | 5 | export default function SearchPage( { search, search_result }) { 6 | return ( 7 | 8 |
9 |

Search results for {search}

10 | {search_result.length == 0 ? 11 | No results found! 12 | : 13 | <>} 14 |
15 | {search_result.map((artid) => ( 16 |
17 | {artid.split("/")[1]} by {artid.split("/")[0]}
18 |
19 |
20 | ))} 21 |
22 |
23 |
24 | ); 25 | } 26 | 27 | export async function getServerSideProps({ query }) { 28 | var { search } = query; 29 | search = search.toLowerCase(); 30 | if (search == undefined){ 31 | return { 32 | redirect: { 33 | destination: '/', 34 | permanent: false, 35 | }, 36 | } 37 | } 38 | var search_result; 39 | if (search.split(" ").length == 1){ 40 | search_result = global_art.filter(element => element.toLowerCase().includes(search)); 41 | } else { 42 | const word_1 = search.split(" ")[0] 43 | const word_2 = search.split(" ")[1] 44 | const result_1 = global_art.filter(element => element.toLowerCase().includes(word_1)); 45 | const result_2 = global_art.filter(element => element.toLowerCase().includes(word_2)); 46 | search_result = result_1.filter(value => result_2.includes(value)); 47 | } 48 | return { 49 | props: { 50 | search, 51 | search_result, 52 | }, 53 | }; 54 | } -------------------------------------------------------------------------------- /pages/user/[username].jsx: -------------------------------------------------------------------------------- 1 | import Layout from '../../components/layout' 2 | import Link from 'next/link' 3 | import fsPromises from 'fs/promises'; 4 | import path from 'path' 5 | const Filehound = require('filehound'); 6 | 7 | export default function HomePage( {username, objectData, allArt}) { 8 | var name; 9 | if (Object.keys(objectData).includes("Name")){ 10 | name = objectData['Name'] 11 | } else { 12 | name = username; 13 | } 14 | return ( 15 | 16 |
17 |
18 | {name}
19 | {Object.keys(objectData).includes("Website") ? 20 | <>Website
21 | : 22 | <>} 23 | {Object.keys(objectData).includes("GitHub") ? 24 | <>GitHub
25 | : 26 | <>} 27 | {Object.keys(objectData).includes("Twitter") ? 28 | <>Twitter
29 | : 30 | <>} 31 |

{name}'s CSS Art

32 |
33 | {allArt.map((artid) => ( 34 |
35 | {artid}
36 |
37 |
38 | ))} 39 |
40 |
41 |
42 | ); 43 | } 44 | 45 | export async function getStaticPaths() { 46 | const subdirectories = Filehound.create() 47 | .path("art") 48 | .directory() 49 | .findSync(); 50 | const paths = []; 51 | subdirectories.forEach(function (file) { 52 | paths.push("/user/" + file.split("/")[1]); 53 | }); 54 | return { 55 | paths, 56 | fallback: false, 57 | }; 58 | } 59 | 60 | export async function getStaticProps({ params }) { 61 | const username = params.username; 62 | const filePath = path.join(process.cwd(), `art/${username}/userinfo.json`); 63 | var objectData; 64 | try{ 65 | const jsonData = await fsPromises.readFile(filePath); 66 | objectData = JSON.parse(jsonData); 67 | } catch { 68 | objectData = {} 69 | } 70 | const files = Filehound.create() 71 | .paths('art/' + username) 72 | .ext('html') 73 | .findSync(); 74 | const allArt = [] 75 | files.forEach(function (file) { 76 | allArt.push(file.split("/")[2].replace(".html", "")); 77 | }); 78 | console.log(objectData) 79 | if (("Image" in objectData) == false){ 80 | objectData['Image'] = "/profile.jpg" 81 | } 82 | return { 83 | props: { 84 | username, 85 | objectData, 86 | allArt 87 | }, 88 | }; 89 | } 90 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VulcanWM/global-css-art/ca676684274d7bbef0c2450d94cd810570b1c9fa/public/favicon.ico -------------------------------------------------------------------------------- /public/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/VulcanWM/global-css-art/ca676684274d7bbef0c2450d94cd810570b1c9fa/public/profile.jpg -------------------------------------------------------------------------------- /styles/artwork.module.css: -------------------------------------------------------------------------------- 1 | .header { 2 | display: flex; 3 | align-items: center; /* Vertical align the elements to the center */ 4 | } 5 | 6 | .title { 7 | margin: 0; 8 | } 9 | 10 | .copy { 11 | margin-left: auto; /* Push this element to the right */ 12 | } 13 | 14 | .alert { 15 | color: var(--primary) 16 | } 17 | 18 | .smallbutton { 19 | padding: 5px; 20 | margin-left: 10px; 21 | margin-right: 10px; 22 | } -------------------------------------------------------------------------------- /styles/global.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --primary: #14a316; 3 | --dark-accent: #0f7a10; 4 | --secondary: #1675da; 5 | --secondary-dark-accent: #0d4683; 6 | } 7 | 8 | html { 9 | font-family: 'Ubuntu', sans-serif; 10 | } 11 | 12 | a { 13 | text-decoration: none; 14 | color: var(--secondary) 15 | } 16 | 17 | a:hover { 18 | color:var(--secondary-dark-accent); 19 | text-decoration: underline dotted; 20 | } 21 | 22 | input[type=text] { 23 | padding: 10px; 24 | border-radius: 30px; 25 | border: 2px solid var(--primary); 26 | background-color: transparent; 27 | outline: none; 28 | font-size: 15px; 29 | transition: 0.2s; 30 | width: 200px; 31 | margin-bottom: 30px; 32 | text-align: center; 33 | } 34 | 35 | input[type=text]:focus { 36 | border-color: var(--dark-accent); 37 | } 38 | 39 | button,input[type=submit] { 40 | padding: 10px; 41 | padding-left: 20px; 42 | padding-right: 20px; 43 | border-radius: 15px; 44 | background-color: transparent; 45 | cursor: pointer; 46 | border: 2px solid var(--primary); 47 | transition: 0.2s; 48 | font-size: 17px; 49 | } 50 | 51 | button:hover,input[type=submit]:hover { 52 | border-color: var(--dark-accent); 53 | } 54 | 55 | .artworks { 56 | display: flex; 57 | flex-direction: row; 58 | flex-wrap: wrap; 59 | align-items: center; 60 | justify-content: center; 61 | } 62 | 63 | .artwork { 64 | border: 2px solid black; 65 | font-size: 20px; 66 | width: 375px; 67 | height: 350px; 68 | margin: 10px; 69 | border-radius: 10px; 70 | } 71 | --------------------------------------------------------------------------------