From b5a4c0a601cb564485cc04e366054a8954774ffe Mon Sep 17 00:00:00 2001 From: amy Date: Tue, 24 Dec 2024 16:32:54 +0330 Subject: [PATCH] first commit --- .forgejo/workflows/build.yaml | 56 ++ .gitignore | 24 + README.md | 28 + hacked/App.tsx | 21 + hacked/hacked.css | 18 + hacked/index.html | 17 + hacked/index.tsx | 11 + index.html | 24 + package.json | 21 + pnpm-lock.yaml | 1142 +++++++++++++++++++++++++++++++++ public/birthday.png | Bin 0 -> 8419 bytes public/explod.gif | Bin 0 -> 22896 bytes public/explod.mp3 | Bin 0 -> 29019 bytes public/fireemoji.png | Bin 0 -> 928 bytes public/fjonkie.png | Bin 0 -> 13086 bytes public/gaybackground.png | Bin 0 -> 2326 bytes public/nyaboom.webp | Bin 0 -> 2210 bytes review/App.tsx | 51 ++ review/index.html | 20 + review/index.tsx | 11 + review/reviewed.css | 54 ++ src/App.css | 417 ++++++++++++ src/App.tsx | 255 ++++++++ src/components/api.tsx | 115 ++++ src/components/comps.css | 9 + src/components/comps.tsx | 67 ++ src/components/cumbrainz.css | 6 + src/components/cumbrainz.tsx | 65 ++ src/components/events.tsx | 21 + src/components/middlecard.css | 11 + src/components/middlecard.tsx | 33 + src/components/music.tsx | 47 ++ src/components/name.tsx | 31 + src/components/pfp.css | 40 ++ src/components/pfp.tsx | 69 ++ src/components/utils.tsx | 35 + src/index.tsx | 14 + src/vite-env.d.ts | 1 + tsconfig.app.json | 28 + tsconfig.json | 11 + tsconfig.node.json | 13 + vite.config.ts | 16 + 42 files changed, 2802 insertions(+) create mode 100644 .forgejo/workflows/build.yaml create mode 100644 .gitignore create mode 100644 README.md create mode 100644 hacked/App.tsx create mode 100644 hacked/hacked.css create mode 100644 hacked/index.html create mode 100644 hacked/index.tsx create mode 100644 index.html create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 public/birthday.png create mode 100644 public/explod.gif create mode 100644 public/explod.mp3 create mode 100644 public/fireemoji.png create mode 100755 public/fjonkie.png create mode 100644 public/gaybackground.png create mode 100644 public/nyaboom.webp create mode 100644 review/App.tsx create mode 100644 review/index.html create mode 100644 review/index.tsx create mode 100644 review/reviewed.css create mode 100644 src/App.css create mode 100644 src/App.tsx create mode 100644 src/components/api.tsx create mode 100644 src/components/comps.css create mode 100644 src/components/comps.tsx create mode 100644 src/components/cumbrainz.css create mode 100644 src/components/cumbrainz.tsx create mode 100644 src/components/events.tsx create mode 100644 src/components/middlecard.css create mode 100644 src/components/middlecard.tsx create mode 100644 src/components/music.tsx create mode 100644 src/components/name.tsx create mode 100644 src/components/pfp.css create mode 100644 src/components/pfp.tsx create mode 100644 src/components/utils.tsx create mode 100644 src/index.tsx create mode 100644 src/vite-env.d.ts create mode 100644 tsconfig.app.json create mode 100644 tsconfig.json create mode 100644 tsconfig.node.json create mode 100644 vite.config.ts diff --git a/.forgejo/workflows/build.yaml b/.forgejo/workflows/build.yaml new file mode 100644 index 0000000..114b418 --- /dev/null +++ b/.forgejo/workflows/build.yaml @@ -0,0 +1,56 @@ +name: Build + +on: + push: + branches: + - main + +jobs: + build: + name: Build + runs-on: ubuntu-latest + + steps: + - name: Checkout repo + uses: actions/checkout@v3 + + - name: Setup Node + uses: actions/setup-node@v3 + + - name: Cache npm dependencies + uses: actions/cache@v2 + with: + path: '~/.npm' + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-node- + + - name: Build project + run: npm install && npm run build + + - name: Upload production-ready build files + uses: actions/upload-artifact@v3 + with: + name: production-files + path: ./dist + + deploy: + name: Deploy + needs: build + runs-on: ubuntu-latest + steps: + - name: Download artifact + uses: actions/download-artifact@v3 + with: + name: production-files + path: ./dist + + - name: Upload ftp + uses: https://git.lgbt/mirror/ftp-action@releases/v2 + with: + host: ${{ secrets.FTP_SERVER }} + user: ${{ secrets.FTP_USER }} + password: ${{ secrets.FTP_PASSWORD }} + localDir: "dist" + remoteDir: "v2.exhq.dev" + options: "--delete" \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/README.md b/README.md new file mode 100644 index 0000000..99613fc --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +## Usage + +```bash +$ npm install # or pnpm install or yarn install +``` + +### Learn more on the [Solid Website](https://solidjs.com) and come chat with us on our [Discord](https://discord.com/invite/solidjs) + +## Available Scripts + +In the project directory, you can run: + +### `npm run dev` + +Runs the app in the development mode.
+Open [http://localhost:5173](http://localhost:5173) to view it in the browser. + +### `npm run build` + +Builds the app for production to the `dist` folder.
+It correctly bundles Solid in production mode and optimizes the build for the best performance. + +The build is minified and the filenames include the hashes.
+Your app is ready to be deployed! + +## Deployment + +Learn more about deploying your application with the [documentations](https://vitejs.dev/guide/static-deploy.html) diff --git a/hacked/App.tsx b/hacked/App.tsx new file mode 100644 index 0000000..ad1fd4c --- /dev/null +++ b/hacked/App.tsx @@ -0,0 +1,21 @@ +import '../src/App.css' +import './hacked.css' +export default function App() { + return
+ +
+} \ No newline at end of file diff --git a/hacked/hacked.css b/hacked/hacked.css new file mode 100644 index 0000000..4df6bc7 --- /dev/null +++ b/hacked/hacked.css @@ -0,0 +1,18 @@ +.hackedmain { + display: flex; + justify-content: center; +} +.hackedheader { + font-size: 1.5em; +} + +.hackedlist a { + color: pink; +} + +.hackedlist { + display: flex; + justify-content: center; + align-items: center; + flex-direction: column; +} diff --git a/hacked/index.html b/hacked/index.html new file mode 100644 index 0000000..074a307 --- /dev/null +++ b/hacked/index.html @@ -0,0 +1,17 @@ + + + + + + + amy hacked + + + + + + +
+ + + diff --git a/hacked/index.tsx b/hacked/index.tsx new file mode 100644 index 0000000..6432ed4 --- /dev/null +++ b/hacked/index.tsx @@ -0,0 +1,11 @@ +import { render } from 'solid-js/web' + +import App from './App' + +const root = document.getElementById('hackedroot') + +render(() => ( + <> + + +), root!) diff --git a/index.html b/index.html new file mode 100644 index 0000000..82a6516 --- /dev/null +++ b/index.html @@ -0,0 +1,24 @@ + + + + + + + Amy + + + + + + +
+ + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..b808fa5 --- /dev/null +++ b/package.json @@ -0,0 +1,21 @@ +{ + "name": "v2.exhq.dev", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc -b && vite build", + "preview": "vite preview" + }, + "dependencies": { + "@types/node": "^20.14.10", + "solid-js": "^1.8.17" + }, + "devDependencies": { + "typescript": "^5.2.2", + "vite": "^5.3.1", + "vite-plugin-solid": "^2.10.2" + }, + "packageManager": "pnpm@9.12.3+sha512.cce0f9de9c5a7c95bef944169cc5dfe8741abfb145078c0d508b868056848a87c81e626246cb60967cbd7fd29a6c062ef73ff840d96b3c86c40ac92cf4a813ee" +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..3eda747 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1142 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + dependencies: + '@types/node': + specifier: ^20.14.10 + version: 20.14.10 + solid-js: + specifier: ^1.8.17 + version: 1.8.17 + devDependencies: + typescript: + specifier: ^5.2.2 + version: 5.5.2 + vite: + specifier: ^5.3.1 + version: 5.3.1(@types/node@20.14.10) + vite-plugin-solid: + specifier: ^2.10.2 + version: 2.10.2(solid-js@1.8.17)(vite@5.3.1(@types/node@20.14.10)) + +packages: + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@babel/code-frame@7.24.7': + resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.24.7': + resolution: {integrity: sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.24.7': + resolution: {integrity: sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.24.7': + resolution: {integrity: sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.24.7': + resolution: {integrity: sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-environment-visitor@7.24.7': + resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-function-name@7.24.7': + resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-hoist-variables@7.24.7': + resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.18.6': + resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.24.7': + resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.24.7': + resolution: {integrity: sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-plugin-utils@7.24.7': + resolution: {integrity: sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-simple-access@7.24.7': + resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-split-export-declaration@7.24.7': + resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.24.7': + resolution: {integrity: sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.24.7': + resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.24.7': + resolution: {integrity: sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.24.7': + resolution: {integrity: sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg==} + engines: {node: '>=6.9.0'} + + '@babel/highlight@7.24.7': + resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.24.7': + resolution: {integrity: sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-syntax-jsx@7.24.7': + resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/template@7.24.7': + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.24.7': + resolution: {integrity: sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.7': + resolution: {integrity: sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q==} + engines: {node: '>=6.9.0'} + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@jridgewell/gen-mapping@0.3.5': + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.4.15': + resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@rollup/rollup-android-arm-eabi@4.18.0': + resolution: {integrity: sha512-Tya6xypR10giZV1XzxmH5wr25VcZSncG0pZIjfePT0OVBvqNEurzValetGNarVrGiq66EBVAFn15iYX4w6FKgQ==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.18.0': + resolution: {integrity: sha512-avCea0RAP03lTsDhEyfy+hpfr85KfyTctMADqHVhLAF3MlIkq83CP8UfAHUssgXTYd+6er6PaAhx/QGv4L1EiA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.18.0': + resolution: {integrity: sha512-IWfdwU7KDSm07Ty0PuA/W2JYoZ4iTj3TUQjkVsO/6U+4I1jN5lcR71ZEvRh52sDOERdnNhhHU57UITXz5jC1/w==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.18.0': + resolution: {integrity: sha512-n2LMsUz7Ynu7DoQrSQkBf8iNrjOGyPLrdSg802vk6XT3FtsgX6JbE8IHRvposskFm9SNxzkLYGSq9QdpLYpRNA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + resolution: {integrity: sha512-C/zbRYRXFjWvz9Z4haRxcTdnkPt1BtCkz+7RtBSuNmKzMzp3ZxdM28Mpccn6pt28/UWUCTXa+b0Mx1k3g6NOMA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.18.0': + resolution: {integrity: sha512-l3m9ewPgjQSXrUMHg93vt0hYCGnrMOcUpTz6FLtbwljo2HluS4zTXFy2571YQbisTnfTKPZ01u/ukJdQTLGh9A==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.18.0': + resolution: {integrity: sha512-rJ5D47d8WD7J+7STKdCUAgmQk49xuFrRi9pZkWoRD1UeSMakbcepWXPF8ycChBoAqs1pb2wzvbY6Q33WmN2ftw==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.18.0': + resolution: {integrity: sha512-be6Yx37b24ZwxQ+wOQXXLZqpq4jTckJhtGlWGZs68TgdKXJgw54lUUoFYrg6Zs/kjzAQwEwYbp8JxZVzZLRepQ==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + resolution: {integrity: sha512-hNVMQK+qrA9Todu9+wqrXOHxFiD5YmdEi3paj6vP02Kx1hjd2LLYR2eaN7DsEshg09+9uzWi2W18MJDlG0cxJA==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.18.0': + resolution: {integrity: sha512-ROCM7i+m1NfdrsmvwSzoxp9HFtmKGHEqu5NNDiZWQtXLA8S5HBCkVvKAxJ8U+CVctHwV2Gb5VUaK7UAkzhDjlg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.18.0': + resolution: {integrity: sha512-0UyyRHyDN42QL+NbqevXIIUnKA47A+45WyasO+y2bGJ1mhQrfrtXUpTxCOrfxCR4esV3/RLYyucGVPiUsO8xjg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.18.0': + resolution: {integrity: sha512-xuglR2rBVHA5UsI8h8UbX4VJ470PtGCf5Vpswh7p2ukaqBGFTnsfzxUBetoWBWymHMxbIG0Cmx7Y9qDZzr648w==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.18.0': + resolution: {integrity: sha512-LKaqQL9osY/ir2geuLVvRRs+utWUNilzdE90TpyoX0eNqPzWjRm14oMEE+YLve4k/NAqCdPkGYDaDF5Sw+xBfg==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.18.0': + resolution: {integrity: sha512-7J6TkZQFGo9qBKH0pk2cEVSRhJbL6MtfWxth7Y5YmZs57Pi+4x6c2dStAUvaQkHQLnEQv1jzBUW43GvZW8OFqA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.18.0': + resolution: {integrity: sha512-Txjh+IxBPbkUB9+SXZMpv+b/vnTEtFyfWZgJ6iyCmt2tdx0OF5WhFowLmnh8ENGNpfUlUZkdI//4IEmhwPieNg==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.18.0': + resolution: {integrity: sha512-UOo5FdvOL0+eIVTgS4tIdbW+TtnBLWg1YBCcU2KWM7nuNwRz9bksDX1bekJJCpu25N1DVWaCwnT39dVQxzqS8g==} + cpu: [x64] + os: [win32] + + '@types/babel__core@7.20.5': + resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} + + '@types/babel__generator@7.6.8': + resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + + '@types/babel__template@7.4.4': + resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} + + '@types/babel__traverse@7.20.6': + resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + + '@types/estree@1.0.5': + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + + '@types/node@20.14.10': + resolution: {integrity: sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ==} + + ansi-styles@3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + + babel-plugin-jsx-dom-expressions@0.37.21: + resolution: {integrity: sha512-WbQo1NQ241oki8bYasVzkMXOTSIri5GO/K47rYJb2ZBh8GaPUEWiWbMV3KwXz+96eU2i54N6ThzjQG/f5n8Azw==} + peerDependencies: + '@babel/core': ^7.20.12 + + babel-preset-solid@1.8.17: + resolution: {integrity: sha512-s/FfTZOeds0hYxYqce90Jb+0ycN2lrzC7VP1k1JIn3wBqcaexDKdYi6xjB+hMNkL+Q6HobKbwsriqPloasR9LA==} + peerDependencies: + '@babel/core': ^7.0.0 + + browserslist@4.23.1: + resolution: {integrity: sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + caniuse-lite@1.0.30001636: + resolution: {integrity: sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==} + + chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + electron-to-chromium@1.4.810: + resolution: {integrity: sha512-Kaxhu4T7SJGpRQx99tq216gCq2nMxJo+uuT6uzz9l8TVN2stL7M06MIIXAtr9jsrLs2Glflgf2vMQRepxawOdQ==} + + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + + escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + engines: {node: '>=6'} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + html-entities@2.3.3: + resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} + + is-what@4.1.16: + resolution: {integrity: sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==} + engines: {node: '>=12.13'} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + jsesc@2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + merge-anything@5.1.7: + resolution: {integrity: sha512-eRtbOb1N5iyH0tkQDAoQ4Ipsp/5qSR79Dzrz8hEPxRX10RWWR/iQXdoKmBSRCThY1Fh5EhISDtpSc93fpxUniQ==} + engines: {node: '>=12.13'} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + postcss@8.4.38: + resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} + engines: {node: ^10 || ^12 || >=14} + + rollup@4.18.0: + resolution: {integrity: sha512-QmJz14PX3rzbJCN1SG4Xe/bAAX2a6NpCP8ab2vfu2GiUr8AQcr2nCV/oEO3yneFarB67zk8ShlIyWb2LGTb3Sg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + + seroval-plugins@1.0.7: + resolution: {integrity: sha512-GO7TkWvodGp6buMEX9p7tNyIkbwlyuAWbI6G9Ec5bhcm7mQdu3JOK1IXbEUwb3FVzSc363GraG/wLW23NSavIw==} + engines: {node: '>=10'} + peerDependencies: + seroval: ^1.0 + + seroval@1.0.7: + resolution: {integrity: sha512-n6ZMQX5q0Vn19Zq7CIKNIo7E75gPkGCFUEqDpa8jgwpYr/vScjqnQ6H09t1uIiZ0ZSK0ypEGvrYK2bhBGWsGdw==} + engines: {node: '>=10'} + + solid-js@1.8.17: + resolution: {integrity: sha512-E0FkUgv9sG/gEBWkHr/2XkBluHb1fkrHywUgA6o6XolPDCJ4g1HaLmQufcBBhiF36ee40q+HpG/vCZu7fLpI3Q==} + + solid-refresh@0.6.3: + resolution: {integrity: sha512-F3aPsX6hVw9ttm5LYlth8Q15x6MlI/J3Dn+o3EQyRTtTxidepSTwAYdozt01/YA+7ObcciagGEyXIopGZzQtbA==} + peerDependencies: + solid-js: ^1.3 + + source-map-js@1.2.0: + resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + engines: {node: '>=0.10.0'} + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + to-fast-properties@2.0.0: + resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} + engines: {node: '>=4'} + + typescript@5.5.2: + resolution: {integrity: sha512-NcRtPEOsPFFWjobJEtfihkLCZCXZt/os3zf8nTxjVH3RvTSxjrCamJpbExGvYOF+tFHc3pA65qpdwPbzjohhew==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + + update-browserslist-db@1.0.16: + resolution: {integrity: sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + validate-html-nesting@1.2.2: + resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==} + + vite-plugin-solid@2.10.2: + resolution: {integrity: sha512-AOEtwMe2baBSXMXdo+BUwECC8IFHcKS6WQV/1NEd+Q7vHPap5fmIhLcAzr+DUJ04/KHx/1UBU0l1/GWP+rMAPQ==} + peerDependencies: + '@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.* + solid-js: ^1.7.2 + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + '@testing-library/jest-dom': + optional: true + + vite@5.3.1: + resolution: {integrity: sha512-XBmSKRLXLxiaPYamLv3/hnP/KXDai1NDexN0FpkTaZXTfycHvkRHoenpgl/fvuK/kPbB6xAgoyiryAhQNxYmAQ==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitefu@0.2.5: + resolution: {integrity: sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==} + peerDependencies: + vite: ^3.0.0 || ^4.0.0 || ^5.0.0 + peerDependenciesMeta: + vite: + optional: true + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + +snapshots: + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + + '@babel/code-frame@7.24.7': + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + + '@babel/compat-data@7.24.7': {} + + '@babel/core@7.24.7': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-compilation-targets': 7.24.7 + '@babel/helper-module-transforms': 7.24.7(@babel/core@7.24.7) + '@babel/helpers': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + convert-source-map: 2.0.0 + debug: 4.3.5 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.24.7': + dependencies: + '@babel/types': 7.24.7 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + + '@babel/helper-compilation-targets@7.24.7': + dependencies: + '@babel/compat-data': 7.24.7 + '@babel/helper-validator-option': 7.24.7 + browserslist: 4.23.1 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-environment-visitor@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-function-name@7.24.7': + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + + '@babel/helper-hoist-variables@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-module-imports@7.18.6': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-module-imports@7.24.7': + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-plugin-utils@7.24.7': {} + + '@babel/helper-simple-access@7.24.7': + dependencies: + '@babel/traverse': 7.24.7 + '@babel/types': 7.24.7 + transitivePeerDependencies: + - supports-color + + '@babel/helper-split-export-declaration@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/helper-string-parser@7.24.7': {} + + '@babel/helper-validator-identifier@7.24.7': {} + + '@babel/helper-validator-option@7.24.7': {} + + '@babel/helpers@7.24.7': + dependencies: + '@babel/template': 7.24.7 + '@babel/types': 7.24.7 + + '@babel/highlight@7.24.7': + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + + '@babel/parser@7.24.7': + dependencies: + '@babel/types': 7.24.7 + + '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.7)': + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-plugin-utils': 7.24.7 + + '@babel/template@7.24.7': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + + '@babel/traverse@7.24.7': + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.7 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-function-name': 7.24.7 + '@babel/helper-hoist-variables': 7.24.7 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + debug: 4.3.5 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.24.7': + dependencies: + '@babel/helper-string-parser': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true + + '@jridgewell/gen-mapping@0.3.5': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/sourcemap-codec@1.4.15': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.4.15 + + '@rollup/rollup-android-arm-eabi@4.18.0': + optional: true + + '@rollup/rollup-android-arm64@4.18.0': + optional: true + + '@rollup/rollup-darwin-arm64@4.18.0': + optional: true + + '@rollup/rollup-darwin-x64@4.18.0': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.18.0': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.18.0': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.18.0': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.18.0': + optional: true + + '@rollup/rollup-linux-x64-musl@4.18.0': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.18.0': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.18.0': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.18.0': + optional: true + + '@types/babel__core@7.20.5': + dependencies: + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + '@types/babel__generator': 7.6.8 + '@types/babel__template': 7.4.4 + '@types/babel__traverse': 7.20.6 + + '@types/babel__generator@7.6.8': + dependencies: + '@babel/types': 7.24.7 + + '@types/babel__template@7.4.4': + dependencies: + '@babel/parser': 7.24.7 + '@babel/types': 7.24.7 + + '@types/babel__traverse@7.20.6': + dependencies: + '@babel/types': 7.24.7 + + '@types/estree@1.0.5': {} + + '@types/node@20.14.10': + dependencies: + undici-types: 5.26.5 + + ansi-styles@3.2.1: + dependencies: + color-convert: 1.9.3 + + babel-plugin-jsx-dom-expressions@0.37.21(@babel/core@7.24.7): + dependencies: + '@babel/core': 7.24.7 + '@babel/helper-module-imports': 7.18.6 + '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.7) + '@babel/types': 7.24.7 + html-entities: 2.3.3 + validate-html-nesting: 1.2.2 + + babel-preset-solid@1.8.17(@babel/core@7.24.7): + dependencies: + '@babel/core': 7.24.7 + babel-plugin-jsx-dom-expressions: 0.37.21(@babel/core@7.24.7) + + browserslist@4.23.1: + dependencies: + caniuse-lite: 1.0.30001636 + electron-to-chromium: 1.4.810 + node-releases: 2.0.14 + update-browserslist-db: 1.0.16(browserslist@4.23.1) + + caniuse-lite@1.0.30001636: {} + + chalk@2.4.2: + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-name@1.1.3: {} + + convert-source-map@2.0.0: {} + + csstype@3.1.3: {} + + debug@4.3.5: + dependencies: + ms: 2.1.2 + + electron-to-chromium@1.4.810: {} + + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + + escalade@3.1.2: {} + + escape-string-regexp@1.0.5: {} + + fsevents@2.3.3: + optional: true + + gensync@1.0.0-beta.2: {} + + globals@11.12.0: {} + + has-flag@3.0.0: {} + + html-entities@2.3.3: {} + + is-what@4.1.16: {} + + js-tokens@4.0.0: {} + + jsesc@2.5.2: {} + + json5@2.2.3: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + merge-anything@5.1.7: + dependencies: + is-what: 4.1.16 + + ms@2.1.2: {} + + nanoid@3.3.7: {} + + node-releases@2.0.14: {} + + picocolors@1.0.1: {} + + postcss@8.4.38: + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + + rollup@4.18.0: + dependencies: + '@types/estree': 1.0.5 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.18.0 + '@rollup/rollup-android-arm64': 4.18.0 + '@rollup/rollup-darwin-arm64': 4.18.0 + '@rollup/rollup-darwin-x64': 4.18.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.18.0 + '@rollup/rollup-linux-arm-musleabihf': 4.18.0 + '@rollup/rollup-linux-arm64-gnu': 4.18.0 + '@rollup/rollup-linux-arm64-musl': 4.18.0 + '@rollup/rollup-linux-powerpc64le-gnu': 4.18.0 + '@rollup/rollup-linux-riscv64-gnu': 4.18.0 + '@rollup/rollup-linux-s390x-gnu': 4.18.0 + '@rollup/rollup-linux-x64-gnu': 4.18.0 + '@rollup/rollup-linux-x64-musl': 4.18.0 + '@rollup/rollup-win32-arm64-msvc': 4.18.0 + '@rollup/rollup-win32-ia32-msvc': 4.18.0 + '@rollup/rollup-win32-x64-msvc': 4.18.0 + fsevents: 2.3.3 + + semver@6.3.1: {} + + seroval-plugins@1.0.7(seroval@1.0.7): + dependencies: + seroval: 1.0.7 + + seroval@1.0.7: {} + + solid-js@1.8.17: + dependencies: + csstype: 3.1.3 + seroval: 1.0.7 + seroval-plugins: 1.0.7(seroval@1.0.7) + + solid-refresh@0.6.3(solid-js@1.8.17): + dependencies: + '@babel/generator': 7.24.7 + '@babel/helper-module-imports': 7.24.7 + '@babel/types': 7.24.7 + solid-js: 1.8.17 + transitivePeerDependencies: + - supports-color + + source-map-js@1.2.0: {} + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + to-fast-properties@2.0.0: {} + + typescript@5.5.2: {} + + undici-types@5.26.5: {} + + update-browserslist-db@1.0.16(browserslist@4.23.1): + dependencies: + browserslist: 4.23.1 + escalade: 3.1.2 + picocolors: 1.0.1 + + validate-html-nesting@1.2.2: {} + + vite-plugin-solid@2.10.2(solid-js@1.8.17)(vite@5.3.1(@types/node@20.14.10)): + dependencies: + '@babel/core': 7.24.7 + '@types/babel__core': 7.20.5 + babel-preset-solid: 1.8.17(@babel/core@7.24.7) + merge-anything: 5.1.7 + solid-js: 1.8.17 + solid-refresh: 0.6.3(solid-js@1.8.17) + vite: 5.3.1(@types/node@20.14.10) + vitefu: 0.2.5(vite@5.3.1(@types/node@20.14.10)) + transitivePeerDependencies: + - supports-color + + vite@5.3.1(@types/node@20.14.10): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.38 + rollup: 4.18.0 + optionalDependencies: + '@types/node': 20.14.10 + fsevents: 2.3.3 + + vitefu@0.2.5(vite@5.3.1(@types/node@20.14.10)): + optionalDependencies: + vite: 5.3.1(@types/node@20.14.10) + + yallist@3.1.1: {} diff --git a/public/birthday.png b/public/birthday.png new file mode 100644 index 0000000000000000000000000000000000000000..2b5d88d636bfa47238115edfaa764cfa62148c19 GIT binary patch literal 8419 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 literal 0 HcmV?d00001 diff --git a/public/explod.gif b/public/explod.gif new file mode 100644 index 0000000000000000000000000000000000000000..698f8dbd63132cce75e35c7849adaaff79a28eca GIT binary patch literal 22896 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 E1A%!HEC2ui literal 0 HcmV?d00001 diff --git a/public/explod.mp3 b/public/explod.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..b549a10a959d93b2f131bca4ed85c4bbf0080a16 GIT binary patch literal 29019 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 z zX+l&ikYKcy7j_}71Q@4;xACc9e)wysV$Kw((+ry8o~emX0Z z(ycAc`N4PAVZMxwFM<^pAsMPgeVQ5rzN4H_ar%i!cPfR>KFMTF5dzgp=S_>FiGgx~ zpi(csv6xi8nI_{2k2Q=^6Hkp?n1C6PfY$gl>NOMQt(HdR#8%(dr%1=c{ug{jZzzVs z1I_R6dDlInv56vU9nA&^Twq{&$Z^xOe8Mz`uXZsiX>PEk=n@*kM5i*-^$-zLR~2?ROHRx7!8oZynpbx{a1%y4)M z>J@I%`jK?NXZZhSyGIag=vUyYX;9kiCttv#HI!{Rvb_pZzb7fsJnqNPT0091A}OTE zpVWs9oWw<$1exSR#)kalM|bPS;Q1wLAtKN-J5+G=d(p2c0(Am& z%x#JfD4yeqk9ucLG3H^NX?D-%t7_25Jf}=%Bx`17Lq)(r^ z1(FM-a?oNkj>=v3IAD*CNJZJ8rag-i0h<`1H7nKIWLdp+QVPYk_s?)ilYcq^=cdo{5M$pb|zOEK>`tS#MDLQP_G4ou2!VzwC@DvN=v`T14;(e zzDWOBj?jo=^u4Cnn*FGp6Oh zvrQsI{R_!7VkhGr>uJ@euEXVgd_FFuP~h3QXpye-*L8I7(AF{j@mRy^Z4!;`H9RPd zN&fK962Ugkoe0Y)qf!3YGV1A0C0;jtV|RAC*`LSJSf|u0ztY>Yt17LE_yTzQ@oC%J zxHs|ZMH0cBb9un`tCNU{uyBLlc*Vs@3cMa6tOS@#_;GhX8NGPDx*CC$9mg8*xf(Mm z=a+58_*uT%wN)p1>RWlII+X{!zOv~qLMxo?+H@tw#PZ^$|!)u-evO&m%sl#3a9sZCkcj8H{Z2crR~PH>P=S-+fX;`Rdv!4uFz`?PWazY^Vjs-EE{Jy`#Ea4&-=O>9H*(nk&~^ zYjVTzG}FWy_T^m;mf>EPoI$6YcR~ci$ca^zuxcivHjy=iJKS0f8J zLv1>g6?CMIk9JtV1@q|3tQtkcW6$9JeW6223!aim2OZ<*6hGq><^9G}NZ+tYmgi)G zBhxzK|8!M_F-2I`PA%esIy4o3=_y9ziRNSJlsvRMc{wa3FhdnoVlBsjdeV`)Ggbt9=D z)(H=@CS4~t(MZ?n53}YtNJ{KiDlDuYOl(YQxyRcA1Bx1ZBgwil85#;MlS6ZcyT{?ec}a9~SIuuh9VMZC-AnRnSn~4_c9$Aa5k%lY@ z)u?H*Hb|Cixo0vVAvLih^?2@hxr&u{6V`3^StIC*2&5Oh#Sc z%Q9m#y>hBKdfw2imAYx+W$xZ&jx@@-B9_JBA3Ss+?|ZAQv>QRJJ`~ z)H*o9mQq$`>K(e#3=GHm@p0+KNpg*YJB!33>a+tBd6w^!ytyR9&@0CG{M(Ms?;AgG zg!V10QBE#c>K&3}ZsSWNVdX%cs=~|%ButH9dx8J=l)M#iR1~fDvKZNYRn&c=Jo(JA z$4yy+SM`;X&K9?TQ=juf-KwzVC|u;BB2kC^g|FjO94ds9g?5WKB|Er5H27OWb|4Oc zrg6-Bve|e5)nOZy3EuzEIFwn%9)G&x-+(x1L1&Gkvs#nC`gA~WMUBYsFd+2LZ z_=}3uhKej8LOR+s2A~Py-HYY93V^a+O6YzrM*HxSwiS14`dI;78cS2SS&dgbFLoeQ=^}PFm)< zx4pQ4FC&0~UJL%0%#5@V-qJ0_LEHBm**rPa|rP zbZ+Y>sZ`Yip(j*)dUKFzq$0`Gf<{*^$FS)>C0$Q1tOCNbw?IawvH2soqh!rHomQ>2 z!zBfkiMLH=6Rz_(ps&t((D=DgT$uCh)BKVbN*CP=CympoY9a?9`>>2bv6JC80%cG z)$d|I-zk#{VdV4waA6Gu0X3H?MwW|(^m5QS^Io_@K>Cv1G*vS7QCR?WXsqmf@8?I> zg?-#SJT~l7=>H1X7+>j!E^ZHdM`hcSFZ*P<&zTFTXl zHioskdGZ#lgFZ>YuMjmab!XaU_`dLPVo?LhzA%gM^60rL|KLt_V_~bxR|{_i(QCKs zXBE{4B6lY5t<24}2X_~sAFoCX?(T_t55)+{7{v{Mw@G}VF-A4h9}NlUR<<_;{Lsgq zNQ$C|ICD5t*7A_ttNJ~AUV{~;7ym|=bRPK1JHJo*ryl0#EHpAcpv2>2Y#&MS-Q5-H z_JrHR+YG4Kmw2~-m*E*+)fVl7t$8{S%EA6Id)&bh-m3CP7SP_sZI>ut)Tg8{t1hc}yyPhwvyNBw@ySdxSSuz6%sG=&Old zDi)*f>Sdg;?XiRVRiu67sW5F*_pcHU)RtJeR3b9Pk3Crqd`j_pX-O3$MwL3ZB4!WD0g8vITraef-ek-6ya zQdXVb+4)(Q3NwIQ7W9U8oRG5Pa}HKc3Zsq_VvT`1w#&FUhAJOR^o|2=8A|32VLPLS z&I)w%x3B@e3rPNd7AE%pNAzO2<$zibesg_9TOR-Q#DPuLZfzO;He|j*_}ik;tra+AwEe5n zIiX7ZGSEq~B|(0{3!FhrA`y2WL)+Z?3PcV3@8+(+2foZj; zi(^Q|t+mr{PHHj`aBbG{WGF1Z#y5NS=l}Q3n|oGXP*Dk(r>=Wi`EIQ>Q=tlX+7nY1 zfs4~S(ij&07YgQK5R~LU8sGJxzoGBjh6Ul#%+lFO69iZ+W);ZBTwc=lQ=*?;Dv&{U z&JJVth9fFXXKqfmopmw)wteH~3`X7^s}(-p(a!epWS3XztnQFb+LJTsLg*6des(V7 zazVYmQ(@7<0;zwu=~c;9Yy6Ecm!EdY?XdHN2&M_GoI;-A2N;BByD}Dh?d4sp{?I=_b2{hgQ$X{e1c%`hvr|w$Ag}xH{wF-+k9#dOV7e zii@%j(r%ux%Ut^GoWJcWwqG)7ag?xQ&s^Sjp*VJ;r5$_i%wyNCOnYaz;lRf=7XNCG zSstIYI5(p^eVvYY!KzQUA6$5pemP-AREN=Vr8$=37X$wkT1k0x$G8TVE&G&nV?rxW z7@HX1BgblAi`{V=t|B^jq5~@(r>oemTl#d-(*JTFTq9L zW6FN{k57#D9A(VQW0cj>T-Dwm$0xh)Q4f>mPsw{p@*(G(o@D%*BrNg4Q{Q8{km*+q zkpl8Fhhu#q}30dM?g=wzE`3PrZIIv-okGXcv3utLA5V(^raL3Ana> z+57Uw6IUOK{r%q*V!UvbNbS0;UGHW^pAC?+JsdK(IJh|bP-?1JmZ^yAfBV*BMYeN& zwqDveL#Q?6+!?p2&#!yg@&=tX4pDUre3>_O)3WthuB-OR1})?PtZs zJ0Diqhow}NEI(a1PgRvIEI-*MUpp!7`MaAF9lvFppRMxOsmY14na!W{{O{#uKWo(e z)@*xyaMiXc7N578ocq(=^SFBZm58$YDNL*XmTjKWcec!4WKR5y171#>gdH=0>6^jR L)z4*}Q$iB}TII1G literal 0 HcmV?d00001 diff --git a/public/fjonkie.png b/public/fjonkie.png new file mode 100755 index 0000000000000000000000000000000000000000..15678806830f785839e5c8ec925cd898a33e5b49 GIT binary patch literal 13086 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 UG{XsscL9Kmgra!4==Z??0j@lR^Z)<= literal 0 HcmV?d00001 diff --git a/public/gaybackground.png b/public/gaybackground.png new file mode 100644 index 0000000000000000000000000000000000000000..daf726e0394f7599bf68290d56c7fdc15df9a523 GIT binary patch literal 2326 zcmeAS@N?(olHy`uVBq!ia0y~yU;;9k7&zE~)R&4YzZe)8TQi-V13aCb6$*;-(=u~X z85lGs)=sqbIP4(Nc7Iuxt5%bkNa2Zqxo;LJ^=;*HT_KRw8Yb(b_g8S1iHfFPUsLwM zgY%EBYVO{=j&EI)!Vl(0Zyqdpp`=)#>8wlN#);hhp}xQ&&?^ZnjYR7A`Rb-e=U-k+8BzmCC!wP@H=O_7`m8LNapY)Azju3Q3l@MwB?`=jNv7l`uFLr6!i7rYMwWmSiZn zd-?{1H}Z)yFtGjiba4!+xb^mip=g7FfXhJ^KUOu3f(99x2g+R^CJ6BsGHh9CFhP*v$4nP(# zA|yl8Ie0I0KDArRz#vCL!Gnk|rUNVt2$wqm{XjxAk*FLIat%Ox5N;qPpvf*Wle_<} z3L`hOF(xn(QJmxOkpj@OWI5XbsF8%&Kv>cM)QH0|c%&SjGw<-`<&g?Xk_PH$@O1Ta JS?83{1OUptM!Nt2 literal 0 HcmV?d00001 diff --git a/public/nyaboom.webp b/public/nyaboom.webp new file mode 100644 index 0000000000000000000000000000000000000000..abdbc9fabd569d8fbd9d501abd5b334c07e255df GIT binary patch literal 2210 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 +
+ + (it doesnt) + + +
+ +
+
+ +} + diff --git a/review/index.html b/review/index.html new file mode 100644 index 0000000..2541ba2 --- /dev/null +++ b/review/index.html @@ -0,0 +1,20 @@ + + + + + + + + amy reviews + + + + + + + +
+ + + + \ No newline at end of file diff --git a/review/index.tsx b/review/index.tsx new file mode 100644 index 0000000..f4c685a --- /dev/null +++ b/review/index.tsx @@ -0,0 +1,11 @@ +import { render } from 'solid-js/web' + +import App from './App' + +const root = document.getElementById('reviewroot') + +render(() => ( + <> + + +), root!) diff --git a/review/reviewed.css b/review/reviewed.css new file mode 100644 index 0000000..b667ea8 --- /dev/null +++ b/review/reviewed.css @@ -0,0 +1,54 @@ +textarea { + resize: none; +} + +.parent { + height: 100%; + /* just */ +} + +.reviewOuterparent { + height: 90vh; + display: flex; + flex-direction: row; + justify-content: space-around; +} + +.reviewText { + margin-top: 15%; + color: pink; + margin-bottom: 10%; + font-size: xx-large; + background-color: #1e1e1e; + font-family: monospace; + outline: none; + border: none; + text-align: center; + display: flex; + align-items: center; +} + +.reviewParent { + display: flex; + /* background-color: ; */ + flex-direction: column; + justify-content: center; +} + +.sendButton { + color: pink; + background-color: #0a0a0a; + font-size: 19px; + border: 2px solid #0a0a0a; + padding: 15px 50px; + cursor: pointer +} +.sendButton:hover { + background-color: #2c2c2c; + border: 2px solid #2c2c2c; +} + +.flexButton { + display: flex; + justify-content: center; +} \ No newline at end of file diff --git a/src/App.css b/src/App.css new file mode 100644 index 0000000..fcf7985 --- /dev/null +++ b/src/App.css @@ -0,0 +1,417 @@ +:root { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + /* browsers agreeing on stuff challenge (impossible) */ + background-color: #121212; + font-family: monospace; + overflow-x: hidden; + color: #ffc8dd; +} + +.footer a { + color: #cdb4db; +} + +.footer { + position: fixed; + bottom: 0; + left: 0; + margin: 10px; + z-index: 1000; +} + +.musicartist { + font-weight: bolder; + margin-bottom: 0.5em; +} + +.musicbutton { + background-color: #272525; + color: pink; + font-family: Roboto, sans-serif; + font-weight: 500; + font-size: 14px; + padding: 10px 30px; + box-shadow: none; + border-radius: 5px; + transition: 639ms; + transform: translateY(0); + display: flex; + flex-wrap: wrap; + flex-direction: row; + align-items: center; + cursor: pointer; + border: none; + margin: 1em; +} + +.musicdiv { + background-color: rgba(0, 0, 0, 0.731); + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + z-index: 1500; +} + +.music-close-button-div { + display: flex; + justify-content: end; +} + +.close-button { + padding: 2; + border: none; + background: none; + border-radius: 2px; + background-color: #5e5a5a; + text-decoration: none; + color: pink; + cursor: pointer; + margin: 1em; +} + +.musiclist { + display: flex; + justify-content: space-around; + font-size: larger; + flex-wrap: wrap; + height: 80%; + overflow-x: scroll; +} + +.innermusic { + width: 50%; + height: 50%; + border-radius: 2%; + background: #121212; + z-index: 1000; +} + +.musicbutton:hover { + border-radius: 5px; + transition: 639ms; + padding: 10px 30px; + transform: translateY(-1px); + border: none; + box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); + -webkit-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); + -moz-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); + background-color: #5e5a5a; + animation: big 500ms infinite; + transform: translateY(-0.3em); + transition: + background-color 1s, + transform 0.5s, + box-shadow 0.5s, + -webkit-box-shadow 0.5s, + -moz-box-shadow 0.5s; +} + +.actualreviewdiv { + overflow-y: scroll; + height: 18em; +} + +.cardchild:hover + .actualreviewdiv { + transition: 1s; + transform: rotateY(100); +} + +.header { + margin-top: 6em; + display: flex; + align-items: center; + justify-content: center; +} + +.cardchild h1:not(:has(.listeningto)) { + font-size: 3em; + text-align: center; +} + +.reviewheadertext { + margin-bottom: -0.2em; +} + +.cardchild p { + margin-bottom: -1.5em; +} + +.cardchild a { + font-size: 1.5em; + text-align: center; + color: pink; + text-decoration: underline; + margin-bottom: 0%; + .fadein { + animation: spawntop 1s; + } +} + +.cardchild span { + font-size: 1.5em; +} + +.cardchild img { + max-width: 5em; + margin: 0.5em; +} + +.cardchild:hover::-webkit-scrollbar { + display: none; +} + +/* CAN BROWSERS JUST AGREE ON ONE FUCKING THING */ + +.cardchild { + -ms-overflow-style: none; + scrollbar-width: none; + cursor: default; + background-color: #272525; + border-radius: 5%; + width: 25em; + height: 25em; + margin-top: 1em; + padding: 0.5em 5em 2em 5em; + transform: translateY(-0em); + transition: + background-color 1s, + transform 0.5s, + box-shadow 0.5s, + -webkit-box-shadow 0.5s, + -moz-box-shadow 0.5s; +} + +.theeaster { + color: pink; + padding: 8px; + font-size: 21px; + text-align: center; + border-width: 0; + background-color: #5555557a; + border-style: solid; + border-radius: 11px; +} + +.theeaster:focus { + border-color: pink; + box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); + -webkit-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); + -moz-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); + transition: 0.5s; +} + +.easteregg { + display: flex; + flex-wrap: wrap; + justify-content: center; +} + +.easteregginner { + width: 70%; + background-color: #272525; + height: 10em; +} + +.cardchild:hover { + box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); + -webkit-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); + -moz-box-shadow: 0 0 534px -3px rgba(250, 236, 236, 0.4); + background-color: #5e5a5a; + animation: big 500ms infinite; + transform: translateY(-0.3em); + transition: + background-color 1s, + transform 0.5s, + box-shadow 0.5s, + -webkit-box-shadow 0.5s, + -moz-box-shadow 0.5s; +} + +.linktree { + display: flex; + justify-content: space-around; +} + +.linktree img { + cursor: pointer; +} + +.singlereview img { + border-radius: 12%; +} + +.singlereview { + margin: 1em; + border-radius: 3%; + background-color: #00000040; + display: flex; + align-items: flex-start; +} + +.cssishard { + background-color: #121212; +} + +.singlemusic { + cursor: pointer; + min-width: 15em; + max-width: 15em; + word-wrap: anywhere; + margin: 1em; + padding: 1em; + border-radius: 3%; + background-color: #272525; + display: flex; + align-items: flex-start; +} + +.singlemusic img { + max-width: 5em; +} + +.innermusic { + display: flex; + flex-direction: column; +} + +.reviewname { + margin-bottom: 0.1em; + font-weight: bolder; +} + +.reviewinfo { + display: flex; + flex-direction: column; +} + +.reviewname { + margin-bottom: 0.1em; + font-weight: bolder; +} + +.parent { + width: 100%; + height: 100%; + display: flex; + flex-wrap: wrap; + justify-content: space-evenly; +} + +.header h1 { + font-size: 3.6em; + color: blanchedalmond; + display: inline-table; +} + +.cardchild h2 { + display: inline-table; + vertical-align: text-bottom; +} + +.header h1:not(:active) { + animation: slide-right 1.5s; +} + +.header h1:hover { + animation: shake 10ms infinite; +} + +.header img { + border-radius: 25%; + margin-right: 1em; + vertical-align: middle; + max-width: 10em; +} + +.initialanim { + animation: slide-left 1.5s; +} + +.gaybackground { + background-image: url("/gaybackground.png"); +} + +.animate { + z-index: 10000000; + transform: scale(10000); + transition: 20s; +} + +@keyframes slide-left { + from { + transform: translateX(-10000em); + } + + to { + transform: translateX(0); + } +} + +@keyframes slide-right { + from { + transform: translateX(10000em); + } + + to { + transform: translateX(0); + } +} + +@keyframes bigsmall { + 0% { + max-width: 10em; + } + + 50% { + width: 10.5em; + max-width: 10.5em; + } + + 100% { + max-width: 10em; + } +} + +@keyframes spawntop { + 0% { + opacity: 0%; + transform: translateY(1em); + } + + 100% { + opacity: 100%; + transform: translateY(0); + } +} + +@keyframes shake { + 0% { + transform: translate(0, 0) rotate(0deg); + } + + 25% { + transform: translate(5px, 5px) rotate(5deg); + } + + 50% { + transform: translate(0, 0) rotate(0eg); + } + + 75% { + transform: translate(-5px, 5px) rotate(-5deg); + } + + 100% { + transform: translate(0, 0) rotate(0deg); + } +} diff --git a/src/App.tsx b/src/App.tsx new file mode 100644 index 0000000..8cb93de --- /dev/null +++ b/src/App.tsx @@ -0,0 +1,255 @@ +import './App.css' +import {AdvancedBr, Singular88, SingularOomfie} from './components/comps.tsx' +import {createSignal, onMount} from 'solid-js'; +import Reviews from './components/api.tsx'; +import Music, {MusicEntry} from './components/music.tsx'; +import {Bdpfp, Normalpfp} from './components/pfp.tsx'; +import {InfoCard} from './components/middlecard.tsx'; + +export const [shouldpopup, setpopup] = createSignal(false) +export const [shouldpopup88, setpopup88] = createSignal(false) +export const [shouldpopupEasterEgg, setpopupEasterEgg] = createSignal(false) +export const [ishover, setishover] = createSignal(false) + +let explodcount = 0 +const isitmybd = () => new Date().toISOString().slice(5, 10) === '08-22'; + +function getRandomVivsieWord() { + const words = [ + "fuck", + "shit", + "pussy", + "penis", + "dick" + ] + return words[Math.floor(Math.random() * words.length)] +} + +function vivsiepop() { + const blep = document.body.childNodes; + + function fuckshit(node: ChildNode) { + if (node.nodeType === Node.TEXT_NODE) { + node.textContent = getRandomVivsieWord(); + } else { + node.childNodes.forEach(fuckshit); + } + } + + blep.forEach(fuckshit) +} + +function nyaboom() { + explodcount++ + const blep = document.body.childNodes; + + function fuckshit(node: ChildNode) { + if (node.nodeType === Node.TEXT_NODE) { + (node as Element).textContent = '' + node.parentElement?.appendChild( as Element) + } else if (node instanceof HTMLImageElement) { + node.src = "./explod.gif" + } else { + node.childNodes.forEach(fuckshit); + } + } + + blep.forEach(fuckshit) +} + +function App() { + + const [musicList, setMusicList] = createSignal([]); + const [isLoading, setIsLoading] = createSignal(true); + const [oomfies, setoomfies] = createSignal(<>oomfies) + const [isAnimating, setIsAnimating] = createSignal(false); + onMount(async () => { + try { + const response = await fetch("https://imtoolazytomakeaproperapi.exhq.dev/"); + const data = await response.json(); + setMusicList(data); + } catch (error) { + console.error("Error fetching music data:", error); + } finally { + setIsLoading(false); + } + }); + let gitgay = { + setIsAnimating(true) + setTimeout(() => { + window.location.href = "https://git.lgbt/exhq" + }, 200); + gitgay.src = "/gaybackground.png" + }} classList={{'gitgayimg': true, 'animate': isAnimating(), 'gaybackground': isAnimating()}} + src="https://proxy.spiro.exhq.dev/_/plain/https://git.lgbt/assets/img/logo.png" + alt="logo of git.lgbt"/> as HTMLImageElement + // @ts-ignore + return ( + <> + {isitmybd() ? : + } + +

AdvancedBr my beloved

+ + + +
+
+

link tree

+
+ {gitgay} + +
+
+
+ Git +
+
+ +
+ + +
+
{ + setishover(true) + }} + onmouseleave={() => { + setishover(false) + }} + style={{ + opacity: isAnimating() ? "0%" : "100%" + }} class='cardchild'> + +
+
+ +
+
{ + setpopup(!shouldpopup()) + }}> +

