From 1cef356be95a67f95d40f5b0b131f98d11f13c13 Mon Sep 17 00:00:00 2001 From: Martin Kagamino Lehoux Date: Sat, 12 Sep 2026 22:22:33 +0200 Subject: Extract Button primitive, migrate all call sites Variants primary/accent/ghost/done with scoped styles. Disabled handling unified; block/size/style props cover login stretch, done-lg, save-check positioning. Delete btn-* globals and dead page overrides. --- src/app.css | 86 ------------ src/lib/components/Button.svelte | 150 +++++++++++++++++++++ src/routes/+page.svelte | 3 +- src/routes/groceries/catalog/+page.svelte | 22 +-- src/routes/groceries/categories/+page.svelte | 13 +- src/routes/grocery/[id]/+page.svelte | 13 +- src/routes/login/+page.svelte | 7 +- src/routes/projects/[id]/+page.svelte | 14 +- .../[projectId]/routine/[routineId]/+page.svelte | 29 ++-- 9 files changed, 181 insertions(+), 156 deletions(-) create mode 100644 src/lib/components/Button.svelte (limited to 'src') diff --git a/src/app.css b/src/app.css index b219650..87817bd 100644 --- a/src/app.css +++ b/src/app.css @@ -206,49 +206,6 @@ box-shadow: 0 0 0 3px var(--shadow-accent-focus); } -/* Buttons */ -.btn-primary { - padding: 0.75rem 1.5rem; - border: none; - border-radius: 0.75rem; - background: var(--accent); - color: var(--white); - font-size: 0.9375rem; - font-weight: 500; - align-self: flex-start; - cursor: pointer; - transition: all 0.2s ease; - box-shadow: 0 1px 2px var(--shadow); -} - -.btn-primary:hover { - background: var(--accent-hover); - transform: translateY(-1px); - box-shadow: 0 4px 8px var(--shadow-accent-lg); -} - -.btn-ghost { - flex-shrink: 0; - width: 2rem; - aspect-ratio: 1; - padding: 0; - border: none; - border-radius: 0.625rem; - background: transparent; - color: var(--text-secondary); - font-size: 1.25rem; - display: flex; - align-items: center; - justify-content: center; - cursor: pointer; - transition: all 0.2s ease; -} - -.btn-ghost:hover { - background: var(--danger-hover-bg); - color: var(--danger); -} - .score { flex-shrink: 0; min-width: 2.75rem; @@ -296,32 +253,6 @@ min-width: 0; } -.btn-accent { - width: 3rem; - height: 3rem; - flex-shrink: 0; - padding: 0; - border: none; - border-radius: 0.75rem; - background: var(--accent); - color: var(--white); - font-size: 1.25rem; - font-weight: 500; - font-family: inherit; - cursor: pointer; - display: flex; - align-items: center; - justify-content: center; - transition: all 0.2s ease; - box-shadow: 0 1px 2px var(--shadow); -} - -.btn-accent:hover { - background: var(--accent-hover); - transform: translateY(-1px); - box-shadow: 0 4px 8px var(--shadow-accent-lg); -} - .status { flex-shrink: 0; display: inline-flex; @@ -378,20 +309,3 @@ visibility: visible; opacity: 1; } - -.btn-done { - flex-shrink: 0; - padding: 0.5rem 0.875rem; - border: none; - border-radius: 0.625rem; - background: var(--success); - color: var(--white); - font-size: 0.875rem; - font-weight: 500; - transition: all 0.2s ease; -} - -.btn-done:hover { - filter: brightness(1.05); - transform: translateY(-1px); -} diff --git a/src/lib/components/Button.svelte b/src/lib/components/Button.svelte new file mode 100644 index 0000000..30e9fc2 --- /dev/null +++ b/src/lib/components/Button.svelte @@ -0,0 +1,150 @@ + + + + + diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5214bd6..1adfb6b 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,6 +1,7 @@ @@ -23,7 +24,7 @@ /> - + {#if form?.error} @@ -73,10 +74,6 @@ gap: 1rem; } - .btn-primary { - align-self: stretch; - } - .error { margin-top: 1rem; } diff --git a/src/routes/projects/[id]/+page.svelte b/src/routes/projects/[id]/+page.svelte index 8a3561b..2efe05b 100644 --- a/src/routes/projects/[id]/+page.svelte +++ b/src/routes/projects/[id]/+page.svelte @@ -4,6 +4,7 @@ import HealthChart from '$lib/components/HealthChart.svelte'; import ScoreBadge from '$lib/components/ScoreBadge.svelte'; import StatusBadge from '$lib/components/StatusBadge.svelte'; + import Button from '$lib/components/Button.svelte'; import { formatFrequency, parseIntervalToDays, @@ -82,14 +83,13 @@ autocomplete="off" aria-label="Intervalle (ex: 1d, 2w, 3m)" /> - + {#if frequency !== '' && frequencyDays === null} @@ -105,12 +105,12 @@
  • - +