diff --git a/Cargo.lock b/Cargo.lock index f98c591e9..53e97328a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3161,7 +3161,7 @@ dependencies = [ [[package]] name = "hyperdrive" -version = "1.2.0" +version = "1.2.1" dependencies = [ "aes-gcm", "alloy", @@ -3217,7 +3217,7 @@ dependencies = [ [[package]] name = "hyperdrive_lib" -version = "1.2.0" +version = "1.2.1" dependencies = [ "lib", ] @@ -3755,7 +3755,7 @@ checksum = "884e2677b40cc8c339eaefcb701c32ef1fd2493d71118dc0ca4b6a736c93bd67" [[package]] name = "lib" -version = "1.2.0" +version = "1.2.1" dependencies = [ "alloy", "anyhow", diff --git a/Cargo.toml b/Cargo.toml index 8627412ca..24c920479 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "hyperdrive_lib" authors = ["Sybil Technologies AG"] -version = "1.2.0" +version = "1.2.1" edition = "2021" description = "A general-purpose sovereign cloud computing platform" homepage = "https://hyperware.ai" diff --git a/README.md b/README.md index ca2849329..6b3e879d0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@

- Hyperware + Hyperware
diff --git a/css/hyperware.css b/css/hyperware.css index cd1000658..8583cff4d 100644 --- a/css/hyperware.css +++ b/css/hyperware.css @@ -12,11 +12,11 @@ --stone: #353534; --black: #111111; --black-light: #11111188; - --black-xlight: #11111144; + --black-xlight: #11111111; --tasteful-dark: var(--black); --white: #f6f6f6; --white-light: #f6f6f688; - --white-xlight: #f6f6f644; + --white-xlight: #f6f6f611; --magenta: #bf1363; --orange: #dd6e42; --off-white: var(--white); @@ -27,9 +27,13 @@ --primary-light: var(--neon-green-light); --primary-xlight: var(--neon-green-xlight); --secondary-color: var(--iris); + --secondary-light: var(--iris-light); + --secondary-xlight: var(--iris-xlight); --tertiary-color: var(--orange); --quaternary-color: var(--magenta); + --link-color: light-dark(var(--secondary-color), var(--primary-color)); + --font-family-main: 'Space Grotesk', monospace; /* Add modern CSS variables */ @@ -44,6 +48,22 @@ --button-border-width: 2px; } +.bg-secondary { + background-color: var(--secondary-color); +} + +.bg-primary { + background-color: var(--primary-color); +} + +.text-secondary { + color: var(--secondary-color); +} + +.text-primary { + color: var(--primary-color); +} + * { box-sizing: border-box; margin: 0; @@ -58,7 +78,6 @@ html { font-size: 16px; - background-color: light-dark(var(--white), var(--black)); color: light-dark(var(--off-black), var(--off-white)); } @@ -79,7 +98,7 @@ body { a { text-decoration: none; - color: var(--primary-color); + color: var(--link-color); } form { @@ -190,7 +209,13 @@ button.secondary, .button.secondary { background-color: var(--iris); color: var(--white); - transition: all 0.1s ease-in-out; +} + +button.secondary:hover, +.button.secondary:hover { + background-color: light-dark(var(--white), var(--black)); + color: var(--iris); + border-color: var(--iris); } button.tertiary, @@ -198,6 +223,13 @@ button.tertiary, background-color: var(--orange); } +button.tertiary:hover, +.button.tertiary:hover { + background-color: light-dark(var(--white), var(--black)); + color: var(--orange); + border-color: var(--orange); +} + button.thin, .button.thin { font-weight: normal; @@ -212,8 +244,8 @@ button.icon, background-color: transparent; padding: 0.5rem; border-radius: 999px; - border: 2px solid var(--white-xlight); - color: var(--white); + border: light-dark(2px solid var(--black-xlight), 2px solid var(--white-xlight)); + color: light-dark(var(--black), var(--white)); } button.icon:hover, @@ -570,4 +602,4 @@ td:nth-child(even) { [id$="-page"] { align-items: center; justify-content: center; -} +} \ No newline at end of file diff --git a/hyperdrive/Cargo.toml b/hyperdrive/Cargo.toml index 28ed21e5e..94a6877df 100644 --- a/hyperdrive/Cargo.toml +++ b/hyperdrive/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "hyperdrive" authors = ["Sybil Technologies AG"] -version = "1.2.0" +version = "1.2.1" edition = "2021" description = "A general-purpose sovereign cloud computing platform" homepage = "https://hyperware.ai" diff --git a/hyperdrive/packages/app-store/ui/package-lock.json b/hyperdrive/packages/app-store/ui/package-lock.json index 3024d48dd..26030f5b6 100644 --- a/hyperdrive/packages/app-store/ui/package-lock.json +++ b/hyperdrive/packages/app-store/ui/package-lock.json @@ -42,6 +42,27 @@ "typescript": "^5.2.2", "vite": "^5.0.8", "vite-plugin-node-polyfills": "^0.22.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "^4.35.0", + "@rollup/rollup-android-arm64": "^4.35.0", + "@rollup/rollup-darwin-arm64": "^4.35.0", + "@rollup/rollup-darwin-x64": "^4.35.0", + "@rollup/rollup-freebsd-arm64": "^4.35.0", + "@rollup/rollup-freebsd-x64": "^4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "^4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "^4.35.0", + "@rollup/rollup-linux-arm64-gnu": "^4.35.0", + "@rollup/rollup-linux-arm64-musl": "^4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "^4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "^4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "^4.35.0", + "@rollup/rollup-linux-s390x-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-musl": "^4.35.0", + "@rollup/rollup-win32-arm64-msvc": "^4.35.0", + "@rollup/rollup-win32-ia32-msvc": "^4.35.0", + "@rollup/rollup-win32-x64-msvc": "^4.35.0" } }, "node_modules/@adraffy/ens-normalize": { @@ -1478,6 +1499,174 @@ } } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.37.0.tgz", + "integrity": "sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.37.0.tgz", + "integrity": "sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.37.0.tgz", + "integrity": "sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz", + "integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.37.0.tgz", + "integrity": "sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.37.0.tgz", + "integrity": "sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.37.0.tgz", + "integrity": "sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.37.0.tgz", + "integrity": "sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.37.0.tgz", + "integrity": "sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.37.0.tgz", + "integrity": "sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.37.0.tgz", + "integrity": "sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.37.0.tgz", + "integrity": "sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.37.0.tgz", + "integrity": "sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.37.0.tgz", + "integrity": "sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.36.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.36.0.tgz", @@ -1504,6 +1693,42 @@ "linux" ] }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.37.0.tgz", + "integrity": "sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.37.0.tgz", + "integrity": "sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.37.0.tgz", + "integrity": "sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@safe-global/safe-apps-provider": { "version": "0.18.5", "resolved": "https://registry.npmjs.org/@safe-global/safe-apps-provider/-/safe-apps-provider-0.18.5.tgz", @@ -5435,6 +5660,19 @@ "dev": true, "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.2", "license": "MIT", @@ -7656,6 +7894,210 @@ "fsevents": "~2.3.2" } }, + "node_modules/rollup/node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.36.0.tgz", + "integrity": "sha512-jgrXjjcEwN6XpZXL0HUeOVGfjXhPyxAbbhD0BlXUB+abTOpbPiN5Wb3kOT7yb+uEtATNYF5x5gIfwutmuBA26w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-android-arm64": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.36.0.tgz", + "integrity": "sha512-NyfuLvdPdNUfUNeYKUwPwKsE5SXa2J6bCt2LdB/N+AxShnkpiczi3tcLJrm5mA+eqpy0HmaIY9F6XCa32N5yzg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.36.0.tgz", + "integrity": "sha512-JQ1Jk5G4bGrD4pWJQzWsD8I1n1mgPXq33+/vP4sk8j/z/C2siRuxZtaUA7yMTf71TCZTZl/4e1bfzwUmFb3+rw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-darwin-x64": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.36.0.tgz", + "integrity": "sha512-6c6wMZa1lrtiRsbDziCmjE53YbTkxMYhhnWnSW8R/yqsM7a6mSJ3uAVT0t8Y/DGt7gxUWYuFM4bwWk9XCJrFKA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.36.0.tgz", + "integrity": "sha512-KXVsijKeJXOl8QzXTsA+sHVDsFOmMCdBRgFmBb+mfEb/7geR7+C8ypAml4fquUt14ZyVXaw2o1FWhqAfOvA4sg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.36.0.tgz", + "integrity": "sha512-dVeWq1ebbvByI+ndz4IJcD4a09RJgRYmLccwlQ8bPd4olz3Y213uf1iwvc7ZaxNn2ab7bjc08PrtBgMu6nb4pQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.36.0.tgz", + "integrity": "sha512-bvXVU42mOVcF4le6XSjscdXjqx8okv4n5vmwgzcmtvFdifQ5U4dXFYaCB87namDRKlUL9ybVtLQ9ztnawaSzvg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.36.0.tgz", + "integrity": "sha512-JFIQrDJYrxOnyDQGYkqnNBtjDwTgbasdbUiQvcU8JmGDfValfH1lNpng+4FWlhaVIR4KPkeddYjsVVbmJYvDcg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.36.0.tgz", + "integrity": "sha512-KqjYVh3oM1bj//5X7k79PSCZ6CvaVzb7Qs7VMWS+SlWB5M8p3FqufLP9VNp4CazJ0CsPDLwVD9r3vX7Ci4J56A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.36.0.tgz", + "integrity": "sha512-QiGnhScND+mAAtfHqeT+cB1S9yFnNQ/EwCg5yE3MzoaZZnIV0RV9O5alJAoJKX/sBONVKeZdMfO8QSaWEygMhw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.36.0.tgz", + "integrity": "sha512-1ZPyEDWF8phd4FQtTzMh8FQwqzvIjLsl6/84gzUxnMNFBtExBtpL51H67mV9xipuxl1AEAerRBgBwFNpkw8+Lg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.36.0.tgz", + "integrity": "sha512-VMPMEIUpPFKpPI9GZMhJrtu8rxnp6mJR3ZzQPykq4xc2GmdHj3Q4cA+7avMyegXy4n1v+Qynr9fR88BmyO74tg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.36.0.tgz", + "integrity": "sha512-ttE6ayb/kHwNRJGYLpuAvB7SMtOeQnVXEIpMtAvx3kepFQeowVED0n1K9nAdraHUPJ5hydEMxBpIR7o4nrm8uA==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.36.0.tgz", + "integrity": "sha512-4a5gf2jpS0AIe7uBjxDeUMNcFmaRTbNv7NxI5xOCs4lhzsVyGR/0qBXduPnoWf6dGC365saTiwag8hP1imTgag==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.36.0.tgz", + "integrity": "sha512-qbqt4N7tokFwwSVlWDsjfoHgviS3n/vZ8LK0h1uLG9TYIRuUTJC88E1xb3LM2iqZ/WTqNQjYrtmtGmrmmawB6A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.36.0.tgz", + "integrity": "sha512-t+RY0JuRamIocMuQcfwYSOkmdX9dtkr1PbhKW42AMvaDQa+jOdpUYysroTF/nuPpAaQMWp7ye+ndlmmthieJrQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/rollup/node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.36.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.36.0.tgz", + "integrity": "sha512-aRXd7tRZkWLqGbChgcMMDEHjOKudo1kChb1Jt1IfR8cY/KIpgNviLeJy5FUb9IpSuQj8dU2fAYNMPW/hLKOSTw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/run-parallel": { "version": "1.2.0", "funding": [ diff --git a/hyperdrive/packages/app-store/ui/package.json b/hyperdrive/packages/app-store/ui/package.json index f5009e1da..0a0922414 100644 --- a/hyperdrive/packages/app-store/ui/package.json +++ b/hyperdrive/packages/app-store/ui/package.json @@ -47,5 +47,26 @@ "typescript": "^5.2.2", "vite": "^5.0.8", "vite-plugin-node-polyfills": "^0.22.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "^4.35.0", + "@rollup/rollup-android-arm64": "^4.35.0", + "@rollup/rollup-darwin-arm64": "^4.35.0", + "@rollup/rollup-darwin-x64": "^4.35.0", + "@rollup/rollup-freebsd-arm64": "^4.35.0", + "@rollup/rollup-freebsd-x64": "^4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "^4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "^4.35.0", + "@rollup/rollup-linux-arm64-gnu": "^4.35.0", + "@rollup/rollup-linux-arm64-musl": "^4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "^4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "^4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "^4.35.0", + "@rollup/rollup-linux-s390x-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-musl": "^4.35.0", + "@rollup/rollup-win32-arm64-msvc": "^4.35.0", + "@rollup/rollup-win32-ia32-msvc": "^4.35.0", + "@rollup/rollup-win32-x64-msvc": "^4.35.0" } -} \ No newline at end of file +} diff --git a/hyperdrive/packages/app-store/ui/src/components/AppCard.tsx b/hyperdrive/packages/app-store/ui/src/components/AppCard.tsx new file mode 100644 index 000000000..3b31d8cde --- /dev/null +++ b/hyperdrive/packages/app-store/ui/src/components/AppCard.tsx @@ -0,0 +1,46 @@ +import { AppListing } from "../types/Apps"; +import React from "react"; +import { useNavigate } from "react-router-dom"; + +export const AppCard: React.FC<{ app: AppListing }> = ({ app }) => { + if (!app || !app.package_id) return null; + const navigate = useNavigate(); + + return ( +

{ + navigate(`/app/${app.package_id.package_name}:${app.package_id.publisher_node}`); + }} + > +
+ {`${app.metadata?.name +
+

+ {app.metadata?.name || app.package_id.package_name} +

+

+ {app.package_id.publisher_node} +

+
+
+ {app.metadata?.description && ( +

+ {app.metadata.description.length > 100 + ? `${app.metadata.description.substring(0, 100)}...` + : app.metadata.description} +

+ )} +
+ ); +}; \ No newline at end of file diff --git a/hyperdrive/packages/app-store/ui/src/components/NotificationBay.tsx b/hyperdrive/packages/app-store/ui/src/components/NotificationBay.tsx index 20933bda6..5c6d94055 100644 --- a/hyperdrive/packages/app-store/ui/src/components/NotificationBay.tsx +++ b/hyperdrive/packages/app-store/ui/src/components/NotificationBay.tsx @@ -65,9 +65,9 @@ const NotificationBay: React.FC = () => {

{notification.message}

{notification.type === 'download' && notification.metadata?.progress && ( -
+
diff --git a/hyperdrive/packages/app-store/ui/src/index.css b/hyperdrive/packages/app-store/ui/src/index.css index 9c2925873..7deff9474 100644 --- a/hyperdrive/packages/app-store/ui/src/index.css +++ b/hyperdrive/packages/app-store/ui/src/index.css @@ -1,54 +1,3 @@ -/* App Grid */ -.app-grid { - display: grid; - grid-template-columns: repeat(auto-fill, minmax(250px, 1fr)); - gap: 1rem; - margin-bottom: 1.5rem; -} - -.app-grid .app-card { - padding: 1rem; - border-radius: var(--radius-lg); - background: light-dark(rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0.05)) !important; - transition: background-color 0.2s ease; - display: flex; - flex-direction: column; - align-items: center; -} - -.app-grid .app-card:hover { - background: light-dark(rgba(255, 255, 255, 0.25), rgba(255, 255, 255, 0.1)) !important; -} - -.app-card .my-0.mx-auto.fit-content { - display: flex; - justify-content: center; - width: 100%; - margin-bottom: 0.5rem; -} - -.app-card img { - display: block; - margin: 0 auto; -} - -.app-card .app-name { - text-align: center; - margin-bottom: 0.3rem; - width: 100%; -} - -.app-card .app-publisher { - text-align: center; - margin-bottom: 1rem; - width: 100%; -} - -.app-card .app-description { - text-align: center; - width: 100%; -} - /* Messages */ .message { display: flex; @@ -152,26 +101,13 @@ margin: 0 auto; } -.store-page > p, -.store-page > .button.tertiary { +.store-page>p, +.store-page>.button.tertiary { text-align: center; display: block; margin: 0 auto; } -.reset-store-container { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - margin-top: 2rem; - text-align: center; -} - -.reset-store-container p { - margin-bottom: 0.5rem; -} - .app-description { margin-bottom: 0.5rem; line-height: 1.6; @@ -216,9 +152,7 @@ } /* Action Buttons */ -.action-button, -.primary, -.secondary { +.action-button { display: inline-flex; align-items: center; justify-content: center; @@ -241,20 +175,8 @@ color: var(--off-black); } -.secondary { - background-color: light-dark(var(--surface-light), var(--surface-dark)); - color: var(--primary-color); - border: 2px solid var(--primary-color); -} - -.secondary:hover:not(:disabled) { - background-color: var(--primary-color); - color: var(--text-light); -} -.action-button:disabled, -.primary:disabled, -.secondary:disabled { +.action-button:disabled { opacity: 0.5; cursor: not-allowed; } @@ -562,20 +484,6 @@ margin-left: auto; } -.progress-bar { - margin-top: 0.5rem; - height: 4px; - background-color: light-dark(var(--surface-light), var(--surface-dark)); - border-radius: 2px; - overflow: hidden; -} - -.progress { - height: 100%; - background-color: var(--primary-color); - transition: width 0.3s ease; -} - /* Modal styles */ .modal-overlay { position: fixed; @@ -1005,11 +913,4 @@ background-color: light-dark(var(--surface-light), var(--surface-dark)); padding: 1.5rem; border-radius: var(--radius-lg); -} - -.modal-header { - display: flex; - align-items: center; - gap: 0.75rem; - margin-bottom: 1rem; } \ No newline at end of file diff --git a/hyperdrive/packages/app-store/ui/src/pages/StorePage.tsx b/hyperdrive/packages/app-store/ui/src/pages/StorePage.tsx index 65eacdd9f..0a4c75a89 100644 --- a/hyperdrive/packages/app-store/ui/src/pages/StorePage.tsx +++ b/hyperdrive/packages/app-store/ui/src/pages/StorePage.tsx @@ -1,9 +1,95 @@ import React, { useState, useEffect } from "react"; import useAppsStore from "../store"; import { AppListing } from "../types/Apps"; -import { Link } from "react-router-dom"; import { FaSearch } from "react-icons/fa"; import { ResetButton } from "../components"; +import { AppCard } from "../components/AppCard"; +const mockApps: AppListing[] = [ + { + package_id: { + package_name: "test-app", + publisher_node: "test-node", + }, + tba: "0x0000000000000000000000000000000000000000", + metadata_uri: "https://example.com/metadata", + metadata_hash: "1234567890", + auto_update: false, + metadata: { + name: "Test App", + description: "This is a test app", + properties: { + package_name: "test-app", + publisher: "test-node", + current_version: "1.0.0", + mirrors: [], + code_hashes: [], + }, + }, + }, + { + package_id: { + package_name: "test-app", + publisher_node: "test-node", + }, + tba: "0x0000000000000000000000000000000000000000", + metadata_uri: "https://example.com/metadata", + metadata_hash: "1234567890", + auto_update: false, + metadata: { + name: "Test App", + description: "This is a test app", + properties: { + package_name: "test-app", + publisher: "test-node", + current_version: "1.0.0", + mirrors: [], + code_hashes: [], + }, + }, + }, + { + package_id: { + package_name: "test-app", + publisher_node: "test-node", + }, + tba: "0x0000000000000000000000000000000000000000", + metadata_uri: "https://example.com/metadata", + metadata_hash: "1234567890", + auto_update: false, + metadata: { + name: "Test App TestappTestappTestappTestappTestapp", + description: "adsf adf adsf asdf asdf adgfagafege aadsf adf adsf asdf asdf adgfagafege aadsf adf adsf asdf asdf adgfagafege aadsf adf adsf asdf asdf adgfagafege aadsf adf adsf asdf asdf adgfagafege aadsf adf adsf asdf asdf adgfagafege a", + properties: { + package_name: "test-app", + publisher: "test-node", + current_version: "1.0.0", + mirrors: [], + code_hashes: [], + }, + }, + }, + { + package_id: { + package_name: "test-app", + publisher_node: "test-node", + }, + tba: "0x0000000000000000000000000000000000000000", + metadata_uri: "https://example.com/metadata", + metadata_hash: "1234567890", + auto_update: false, + metadata: { + name: "Test App", + description: "This is a test app", + properties: { + package_name: "test-app", + publisher: "test-nodetest-nodetest-nodetest-nodetest-node", + current_version: "1.0.0", + mirrors: [], + code_hashes: [], + }, + }, + }, +]; export default function StorePage() { const { listings, fetchListings, fetchUpdates } = useAppsStore(); @@ -42,49 +128,26 @@ export default function StorePage() {

Loading...

) : filteredApps.length === 0 ? (

No apps available.

+ //
+ // {mockApps.map((app) => ( + // + // ))} + //
) : ( -
+
{filteredApps.map((app) => ( ))}
)} -
+

Can't find the app you're looking for?

); } - -const AppCard: React.FC<{ app: AppListing }> = ({ app }) => { - if (!app || !app.package_id) return null; - - return ( - -
- {`${app.metadata?.name -
-

- {app.metadata?.name || app.package_id.package_name} -

-

- {app.package_id.publisher_node} -

- {app.metadata?.description && ( -

- {app.metadata.description.length > 100 - ? `${app.metadata.description.substring(0, 100)}...` - : app.metadata.description} -

- )} - - ); -}; diff --git a/hyperdrive/packages/homepage/ui/package-lock.json b/hyperdrive/packages/homepage/ui/package-lock.json index dcf8d3797..072cec70a 100644 --- a/hyperdrive/packages/homepage/ui/package-lock.json +++ b/hyperdrive/packages/homepage/ui/package-lock.json @@ -33,6 +33,27 @@ "rollup": "^4.35.0", "typescript": "^5.2.2", "vite": "^5.2.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "^4.35.0", + "@rollup/rollup-android-arm64": "^4.35.0", + "@rollup/rollup-darwin-arm64": "^4.35.0", + "@rollup/rollup-darwin-x64": "^4.35.0", + "@rollup/rollup-freebsd-arm64": "^4.35.0", + "@rollup/rollup-freebsd-x64": "^4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "^4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "^4.35.0", + "@rollup/rollup-linux-arm64-gnu": "^4.35.0", + "@rollup/rollup-linux-arm64-musl": "^4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "^4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "^4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "^4.35.0", + "@rollup/rollup-linux-s390x-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-musl": "^4.35.0", + "@rollup/rollup-win32-arm64-msvc": "^4.35.0", + "@rollup/rollup-win32-ia32-msvc": "^4.35.0", + "@rollup/rollup-win32-x64-msvc": "^4.35.0" } }, "node_modules/@ampproject/remapping": { @@ -936,6 +957,174 @@ } } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.37.0.tgz", + "integrity": "sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.37.0.tgz", + "integrity": "sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.37.0.tgz", + "integrity": "sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz", + "integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.37.0.tgz", + "integrity": "sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.37.0.tgz", + "integrity": "sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.37.0.tgz", + "integrity": "sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.37.0.tgz", + "integrity": "sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.37.0.tgz", + "integrity": "sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.37.0.tgz", + "integrity": "sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.37.0.tgz", + "integrity": "sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.37.0.tgz", + "integrity": "sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.37.0.tgz", + "integrity": "sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.37.0.tgz", + "integrity": "sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.37.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.37.0.tgz", @@ -949,6 +1138,54 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.37.0.tgz", + "integrity": "sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.37.0.tgz", + "integrity": "sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.37.0.tgz", + "integrity": "sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.37.0.tgz", + "integrity": "sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@types/babel__core": { "version": "7.20.5", "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", diff --git a/hyperdrive/packages/homepage/ui/package.json b/hyperdrive/packages/homepage/ui/package.json index 04f9e2cde..faf3c6047 100644 --- a/hyperdrive/packages/homepage/ui/package.json +++ b/hyperdrive/packages/homepage/ui/package.json @@ -36,5 +36,26 @@ "rollup": "^4.35.0", "typescript": "^5.2.2", "vite": "^5.2.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "^4.35.0", + "@rollup/rollup-android-arm64": "^4.35.0", + "@rollup/rollup-darwin-arm64": "^4.35.0", + "@rollup/rollup-darwin-x64": "^4.35.0", + "@rollup/rollup-freebsd-arm64": "^4.35.0", + "@rollup/rollup-freebsd-x64": "^4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "^4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "^4.35.0", + "@rollup/rollup-linux-arm64-gnu": "^4.35.0", + "@rollup/rollup-linux-arm64-musl": "^4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "^4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "^4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "^4.35.0", + "@rollup/rollup-linux-s390x-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-musl": "^4.35.0", + "@rollup/rollup-win32-arm64-msvc": "^4.35.0", + "@rollup/rollup-win32-ia32-msvc": "^4.35.0", + "@rollup/rollup-win32-x64-msvc": "^4.35.0" } } diff --git a/hyperdrive/packages/homepage/ui/src/components/AllApps.tsx b/hyperdrive/packages/homepage/ui/src/components/AllApps.tsx index 1f8e1ee94..8a64df913 100644 --- a/hyperdrive/packages/homepage/ui/src/components/AllApps.tsx +++ b/hyperdrive/packages/homepage/ui/src/components/AllApps.tsx @@ -1,6 +1,7 @@ import React, { useState, useEffect, useMemo } from "react"; import useHomepageStore, { HomepageApp } from "../store/homepageStore"; import AppDisplay from "./AppDisplay"; +import classNames from "classnames"; const AllApps: React.FC = () => { const { apps } = useHomepageStore(); @@ -86,9 +87,24 @@ const AllApps: React.FC = () => { }; return ( -
+
{ onDragOver={(e) => handleDragOver(e, index)} onDragEnd={handleDragEnd} onDrop={(e) => handleDrop(e, index)} - className={`app-wrapper ${draggedIndex === index ? "dragging" : "" - } ${dragOverIndex === index ? "drag-over" : ""} - ${index === displayedApps.length - 1 ? "last-app" : ""} - ${index === 0 ? "first-app" : ""} - ${index % 5 === 0 ? "first-in-row" : ""} - ${(index + 1) % 5 === 0 || index === displayedApps.length - 1 ? "last-in-row" : ""} - `} + className={classNames("app-wrapper", { + dragging: draggedIndex === index, + "drag-over": dragOverIndex === index, + lastApp: index === displayedApps.length - 1, + firstApp: index === 0, + "first-in-row": index % 5 === 0, + "last-in-row": (index + 1) % 5 === 0 || index === displayedApps.length - 1 + })} >
⋮⋮
diff --git a/hyperdrive/packages/homepage/ui/src/components/AppDisplay.tsx b/hyperdrive/packages/homepage/ui/src/components/AppDisplay.tsx index b2952b2db..fdc3295c7 100644 --- a/hyperdrive/packages/homepage/ui/src/components/AppDisplay.tsx +++ b/hyperdrive/packages/homepage/ui/src/components/AppDisplay.tsx @@ -29,7 +29,7 @@ const AppDisplay: React.FC = ({ app }) => { ) : ( )} -
{app?.label || app?.package_name}
+
{app?.label || app?.package_name}
); }; diff --git a/hyperdrive/packages/homepage/ui/src/components/Modal.tsx b/hyperdrive/packages/homepage/ui/src/components/Modal.tsx index 570099a48..b85d18d22 100644 --- a/hyperdrive/packages/homepage/ui/src/components/Modal.tsx +++ b/hyperdrive/packages/homepage/ui/src/components/Modal.tsx @@ -1,12 +1,15 @@ import { FaX } from "react-icons/fa6" import { useEffect } from 'react'; +import classNames from "classnames"; interface Props extends React.HTMLAttributes { title: string onClose: () => void + outerClassName?: string + innerClassName?: string } -export const Modal: React.FC = ({ title, onClose, children }) => { +export const Modal: React.FC = ({ title, onClose, children, outerClassName, innerClassName }) => { useEffect(() => { const handleKeyDown = (event: KeyboardEvent) => { if (event.key === 'Escape') { @@ -22,11 +25,30 @@ export const Modal: React.FC = ({ title, onClose, children }) => { }, [onClose]); return ( -
-
-
-

{title}

-
diff --git a/hyperdrive/packages/homepage/ui/src/components/Widgets.tsx b/hyperdrive/packages/homepage/ui/src/components/Widgets.tsx index 02988bb01..df99dc813 100644 --- a/hyperdrive/packages/homepage/ui/src/components/Widgets.tsx +++ b/hyperdrive/packages/homepage/ui/src/components/Widgets.tsx @@ -50,8 +50,15 @@ const Widgets = () => { return (
{orderedWidgets.map((wid, index) => (
{ title='Widget Settings' onClose={() => setShowWidgetsSettings(false)} > -
- {apps.filter((app) => app.widget).map((app) => { - return ( -
-

{app.label}

- -
- ); - })} - -
+ {apps.filter((app) => app.widget).map((app) => { + return ( +
+

{app.label}

+ +
+ ); + })} + } diff --git a/hyperdrive/packages/homepage/ui/src/index.css b/hyperdrive/packages/homepage/ui/src/index.css index 797ad03a6..4d9015e8a 100644 --- a/hyperdrive/packages/homepage/ui/src/index.css +++ b/hyperdrive/packages/homepage/ui/src/index.css @@ -1,40 +1,4 @@ -h1, -h2, -h3, -h4, -h5, -h6, -p, -a, -button, -input, -textarea, -span { - font-family: "Space Grotesk", monospace; -} - -#homepage { - height: 100vh; - width: 100vw; - display: flex; - justify-content: center; - align-items: flex-start; - padding-top: 2vh; -} - -.homepage-container { - width: 960px; - max-width: 960px; - margin: 0 auto; -} - -#app-name { - color: var(--white); -} - - -header, -#widgets-container { +header { background-color: light-dark(var(--white), var(--tasteful-dark)); border-color: light-dark(var(--tasteful-dark), var(--off-white)); } @@ -69,48 +33,6 @@ header button { left: 0; } -#widgets-container { - display: flex; - flex-direction: column; - background-color: light-dark(var(--white), var(--tasteful-dark)); - /* border-radius: 20px; */ - overflow: hidden; - border: 1px solid light-dark(var(--off-black), var(--off-white)); - padding: 1em; - padding-top: 0em; - gap: 1em; - /* Remove fixed max-height and overflow for auto-fitting */ - height: auto; - overflow-y: visible; - /* Fixed width to hold exactly 3 widgets - 300px per widget plus gaps and paddings */ - max-width: 960px; - margin: 0 auto; - width: 960px; -} - -#widgets { - margin-top: 1em; - width: 100%; - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: flex-start; - gap: 10px; - margin-bottom: 0; - background-color: transparent !important; - padding: 0em; - /* Limit to exactly 3 widgets per row */ - max-width: 100%; -} - -.widgets-container { - display: grid; - grid-template-columns: repeat(3, minmax(0, 1fr)); - grid-gap: 10px; - width: 100%; - max-width: 960px; -} - .widget { display: flex; flex-direction: column; @@ -173,23 +95,6 @@ footer { max-width: 100vw; } - -#all-apps { - background-color: var(--off-black); - border-color: var(--off-white); - border-radius: 0 0 1em 1em; - border: 1px solid light-dark(var(--tasteful-dark), var(--off-white)); - border-top: none; -} - -/* When there's no expand button, ensure the container has proper borders - Applied from JavaScript by adding a class to the container */ -#all-apps.no-expand-button-container { - border-bottom: 1px solid light-dark(var(--tasteful-dark), var(--off-white)); - border-left: 1px solid light-dark(var(--tasteful-dark), var(--off-white)); - border-right: 1px solid light-dark(var(--tasteful-dark), var(--off-white)); -} - .apps-grid { display: grid; width: 100%; @@ -211,14 +116,6 @@ footer { height: 100%; } -/* Remove borders on mobile */ -@media (max-width: 960px) { - .apps-grid::before, - .apps-grid::after { - display: none; - } -} - .apps-grid.apps-count-3 { grid-template-columns: repeat(3, 1fr); } @@ -241,30 +138,6 @@ footer { } @media (max-width: 960px) { - - body, - html { - height: 100%; - margin: 0; - padding: 0; - overflow: hidden; - -webkit-overflow-scrolling: touch; - } - - #homepage { - display: flex; - flex-direction: column; - height: 100vh; - overflow: hidden; - width: 100%; - padding-top: 0; - } - - .homepage-container { - width: 100%; - max-width: 100%; - } - header { flex-shrink: 0; padding: 0.75em; @@ -276,50 +149,7 @@ footer { font-size: 1.25em; } - header button { - padding: 8px; - min-width: 44px; - min-height: 44px; - } - - #widgets-container { - flex: 1; - display: flex; - flex-direction: column; - overflow-y: auto; - max-height: none; - border-radius: 0; - padding: 0.5em; - width: auto; - max-width: 100%; - } - - #widgets { - flex: 1; - padding: 0.5em; - padding-bottom: 10vh; - } - - .widgets-container { - display: flex; - flex-direction: column; - grid-template-columns: 1fr; - } - - #all-apps { - position: fixed; - bottom: 0; - left: 0; - right: 0; - background-color: var(--off-black); - z-index: 1000; - padding: 0; - border-radius: 0; - box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1); - } - .apps-grid { - display: none; max-height: 50vh; overflow-y: auto; -webkit-overflow-scrolling: touch; @@ -339,28 +169,6 @@ footer { touch-action: manipulation; } - .modal-inner { - width: 90%; - max-width: 400px; - max-height: 80vh; - margin: 10vh auto; - border-radius: 12px; - } - - .widget-settings-item { - padding: 1em; - margin: 0.5em 0; - border-radius: 8px; - } - - .widget-settings button { - min-height: 44px; - padding: 0.75em 1em; - margin: 0.5em 0; - width: 100%; - border-radius: 8px; - } - .drag-handle { display: none; } @@ -370,36 +178,11 @@ footer { touch-action: manipulation; } - .modal { - padding: 1em; - } - - .modal-header { - padding: 1em; - gap: 0.5em; - } - - .modal-header button { - min-width: 44px; - min-height: 44px; - padding: 0.5em; - } - /* Add smooth scrolling for iOS momentum scroll */ *:where([class*="container"], [class*="grid"]) { -webkit-overflow-scrolling: touch; } - /* Improve tap targets */ - button, - a, - input[type="button"], - input[type="submit"] { - min-height: 44px; - min-width: 44px; - padding: 0.75em; - } - .widget { width: 100%; height: auto; @@ -445,63 +228,6 @@ footer { border-right: none; } -/* For apps without "Show Apps" button, make border more significant on edges */ -.apps-grid.no-expand-button .app-wrapper { - border-bottom: 1px solid rgba(255, 255, 255, 0.2); - border-right: 0.5px solid rgba(255, 255, 255, 0.2); -} - -/* Enhanced border for apps that form the bottom edge when no expand button */ -.apps-grid.no-expand-button .app-wrapper:nth-last-child(-n+5) { - border-bottom-width: 1px; -} - -/* When there's no expand button, add proper border radius and borders */ -.apps-grid.no-expand-button { - /* Remove the border that would continue to the "Show Apps" button */ - border-bottom: none; -} - -.apps-grid.no-expand-button .app-wrapper.last-app.first-app { - /* Only one app */ - border-radius: 0 0 1em 1em; - border-bottom: 1px solid rgba(255, 255, 255, 0.2); /* Add significant border */ -} - -.apps-grid.no-expand-button .app-wrapper.last-app:not(.first-app) { - /* Last app in a multi-app grid */ - border-radius: 0 0 1em 0; - border-bottom: 1px solid rgba(255, 255, 255, 0.2); /* Add significant border */ -} - -.apps-grid.no-expand-button .app-wrapper.first-in-row.last-in-row:not(.first-app) { - /* Single app in a row that's not the first row */ - border-radius: 0 0 1em 1em; - border-bottom: 1px solid rgba(255, 255, 255, 0.2); /* Add significant border */ -} - -.apps-grid.no-expand-button .app-wrapper.first-in-row:not(.last-in-row):not(.first-app) { - /* First app in a row that has multiple apps */ - border-radius: 0 0 0 1em; -} - -.apps-grid.no-expand-button .app-wrapper.last-in-row:not(.first-in-row) { - /* Last app in a row that has multiple apps */ - border-radius: 0 0 1em 0; - border-bottom: 1px solid rgba(255, 255, 255, 0.2); /* Add significant border */ -} - -/* Fix for last row in a no-expand-button grid */ -.apps-grid.no-expand-button .app-wrapper:nth-last-child(-n+5):not(.last-in-row) { - /* Apps in last row that aren't at the end of their row */ - border-bottom: 1px solid rgba(255, 255, 255, 0.2); /* Add significant border */ -} - -/* Add left border to first column in last row */ -.apps-grid.no-expand-button .app-wrapper:nth-last-child(5n+1) { - border-left: 1px solid rgba(255, 255, 255, 0.2); /* Add significant border */ -} - .widget-wrapper { position: relative; transition: transform 0.2s ease; @@ -535,54 +261,12 @@ footer { transform: translateY(5px); } -.modal { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - text-align: center; - background-color: rgb(0, 0, 0, 0.8); - display: flex; - justify-content: center; - align-items: center; -} - -.modal-inner { - width: fit-content; - text-align: center; - background-color: light-dark(var(--off-white), var(--tasteful-dark)); - border-radius: 1em; - border: 1px solid light-dark(var(--off-black), var(--off-white)); - padding: 1em; - margin: auto; - min-width: 400px; -} - -.modal-header { - text-align: center; - display: flex; - flex-direction: row; - justify-content: space-between; - margin-bottom: 1em; -} - .modal .widget-settings { display: flex; flex-direction: column; gap: 0.5em; } -.widget-settings-item { - display: flex; - flex-direction: row; - justify-content: space-between; - align-items: center; - gap: 1em; - padding: 1em; - border: 1px solid light-dark(var(--off-black), var(--off-white)); - border-radius: 0.5em; -} .widget-settings button { margin-top: 0.5em; @@ -599,4 +283,4 @@ footer { .empty-state p { text-align: center; font-size: 14px; -} +} \ No newline at end of file diff --git a/hyperdrive/packages/homepage/ui/src/pages/Homepage.tsx b/hyperdrive/packages/homepage/ui/src/pages/Homepage.tsx index 966de2a4e..0e39b763e 100644 --- a/hyperdrive/packages/homepage/ui/src/pages/Homepage.tsx +++ b/hyperdrive/packages/homepage/ui/src/pages/Homepage.tsx @@ -40,8 +40,15 @@ function Homepage() { }, [our]); return ( -
-
+
+

@@ -71,15 +78,14 @@ function Homepage() {

-
- -
+ +
{showWidgetsSettings && }
-
+ ); } diff --git a/hyperdrive/packages/settings/ui/package-lock.json b/hyperdrive/packages/settings/ui/package-lock.json index 5bfd73ce9..370e6a5a5 100644 --- a/hyperdrive/packages/settings/ui/package-lock.json +++ b/hyperdrive/packages/settings/ui/package-lock.json @@ -28,6 +28,27 @@ "rollup": "^4.35.0", "typescript": "^5.4.5", "vite": "^5.2.11" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "^4.35.0", + "@rollup/rollup-android-arm64": "^4.35.0", + "@rollup/rollup-darwin-arm64": "^4.35.0", + "@rollup/rollup-darwin-x64": "^4.35.0", + "@rollup/rollup-freebsd-arm64": "^4.35.0", + "@rollup/rollup-freebsd-x64": "^4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "^4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "^4.35.0", + "@rollup/rollup-linux-arm64-gnu": "^4.35.0", + "@rollup/rollup-linux-arm64-musl": "^4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "^4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "^4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "^4.35.0", + "@rollup/rollup-linux-s390x-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-musl": "^4.35.0", + "@rollup/rollup-win32-arm64-msvc": "^4.35.0", + "@rollup/rollup-win32-ia32-msvc": "^4.35.0", + "@rollup/rollup-win32-x64-msvc": "^4.35.0" } }, "node_modules/@adraffy/ens-normalize": { @@ -5709,6 +5730,174 @@ } } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.37.0.tgz", + "integrity": "sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.37.0.tgz", + "integrity": "sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.37.0.tgz", + "integrity": "sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz", + "integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.37.0.tgz", + "integrity": "sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.37.0.tgz", + "integrity": "sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.37.0.tgz", + "integrity": "sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.37.0.tgz", + "integrity": "sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.37.0.tgz", + "integrity": "sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.37.0.tgz", + "integrity": "sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.37.0.tgz", + "integrity": "sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.37.0.tgz", + "integrity": "sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.37.0.tgz", + "integrity": "sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.37.0.tgz", + "integrity": "sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.37.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.37.0.tgz", @@ -5722,6 +5911,54 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.37.0.tgz", + "integrity": "sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.37.0.tgz", + "integrity": "sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.37.0.tgz", + "integrity": "sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.37.0.tgz", + "integrity": "sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@safe-global/safe-apps-provider": { "version": "0.18.3", "resolved": "https://registry.npmjs.org/@safe-global/safe-apps-provider/-/safe-apps-provider-0.18.3.tgz", diff --git a/hyperdrive/packages/settings/ui/package.json b/hyperdrive/packages/settings/ui/package.json index a55d9ed6c..efc4cea7f 100644 --- a/hyperdrive/packages/settings/ui/package.json +++ b/hyperdrive/packages/settings/ui/package.json @@ -31,5 +31,26 @@ "rollup": "^4.35.0", "typescript": "^5.4.5", "vite": "^5.2.11" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "^4.35.0", + "@rollup/rollup-android-arm64": "^4.35.0", + "@rollup/rollup-darwin-arm64": "^4.35.0", + "@rollup/rollup-darwin-x64": "^4.35.0", + "@rollup/rollup-freebsd-arm64": "^4.35.0", + "@rollup/rollup-freebsd-x64": "^4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "^4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "^4.35.0", + "@rollup/rollup-linux-arm64-gnu": "^4.35.0", + "@rollup/rollup-linux-arm64-musl": "^4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "^4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "^4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "^4.35.0", + "@rollup/rollup-linux-s390x-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-musl": "^4.35.0", + "@rollup/rollup-win32-arm64-msvc": "^4.35.0", + "@rollup/rollup-win32-ia32-msvc": "^4.35.0", + "@rollup/rollup-win32-x64-msvc": "^4.35.0" } -} \ No newline at end of file +} diff --git a/hyperdrive/packages/tester/tester/src/lib.rs b/hyperdrive/packages/tester/tester/src/lib.rs index 939508589..04bb0d36f 100644 --- a/hyperdrive/packages/tester/tester/src/lib.rs +++ b/hyperdrive/packages/tester/tester/src/lib.rs @@ -30,7 +30,7 @@ fn handle_response(message: &Message) -> anyhow::Result<()> { ); fail!("tester"); } - Response::new().body(message.body()).send().unwrap(); + Response::new().body(message.body()).send()?; Ok(()) } @@ -71,10 +71,7 @@ fn handle_request( if our.node != node_names[0] { // we are not the master node - Response::new() - .body(TesterResponse::Run(Ok(()))) - .send() - .unwrap(); + Response::new().body(TesterResponse::Run(Ok(()))).send()?; return Ok(()); } @@ -120,35 +117,42 @@ fn handle_request( for test_name in test_names { let test_path = format!("{}/{}.wasm", dir_prefix, test_name); - let (mut request_caps, grant_caps) = caps_by_child - .get(test_name) - .and_then(|caps_map| { - Some(( - caps_map["request_capabilities"] - .iter() - .map(|cap| { - serde_json::from_str(cap).unwrap_or_else(|_| { - Capability::new( - Address::new(our.node(), cap.parse::().unwrap()), + let caps_map = caps_by_child.get(test_name); + let (mut request_caps, grant_caps) = if let Some(caps_map) = caps_map { + ( + caps_map["request_capabilities"].iter().try_fold( + Vec::new(), + |mut caps, cap| -> anyhow::Result> { + let cap: anyhow::Result = + serde_json::from_str(cap).or_else(|_| { + let pid = cap.parse::()?; + Ok(Capability::new( + Address::new(our.node(), pid), "\"messaging\"", - ) - }) - }) - .collect(), - caps_map["grant_capabilities"] - .iter() - .map(|cap| { - serde_json::from_str::<(ProcessId, String)>(cap).unwrap_or_else(|_| { - ( - cap.parse::().unwrap(), - "\"messaging\"".to_string(), - ) - }) - }) - .collect(), - )) - }) - .unwrap_or((vec![], vec![])); + )) + }); + let cap = cap?; + caps.push(cap); + Ok(caps) + }, + )?, + caps_map["grant_capabilities"].iter().try_fold( + Vec::new(), + |mut caps, cap| -> anyhow::Result> { + let cap: anyhow::Result<(ProcessId, String)> = serde_json::from_str(cap) + .or_else(|_| { + let pid = cap.parse::()?; + Ok((pid, "\"messaging\"".to_string())) + }); + let cap = cap?; + caps.push(cap); + Ok(caps) + }, + )?, + ) + } else { + (vec![], vec![]) + }; println!("tester: request_caps: {request_caps:?}\ntester: grant_caps: {grant_caps:?}"); request_caps.extend(our_capabilities()); let child_process_id = match spawn( @@ -207,19 +211,14 @@ fn handle_message(our: &Address, node_names: &mut Vec) -> anyhow::Result return handle_request(our, &message, node_names); } -call_init!(init); -fn init(our: Address) { - let mut node_names: Vec = Vec::new(); +fn setup(our: &Address) -> anyhow::Result<()> { for path in [SETUP_PATH, TESTS_PATH] { match Request::new() .target(("our", "vfs", "distro", "sys")) - .body( - serde_json::to_vec(&vfs::VfsRequest { - path: path.into(), - action: vfs::VfsAction::CreateDrive, - }) - .unwrap(), - ) + .body(serde_json::to_vec(&vfs::VfsRequest { + path: path.into(), + action: vfs::VfsAction::CreateDrive, + })?) .send_and_await_response(5) { Err(_) => { @@ -236,28 +235,35 @@ fn init(our: Address) { // -> must give drive cap to rpc let sent = Request::new() .target(("our", "kernel", "distro", "sys")) - .body( - serde_json::to_vec(&kt::KernelCommand::GrantCapabilities { - target: ProcessId::new(Some("http-server"), "distro", "sys"), - capabilities: vec![kt::Capability { - issuer: Address::new( - our.node.clone(), - ProcessId::new(Some("vfs"), "distro", "sys"), - ), - params: serde_json::json!({ - "kind": "write", - "drive": path, - }) - .to_string(), - }], - }) - .unwrap(), - ) + .body(serde_json::to_vec(&kt::KernelCommand::GrantCapabilities { + target: ProcessId::new(Some("http-server"), "distro", "sys"), + capabilities: vec![kt::Capability { + issuer: Address::new( + our.node.clone(), + ProcessId::new(Some("vfs"), "distro", "sys"), + ), + params: serde_json::json!({ + "kind": "write", + "drive": path, + }) + .to_string(), + }], + })?) .send(); if sent.is_err() { fail!("tester"); } } + Ok(()) +} + +call_init!(init); +fn init(our: Address) { + let mut node_names: Vec = Vec::new(); + + if let Err(_) = setup(&our) { + fail!("tester"); + } loop { match handle_message(&our, &mut node_names) { diff --git a/hyperdrive/src/register-ui/package-lock.json b/hyperdrive/src/register-ui/package-lock.json index 8b8b6e205..f5fd6ff06 100644 --- a/hyperdrive/src/register-ui/package-lock.json +++ b/hyperdrive/src/register-ui/package-lock.json @@ -12,6 +12,7 @@ "@rainbow-me/rainbowkit": "^2.1.6", "@szhsin/react-menu": "^4.1.0", "@tanstack/react-query": "^5.45.1", + "classnames": "^2.5.1", "idna-uts46-hx": "^6.0.4", "is-valid-domain": "^0.1.6", "jazzicon": "^1.5.0", @@ -38,6 +39,27 @@ "tailwindcss": "^3.4.1", "typescript": "^5.3.3", "vite": "^5.2.10" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "^4.35.0", + "@rollup/rollup-android-arm64": "^4.35.0", + "@rollup/rollup-darwin-arm64": "^4.35.0", + "@rollup/rollup-darwin-x64": "^4.35.0", + "@rollup/rollup-freebsd-arm64": "^4.35.0", + "@rollup/rollup-freebsd-x64": "^4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "^4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "^4.35.0", + "@rollup/rollup-linux-arm64-gnu": "^4.35.0", + "@rollup/rollup-linux-arm64-musl": "^4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "^4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "^4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "^4.35.0", + "@rollup/rollup-linux-s390x-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-musl": "^4.35.0", + "@rollup/rollup-win32-arm64-msvc": "^4.35.0", + "@rollup/rollup-win32-ia32-msvc": "^4.35.0", + "@rollup/rollup-win32-x64-msvc": "^4.35.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -3804,6 +3826,174 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.37.0.tgz", + "integrity": "sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.37.0.tgz", + "integrity": "sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.37.0.tgz", + "integrity": "sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.37.0.tgz", + "integrity": "sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.37.0.tgz", + "integrity": "sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.37.0.tgz", + "integrity": "sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.37.0.tgz", + "integrity": "sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.37.0.tgz", + "integrity": "sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.37.0.tgz", + "integrity": "sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.37.0.tgz", + "integrity": "sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.37.0.tgz", + "integrity": "sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.37.0.tgz", + "integrity": "sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.37.0.tgz", + "integrity": "sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.37.0.tgz", + "integrity": "sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-x64-gnu": { "version": "4.37.0", "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.37.0.tgz", @@ -3830,6 +4020,42 @@ "linux" ] }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.37.0.tgz", + "integrity": "sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.37.0.tgz", + "integrity": "sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.37.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.37.0.tgz", + "integrity": "sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@rushstack/eslint-patch": { "version": "1.8.0", "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.8.0.tgz", @@ -6745,6 +6971,12 @@ "node": ">= 6" } }, + "node_modules/classnames": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" + }, "node_modules/cliui": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", diff --git a/hyperdrive/src/register-ui/package.json b/hyperdrive/src/register-ui/package.json index f335d952b..b1a0bb4e8 100644 --- a/hyperdrive/src/register-ui/package.json +++ b/hyperdrive/src/register-ui/package.json @@ -8,6 +8,7 @@ "@rainbow-me/rainbowkit": "^2.1.6", "@szhsin/react-menu": "^4.1.0", "@tanstack/react-query": "^5.45.1", + "classnames": "^2.5.1", "idna-uts46-hx": "^6.0.4", "is-valid-domain": "^0.1.6", "jazzicon": "^1.5.0", @@ -62,5 +63,26 @@ "typescript": "^5.3.3", "vite": "^5.2.10" }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "^4.35.0", + "@rollup/rollup-android-arm64": "^4.35.0", + "@rollup/rollup-darwin-arm64": "^4.35.0", + "@rollup/rollup-darwin-x64": "^4.35.0", + "@rollup/rollup-freebsd-arm64": "^4.35.0", + "@rollup/rollup-freebsd-x64": "^4.35.0", + "@rollup/rollup-linux-arm-gnueabihf": "^4.35.0", + "@rollup/rollup-linux-arm-musleabihf": "^4.35.0", + "@rollup/rollup-linux-arm64-gnu": "^4.35.0", + "@rollup/rollup-linux-arm64-musl": "^4.35.0", + "@rollup/rollup-linux-loongarch64-gnu": "^4.35.0", + "@rollup/rollup-linux-powerpc64le-gnu": "^4.35.0", + "@rollup/rollup-linux-riscv64-gnu": "^4.35.0", + "@rollup/rollup-linux-s390x-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-gnu": "^4.35.0", + "@rollup/rollup-linux-x64-musl": "^4.35.0", + "@rollup/rollup-win32-arm64-msvc": "^4.35.0", + "@rollup/rollup-win32-ia32-msvc": "^4.35.0", + "@rollup/rollup-win32-x64-msvc": "^4.35.0" + }, "type": "module" -} \ No newline at end of file +} diff --git a/hyperdrive/src/register-ui/src/components/BackButton.tsx b/hyperdrive/src/register-ui/src/components/BackButton.tsx new file mode 100644 index 000000000..d397027f8 --- /dev/null +++ b/hyperdrive/src/register-ui/src/components/BackButton.tsx @@ -0,0 +1,9 @@ +import { FaChevronLeft } from "react-icons/fa6"; + +export default function BackButton() { + return ( + + ) +} diff --git a/hyperdrive/src/register-ui/src/components/DirectCheckbox.tsx b/hyperdrive/src/register-ui/src/components/DirectCheckbox.tsx index e3b4e9d37..dbf8dd4a4 100644 --- a/hyperdrive/src/register-ui/src/components/DirectCheckbox.tsx +++ b/hyperdrive/src/register-ui/src/components/DirectCheckbox.tsx @@ -1,5 +1,5 @@ import { DirectTooltip } from "./DirectTooltip"; -import { FaCheck } from "react-icons/fa6"; +import { FaSquareCheck, FaRegSquare } from "react-icons/fa6"; interface DNCBProps { direct: boolean; @@ -8,17 +8,18 @@ interface DNCBProps { export default function DirectNodeCheckbox({ direct, setDirect }: DNCBProps) { return ( -
- - - Register as a direct node. If you are unsure, leave unchecked. - +
+ Register as a direct node. + If you are unsure, leave unchecked. +
); diff --git a/hyperdrive/src/register-ui/src/components/DirectTooltip.tsx b/hyperdrive/src/register-ui/src/components/DirectTooltip.tsx index 18142a141..83cb40ef5 100644 --- a/hyperdrive/src/register-ui/src/components/DirectTooltip.tsx +++ b/hyperdrive/src/register-ui/src/components/DirectTooltip.tsx @@ -1,47 +1,14 @@ -import React, { useRef, useEffect } from "react"; +import React from "react"; import { Tooltip } from "./Tooltip"; export const DirectTooltip: React.FC = () => { - const tooltipRef = useRef(null); - - useEffect(() => { - const positionTooltip = () => { - const tooltips = document.querySelectorAll('.tooltip-text'); - - tooltips.forEach(tooltip => { - const tooltipElem = tooltip as HTMLElement; - const parentRect = tooltipElem.parentElement?.getBoundingClientRect(); - - if (parentRect) { - const left = Math.min( - parentRect.left, - window.innerWidth - tooltipElem.offsetWidth - 10 - ); - - tooltipElem.style.left = `${Math.max(10, left)}px`; - tooltipElem.style.top = `${parentRect.bottom + 10}px`; - } - }); - }; - - // Position on hover - const tooltipElement = tooltipRef.current?.parentElement; - if (tooltipElement) { - tooltipElement.addEventListener('mouseenter', positionTooltip); - window.addEventListener('resize', positionTooltip); - - return () => { - tooltipElement.removeEventListener('mouseenter', positionTooltip); - window.removeEventListener('resize', positionTooltip); - }; - } - }, []); - return ( -
- - - -
+ ); }; diff --git a/hyperdrive/src/register-ui/src/components/EnterHnsName.tsx b/hyperdrive/src/register-ui/src/components/EnterHnsName.tsx index e5eebbb09..7eaa4324b 100644 --- a/hyperdrive/src/register-ui/src/components/EnterHnsName.tsx +++ b/hyperdrive/src/register-ui/src/components/EnterHnsName.tsx @@ -120,7 +120,7 @@ function EnterHnsName({ return (
-
+
- {fixedTlz && {fixedTlz}} + {fixedTlz && + {fixedTlz} + }
{nameValidities.map((x, i) => (

{x}

diff --git a/hyperdrive/src/register-ui/src/components/ProgressBar.tsx b/hyperdrive/src/register-ui/src/components/ProgressBar.tsx index bb7b6ab83..990f1fe0e 100644 --- a/hyperdrive/src/register-ui/src/components/ProgressBar.tsx +++ b/hyperdrive/src/register-ui/src/components/ProgressBar.tsx @@ -1,3 +1,4 @@ +import classNames from 'classnames'; import { useNavigate, useLocation } from 'react-router-dom'; const steps = [ @@ -14,15 +15,15 @@ interface ProgressBarProps { const ProgressBar = ({ hnsName }: ProgressBarProps) => { const navigate = useNavigate(); const location = useLocation(); - + const currentStepIndex = steps.findIndex(step => step.path === location.pathname); const isStepAccessible = (index: number) => { // Home is always accessible if (index === 0) return true; - + if (hnsName && index <= 2) return true; - + // Otherwise only allow going back return index <= currentStepIndex; }; @@ -34,31 +35,82 @@ const ProgressBar = ({ hnsName }: ProgressBarProps) => { }; return ( -
-
+
+
{steps.map((step, index) => { const accessible = isStepAccessible(index); + const active = index <= currentStepIndex; + const completed = index < currentStepIndex; return ( -
+
handleStepClick(step.path, index)} > -
{index}
-
{step.label}
+
+ {index} +
+
+ {step.label} +
- {index < steps.length - 1 && ( -
- )}
); })}
{hnsName && ( -
- Selected name: {hnsName} +
+ Selected name: + {hnsName} +
)}
diff --git a/hyperdrive/src/register-ui/src/components/Tooltip.tsx b/hyperdrive/src/register-ui/src/components/Tooltip.tsx index 7f1c0d1f5..59b238455 100644 --- a/hyperdrive/src/register-ui/src/components/Tooltip.tsx +++ b/hyperdrive/src/register-ui/src/components/Tooltip.tsx @@ -1,15 +1,18 @@ import React from 'react'; - +import { FaInfo } from 'react-icons/fa6'; +import classNames from 'classnames'; interface TooltipProps { - text: string; - children: React.ReactNode; + text?: string; + children?: React.ReactNode; + className?: string; } -export const Tooltip: React.FC = ({ text, children }) => { +export const Tooltip: React.FC = ({ text, children, className }) => { return ( -
+
{children} -
{text}
+ {text &&
{text}
} +
); }; \ No newline at end of file diff --git a/hyperdrive/src/register-ui/src/index.css b/hyperdrive/src/register-ui/src/index.css index dddc80b70..c15c999b4 100644 --- a/hyperdrive/src/register-ui/src/index.css +++ b/hyperdrive/src/register-ui/src/index.css @@ -10,6 +10,10 @@ margin-bottom: 0.5rem; font-weight: bold; text-align: center; + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; } .form-input { @@ -28,7 +32,10 @@ /* tooltips */ .tooltip { position: relative; - display: inline-block; + display: flex; + align-items: center; + justify-content: center; + gap: 0.5rem; } .tooltip-text { @@ -47,6 +54,7 @@ transition: opacity 0.3s; box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2); pointer-events: none; + user-select: none; } .tooltip:hover .tooltip-text { @@ -56,19 +64,7 @@ } .section { - background-color: light-dark(var(--off-white), var(--tasteful-dark)); - border-radius: 8px; - box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1); - padding: 2rem; - max-width: 100%; - box-sizing: border-box; - overflow: hidden; -} - -.content { - text-align: center; - max-width: 100%; - overflow: hidden; + @apply max-w-screen-sm relative px-6 py-3 overflow-hidden rounded-lg bg-white dark:bg-black shadow-md; } .button-group { @@ -105,33 +101,6 @@ justify-content: flex-end; } -.enter-hns-name { - width: 100%; - margin-bottom: 1rem; -} - -.input-wrapper { - display: flex; - align-items: center; - width: 100%; -} - -.hns-input { - flex-grow: 1; - padding: 0.5rem; - font-size: 1.2em; - border: 1px solid var(--gray); - border-radius: 4px 0 0 4px; -} - -.hns-suffix { - padding: 0.5rem; - background-color: var(--secondary-color); - border: 1px solid var(--tasteful-dark); - border-left: none; - border-radius: 0 4px 4px 0; -} - .button-group { display: flex; flex-direction: column; @@ -144,67 +113,7 @@ overflow-wrap: break-word; } -.checkbox-container { - display: flex; - align-items: center; - position: relative; - padding-left: 35px; - cursor: pointer; - font-size: 16px; - user-select: none; -} -.checkbox-button { - all: unset; - display: flex; - align-items: center; - justify-content: center; - width: 20px; - height: 20px; - min-width: 20px; - min-height: 20px; - background-color: transparent; - border: 2px solid var(--primary-color); - border-radius: 4px; - cursor: pointer; - transition: all 0.2s; -} - -.checkbox-button:hover { - background-color: var(--primary-xlight); -} - -.checkbox-button svg { - color: light-dark(var(--black), var(--neon-green)); - font-size: 12px; -} - -.checkbox-label { - margin-left: 10px; - font-size: 0.9em; - word-wrap: break-word; - overflow-wrap: break-word; -} - -.checkbox-container-flex { - display: flex; - align-items: flex-start; - gap: 8px; - width: 100%; - flex-wrap: wrap; - padding-right: 8px; -} - -@media (max-width: 480px) { - .checkbox-container-flex { - flex-direction: column; - align-items: flex-start; - } - - .checkbox-container-flex .checkbox-button { - margin-top: 2px; - } -} .file-input-label { display: inline-block; @@ -226,68 +135,6 @@ color: var(--off-white); } -summary { - font-family: var(--font-family-main); - color: light-dark(var(--off-black), var(--off-white)); - margin-bottom: 10px; - cursor: pointer; -} - -details { - width: 100%; - min-height: 80px; /* Ensure consistent height whether open or closed */ - max-width: 100%; - overflow: hidden; -} - -details > div { - margin-top: 10px; -} - -.advanced-options { - display: block; - width: 100%; - box-sizing: border-box; -} - -/* Ensure the inner content doesn't exceed the width of the container */ -.advanced-options > div { - width: 100%; - display: flex; - flex-wrap: wrap; -} - -/* Ensure the tooltip and checkbox label can wrap */ -.advanced-options .checkbox-label { - flex: 1; - min-width: 0; - word-wrap: break-word; - overflow-wrap: break-word; -} - -button.secondary { - width: 100%; -} - -button.back { - float: left; - width: auto !important; - padding: 5px !important; - border: none !important; - background-color: var(--primary-color) !important; -} - -/* Progress Bar Styles */ -.progress-container { - font-family: var(--font-family-main); - margin-top: 1.5rem; - padding: 1.5rem; - max-width: 600px; - background: linear-gradient(145deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.02)); - border-radius: 16px; - position: relative; -} - .progress-container::before { content: ''; position: absolute; @@ -297,82 +144,11 @@ button.back { height: 1px; background: linear-gradient(90deg, transparent, - rgba(255, 79, 0, 0.2), - rgba(255, 79, 0, 0.2), + var(--secondary-color), + var(--secondary-color), transparent); } -.progress-bar { - display: flex; - justify-content: space-between; - align-items: center; - margin: 0 auto; - position: relative; - padding: 0 1rem; -} - -.step-wrapper { - display: flex; - align-items: center; - flex: 1; - position: relative; -} - -.step { - display: flex; - flex-direction: column; - align-items: center; - cursor: pointer; - position: relative; - transition: all 0.3s ease; - z-index: 2; - padding: 0.5rem; -} - -.step.clickable { - cursor: pointer; -} - -.step.disabled { - cursor: not-allowed; - opacity: 0.5; -} - -.step.disabled:hover .step-number { - transform: none; - box-shadow: none; -} - -.step.clickable:not(.active):hover .step-number { - background: rgba(255, 79, 0, 0.1); -} - -.step.clickable.completed:hover .step-number { - background: var(--primary-light); - opacity: 0.9; -} - -.step:hover .step-number { - transform: scale(1.1); - box-shadow: 0 0 12px rgba(255, 79, 0, 0.3); -} - -.step-number { - width: 28px; - height: 28px; - font-size: 0.8rem; - border-radius: 50%; - background: var(--off-white); - border: 2px solid var(--primary-color); - display: flex; - align-items: center; - justify-content: center; - font-weight: 600; - color: var(--primary-color); - transition: all 0.3s ease; - position: relative; -} - .step-number::after { content: ''; position: absolute; @@ -382,73 +158,15 @@ button.back { transition: all 0.3s ease; } -.step.active .step-number { - background: var(--primary-color); - color: var(--off-white); - transform: scale(1.1); -} - .step.active .step-number::after { - border-color: rgba(255, 79, 0, 0.3); + border-color: light-dark(var(--secondary-color), var(--primary-color)); inset: -4px; } .step.completed .step-number { - background: var(--primary-light); - border-color: var(--primary-light); - color: var(--off-white); -} - -.step-label { - margin-top: 0.6rem; - font-size: 0.75rem; - color: var(--primary-color); - font-weight: 500; - transition: all 0.3s ease; - text-align: center; - white-space: nowrap; - opacity: 0.85; - letter-spacing: 0.2px; -} - -.step.active .step-label { - opacity: 1; - font-weight: 600; - transform: translateY(1px); -} - -.connector { - flex: 1; - height: 2px; - background: rgba(255, 79, 0, 0.15); - position: relative; - top: -8px; - transform-origin: left center; - margin: 0 0.25rem; - min-width: 20px; -} - -.connector.active { - background: linear-gradient(90deg, var(--primary-color), var(--primary-light)); - animation: fillLine 0.4s ease-out forwards; -} - -.selected-name { - text-align: center; - margin-top: 1.5rem; - font-size: 0.9rem; - color: var(--text); - opacity: 0.9; - padding: 0.75rem; - background: rgba(255, 79, 0, 0.05); - border-radius: 8px; - letter-spacing: 0.3px; -} - -.selected-name span { - font-weight: 600; - color: var(--primary-color); - margin-left: 0.3rem; + background: light-dark(var(--secondary-color), var(--primary-color)); + border-color: light-dark(var(--secondary-xlight), var(--primary-xlight)); + color: light-dark(var(--off-white), var(--off-black)); } @keyframes fillLine { @@ -459,25 +177,4 @@ button.back { to { transform: scaleX(1); } -} - -/* Fix for overrunning components */ -.container { - max-width: 100%; - overflow-x: hidden; - box-sizing: border-box; -} - -.button.secondary { - width: 100%; - box-sizing: border-box; - max-width: 100%; - overflow: hidden; - white-space: normal; - word-wrap: break-word; -} - -h2, h4 { - max-width: 100%; - overflow-wrap: break-word; -} +} \ No newline at end of file diff --git a/hyperdrive/src/register-ui/src/pages/CommitDotOsName.tsx b/hyperdrive/src/register-ui/src/pages/CommitDotOsName.tsx index 562d4c7ea..75fc4f50e 100644 --- a/hyperdrive/src/register-ui/src/pages/CommitDotOsName.tsx +++ b/hyperdrive/src/register-ui/src/pages/CommitDotOsName.tsx @@ -12,7 +12,7 @@ import { useAccount, useWaitForTransactionReceipt, useWriteContract } from "wagm import { useConnectModal, useAddRecentTransaction } from "@rainbow-me/rainbowkit" import { dotOsAbi, DOTOS } from "../abis"; import { stringToHex, encodeAbiParameters, parseAbiParameters, keccak256 } from "viem"; - +import BackButton from "../components/BackButton"; interface RegisterOsNameProps extends PageProps { } function CommitDotOsName({ @@ -100,7 +100,6 @@ function CommitDotOsName({ return (
-
{
@@ -113,6 +112,7 @@ function CommitDotOsName({ ) : ( <>

+ Choose a name for your node diff --git a/hyperdrive/src/register-ui/src/pages/HyperdriveHome.tsx b/hyperdrive/src/register-ui/src/pages/HyperdriveHome.tsx index eea3902f0..01983a407 100644 --- a/hyperdrive/src/register-ui/src/pages/HyperdriveHome.tsx +++ b/hyperdrive/src/register-ui/src/pages/HyperdriveHome.tsx @@ -23,7 +23,7 @@ function HyperdriveHome({ hnsName }: OsHomeProps) { <>
-
+
{previouslyBooted ? (

Welcome back!

@@ -31,8 +31,8 @@ function HyperdriveHome({ hnsName }: OsHomeProps) {
) : ( <> -

Welcome to Hyperdrive

-

New here? Register a node to get started:

+

Welcome to Hyperdrive

+

New here? Register a node to get started:

{loading ? ( @@ -109,7 +108,10 @@ function ImportKeyfile({ <>
-

1. Upload Keyfile

+

+ + 1. Upload Keyfile +