jankboard/client/src/App.svelte

104 lines
2.8 KiB
Svelte
Raw Normal View History

2024-02-21 13:49:39 -08:00
<script lang="ts">
2024-02-25 01:21:13 -08:00
import "@fontsource/roboto/latin.css";
import "material-icons/iconfont/material-icons.css";
import Dashboard from "./lib/Dashboard/Dashboard.svelte";
import "material-symbols";
import AppBar from "./lib/Apps/AppBar.svelte";
import { appList } from "./lib/Apps/appList";
import { initializeTelemetry } from "./lib/utils/initializeTelemetry";
import { onMount } from "svelte";
import { Toaster } from "svelte-french-toast";
import { initializationSequence } from "./lib/Sequences/sequences";
import Loading from "./lib/Loading/Loading.svelte";
import { settingsStore } from "./lib/stores/settingsStore";
import getSettings from "./lib/utils/getSettings";
2024-02-21 20:10:42 -08:00
2024-02-25 01:21:13 -08:00
let activeApp: App = "camera";
let topics: TelemetryTopics = {
doubles: [
2024-02-25 01:21:13 -08:00
"orientation",
"chassis-x-speed",
"chassis-y-speed",
"accx",
"accy",
"accz",
"jerk-x",
"jerk-y",
"voltage",
],
2024-02-25 01:21:13 -08:00
strings: ["acc-profile", "gear"],
booleans: ["ebrake", "reorient", "gpws"],
};
2024-02-25 01:21:13 -08:00
let loading = $settingsStore.fastStartup ? false : true;
onMount(() => {
2024-02-25 01:21:13 -08:00
let savedSettings = getSettings();
if (savedSettings !== false) {
2024-02-25 01:21:13 -08:00
settingsStore.set(savedSettings);
}
2024-02-25 01:29:59 -08:00
window.ResizeObserver = ResizeObserver;
// disabled while migrating away from python
// initializeTelemetry(topics, 200);
setTimeout(() => {
2024-02-25 01:21:13 -08:00
loading = false;
initializationSequence();
}, 3000);
});
2024-02-21 13:49:39 -08:00
</script>
<main
2024-02-25 01:44:35 -08:00
class="select-none transition-opacity duration-300"
class:opacity-0={loading}
>
2024-02-21 20:10:42 -08:00
<!-- driver dashboard -->
<div class="h-screen w-[35vw] fixed shadow-lg shadow-slate-800 z-10">
<Dashboard />
</div>
<!-- the infotainment system -->
2024-02-25 01:44:35 -08:00
<div class="min-h-screen w-[65vw] right-0 absolute infotainment-container">
2024-02-21 20:10:42 -08:00
<!-- dynamic app system (edit appList.ts to add new apps) -->
2024-02-25 01:44:35 -08:00
<div class="mx-10 mt-10 overflow-hidden">
2024-02-21 20:10:42 -08:00
<svelte:component this={appList[activeApp].component} />
</div>
2024-02-25 01:44:35 -08:00
<div class="fixed w-[65vw] flex justify-center right-0 bottom-0 mb-4">
2024-02-21 20:10:42 -08:00
<AppBar bind:activeApp {appList} />
</div>
</div>
</main>
2024-02-21 13:49:39 -08:00
{#if loading}
<Loading />
{/if}
2024-02-25 01:44:35 -08:00
<!-- toast service -->
<Toaster />
2024-02-21 14:19:36 -08:00
<style lang="postcss">
main {
2024-02-25 01:21:13 -08:00
font-family: "Roboto", sans-serif;
2024-02-21 14:19:36 -08:00
}
2024-02-21 20:10:42 -08:00
.infotainment-container {
background: #2c3e50; /* fallback for old browsers */
background: -webkit-linear-gradient(
to right,
#2c3e50,
#fd746c
); /* Chrome 10-25, Safari 5.1-6 */
background: linear-gradient(
to right,
#2c3e50,
#fd746c
); /* W3C, IE 10+/ Edge, Firefox 16+, Chrome 26+, Opera 12+, Safari 7+ */
/* hide scrollbar */
-ms-overflow-style: none;
scrollbar-width: none;
}
.infotainment-container::-webkit-scrollbar {
/* hide scrollbar */
display: none;
2024-02-21 20:10:42 -08:00
}
2024-02-21 13:49:39 -08:00
</style>