commit b5a4c0a601cb564485cc04e366054a8954774ffe Author: amy Date: Tue Dec 24 16:32:54 2024 +0330 first commit 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 0000000..2b5d88d Binary files /dev/null and b/public/birthday.png differ diff --git a/public/explod.gif b/public/explod.gif new file mode 100644 index 0000000..698f8db Binary files /dev/null and b/public/explod.gif differ diff --git a/public/explod.mp3 b/public/explod.mp3 new file mode 100644 index 0000000..b549a10 Binary files /dev/null and b/public/explod.mp3 differ diff --git a/public/fireemoji.png b/public/fireemoji.png new file mode 100644 index 0000000..717523f Binary files /dev/null and b/public/fireemoji.png differ diff --git a/public/fjonkie.png b/public/fjonkie.png new file mode 100755 index 0000000..1567880 Binary files /dev/null and b/public/fjonkie.png differ diff --git a/public/gaybackground.png b/public/gaybackground.png new file mode 100644 index 0000000..daf726e Binary files /dev/null and b/public/gaybackground.png differ diff --git a/public/nyaboom.webp b/public/nyaboom.webp new file mode 100644 index 0000000..abdbc9f Binary files /dev/null and b/public/nyaboom.webp differ diff --git a/review/App.tsx b/review/App.tsx new file mode 100644 index 0000000..bc02f33 --- /dev/null +++ b/review/App.tsx @@ -0,0 +1,51 @@ +import '../src/App.css' +import "./reviewed.css" +import { sendReview } from '../src/components/api' + +export default function App() { + const token = window.location.hash.substring(window.location.hash.indexOf("access_token") + "access_token".length + 1).substring(0, 30) + console.log(token) + if (token === "") { + window.location.href = "https://discord.com/oauth2/authorize?client_id=1208380910525743134&response_type=token&redirect_uri=https%3A%2F%2Fexhq.dev%2Freview%2F&scope=identify" + } + let ref!: HTMLTextAreaElement; + return
+
+ + (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()], +})