diff --git a/package-lock.json b/package-lock.json index b1c5cb6..ca977fa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "@sveltejs/adapter-auto": "^3.0.0", "@sveltejs/kit": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0", + "nintendo-switch-eshop": "^7.1.3", "prettier": "^3.1.1", "prettier-plugin-svelte": "^3.1.2", "sharp": "^0.33.2", @@ -1090,6 +1091,29 @@ "win32" ] }, + "node_modules/@sapphire/fetch": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@sapphire/fetch/-/fetch-2.4.2.tgz", + "integrity": "sha512-aLZJ+ij3vAkHH6JlCbkT7Nj0dNLFdOEv0m1apNPFtUzHpaFdFeayYjLVfsY1JFVssvzjVr4x+mQTQ+XQIqraSg==", + "dev": true, + "dependencies": { + "cross-fetch": "^4.0.0" + }, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@sapphire/result": { + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/@sapphire/result/-/result-2.6.6.tgz", + "integrity": "sha512-QCjj7X/QlY0QUCeAaZQmnrsMH/b2BMQYee3F1Y5iF17JagUQqO3KZlG7vfXWQU3SRAJX5OgZZynBjixUH+nNGg==", + "dev": true, + "engines": { + "node": ">=v14.0.0", + "npm": ">=7.0.0" + } + }, "node_modules/@sveltejs/adapter-auto": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-3.1.1.tgz", @@ -1202,6 +1226,12 @@ "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==" }, + "node_modules/@types/country-data": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/@types/country-data/-/country-data-0.0.2.tgz", + "integrity": "sha512-9TtlOfoHEMWojmAV1IoisMlM9kXGw4QDAamkXUiCZBtU9sY3187naTc1OXwD3QVE1mMkPZbBVdyjVdBu7wJlNA==", + "dev": true + }, "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", @@ -1540,6 +1570,25 @@ "node": ">= 0.6" } }, + "node_modules/country-data": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/country-data/-/country-data-0.0.31.tgz", + "integrity": "sha512-YqlY/i6ikZwoBFfdjK+hJTGaBdTgDpXLI15MCj2UsXZ2cPBb+Kx86AXmDH7PRGt0LUleck0cCgNdWeIhfbcxkQ==", + "dev": true, + "dependencies": { + "currency-symbol-map": "~2", + "underscore": ">1.4.4" + } + }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.12" + } + }, "node_modules/css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", @@ -1613,6 +1662,12 @@ "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", "dev": true }, + "node_modules/currency-symbol-map": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/currency-symbol-map/-/currency-symbol-map-2.2.0.tgz", + "integrity": "sha512-fPZJ3jqM68+AAgqQ7UaGbgHL/39rp6l7GyqS2k1HJPu/kpS8D07x/+Uup6a9tCUKIlOFcRrDCf1qxSt8jnI5BA==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -1849,6 +1904,28 @@ "node": ">=8.6.0" } }, + "node_modules/fast-xml-parser": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.5.tgz", + "integrity": "sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", @@ -2243,6 +2320,23 @@ "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, + "node_modules/nintendo-switch-eshop": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/nintendo-switch-eshop/-/nintendo-switch-eshop-7.1.3.tgz", + "integrity": "sha512-qqAx8/tUJNCzVz0ej6wQ8JI5FtFeF21S7cPeSUrMysVQNbVrjkI/dZic2kR4EbIecjk2TD/DYtqKnMUDDqQvGQ==", + "dev": true, + "dependencies": { + "@sapphire/fetch": "^2.4.1", + "@sapphire/result": "^2.6.1", + "@types/country-data": "^0.0.2", + "country-data": "^0.0.31", + "fast-xml-parser": "^4.2.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, "node_modules/node-abi": { "version": "3.56.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz", @@ -2259,6 +2353,26 @@ "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==" }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -2828,6 +2942,12 @@ "node": ">=0.10.0" } }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "dev": true + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -3047,6 +3167,12 @@ "node": ">=6" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, "node_modules/tslib": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", @@ -3077,6 +3203,12 @@ "node": ">=14.17" } }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "dev": true + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -3212,6 +3344,22 @@ } } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", diff --git a/package.json b/package.json index 32a22cd..f867f10 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "@sveltejs/adapter-auto": "^3.0.0", "@sveltejs/kit": "^2.0.0", "@sveltejs/vite-plugin-svelte": "^3.0.0", + "nintendo-switch-eshop": "^7.1.3", "prettier": "^3.1.1", "prettier-plugin-svelte": "^3.1.2", "sharp": "^0.33.2", diff --git a/src/components/LogoWithTextHorizontal.svelte b/src/components/LogoWithTextHorizontal.svelte new file mode 100644 index 0000000..1a070bd --- /dev/null +++ b/src/components/LogoWithTextHorizontal.svelte @@ -0,0 +1,53 @@ + + + + + + dispatcher("click")} + width={size * 3.771484375} + height={size} + viewBox="0 0 1931 512" + fill="none" + xmlns="http://www.w3.org/2000/svg" +> + + + + + + + + + diff --git a/src/components/ProgressBar.svelte b/src/components/ProgressBar.svelte new file mode 100644 index 0000000..8b03c5c --- /dev/null +++ b/src/components/ProgressBar.svelte @@ -0,0 +1,75 @@ + + +
+
+
+
+
+
+
+
+ + diff --git a/src/components/Spinner.svelte b/src/components/Spinner.svelte new file mode 100644 index 0000000..2bd064f --- /dev/null +++ b/src/components/Spinner.svelte @@ -0,0 +1,74 @@ +
+ {#each Array(9) as _, i} +
+ {/each} +
+ + diff --git a/src/components/Wordmark.svelte b/src/components/Wordmark.svelte new file mode 100644 index 0000000..6e3fa51 --- /dev/null +++ b/src/components/Wordmark.svelte @@ -0,0 +1,28 @@ + + + + + + + + diff --git a/src/lib/css/index.css b/src/lib/css/index.css index 9c48930..bbef2a0 100644 --- a/src/lib/css/index.css +++ b/src/lib/css/index.css @@ -50,3 +50,23 @@ body { ::-webkit-scrollbar-thumb:hover { background: #526ca8; } + +button { + appearance: none; + border: none; + padding: 8px 32px; + background-color: var(--color-primary); + border: var(--border-primary); + border-radius: 16px; + cursor: pointer; + transition: 0.2s ease-in-out filter; +} + +button:hover { + filter: brightness(1.1); +} + +button:active { + transition: 0.05s ease-in-out filter; + filter: brightness(0.9); +} diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index c5a2a6f..85a0cdd 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,19 +1,42 @@ -
- -
-
- +{#if !isNavExcluded} +
+
+ goto("/")} size={50} /> +
+
-
-
-
+{/if} + +{#if !isBgExcluded} + +
+
+ +
+
+
+
+
-
+{:else} + +{/if} diff --git a/src/routes/+layout.ts b/src/routes/+layout.ts deleted file mode 100644 index 189f71e..0000000 --- a/src/routes/+layout.ts +++ /dev/null @@ -1 +0,0 @@ -export const prerender = true; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 11ecb3f..23acbe2 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -8,6 +8,7 @@ import totk from "$assets/cards/totk.webp"; import scarletviolet from "$assets/cards/scarlet-violet.webp"; import CardCarousel from "$components/CardCarousel.svelte"; + import Wordmark from "$components/Wordmark.svelte"; let logoSizes = { small: 256, @@ -38,7 +39,9 @@
-

{strings.landingHeader}

+

+ +

{strings.landingOne}

@@ -46,6 +49,7 @@
+

We care about preservation...

+
+

+ ...so we're setting out to continue the beloved Yuzu emulator, as a non-profit drive + for hardware preservation and research. +

+
+ + +
diff --git a/src/routes/mockup/boot/[game]/+page.server.ts b/src/routes/mockup/boot/[game]/+page.server.ts new file mode 100644 index 0000000..52cd706 --- /dev/null +++ b/src/routes/mockup/boot/[game]/+page.server.ts @@ -0,0 +1,11 @@ +import type { PageServerLoad } from "./$types"; +import { getQueriedGamesAmerica, type GameUS } from "nintendo-switch-eshop"; + +export const load: PageServerLoad = async ({ params }) => { + const games = await getQueriedGamesAmerica(params.game); + return { + props: { + games, + }, + }; +}; diff --git a/src/routes/mockup/boot/[game]/+page.svelte b/src/routes/mockup/boot/[game]/+page.svelte new file mode 100644 index 0000000..e5cab4a --- /dev/null +++ b/src/routes/mockup/boot/[game]/+page.svelte @@ -0,0 +1,136 @@ + + +
+
+ Box art for {game.title} +
+

Launching {game.title}

+

Shaders compiled: {shadersDone} / {shadersTotal}

+
+ +
+
+
+ +
+
+
+ +