Svelte Folder Structure
Overview
app.html file Structure.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="%sveltekit.assets%/favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
%sveltekit.head%
</head>
<body data-sveltekit-preload-data="hover">
<div style="display: contents">%sveltekit.body%</div>
</body>
</html>
+layout.svelte file Structure.
<script>
import { page } from '$app/stores';
import { onMount } from 'svelte';
import { browser } from '$app/environment';
import { goto } from '$app/navigation';
import VerticalLayout from '../VerticalLayout/Index.svelte';
import HorizontalLayout from '../HorizontalLayout/Index.svelte';
import { addMessages, init, getLocaleFromNavigator } from 'svelte-i18n';
import en from '../lang/en.json';
addMessages('en', en);
init({
fallbackLocale: 'en',
initialLocale: getLocaleFromNavigator()
});
let layoutType = 'vertical';
const changeLayout = () => {
if (browser) {
if (layoutType == 'horizontal') {
document.body.setAttribute('data-layout', 'horizontal');
document.body.setAttribute('data-topbar', 'dark');
document.body.removeAttribute('data-sidebar');
} else {
document.body.setAttribute('data-layout', 'vertical');
document.body.setAttribute('data-sidebar', 'dark');
document.body.setAttribute('data-topbar', 'light');
}
}
};
onMount(() => {
if (!isAuthenticate()) {
goto('/auth/login');
}
changeLayout();
});
function isAuthenticate() {
let user = browser && localStorage.authUser;
if (!user) {
return false;
} else {
return true;
}
}
changeLayout();
let component = layoutType == 'vertical' ? VerticalLayout : HorizontalLayout;
const publicRoutes = [
'/crypto/ico-landing',
'/auth/login',
'/auth/login-2',
'/auth/register',
'/auth/register-2',
'/auth/recoverpw',
'/auth/recoverpw-2',
'/auth/lock-screen',
'/auth/lock-screen-2',
'/auth/confirm-mail',
'/auth/confirm-mail-2',
'/auth/email-verification',
'/auth/email-verification-2',
'/auth/two-step-verification',
'/auth/two-step-verification-2',
'/pages/maintenance',
'/pages/comingsoon',
'/pages/404',
'/pages/500'
];
$: isPublic = publicRoutes.includes($page.url.pathname);
</script>
<svelte:head>
<script src="//cdn.jsdelivr.net/npm/apexcharts"></script>
<!-- jsvectormap -->
<script src="https://cdn.jsdelivr.net/npm/jsvectormap"></script>
<script src="https://cdn.jsdelivr.net/npm/jsvectormap/dist/maps/world.js"></script>
</svelte:head>
{#if isPublic}
<slot />
{:else}
<svelte:component this={component}>
<slot />
</svelte:component>
{/if}
<style lang="scss">
@import './../assets/scss/bootstrap.scss';
@import './../assets/scss/app.scss';
@import './../assets/scss/icons.scss';
</style>
Layout setup
You can set the default layout in the src/common/RightSidebar.svelte file.
let sidebarColor = 'dark'; let topbarColor = 'light'; let layoutWidth = 'fluid'; let layoutMode = 'light';
| sidebarColor="light" | To set light sidebar. |
|---|---|
| sidebarColor="dark" | To set dark sidebar. |
| sidebarColor="colored" | To set colored sidebar. |
| topbarColor="light" | To set light topbar. |
| topbarColor="dark" | To set dark topbar. |
| layoutWidth="fluid" | To set fluid layout width. |
| layoutWidth="boxed" | To set boxed layout width. |
| layoutWidth="scrollable" | To set scrollable layout width. |
| layoutMode="light" | To set Light layout mode. |
| layoutMode="dark" | To set Dark layout mode. |