mirror of
https://github.com/emuplace/sudachi.emuplace.app.git
synced 2024-12-28 17:27:54 +01:00
Added current website
This commit is contained in:
parent
d20ba9eed5
commit
422881756f
7
.firebase/hosting.ZGlzdA.cache
Normal file
7
.firebase/hosting.ZGlzdA.cache
Normal file
@ -0,0 +1,7 @@
|
||||
index.html,1724249716318,792eb436f752871965842f7108818056819967c9428d4b0e3fe68bd433d0901a
|
||||
favicon.svg,1724249716138,adc7e10f9bbcf8f9f82633c10dff6adf766bb3b521a127257964852e54d40a7f
|
||||
assets/index-D2oKlaOf.css,1724249716318,83048111e6b01add7846a3f820c8f5da59902198a7219142c4343e0dac692e3b
|
||||
assets/index-AEhDgl0z.js,1724249716318,9dd0f358c875aa401c6bc405d7c35d5ce0f95cd642f60e630acc49e5b456bb4f
|
||||
releases/latest.zip,1724249716138,e5000752bea1ee8915d21a9b4c0bd6b53b61d0f93d4b5af3c05d024c44be5ef2
|
||||
releases/sudachi-android-v1.0.4.7z,1724249716147,6de6313085506266b5145ffaddf27a16f9342406997ba610dd73ec90d1740836
|
||||
releases/sudachi-windows-v1.0.4.7z,1724249716192,2f0e2f68e65d3485364a5507ec5f379e1dfdaeefa9c4d74dd08451bb2b9478a5
|
5
.firebaserc
Normal file
5
.firebaserc
Normal file
@ -0,0 +1,5 @@
|
||||
{
|
||||
"projects": {
|
||||
"default": "sudachi-d0faa"
|
||||
}
|
||||
}
|
20
.github/workflows/firebase-hosting-merge.yml
vendored
Normal file
20
.github/workflows/firebase-hosting-merge.yml
vendored
Normal file
@ -0,0 +1,20 @@
|
||||
# This file was auto-generated by the Firebase CLI
|
||||
# https://github.com/firebase/firebase-tools
|
||||
|
||||
name: Deploy to Firebase Hosting on merge
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
jobs:
|
||||
build_and_deploy:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: npm ci && npm run build
|
||||
- uses: FirebaseExtended/action-hosting-deploy@v0
|
||||
with:
|
||||
repoToken: ${{ secrets.GITHUB_TOKEN }}
|
||||
firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_SUDACHI_D0FAA }}
|
||||
channelId: live
|
||||
projectId: sudachi-d0faa
|
21
.github/workflows/firebase-hosting-pull-request.yml
vendored
Normal file
21
.github/workflows/firebase-hosting-pull-request.yml
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
# This file was auto-generated by the Firebase CLI
|
||||
# https://github.com/firebase/firebase-tools
|
||||
|
||||
name: Deploy to Firebase Hosting on PR
|
||||
on: pull_request
|
||||
permissions:
|
||||
checks: write
|
||||
contents: read
|
||||
pull-requests: write
|
||||
jobs:
|
||||
build_and_preview:
|
||||
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- run: npm ci && npm run build
|
||||
- uses: FirebaseExtended/action-hosting-deploy@v0
|
||||
with:
|
||||
repoToken: ${{ secrets.GITHUB_TOKEN }}
|
||||
firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_SUDACHI_D0FAA }}
|
||||
projectId: sudachi-d0faa
|
16
firebase.json
Normal file
16
firebase.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"hosting": {
|
||||
"public": "dist",
|
||||
"ignore": [
|
||||
"firebase.json",
|
||||
"**/.*",
|
||||
"**/node_modules/**"
|
||||
],
|
||||
"rewrites": [
|
||||
{
|
||||
"source": "**",
|
||||
"destination": "/index.html"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
20
index.html
20
index.html
@ -1,16 +1,16 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
||||
<meta
|
||||
name="viewport"
|
||||
content="minimum-scale=1, initial-scale=1, width=device-width, user-scalable=no"
|
||||
/>
|
||||
<title>Mantine Vite template</title>
|
||||
</head>
|
||||
<body>
|
||||
<meta name="viewport" content="minimum-scale=1, initial-scale=1, width=device-width, user-scalable=no" />
|
||||
<title>Sudachi</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="root"></div>
|
||||
<script type="module" src="/src/main.tsx"></script>
|
||||
</body>
|
||||
</html>
|
||||
</body>
|
||||
|
||||
</html>
|
4352
package-lock.json
generated
Normal file
4352
package-lock.json
generated
Normal file
File diff suppressed because it is too large
Load Diff
@ -13,6 +13,7 @@
|
||||
"@mantine/core": "7.11.1",
|
||||
"@mantine/hooks": "7.11.1",
|
||||
"@mantine/vanilla-extract": "7.11.1",
|
||||
"@tabler/icons-react": "^3.11.0",
|
||||
"@vanilla-extract/css": "^1.15.3",
|
||||
"react": "^18.3.1",
|
||||
"react-dom": "^18.3.1"
|
||||
|
89
public/index.html
Normal file
89
public/index.html
Normal file
@ -0,0 +1,89 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Welcome to Firebase Hosting</title>
|
||||
|
||||
<!-- update the version number as needed -->
|
||||
<script defer src="/__/firebase/10.12.3/firebase-app-compat.js"></script>
|
||||
<!-- include only the Firebase features as you need -->
|
||||
<script defer src="/__/firebase/10.12.3/firebase-auth-compat.js"></script>
|
||||
<script defer src="/__/firebase/10.12.3/firebase-database-compat.js"></script>
|
||||
<script defer src="/__/firebase/10.12.3/firebase-firestore-compat.js"></script>
|
||||
<script defer src="/__/firebase/10.12.3/firebase-functions-compat.js"></script>
|
||||
<script defer src="/__/firebase/10.12.3/firebase-messaging-compat.js"></script>
|
||||
<script defer src="/__/firebase/10.12.3/firebase-storage-compat.js"></script>
|
||||
<script defer src="/__/firebase/10.12.3/firebase-analytics-compat.js"></script>
|
||||
<script defer src="/__/firebase/10.12.3/firebase-remote-config-compat.js"></script>
|
||||
<script defer src="/__/firebase/10.12.3/firebase-performance-compat.js"></script>
|
||||
<!--
|
||||
initialize the SDK after all desired features are loaded, set useEmulator to false
|
||||
to avoid connecting the SDK to running emulators.
|
||||
-->
|
||||
<script defer src="/__/firebase/init.js?useEmulator=true"></script>
|
||||
|
||||
<style media="screen">
|
||||
body { background: #ECEFF1; color: rgba(0,0,0,0.87); font-family: Roboto, Helvetica, Arial, sans-serif; margin: 0; padding: 0; }
|
||||
#message { background: white; max-width: 360px; margin: 100px auto 16px; padding: 32px 24px; border-radius: 3px; }
|
||||
#message h2 { color: #ffa100; font-weight: bold; font-size: 16px; margin: 0 0 8px; }
|
||||
#message h1 { font-size: 22px; font-weight: 300; color: rgba(0,0,0,0.6); margin: 0 0 16px;}
|
||||
#message p { line-height: 140%; margin: 16px 0 24px; font-size: 14px; }
|
||||
#message a { display: block; text-align: center; background: #039be5; text-transform: uppercase; text-decoration: none; color: white; padding: 16px; border-radius: 4px; }
|
||||
#message, #message a { box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); }
|
||||
#load { color: rgba(0,0,0,0.4); text-align: center; font-size: 13px; }
|
||||
@media (max-width: 600px) {
|
||||
body, #message { margin-top: 0; background: white; box-shadow: none; }
|
||||
body { border-top: 16px solid #ffa100; }
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div id="message">
|
||||
<h2>Welcome</h2>
|
||||
<h1>Firebase Hosting Setup Complete</h1>
|
||||
<p>You're seeing this because you've successfully setup Firebase Hosting. Now it's time to go build something extraordinary!</p>
|
||||
<a target="_blank" href="https://firebase.google.com/docs/hosting/">Open Hosting Documentation</a>
|
||||
</div>
|
||||
<p id="load">Firebase SDK Loading…</p>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const loadEl = document.querySelector('#load');
|
||||
// // 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
|
||||
// // The Firebase SDK is initialized and available here!
|
||||
//
|
||||
// firebase.auth().onAuthStateChanged(user => { });
|
||||
// firebase.database().ref('/path/to/ref').on('value', snapshot => { });
|
||||
// firebase.firestore().doc('/foo/bar').get().then(() => { });
|
||||
// firebase.functions().httpsCallable('yourFunction')().then(() => { });
|
||||
// firebase.messaging().requestPermission().then(() => { });
|
||||
// firebase.storage().ref('/path/to/ref').getDownloadURL().then(() => { });
|
||||
// firebase.analytics(); // call to activate
|
||||
// firebase.analytics().logEvent('tutorial_completed');
|
||||
// firebase.performance(); // call to activate
|
||||
//
|
||||
// // 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
|
||||
|
||||
try {
|
||||
let app = firebase.app();
|
||||
let features = [
|
||||
'auth',
|
||||
'database',
|
||||
'firestore',
|
||||
'functions',
|
||||
'messaging',
|
||||
'storage',
|
||||
'analytics',
|
||||
'remoteConfig',
|
||||
'performance',
|
||||
].filter(feature => typeof app[feature] === 'function');
|
||||
loadEl.textContent = `Firebase SDK loaded with ${features.join(', ')}`;
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
loadEl.textContent = 'Error loading the Firebase SDK, check the console.';
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
BIN
public/releases/latest.zip
Normal file
BIN
public/releases/latest.zip
Normal file
Binary file not shown.
BIN
public/releases/sudachi-android-v1.0.4.7z
Normal file
BIN
public/releases/sudachi-android-v1.0.4.7z
Normal file
Binary file not shown.
BIN
public/releases/sudachi-windows-v1.0.4.7z
Normal file
BIN
public/releases/sudachi-windows-v1.0.4.7z
Normal file
Binary file not shown.
121
src/App.tsx
121
src/App.tsx
@ -1,14 +1,117 @@
|
||||
import "@mantine/core/styles.css";
|
||||
import { MantineProvider } from "@mantine/core";
|
||||
import {
|
||||
Accordion, Anchor, Button, Container,
|
||||
Flex, Group, List, MantineProvider, Menu,
|
||||
Space, Stack, Text, Title, rem
|
||||
} from "@mantine/core";
|
||||
import {
|
||||
IconDeviceMobile,
|
||||
IconDeviceTablet,
|
||||
IconDeviceLaptop,
|
||||
IconCardboards
|
||||
} from '@tabler/icons-react';
|
||||
import { useState } from "react";
|
||||
import { theme } from "./theme";
|
||||
import { Welcome } from "./Welcome/Welcome";
|
||||
import { ColorSchemeToggle } from "./ColorSchemeToggle/ColorSchemeToggle";
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<MantineProvider theme={theme}>
|
||||
<Welcome />
|
||||
<ColorSchemeToggle />
|
||||
</MantineProvider>
|
||||
);
|
||||
const changes = [
|
||||
{
|
||||
text: 'Windows',
|
||||
details: [
|
||||
{
|
||||
secondaryText: 'Fixed an issue in Paper Mario: The Thousand Year Door that caused the sewers to be black when using an AMD graphics card',
|
||||
tertiaryText: 'Thank you to Ryujinx for the pointer towards LogicOp'
|
||||
}
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
const items = changes.map((item) => {
|
||||
const listItems = item.details.map((detail) => (
|
||||
<List.Item>
|
||||
<Text>
|
||||
{detail.secondaryText}
|
||||
</Text>
|
||||
<Text c={'dimmed'} size="sm" hidden={detail.tertiaryText == ''}>
|
||||
{detail.tertiaryText}
|
||||
</Text>
|
||||
</List.Item>
|
||||
));
|
||||
|
||||
return (
|
||||
<Accordion.Item key={item.text} value={item.text}>
|
||||
<Accordion.Control>{item.text}</Accordion.Control>
|
||||
<Accordion.Panel>
|
||||
<List>
|
||||
{listItems}
|
||||
</List>
|
||||
</Accordion.Panel>
|
||||
</Accordion.Item>
|
||||
);
|
||||
});
|
||||
|
||||
const [opened, setOpened] = useState(false);
|
||||
|
||||
return (
|
||||
<MantineProvider theme={theme} forceColorScheme="dark">
|
||||
<Container>
|
||||
<Flex align={'center'} justify={'center'} h={'100vh'}>
|
||||
<Stack>
|
||||
<Anchor href='https://twitter.com/antique_codes' ta={'center'} target='_blank'>
|
||||
@antique_codes
|
||||
</Anchor>
|
||||
<Title order={1} ta={'center'}>
|
||||
Sudachi, a Nintendo Switch emulator
|
||||
</Title>
|
||||
<Text c={'dimmed'} ta={'center'}>
|
||||
Sudachi will still receive updates but not as frequent, the plan is to add an Artic Base type feature similar to Pablo's Citra fork, move over to LibHac (for Windows) and update the UI entirely
|
||||
</Text>
|
||||
<Flex align={'center'} justify={'center'}>
|
||||
<Group ta={'center'}>
|
||||
<Button color="green" component="a" href="/releases/sudachi-android-v1.0.4.7z" radius={'xl'} variant="filled">Android</Button>
|
||||
<Menu opened={opened} onChange={setOpened}>
|
||||
<Menu.Target>
|
||||
<Button radius={'xl'} variant="filled">Apple</Button>
|
||||
</Menu.Target>
|
||||
|
||||
<Menu.Dropdown>
|
||||
<Menu.Label>iOS, iPadOS</Menu.Label>
|
||||
<Menu.Item leftSection={<IconDeviceTablet style={{ width: rem(14), height: rem(14) }} />} disabled>
|
||||
iPad
|
||||
</Menu.Item>
|
||||
<Menu.Item leftSection={<IconDeviceMobile style={{ width: rem(14), height: rem(14) }} />} disabled>
|
||||
iPhone
|
||||
</Menu.Item>
|
||||
<Menu.Divider />
|
||||
<Menu.Label>macOS</Menu.Label>
|
||||
<Menu.Item leftSection={<IconDeviceLaptop style={{ width: rem(14), height: rem(14) }} />} disabled>
|
||||
Apple Silicon
|
||||
</Menu.Item>
|
||||
<Menu.Item leftSection={<IconDeviceLaptop style={{ width: rem(14), height: rem(14) }} />} disabled>
|
||||
Intel
|
||||
</Menu.Item>
|
||||
<Menu.Divider />
|
||||
<Menu.Label>visionOS</Menu.Label>
|
||||
<Menu.Item leftSection={<IconCardboards style={{ width: rem(14), height: rem(14) }} />} disabled>
|
||||
Apple Vision Pro
|
||||
</Menu.Item>
|
||||
</Menu.Dropdown>
|
||||
</Menu>
|
||||
<Button color="orange" radius={'xl'} variant="filled" disabled>Linux</Button>
|
||||
<Button color="blue" component="a" href="/releases/sudachi-windows-v1.0.4.7z" radius={'xl'} variant="filled">Windows</Button>
|
||||
<Button color="gray" component="a" href="/releases/latest.zip" radius={'xl'} variant="filled">Source Code</Button>
|
||||
</Group>
|
||||
</Flex>
|
||||
<Space h={'md'} />
|
||||
<Title order={2}>
|
||||
Changes
|
||||
</Title>
|
||||
<Accordion radius={'md'} variant="contained">
|
||||
{items}
|
||||
</Accordion>
|
||||
</Stack>
|
||||
</Flex>
|
||||
</Container>
|
||||
</MantineProvider>
|
||||
);
|
||||
}
|
||||
|
@ -1,13 +0,0 @@
|
||||
import { Button, Group, useMantineColorScheme } from '@mantine/core';
|
||||
|
||||
export function ColorSchemeToggle() {
|
||||
const { setColorScheme } = useMantineColorScheme();
|
||||
|
||||
return (
|
||||
<Group justify="center" mt="xl">
|
||||
<Button onClick={() => setColorScheme('light')}>Light</Button>
|
||||
<Button onClick={() => setColorScheme('dark')}>Dark</Button>
|
||||
<Button onClick={() => setColorScheme('auto')}>Auto</Button>
|
||||
</Group>
|
||||
);
|
||||
}
|
@ -1,22 +0,0 @@
|
||||
import { style } from "@vanilla-extract/css";
|
||||
import { vars } from "../theme";
|
||||
import { rem } from "@mantine/core";
|
||||
|
||||
export const title = style({
|
||||
color: vars.colors.black,
|
||||
fontSize: rem(100),
|
||||
fontWeight: 900,
|
||||
letterSpacing: rem(-2),
|
||||
|
||||
selectors: {
|
||||
[vars.darkSelector]: {
|
||||
color: vars.colors.white,
|
||||
},
|
||||
},
|
||||
|
||||
"@media": {
|
||||
[vars.smallerThan("md")]: {
|
||||
fontSize: rem(50),
|
||||
},
|
||||
},
|
||||
});
|
@ -1,28 +0,0 @@
|
||||
import { Title, Text, Anchor } from "@mantine/core";
|
||||
import * as classes from "./Welcome.css";
|
||||
|
||||
export function Welcome() {
|
||||
return (
|
||||
<>
|
||||
<Title className={classes.title} ta="center" mt={100}>
|
||||
Welcome to{" "}
|
||||
<Text
|
||||
inherit
|
||||
variant="gradient"
|
||||
component="span"
|
||||
gradient={{ from: "pink", to: "yellow" }}
|
||||
>
|
||||
Mantine
|
||||
</Text>
|
||||
</Title>
|
||||
<Text color="dimmed" ta="center" size="lg" maw={580} mx="auto" mt="xl">
|
||||
This starter Vite project includes a minimal setup, if you want to learn
|
||||
more on Mantine + Vite integration follow{" "}
|
||||
<Anchor href="https://mantine.dev/guides/vite/" size="lg">
|
||||
this guide
|
||||
</Anchor>
|
||||
. To get started edit pages/Home.page.tsx file.
|
||||
</Text>
|
||||
</>
|
||||
);
|
||||
}
|
@ -1,5 +1,7 @@
|
||||
import { createTheme } from "@mantine/core";
|
||||
import { themeToVars } from "@mantine/vanilla-extract";
|
||||
|
||||
export const theme = createTheme({});
|
||||
export const theme = createTheme({
|
||||
primaryColor: 'violet'
|
||||
});
|
||||
export const vars = themeToVars(theme);
|
||||
|
Loading…
Reference in New Issue
Block a user