Run pnpm format

This commit is contained in:
venashial 2022-08-03 00:24:44 -07:00
parent e17eb02341
commit 13c417fcee
21 changed files with 579 additions and 565 deletions

View File

@ -3,11 +3,11 @@
// See https://kit.svelte.dev/docs/typescript // See https://kit.svelte.dev/docs/typescript
// for information about these interfaces // for information about these interfaces
declare namespace App { declare namespace App {
interface Locals {} interface Locals {}
interface Platform {} interface Platform {}
interface Session {} interface Session {}
interface Stuff {} interface Stuff {}
} }

View File

@ -1,14 +1,14 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head> <head>
<meta charset="utf-8" /> <meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" /> <meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="preload" href="/fonts/InterRegular.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/fonts/InterRegular.woff2" as="font" type="font/woff2" crossorigin />
<link rel="preload" href="/fonts/InterBold.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/fonts/InterBold.woff2" as="font" type="font/woff2" crossorigin />
<link rel="preload" href="/fonts/InterSemiBold.woff2" as="font" type="font/woff2" crossorigin> <link rel="preload" href="/fonts/InterSemiBold.woff2" as="font" type="font/woff2" crossorigin />
%sveltekit.head% %sveltekit.head%
</head> </head>
<body class="base theme-dark" style="background-color: hsl(220, 13%, 15%)"> <body class="base theme-dark" style="background-color: hsl(220, 13%, 15%)">
%sveltekit.body% %sveltekit.body%
</body> </body>
</html> </html>

View File

@ -1,54 +1,53 @@
<script lang="ts"> <script lang="ts">
export let title: string; export let title: string;
</script> </script>
<div class="card-row"> <div class="card-row">
<div class="card-row__title">{title}</div> <div class="card-row__title">{title}</div>
<div class="card-row__items"> <div class="card-row__items">
<slot /> <slot />
</div> </div>
</div> </div>
<style lang="postcss"> <style lang="postcss">
.card-row { .card-row {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 1rem 0; padding: 1rem 0;
grid-gap: 1rem; grid-gap: 1rem;
&__title { &__title {
padding: 0 1rem; padding: 0 1rem;
display: flex; display: flex;
grid-gap: 1rem; grid-gap: 1rem;
align-items: center; align-items: center;
&::after { &::after {
flex: 1 1; flex: 1 1;
content: " "; content: ' ';
background-color: hsla(0,0%,100%,0.2); background-color: hsla(0, 0%, 100%, 0.2);
height: 0.2rem; height: 0.2rem;
border-radius: var(--rounded-max); border-radius: var(--rounded-max);
} }
}
&__items {
display: flex;
grid-gap: 1rem;
align-items: flex-start;
overflow-x: auto;
padding: 0 1rem;
/* Hide scrollbar */
-ms-overflow-style: none;
scrollbar-width: none;
&::-webkit-scrollbar {
display: none;
}
}
&:nth-of-type(even) {
background-color: hsla(0,0%,0%,0.2);
}
} }
</style>
&__items {
display: flex;
grid-gap: 1rem;
align-items: flex-start;
overflow-x: auto;
padding: 0 1rem;
/* Hide scrollbar */
-ms-overflow-style: none;
scrollbar-width: none;
&::-webkit-scrollbar {
display: none;
}
}
&:nth-of-type(even) {
background-color: hsla(0, 0%, 0%, 0.2);
}
}
</style>

View File

