diff --git a/package-lock.json b/package-lock.json index a35373d..4e0abdf 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,10 +27,13 @@ "imagetools-core": "^3.2.3", "prettier": "^2.8.0", "prettier-plugin-svelte": "^2.8.1", + "qrious": "^4.0.2", "sass": "^1.55.0", + "semver": "^7.5.4", "sirv-cli": "^2.0.2", "svelte": "^3.54.0", "svelte-check": "^2.9.2", + "svelte-meta-tags": "^2.8.0", "tslib": "^2.4.1", "typescript": "^4.9.3", "vite": "^4.0.0", @@ -2693,6 +2696,12 @@ "node": ">=6" } }, + "node_modules/qrious": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/qrious/-/qrious-4.0.2.tgz", + "integrity": "sha512-xWPJIrK1zu5Ypn898fBp8RHkT/9ibquV2Kv24S/JY9VYEhMBMKur1gHVsOiNUh7PHP9uCgejjpZUHUIXXKoU/g==", + "dev": true + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -2929,6 +2938,15 @@ "node": ">=12.0.0" } }, + "node_modules/schema-dts": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.2.tgz", + "integrity": "sha512-MpNwH0dZJHinVxk9bT8XUdjKTxMYrA5bLtrrGmFA6PTLwlOKnhi67XoRd6/ty+Djt6ZC0slR57qFhZDNMI6DhQ==", + "dev": true, + "peerDependencies": { + "typescript": ">=4.1.0" + } + }, "node_modules/semiver": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", @@ -2939,9 +2957,9 @@ } }, "node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -3253,6 +3271,18 @@ "svelte": "^3.19.0 || ^4.0.0-next.0" } }, + "node_modules/svelte-meta-tags": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svelte-meta-tags/-/svelte-meta-tags-2.8.0.tgz", + "integrity": "sha512-CgnNNk8iJv4Ks0iAqerfvtC+qjOq6WKDvUnV30ss8k80nVC4pD6I6fGnAg/ieOuRNL1uir49zosZzwPjAsjdAQ==", + "dev": true, + "dependencies": { + "schema-dts": "^1.1.2" + }, + "peerDependencies": { + "svelte": "^3.55.0 || ^4.0.0" + } + }, "node_modules/svelte-preprocess": { "version": "4.10.7", "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz", @@ -5464,6 +5494,12 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "qrious": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/qrious/-/qrious-4.0.2.tgz", + "integrity": "sha512-xWPJIrK1zu5Ypn898fBp8RHkT/9ibquV2Kv24S/JY9VYEhMBMKur1gHVsOiNUh7PHP9uCgejjpZUHUIXXKoU/g==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5609,6 +5645,13 @@ "source-map-js": ">=0.6.2 <2.0.0" } }, + "schema-dts": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/schema-dts/-/schema-dts-1.1.2.tgz", + "integrity": "sha512-MpNwH0dZJHinVxk9bT8XUdjKTxMYrA5bLtrrGmFA6PTLwlOKnhi67XoRd6/ty+Djt6ZC0slR57qFhZDNMI6DhQ==", + "dev": true, + "requires": {} + }, "semiver": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", @@ -5616,9 +5659,9 @@ "dev": true }, "semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", "dev": true, "requires": { "lru-cache": "^6.0.0" @@ -5829,6 +5872,15 @@ "dev": true, "requires": {} }, + "svelte-meta-tags": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/svelte-meta-tags/-/svelte-meta-tags-2.8.0.tgz", + "integrity": "sha512-CgnNNk8iJv4Ks0iAqerfvtC+qjOq6WKDvUnV30ss8k80nVC4pD6I6fGnAg/ieOuRNL1uir49zosZzwPjAsjdAQ==", + "dev": true, + "requires": { + "schema-dts": "^1.1.2" + } + }, "svelte-preprocess": { "version": "4.10.7", "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz", diff --git a/package.json b/package.json index e3b153e..a2935ed 100644 --- a/package.json +++ b/package.json @@ -24,6 +24,7 @@ "imagetools-core": "^3.2.3", "prettier": "^2.8.0", "prettier-plugin-svelte": "^2.8.1", + "qrious": "^4.0.2", "sass": "^1.55.0", "semver": "^7.5.4", "sirv-cli": "^2.0.2", @@ -44,4 +45,4 @@ "asciidoctor": "^2.2.6", "marked": "^4.1.1" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f40d281..6a6a2aa 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -58,6 +58,9 @@ devDependencies: prettier-plugin-svelte: specifier: ^2.8.1 version: 2.10.1(prettier@2.8.8)(svelte@3.59.2) + qrious: + specifier: ^4.0.2 + version: 4.0.2 sass: specifier: ^1.55.0 version: 1.64.1 @@ -1684,6 +1687,10 @@ packages: engines: {node: '>=6'} dev: true + /qrious@4.0.2: + resolution: {integrity: sha512-xWPJIrK1zu5Ypn898fBp8RHkT/9ibquV2Kv24S/JY9VYEhMBMKur1gHVsOiNUh7PHP9uCgejjpZUHUIXXKoU/g==} + dev: true + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true diff --git a/src/app.scss b/src/app.scss index 6bc733a..04b76f8 100644 --- a/src/app.scss +++ b/src/app.scss @@ -53,6 +53,7 @@ body { --grey-nine: hsla(240, 6%, 7%, 0.3); --grey-ten: hsl(230, 9.5%, 17.5%); --grey-eleven: hsl(208, 10%, 40%); + --red-one: hsl(333, 84%, 62%); --bezier-one: cubic-bezier(0.25, 0.46, 0.45, 0.94); --drop-shadow-one: 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12), 0px 2px 4px -1px rgba(0, 0, 0, 0.2); diff --git a/src/data/api/index.ts b/src/data/api/index.ts index a41251c..b1cfc70 100644 --- a/src/data/api/index.ts +++ b/src/data/api/index.ts @@ -1,11 +1,21 @@ import * as settings from './settings'; // API Endpoints -import type { Patch, Repository, Metadata, Asset } from '$lib/types'; +import type { + Patch, + Repository, + Metadata, + Asset, + TeamMember, + DonationPlatform, + CryptoWallet +} from '$lib/types'; export type ReposData = Repository[]; export type PatchesData = { patches: Patch[]; packages: string[] }; export type ReleaseData = { metadata: Metadata; assets: Asset[] }; +export type TeamData = { members: TeamMember[] }; +export type DonationData = { wallets: CryptoWallet[]; platforms: DonationPlatform[] }; async function get_json(endpoint: string) { const url = `${settings.api_base_url()}/${endpoint}`; @@ -42,6 +52,17 @@ async function patches(): Promise { return { patches: json.patches, packages }; } +async function team(): Promise { + const json = await get_json('v2/team/members'); + return { members: json.members }; +} + +async function donate(): Promise { + const json = await get_json('v2/donations'); + + return { wallets: json.donations.wallets, platforms: json.donations.links }; +} + export const staleTime = 5 * 60 * 1000; export const queries = { manager: { @@ -58,5 +79,15 @@ export const queries = { queryKey: ['repositories'], queryFn: repositories, staleTime + }, + team: { + queryKey: ['team'], + queryFn: team, + staleTime + }, + donate: { + queryKey: ['donate'], + queryFn: donate, + staleTime } }; diff --git a/src/layout/Footer/FooterHost.svelte b/src/layout/Footer/FooterHost.svelte index 066fbb1..dfb5b66 100644 --- a/src/layout/Footer/FooterHost.svelte +++ b/src/layout/Footer/FooterHost.svelte @@ -52,6 +52,7 @@
  • Download
  • Patches
  • Contributors
  • +
  • Donate
  • @@ -68,18 +69,27 @@ diff --git a/src/layout/Navbar/NavButton.svelte b/src/layout/Navbar/NavButton.svelte index ae2ffce..8aa305b 100644 --- a/src/layout/Navbar/NavButton.svelte +++ b/src/layout/Navbar/NavButton.svelte @@ -7,13 +7,21 @@ const client = useQueryClient(); export let href: string; - export let queryKey: null | keyof typeof queries = null; + export let queryKey: null | keyof typeof queries | Array = null; function prefetch() { if (queryKey !== null) { - const query = queries[queryKey]; - dev_log('Prefetching', query); - client.prefetchQuery(query as any); + if (Array.isArray(queryKey)) { + queryKey.forEach((key) => { + const query = queries[key]; + dev_log('Prefetching', query); + client.prefetchQuery(query as any); + }); + } else { + const query = queries[queryKey]; + dev_log('Prefetching', query); + client.prefetchQuery(query as any); + } } } diff --git a/src/layout/Navbar/NavHost.svelte b/src/layout/Navbar/NavHost.svelte index 9f4c206..eb934b5 100644 --- a/src/layout/Navbar/NavHost.svelte +++ b/src/layout/Navbar/NavHost.svelte @@ -72,6 +72,7 @@ Download Patches Contributors + Donate
    @@ -107,9 +108,7 @@ Settings - Configure the API for this website. + Configure the API for this website.
    @@ -206,8 +205,7 @@ } .scrolled { - box-shadow: 0px 4px 5px 0px rgba(0, 0, 0, 0.14), 0px 1px 10px 0px rgba(0, 0, 0, 0.12), - 0px 2px 4px -1px rgba(0, 0, 0, 0.2); + box-shadow: var(--drop-shadow-one); } .overlay { diff --git a/src/lib/components/Button.svelte b/src/lib/components/Button.svelte index 00845bb..4fd0660 100644 --- a/src/lib/components/Button.svelte +++ b/src/lib/components/Button.svelte @@ -39,7 +39,7 @@ color: var(--white); font-weight: 600; border: none; - border-radius: 12px; + border-radius: 100px; display: flex; justify-content: center; align-items: center; diff --git a/src/lib/components/Dialogue.svelte b/src/lib/components/Dialogue.svelte index 23eaad8..d639f9d 100644 --- a/src/lib/components/Dialogue.svelte +++ b/src/lib/components/Dialogue.svelte @@ -122,7 +122,6 @@ border-radius: 26px; background-color: var(--grey-six); display: flex; - user-select: none; gap: 5%; white-space: normal; display: flex; diff --git a/src/lib/components/Snackbar.svelte b/src/lib/components/Snackbar.svelte new file mode 100644 index 0000000..700e5c5 --- /dev/null +++ b/src/lib/components/Snackbar.svelte @@ -0,0 +1,61 @@ + + +{#if open} +
    +
    + +
    +
    +{/if} + + \ No newline at end of file diff --git a/src/lib/components/Svg.svelte b/src/lib/components/Svg.svelte index 3ce173e..bf74a99 100644 --- a/src/lib/components/Svg.svelte +++ b/src/lib/components/Svg.svelte @@ -9,8 +9,8 @@ xmlns="http://www.w3.org/2000/svg" preserveAspectRatio="none" viewBox="0 0 {viewBoxHeight} {viewBoxWidth}" - style:height={svgHeight+'px'} - style:width={svgWidth+'px'} + style:height={svgHeight + 'px'} + style:width={svgWidth + 'px'} > diff --git a/src/lib/types.ts b/src/lib/types.ts index 9e6a8e0..d550f1e 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -47,3 +47,23 @@ export interface Metadata { published_at: string; body: string; } + +export interface TeamMember { + login: string; + avatar_url: string; + html_url: string; + bio?: string; +} + +export interface CryptoWallet { + network: string; + currency_code: string; + address: string; + preferred: boolean; +} + +export interface DonationPlatform { + name: string; + url: string; + preferred: boolean; +} diff --git a/src/routes/contributors/+page.svelte b/src/routes/contributors/+page.svelte index f52534b..b3df488 100644 --- a/src/routes/contributors/+page.svelte +++ b/src/routes/contributors/+page.svelte @@ -46,13 +46,13 @@

    Made possible by the community.

    -

    +

    Want to show up here? Become a contributor -

    +

    @@ -82,7 +82,7 @@ margin-bottom: 0.3rem; } - h4 { + p { text-align: center; color: var(--grey-four); } diff --git a/src/routes/donate/+page.svelte b/src/routes/donate/+page.svelte new file mode 100644 index 0000000..ac92c2c --- /dev/null +++ b/src/routes/donate/+page.svelte @@ -0,0 +1,323 @@ + + + + +
    +
    +
    +

    🎉 Support ReVanced

    +

    + ReVanced offers a variety of patches, including ad-blocking, custom themes, and innovative + features. All of which is completely open source and free of charge. Donating will allow + ReVanced maintain our servers and develop new features. +

    +
    +
    + +
    +
    +

    Donate

    + + + + +

    Meet the team

    + {#if data.members.length > 0} +
    + + {#each data.members.sort(() => (Math.random() > 0.5 ? -1 : 1)) as member, i} + + {/each} +
    + {/if} +
    +
    + + + + Cryptocurrencies + + Cryptocurrencies + +
    +
    + + {#each data.wallets as wallet} + + {/each} + +
    +
    + + + +
    + + + + QR Code + + {qrCodeDialogueName} Wallet + +
    + {qrCodeValue} + +
    +
    + + + + +
    + + + Address copied to clipboard + + +