typa shit ive been on

+
+
+
{ + setoomfies( + <> + + + + + + + + + + + + ) + }}> {oomfies()}
+
+
+

echo if it was written by vivsiepop

+
+
{ + setpopup88(true) + }}> +

88x31's

+
+
{ + if (explodcount > 5) { + document.body.innerHTML = "" + setTimeout(() => { + alert("sorry bud, you exploded so much that my document.body is gon") + }, 500) + } else { + new Audio("./explod.mp3").play() + nyaboom() + } + }}> + +
+
+ + +
+
+
+ +
+
+ {isLoading() ? ( +

Loading...

+ ) : ( + musicList().map((link) => ) + )} +
+
+
+
+ +
+
+
+ +
+ +
+
+
+ +
+
+
+ +
+
+ +
+ feel free to link mine, https://exhq.dev/88x31.png +
+
+ + + +
+
+
+
+ + + + ) +} + +export default App diff --git a/src/components/api.tsx b/src/components/api.tsx new file mode 100644 index 0000000..373b96b --- /dev/null +++ b/src/components/api.tsx @@ -0,0 +1,115 @@ +import {createSignal, onMount} from "solid-js" +import {ishover} from "../App"; + +interface Review { + reviewID: number; + discordID: string; + reviewText: string; + timestamp: string; +} + +interface NeoReview extends Review { + global_name: string; + username: string +} + + +export default function Reviews() { + const [reviews, setReviews] = createSignal([]); + onMount(() => { + fetch("https://review.exhq.dev/getreviews") + .then(response => response.json()) + .then((data: Review[]) => { + const promises = data.map(review => ( + fetch(`https://dc-lookup.spiro.exhq.dev/v1/user/${review.discordID}`) + .then(response => response.json()) + .then(user => ({ + ...review, + global_name: user.global_name, + username: user.username + })) + )); + + Promise.all(promises) + .then(yeah => { + setReviews(yeah); + }) + .catch(error => console.error("Error fetching Discord user data:", error)); + }) + .catch(error => console.error("Error fetching reviews:", error)); + }); + + + return ( + <> + +

add your reviews here

+
+

Reviews

+
+ {reviews().length > 0 ? ( + reviews().reverse().map((review) => ( +
+ +
+ )) + ) : ( +
Loading reviews...
+ )} +
+ + + ) +} + + +export const theImager = async (id: string): Promise => (await fetch(`https://dc-lookup.spiro.exhq.dev/v1/user/${id}`) + .then(res => res.json()).then(data => "https://proxy.spiro.exhq.dev/_/plain/"+data.avatar.link).catch(() => "https://http.cat/status/100")); + +function SingleReview(props: NeoReview) { + const [imageSrc, setImageSrc] = createSignal(""); + + onMount(async () => { + const url = await theImager(props.discordID); + setImageSrc(url); + }); + + return ( +
+ User Avatar +
+
+ {props.global_name === null ? props.username : props.global_name} +
+
{props.reviewText}
+
+
+ ); +} + +export async function sendReview(review: string, token: string): Promise { + try { + const response = await fetch(`https://review.exhq.dev/sendreview?review=${review}`, { + headers: { + "Auth": token, + }, + method: "POST" + }); + + if (response.status !== 200) { + return false; + } + + return true; + } catch (error) { + return false; + } +} \ No newline at end of file diff --git a/src/components/comps.css b/src/components/comps.css new file mode 100644 index 0000000..58e2e0f --- /dev/null +++ b/src/components/comps.css @@ -0,0 +1,9 @@ + +.tooltip:hover { + max-width: 4em !important; +} + +.tooltip { + animation: ease-in-out 2s infinite; + padding: 1em; +} \ No newline at end of file diff --git a/src/components/comps.tsx b/src/components/comps.tsx new file mode 100644 index 0000000..ab6049a --- /dev/null +++ b/src/components/comps.tsx @@ -0,0 +1,67 @@ +import { createSignal, onMount } from "solid-js"; +import { theImager } from "./api" +import "./comps.css" +// warning: this IS horrible code. its a joke. DO NOT try this at home because +// your local senior programmer CAN and WILL hunt you down +// you have been warned. +export function AdvancedBr({ count }: { count: number }) { + return new Array(count).fill(null).map(_ => (
)) +} + +export function SingularOomfie(props: { name: string; url: string; discordid: string }) { + const [imageSrc, setImageSrc] = createSignal(""); + const [showTooltip, setShowTooltip] = createSignal(false); + + onMount(async () => { + const url = await theImager(props.discordid); + setImageSrc(url); + }); + + const handleMouseMove = () => { + setShowTooltip(true); + }; + + const handleMouseLeave = () => { + setShowTooltip(false); + }; + + return ( +
+ + {"profile + + {showTooltip() && ( +
+ {props.name} +
+ )} +
+ ); +} + + +export function Singular88(props: { name: string; url: string; src:string }) { + return {props.name} +} \ No newline at end of file diff --git a/src/components/cumbrainz.css b/src/components/cumbrainz.css new file mode 100644 index 0000000..b0fafac --- /dev/null +++ b/src/components/cumbrainz.css @@ -0,0 +1,6 @@ +.listeningto { + font-size: smaller; + display: flex; + justify-content: center; + flex-direction: column; +} \ No newline at end of file diff --git a/src/components/cumbrainz.tsx b/src/components/cumbrainz.tsx new file mode 100644 index 0000000..16e8842 --- /dev/null +++ b/src/components/cumbrainz.tsx @@ -0,0 +1,65 @@ +import {createSignal, onMount, Show} from "solid-js"; +import "./cumbrainz.css" + + +interface ListenPayload { + payload: { + count: number; + listens: Listen[]; + playing_now: boolean; + user_id: string; + }; +} + +interface Listen { + playing_now: boolean; + track_metadata: TrackMetadata; +} + +interface TrackMetadata { + additional_info: AdditionalInfo; + artist_name: string; + release_name: string; + track_name: string; +} + +interface AdditionalInfo { + duration: number; + music_service_name: string; + origin_url: string; + submission_client: string; + submission_client_version: string; +} + +export function Cumbrainz() { + const [musicInfo, setMusicInfo] = createSignal({} as ListenPayload); + const [isLoading, setIsLoading] = createSignal(true); + onMount(async () => { + try { + const the = await fetch("https://music.exhq.dev/") + const thejson = await the.json() + setMusicInfo(thejson) + } catch (error) { + console.error("Error fetching music data from song.link:", error); + } finally { + setIsLoading(false); + } + }) + return
+

Listening to

+ 0} fallback={nothing}> + + + }> + loading + +
+} + +function Thesong({song}: { song: ListenPayload }) { + return `?v=${new URLSearchParams(m).get('v') ?? ''}`).replace(/(\?v=)$/, '')}> +
{song.payload.listens[0].track_metadata.artist_name} - {song.payload.listens[0].track_metadata.track_name}
+
+} \ No newline at end of file diff --git a/src/components/events.tsx b/src/components/events.tsx new file mode 100644 index 0000000..cbc93fb --- /dev/null +++ b/src/components/events.tsx @@ -0,0 +1,21 @@ +import { onMount } from 'solid-js'; + +const ReloadOnBack = () => { + const handlePageShow = (event: Event) => { + const pageshowEvent = event as PageTransitionEvent; + if (pageshowEvent.persisted) { + window.location.reload(); + } + }; + + onMount(() => { + window.addEventListener('pageshow', handlePageShow); + return () => { + window.removeEventListener('pageshow', handlePageShow); + }; + }); + + return null; +}; + +export default ReloadOnBack; \ No newline at end of file diff --git a/src/components/middlecard.css b/src/components/middlecard.css new file mode 100644 index 0000000..7a5f1fe --- /dev/null +++ b/src/components/middlecard.css @@ -0,0 +1,11 @@ +.middleparent { + display: flex; + flex-direction: column; + justify-content: space-evenly; + width: 100%; + height: 100%; +} + +.middlechild { + text-align: center; +} \ No newline at end of file diff --git a/src/components/middlecard.tsx b/src/components/middlecard.tsx new file mode 100644 index 0000000..b872c05 --- /dev/null +++ b/src/components/middlecard.tsx @@ -0,0 +1,33 @@ +import { Cumbrainz } from "./cumbrainz" +import "./middlecard.css" +export interface InfoCardProps { + bd: boolean +} + +export function InfoCard(props: InfoCardProps) { + + return
+
{ + props.bd ? + <> + + its my birthday +
+ please buy me stuff +
+ : <> + silly goober who does silly stuff +
+ self proclaimed programmer and progamer +
+ shitposts for fun +
+ }
+
+
+
+
+ +
+
+} \ No newline at end of file diff --git a/src/components/music.tsx b/src/components/music.tsx new file mode 100644 index 0000000..6a3d476 --- /dev/null +++ b/src/components/music.tsx @@ -0,0 +1,47 @@ +import { createSignal, onMount } from "solid-js"; + +export default function Music(props: { shouldpopup: () => boolean, children: any }) { + return
+ {props.children} +
+} + +export function MusicEntry({ spotifylink }: { spotifylink: string }) { + const [musicInfo, setMusicInfo] = createSignal({}) as any; + const [isLoading, setIsLoading] = createSignal(true); + onMount(async () => { + try { + const apiresponse = await fetch(`https://corsisdum.exhq.dev/v1-alpha.1/links?url=spotify%253Atrack%253A${spotifylink}`) + const data = await apiresponse.json() + setMusicInfo(data) + } catch (error) { + console.error("Error fetching music data from song.link:", error); + } finally { + setIsLoading(false); + } + }) + return ( + <>{isLoading() ? ( +

Loading...

+ ) : ( +
{ + document.location.href = musicInfo().pageUrl + }} class="singlemusic"> + {"album +
+
{ + musicInfo().entitiesByUniqueId[`SPOTIFY_SONG::${spotifylink}`]?.artistName?.length > 43 ? musicInfo().entitiesByUniqueId[`SPOTIFY_SONG::${spotifylink}`]?.artistName.substring(0, 30) + "..." : musicInfo().entitiesByUniqueId[`SPOTIFY_SONG::${spotifylink}`]?.artistName + }
+
{ + musicInfo().entitiesByUniqueId[`SPOTIFY_SONG::${spotifylink}`]?.title?.length > 43 ? musicInfo().entitiesByUniqueId[`SPOTIFY_SONG::${spotifylink}`]?.title.substring(0, 30) + "..." : musicInfo().entitiesByUniqueId[`SPOTIFY_SONG::${spotifylink}`]?.title + }
+
+
+ )} + ) +} \ No newline at end of file diff --git a/src/components/name.tsx b/src/components/name.tsx new file mode 100644 index 0000000..5048803 --- /dev/null +++ b/src/components/name.tsx @@ -0,0 +1,31 @@ +// import { createSignal, onCleanup } from "solid-js"; +import { onCleanup } from "solid-js"; +import { removethething } from "./utils.tsx"; + +function HoverComponent() { + let timerId: number | null; + + const clearTimer = () => { + if (timerId) { + clearTimeout(timerId); + timerId = null; + } + }; + + onCleanup(() => { + clearTimer(); + }); + + return ( +

