This commit is contained in:
relaxed 2024-08-25 12:07:03 +05:00
commit b8e463b000
31 changed files with 2230 additions and 0 deletions

9
src/lib/Cache.svelte Normal file
View file

@ -0,0 +1,9 @@
<div
class="size-[40px] min-w-[40px]
border-2 border-[var(--w-orange)] dark:border-[var(--b-orange)]
bg-gray-800
flex justify-center items-center
text-4xl text-[var(--w-orange)] dark:text-[var(--b-orange)]"
>
C
</div>

7
src/lib/Checked.svelte Normal file
View file

@ -0,0 +1,7 @@
<div class="w-[40px] bg-gray-800">
<img
src="/check.svg"
class="size-[40px] min-w-[40px] border-2 border-[var(--w-green)] dark:border-[var(--b-green)]"
alt="data loaded"
/>
</div>

50
src/lib/Dialog.svelte Normal file
View file

@ -0,0 +1,50 @@
<script>
export let is_open = false;
export let name_editable = false;
export let name = "";
export let class_name = "";
export let on_close = () => {};
</script>
<div
class="absolute top-0 w-full h-screen z-10
max-w-full max-h-full
flex justify-center items-center
backdrop-blur-sm
bg-[#00000022]
{is_open ? 'opacity-100 visible' : 'invisible opacity-0'}
transition-all duration-300"
>
<div
class="size-[700px] mx-4 flex flex-col
border-[var(--w-border)] dark:border-[var(--b-border)] border-2 rounded-xl
bg-[var(--w-bg)] dark:bg-[var(--b-bg)]
text-[var(--w-text)] dark:text-[var(--b-text)] text-2xl
overflow-y-auto
{class_name}"
>
<div
class="ml-2 relative flex flex-initial justify-between items-center"
>
{#if name_editable}
<input
type="text"
bind:value={name}
class="bg-[var(--bg)] w-full focus-visible:outline-none"
/>
{:else}
<p class="bg-[var(--bg)] w-full focus-visible:outline-none">
{name}
</p>
{/if}
<button
on:click={() => {
is_open = false;
on_close();
}}
class="size-[60px] m-2 text-[40px] pb-3">x</button
>
</div>
<slot></slot>
</div>
</div>

76
src/lib/Pair.svelte Normal file
View file

@ -0,0 +1,76 @@
<script>
export let pairs;
</script>
{#if pairs.schedulePairs.length === 1}
<div
class="w-auto m-2
border-[1px] rounded-xl border-[var(--w-border)] dark:border-[var(--b-border)]
{pairs.isCurrentPair ? 'bg-[var(--w-blue)] dark:bg-[var(--b-blue)]' : ''}
"
>
<div
class="border-b-[1px] border-[var(--w-border)] dark:border-[var(--b-border)]"
>
<h1 class="m-2 mb-1">
{pairs.N}) {pairs.time.replace("-", " - ")}
</h1>
</div>
<div class="p-2">
<h1>
{pairs.schedulePairs[0].subject}
</h1>
<h1>
aud: {pairs.schedulePairs[0].aud}
</h1>
<a
target="_blank"
href="https://www.usue.ru/raspisanie/getteams/?prepod={pairs
.schedulePairs[0].teacher}"
class="underline"
>
{pairs.schedulePairs[0].teacher}
</a>
<h1>
{pairs.schedulePairs[0].group}
</h1>
</div>
</div>
{:else if pairs.schedulePairs.length > 1}
{@const end_index = pairs.schedulePairs.length - 1}
<div
class="w-full m-2
border-[1px] rounded-xl border-[var(--w-border)] dark:border-[var(--b-border)]
{pairs.isCurrentPair ? 'bg-[var(--w-blue)] dark:bg-[var(--b-blue)]' : ''}
"
>
<div class="border-b-2 border-[var(--border)]">
<h1 class="m-2 mb-1">
{pairs.N}) {pairs.time.replace("-", " - ")}
</h1>
</div>
{#each pairs.schedulePairs as pair, i}
<div
class="p-2
{i === end_index ? '' : 'border-b-[1px] border-[var(--border)]'}"
>
<h1>
{pair.subject}
</h1>
<h1>
aud: {pair.aud}
</h1>
<a
target="_blank"
href="https://www.usue.ru/raspisanie/getteams/?prepod={pair.teacher}"
class="underline"
>
{pair.teacher}
</a>
<h1>
{pair.group}
</h1>
</div>
{/each}
</div>
{/if}

6
src/lib/Spinner.svelte Normal file
View file

@ -0,0 +1,6 @@
<span
class="size-[40px] min-w-[40px]
border-[5px] border-[var(--w-border)] dark:border-[var(--b-border)] rounded-[50%]
inline-block box-border animate-spin"
style="border-bottom-color: transparent;"
></span>

58
src/lib/ThemeSwitch.svelte Executable file
View file

@ -0,0 +1,58 @@
<script>
import { onMount } from "svelte";
let is_resize = false;
let is_transparent = false;
let is_dark = true;
function handleSwitchDarkMode() {
setTimeout(() => {
is_transparent = true;
is_dark = !is_dark;
setTimeout(() => {
is_resize = false;
is_transparent = false;
}, 250);
}, 500);
is_resize = true;
const isDark = window.document.documentElement.classList.toggle("dark");
if (isDark) {
localStorage.setItem("color-theme", "dark");
} else {
localStorage.setItem("color-theme", "light");
}
}
onMount(() => {
if (localStorage.getItem("color-theme") === "light") {
is_dark = false;
}
});
</script>
<div class=" min-w-[40px] min-h-[40px] flex justify-center items-center">
<!-- svelte-ignore a11y-click-events-have-key-events -->
<!-- svelte-ignore a11y-no-static-element-interactions -->
<div
class="group h-[50px] w-[50px] rounded-full flex justify-center items-center
{is_dark ? 'bg-[var(--w-bg)]' : 'bg-[var(--b-bg)]'}
"
on:click={handleSwitchDarkMode}
>
<div
class=" rounded-full
{!is_transparent
? is_dark
? 'group-hover:bg-[var(--b-bg)] dark:group-hover:bg-[var(--b-bg)]'
: 'group-hover:bg-[var(--w-bg)] dark:group-hover:bg-[var(--w-bg)]'
: ''}
{!is_transparent
? is_resize
? 'h-[50px] w-[50px]'
: 'h-[25px] w-[25px]'
: 'h-[25px] w-[25px]'}
transition-all duration-500 ease-in-out"
></div>
</div>
</div>

7
src/lib/X.svelte Normal file
View file

@ -0,0 +1,7 @@
<div class="w-[40px] bg-gray-800">
<img
src="/x.svg"
class="size-[40px] min-w-[40px] border-2 border-[var(--b-red)]"
alt="data not loaded"
/>
</div>