🍧 Collects all icons
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { slide } from 'svelte/transition';
|
import { slide } from 'svelte/transition';
|
||||||
import { cubicOut } from 'svelte/easing';
|
import { cubicOut } from 'svelte/easing';
|
||||||
import Down from '~icons/tabler/chevron-down';
|
|
||||||
import { createEventDispatcher } from 'svelte';
|
import { createEventDispatcher } from 'svelte';
|
||||||
|
import { Down } from './icons';
|
||||||
|
|
||||||
const dispatch = createEventDispatcher();
|
const dispatch = createEventDispatcher();
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,7 @@
|
|||||||
import { closeModal } from 'svelte-modals';
|
import { closeModal } from 'svelte-modals';
|
||||||
import { focusTrap } from 'svelte-focus-trap';
|
import { focusTrap } from 'svelte-focus-trap';
|
||||||
import { fly } from 'svelte/transition';
|
import { fly } from 'svelte/transition';
|
||||||
import Cancel from '~icons/tabler/x';
|
import { Cancel, Check } from '$lib/components/icons';
|
||||||
import Check from '~icons/tabler/check';
|
|
||||||
|
|
||||||
// provided by <Modals />
|
// provided by <Modals />
|
||||||
export let isOpen: boolean;
|
export let isOpen: boolean;
|
||||||
|
|||||||
@@ -3,7 +3,7 @@
|
|||||||
import { focusTrap } from 'svelte-focus-trap';
|
import { focusTrap } from 'svelte-focus-trap';
|
||||||
import { fly } from 'svelte/transition';
|
import { fly } from 'svelte/transition';
|
||||||
import { telemetry } from '$lib/stores/telemetry';
|
import { telemetry } from '$lib/stores/telemetry';
|
||||||
import Cancel from '~icons/tabler/x';
|
import { Cancel } from './icons';
|
||||||
|
|
||||||
// provided by <Modals />
|
// provided by <Modals />
|
||||||
export let isOpen: boolean;
|
export let isOpen: boolean;
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { closeModal } from 'svelte-modals';
|
|
||||||
import { focusTrap } from 'svelte-focus-trap';
|
import { focusTrap } from 'svelte-focus-trap';
|
||||||
import { fly } from 'svelte/transition';
|
import { fly } from 'svelte/transition';
|
||||||
import Check from '~icons/tabler/check';
|
import { Check } from './icons';
|
||||||
|
|
||||||
// provided by <Modals />
|
// provided by <Modals />
|
||||||
export let isOpen: boolean;
|
export let isOpen: boolean;
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { slide } from 'svelte/transition';
|
import { slide } from 'svelte/transition';
|
||||||
import { cubicOut } from 'svelte/easing';
|
import { cubicOut } from 'svelte/easing';
|
||||||
import Down from '~icons/tabler/chevron-down';
|
import { Down } from './icons';
|
||||||
export let open = true;
|
export let open = true;
|
||||||
export let collapsible = true;
|
export let collapsible = true;
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Loader from '~icons/tabler/loader-2';
|
import { Loader } from "./icons";
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="flex h-full w-full flex-col items-center justify-center p-6">
|
<div class="flex h-full w-full flex-col items-center justify-center p-6">
|
||||||
|
|||||||
@@ -2,10 +2,7 @@
|
|||||||
import { flip } from 'svelte/animate';
|
import { flip } from 'svelte/animate';
|
||||||
import { fly } from 'svelte/transition';
|
import { fly } from 'svelte/transition';
|
||||||
import { notifications } from '$lib/components/toasts/notifications';
|
import { notifications } from '$lib/components/toasts/notifications';
|
||||||
import error from '~icons/tabler/circle-x';
|
import { error, info, success, warning } from './icons';
|
||||||
import success from '~icons/tabler/circle-check';
|
|
||||||
import warning from '~icons/tabler/alert-triangle';
|
|
||||||
import info from '~icons/tabler/info-circle';
|
|
||||||
|
|
||||||
export let theme = {
|
export let theme = {
|
||||||
error: 'alert-error',
|
error: 'alert-error',
|
||||||
|
|||||||
@@ -0,0 +1,98 @@
|
|||||||
|
export { default as Connection } from '~icons/mdi/connection';
|
||||||
|
export { default as Users } from '~icons/mdi/users';
|
||||||
|
export { default as Settings } from '~icons/mdi/settings';
|
||||||
|
export { default as MdiController } from '~icons/mdi/controller';
|
||||||
|
export { default as Devices } from '~icons/mdi/devices';
|
||||||
|
export { default as Camera } from '~icons/mdi/camera-outline';
|
||||||
|
export { default as Rotate3d } from '~icons/mdi/rotate-3d';
|
||||||
|
export { default as MotorOutline } from '~icons/mdi/motor-outline';
|
||||||
|
export { default as Health } from '~icons/mdi/stethoscope';
|
||||||
|
export { default as Folder } from '~icons/mdi/folder-outline';
|
||||||
|
export { default as Update } from '~icons/mdi/reload';
|
||||||
|
export { default as Router } from '~icons/mdi/router';
|
||||||
|
export { default as AP } from '~icons/mdi/access-point';
|
||||||
|
export { default as Remote } from '~icons/mdi/network';
|
||||||
|
export { default as Copyright } from '~icons/mdi/copyright';
|
||||||
|
export { default as NTP } from '~icons/mdi/clock-check';
|
||||||
|
export { default as Metrics } from '~icons/mdi/report-bar';
|
||||||
|
export { default as MdiEyeOutline } from '~icons/mdi/eye-outline';
|
||||||
|
export { default as MdiEyeOffOutline } from '~icons/mdi/eye-off-outline';
|
||||||
|
export { default as Github } from '~icons/mdi/github';
|
||||||
|
export { default as Avatar } from '~icons/mdi/user-circle';
|
||||||
|
export { default as Logout } from '~icons/mdi/logout';
|
||||||
|
export { default as Record } from '~icons/mdi/radio-button-unchecked';
|
||||||
|
export { default as Battery0 } from '~icons/tabler/battery';
|
||||||
|
export { default as Battery25 } from '~icons/tabler/battery-1';
|
||||||
|
export { default as Battery50 } from '~icons/tabler/battery-2';
|
||||||
|
export { default as Battery75 } from '~icons/tabler/battery-3';
|
||||||
|
export { default as Battery100 } from '~icons/tabler/battery-3';
|
||||||
|
export { default as BatteryCharging } from '~icons/tabler/battery-charging-2';
|
||||||
|
export { default as MdiFullscreen } from '~icons/mdi/fullscreen';
|
||||||
|
export { default as MdiFullscreenExit } from '~icons/mdi/fullscreen-exit';
|
||||||
|
export { default as WiFi } from '~icons/tabler/wifi';
|
||||||
|
export { default as WiFi0 } from '~icons/tabler/wifi-0';
|
||||||
|
export { default as WiFi1 } from '~icons/tabler/wifi-1';
|
||||||
|
export { default as WiFi2 } from '~icons/tabler/wifi-2';
|
||||||
|
export { default as WifiOff } from '~icons/tabler/wifi-off';
|
||||||
|
export { default as MdiWeatherSunny } from '~icons/mdi/weather-sunny';
|
||||||
|
export { default as MdiMoonAndStars } from '~icons/mdi/moon-and-stars';
|
||||||
|
export { default as Hamburger } from '~icons/mdi/hamburger-menu';
|
||||||
|
|
||||||
|
export { default as FileIcon } from '~icons/mdi/file';
|
||||||
|
export { default as FolderIcon } from '~icons/mdi/folder-outline';
|
||||||
|
export { default as FolderOpenOutline } from '~icons/mdi/folder-open-outline';
|
||||||
|
|
||||||
|
export { default as Down } from '~icons/tabler/chevron-down';
|
||||||
|
export { default as Cancel } from '~icons/tabler/x';
|
||||||
|
export { default as Check } from '~icons/tabler/check';
|
||||||
|
export { default as Login } from '~icons/tabler/login';
|
||||||
|
export { default as Loader } from '~icons/tabler/loader-2';
|
||||||
|
export { default as error } from '~icons/tabler/circle-x';
|
||||||
|
export { default as success } from '~icons/tabler/circle-check';
|
||||||
|
export { default as warning } from '~icons/tabler/alert-triangle';
|
||||||
|
export { default as info } from '~icons/tabler/info-circle';
|
||||||
|
export { default as Power } from '~icons/tabler/power';
|
||||||
|
|
||||||
|
export { default as MAC } from '~icons/tabler/dna-2';
|
||||||
|
export { default as Home } from '~icons/tabler/home';
|
||||||
|
export { default as SSID } from '~icons/tabler/router';
|
||||||
|
export { default as DNS } from '~icons/tabler/address-book';
|
||||||
|
export { default as Gateway } from '~icons/tabler/torii';
|
||||||
|
export { default as Subnet } from '~icons/tabler/grid-dots';
|
||||||
|
export { default as Channel } from '~icons/tabler/antenna';
|
||||||
|
export { default as Scan } from '~icons/tabler/radar-2';
|
||||||
|
export { default as Add } from '~icons/tabler/circle-plus';
|
||||||
|
export { default as Edit } from '~icons/tabler/pencil';
|
||||||
|
export { default as Delete } from '~icons/tabler/trash';
|
||||||
|
|
||||||
|
export { default as Network } from '~icons/tabler/router';
|
||||||
|
export { default as Reload } from '~icons/tabler/reload';
|
||||||
|
|
||||||
|
export { default as Firmware } from '~icons/tabler/refresh-alert';
|
||||||
|
export { default as CloudDown } from '~icons/tabler/cloud-download';
|
||||||
|
export { default as Server } from '~icons/tabler/server';
|
||||||
|
export { default as Clock } from '~icons/tabler/clock';
|
||||||
|
export { default as UTC } from '~icons/tabler/clock-pin';
|
||||||
|
export { default as Stopwatch } from '~icons/tabler/24-hours';
|
||||||
|
|
||||||
|
export { default as CPU } from '~icons/tabler/cpu';
|
||||||
|
export { default as CPP } from '~icons/tabler/binary';
|
||||||
|
export { default as Sleep } from '~icons/tabler/zzz';
|
||||||
|
export { default as FactoryReset } from '~icons/tabler/refresh-dot';
|
||||||
|
export { default as Speed } from '~icons/tabler/activity';
|
||||||
|
export { default as Flash } from '~icons/tabler/device-sd-card';
|
||||||
|
export { default as Pyramid } from '~icons/tabler/pyramid';
|
||||||
|
export { default as Sketch } from '~icons/tabler/chart-pie';
|
||||||
|
export { default as Heap } from '~icons/tabler/box-model';
|
||||||
|
export { default as Temperature } from '~icons/tabler/temperature';
|
||||||
|
export { default as SDK } from '~icons/tabler/sdk';
|
||||||
|
|
||||||
|
export { default as Prerelease } from '~icons/tabler/test-pipe';
|
||||||
|
export { default as Error } from '~icons/tabler/circle-x';
|
||||||
|
|
||||||
|
export { default as OTA } from '~icons/tabler/file-upload';
|
||||||
|
export { default as Warning } from '~icons/tabler/alert-triangle';
|
||||||
|
|
||||||
|
export { default as AddUser } from '~icons/tabler/user-plus';
|
||||||
|
export { default as Admin } from '~icons/tabler/key';
|
||||||
|
export { default as Save } from '~icons/tabler/device-floppy';
|
||||||
@@ -1,6 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import MdiEyeOutline from '~icons/mdi/eye-outline';
|
import { MdiEyeOffOutline, MdiEyeOutline } from "../icons";
|
||||||
import MdiEyeOffOutline from '~icons/mdi/eye-off-outline';
|
|
||||||
|
|
||||||
export let show = false;
|
export let show = false;
|
||||||
export let value = '';
|
export let value = '';
|
||||||
|
|||||||
@@ -4,9 +4,9 @@
|
|||||||
import { user } from '$lib/stores/user';
|
import { user } from '$lib/stores/user';
|
||||||
import { notifications } from '$lib/components/toasts/notifications';
|
import { notifications } from '$lib/components/toasts/notifications';
|
||||||
import { fade, fly } from 'svelte/transition';
|
import { fade, fly } from 'svelte/transition';
|
||||||
import Login from '~icons/tabler/login';
|
|
||||||
import { api } from '$lib/api';
|
import { api } from '$lib/api';
|
||||||
import type { JWT } from '$lib/types/models';
|
import type { JWT } from '$lib/types/models';
|
||||||
|
import { Login } from './icons';
|
||||||
|
|
||||||
type SignInData = {
|
type SignInData = {
|
||||||
password: string;
|
password: string;
|
||||||
@@ -21,21 +21,21 @@
|
|||||||
let token = { access_token: '' };
|
let token = { access_token: '' };
|
||||||
|
|
||||||
async function signInUser(data: SignInData) {
|
async function signInUser(data: SignInData) {
|
||||||
const result = await api.post<JWT>('/api/signIn', data)
|
const result = await api.post<JWT>('/api/signIn', data);
|
||||||
if (result.isErr()){
|
if (result.isErr()) {
|
||||||
username = '';
|
username = '';
|
||||||
password = '';
|
password = '';
|
||||||
notifications.error('Wrong Username or Password!', 5000);
|
notifications.error('Wrong Username or Password!', 5000);
|
||||||
loginFailed = true;
|
loginFailed = true;
|
||||||
setTimeout(() => {
|
setTimeout(() => {
|
||||||
loginFailed = false;
|
loginFailed = false;
|
||||||
}, 1500);
|
}, 1500);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
token = result.inner;
|
token = result.inner;
|
||||||
user.init(token.access_token);
|
user.init(token.access_token);
|
||||||
username = $user.username;
|
username = $user.username;
|
||||||
notifications.success('User ' + username + ' signed in', 5000);
|
notifications.success('User ' + username + ' signed in', 5000);
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -69,10 +69,10 @@
|
|||||||
<div class="card-actions mt-4 justify-end">
|
<div class="card-actions mt-4 justify-end">
|
||||||
<button
|
<button
|
||||||
class="btn btn-primary inline-flex items-center"
|
class="btn btn-primary inline-flex items-center"
|
||||||
on:click={() => {
|
on:click={() => signInUser({ username, password })}
|
||||||
signInUser({ username, password });
|
|
||||||
}}><Login class="mr-2 h-5 w-5" /><span>Login</span></button
|
|
||||||
>
|
>
|
||||||
|
<Login class="mr-2 h-5 w-5" /><span>Login</span>
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import MdiGithub from '~icons/mdi/github';
|
import { Github } from "../icons";
|
||||||
|
|
||||||
export let github;
|
export let github;
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{#if github.active}
|
{#if github.active}
|
||||||
<a href={github.href} class="btn btn-ghost" target="_blank" rel="noopener noreferrer"
|
<a href={github.href} class="btn btn-ghost" target="_blank" rel="noopener noreferrer">
|
||||||
><MdiGithub class="h-5 w-5" />
|
<Github class="h-5 w-5" />
|
||||||
</a>
|
</a>
|
||||||
{/if}
|
{/if}
|
||||||
|
|||||||
@@ -1,23 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import MdiConnection from '~icons/mdi/connection';
|
import { page } from '$app/stores';
|
||||||
import Users from '~icons/mdi/users';
|
|
||||||
import Settings from '~icons/mdi/settings';
|
|
||||||
import MdiController from '~icons/mdi/controller';
|
|
||||||
import Devices from '~icons/mdi/devices';
|
|
||||||
import Camera from '~icons/mdi/camera-outline';
|
|
||||||
import Rotate3d from '~icons/mdi/rotate-3d';
|
|
||||||
import MotorOutline from '~icons/mdi/motor-outline';
|
|
||||||
import Health from '~icons/mdi/stethoscope';
|
|
||||||
import Folder from '~icons/mdi/folder-outline';
|
|
||||||
import Update from '~icons/mdi/reload';
|
|
||||||
import WiFi from '~icons/mdi/wifi';
|
|
||||||
import Router from '~icons/mdi/router';
|
|
||||||
import AP from '~icons/mdi/access-point';
|
|
||||||
import Remote from '~icons/mdi/network';
|
|
||||||
import Copyright from '~icons/mdi/copyright';
|
|
||||||
import NTP from '~icons/mdi/clock-check';
|
|
||||||
import Metrics from '~icons/mdi/report-bar';
|
|
||||||
import { page } from '$app/stores';
|
|
||||||
import { user } from '$lib/stores/user';
|
import { user } from '$lib/stores/user';
|
||||||
import { createEventDispatcher } from 'svelte';
|
import { createEventDispatcher } from 'svelte';
|
||||||
import { useFeatureFlags } from '$lib/stores/featureFlags';
|
import { useFeatureFlags } from '$lib/stores/featureFlags';
|
||||||
@@ -25,6 +7,26 @@
|
|||||||
import GithubButton from '../menu/GithubButton.svelte';
|
import GithubButton from '../menu/GithubButton.svelte';
|
||||||
import LogoButton from '../menu/LogoButton.svelte';
|
import LogoButton from '../menu/LogoButton.svelte';
|
||||||
import MenuList from '../menu/MenuList.svelte';
|
import MenuList from '../menu/MenuList.svelte';
|
||||||
|
import {
|
||||||
|
Connection,
|
||||||
|
Users,
|
||||||
|
Settings,
|
||||||
|
MdiController,
|
||||||
|
Devices,
|
||||||
|
Camera,
|
||||||
|
Rotate3d,
|
||||||
|
MotorOutline,
|
||||||
|
Health,
|
||||||
|
Folder,
|
||||||
|
Update,
|
||||||
|
WiFi,
|
||||||
|
Router,
|
||||||
|
AP,
|
||||||
|
Remote,
|
||||||
|
Copyright,
|
||||||
|
NTP,
|
||||||
|
Metrics
|
||||||
|
} from '$lib/components/icons';
|
||||||
|
|
||||||
const features = useFeatureFlags();
|
const features = useFeatureFlags();
|
||||||
|
|
||||||
@@ -57,7 +59,7 @@
|
|||||||
submenu: [
|
submenu: [
|
||||||
{
|
{
|
||||||
title: 'I2C',
|
title: 'I2C',
|
||||||
icon: MdiConnection,
|
icon: Connection,
|
||||||
href: '/peripherals/i2c',
|
href: '/peripherals/i2c',
|
||||||
feature: true
|
feature: true
|
||||||
},
|
},
|
||||||
@@ -169,15 +171,15 @@
|
|||||||
|
|
||||||
$: setActiveMenuItem($page.data.title);
|
$: setActiveMenuItem($page.data.title);
|
||||||
|
|
||||||
const updateMenu = (event:any) => {
|
const updateMenu = (event: any) => {
|
||||||
setActiveMenuItem(event.details)
|
setActiveMenuItem(event.details);
|
||||||
}
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="bg-base-200 text-base-content flex h-full w-80 flex-col p-4">
|
<div class="bg-base-200 text-base-content flex h-full w-80 flex-col p-4">
|
||||||
<LogoButton {appName} />
|
<LogoButton {appName} />
|
||||||
|
|
||||||
<MenuList {menuItems} on:select{updateMenu} class="flex-grow flex-nowrap overflow-y-auto"/>
|
<MenuList {menuItems} on:select{updateMenu} class="flex-grow flex-nowrap overflow-y-auto" />
|
||||||
|
|
||||||
<UserButton />
|
<UserButton />
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Avatar from '~icons/mdi/user-circle';
|
|
||||||
import Logout from '~icons/mdi/logout';
|
|
||||||
import { user } from '$lib/stores';
|
import { user } from '$lib/stores';
|
||||||
import { useFeatureFlags } from "$lib/stores";
|
import { useFeatureFlags } from "$lib/stores";
|
||||||
|
import { Avatar, Logout } from '../icons';
|
||||||
|
|
||||||
const features = useFeatureFlags();
|
const features = useFeatureFlags();
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
@@ -1,12 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { useFeatureFlags } from '$lib/stores';
|
import { useFeatureFlags } from '$lib/stores';
|
||||||
import type { Battery } from '$lib/types/models';
|
import type { Battery } from '$lib/types/models';
|
||||||
import Battery0 from '~icons/tabler/battery';
|
import { BatteryCharging, Battery100, Battery75, Battery50, Battery25, Battery0 } from '../icons';
|
||||||
import Battery25 from '~icons/tabler/battery-1';
|
|
||||||
import Battery50 from '~icons/tabler/battery-2';
|
|
||||||
import Battery75 from '~icons/tabler/battery-3';
|
|
||||||
import Battery100 from '~icons/tabler/battery-4';
|
|
||||||
import BatteryCharging from '~icons/tabler/battery-charging-2';
|
|
||||||
|
|
||||||
const features = useFeatureFlags();
|
const features = useFeatureFlags();
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { isFullscreen, toggleFullscreen } from '$lib/stores';
|
import { isFullscreen, toggleFullscreen } from '$lib/stores';
|
||||||
import MdiFullscreen from '~icons/mdi/fullscreen';
|
import { MdiFullscreenExit, MdiFullscreen } from '../icons';
|
||||||
import MdiFullscreenExit from '~icons/mdi/fullscreen-exit';
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<button on:click={toggleFullscreen}>
|
<button on:click={toggleFullscreen}>
|
||||||
|
|||||||
@@ -1,9 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import WiFi from '~icons/tabler/wifi';
|
import { WiFi, WiFi0, WiFi1, WiFi2, WifiOff } from "../icons";
|
||||||
import WiFi0 from '~icons/tabler/wifi-0';
|
|
||||||
import WiFi1 from '~icons/tabler/wifi-1';
|
|
||||||
import WiFi2 from '~icons/tabler/wifi-2';
|
|
||||||
import WifiOff from '~icons/tabler/wifi-off';
|
|
||||||
|
|
||||||
export let showDBm = false;
|
export let showDBm = false;
|
||||||
export let rssi = 0;
|
export let rssi = 0;
|
||||||
@@ -25,9 +21,6 @@
|
|||||||
</span>
|
</span>
|
||||||
{/if}
|
{/if}
|
||||||
<div class="h-7 w-7">
|
<div class="h-7 w-7">
|
||||||
{#if rssi !== 0 && rssi < -55}
|
|
||||||
<WiFi class="absolute inset-0 h-full w-full opacity-30" />
|
|
||||||
{/if}
|
|
||||||
<svelte:component this={getWiFiIcon()} class="absolute inset-0 h-full w-full" />
|
<svelte:component this={getWiFiIcon()} class="absolute inset-0 h-full w-full" />
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -2,9 +2,8 @@
|
|||||||
import { useFeatureFlags } from '$lib/stores';
|
import { useFeatureFlags } from '$lib/stores';
|
||||||
import { closeModal, openModal } from 'svelte-modals';
|
import { closeModal, openModal } from 'svelte-modals';
|
||||||
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
|
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
|
||||||
import Power from '~icons/tabler/power';
|
|
||||||
import Cancel from '~icons/tabler/x';
|
|
||||||
import { api } from '$lib/api';
|
import { api } from '$lib/api';
|
||||||
|
import { Cancel, Power } from '../icons';
|
||||||
|
|
||||||
const features = useFeatureFlags();
|
const features = useFeatureFlags();
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import MdiWeatherSunny from '~icons/mdi/weather-sunny';
|
import { MdiWeatherSunny, MdiMoonAndStars } from "../icons";
|
||||||
import MdiMoonAndStars from '~icons/mdi/moon-and-stars';
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<label class="swap swap-rotate">
|
<label class="swap swap-rotate">
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import MdiHamburgerMenu from '~icons/mdi/hamburger-menu';
|
import {Hamburger} from '../icons'
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="topbar absolute left-0 top-0 w-full z-20 flex justify-between bg-zinc-800">
|
<div class="topbar absolute left-0 top-0 w-full z-20 flex justify-between bg-zinc-800">
|
||||||
<div class="flex gap-2 p-2">
|
<div class="flex gap-2 p-2">
|
||||||
<a href="/">
|
<a href="/">
|
||||||
<svelte:component this={MdiHamburgerMenu} class="h-8 w-8"/>
|
<svelte:component this={Hamburger} class="h-8 w-8"/>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -4,15 +4,14 @@
|
|||||||
import { user } from '$lib/stores/user';
|
import { user } from '$lib/stores/user';
|
||||||
import { notifications } from '$lib/components/toasts/notifications';
|
import { notifications } from '$lib/components/toasts/notifications';
|
||||||
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
|
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
|
||||||
import Firmware from '~icons/tabler/refresh-alert';
|
|
||||||
import Cancel from '~icons/tabler/x';
|
|
||||||
import CloudDown from '~icons/tabler/cloud-download';
|
|
||||||
import GithubUpdateDialog from '$lib/components/GithubUpdateDialog.svelte';
|
import GithubUpdateDialog from '$lib/components/GithubUpdateDialog.svelte';
|
||||||
import { compareVersions } from 'compare-versions';
|
import { compareVersions } from 'compare-versions';
|
||||||
import { onMount } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { api } from '$lib/api';
|
import { api } from '$lib/api';
|
||||||
import type { GithubRelease } from '$lib/types/models';
|
import type { GithubRelease } from '$lib/types/models';
|
||||||
import { useFeatureFlags } from '$lib/stores/featureFlags';
|
import { useFeatureFlags } from '$lib/stores/featureFlags';
|
||||||
|
import { Cancel, CloudDown, Firmware } from '../icons';
|
||||||
|
|
||||||
const features = useFeatureFlags();
|
const features = useFeatureFlags();
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { page } from '$app/stores';
|
import { page } from '$app/stores';
|
||||||
import { telemetry } from '$lib/stores/telemetry';
|
import { telemetry } from '$lib/stores/telemetry';
|
||||||
import Hamburger from '~icons/tabler/menu-2';
|
|
||||||
|
|
||||||
import RssiIndicator from '$lib/components/statusbar/RSSIIndicator.svelte';
|
import RssiIndicator from '$lib/components/statusbar/RSSIIndicator.svelte';
|
||||||
import BatteryIndicator from '$lib/components/statusbar/BatteryIndicator.svelte';
|
import BatteryIndicator from '$lib/components/statusbar/BatteryIndicator.svelte';
|
||||||
@@ -11,6 +10,7 @@
|
|||||||
import FullscreenButton from './FullscreenButton.svelte';
|
import FullscreenButton from './FullscreenButton.svelte';
|
||||||
import StopButton from './StopButton.svelte';
|
import StopButton from './StopButton.svelte';
|
||||||
import ViewSelector from './ViewSelector.svelte';
|
import ViewSelector from './ViewSelector.svelte';
|
||||||
|
import { Hamburger } from '../icons';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class="navbar bg-base-300 sticky top-0 z-10 h-12 min-h-fit drop-shadow-lg lg:h-16 gap-2 pr-0">
|
<div class="navbar bg-base-300 sticky top-0 z-10 h-12 min-h-fit drop-shadow-lg lg:h-16 gap-2 pr-0">
|
||||||
|
|||||||
@@ -2,10 +2,7 @@
|
|||||||
import { flip } from 'svelte/animate';
|
import { flip } from 'svelte/animate';
|
||||||
import { fly } from 'svelte/transition';
|
import { fly } from 'svelte/transition';
|
||||||
import { notifications } from '$lib/components/toasts/notifications';
|
import { notifications } from '$lib/components/toasts/notifications';
|
||||||
import error from '~icons/tabler/circle-x';
|
import { error, info, success, warning } from '../icons';
|
||||||
import success from '~icons/tabler/circle-check';
|
|
||||||
import warning from '~icons/tabler/alert-triangle';
|
|
||||||
import info from '~icons/tabler/info-circle';
|
|
||||||
|
|
||||||
export let theme = {
|
export let theme = {
|
||||||
error: 'alert-error',
|
error: 'alert-error',
|
||||||
|
|||||||
@@ -9,14 +9,10 @@
|
|||||||
import { page } from '$app/stores';
|
import { page } from '$app/stores';
|
||||||
import { notifications } from '$lib/components/toasts/notifications';
|
import { notifications } from '$lib/components/toasts/notifications';
|
||||||
import { TIME_ZONES } from './timezones';
|
import { TIME_ZONES } from './timezones';
|
||||||
import NTP from '~icons/tabler/clock-check';
|
|
||||||
import Server from '~icons/tabler/server';
|
|
||||||
import Clock from '~icons/tabler/clock';
|
|
||||||
import UTC from '~icons/tabler/clock-pin';
|
|
||||||
import Stopwatch from '~icons/tabler/24-hours';
|
|
||||||
import type { NTPSettings, NTPStatus } from '$lib/types/models';
|
import type { NTPSettings, NTPStatus } from '$lib/types/models';
|
||||||
import { api } from '$lib/api';
|
import { api } from '$lib/api';
|
||||||
import { useFeatureFlags } from '$lib/stores/featureFlags';
|
import { useFeatureFlags } from '$lib/stores/featureFlags';
|
||||||
|
import { NTP, UTC, Stopwatch, Clock, Server } from '$lib/components/icons';
|
||||||
|
|
||||||
const features = useFeatureFlags();
|
const features = useFeatureFlags();
|
||||||
|
|
||||||
|
|||||||
@@ -1,9 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import SettingsCard from "$lib/components/SettingsCard.svelte";
|
import SettingsCard from "$lib/components/SettingsCard.svelte";
|
||||||
import Camera from '~icons/mdi/camera-outline'
|
|
||||||
import Record from '~icons/mdi/radio-button-unchecked'
|
|
||||||
import CameraSetting from './CameraSetting.svelte';
|
import CameraSetting from './CameraSetting.svelte';
|
||||||
import Stream from '$lib/components/Stream.svelte';
|
import Stream from '$lib/components/Stream.svelte';
|
||||||
|
import { Camera } from "$lib/components/icons";
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<SettingsCard collapsible={false}>
|
<SettingsCard collapsible={false}>
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import SettingsCard from "$lib/components/SettingsCard.svelte";
|
import SettingsCard from "$lib/components/SettingsCard.svelte";
|
||||||
import MdiConnection from '~icons/mdi/connection';
|
|
||||||
import { onMount } from "svelte";
|
import { onMount } from "svelte";
|
||||||
import { socket } from "$lib/stores";
|
import { socket } from "$lib/stores";
|
||||||
import type { I2CDevice } from "$lib/types/models";
|
import type { I2CDevice } from "$lib/types/models";
|
||||||
|
import { Connection } from "$lib/components/icons";
|
||||||
|
|
||||||
const i2cDevices = [
|
const i2cDevices = [
|
||||||
{address:30, part_number: "HMC5883", name: "3-Axis Digital Compass/Magnetometer IC"},
|
{address:30, part_number: "HMC5883", name: "3-Axis Digital Compass/Magnetometer IC"},
|
||||||
@@ -27,7 +27,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<SettingsCard collapsible={false}>
|
<SettingsCard collapsible={false}>
|
||||||
<MdiConnection slot="icon" class="lex-shrink-0 mr-2 h-6 w-6 self-end" />
|
<Connection slot="icon" class="lex-shrink-0 mr-2 h-6 w-6 self-end" />
|
||||||
<span slot="title">I<sup>2</sup>C</span>
|
<span slot="title">I<sup>2</sup>C</span>
|
||||||
|
|
||||||
<div class="grid">
|
<div class="grid">
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import SettingsCard from "$lib/components/SettingsCard.svelte";
|
import SettingsCard from "$lib/components/SettingsCard.svelte";
|
||||||
import Rotate3d from '~icons/mdi/rotate-3d';
|
|
||||||
import { imu } from '$lib/stores/imu';
|
import { imu } from '$lib/stores/imu';
|
||||||
import { Chart, registerables } from 'chart.js';
|
import { Chart, registerables } from 'chart.js';
|
||||||
import { cubicOut } from "svelte/easing";
|
import { cubicOut } from "svelte/easing";
|
||||||
@@ -10,6 +9,7 @@
|
|||||||
import { socket } from "$lib/stores";
|
import { socket } from "$lib/stores";
|
||||||
import type { IMU } from "$lib/types/models";
|
import type { IMU } from "$lib/types/models";
|
||||||
import { useFeatureFlags } from "$lib/stores/featureFlags";
|
import { useFeatureFlags } from "$lib/stores/featureFlags";
|
||||||
|
import { Rotate3d } from "$lib/components/icons";
|
||||||
|
|
||||||
const features = useFeatureFlags();
|
const features = useFeatureFlags();
|
||||||
|
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import SettingsCard from '$lib/components/SettingsCard.svelte';
|
import SettingsCard from '$lib/components/SettingsCard.svelte';
|
||||||
import type { ServoConfiguration, Servo } from '$lib/types/models';
|
import type { ServoConfiguration, Servo } from '$lib/types/models';
|
||||||
import MotorOutline from '~icons/mdi/motor-outline';
|
|
||||||
import ServoController from './servo.svelte';
|
import ServoController from './servo.svelte';
|
||||||
import Spinner from '$lib/components/Spinner.svelte';
|
import Spinner from '$lib/components/Spinner.svelte';
|
||||||
|
|
||||||
import { socket } from '$lib/stores';
|
import { socket } from '$lib/stores';
|
||||||
import { onDestroy, onMount } from 'svelte';
|
import { onDestroy, onMount } from 'svelte';
|
||||||
import { throttler as Throttler } from '$lib/utilities';
|
import { throttler as Throttler } from '$lib/utilities';
|
||||||
|
import { MotorOutline } from '$lib/components/icons';
|
||||||
|
|
||||||
let isLoading = false;
|
let isLoading = false;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
<script>
|
<script>
|
||||||
import FileIcon from '~icons/mdi/file';
|
import { FileIcon } from '$lib/components/icons';
|
||||||
import { createEventDispatcher } from 'svelte';
|
import { createEventDispatcher } from 'svelte';
|
||||||
|
|
||||||
export let name;
|
export let name;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import SettingsCard from "$lib/components/SettingsCard.svelte";
|
import SettingsCard from "$lib/components/SettingsCard.svelte";
|
||||||
import Spinner from "$lib/components/Spinner.svelte";
|
import Spinner from "$lib/components/Spinner.svelte";
|
||||||
import FolderIcon from '~icons/mdi/folder-outline';
|
|
||||||
import Folder from "./Folder.svelte";
|
import Folder from "./Folder.svelte";
|
||||||
import { api } from "$lib/api";
|
import { api } from "$lib/api";
|
||||||
import type { Directory } from "$lib/types/models";
|
import type { Directory } from "$lib/types/models";
|
||||||
|
import { FolderIcon } from "$lib/components/icons";
|
||||||
|
|
||||||
let filename = '';
|
let filename = '';
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import File from './File.svelte';
|
import File from './File.svelte';
|
||||||
import FolderIcon from '~icons/mdi/folder-outline';
|
|
||||||
import FolderOpenOutline from '~icons/mdi/folder-open-outline';
|
|
||||||
import { createEventDispatcher } from 'svelte';
|
import { createEventDispatcher } from 'svelte';
|
||||||
|
import { FolderIcon, FolderOpenOutline } from '$lib/components/icons';
|
||||||
|
|
||||||
export let expanded = false;
|
export let expanded = false;
|
||||||
export let name;
|
export let name;
|
||||||
|
|||||||
@@ -5,9 +5,10 @@
|
|||||||
import { slide } from 'svelte/transition';
|
import { slide } from 'svelte/transition';
|
||||||
import { cubicOut } from 'svelte/easing';
|
import { cubicOut } from 'svelte/easing';
|
||||||
import { Chart, registerables } from 'chart.js';
|
import { Chart, registerables } from 'chart.js';
|
||||||
import Metrics from '~icons/tabler/report-analytics';
|
|
||||||
import { daisyColor } from '$lib/utilities';
|
import { daisyColor } from '$lib/utilities';
|
||||||
import { analytics } from '$lib/stores/analytics';
|
import { analytics } from '$lib/stores/analytics';
|
||||||
|
import { Metrics } from '$lib/components/icons';
|
||||||
|
|
||||||
Chart.register(...registerables);
|
Chart.register(...registerables);
|
||||||
|
|
||||||
|
|||||||
@@ -8,46 +8,49 @@
|
|||||||
import Spinner from '$lib/components/Spinner.svelte';
|
import Spinner from '$lib/components/Spinner.svelte';
|
||||||
import { slide } from 'svelte/transition';
|
import { slide } from 'svelte/transition';
|
||||||
import { cubicOut } from 'svelte/easing';
|
import { cubicOut } from 'svelte/easing';
|
||||||
import CPU from '~icons/tabler/cpu';
|
|
||||||
import CPP from '~icons/tabler/binary';
|
|
||||||
import Power from '~icons/tabler/reload';
|
|
||||||
import Sleep from '~icons/tabler/zzz';
|
|
||||||
import FactoryReset from '~icons/tabler/refresh-dot';
|
|
||||||
import Speed from '~icons/tabler/activity';
|
|
||||||
import Flash from '~icons/tabler/device-sd-card';
|
|
||||||
import Pyramid from '~icons/tabler/pyramid';
|
|
||||||
import Sketch from '~icons/tabler/chart-pie';
|
|
||||||
import Folder from '~icons/tabler/folder';
|
|
||||||
import Heap from '~icons/tabler/box-model';
|
|
||||||
import Cancel from '~icons/tabler/x';
|
|
||||||
import Temperature from '~icons/tabler/temperature';
|
|
||||||
import Health from '~icons/tabler/stethoscope';
|
|
||||||
import Stopwatch from '~icons/tabler/24-hours';
|
|
||||||
import SDK from '~icons/tabler/sdk';
|
|
||||||
import type { SystemInformation, Analytics } from '$lib/types/models';
|
import type { SystemInformation, Analytics } from '$lib/types/models';
|
||||||
import { socket } from '$lib/stores/socket';
|
import { socket } from '$lib/stores/socket';
|
||||||
import { api } from '$lib/api';
|
import { api } from '$lib/api';
|
||||||
import { convertSeconds } from '$lib/utilities';
|
import { convertSeconds } from '$lib/utilities';
|
||||||
|
|
||||||
import { useFeatureFlags } from '$lib/stores/featureFlags';
|
import { useFeatureFlags } from '$lib/stores/featureFlags';
|
||||||
|
import {
|
||||||
const features = useFeatureFlags()
|
Cancel,
|
||||||
|
Power,
|
||||||
|
FactoryReset,
|
||||||
|
Sleep,
|
||||||
|
Health,
|
||||||
|
CPU,
|
||||||
|
SDK,
|
||||||
|
CPP,
|
||||||
|
Speed,
|
||||||
|
Heap,
|
||||||
|
Pyramid,
|
||||||
|
Sketch,
|
||||||
|
Flash,
|
||||||
|
Folder,
|
||||||
|
Temperature,
|
||||||
|
Stopwatch
|
||||||
|
} from '$lib/components/icons';
|
||||||
|
|
||||||
|
const features = useFeatureFlags();
|
||||||
|
|
||||||
let systemInformation: SystemInformation;
|
let systemInformation: SystemInformation;
|
||||||
|
|
||||||
async function getSystemStatus() {
|
async function getSystemStatus() {
|
||||||
const result = await api.get<SystemInformation>('/api/systemStatus');
|
const result = await api.get<SystemInformation>('/api/systemStatus');
|
||||||
if (result.isErr()){
|
if (result.isErr()) {
|
||||||
console.error('Error:', result.inner);
|
console.error('Error:', result.inner);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
systemInformation = result.inner
|
systemInformation = result.inner;
|
||||||
return systemInformation;
|
return systemInformation;
|
||||||
}
|
}
|
||||||
|
|
||||||
const postFactoryReset = async () => await api.post('/api/factoryReset')
|
const postFactoryReset = async () => await api.post('/api/factoryReset');
|
||||||
|
|
||||||
const postSleep = async () => await api.post('api/sleep')
|
const postSleep = async () => await api.post('api/sleep');
|
||||||
|
|
||||||
onMount(() => socket.on('analytics', handleSystemData));
|
onMount(() => socket.on('analytics', handleSystemData));
|
||||||
|
|
||||||
|
|||||||
@@ -6,17 +6,13 @@
|
|||||||
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
|
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
|
||||||
import Spinner from '$lib/components/Spinner.svelte';
|
import Spinner from '$lib/components/Spinner.svelte';
|
||||||
import SettingsCard from '$lib/components/SettingsCard.svelte';
|
import SettingsCard from '$lib/components/SettingsCard.svelte';
|
||||||
import Github from '~icons/tabler/brand-github';
|
|
||||||
import CloudDown from '~icons/tabler/cloud-download';
|
|
||||||
import Cancel from '~icons/tabler/x';
|
|
||||||
import Prerelease from '~icons/tabler/test-pipe';
|
|
||||||
import Error from '~icons/tabler/circle-x';
|
|
||||||
import { compareVersions } from 'compare-versions';
|
import { compareVersions } from 'compare-versions';
|
||||||
import GithubUpdateDialog from '$lib/components/GithubUpdateDialog.svelte';
|
import GithubUpdateDialog from '$lib/components/GithubUpdateDialog.svelte';
|
||||||
import InfoDialog from '$lib/components/InfoDialog.svelte';
|
import InfoDialog from '$lib/components/InfoDialog.svelte';
|
||||||
import Check from '~icons/tabler/check';
|
|
||||||
import { api } from '$lib/api';
|
import { api } from '$lib/api';
|
||||||
import { useFeatureFlags } from '$lib/stores';
|
import { useFeatureFlags } from '$lib/stores';
|
||||||
|
import { Cancel, Check, CloudDown, Github, Prerelease } from '$lib/components/icons';
|
||||||
|
|
||||||
const features = useFeatureFlags();
|
const features = useFeatureFlags();
|
||||||
|
|
||||||
|
|||||||
@@ -2,10 +2,9 @@
|
|||||||
import { openModal, closeModal } from 'svelte-modals';
|
import { openModal, closeModal } from 'svelte-modals';
|
||||||
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
|
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
|
||||||
import SettingsCard from '$lib/components/SettingsCard.svelte';
|
import SettingsCard from '$lib/components/SettingsCard.svelte';
|
||||||
import OTA from '~icons/tabler/file-upload';
|
|
||||||
import Warning from '~icons/tabler/alert-triangle';
|
|
||||||
import Cancel from '~icons/tabler/x';
|
|
||||||
import { api } from '$lib/api';
|
import { api } from '$lib/api';
|
||||||
|
import { Cancel, OTA, Warning } from '$lib/components/icons';
|
||||||
|
|
||||||
let files: FileList;
|
let files: FileList;
|
||||||
|
|
||||||
|
|||||||
@@ -4,23 +4,24 @@
|
|||||||
import { slide } from 'svelte/transition';
|
import { slide } from 'svelte/transition';
|
||||||
import { cubicOut } from 'svelte/easing';
|
import { cubicOut } from 'svelte/easing';
|
||||||
import { user } from '$lib/stores/user';
|
import { user } from '$lib/stores/user';
|
||||||
import type { userProfile } from '$lib/stores/user';
|
|
||||||
import { page } from '$app/stores';
|
|
||||||
import { notifications } from '$lib/components/toasts/notifications';
|
import { notifications } from '$lib/components/toasts/notifications';
|
||||||
import InputPassword from '$lib/components/input/InputPassword.svelte';
|
import InputPassword from '$lib/components/input/InputPassword.svelte';
|
||||||
import SettingsCard from '$lib/components/SettingsCard.svelte';
|
import SettingsCard from '$lib/components/SettingsCard.svelte';
|
||||||
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
|
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
|
||||||
import EditUser from './EditUser.svelte';
|
import EditUser from './EditUser.svelte';
|
||||||
import Spinner from '$lib/components/Spinner.svelte';
|
import Spinner from '$lib/components/Spinner.svelte';
|
||||||
import Delete from '~icons/tabler/trash';
|
|
||||||
import AddUser from '~icons/tabler/user-plus';
|
|
||||||
import Edit from '~icons/tabler/pencil';
|
|
||||||
import Admin from '~icons/tabler/key';
|
|
||||||
import Users from '~icons/tabler/users';
|
|
||||||
import Warning from '~icons/tabler/alert-triangle';
|
|
||||||
import Cancel from '~icons/tabler/x';
|
|
||||||
import Check from '~icons/tabler/check';
|
|
||||||
import { api } from '$lib/api';
|
import { api } from '$lib/api';
|
||||||
|
import {
|
||||||
|
Cancel,
|
||||||
|
Check,
|
||||||
|
Users,
|
||||||
|
AddUser,
|
||||||
|
Admin,
|
||||||
|
Edit,
|
||||||
|
Delete,
|
||||||
|
Warning
|
||||||
|
} from '$lib/components/icons';
|
||||||
|
|
||||||
type userSetting = {
|
type userSetting = {
|
||||||
username: string;
|
username: string;
|
||||||
@@ -36,30 +37,30 @@
|
|||||||
let securitySettings: SecuritySettings;
|
let securitySettings: SecuritySettings;
|
||||||
|
|
||||||
async function getSecuritySettings() {
|
async function getSecuritySettings() {
|
||||||
const result = await api.get<SecuritySettings>('/api/securitySettings')
|
const result = await api.get<SecuritySettings>('/api/securitySettings');
|
||||||
if (result.isErr()){
|
if (result.isErr()) {
|
||||||
console.error('Error:', result.inner);
|
console.error('Error:', result.inner);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
securitySettings = result.inner
|
securitySettings = result.inner;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function postSecuritySettings(data: SecuritySettings) {
|
async function postSecuritySettings(data: SecuritySettings) {
|
||||||
const result = await api.post<SecuritySettings>('/api/securitySettings', data)
|
const result = await api.post<SecuritySettings>('/api/securitySettings', data);
|
||||||
if (result.isErr()){
|
if (result.isErr()) {
|
||||||
console.error('Error:', result.inner);
|
console.error('Error:', result.inner);
|
||||||
notifications.error('User not authorized.', 3000);
|
notifications.error('User not authorized.', 3000);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
securitySettings = result.inner
|
securitySettings = result.inner;
|
||||||
if (await validateUser()) {
|
if (await validateUser()) {
|
||||||
notifications.success('Security settings updated.', 3000);
|
notifications.success('Security settings updated.', 3000);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function validateUser() {
|
async function validateUser() {
|
||||||
const result = await api.get('/api/verifyAuthorization')
|
const result = await api.get('/api/verifyAuthorization');
|
||||||
if (result.isErr()) user.invalidate();
|
if (result.isErr()) user.invalidate();
|
||||||
return result.isOk();
|
return result.isOk();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { onMount, onDestroy } from 'svelte';
|
import { onMount } from 'svelte';
|
||||||
import { closeModal } from 'svelte-modals';
|
import { closeModal } from 'svelte-modals';
|
||||||
import { fly } from 'svelte/transition';
|
import { fly } from 'svelte/transition';
|
||||||
import InputPassword from '$lib/components/input/InputPassword.svelte';
|
import InputPassword from '$lib/components/input/InputPassword.svelte';
|
||||||
import Cancel from '~icons/tabler/x';
|
import { Cancel, Save } from '$lib/components/icons';
|
||||||
import Save from '~icons/tabler/device-floppy';
|
|
||||||
|
|
||||||
// provided by <Modals />
|
// provided by <Modals />
|
||||||
export let isOpen: boolean;
|
export let isOpen: boolean;
|
||||||
@@ -93,8 +92,10 @@
|
|||||||
>
|
>
|
||||||
<button
|
<button
|
||||||
class="btn btn-primary text-primary-content inline-flex items-center"
|
class="btn btn-primary text-primary-content inline-flex items-center"
|
||||||
type="submit"><Save class="mr-2 h-5 w-5" /><span>Save</span></button
|
type="submit"
|
||||||
>
|
><Save class="mr-2 h-5 w-5" />
|
||||||
|
Save
|
||||||
|
</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -8,13 +8,10 @@
|
|||||||
import { page } from '$app/stores';
|
import { page } from '$app/stores';
|
||||||
import { notifications } from '$lib/components/toasts/notifications';
|
import { notifications } from '$lib/components/toasts/notifications';
|
||||||
import Spinner from '$lib/components/Spinner.svelte';
|
import Spinner from '$lib/components/Spinner.svelte';
|
||||||
import AP from '~icons/tabler/access-point';
|
|
||||||
import MAC from '~icons/tabler/dna-2';
|
|
||||||
import Home from '~icons/tabler/home';
|
|
||||||
import Devices from '~icons/tabler/devices';
|
|
||||||
import type { ApSettings, ApStatus } from '$lib/types/models';
|
import type { ApSettings, ApStatus } from '$lib/types/models';
|
||||||
import { api } from '$lib/api';
|
import { api } from '$lib/api';
|
||||||
import { useFeatureFlags } from '$lib/stores';
|
import { useFeatureFlags } from '$lib/stores';
|
||||||
|
import { AP, Devices, Home, MAC } from '$lib/components/icons';
|
||||||
|
|
||||||
const features = useFeatureFlags();
|
const features = useFeatureFlags();
|
||||||
|
|
||||||
|
|||||||
@@ -2,15 +2,12 @@
|
|||||||
import { closeModal } from 'svelte-modals';
|
import { closeModal } from 'svelte-modals';
|
||||||
import { focusTrap } from 'svelte-focus-trap';
|
import { focusTrap } from 'svelte-focus-trap';
|
||||||
import { fly } from 'svelte/transition';
|
import { fly } from 'svelte/transition';
|
||||||
import Network from '~icons/tabler/router';
|
|
||||||
import AP from '~icons/tabler/access-point';
|
|
||||||
import Cancel from '~icons/tabler/x';
|
|
||||||
import Reload from '~icons/tabler/reload';
|
|
||||||
import { onMount, onDestroy } from 'svelte';
|
import { onMount, onDestroy } from 'svelte';
|
||||||
import RssiIndicator from '$lib/components/statusbar/RSSIIndicator.svelte';
|
import RssiIndicator from '$lib/components/statusbar/RSSIIndicator.svelte';
|
||||||
import type { NetworkItem } from '$lib/types/models';
|
import type { NetworkItem, NetworkList } from '$lib/types/models';
|
||||||
import { api } from '$lib/api';
|
import { api } from '$lib/api';
|
||||||
import type { NetworkList } from '$lib/types/models';
|
import { AP, Network, Reload, Cancel } from '$lib/components/icons';
|
||||||
|
|
||||||
// provided by <Modals />
|
// provided by <Modals />
|
||||||
export let isOpen: boolean;
|
export let isOpen: boolean;
|
||||||
@@ -115,8 +112,7 @@
|
|||||||
<div class="flex-grow" />
|
<div class="flex-grow" />
|
||||||
<RssiIndicator
|
<RssiIndicator
|
||||||
showDBm={true}
|
showDBm={true}
|
||||||
rssi_dbm={network.rssi}
|
rssi={network.rssi}
|
||||||
class="text-base-content h-10 w-10"
|
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -14,29 +14,31 @@
|
|||||||
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
|
import ConfirmDialog from '$lib/components/ConfirmDialog.svelte';
|
||||||
import ScanNetworks from './Scan.svelte';
|
import ScanNetworks from './Scan.svelte';
|
||||||
import Spinner from '$lib/components/Spinner.svelte';
|
import Spinner from '$lib/components/Spinner.svelte';
|
||||||
import AP from '~icons/tabler/access-point';
|
|
||||||
import Router from '~icons/tabler/router';
|
|
||||||
import MAC from '~icons/tabler/dna-2';
|
|
||||||
import Home from '~icons/tabler/home';
|
|
||||||
import WiFi from '~icons/tabler/wifi';
|
|
||||||
import SSID from '~icons/tabler/router';
|
|
||||||
import Down from '~icons/tabler/chevron-down';
|
|
||||||
import DNS from '~icons/tabler/address-book';
|
|
||||||
import Gateway from '~icons/tabler/torii';
|
|
||||||
import Subnet from '~icons/tabler/grid-dots';
|
|
||||||
import Channel from '~icons/tabler/antenna';
|
|
||||||
import Scan from '~icons/tabler/radar-2';
|
|
||||||
import Add from '~icons/tabler/circle-plus';
|
|
||||||
import Edit from '~icons/tabler/pencil';
|
|
||||||
import Delete from '~icons/tabler/trash';
|
|
||||||
import Cancel from '~icons/tabler/x';
|
|
||||||
import Check from '~icons/tabler/check';
|
|
||||||
import InfoDialog from '$lib/components/InfoDialog.svelte';
|
import InfoDialog from '$lib/components/InfoDialog.svelte';
|
||||||
import type { KnownNetworkItem, WifiSettings, WifiStatus } from '$lib/types/models';
|
import type { KnownNetworkItem, WifiSettings, WifiStatus } from '$lib/types/models';
|
||||||
import { socket, useFeatureFlags } from '$lib/stores';
|
import { socket, useFeatureFlags } from '$lib/stores';
|
||||||
import { api } from '$lib/api';
|
import { api } from '$lib/api';
|
||||||
|
import {
|
||||||
|
Cancel,
|
||||||
|
Delete,
|
||||||
|
Check,
|
||||||
|
Router,
|
||||||
|
AP,
|
||||||
|
SSID,
|
||||||
|
Home,
|
||||||
|
WiFi,
|
||||||
|
Down,
|
||||||
|
MAC,
|
||||||
|
Channel,
|
||||||
|
Gateway,
|
||||||
|
Subnet,
|
||||||
|
DNS,
|
||||||
|
Add,
|
||||||
|
Scan,
|
||||||
|
Edit
|
||||||
|
} from '$lib/components/icons';
|
||||||
|
|
||||||
const features = useFeatureFlags();
|
const features = useFeatureFlags();
|
||||||
|
|
||||||
let networkEditable: KnownNetworkItem = {
|
let networkEditable: KnownNetworkItem = {
|
||||||
ssid: '',
|
ssid: '',
|
||||||
@@ -49,7 +51,7 @@
|
|||||||
dns_ip_2: undefined
|
dns_ip_2: undefined
|
||||||
};
|
};
|
||||||
|
|
||||||
let static_ip_config = false
|
let static_ip_config = false;
|
||||||
|
|
||||||
let newNetwork: boolean = true;
|
let newNetwork: boolean = true;
|
||||||
let showNetworkEditor: boolean = false;
|
let showNetworkEditor: boolean = false;
|
||||||
@@ -75,44 +77,44 @@
|
|||||||
let formErrorhostname = false;
|
let formErrorhostname = false;
|
||||||
|
|
||||||
async function getWifiStatus() {
|
async function getWifiStatus() {
|
||||||
const result = await api.get<WifiStatus>('/api/wifiStatus');
|
const result = await api.get<WifiStatus>('/api/wifiStatus');
|
||||||
if (result.isErr()){
|
if (result.isErr()) {
|
||||||
console.error(`Error occurred while fetching: `, result.inner);
|
console.error(`Error occurred while fetching: `, result.inner);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
wifiStatus = result.inner
|
wifiStatus = result.inner;
|
||||||
return wifiStatus;
|
return wifiStatus;
|
||||||
}
|
}
|
||||||
|
|
||||||
async function getWifiSettings() {
|
async function getWifiSettings() {
|
||||||
const result = await api.get<WifiSettings>('/api/wifiSettings');
|
const result = await api.get<WifiSettings>('/api/wifiSettings');
|
||||||
if (result.isErr()){
|
if (result.isErr()) {
|
||||||
console.error(`Error occurred while fetching: `, result.inner);
|
console.error(`Error occurred while fetching: `, result.inner);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
wifiSettings = result.inner
|
wifiSettings = result.inner;
|
||||||
dndNetworkList = wifiSettings.wifi_networks;
|
dndNetworkList = wifiSettings.wifi_networks;
|
||||||
return wifiSettings;
|
return wifiSettings;
|
||||||
}
|
}
|
||||||
|
|
||||||
onDestroy(() => socket.off('WiFiSettings'));
|
onDestroy(() => socket.off('WiFiSettings'));
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
socket.on<WifiSettings>('WiFiSettings', (data) => {
|
socket.on<WifiSettings>('WiFiSettings', (data) => {
|
||||||
wifiSettings = data
|
wifiSettings = data;
|
||||||
dndNetworkList = wifiSettings.wifi_networks
|
dndNetworkList = wifiSettings.wifi_networks;
|
||||||
})
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
async function postWiFiSettings(data: WifiSettings) {
|
async function postWiFiSettings(data: WifiSettings) {
|
||||||
const result = await api.post<WifiSettings>('/api/wifiSettings', data);
|
const result = await api.post<WifiSettings>('/api/wifiSettings', data);
|
||||||
if (result.isErr()){
|
if (result.isErr()) {
|
||||||
console.error(`Error occurred while fetching: `, result.inner);
|
console.error(`Error occurred while fetching: `, result.inner);
|
||||||
notifications.error('User not authorized.', 3000);
|
notifications.error('User not authorized.', 3000);
|
||||||
return
|
return;
|
||||||
}
|
}
|
||||||
wifiSettings = result.inner
|
wifiSettings = result.inner;
|
||||||
notifications.success('Wi-Fi settings updated.', 3000);
|
notifications.success('Wi-Fi settings updated.', 3000);
|
||||||
}
|
}
|
||||||
|
|
||||||
function validateHostName() {
|
function validateHostName() {
|
||||||
@@ -139,7 +141,7 @@
|
|||||||
formErrors.ssid = false;
|
formErrors.ssid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
networkEditable.static_ip_config = static_ip_config;
|
networkEditable.static_ip_config = static_ip_config;
|
||||||
|
|
||||||
if (networkEditable.static_ip_config) {
|
if (networkEditable.static_ip_config) {
|
||||||
// RegEx for IPv4
|
// RegEx for IPv4
|
||||||
@@ -736,4 +738,4 @@
|
|||||||
{/await}
|
{/await}
|
||||||
</div>
|
</div>
|
||||||
{/if}
|
{/if}
|
||||||
</SettingsCard>
|
</SettingsCard>
|
||||||
|
|||||||
Reference in New Issue
Block a user