{ + removethething(); + }} + > + Amy +

+ ); +} + +export default HoverComponent; diff --git a/src/components/pfp.css b/src/components/pfp.css new file mode 100644 index 0000000..1dec520 --- /dev/null +++ b/src/components/pfp.css @@ -0,0 +1,40 @@ +.birthdayparent { + position: relative; +} + +@keyframes rotateAnimation { + from { + transform: rotateY(0deg); + } + to { + transform: rotateY(360deg); + } +} + +.rotate { + animation: rotateAnimation 0.5s ease-in-out forwards; +} + +.header .bd { + flex-direction: column; + margin-left: 10em; +} + +.birthday { + position: absolute; + top: 0; + left: 0; + margin-left: -12em; +} + +.birthdaypfp { + z-index: 1; + max-width: 10em; +} + +.birthdayhat { + z-index: 2; + width: 14em; + top: -3em; + left: -1em; +} \ No newline at end of file diff --git a/src/components/pfp.tsx b/src/components/pfp.tsx new file mode 100644 index 0000000..e68581a --- /dev/null +++ b/src/components/pfp.tsx @@ -0,0 +1,69 @@ +import HoverComponent from "./name"; +import "./pfp.css"; + +export function Bdpfp({ + setpopupEasterEgg, +}: { + setpopupEasterEgg: (value: boolean) => void; +}) { + return ( +
{ + e.preventDefault(); + setpopupEasterEgg(true); + }} + class="header bd" + > +
+ amy's current discord pfp, with a birthday hat on it + + +
+
+ ); +} + +export function Normalpfp({ + setpopupEasterEgg, +}: { + setpopupEasterEgg: (value: boolean) => void; +}) { + return ( +
{ + e.preventDefault(); + setpopupEasterEgg(true); + }} + class="birthdayparent header normal" + > + amy's current discord pfp { + (e.target as HTMLImageElement).animate( + [{ transform: "rotateZ(0deg)" }, { transform: "rotateZ(360deg)" }], + { + duration: 400, + iterations: 1, + }, + ); + }} + onClick={(e) => { + (e.target as HTMLImageElement).animate( + [{ transform: "rotateY(0deg)" }, { transform: "rotateY(360deg)" }], + { + duration: 150, + iterations: 1, + }, + ); + }} + /> + +
+ ); +} diff --git a/src/components/utils.tsx b/src/components/utils.tsx new file mode 100644 index 0000000..a7a9d4b --- /dev/null +++ b/src/components/utils.tsx @@ -0,0 +1,35 @@ +export function removethething() { + for (let i = 0; i < document.styleSheets.length; i++) { + let styleSheet = document.styleSheets[i]; + let rules = styleSheet.cssRules || styleSheet.rules; + for (let j = 0; j < rules.length; j++) { + let rule = rules[j]; + if (rule.type === CSSRule.KEYFRAMES_RULE && ((rule as CSSKeyframesRule).name === "slide-right" )) { + styleSheet.deleteRule(j); + } + } + } +} + +// export interface song { +// entitiesByUniqueId: { + +// } +// } + +export async function getLatestItems(apiUrl: string) { + try { + const response = await fetch(apiUrl); + if (!response.ok) { + throw new Error(`API call failed with status ${response.status}`); + } + const data = await response.json(); + if (!Array.isArray(data)) { + throw new Error('API response is not an array'); + } + const lastFive = data.slice(-5); + return lastFive; + } catch (error) { + console.error('Error fetching data:', error); + } +} diff --git a/src/index.tsx b/src/index.tsx new file mode 100644 index 0000000..6ec1f29 --- /dev/null +++ b/src/index.tsx @@ -0,0 +1,14 @@ +/* @refresh reload */ +import { render } from 'solid-js/web' + +import App from './App' +import ReloadOnBack from './components/events' + +const root = document.getElementById('root') + +render(() => ( + <> + + + +), root!) diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/tsconfig.app.json b/tsconfig.app.json new file mode 100644 index 0000000..1c88222 --- /dev/null +++ b/tsconfig.app.json @@ -0,0 +1,28 @@ +{ + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "target": "ES2020", + "useDefineForClassFields": true, + "module": "ESNext", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "preserve", + "jsxImportSource": "solid-js", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src", "hacked", "review"] +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..ea9d0cd --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,11 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.node.json" + } + ] +} diff --git a/tsconfig.node.json b/tsconfig.node.json new file mode 100644 index 0000000..3afdd6e --- /dev/null +++ b/tsconfig.node.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "composite": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true, + "strict": true, + "noEmit": true + }, + "include": ["vite.config.ts"] +} diff --git a/vite.config.ts b/vite.config.ts new file mode 100644 index 0000000..bd40f52 --- /dev/null +++ b/vite.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'vite' +import { resolve } from 'path' +import solid from 'vite-plugin-solid' + +export default defineConfig({ + build: { + rollupOptions: { + input: { + main: resolve(__dirname, 'index.html'), + hacked: resolve(__dirname, 'hacked/index.html'), + review: resolve(__dirname, 'review/index.html') + } + } + }, + plugins: [solid()], +})