├── .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 |
9 |
10 | Press the Add file button
and then click Create new file
.
11 | 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.
12 |
13 |
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 |
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 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/art/f4rukyldrm/terminal.html:
--------------------------------------------------------------------------------
1 |
2 |
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 |
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 |
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 |
30 | Home
31 | About Us
32 | GitHub Repo
33 | Contributors
34 |
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 |
16 | Your art gets featured on this website
17 | You get mentioned on the contributors page
18 | You become part of an awesome open-source community
19 |
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 | setalertshow(false)}>x
33 | Artwork URL copied
34 | >
35 | :
36 | <>>}
37 |
38 |
{artwork}
39 | Copy artwork link
41 |
42 | By {username}
43 |
44 | Show source code
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 |
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 |
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 |
--------------------------------------------------------------------------------