diff --git a/index.html b/index.html
index 6c5c04d..3b1a22b 100644
--- a/index.html
+++ b/index.html
@@ -19,7 +19,7 @@
-
haslo.ch - Homegrown Techno from Bern, Switzerland
+ haslo.ch - Techno and Plugins from Bern, Switzerland
diff --git a/package-lock.json b/package-lock.json
index 966296f..8107b37 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,6 +17,7 @@
"date-fns": "^3.6.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
+ "react-router-dom": "^6.26.2",
"react-waypoint": "^10.3.0",
"vite": "^5.4.1"
}
@@ -1136,10 +1137,19 @@
"url": "https://opencollective.com/popperjs"
}
},
+ "node_modules/@remix-run/router": {
+ "version": "1.19.2",
+ "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.19.2.tgz",
+ "integrity": "sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==",
+ "license": "MIT",
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
"node_modules/@rollup/rollup-android-arm-eabi": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.0.tgz",
- "integrity": "sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz",
+ "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==",
"cpu": [
"arm"
],
@@ -1150,9 +1160,9 @@
]
},
"node_modules/@rollup/rollup-android-arm64": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.0.tgz",
- "integrity": "sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz",
+ "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==",
"cpu": [
"arm64"
],
@@ -1163,9 +1173,9 @@
]
},
"node_modules/@rollup/rollup-darwin-arm64": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.0.tgz",
- "integrity": "sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz",
+ "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==",
"cpu": [
"arm64"
],
@@ -1176,9 +1186,9 @@
]
},
"node_modules/@rollup/rollup-darwin-x64": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.0.tgz",
- "integrity": "sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz",
+ "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==",
"cpu": [
"x64"
],
@@ -1189,9 +1199,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-gnueabihf": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.0.tgz",
- "integrity": "sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz",
+ "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==",
"cpu": [
"arm"
],
@@ -1202,9 +1212,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm-musleabihf": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.0.tgz",
- "integrity": "sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz",
+ "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==",
"cpu": [
"arm"
],
@@ -1215,9 +1225,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-gnu": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.0.tgz",
- "integrity": "sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz",
+ "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==",
"cpu": [
"arm64"
],
@@ -1228,9 +1238,9 @@
]
},
"node_modules/@rollup/rollup-linux-arm64-musl": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.0.tgz",
- "integrity": "sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz",
+ "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==",
"cpu": [
"arm64"
],
@@ -1241,9 +1251,9 @@
]
},
"node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.0.tgz",
- "integrity": "sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz",
+ "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==",
"cpu": [
"ppc64"
],
@@ -1254,9 +1264,9 @@
]
},
"node_modules/@rollup/rollup-linux-riscv64-gnu": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.0.tgz",
- "integrity": "sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz",
+ "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==",
"cpu": [
"riscv64"
],
@@ -1267,9 +1277,9 @@
]
},
"node_modules/@rollup/rollup-linux-s390x-gnu": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.0.tgz",
- "integrity": "sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz",
+ "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==",
"cpu": [
"s390x"
],
@@ -1280,9 +1290,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-gnu": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.0.tgz",
- "integrity": "sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz",
+ "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==",
"cpu": [
"x64"
],
@@ -1293,9 +1303,9 @@
]
},
"node_modules/@rollup/rollup-linux-x64-musl": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.0.tgz",
- "integrity": "sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz",
+ "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==",
"cpu": [
"x64"
],
@@ -1306,9 +1316,9 @@
]
},
"node_modules/@rollup/rollup-win32-arm64-msvc": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.0.tgz",
- "integrity": "sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz",
+ "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==",
"cpu": [
"arm64"
],
@@ -1319,9 +1329,9 @@
]
},
"node_modules/@rollup/rollup-win32-ia32-msvc": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.0.tgz",
- "integrity": "sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz",
+ "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==",
"cpu": [
"ia32"
],
@@ -1332,9 +1342,9 @@
]
},
"node_modules/@rollup/rollup-win32-x64-msvc": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.0.tgz",
- "integrity": "sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz",
+ "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==",
"cpu": [
"x64"
],
@@ -1989,15 +1999,15 @@
}
},
"node_modules/picocolors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
- "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz",
+ "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==",
"license": "ISC"
},
"node_modules/postcss": {
- "version": "8.4.41",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz",
- "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==",
+ "version": "8.4.47",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz",
+ "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==",
"funding": [
{
"type": "opencollective",
@@ -2015,8 +2025,8 @@
"license": "MIT",
"dependencies": {
"nanoid": "^3.3.7",
- "picocolors": "^1.0.1",
- "source-map-js": "^1.2.0"
+ "picocolors": "^1.1.0",
+ "source-map-js": "^1.2.1"
},
"engines": {
"node": "^10 || ^12 || >=14"
@@ -2079,6 +2089,38 @@
"node": ">=0.10.0"
}
},
+ "node_modules/react-router": {
+ "version": "6.26.2",
+ "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.26.2.tgz",
+ "integrity": "sha512-tvN1iuT03kHgOFnLPfLJ8V95eijteveqdOSk+srqfePtQvqCExB8eHOYnlilbOcyJyKnYkr1vJvf7YqotAJu1A==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.19.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8"
+ }
+ },
+ "node_modules/react-router-dom": {
+ "version": "6.26.2",
+ "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.26.2.tgz",
+ "integrity": "sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==",
+ "license": "MIT",
+ "dependencies": {
+ "@remix-run/router": "1.19.2",
+ "react-router": "6.26.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "react": ">=16.8",
+ "react-dom": ">=16.8"
+ }
+ },
"node_modules/react-transition-group": {
"version": "4.4.5",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.4.5.tgz",
@@ -2143,9 +2185,9 @@
}
},
"node_modules/rollup": {
- "version": "4.21.0",
- "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.0.tgz",
- "integrity": "sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==",
+ "version": "4.22.4",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz",
+ "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==",
"license": "MIT",
"dependencies": {
"@types/estree": "1.0.5"
@@ -2158,22 +2200,22 @@
"npm": ">=8.0.0"
},
"optionalDependencies": {
- "@rollup/rollup-android-arm-eabi": "4.21.0",
- "@rollup/rollup-android-arm64": "4.21.0",
- "@rollup/rollup-darwin-arm64": "4.21.0",
- "@rollup/rollup-darwin-x64": "4.21.0",
- "@rollup/rollup-linux-arm-gnueabihf": "4.21.0",
- "@rollup/rollup-linux-arm-musleabihf": "4.21.0",
- "@rollup/rollup-linux-arm64-gnu": "4.21.0",
- "@rollup/rollup-linux-arm64-musl": "4.21.0",
- "@rollup/rollup-linux-powerpc64le-gnu": "4.21.0",
- "@rollup/rollup-linux-riscv64-gnu": "4.21.0",
- "@rollup/rollup-linux-s390x-gnu": "4.21.0",
- "@rollup/rollup-linux-x64-gnu": "4.21.0",
- "@rollup/rollup-linux-x64-musl": "4.21.0",
- "@rollup/rollup-win32-arm64-msvc": "4.21.0",
- "@rollup/rollup-win32-ia32-msvc": "4.21.0",
- "@rollup/rollup-win32-x64-msvc": "4.21.0",
+ "@rollup/rollup-android-arm-eabi": "4.22.4",
+ "@rollup/rollup-android-arm64": "4.22.4",
+ "@rollup/rollup-darwin-arm64": "4.22.4",
+ "@rollup/rollup-darwin-x64": "4.22.4",
+ "@rollup/rollup-linux-arm-gnueabihf": "4.22.4",
+ "@rollup/rollup-linux-arm-musleabihf": "4.22.4",
+ "@rollup/rollup-linux-arm64-gnu": "4.22.4",
+ "@rollup/rollup-linux-arm64-musl": "4.22.4",
+ "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4",
+ "@rollup/rollup-linux-riscv64-gnu": "4.22.4",
+ "@rollup/rollup-linux-s390x-gnu": "4.22.4",
+ "@rollup/rollup-linux-x64-gnu": "4.22.4",
+ "@rollup/rollup-linux-x64-musl": "4.22.4",
+ "@rollup/rollup-win32-arm64-msvc": "4.22.4",
+ "@rollup/rollup-win32-ia32-msvc": "4.22.4",
+ "@rollup/rollup-win32-x64-msvc": "4.22.4",
"fsevents": "~2.3.2"
}
},
@@ -2205,9 +2247,9 @@
}
},
"node_modules/source-map-js": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
- "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
"license": "BSD-3-Clause",
"engines": {
"node": ">=0.10.0"
@@ -2283,14 +2325,14 @@
}
},
"node_modules/vite": {
- "version": "5.4.1",
- "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.1.tgz",
- "integrity": "sha512-1oE6yuNXssjrZdblI9AfBbHCC41nnyoVoEZxQnID6yvQZAFBzxxkqoFLtHUMkYunL8hwOLEjgTuxpkRxvba3kA==",
+ "version": "5.4.7",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.7.tgz",
+ "integrity": "sha512-5l2zxqMEPVENgvzTuBpHer2awaetimj2BGkhBPdnwKbPNOlHsODU+oiazEZzLK7KhAnOrO+XGYJYn4ZlUhDtDQ==",
"license": "MIT",
"dependencies": {
"esbuild": "^0.21.3",
- "postcss": "^8.4.41",
- "rollup": "^4.13.0"
+ "postcss": "^8.4.43",
+ "rollup": "^4.20.0"
},
"bin": {
"vite": "bin/vite.js"
diff --git a/package.json b/package.json
index 7eb8916..1583f19 100644
--- a/package.json
+++ b/package.json
@@ -12,6 +12,7 @@
"date-fns": "^3.6.0",
"react": "^18.3.1",
"react-dom": "^18.3.1",
+ "react-router-dom": "^6.26.2",
"react-waypoint": "^10.3.0",
"vite": "^5.4.1"
},
diff --git a/public/assets/destruktor.png b/public/assets/destruktor.png
new file mode 100644
index 0000000..a4405d1
Binary files /dev/null and b/public/assets/destruktor.png differ
diff --git a/public/assets/haaschen.png b/public/assets/haaschen.png
new file mode 100644
index 0000000..360fa45
Binary files /dev/null and b/public/assets/haaschen.png differ
diff --git a/public/assets/ploink.png b/public/assets/ploink.png
new file mode 100644
index 0000000..ba4a40b
Binary files /dev/null and b/public/assets/ploink.png differ
diff --git a/public/assets/voltage_modular.png b/public/assets/voltage_modular.png
new file mode 100644
index 0000000..fbf881d
Binary files /dev/null and b/public/assets/voltage_modular.png differ
diff --git a/src/App.jsx b/src/App.jsx
index 2bd1e98..2f2ab65 100644
--- a/src/App.jsx
+++ b/src/App.jsx
@@ -1,26 +1,25 @@
import './App.css';
-
-import {useState} from "react";
-
import '@fontsource/roboto/300.css';
import '@fontsource/roboto/400.css';
import '@fontsource/roboto/500.css';
import '@fontsource/roboto/700.css';
-import {createTheme} from '@mui/material/styles';
+import {useState} from "react";
+import {BrowserRouter as Router, Route, Routes} from 'react-router-dom';
+
import {ThemeProvider} from "@mui/material";
+import {createTheme} from '@mui/material/styles';
-import SearchAppBar from "./SearchAppBar";
-import NewsPosts from "./NewsPosts";
-import SoundCloudIFrame from "./SoundCloudIFrame";
-import BottomBar from "./BottomBar";
-import useFetchNewsPostsAndNewestContent from './useFetchNewsPostsAndNewestContent';
+import {SearchAppBar} from "./shared/SearchAppBar";
+import {BottomBar} from "./shared/BottomBar";
+import {NavButtons} from "./shared/NavButtons";
-function App() {
+import {Music} from "./pages/music/Music";
+import {Plugins} from "./pages/plugins/Plugins";
+function App() {
const [searchQuery, setSearchQuery] = useState('');
const [searchEventSent, setSearchEventSent] = useState(false);
- const { newsPosts, newestContentId } = useFetchNewsPostsAndNewestContent();
const theme = createTheme({
palette: {
@@ -34,24 +33,31 @@ function App() {
});
return (
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+ }/>
+
+ }/>
+
+
+
+
+
);
}
diff --git a/src/NewsPostCard.jsx b/src/NewsPostCard.jsx
deleted file mode 100644
index 3e02d97..0000000
--- a/src/NewsPostCard.jsx
+++ /dev/null
@@ -1,79 +0,0 @@
-import * as React from 'react';
-
-import {format} from "date-fns";
-
-import {
- Avatar,
- Box,
- Card,
- CardActionArea,
- CardContent,
- CardHeader,
- CardMedia,
- Typography,
-} from "@mui/material";
-
-import PlayCircleOutlineIcon from '@mui/icons-material/PlayCircleOutline';
-import ImageIcon from '@mui/icons-material/Image';
-import HeadphonesIcon from '@mui/icons-material/Headphones';
-
-export default function NewsPostCard({newsPost}) {
- return (
-
-
-
-
- }
- title={newsPost.title}
- subheader={format(new Date(newsPost.publicationDate), 'yyyy-MM-dd')}
- />
-
-
-
-
- {
- newsPost.isVideo ?
- :
- newsPost.isAudio ?
- :
-
- }
-
-
-
-
- {newsPost.description}
-
-
-
-
- );
-}
diff --git a/src/index.css b/src/index.css
index ec2585e..487b9b4 100644
--- a/src/index.css
+++ b/src/index.css
@@ -11,3 +11,8 @@ code {
font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
monospace;
}
+
+.MuiCardHeader-content a {
+ color: inherit;
+ text-decoration: none;
+}
diff --git a/src/logo.svg b/src/logo.svg
deleted file mode 100644
index 9dfc1c0..0000000
--- a/src/logo.svg
+++ /dev/null
@@ -1 +0,0 @@
-
\ No newline at end of file
diff --git a/src/pages/music/Music.jsx b/src/pages/music/Music.jsx
new file mode 100644
index 0000000..ac368de
--- /dev/null
+++ b/src/pages/music/Music.jsx
@@ -0,0 +1,23 @@
+import * as React from 'react';
+
+import {SoundCloudIFrame} from "./SoundCloudIFrame";
+import {MusicPosts} from "./MusicPosts";
+
+import {fetchMusicApiData} from '../../services/ApiAdapter';
+
+export function Music({searchQuery}) {
+ const {musicPosts, newestContentId} = fetchMusicApiData();
+
+ return (
+ <>
+
+
+ >
+ );
+}
diff --git a/src/pages/music/MusicPostCard.jsx b/src/pages/music/MusicPostCard.jsx
new file mode 100644
index 0000000..68218ef
--- /dev/null
+++ b/src/pages/music/MusicPostCard.jsx
@@ -0,0 +1,87 @@
+import * as React from 'react';
+
+import {format} from "date-fns";
+
+import {
+ Avatar,
+ Box,
+ Card,
+ CardActionArea,
+ CardContent,
+ CardHeader,
+ CardMedia,
+ Grid,
+ Typography,
+} from "@mui/material";
+
+import PlayCircleOutlineIcon from '@mui/icons-material/PlayCircleOutline';
+import ImageIcon from '@mui/icons-material/Image';
+import HeadphonesIcon from '@mui/icons-material/Headphones';
+
+export function MusicPostCard({newsPost}) {
+ return (
+
+
+
+
+
+ }
+ title={
+
+ {newsPost.title}
+
+ }
+ subheader={format(new Date(newsPost.publicationDate), 'yyyy-MM-dd')}
+ />
+
+
+
+
+ {
+ newsPost.isVideo ?
+ :
+ newsPost.isAudio ?
+ :
+
+ }
+
+
+
+
+ {newsPost.description}
+
+
+
+
+
+ );
+}
diff --git a/src/NewsPosts.jsx b/src/pages/music/MusicPosts.jsx
similarity index 75%
rename from src/NewsPosts.jsx
rename to src/pages/music/MusicPosts.jsx
index 5c90c6f..241e8ba 100644
--- a/src/NewsPosts.jsx
+++ b/src/pages/music/MusicPosts.jsx
@@ -4,13 +4,13 @@ import {Waypoint} from "react-waypoint";
import {Container, Grid} from "@mui/material";
import Typography from "@mui/material/Typography";
-import NewsPostCard from "./NewsPostCard";
+import {MusicPostCard} from "./MusicPostCard";
-function NewsPosts({searchQuery, newsPosts}) {
+export function MusicPosts({searchQuery, musicPosts}) {
const [maxScroll, setMaxScroll] = useState(9);
- if (!newsPosts) {
+ if (!musicPosts) {
return (
@@ -20,7 +20,7 @@ function NewsPosts({searchQuery, newsPosts}) {
);
}
- const filteredPosts = newsPosts.filter((newsPost) => {
+ const filteredPosts = musicPosts.filter((newsPost) => {
if (searchQuery === '') {
return true;
} else {
@@ -36,17 +36,17 @@ function NewsPosts({searchQuery, newsPosts}) {
{filteredPosts.slice(0, maxScroll).map(newsPost => (
-
-
-
+
))}
{
+ onEnter={() => {
setMaxScroll(maxScroll + 6);
}}
- >
+ >
+
+
>
);
} else {
@@ -59,5 +59,3 @@ function NewsPosts({searchQuery, newsPosts}) {
);
}
}
-
-export default NewsPosts;
diff --git a/src/SoundCloudIFrame.jsx b/src/pages/music/SoundCloudIFrame.jsx
similarity index 82%
rename from src/SoundCloudIFrame.jsx
rename to src/pages/music/SoundCloudIFrame.jsx
index 78e59e1..97b0302 100644
--- a/src/SoundCloudIFrame.jsx
+++ b/src/pages/music/SoundCloudIFrame.jsx
@@ -1,6 +1,6 @@
import {Container} from "@mui/material";
-function SoundCloudIFrame({newestContentId}) {
+export function SoundCloudIFrame({newestContentId}) {
if (newestContentId !== null && newestContentId !== undefined) {
const iframeHtml = '
{searchIsPending ? : <>>}