From 56c5b906294f425e9f06e79d2d95a62672ec06e3 Mon Sep 17 00:00:00 2001 From: Elijah Duffy Date: Fri, 11 Jul 2025 13:50:06 -0700 Subject: [PATCH] add tabs component --- src/lib/Tabs.svelte | 133 ++++++++++++++++++++++++++++++++++++++++ src/lib/index.ts | 1 + src/routes/+page.svelte | 71 +++++++++++++++++++++ 3 files changed, 205 insertions(+) create mode 100644 src/lib/Tabs.svelte diff --git a/src/lib/Tabs.svelte b/src/lib/Tabs.svelte new file mode 100644 index 0000000..fa7d8e4 --- /dev/null +++ b/src/lib/Tabs.svelte @@ -0,0 +1,133 @@ + + + + +
+
+ {#each pages as page, i (page.title)} + {@const active = activeIndex === i} + + {/each} + +
+
+ + {#key activeIndex} +
prevIndex ? 1 : -1, duration: 180, delay: 181 }} + out:flyX={{ direction: activeIndex > prevIndex ? -1 : 1, duration: 180 }} + onoutrostart={lockHeight} + onintroend={unlockHeight} + > + {@render activePage.content(activePage)} +
+ {/key} +
diff --git a/src/lib/index.ts b/src/lib/index.ts index c81c47c..81eebe7 100644 --- a/src/lib/index.ts +++ b/src/lib/index.ts @@ -18,6 +18,7 @@ export { default as RadioGroup } from './RadioGroup.svelte'; export { default as Spinner } from './Spinner.svelte'; export { default as StateMachine, type StateMachinePage } from './StateMachine.svelte'; export { default as StyledRawInput } from './StyledRawInput.svelte'; +export { default as Tabs, type TabPage } from './Tabs.svelte'; export { default as TextInput } from './TextInput.svelte'; export { default as TimeInput } from './TimeInput.svelte'; export { default as TimezoneInput } from './TimezoneInput.svelte'; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 3036561..6fa9e1d 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -29,6 +29,7 @@ TextUnderline } from 'phosphor-svelte'; import type { Option } from '$lib'; + import Tabs from '$lib/Tabs.svelte'; let dateInputValue = $state(undefined); let checkboxValue = $state('indeterminate'); @@ -276,6 +277,76 @@ +
+

Tabs

+ + + + {#snippet tab1()} +

Dashboard Overview

+
+
+

Total Users

+

1,247

+
+
+

Revenue

+

$12,450

+
+
+ {/snippet} + + {#snippet tab2()} +

Recent Activity

+
    +
  • + + User John Doe logged in +
  • +
  • + + New order #1234 received +
  • +
  • + + System backup completed +
  • +
+ {/snippet} + + {#snippet tab3()} +

Settings

+
+
+ + +
+
+ + +
+ +
+ {/snippet} +
+