From 6bc9e0666b6d3d79b4c07562eae4776e23411da5 Mon Sep 17 00:00:00 2001 From: Tim Wundenberg Date: Fri, 25 Jul 2025 22:42:22 +0200 Subject: [PATCH] feat(layout): #211 optimize the overall layout for mobile move navigation to aside proper mobile handling update logo.svg remove pirata-one/only use it for the logo --- assest-source/logo-inkscape.svg | 188 ++++++++++++++++++ input.css | 33 ++- internal/template/account/account.templ | 4 +- internal/template/auth/sign_in_or_up.templ | 4 +- internal/template/auth/user.templ | 6 +- internal/template/{root.templ => index.templ} | 3 +- internal/template/layout.templ | 89 ++++++--- internal/template/svg/default.templ | 12 +- .../template/transaction/transaction.templ | 4 +- .../transaction_recurring.templ | 4 +- .../treasurechest/treasure_chest.templ | 4 +- static/favicon.svg | 54 ++++- static/font/PirataOne-Regular.woff2 | Bin 12916 -> 0 bytes static/js/layout.js | 11 + static/logo.svg | 71 +++++++ 15 files changed, 425 insertions(+), 62 deletions(-) create mode 100644 assest-source/logo-inkscape.svg rename internal/template/{root.templ => index.templ} (72%) delete mode 100644 static/font/PirataOne-Regular.woff2 create mode 100644 static/js/layout.js create mode 100644 static/logo.svg diff --git a/assest-source/logo-inkscape.svg b/assest-source/logo-inkscape.svg new file mode 100644 index 0000000..8a0f274 --- /dev/null +++ b/assest-source/logo-inkscape.svg @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + $ + + + + + + + + + + $ + + + pendSparrow + + + + + + diff --git a/input.css b/input.css index 95e8a08..52482f6 100644 --- a/input.css +++ b/input.css @@ -3,37 +3,34 @@ @source './static/**/*.js'; @source './template/**/*.templ'; -body { - @apply font-garamond text-gray-700; -} -input:focus { - @apply outline-none ring-0; -} - -@font-face { - font-family: "Pirata One"; - src: url("/static/font/PirataOne-Regular.woff2") format("woff2"); -} @font-face { font-family: "EB Garamond"; src: url("/static/font/EBGaramond-VariableFont_wght.woff2") format("woff2"); } -@theme { - --font-pirata: "Pirata One", serif; - --font-garamond: "EB Garamond", serif; +body { + font-family: "EB Garamond", serif; + @apply text-gray-700; +} + +input:focus { + @apply outline-none ring-0; +} + +button { + @apply cursor-pointer; } /* Button */ .button { - transition: all 150ms linear; + transition: all 150ms linear; @apply cursor-pointer border-2 rounded-lg border-transparent; } .button-primary:hover, .button-normal:hover { - transform: translate(-0.25rem, -0.25rem); - box-shadow: 3px 3px 3px var(--color-gray-200); + transform: translate(-0.25rem, -0.25rem); + box-shadow: 3px 3px 3px var(--color-gray-200); } .button-primary { @@ -61,3 +58,5 @@ input:focus { box-shadow: 0 0 0 2px var(--color-gray-200); } + + diff --git a/internal/template/account/account.templ b/internal/template/account/account.templ index 3a3006f..cfdb2fa 100644 --- a/internal/template/account/account.templ +++ b/internal/template/account/account.templ @@ -66,7 +66,9 @@ templ EditAccount(account *types.Account) { hx-swap="outerHTML" class="button button-neglect px-1 flex items-center gap-2" > - @svg.Cancel() + + @svg.Cancel() + Cancel diff --git a/internal/template/auth/sign_in_or_up.templ b/internal/template/auth/sign_in_or_up.templ index 94e29cc..ad39b68 100644 --- a/internal/template/auth/sign_in_or_up.templ +++ b/internal/template/auth/sign_in_or_up.templ @@ -71,10 +71,10 @@ if isSignIn { Don't have an account? Sign Up - + } else { Already have an account? Sign In - } diff --git a/internal/template/auth/user.templ b/internal/template/auth/user.templ index 72b8a27..364dda7 100644 --- a/internal/template/auth/user.templ +++ b/internal/template/auth/user.templ @@ -1,7 +1,7 @@ package auth templ UserComp(user string) { -
+
if user != "" {
} else { - Sign Up - Sign In + Sign Up + Sign In }
} diff --git a/internal/template/root.templ b/internal/template/index.templ similarity index 72% rename from internal/template/root.templ rename to internal/template/index.templ index ea56545..39c34e6 100644 --- a/internal/template/root.templ +++ b/internal/template/index.templ @@ -3,8 +3,7 @@ package template templ Index() {

- SpendSparrow logo - SpendSparrow + SpendSparrow logo

Spend your treasure on the important diff --git a/internal/template/layout.templ b/internal/template/layout.templ index 52edb1c..a215db4 100644 --- a/internal/template/layout.templ +++ b/internal/template/layout.templ @@ -1,10 +1,14 @@ package template +import "spend-sparrow/internal/template/svg" + func layoutLinkClass(isActive bool) string { + common := "text-2xl p-2 text-gray-900 decoration-yellow-400 decoration-[0.25rem] hover:bg-gray-200 rounded-lg" if isActive { - return "text-xl hover:bg-gray-100 p-1 duration-100 rounded-xl transition-colors text-gray-900" + return common + " " + "underline" } - return "text-xl hover:bg-gray-100 hover:text-gray-900 p-1 duration-200 rounded-xl transition-colors text-gray-400" + + return common + " " + "hover:underline" } templ Layout(slot templ.Component, user templ.Component, loggedIn bool, path string) { @@ -22,48 +26,69 @@ templ Layout(slot templ.Component, user templ.Component, loggedIn bool, path str "includeIndicatorStyles": false, "selfRequestsOnly": true, "allowScriptTags": false - }' + }' /> + - - // Header - -
- // Content -
- if slot != nil { - @slot - } -
- // Footer - +

+ +
+ + SpendSparrow logo + + +
+ @navigation(path) +
+ class="transition-all duration-300 + opacity-0 px-4 py-2 text-lg hidden text-bold rounded bg-amber-900 text-white" + >
} + +templ navigation(path string) { + +} diff --git a/internal/template/svg/default.templ b/internal/template/svg/default.templ index 587dfe3..ddec57a 100644 --- a/internal/template/svg/default.templ +++ b/internal/template/svg/default.templ @@ -31,7 +31,7 @@ templ Save() { } templ Cancel() { - + } @@ -47,3 +47,13 @@ templ Info() { } + +templ Menu() { + + + + + + + +} diff --git a/internal/template/transaction/transaction.templ b/internal/template/transaction/transaction.templ index 8197799..e80fc6b 100644 --- a/internal/template/transaction/transaction.templ +++ b/internal/template/transaction/transaction.templ @@ -188,7 +188,9 @@ templ EditTransaction(transaction *types.Transaction, accounts []*types.Account, hx-swap="outerHTML" class="button button-neglect px-1 flex items-center gap-2" > - @svg.Cancel() + + @svg.Cancel() + Cancel diff --git a/internal/template/transaction_recurring/transaction_recurring.templ b/internal/template/transaction_recurring/transaction_recurring.templ index 696892f..08b5bb1 100644 --- a/internal/template/transaction_recurring/transaction_recurring.templ +++ b/internal/template/transaction_recurring/transaction_recurring.templ @@ -193,7 +193,9 @@ templ EditTransactionRecurring(transactionRecurring *types.TransactionRecurring, hx-swap="outerHTML" class="button button-neglect px-1 flex items-center gap-2" > - @svg.Cancel() + + @svg.Cancel() + Cancel diff --git a/internal/template/treasurechest/treasure_chest.templ b/internal/template/treasurechest/treasure_chest.templ index 2146dcc..5477b21 100644 --- a/internal/template/treasurechest/treasure_chest.templ +++ b/internal/template/treasurechest/treasure_chest.templ @@ -88,7 +88,9 @@ templ EditTreasureChest(treasureChest *types.TreasureChest, parents []*types.Tre hx-swap="outerHTML" class="button button-neglect px-1 flex items-center gap-2" > - @svg.Cancel() + + @svg.Cancel() + Cancel diff --git a/static/favicon.svg b/static/favicon.svg index f3a9ca5..fc4f319 100644 --- a/static/favicon.svg +++ b/static/favicon.svg @@ -1 +1,53 @@ - + + + + + + + + + + + + + $ + + diff --git a/static/font/PirataOne-Regular.woff2 b/static/font/PirataOne-Regular.woff2 deleted file mode 100644 index af0d93499aa7dfd21b39db532afc74c0bf004fba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12916 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 diff --git a/static/js/layout.js b/static/js/layout.js new file mode 100644 index 0000000..afa6118 --- /dev/null +++ b/static/js/layout.js @@ -0,0 +1,11 @@ + +document.addEventListener("DOMContentLoaded", () => { + menuButton.addEventListener("click", function (e) { + menu.showModal(); + }); + menuButtonClose.addEventListener("click", function (e) { + menu.close(); + }); + +}) + diff --git a/static/logo.svg b/static/logo.svg new file mode 100644 index 0000000..71c486c --- /dev/null +++ b/static/logo.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + $ + + + pendSparrow + + +