@ -1,58 +1,58 @@
<script lang="ts"> <script lang="ts">
import { Field, Slider, TextInput, Button } from "omorphia" import { Field, Slider, TextInput, Button } from 'omorphia';
import TitledSection from "$components/TitledSection.svelte" import TitledSection from '$components/TitledSection.svelte';
import WindowSettings from "$components/WindowSettings.svelte" import WindowSettings from '$components/WindowSettings.svelte';
export let maxConcurrentDownloads: number = 20; export let maxConcurrentDownloads: number = 20;
</script> </script>
<div class="section"> <div class="section">
<TitledSection title="Downloads"> <TitledSection title="Downloads">
<Field label="Max concurrent downloads"> <Field label="Max concurrent downloads">
<Slider min=1 max=64 bind:value={maxConcurrentDownloads} /> <Slider min="1" max="64" bind:value={maxConcurrentDownloads} />
</Field> </Field>
</TitledSection> </TitledSection>
<TitledSection title="Override game resolution" toggleable=true> <TitledSection title="Override game resolution" toggleable="true">
<WindowSettings /> <WindowSettings />
</TitledSection> </TitledSection>
<TitledSection title="Profile hooks"> <TitledSection title="Profile hooks">
<Field label="Pre-launch"> <Field label="Pre-launch">
<TextInput /> <TextInput />
</Field> </Field>
<Field label="Wrapper"> <Field label="Wrapper">
<TextInput /> <TextInput />
</Field> </Field>
<Field label="Post-exit"> <Field label="Post-exit">
<TextInput /> <TextInput />
</Field> </Field>
</TitledSection> </TitledSection>
<TitledSection title="Java"> <TitledSection title="Java">
<Field label="Java 8 installation"> <Field label="Java 8 installation">
<TextInput placeholder="/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home" /> <TextInput placeholder="/Library/Java/JavaVirtualMachines/zulu-8.jdk/Contents/Home" />
<div class="button-group"> <div class="button-group">
<Button>Auto-detect</Button> <Button>Auto-detect</Button>
<Button>Browse installations</Button> <Button>Browse installations</Button>
<Button>Test</Button> <Button>Test</Button>
</div> </div>
</Field> </Field>
<Field label="Java 17 installation"> <Field label="Java 17 installation">
<TextInput placeholder="/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home" /> <TextInput placeholder="/Library/Java/JavaVirtualMachines/zulu-17.jdk/Contents/Home" />
<div class="button-group"> <div class="button-group">
<Button>Auto-detect</Button> <Button>Auto-detect</Button>
<Button>Browse installations</Button> <Button>Browse installations</Button>
<Button>Test</Button> <Button>Test</Button>
</div> </div>
</Field> </Field>
<Field label="Minimum memory allocatted (in MB)"> <Field label="Minimum memory allocatted (in MB)">
<TextInput /> <TextInput />
</Field> </Field>
<Field label="Maximum memory allocatted (in MB)"> <Field label="Maximum memory allocatted (in MB)">
<TextInput value="2048" /> <TextInput value="2048" />
</Field> </Field>
<Field label="Arguments"> <Field label="Arguments">
<TextInput/> <TextInput />
</Field> </Field>
</TitledSection> </TitledSection>
</div> </div>
<style lang="postcss"> <style lang="postcss">

View File

