mirror of
https://github.com/TxtDot/vigi.git
synced 2024-12-04 08:46:21 +03:00
feat: load icons
This commit is contained in:
parent
febafc94df
commit
4a702f0352
6 changed files with 148 additions and 11 deletions
|
@ -97,7 +97,7 @@ input::placeholder {
|
||||||
|
|
||||||
@apply hover:px-4;
|
@apply hover:px-4;
|
||||||
|
|
||||||
@apply flex items-center justify-between gap-2 w-full truncate;
|
@apply flex items-center gap-2 w-full truncate;
|
||||||
}
|
}
|
||||||
|
|
||||||
.close-button {
|
.close-button {
|
||||||
|
|
|
@ -4,24 +4,39 @@
|
||||||
import Renderer from "./DaletlRenderer/Renderer.svelte";
|
import Renderer from "./DaletlRenderer/Renderer.svelte";
|
||||||
import { isLoading, state } from "$lib/stores";
|
import { isLoading, state } from "$lib/stores";
|
||||||
import type { VigiState } from "$lib/types";
|
import type { VigiState } from "$lib/types";
|
||||||
|
import GooLoadSpin from "$lib/icons/GooLoadSpin.svelte";
|
||||||
|
import { slide } from "svelte/transition";
|
||||||
|
|
||||||
let loading = false;
|
let loading = false;
|
||||||
|
|
||||||
let data: Root;
|
let data: Root;
|
||||||
|
let tabId = 0;
|
||||||
|
|
||||||
state.subscribe((st) => {
|
state.subscribe((st) => {
|
||||||
data = (st as VigiState).current_data;
|
data = (st as VigiState).current_data;
|
||||||
|
|
||||||
|
if (!loading) {
|
||||||
|
tabId = (st as VigiState).current_tab_index;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
isLoading.subscribe((val) => {
|
isLoading.subscribe((val) => {
|
||||||
loading = val;
|
loading = val;
|
||||||
|
|
||||||
|
if (loading) {
|
||||||
|
tabId = -1;
|
||||||
|
}
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<Block className="browser-window">
|
<Block className="browser-window">
|
||||||
{#if loading}
|
<div>
|
||||||
<div>Loading...</div>
|
{#if loading}
|
||||||
{:else}
|
<div transition:slide>
|
||||||
|
<GooLoadSpin />
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
<Renderer {data} />
|
<Renderer {data} />
|
||||||
{/if}
|
</div>
|
||||||
</Block>
|
</Block>
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { slide } from "svelte/transition";
|
|
||||||
|
|
||||||
import Block from "./Block.svelte";
|
import Block from "./Block.svelte";
|
||||||
import WindowControls from "./WindowControls.svelte";
|
import WindowControls from "./WindowControls.svelte";
|
||||||
import type { StateTab } from "$lib/types";
|
import type { StateTab } from "$lib/types";
|
||||||
|
|
|
@ -1,8 +1,10 @@
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { StateTab } from "$lib/types";
|
import type { StateTab } from "$lib/types";
|
||||||
import { removeTab, selectTab } from "$lib/utils";
|
import { removeTab, selectTab } from "$lib/utils";
|
||||||
import { slide } from "svelte/transition";
|
import { fade, slide } from "svelte/transition";
|
||||||
import Close from "$lib/icons/Close.svelte";
|
import Close from "$lib/icons/Close.svelte";
|
||||||
|
import { isLoading } from "$lib/stores";
|
||||||
|
import GooLoad from "$lib/icons/GooLoad.svelte";
|
||||||
|
|
||||||
export let active = false;
|
export let active = false;
|
||||||
export let tab: StateTab;
|
export let tab: StateTab;
|
||||||
|
@ -12,6 +14,11 @@
|
||||||
let tabElement: HTMLButtonElement;
|
let tabElement: HTMLButtonElement;
|
||||||
|
|
||||||
let hovered = false;
|
let hovered = false;
|
||||||
|
let loading = false;
|
||||||
|
|
||||||
|
isLoading.subscribe((val) => {
|
||||||
|
loading = val;
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div
|
<div
|
||||||
|
@ -25,8 +32,10 @@
|
||||||
<button
|
<button
|
||||||
class="close-button"
|
class="close-button"
|
||||||
transition:slide={{ duration: 100, axis: "x" }}
|
transition:slide={{ duration: 100, axis: "x" }}
|
||||||
on:click={() => removeTab(id)}><Close /></button
|
on:click={() => removeTab(id)}
|
||||||
>
|
>
|
||||||
|
<Close />
|
||||||
|
</button>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<button
|
<button
|
||||||
|
@ -35,9 +44,19 @@
|
||||||
transition:slide={{ duration: 100 }}
|
transition:slide={{ duration: 100 }}
|
||||||
bind:this={tabElement}
|
bind:this={tabElement}
|
||||||
on:click={() => {
|
on:click={() => {
|
||||||
selectTab(id);
|
if (!active) {
|
||||||
|
selectTab(id);
|
||||||
|
}
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{tab.title}
|
<div>
|
||||||
|
{#if loading && active}
|
||||||
|
<GooLoad />
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div>
|
||||||
|
{tab.title}
|
||||||
|
</div>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
57
src/lib/icons/GooLoad.svelte
Normal file
57
src/lib/icons/GooLoad.svelte
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="1em"
|
||||||
|
height="1em"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
{...$$props}
|
||||||
|
>
|
||||||
|
<defs>
|
||||||
|
<filter id="svgSpinnersGooeyBalls10">
|
||||||
|
<feGaussianBlur in="SourceGraphic" result="y" stdDeviation="1.5" />
|
||||||
|
<feColorMatrix
|
||||||
|
in="y"
|
||||||
|
result="z"
|
||||||
|
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -7"
|
||||||
|
/>
|
||||||
|
<feBlend in="SourceGraphic" in2="z" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g fill="currentColor" filter="url(#svgSpinnersGooeyBalls10)">
|
||||||
|
<circle cx="4" cy="12" r="3">
|
||||||
|
<animate
|
||||||
|
attributeName="cx"
|
||||||
|
calcMode="spline"
|
||||||
|
dur="0.75s"
|
||||||
|
keySplines=".56,.52,.17,.98;.56,.52,.17,.98"
|
||||||
|
repeatCount="indefinite"
|
||||||
|
values="4;9;4"
|
||||||
|
/>
|
||||||
|
<animate
|
||||||
|
attributeName="r"
|
||||||
|
calcMode="spline"
|
||||||
|
dur="0.75s"
|
||||||
|
keySplines=".56,.52,.17,.98;.56,.52,.17,.98"
|
||||||
|
repeatCount="indefinite"
|
||||||
|
values="3;8;3"
|
||||||
|
/>
|
||||||
|
</circle>
|
||||||
|
<circle cx="15" cy="12" r="8">
|
||||||
|
<animate
|
||||||
|
attributeName="cx"
|
||||||
|
calcMode="spline"
|
||||||
|
dur="0.75s"
|
||||||
|
keySplines=".56,.52,.17,.98;.56,.52,.17,.98"
|
||||||
|
repeatCount="indefinite"
|
||||||
|
values="15;20;15"
|
||||||
|
/>
|
||||||
|
<animate
|
||||||
|
attributeName="r"
|
||||||
|
calcMode="spline"
|
||||||
|
dur="0.75s"
|
||||||
|
keySplines=".56,.52,.17,.98;.56,.52,.17,.98"
|
||||||
|
repeatCount="indefinite"
|
||||||
|
values="8;3;8"
|
||||||
|
/>
|
||||||
|
</circle>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.4 KiB |
48
src/lib/icons/GooLoadSpin.svelte
Normal file
48
src/lib/icons/GooLoadSpin.svelte
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
width="1em"
|
||||||
|
height="1em"
|
||||||
|
viewBox="0 0 24 24"
|
||||||
|
{...$$props}
|
||||||
|
>
|
||||||
|
<defs>
|
||||||
|
<filter id="svgSpinnersGooeyBalls20">
|
||||||
|
<feGaussianBlur in="SourceGraphic" result="y" stdDeviation="1" />
|
||||||
|
<feColorMatrix
|
||||||
|
in="y"
|
||||||
|
result="z"
|
||||||
|
values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -7"
|
||||||
|
/>
|
||||||
|
<feBlend in="SourceGraphic" in2="z" />
|
||||||
|
</filter>
|
||||||
|
</defs>
|
||||||
|
<g filter="url(#svgSpinnersGooeyBalls20)">
|
||||||
|
<circle cx="5" cy="12" r="4" fill="currentColor">
|
||||||
|
<animate
|
||||||
|
attributeName="cx"
|
||||||
|
calcMode="spline"
|
||||||
|
dur="2s"
|
||||||
|
keySplines=".36,.62,.43,.99;.79,0,.58,.57"
|
||||||
|
repeatCount="indefinite"
|
||||||
|
values="5;8;5"
|
||||||
|
/>
|
||||||
|
</circle>
|
||||||
|
<circle cx="19" cy="12" r="4" fill="currentColor">
|
||||||
|
<animate
|
||||||
|
attributeName="cx"
|
||||||
|
calcMode="spline"
|
||||||
|
dur="2s"
|
||||||
|
keySplines=".36,.62,.43,.99;.79,0,.58,.57"
|
||||||
|
repeatCount="indefinite"
|
||||||
|
values="19;16;19"
|
||||||
|
/>
|
||||||
|
</circle>
|
||||||
|
<animateTransform
|
||||||
|
attributeName="transform"
|
||||||
|
dur="0.75s"
|
||||||
|
repeatCount="indefinite"
|
||||||
|
type="rotate"
|
||||||
|
values="0 12 12;360 12 12"
|
||||||
|
/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 1.2 KiB |
Loading…
Add table
Reference in a new issue