From ae3e95a0c357a1bf824fbce7f5e6bb94e53a667a Mon Sep 17 00:00:00 2001 From: powermaker450 Date: Sun, 15 Sep 2024 23:04:32 -0400 Subject: [PATCH] Add /about --- package.json | 4 +- pnpm-lock.yaml | 993 ++++++++++++++++----------------- public/server.png | Bin 0 -> 34571 bytes public/three-dots.svg | 15 + src/App.tsx | 30 +- src/components/ButtonRow.tsx | 28 +- src/components/Description.tsx | 16 +- src/components/DoubleSpace.tsx | 8 + src/components/Header.tsx | 16 +- src/components/Message.tsx | 11 +- src/components/Title.tsx | 23 +- src/components/index.ts | 1 + src/index.css | 42 +- src/keyframes.css | 8 + src/main.tsx | 5 +- src/pages/About.tsx | 45 ++ src/pages/Main.tsx | 85 +-- src/pages/SelfHosting.tsx | 76 +++ src/pages/index.ts | 1 - src/types.ts | 12 + 20 files changed, 835 insertions(+), 584 deletions(-) create mode 100644 public/server.png create mode 100644 public/three-dots.svg create mode 100644 src/components/DoubleSpace.tsx create mode 100644 src/pages/About.tsx create mode 100644 src/pages/SelfHosting.tsx delete mode 100644 src/pages/index.ts create mode 100644 src/types.ts diff --git a/package.json b/package.json index 5e4ca90..87aa989 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,10 @@ "preview": "vite preview" }, "dependencies": { + "@types/react-router-dom": "^5.3.3", "react": "^18.2.0", - "react-dom": "^18.2.0" + "react-dom": "^18.2.0", + "react-router-dom": "^6.26.2" }, "devDependencies": { "@types/react": "^18.0.27", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5175e8e..f275804 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,326 +1,576 @@ -lockfileVersion: '9.0' +lockfileVersion: '6.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -importers: +dependencies: + '@types/react-router-dom': + specifier: ^5.3.3 + version: 5.3.3 + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) + react-router-dom: + specifier: ^6.26.2 + version: 6.26.2(react-dom@18.3.1)(react@18.3.1) - .: - dependencies: - react: - specifier: ^18.2.0 - version: 18.3.1 - react-dom: - specifier: ^18.2.0 - version: 18.3.1(react@18.3.1) - devDependencies: - '@types/react': - specifier: ^18.0.27 - version: 18.3.3 - '@types/react-dom': - specifier: ^18.0.10 - version: 18.3.0 - '@vitejs/plugin-react': - specifier: ^3.1.0 - version: 3.1.0(vite@4.5.3) - prettier: - specifier: ^3.3.3 - version: 3.3.3 - typescript: - specifier: ^4.9.3 - version: 4.9.5 - vite: - specifier: ^4.1.0 - version: 4.5.3 +devDependencies: + '@types/react': + specifier: ^18.0.27 + version: 18.3.3 + '@types/react-dom': + specifier: ^18.0.10 + version: 18.3.0 + '@vitejs/plugin-react': + specifier: ^3.1.0 + version: 3.1.0(vite@4.5.3) + prettier: + specifier: ^3.3.3 + version: 3.3.3 + typescript: + specifier: ^4.9.3 + version: 4.9.5 + vite: + specifier: ^4.1.0 + version: 4.5.3 packages: - '@ampproject/remapping@2.3.0': + /@ampproject/remapping@2.3.0: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + dev: true - '@babel/code-frame@7.24.7': + /@babel/code-frame@7.24.7: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.24.7 + picocolors: 1.0.1 + dev: true - '@babel/compat-data@7.25.2': + /@babel/compat-data@7.25.2: resolution: {integrity: sha512-bYcppcpKBvX4znYaPEeFau03bp89ShqNMLs+rmdptMw+heSZh9+z84d2YG+K7cYLbWwzdjtDoW/uqZmPjulClQ==} engines: {node: '>=6.9.0'} + dev: true - '@babel/core@7.25.2': + /@babel/core@7.25.2: resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/helper-compilation-targets': 7.25.2 + '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) + '@babel/helpers': 7.25.0 + '@babel/parser': 7.25.3 + '@babel/template': 7.25.0 + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + convert-source-map: 2.0.0 + debug: 4.3.6 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/generator@7.25.0': + /@babel/generator@7.25.0: resolution: {integrity: sha512-3LEEcj3PVW8pW2R1SR1M89g/qrYk/m/mB/tLqn7dn4sbBUQyTqnlod+II2U4dqiGtUmkcnAmkMDralTFZttRiw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.25.2 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 2.5.2 + dev: true - '@babel/helper-compilation-targets@7.25.2': + /@babel/helper-compilation-targets@7.25.2: resolution: {integrity: sha512-U2U5LsSaZ7TAt3cfaymQ8WHh0pxvdHoEk6HVpaexxixjyEquMh0L0YNJNM6CTGKMXV1iksi0iZkGw4AcFkPaaw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.25.2 + '@babel/helper-validator-option': 7.24.8 + browserslist: 4.23.3 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true - '@babel/helper-module-imports@7.24.7': + /@babel/helper-module-imports@7.24.7: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/helper-module-transforms@7.25.2': + /@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2): resolution: {integrity: sha512-BjyRAbix6j/wv83ftcVJmBt72QtHI56C7JXZoG2xATiLpmoC7dpd8WnkikExHDVPpi/3qCmO6WY1EaXOluiecQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-module-imports': 7.24.7 + '@babel/helper-simple-access': 7.24.7 + '@babel/helper-validator-identifier': 7.24.7 + '@babel/traverse': 7.25.3 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/helper-plugin-utils@7.24.8': + /@babel/helper-plugin-utils@7.24.8: resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-simple-access@7.24.7': + /@babel/helper-simple-access@7.24.7: resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.3 + '@babel/types': 7.25.2 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/helper-string-parser@7.24.8': + /@babel/helper-string-parser@7.24.8: resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-validator-identifier@7.24.7': + /@babel/helper-validator-identifier@7.24.7: resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} + dev: true - '@babel/helper-validator-option@7.24.8': + /@babel/helper-validator-option@7.24.8: resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} engines: {node: '>=6.9.0'} + dev: true - '@babel/helpers@7.25.0': + /@babel/helpers@7.25.0: resolution: {integrity: sha512-MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + dev: true - '@babel/highlight@7.24.7': + /@babel/highlight@7.24.7: resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.24.7 + chalk: 2.4.2 + js-tokens: 4.0.0 + picocolors: 1.0.1 + dev: true - '@babel/parser@7.25.3': + /@babel/parser@7.25.3: resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} engines: {node: '>=6.0.0'} hasBin: true + dependencies: + '@babel/types': 7.25.2 + dev: true - '@babel/plugin-transform-react-jsx-self@7.24.7': + /@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2): resolution: {integrity: sha512-fOPQYbGSgH0HUp4UJO4sMBFjY6DuWq+2i8rixyUMb3CdGixs/gccURvYOAhajBdKDoGajFr3mUq5rH3phtkGzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/plugin-transform-react-jsx-source@7.24.7': + /@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2): resolution: {integrity: sha512-J2z+MWzZHVOemyLweMqngXrgGC42jQ//R0KdxqkIz/OrbVIIlhFI3WigZ5fO+nwFvBlncr4MGapd8vTyc7RPNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.25.2 + '@babel/helper-plugin-utils': 7.24.8 + dev: true - '@babel/template@7.25.0': + /@babel/template@7.25.0: resolution: {integrity: sha512-aOOgh1/5XzKvg1jvVz7AVrx2piJ2XBi227DHmbY6y+bM9H2FlN+IfecYu4Xl0cNiiVejlsCri89LUsbj8vJD9Q==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/parser': 7.25.3 + '@babel/types': 7.25.2 + dev: true - '@babel/traverse@7.25.3': + /@babel/traverse@7.25.3: resolution: {integrity: sha512-HefgyP1x754oGCsKmV5reSmtV7IXj/kpaE1XYY+D9G5PvKKoFfSbiS4M77MdjuwlZKDIKFCffq9rPU+H/s3ZdQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.25.0 + '@babel/parser': 7.25.3 + '@babel/template': 7.25.0 + '@babel/types': 7.25.2 + debug: 4.3.6 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true - '@babel/types@7.25.2': + /@babel/types@7.25.2: resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.24.8 + '@babel/helper-validator-identifier': 7.24.7 + to-fast-properties: 2.0.0 + dev: true - '@esbuild/android-arm64@0.18.20': + /@esbuild/android-arm64@0.18.20: resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] + requiresBuild: true + dev: true + optional: true - '@esbuild/android-arm@0.18.20': + /@esbuild/android-arm@0.18.20: resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==} engines: {node: '>=12'} cpu: [arm] os: [android] + requiresBuild: true + dev: true + optional: true - '@esbuild/android-x64@0.18.20': + /@esbuild/android-x64@0.18.20: resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==} engines: {node: '>=12'} cpu: [x64] os: [android] + requiresBuild: true + dev: true + optional: true - '@esbuild/darwin-arm64@0.18.20': + /@esbuild/darwin-arm64@0.18.20: resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] + requiresBuild: true + dev: true + optional: true - '@esbuild/darwin-x64@0.18.20': + /@esbuild/darwin-x64@0.18.20: resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==} engines: {node: '>=12'} cpu: [x64] os: [darwin] + requiresBuild: true + dev: true + optional: true - '@esbuild/freebsd-arm64@0.18.20': + /@esbuild/freebsd-arm64@0.18.20: resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/freebsd-x64@0.18.20': + /@esbuild/freebsd-x64@0.18.20: resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-arm64@0.18.20': + /@esbuild/linux-arm64@0.18.20: resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==} engines: {node: '>=12'} cpu: [arm64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-arm@0.18.20': + /@esbuild/linux-arm@0.18.20: resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==} engines: {node: '>=12'} cpu: [arm] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-ia32@0.18.20': + /@esbuild/linux-ia32@0.18.20: resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==} engines: {node: '>=12'} cpu: [ia32] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-loong64@0.18.20': + /@esbuild/linux-loong64@0.18.20: resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-mips64el@0.18.20': + /@esbuild/linux-mips64el@0.18.20: resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-ppc64@0.18.20': + /@esbuild/linux-ppc64@0.18.20: resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-riscv64@0.18.20': + /@esbuild/linux-riscv64@0.18.20: resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-s390x@0.18.20': + /@esbuild/linux-s390x@0.18.20: resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==} engines: {node: '>=12'} cpu: [s390x] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/linux-x64@0.18.20': + /@esbuild/linux-x64@0.18.20: resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==} engines: {node: '>=12'} cpu: [x64] os: [linux] + requiresBuild: true + dev: true + optional: true - '@esbuild/netbsd-x64@0.18.20': + /@esbuild/netbsd-x64@0.18.20: resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/openbsd-x64@0.18.20': + /@esbuild/openbsd-x64@0.18.20: resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] + requiresBuild: true + dev: true + optional: true - '@esbuild/sunos-x64@0.18.20': + /@esbuild/sunos-x64@0.18.20: resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] + requiresBuild: true + dev: true + optional: true - '@esbuild/win32-arm64@0.18.20': + /@esbuild/win32-arm64@0.18.20: resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==} engines: {node: '>=12'} cpu: [arm64] os: [win32] + requiresBuild: true + dev: true + optional: true - '@esbuild/win32-ia32@0.18.20': + /@esbuild/win32-ia32@0.18.20: resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] + requiresBuild: true + dev: true + optional: true - '@esbuild/win32-x64@0.18.20': + /@esbuild/win32-x64@0.18.20: resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==} engines: {node: '>=12'} cpu: [x64] os: [win32] + requiresBuild: true + dev: true + optional: true - '@jridgewell/gen-mapping@0.3.5': + /@jridgewell/gen-mapping@0.3.5: resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + dev: true - '@jridgewell/resolve-uri@3.1.2': + /@jridgewell/resolve-uri@3.1.2: resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} + dev: true - '@jridgewell/set-array@1.2.1': + /@jridgewell/set-array@1.2.1: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} + dev: true - '@jridgewell/sourcemap-codec@1.5.0': + /@jridgewell/sourcemap-codec@1.5.0: resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + dev: true - '@jridgewell/trace-mapping@0.3.25': + /@jridgewell/trace-mapping@0.3.25: resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + dev: true - '@types/prop-types@15.7.12': + /@remix-run/router@1.19.2: + resolution: {integrity: sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==} + engines: {node: '>=14.0.0'} + dev: false + + /@types/history@4.7.11: + resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} + dev: false + + /@types/prop-types@15.7.12: resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} - '@types/react-dom@18.3.0': + /@types/react-dom@18.3.0: resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} + dependencies: + '@types/react': 18.3.3 + dev: true - '@types/react@18.3.3': + /@types/react-router-dom@5.3.3: + resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} + dependencies: + '@types/history': 4.7.11 + '@types/react': 18.3.3 + '@types/react-router': 5.1.20 + dev: false + + /@types/react-router@5.1.20: + resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} + dependencies: + '@types/history': 4.7.11 + '@types/react': 18.3.3 + dev: false + + /@types/react@18.3.3: resolution: {integrity: sha512-hti/R0pS0q1/xx+TsI73XIqk26eBsISZ2R0wUijXIngRK9R/e7Xw/cXVxQK7R5JjW+SV4zGcn5hXjudkN/pLIw==} + dependencies: + '@types/prop-types': 15.7.12 + csstype: 3.1.3 - '@vitejs/plugin-react@3.1.0': + /@vitejs/plugin-react@3.1.0(vite@4.5.3): resolution: {integrity: sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: ^4.1.0-beta.0 + dependencies: + '@babel/core': 7.25.2 + '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) + '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) + magic-string: 0.27.0 + react-refresh: 0.14.2 + vite: 4.5.3 + transitivePeerDependencies: + - supports-color + dev: true - ansi-styles@3.2.1: + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true - browserslist@4.23.3: + /browserslist@4.23.3: resolution: {integrity: sha512-btwCFJVjI4YWDNfau8RhZ+B1Q/VLoUITrm3RlP6y1tYGWIOa+InuYiRGXUBXo8nA1qKmHMyLB/iVQg5TT4eFoA==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + dependencies: + caniuse-lite: 1.0.30001651 + electron-to-chromium: 1.5.6 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.3) + dev: true - caniuse-lite@1.0.30001651: + /caniuse-lite@1.0.30001651: resolution: {integrity: sha512-9Cf+Xv1jJNe1xPZLGuUXLNkE1BoDkqRqYyFJ9TDYSqhduqA4hu4oR9HluGoWYQC/aj8WHjsGVV+bwkh0+tegRg==} + dev: true - chalk@2.4.2: + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true - color-convert@1.9.3: + /color-convert@1.9.3: resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true - color-name@1.1.3: + /color-name@1.1.3: resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + dev: true - convert-source-map@2.0.0: + /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: true - csstype@3.1.3: + /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - debug@4.3.6: + /debug@4.3.6: resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} engines: {node: '>=6.0'} peerDependencies: @@ -328,136 +578,244 @@ packages: peerDependenciesMeta: supports-color: optional: true + dependencies: + ms: 2.1.2 + dev: true - electron-to-chromium@1.5.6: + /electron-to-chromium@1.5.6: resolution: {integrity: sha512-jwXWsM5RPf6j9dPYzaorcBSUg6AiqocPEyMpkchkvntaH9HGfOOMZwxMJjDY/XEs3T5dM7uyH1VhRMkqUU9qVw==} + dev: true - esbuild@0.18.20: + /esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} hasBin: true + requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': 0.18.20 + '@esbuild/android-arm64': 0.18.20 + '@esbuild/android-x64': 0.18.20 + '@esbuild/darwin-arm64': 0.18.20 + '@esbuild/darwin-x64': 0.18.20 + '@esbuild/freebsd-arm64': 0.18.20 + '@esbuild/freebsd-x64': 0.18.20 + '@esbuild/linux-arm': 0.18.20 + '@esbuild/linux-arm64': 0.18.20 + '@esbuild/linux-ia32': 0.18.20 + '@esbuild/linux-loong64': 0.18.20 + '@esbuild/linux-mips64el': 0.18.20 + '@esbuild/linux-ppc64': 0.18.20 + '@esbuild/linux-riscv64': 0.18.20 + '@esbuild/linux-s390x': 0.18.20 + '@esbuild/linux-x64': 0.18.20 + '@esbuild/netbsd-x64': 0.18.20 + '@esbuild/openbsd-x64': 0.18.20 + '@esbuild/sunos-x64': 0.18.20 + '@esbuild/win32-arm64': 0.18.20 + '@esbuild/win32-ia32': 0.18.20 + '@esbuild/win32-x64': 0.18.20 + dev: true - escalade@3.1.2: + /escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + dev: true - escape-string-regexp@1.0.5: + /escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} + dev: true - fsevents@2.3.3: + /fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] + requiresBuild: true + dev: true + optional: true - gensync@1.0.0-beta.2: + /gensync@1.0.0-beta.2: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + dev: true - globals@11.12.0: + /globals@11.12.0: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} + dev: true - has-flag@3.0.0: + /has-flag@3.0.0: resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} engines: {node: '>=4'} + dev: true - js-tokens@4.0.0: + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - jsesc@2.5.2: + /jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true + dev: true - json5@2.2.3: + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true + dev: true - loose-envify@1.4.0: + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true + dependencies: + js-tokens: 4.0.0 + dev: false - lru-cache@5.1.1: + /lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true - magic-string@0.27.0: + /magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + dev: true - ms@2.1.2: + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true - nanoid@3.3.7: + /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + dev: true - node-releases@2.0.18: + /node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + dev: true - picocolors@1.0.1: + /picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + dev: true - postcss@8.4.41: + /postcss@8.4.41: resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} engines: {node: ^10 || ^12 || >=14} + dependencies: + nanoid: 3.3.7 + picocolors: 1.0.1 + source-map-js: 1.2.0 + dev: true - prettier@3.3.3: + /prettier@3.3.3: resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} hasBin: true + dev: true - react-dom@18.3.1: + /react-dom@18.3.1(react@18.3.1): resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} peerDependencies: react: ^18.3.1 + dependencies: + loose-envify: 1.4.0 + react: 18.3.1 + scheduler: 0.23.2 + dev: false - react-refresh@0.14.2: + /react-refresh@0.14.2: resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} engines: {node: '>=0.10.0'} + dev: true - react@18.3.1: + /react-router-dom@6.26.2(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + react-dom: '>=16.8' + dependencies: + '@remix-run/router': 1.19.2 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-router: 6.26.2(react@18.3.1) + dev: false + + /react-router@6.26.2(react@18.3.1): + resolution: {integrity: sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: '>=16.8' + dependencies: + '@remix-run/router': 1.19.2 + react: 18.3.1 + dev: false + + /react@18.3.1: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + dependencies: + loose-envify: 1.4.0 + dev: false - rollup@3.29.4: + /rollup@3.29.4: resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true - scheduler@0.23.2: + /scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} + dependencies: + loose-envify: 1.4.0 + dev: false - semver@6.3.1: + /semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true + dev: true - source-map-js@1.2.0: + /source-map-js@1.2.0: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + dev: true - supports-color@5.5.0: + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true - to-fast-properties@2.0.0: + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} + dev: true - typescript@4.9.5: + /typescript@4.9.5: resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} engines: {node: '>=4.2.0'} hasBin: true + dev: true - update-browserslist-db@1.1.0: + /update-browserslist-db@1.1.0(browserslist@4.23.3): resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.23.3 + escalade: 3.1.2 + picocolors: 1.0.1 + dev: true - vite@4.5.3: + /vite@4.5.3: resolution: {integrity: sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -484,397 +842,14 @@ packages: optional: true terser: 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.25.2': {} - - '@babel/core@7.25.2': - dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/helper-compilation-targets': 7.25.2 - '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) - '@babel/helpers': 7.25.0 - '@babel/parser': 7.25.3 - '@babel/template': 7.25.0 - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 - convert-source-map: 2.0.0 - debug: 4.3.6 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.25.0': - dependencies: - '@babel/types': 7.25.2 - '@jridgewell/gen-mapping': 0.3.5 - '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 - - '@babel/helper-compilation-targets@7.25.2': - dependencies: - '@babel/compat-data': 7.25.2 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.3 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-module-imports@7.24.7': - dependencies: - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.25.2(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 - '@babel/traverse': 7.25.3 - transitivePeerDependencies: - - supports-color - - '@babel/helper-plugin-utils@7.24.8': {} - - '@babel/helper-simple-access@7.24.7': - dependencies: - '@babel/traverse': 7.25.3 - '@babel/types': 7.25.2 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.24.8': {} - - '@babel/helper-validator-identifier@7.24.7': {} - - '@babel/helper-validator-option@7.24.8': {} - - '@babel/helpers@7.25.0': - dependencies: - '@babel/template': 7.25.0 - '@babel/types': 7.25.2 - - '@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.25.3': - dependencies: - '@babel/types': 7.25.2 - - '@babel/plugin-transform-react-jsx-self@7.24.7(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-react-jsx-source@7.24.7(@babel/core@7.25.2)': - dependencies: - '@babel/core': 7.25.2 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/template@7.25.0': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.25.3 - '@babel/types': 7.25.2 - - '@babel/traverse@7.25.3': - dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.0 - '@babel/parser': 7.25.3 - '@babel/template': 7.25.0 - '@babel/types': 7.25.2 - debug: 4.3.6 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.25.2': - dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 - to-fast-properties: 2.0.0 - - '@esbuild/android-arm64@0.18.20': - optional: true - - '@esbuild/android-arm@0.18.20': - optional: true - - '@esbuild/android-x64@0.18.20': - optional: true - - '@esbuild/darwin-arm64@0.18.20': - optional: true - - '@esbuild/darwin-x64@0.18.20': - optional: true - - '@esbuild/freebsd-arm64@0.18.20': - optional: true - - '@esbuild/freebsd-x64@0.18.20': - optional: true - - '@esbuild/linux-arm64@0.18.20': - optional: true - - '@esbuild/linux-arm@0.18.20': - optional: true - - '@esbuild/linux-ia32@0.18.20': - optional: true - - '@esbuild/linux-loong64@0.18.20': - optional: true - - '@esbuild/linux-mips64el@0.18.20': - optional: true - - '@esbuild/linux-ppc64@0.18.20': - optional: true - - '@esbuild/linux-riscv64@0.18.20': - optional: true - - '@esbuild/linux-s390x@0.18.20': - optional: true - - '@esbuild/linux-x64@0.18.20': - optional: true - - '@esbuild/netbsd-x64@0.18.20': - optional: true - - '@esbuild/openbsd-x64@0.18.20': - optional: true - - '@esbuild/sunos-x64@0.18.20': - optional: true - - '@esbuild/win32-arm64@0.18.20': - optional: true - - '@esbuild/win32-ia32@0.18.20': - optional: true - - '@esbuild/win32-x64@0.18.20': - optional: true - - '@jridgewell/gen-mapping@0.3.5': - dependencies: - '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.5.0 - '@jridgewell/trace-mapping': 0.3.25 - - '@jridgewell/resolve-uri@3.1.2': {} - - '@jridgewell/set-array@1.2.1': {} - - '@jridgewell/sourcemap-codec@1.5.0': {} - - '@jridgewell/trace-mapping@0.3.25': - dependencies: - '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.0 - - '@types/prop-types@15.7.12': {} - - '@types/react-dom@18.3.0': - dependencies: - '@types/react': 18.3.3 - - '@types/react@18.3.3': - dependencies: - '@types/prop-types': 15.7.12 - csstype: 3.1.3 - - '@vitejs/plugin-react@3.1.0(vite@4.5.3)': - dependencies: - '@babel/core': 7.25.2 - '@babel/plugin-transform-react-jsx-self': 7.24.7(@babel/core@7.25.2) - '@babel/plugin-transform-react-jsx-source': 7.24.7(@babel/core@7.25.2) - magic-string: 0.27.0 - react-refresh: 0.14.2 - vite: 4.5.3 - transitivePeerDependencies: - - supports-color - - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - - browserslist@4.23.3: - dependencies: - caniuse-lite: 1.0.30001651 - electron-to-chromium: 1.5.6 - node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.3) - - caniuse-lite@1.0.30001651: {} - - 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.6: - dependencies: - ms: 2.1.2 - - electron-to-chromium@1.5.6: {} - - esbuild@0.18.20: - optionalDependencies: - '@esbuild/android-arm': 0.18.20 - '@esbuild/android-arm64': 0.18.20 - '@esbuild/android-x64': 0.18.20 - '@esbuild/darwin-arm64': 0.18.20 - '@esbuild/darwin-x64': 0.18.20 - '@esbuild/freebsd-arm64': 0.18.20 - '@esbuild/freebsd-x64': 0.18.20 - '@esbuild/linux-arm': 0.18.20 - '@esbuild/linux-arm64': 0.18.20 - '@esbuild/linux-ia32': 0.18.20 - '@esbuild/linux-loong64': 0.18.20 - '@esbuild/linux-mips64el': 0.18.20 - '@esbuild/linux-ppc64': 0.18.20 - '@esbuild/linux-riscv64': 0.18.20 - '@esbuild/linux-s390x': 0.18.20 - '@esbuild/linux-x64': 0.18.20 - '@esbuild/netbsd-x64': 0.18.20 - '@esbuild/openbsd-x64': 0.18.20 - '@esbuild/sunos-x64': 0.18.20 - '@esbuild/win32-arm64': 0.18.20 - '@esbuild/win32-ia32': 0.18.20 - '@esbuild/win32-x64': 0.18.20 - - 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: {} - - js-tokens@4.0.0: {} - - jsesc@2.5.2: {} - - json5@2.2.3: {} - - loose-envify@1.4.0: - dependencies: - js-tokens: 4.0.0 - - lru-cache@5.1.1: - dependencies: - yallist: 3.1.1 - - magic-string@0.27.0: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - - ms@2.1.2: {} - - nanoid@3.3.7: {} - - node-releases@2.0.18: {} - - picocolors@1.0.1: {} - - postcss@8.4.41: - dependencies: - nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 - - prettier@3.3.3: {} - - react-dom@18.3.1(react@18.3.1): - dependencies: - loose-envify: 1.4.0 - react: 18.3.1 - scheduler: 0.23.2 - - react-refresh@0.14.2: {} - - react@18.3.1: - dependencies: - loose-envify: 1.4.0 - - rollup@3.29.4: - optionalDependencies: - fsevents: 2.3.3 - - scheduler@0.23.2: - dependencies: - loose-envify: 1.4.0 - - semver@6.3.1: {} - - source-map-js@1.2.0: {} - - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - - to-fast-properties@2.0.0: {} - - typescript@4.9.5: {} - - update-browserslist-db@1.1.0(browserslist@4.23.3): - dependencies: - browserslist: 4.23.3 - escalade: 3.1.2 - picocolors: 1.0.1 - - vite@4.5.3: dependencies: esbuild: 0.18.20 postcss: 8.4.41 rollup: 3.29.4 optionalDependencies: fsevents: 2.3.3 + dev: true - yallist@3.1.1: {} + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true diff --git a/public/server.png b/public/server.png new file mode 100644 index 0000000000000000000000000000000000000000..1ff210ba08046ba0f61dfce5e110f82fffb2e456 GIT binary patch literal 34571 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%0A7um(r~*y^yi};S2}lbvxNeZuSYIw%qoDzv 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 literal 0 HcmV?d00001 diff --git a/public/three-dots.svg b/public/three-dots.svg new file mode 100644 index 0000000..7795981 --- /dev/null +++ b/public/three-dots.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/App.tsx b/src/App.tsx index e28140d..69101f9 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -1,11 +1,27 @@ -import { Main } from "./pages"; +import React from 'react' +import { Route, Routes } from 'react-router-dom' +import Main from './pages/Main' +import About from './pages/About' +import SelfHosting from './pages/SelfHosting' function App() { - let final: JSX.Element =

None

; - - document.location.pathname === "/" && (final =
); - - return final; + return ( + + } + /> + } + /> + } + /> + + ) } -export default App; +export default App diff --git a/src/components/ButtonRow.tsx b/src/components/ButtonRow.tsx index 60ae069..f8d4eb4 100644 --- a/src/components/ButtonRow.tsx +++ b/src/components/ButtonRow.tsx @@ -1,16 +1,30 @@ import React, { useState } from "react"; +import { Link } from "react-router-dom"; import "../keyframes.css"; +import { GenericProps } from "../types"; export interface Buttons { name: string; link: string; } -export interface ButtonRowProps { +export interface ButtonRowProps extends GenericProps { buttons: Buttons[]; } -export const ButtonRow = ({ buttons }: ButtonRowProps) => { +export const ButtonRow = ({ fadeIn, zoomIn, buttons }: ButtonRowProps) => { + const determineClasses = () => { + if (fadeIn) { + return "social-link-area fade-in"; + } + + if (zoomIn) { + return "social-link-area zoom-in"; + } + + return "social-link-area"; + }; + const [shown, changeShown] = useState(false); const showItems = () => { @@ -23,20 +37,20 @@ export const ButtonRow = ({ buttons }: ButtonRowProps) => { return (
{buttons.map((button, index) => { return ( - {button.name} - + ); })}
diff --git a/src/components/Description.tsx b/src/components/Description.tsx index baba1c2..771c36c 100644 --- a/src/components/Description.tsx +++ b/src/components/Description.tsx @@ -1,9 +1,19 @@ import React, { ReactNode } from "react"; +import { TextProps } from "../types"; -export interface DescriptionProps { +export interface DescriptionProps extends TextProps { children: ReactNode; + main?: boolean; + noBackground?: boolean; } -export const Description = ({ children }: DescriptionProps) => { - return
{children}
; +export const Description = ({ noBackground, main, children }: DescriptionProps) => { + return ( +
+ {children} +
+ ); }; diff --git a/src/components/DoubleSpace.tsx b/src/components/DoubleSpace.tsx new file mode 100644 index 0000000..9e57e04 --- /dev/null +++ b/src/components/DoubleSpace.tsx @@ -0,0 +1,8 @@ +export function DoubleSpace() { + return ( + <> +
+
+ + ); +} diff --git a/src/components/Header.tsx b/src/components/Header.tsx index 46b05b7..216a6af 100644 --- a/src/components/Header.tsx +++ b/src/components/Header.tsx @@ -1,4 +1,6 @@ import React from "react"; +import { Link } from "react-router-dom"; +import { GenericProps } from "../types"; export interface TextLink { text: string; @@ -6,23 +8,23 @@ export interface TextLink { target?: React.HTMLAttributeAnchorTarget; } -export interface TextLinks { +export interface TextLinks extends GenericProps { links: TextLink[]; } -export const Header = ({ links }: TextLinks) => { +export const Header = ({ fadeIn, links }: TextLinks) => { return ( -
- {links.map((link) => { +
+ {links && links.map((link) => { return ( - {link.text} - + ); })}
diff --git a/src/components/Message.tsx b/src/components/Message.tsx index 491e93a..096fcc1 100644 --- a/src/components/Message.tsx +++ b/src/components/Message.tsx @@ -2,8 +2,15 @@ import React, { ReactNode } from "react"; export interface MessageProps { children: ReactNode; + className?: string; } -export const Message = ({ children }: MessageProps) => { - return
{children}
; +export const Message = ({ className, children }: MessageProps) => { + return ( +
+ {children} +
+ ); }; diff --git a/src/components/Title.tsx b/src/components/Title.tsx index f5247ba..aa00fa8 100644 --- a/src/components/Title.tsx +++ b/src/components/Title.tsx @@ -1,14 +1,31 @@ import { ReactNode } from "react"; +import { TextProps } from "../types"; -export interface TitleProps { +export interface TitleProps extends TextProps { children: ReactNode; + noBackground?: boolean; glow?: boolean; } -export const Title = ({ children, glow }: TitleProps) => { +export const Title = ({ children, noBackground, glow }: TitleProps) => { + const determineClasses = () => { + let result = "title"; + + if (noBackground) { + result += " no-background" + } + + if (glow) { + result += " glow"; + } + + return result; + } + return ( +
-

{children}

+

{children}

); }; diff --git a/src/components/index.ts b/src/components/index.ts index 5bcf561..3de50de 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -3,3 +3,4 @@ export * from "./Title"; export * from "./Description"; export * from "./ButtonRow"; export * from "./Message"; +export * from "./DoubleSpace"; diff --git a/src/index.css b/src/index.css index f29ae8d..7eb58a7 100644 --- a/src/index.css +++ b/src/index.css @@ -24,6 +24,17 @@ body { animation: zoom-in 0.3s; } +.at:link, .at:visited { + color: var(--main); + font-weight: bold; + text-decoration: none; + transition: opacity 0.15s, transform 0.15s; +} + +.at:hover { + opacity: 0.6; +} + .header { margin: 10px auto; text-align: center; @@ -107,6 +118,10 @@ body { color 0.6s, text-shadow 0.6s, transform 0.6s; + padding: 42px 96px; + background-color: var(--primary); + border-radius: 17px; + box-shadow: var(--shadow); } .glow:hover { @@ -116,12 +131,17 @@ body { } .description { - margin: 15px 0; + display: inline-block; + max-width: 50%; font-size: 15px; + padding: 24px 48px; + background-color: var(--primary); + border-radius: 17px; + box-shadow: var(--shadow); } .social-link-area { - margin: 25px 0; + margin: 10px 0; text-align: center; } @@ -154,12 +174,20 @@ body { .message { width: 75%; - margin: 25px auto; + margin: auto; text-align: center; - padding: 17px; - background-color: var(--primary); - border-radius: 17px; - box-shadow: var(--shadow); + align-content: center; +} + +.no-background { + padding: 0; + background-color: transparent; + box-shadow: none; + text-shadow: var(--shadow); +} + +.small-font { + font-size: 12px; } @media (prefers-color-scheme: light) { diff --git a/src/keyframes.css b/src/keyframes.css index 9ea4f48..625419d 100644 --- a/src/keyframes.css +++ b/src/keyframes.css @@ -85,3 +85,11 @@ opacity: 0; } } + +.zoom-in { + animation: zoom-in 0.3s; +} + +.fade-in { + animation: fade-in 0.3s; +} diff --git a/src/main.tsx b/src/main.tsx index 8b1ddb9..195728e 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,10 +1,13 @@ import React from "react"; import ReactDOM from "react-dom/client"; +import { BrowserRouter } from "react-router-dom"; import App from "./App"; import "./index.css"; ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render( - + + + , ); diff --git a/src/pages/About.tsx b/src/pages/About.tsx new file mode 100644 index 0000000..d017998 --- /dev/null +++ b/src/pages/About.tsx @@ -0,0 +1,45 @@ +import React from 'react' +import { Link } from 'react-router-dom' +import { Description, Header, Message, Title, DoubleSpace, ButtonRow, Buttons, TextLink } from '../components' + +function About() { + const links: TextLink[] = [ + { + text: "Back", + link: "/" + } + ] + + const buttons: Buttons[] = [ + { + name: "Self-Hosting", + link: "/about/selfhosting", + } + ]; + + return ( + <> +
+ + + About + + +

+ You've probably met me online and checked out my website, I know you IRL, or you're interested in me. +

+ +

+ In the wise words of Lester Crest, "don't dawdle!" and read on. +

+
+
+ + + + + + ) +} + +export default About; diff --git a/src/pages/Main.tsx b/src/pages/Main.tsx index 42b096b..8d61d3b 100644 --- a/src/pages/Main.tsx +++ b/src/pages/Main.tsx @@ -1,4 +1,5 @@ import { useState } from "react"; +import { Link } from "react-router-dom"; import { Buttons, ButtonRow, @@ -9,7 +10,7 @@ import { Description, } from "../components"; -export function Main() { +function Main() { const links: TextLink[] = [ { text: "pHosting", @@ -27,6 +28,10 @@ export function Main() { text: "FreeTube Web", link: "https://tube.povario.com", }, + { + text: "About", + link: "/about" + } ]; const buttons: Buttons[] = [ @@ -53,6 +58,8 @@ export function Main() { ]; const [timesClicked, changeTimesClicked] = useState(0); + const [displayed, changeDisplay] = useState(""); + const handlePictureClick = () => { changeTimesClicked((timesClicked) => timesClicked + 1); }; @@ -62,45 +69,51 @@ export function Main() { return ( <> -
- -
- -

- Stop that! -

+
+
-
- @powermaker450 +
+
- Professional Linux Enjoyer + Self Hosts a Lot -
- - - - - Welcome! - - - - -

You've reached my homepage.

-

- If you were looking for something, it's probably one of the links - above. +

+ +

+ Stop that!

- - +
+ +
+ @powermaker450 + + Professional Linux Enjoyer + Self Hosts a Lot +
+ + + + + Welcome! + + +

You've reached my homepage.

+

+ If you were looking for something, it's probably one of the links + above. +

+
+
+
); } + +export default Main; diff --git a/src/pages/SelfHosting.tsx b/src/pages/SelfHosting.tsx new file mode 100644 index 0000000..3b0a5e3 --- /dev/null +++ b/src/pages/SelfHosting.tsx @@ -0,0 +1,76 @@ +import { Link } from 'react-router-dom' +import { Description, DoubleSpace, Header, Message, TextLink, Title } from '../components' + +function SelfHosting() { + const links: TextLink[] = [ + { + text: "Back", + link: "/about" + } + ] + + return ( + <> +
+ + + Self-Hosting + + +

+ Getting the more obvious stuff out of the way, I like self-hosting. I started my self-hosting journey back in + 2021, when all I was was fed up with Netflix not having all the shows I wanted to watch. +

+ +

+ Eventually, that grew into something much bigger, and suddenly this machine I got from a dumpster was my key + to a privacy suite. +

+ + + +

+ Yep. Did I say it was from a dumpster? It's beautiful in it's own way. +

+
+ + + + +

+ Managing your own server is a learning experience in itself, and with time I learned the + cold, hard, basic skills of being a Linux sysadmin. + Not to say it hasn't paid off. +

+ +

+ I've learned my way around the terminal, and can comfortably surf through it without worry, + and if I do come across something I don't know, I'll figure out how to do it. + Not to mention the money saved not paying for cloud services. Money's not exactly something that get's thrown at me in my life. +

+ +

+ Instead of the Google Suite, I use Nextcloud. +

+ +

+ Instead of Spotify, I use Navidrome. +

+ +

+ Instead of paying for game hosting, I use Pufferpanel. +

+ +

+ And so on. Between becoming comfortable with the ways of Linux, and saving my family money in the long run, this server + has been a worthwhile investment of my time and effort. +

+
+
+ + + + ) +} + +export default SelfHosting; diff --git a/src/pages/index.ts b/src/pages/index.ts deleted file mode 100644 index 9b66c37..0000000 --- a/src/pages/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from "./Main"; diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..2d2053a --- /dev/null +++ b/src/types.ts @@ -0,0 +1,12 @@ +export interface GenericProps { + className?: string; + fadeIn?: boolean; + zoomIn?: boolean; + zoomInLarge?: boolean; + slide?: "left" | "right"; +} + +export interface TextProps extends GenericProps { + noBackground?: boolean; + glow?: boolean; +}