@ -1,85 +1,90 @@
<script lang="ts"> <script lang="ts">
import IconPlayFilled from "virtual:icons/carbon/play-filled-alt" import IconPlayFilled from 'virtual:icons/carbon/play-filled-alt';
import IconBadgeCheck from "virtual:icons/heroicons-solid/badge-check" import IconBadgeCheck from 'virtual:icons/heroicons-solid/badge-check';
export let title: string; export let title: string;
export let id: string; export let id: string;
export let version: string; export let version: string;
export let modpack = false; export let modpack = false;
export let image: string; export let image: string;
</script> </script>
<a class="instance" href="/library/instance/{id}/settings" <a
style:background-image="linear-gradient(5deg, hsla(0,0%,0%,0.8) 0%, hsla(0,0%,0%,0) 100%), url('{image}')"> class="instance"
<div class="instance__version">{version}{#if modpack}<IconBadgeCheck />{/if}</div> href="/library/instance/{id}/settings"
<div class="instance__title">{title}</div> style:background-image="linear-gradient(5deg, hsla(0,0%,0%,0.8) 0%, hsla(0,0%,0%,0) 100%), url('{image}')"
<button class="play-button"> >
<IconPlayFilled /> <div class="instance__version">
</button> {version}{#if modpack}<IconBadgeCheck />{/if}
</div>
<div class="instance__title">{title}</div>
<button class="play-button">
<IconPlayFilled />
</button>
</a> </a>
<style lang="postcss"> <style lang="postcss">
.instance { .instance {
--size: 8rem; --size: 8rem;
min-width: var(--size); min-width: var(--size);
min-height: var(--size); min-height: var(--size);
border-radius: var(--rounded); border-radius: var(--rounded);
overflow: hidden; overflow: hidden;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
justify-content: flex-end; justify-content: flex-end;
padding: 0.5rem; padding: 0.5rem;
box-shadow: var(--shadow-raised) var(--shadow-inset); box-shadow: var(--shadow-raised) var(--shadow-inset);
position: relative; position: relative;
background-size: cover; background-size: cover;
&__title { &__title {
text-overflow: ellipsis; text-overflow: ellipsis;
overflow: hidden; overflow: hidden;
white-space: nowrap; white-space: nowrap;
}
&__version {
color: var(--color-text);
font-size: var(--font-size-sm);
display: flex;
align-items: center;
grid-gap: 0.15rem;
:global(svg) {
margin-bottom: 0.05rem;
}
}
&:hover .play-button {
visibility: visible;
opacity: 1;
transform: none;
}
.play-button {
position: absolute;
bottom: 0.5rem;
right: 0.5rem;
background-color: var(--color-brand);
width: 2.5rem;
aspect-ratio: 1 / 1;
border-radius: var(--rounded-max);
display: flex;
align-items: center;
justify-content: center;
visibility: hidden;
opacity: 0;
transition-property: opacity, visibility, transform;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transform: translateY(1rem);
:global(svg) {
width: 1.25rem;
height: auto;
color: black;
}
}
} }
&__version {
color: var(--color-text);
font-size: var(--font-size-sm);
display: flex;
align-items: center;
grid-gap: 0.15rem;
:global(svg) {
margin-bottom: 0.05rem;
}
}
&:hover .play-button {
visibility: visible;
opacity: 1;
transform: none;
}
.play-button {
position: absolute;
bottom: 0.5rem;
right: 0.5rem;
background-color: var(--color-brand);
width: 2.5rem;
aspect-ratio: 1 / 1;
border-radius: var(--rounded-max);
display: flex;
align-items: center;
justify-content: center;
visibility: hidden;
opacity: 0;
transition-property: opacity, visibility, transform;
transition-duration: 0.2s;
transition-timing-function: ease-in-out;
transform: translateY(1rem);
:global(svg) {
width: 1.25rem;
height: auto;
color: black;
}
}
}
</style> </style>

View File

@ -1,49 +1,49 @@
<script lang="ts"> <script lang="ts">
import { Checkbox } from "omorphia" import { Checkbox } from 'omorphia';
export let title: string export let title: string;
export let toggleable: boolean = false export let toggleable: boolean = false;
export let enabled: boolean = false export let enabled: boolean = false;
</script> </script>
<div class="section"> <div class="section">
<div class="section__title"> <div class="section__title">
{#if toggleable}<Checkbox bind:checked={enabled}>{title}</Checkbox> {#if toggleable}<Checkbox bind:checked={enabled}>{title}</Checkbox>
{:else}{title} {:else}{title}
{/if} {/if}
</div> </div>
<div class="section__items"> <div class="section__items">
{#if !toggleable || enabled}<slot />{/if} {#if !toggleable || enabled}<slot />{/if}
</div> </div>
</div> </div>
<style lang="postcss"> <style lang="postcss">
.section { .section {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 1rem; padding: 1rem;
grid-gap: 1rem; grid-gap: 1rem;
&__title { &__title {
display: flex; display: flex;
grid-gap: 1rem; grid-gap: 1rem;
align-items: center; align-items: center;
&::after { &::after {
flex: 1 1; flex: 1 1;
content: " "; content: ' ';
background-color: hsla(0, 0%, 100%, 0.2); background-color: hsla(0, 0%, 100%, 0.2);
height: 0.2rem; height: 0.2rem;
border-radius: var(--rounded-max); border-radius: var(--rounded-max);
} }
}
&__items {
display: flex;
flex-direction: column;
grid-gap: 1rem;
padding: 0 8px;
}
} }
&__items {
display: flex;
flex-direction: column;
grid-gap: 1rem;
padding: 0 8px;
}
}
</style> </style>

View File

@ -1,36 +1,34 @@
<script lang="ts"> <script lang="ts">
import { SvelteComponent } from 'svelte' import { SvelteComponent } from 'svelte';
import { page } from "$app/stores"; import { page } from '$app/stores';
export let items: { export let items: {
label: string, label: string;
/** Page href, without slash prefix */ /** Page href, without slash prefix */
href: string, href: string;
icon: SvelteComponent icon: SvelteComponent;
}[]; }[];
/** Path level in URL, zero-indexed */ /** Path level in URL, zero-indexed */
export let level = 0; export let level = 0;
let path: string[]; let path: string[];
$: path = $page.url.pathname $: path = $page.url.pathname.substring(1).split('/');
.substring(1)
.split('/')
</script> </script>
<div class="vertical-nav"> <div class="vertical-nav">
{#each items as item (item.href)} {#each items as item (item.href)}
<a class="nav-item" href="/{item.href}" class:active={path[level] === item.href}> <a class="nav-item" href="/{item.href}" class:active={path[level] === item.href}>
<svelte:component this={item.icon} /> <svelte:component this={item.icon} />
{item.label} {item.label}
</a> </a>
{/each} {/each}
</div> </div>
<style lang="postcss"> <style lang="postcss">
.vertical-nav { .vertical-nav {
display: flex; display: flex;
flex-direction: column; flex-direction: column;
grid-gap: 0.25rem; grid-gap: 0.25rem;
} }
</style> </style>

View File

@ -1,14 +1,14 @@
<script lang="ts"> <script lang="ts">
import { Field, TextInput } from "omorphia" import { Field, TextInput } from 'omorphia';
</script> </script>
<div class="section"> <div class="section">
<Field label="Window width"> <Field label="Window width">
<TextInput /> <TextInput />
</Field> </Field>
<Field label="Window height"> <Field label="Window height">
<TextInput /> <TextInput />
</Field> </Field>
</div> </div>
<style lang="postcss"> <style lang="postcss">

View File

@ -2,12 +2,12 @@
/// <reference types="unplugin-icons/types/svelte" /> /// <reference types="unplugin-icons/types/svelte" />
declare module '$assets/images/*' { declare module '$assets/images/*' {
export { SvelteComponentDev as default } from 'svelte/internal'; export { SvelteComponentDev as default } from 'svelte/internal';
} }
declare module '$locales/*'; declare module '$locales/*';
declare module '*.svg' { declare module '*.svg' {
import { SvelteComponent } from 'svelte'; import { SvelteComponent } from 'svelte';
const content: SvelteComponent; const content: SvelteComponent;
export default content; export default content;
} }

View File

@ -1,6 +1,6 @@
/** @type {import('@sveltejs/kit').Handle} */ /** @type {import('@sveltejs/kit').Handle} */
export async function handle({ event, resolve }) { export async function handle({ event, resolve }) {
return await resolve(event, { return await resolve(event, {
ssr: false, ssr: false
}); });
} }

View File

@ -1,55 +1,55 @@
<script lang="ts"> <script lang="ts">
import { Svrollbar } from 'svrollbar' import { Svrollbar } from 'svrollbar';
let viewport: Element let viewport: Element;
let contents: Element let contents: Element;
</script> </script>
<div class="page"> <div class="page">
<div bind:this={viewport} class="viewport"> <div bind:this={viewport} class="viewport">
<div bind:this={contents} class="contents"> <div bind:this={contents} class="contents">
<slot /> <slot />
</div>
</div> </div>
<Svrollbar {viewport} {contents} /> </div>
<Svrollbar {viewport} {contents} />
</div> </div>
<style lang="postcss"> <style lang="postcss">
.page { .page {
position: relative; position: relative;
width: 100%; width: 100%;
overflow: hidden; overflow: hidden;
--svrollbar-track-width: 20px; --svrollbar-track-width: 20px;
--svrollbar-track-opacity: 0; --svrollbar-track-opacity: 0;
--svrollbar-thumb-width: 8px; --svrollbar-thumb-width: 8px;
--svrollbar-thumb-background: hsla(216,5%,60%); --svrollbar-thumb-background: hsla(216, 5%, 60%);
--svrollbar-thumb-opacity: 0.9; --svrollbar-thumb-opacity: 0.9;
}
.viewport {
position: relative;
width: 100%;
height: calc(100vh - 2.5rem);
overflow-y: scroll;
overflow-x: hidden;
/* hide scrollbar */
-ms-overflow-style: none;
scrollbar-width: none;
&::-webkit-scrollbar {
/* hide scrollbar */
display: none;
} }
.viewport { .contents {
position: relative; height: 100%;
width: 100%;
height: calc(100vh - 2.5rem);
overflow-y: scroll;
overflow-x: hidden;
/* hide scrollbar */
-ms-overflow-style: none;
scrollbar-width: none;
&::-webkit-scrollbar {
/* hide scrollbar */
display: none;
}
.contents {
height: 100%;
}
} }
}
:global(.v-thumb) { :global(.v-thumb) {
margin: 4px auto 4px auto !important; margin: 4px auto 4px auto !important;
} }
</style> </style>

View File

@ -1,144 +1,146 @@
<script lang="ts"> <script lang="ts">
import VerticalNav from '../components/VerticalNav.svelte' import VerticalNav from '../components/VerticalNav.svelte';
import IconHome from 'virtual:icons/lucide/home' import IconHome from 'virtual:icons/lucide/home';
import IconSearch from 'virtual:icons/heroicons-outline/search' import IconSearch from 'virtual:icons/heroicons-outline/search';
import IconPlus from 'virtual:icons/heroicons-outline/plus' import IconPlus from 'virtual:icons/heroicons-outline/plus';
import IconLibrary from 'virtual:icons/lucide/library'; import IconLibrary from 'virtual:icons/lucide/library';
import IconSettings from 'virtual:icons/lucide/settings' import IconSettings from 'virtual:icons/lucide/settings';
import { page } from "$app/stores"; import { page } from '$app/stores';
import { Button } from 'omorphia' import { Button } from 'omorphia';
</script> </script>
<div class="sidebar"> <div class="sidebar">
<div class="account"> <div class="account">
<div class="account__heads"> <div class="account__heads">
<img src="https://mc-heads.net/avatar/venashial" alt="Minecraft head"/> <img src="https://mc-heads.net/avatar/venashial" alt="Minecraft head" />
</div>
<a class="account__info" href="/settings/accounts">
<div>venashial</div>
<div class="account__info__manage">Manage accounts</div>
</a>
</div> </div>
<VerticalNav items={[ <a class="account__info" href="/settings/accounts">
{ <div>venashial</div>
label: 'Home', <div class="account__info__manage">Manage accounts</div>
href: '',
icon: IconHome,
},
{
label: 'Search',
href: 'search',
icon: IconSearch,
},
{
label: 'Library',
href: 'library',
icon: IconLibrary,
}
]}/>
<div class="instance-list">
<div class="instance-list__title">Instances</div>
<div class="instance-list__container">
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
</div>
<div class="instance-list__create">
<Button color="primary"><IconPlus /></Button> Create instance
</div>
</div>
<a class="nav-item" href="/settings" class:active={$page.url.pathname.startsWith('/settings')}>
<IconSettings />
Settings
</a> </a>
</div>
<VerticalNav
items={[
{
label: 'Home',
href: '',
icon: IconHome
},
{
label: 'Search',
href: 'search',
icon: IconSearch
},
{
label: 'Library',
href: 'library',
icon: IconLibrary
}
]}
/>
<div class="instance-list">
<div class="instance-list__title">Instances</div>
<div class="instance-list__container">
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
<a class="instance-list__container__item">Fabulously Optimized</a>
</div>
<div class="instance-list__create">
<Button color="primary"><IconPlus /></Button> Create instance
</div>
</div>
<a class="nav-item" href="/settings" class:active={$page.url.pathname.startsWith('/settings')}>
<IconSettings />
Settings
</a>
</div> </div>
<style lang="postcss"> <style lang="postcss">
.sidebar { .sidebar {
display: flex;
flex-direction: column;
padding: 1rem;
height: 100%;
background-color: var(--sidebar-bg);
.account {
display: flex;
grid-gap: 0.75rem;
&__heads {
img {
width: 2.5rem;
border-radius: var(--rounded-sm);
}
}
&__info {
&__manage {
color: var(--color-text-light);
}
}
}
.instance-list {
padding: 0 8px;
display: flex;
flex-direction: column;
color: var(--color-text-light);
&__title {
text-transform: uppercase;
letter-spacing: 1px;
font-size: 11px;
line-height: 100%;
}
&__container {
max-height: calc(100vh - 400px);
overflow-y: auto;
mask-image: linear-gradient(to bottom, transparent, hsla(0, 0%, 0%, 1) 5% 95%, transparent);
scrollbar-width: none;
padding: 8px 0;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
padding: 1rem; gap: 4px;
height: 100%;
background-color: var(--sidebar-bg);
.account { &::-webkit-scrollbar {
display: flex; display: none;
grid-gap: 0.75rem;
&__heads {
img {
width: 2.5rem;
border-radius: var(--rounded-sm);
}
}
&__info {
&__manage {
color: var(--color-text-light);
}
}
} }
}
.instance-list { &__create {
padding: 0 8px; margin-top: 16px;
display: flex; display: flex;
flex-direction: column; align-items: center;
color: var(--color-text-light); grid-gap: 8px;
&__title { :global(button) {
text-transform: uppercase; width: 34px;
letter-spacing: 1px;
font-size: 11px;
line-height: 100%;
}
&__container {
max-height: calc(100vh - 400px);
overflow-y: auto;
mask-image: linear-gradient(to bottom, transparent, hsla(0, 0%, 0%, 1) 5% 95%, transparent);
scrollbar-width: none;
padding: 8px 0;
display: flex;
flex-direction: column;
gap: 4px;
&::-webkit-scrollbar {
display: none;
}
}
&__create {
margin-top: 16px;
display: flex;
align-items: center;
grid-gap: 8px;
:global(button) {
width: 34px;
}
}
}
> :global(*) {
margin-bottom: 24px;
}
> *:last-child {
margin-top: auto;
margin-bottom: 0;
} }
}
} }
> :global(*) {
margin-bottom: 24px;
}
> *:last-child {
margin-top: auto;
margin-bottom: 0;
}
}
</style> </style>

View File

@ -1,71 +1,69 @@
<script lang="ts"> <script lang="ts">
import IconChevronLeft from 'virtual:icons/lucide/chevron-left'; import IconChevronLeft from 'virtual:icons/lucide/chevron-left';
import IconChevronRight from 'virtual:icons/lucide/chevron-right'; import IconChevronRight from 'virtual:icons/lucide/chevron-right';
import IconCaretRight from 'virtual:icons/carbon/caret-right'; import IconCaretRight from 'virtual:icons/carbon/caret-right';
import { page } from '$app/stores' import { page } from '$app/stores';
let path: string[]; let path: string[];
$: path = $page.url.pathname $: path = $page.url.pathname.substring(1).split('/');
.substring(1)
.split('/')
</script> </script>
<div class="status-bar"> <div class="status-bar">
<div class="page-nav"> <div class="page-nav">
<button title="Back" on:click={() => window.history.back()}> <button title="Back" on:click={() => window.history.back()}>
<IconChevronLeft /> <IconChevronLeft />
</button> </button>
<button title="Forward" on:click={() => window.history.forward()}> <button title="Forward" on:click={() => window.history.forward()}>
<IconChevronRight /> <IconChevronRight />
</button> </button>
</div> </div>
<div class="breadcrumbs"> <div class="breadcrumbs">
{#each path as crumb, index} {#each path as crumb, index}
{#if index !== 0} {#if index !== 0}
<IconCaretRight /> <IconCaretRight />
{/if} {/if}
<a class="breadcrumbs__crumb" href={crumb}>{crumb || 'home'}</a> <a class="breadcrumbs__crumb" href={crumb}>{crumb || 'home'}</a>
{/each} {/each}
</div> </div>
<div class="statuses"> <div class="statuses">
<div>Updating 12 mods...</div> <div>Updating 12 mods...</div>
<div>236 mods installed</div> <div>236 mods installed</div>
</div> </div>
</div> </div>
<style lang="postcss"> <style lang="postcss">
.status-bar { .status-bar {
display: flex; display: flex;
padding: 0.75rem; padding: 0.75rem;
grid-gap: 0.75rem; grid-gap: 0.75rem;
background-color: var(--status-bg); background-color: var(--status-bg);
width: 100%; width: 100%;
height: 100%; height: 100%;
align-items: center; align-items: center;
box-shadow: var(--shadow-raised); box-shadow: var(--shadow-raised);
}
.breadcrumbs {
display: flex;
grid-gap: 0.25rem;
text-transform: capitalize;
align-items: center;
&__crumb:hover {
text-decoration: underline;
} }
.breadcrumbs { :global(.icon) {
display: flex; color: var(--color-text-lightest);
grid-gap: 0.25rem;
text-transform: capitalize;
align-items: center;
&__crumb:hover {
text-decoration: underline;
}
:global(.icon) {
color: var(--color-text-lightest)
}
} }
}
.statuses { .statuses {
margin-left: auto; margin-left: auto;
display: flex; display: flex;
grid-gap: 1rem; grid-gap: 1rem;
color: var(--color-text-lightest); color: var(--color-text-lightest);
} }
</style> </style>

View File

@ -1,27 +1,41 @@
<script lang="ts"> <script lang="ts">
import Instance from '$components/Instance.svelte';
import Instance from "$components/Instance.svelte"; import CardRow from '$components/CardRow.svelte';
import CardRow from "$components/CardRow.svelte";
</script> </script>
<CardRow title="Jump back in"> <CardRow title="Jump back in">
{#each Array(5) as _, i} {#each Array(5) as _, i}
<Instance title="New Caves" id="234" version="1.18" image="https://i.ibb.co/8KDxBwq/patchnotes-cavesandcliffs.jpg" /> <Instance
{/each} title="New Caves"
id="234"
version="1.18"
image="https://i.ibb.co/8KDxBwq/patchnotes-cavesandcliffs.jpg"
/>
{/each}
</CardRow> </CardRow>
<CardRow title="Popular packs"> <CardRow title="Popular packs">
{#each Array(5) as _, i} {#each Array(5) as _, i}
<Instance title="All of Fabric 5" id="567" version="1.18.1" image="https://media.forgecdn.net/avatars/458/829/637733746768258525.png" modpack /> <Instance
{/each} title="All of Fabric 5"
id="567"
version="1.18.1"
image="https://media.forgecdn.net/avatars/458/829/637733746768258525.png"
modpack
/>
{/each}
</CardRow> </CardRow>
<CardRow title="New releases"> <CardRow title="New releases">
{#each Array(5) as _, i} {#each Array(5) as _, i}
<Instance title="New Caves" id="234" version="1.18.2" image="https://i.ibb.co/8KDxBwq/patchnotes-cavesandcliffs.jpg" /> <Instance
{/each} title="New Caves"
id="234"
version="1.18.2"
image="https://i.ibb.co/8KDxBwq/patchnotes-cavesandcliffs.jpg"
/>
{/each}
</CardRow> </CardRow>
<style lang="postcss"> <style lang="postcss">
</style> </style>

View File

@ -1,11 +1,8 @@
<script context="module" lang="ts"> <script context="module" lang="ts">
</script> </script>
<script lang="ts"> <script lang="ts">
</script> </script>
<style lang="postcss"> <style lang="postcss">
</style> </style>

View File

@ -1,49 +1,52 @@
<script lang="ts"> <script lang="ts">
import VerticalNav from "$components/VerticalNav.svelte"; import VerticalNav from '$components/VerticalNav.svelte';
import IconPackage from 'virtual:icons/lucide/package' import IconPackage from 'virtual:icons/lucide/package';
import IconAdjustments from 'virtual:icons/heroicons-outline/adjustments' import IconAdjustments from 'virtual:icons/heroicons-outline/adjustments';
import IconFileText from 'virtual:icons/lucide/file-text' import IconFileText from 'virtual:icons/lucide/file-text';
</script> </script>
<div class="layout-instance"> <div class="layout-instance">
<div class="instance-sidebar"> <div class="instance-sidebar">
<VerticalNav level={3} items={[ <VerticalNav
level={3}
items={[
{ {
label: 'Mods', label: 'Mods',
href: 'mods', href: 'mods',
icon: IconPackage, icon: IconPackage
}, },
{ {
label: 'Settings', label: 'Settings',
href: 'settings', href: 'settings',
icon: IconAdjustments, icon: IconAdjustments
}, },
{ {
label: 'Logs', label: 'Logs',
href: 'logs', href: 'logs',
icon: IconFileText, icon: IconFileText
} }
]}/> ]}
</div> />
</div>
<div class="layout-instance__page"> <div class="layout-instance__page">
<slot /> <slot />
</div> </div>
</div> </div>
<style lang="postcss"> <style lang="postcss">
.layout-instance { .layout-instance {
display: grid; display: grid;
grid-template-columns: 224px 1fr; grid-template-columns: 224px 1fr;
height: 100%; height: 100%;
&__page { &__page {
height: 100%; height: 100%;
background-color: var(--sub-page-bg); background-color: var(--sub-page-bg);
}
} }
}
.instance-sidebar { .instance-sidebar {
padding: 16px; padding: 16px;
} }
</style> </style>

View File

@ -1,18 +1,17 @@
<script context="module" lang="ts"> <script context="module" lang="ts">
</script> </script>
<script lang="ts"> <script lang="ts">
import GlobalSettings from "$components/GlobalSettings.svelte" import GlobalSettings from '$components/GlobalSettings.svelte';
import TitledSection from "$components/TitledSection.svelte" import TitledSection from '$components/TitledSection.svelte';
export let overrideGlobalSettings = false export let overrideGlobalSettings = false;
</script> </script>
<div class="section"> <div class="section">
<TitledSection title="Override global settings" toggleable=true> <TitledSection title="Override global settings" toggleable="true">
<GlobalSettings /> <GlobalSettings />
</TitledSection> </TitledSection>
</div> </div>
<style lang="postcss"> <style lang="postcss">

View File

@ -1,13 +1,12 @@
<script context="module" lang="ts"> <script context="module" lang="ts">
</script> </script>
<script lang="ts"> <script lang="ts">
import GlobalSettings from "$components/GlobalSettings.svelte" import GlobalSettings from '$components/GlobalSettings.svelte';
</script> </script>
<div class="section"> <div class="section">
<GlobalSettings /> <GlobalSettings />
</div> </div>
<style lang="postcss"> <style lang="postcss">

View File

@ -1,3 +1,3 @@
import { writable } from 'svelte/store' import { writable } from 'svelte/store';
export const token = writable('') export const token = writable('');

View File

@ -1,19 +1,19 @@
.nav-item { .nav-item {
display: flex; display: flex;
align-items: center; align-items: center;
grid-gap: 0.5rem; grid-gap: 0.5rem;
padding: 0.5rem 0.75rem; padding: 0.5rem 0.75rem;
border-radius: var(--rounded-sm); border-radius: var(--rounded-sm);
box-shadow: var(--shadow-inset-sm) var(--shadow-raised); box-shadow: var(--shadow-inset-sm) var(--shadow-raised);
transition: background-color 0.2s ease-in-out, transition: background-color 0.2s ease-in-out, color 0.1s ease-in-out;
color 0.1s ease-in-out; color: var(--color-text-light);
color: var(--color-text-light);
&:hover, &.active { &:hover,
color: var(--color-text); &.active {
} color: var(--color-text);
}
&.active { &.active {
background-color: var(--nav-active-bg); background-color: var(--nav-active-bg);
} }
} }

View File

@ -1,12 +1,12 @@
@import 'components.postcss'; @import 'components.postcss';
.theme-dark { .theme-dark {
--status-bg: hsl(216, 5%, 29%); --status-bg: hsl(216, 5%, 29%);
--sidebar-bg: hsl(216, 10%, 3%); --sidebar-bg: hsl(216, 10%, 3%);
--nav-active-bg: hsl(217, 9%, 25%); --nav-active-bg: hsl(217, 9%, 25%);
--font-size-sm: 0.75rem; --font-size-sm: 0.75rem;
--color-bg: hsl(217, 9%, 18%); --color-bg: hsl(217, 9%, 18%);
--color-brand: hsl(145, 75%, 45%); --color-brand: hsl(145, 75%, 45%);
--color-brand-contrast: black; --color-brand-contrast: black;
--sub-page-bg: hsl(220, 9%, 13%) --sub-page-bg: hsl(220, 9%, 13%);
} }