From 930e83344c0089c30c7e3b3eb606ba11d8a7439b Mon Sep 17 00:00:00 2001 From: Daniel Kirby Date: Fri, 5 Jun 2026 23:25:30 +0100 Subject: [PATCH] feat: add dashboard shell and shared components --- src/lib/components/app-sidebar.svelte | 109 ++++++++++++++++++++ src/lib/components/centre-switcher.svelte | 74 ++++++++++++++ src/lib/components/login-form.svelte | 116 ++++++++++++++++++++++ src/lib/components/money-field.svelte | 45 +++++++++ src/lib/components/search-form.svelte | 21 ++++ src/routes/dashboard/+layout.svelte | 108 ++++++++++++++++++++ src/routes/dashboard/+page.svelte | 0 7 files changed, 473 insertions(+) create mode 100644 src/lib/components/app-sidebar.svelte create mode 100644 src/lib/components/centre-switcher.svelte create mode 100644 src/lib/components/login-form.svelte create mode 100644 src/lib/components/money-field.svelte create mode 100644 src/lib/components/search-form.svelte create mode 100644 src/routes/dashboard/+layout.svelte create mode 100644 src/routes/dashboard/+page.svelte diff --git a/src/lib/components/app-sidebar.svelte b/src/lib/components/app-sidebar.svelte new file mode 100644 index 0000000..f05f719 --- /dev/null +++ b/src/lib/components/app-sidebar.svelte @@ -0,0 +1,109 @@ + + + + + + + + + + + + {#each data.navMain as group (group.title)} + + {group.title} + + + {#each group.items as item (item.title)} + + + {#snippet child({ props })} + {item.title} + {/snippet} + + + {/each} + + + + {/each} + + + diff --git a/src/lib/components/centre-switcher.svelte b/src/lib/components/centre-switcher.svelte new file mode 100644 index 0000000..7477044 --- /dev/null +++ b/src/lib/components/centre-switcher.svelte @@ -0,0 +1,74 @@ + + + + + + + {#snippet child({ props })} + +
+ +
+
+ {selectedCentre.name} + {selectedCentre.workspace} +
+ +
+ {/snippet} +
+ + {#each centres as centre (centre.name)} + (selectedCentre = centre)} + class="gap-2 focus:bg-sidebar-accent focus:text-sidebar-accent-foreground data-[selected=true]:bg-sidebar-accent data-[selected=true]:text-sidebar-accent-foreground" + data-selected={centre.name === selectedCentre.name} + > +
+ +
+
+ {centre.name} + {centre.workspace} +
+ {#if centre.name === selectedCentre.name} + + {/if} +
+ {/each} +
+
+
+
diff --git a/src/lib/components/login-form.svelte b/src/lib/components/login-form.svelte new file mode 100644 index 0000000..3eb89d4 --- /dev/null +++ b/src/lib/components/login-form.svelte @@ -0,0 +1,116 @@ + + +
+
+ +
+
+
+ +
+ Clearity +
+

Sign in to Clearity

+ + Use the administrator account created for this workspace. + +
+ + + + {#snippet children({ props })} + Email + + {/snippet} + + + + + + + + {#snippet children({ props })} + Password + + {/snippet} + + + + + New users are created manually by an administrator; public registration is disabled. + + + + + +
+
+ + Business and sport centre management for clients, bookings, rooms, services, and invoices. + +
diff --git a/src/lib/components/money-field.svelte b/src/lib/components/money-field.svelte new file mode 100644 index 0000000..7474e8f --- /dev/null +++ b/src/lib/components/money-field.svelte @@ -0,0 +1,45 @@ + + + + + + {#snippet children({ props })} + {label} + + + £ + + + + {/snippet} + + + + diff --git a/src/lib/components/search-form.svelte b/src/lib/components/search-form.svelte new file mode 100644 index 0000000..ecad833 --- /dev/null +++ b/src/lib/components/search-form.svelte @@ -0,0 +1,21 @@ + + +
+ + + + + + + +
diff --git a/src/routes/dashboard/+layout.svelte b/src/routes/dashboard/+layout.svelte new file mode 100644 index 0000000..f2a1caa --- /dev/null +++ b/src/routes/dashboard/+layout.svelte @@ -0,0 +1,108 @@ + + + + + +
+ + + + + {#each breadcrumbs as item, index (`${item.href ?? page.url.pathname}:${item.label}`)} + {#if index > 0} + + +
+
+ {@render children()} +
+
+
diff --git a/src/routes/dashboard/+page.svelte b/src/routes/dashboard/+page.svelte new file mode 100644 index 0000000..e69de29