diff --git a/.vscode/settings.json b/.vscode/settings.json
index 69b81bc..d7d9f3d 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -2,5 +2,10 @@
"svelte.enable-ts-plugin": true,
"files.associations": {
"*.css": "tailwindcss"
+ },
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
+ "editor.formatOnSave": true,
+ "[svelte]": {
+ "editor.defaultFormatter": "svelte.svelte-vscode"
}
}
diff --git a/src/lib/components/ui/button/button.svelte b/src/lib/components/ui/button/button.svelte
new file mode 100644
index 0000000..2105474
--- /dev/null
+++ b/src/lib/components/ui/button/button.svelte
@@ -0,0 +1,82 @@
+
+
+
+
+{#if href}
+
+ {@render children?.()}
+
+{:else}
+
+ {@render children?.()}
+
+{/if}
diff --git a/src/lib/components/ui/button/index.ts b/src/lib/components/ui/button/index.ts
new file mode 100644
index 0000000..fb585d7
--- /dev/null
+++ b/src/lib/components/ui/button/index.ts
@@ -0,0 +1,17 @@
+import Root, {
+ type ButtonProps,
+ type ButtonSize,
+ type ButtonVariant,
+ buttonVariants,
+} from "./button.svelte";
+
+export {
+ Root,
+ type ButtonProps as Props,
+ //
+ Root as Button,
+ buttonVariants,
+ type ButtonProps,
+ type ButtonSize,
+ type ButtonVariant,
+};
diff --git a/src/lib/components/ui/empty/empty-content.svelte b/src/lib/components/ui/empty/empty-content.svelte
new file mode 100644
index 0000000..7126aa6
--- /dev/null
+++ b/src/lib/components/ui/empty/empty-content.svelte
@@ -0,0 +1,23 @@
+
+
+
+ {@render children?.()}
+
diff --git a/src/lib/components/ui/empty/empty-description.svelte b/src/lib/components/ui/empty/empty-description.svelte
new file mode 100644
index 0000000..85a866c
--- /dev/null
+++ b/src/lib/components/ui/empty/empty-description.svelte
@@ -0,0 +1,23 @@
+
+
+a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4",
+ className
+ )}
+ {...restProps}
+>
+ {@render children?.()}
+
diff --git a/src/lib/components/ui/empty/empty-header.svelte b/src/lib/components/ui/empty/empty-header.svelte
new file mode 100644
index 0000000..296eaf8
--- /dev/null
+++ b/src/lib/components/ui/empty/empty-header.svelte
@@ -0,0 +1,20 @@
+
+
+
+ {@render children?.()}
+
diff --git a/src/lib/components/ui/empty/empty-media.svelte b/src/lib/components/ui/empty/empty-media.svelte
new file mode 100644
index 0000000..0b4e45d
--- /dev/null
+++ b/src/lib/components/ui/empty/empty-media.svelte
@@ -0,0 +1,41 @@
+
+
+
+
+
+ {@render children?.()}
+
diff --git a/src/lib/components/ui/empty/empty-title.svelte b/src/lib/components/ui/empty/empty-title.svelte
new file mode 100644
index 0000000..8c237aa
--- /dev/null
+++ b/src/lib/components/ui/empty/empty-title.svelte
@@ -0,0 +1,20 @@
+
+
+
+ {@render children?.()}
+
diff --git a/src/lib/components/ui/empty/empty.svelte b/src/lib/components/ui/empty/empty.svelte
new file mode 100644
index 0000000..2b45107
--- /dev/null
+++ b/src/lib/components/ui/empty/empty.svelte
@@ -0,0 +1,23 @@
+
+
+
+ {@render children?.()}
+
diff --git a/src/lib/components/ui/empty/index.ts b/src/lib/components/ui/empty/index.ts
new file mode 100644
index 0000000..ae4c106
--- /dev/null
+++ b/src/lib/components/ui/empty/index.ts
@@ -0,0 +1,22 @@
+import Root from "./empty.svelte";
+import Header from "./empty-header.svelte";
+import Media from "./empty-media.svelte";
+import Title from "./empty-title.svelte";
+import Description from "./empty-description.svelte";
+import Content from "./empty-content.svelte";
+
+export {
+ Root,
+ Header,
+ Media,
+ Title,
+ Description,
+ Content,
+ //
+ Root as Empty,
+ Header as EmptyHeader,
+ Media as EmptyMedia,
+ Title as EmptyTitle,
+ Description as EmptyDescription,
+ Content as EmptyContent,
+};
diff --git a/src/lib/services/onboarding.ts b/src/lib/services/onboarding.ts
new file mode 100644
index 0000000..54b7bef
--- /dev/null
+++ b/src/lib/services/onboarding.ts
@@ -0,0 +1,3 @@
+export async function check_onboarding(): Promise {
+ return Promise.resolve(true);
+}
\ No newline at end of file
diff --git a/src/lib/services/workspaces.ts b/src/lib/services/workspaces.ts
new file mode 100644
index 0000000..4c897ce
--- /dev/null
+++ b/src/lib/services/workspaces.ts
@@ -0,0 +1,5 @@
+import type { Workspace } from "$lib/types/workspace";
+
+export async function get_workspaces(): Promise {
+ return []
+}
\ No newline at end of file
diff --git a/src/lib/types/workspace.ts b/src/lib/types/workspace.ts
new file mode 100644
index 0000000..2d4b5a5
--- /dev/null
+++ b/src/lib/types/workspace.ts
@@ -0,0 +1,4 @@
+export type Workspace = {
+ Id: string,
+ Name: string,
+}
\ No newline at end of file
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index eb3daec..a75d6e5 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -1,156 +1,14 @@
-
-
- Welcome to Tauri + Svelte
-
-
- Click on the Tauri, Vite, and SvelteKit logos to learn more.
-
-
- {greetMsg}
-
-
-
diff --git a/src/routes/workspaces/+page.svelte b/src/routes/workspaces/+page.svelte
new file mode 100644
index 0000000..4ba93a2
--- /dev/null
+++ b/src/routes/workspaces/+page.svelte
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+ No Workspaces Yet
+
+ You haven't created any Workspaces yet. Get started by creating your first
+ project.
+
+
+
+
+ Create Workspace
+
+
+