diff --git a/src/components/AppLoadingBar/AppLoadingBar.svelte b/src/components/AppLoadingBar/AppLoadingBar.svelte new file mode 100644 index 00000000..27d2f8a5 --- /dev/null +++ b/src/components/AppLoadingBar/AppLoadingBar.svelte @@ -0,0 +1,92 @@ + + + + + diff --git a/src/components/AppLoadingBar/AppLoadingBar.types.ts b/src/components/AppLoadingBar/AppLoadingBar.types.ts new file mode 100644 index 00000000..5ab5ad92 --- /dev/null +++ b/src/components/AppLoadingBar/AppLoadingBar.types.ts @@ -0,0 +1,9 @@ +import type { ElProps } from '../Base' + +export interface AppLoadingBarProps extends Partial { + color?: Colors + duration?: number + fixedPosition?: boolean + indeterminate?: boolean + show?: boolean +} diff --git a/src/components/AppLoadingBar/index.ts b/src/components/AppLoadingBar/index.ts new file mode 100644 index 00000000..f12e0223 --- /dev/null +++ b/src/components/AppLoadingBar/index.ts @@ -0,0 +1,2 @@ +export { default as AppLoadingBar } from './AppLoadingBar.svelte' +export * from './AppLoadingBar.types' diff --git a/src/components/index.ts b/src/components/index.ts index c513e4ed..54cda60d 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -1,6 +1,7 @@ export * from './Accordion' export * from './Alert' export * from './App' +export * from './AppLoadingBar' export * from './Avatar' export * from './Badge' export * from './El' diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index f9750c9b..649a9dfb 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -3,6 +3,7 @@ App, AppBody, AppFooter, + AppLoadingBar, type ContainerMaxWidths, El, Offcanvas, @@ -20,47 +21,18 @@ let container: ContainerMaxWidths = 'md' let theme: Themes = 'light' - let progressValue = 0 - let updater: any let showDocs = false let showTopNav = false - - export let maximum = 0.999 - export let intervalTime = 700 - export let stepSizes = [0, 0.005, 0.01, 0.02] - - const getIncrement = (number: number) => { - if (number >= 0 && number < 0.2) return 0.1 - else if (number >= 0.2 && number < 0.5) return 0.04 - else if (number >= 0.5 && number < 0.8) return 0.02 - else if (number >= 0.8 && number < 0.99) return 0.005 - return 0.00001 - } - const startInterval = () => { - if (typeof window !== 'undefined') { - updater = setInterval(() => { - const randomStep = stepSizes[Math.floor(Math.random() * stepSizes.length)] - const step = getIncrement(progressValue) + randomStep - if (progressValue < maximum) { - progressValue = progressValue + step - } - if (progressValue > maximum) { - clearInterval(updater) - } - }, intervalTime) - } - } + let loadingBar: any beforeNavigate(() => { - progressValue = 0 + loadingBar?.start() showDocs = false showTopNav = false - startInterval() }) afterNavigate(() => { - progressValue = 1 - clearInterval(updater) + loadingBar?.done() }) const onThemeChange = () => (theme === 'light' ? (theme = 'dark') : (theme = 'light')) @@ -79,14 +51,7 @@ - {#if progressValue < 1} -
-
- -
-
- {/if} - +