From 7cce05b95ae8552f35fce25bcfacbb179e95a46a Mon Sep 17 00:00:00 2001 From: pyr0ball Date: Sat, 4 Apr 2026 22:51:03 -0700 Subject: [PATCH] feat: household management UI in Settings (Premium-gated) --- frontend/src/components/SettingsView.vue | 293 ++++++++++++++++++++++- 1 file changed, 292 insertions(+), 1 deletion(-) diff --git a/frontend/src/components/SettingsView.vue b/frontend/src/components/SettingsView.vue index 4e71ba5..f6085b9 100644 --- a/frontend/src/components/SettingsView.vue +++ b/frontend/src/components/SettingsView.vue @@ -64,14 +64,114 @@ +
+

Cook History

+

+ No recipes cooked yet. Tap "I cooked this" on any recipe to log it. +

+ +
+ + +
+

Household

+ + +

Loading…

+ + +

{{ householdError }}

+ + + + + + +
@@ -159,4 +344,110 @@ onMounted(async () => { opacity: 1; transform: none; } + +.mt-md { + margin-top: var(--spacing-md); +} + +.mt-sm { + margin-top: var(--spacing-sm); +} + +.log-list { + display: flex; + flex-direction: column; + gap: 2px; +} + +.log-entry { + display: flex; + justify-content: space-between; + align-items: baseline; + gap: var(--spacing-sm); + padding: var(--spacing-xs) 0; + border-bottom: 1px solid var(--color-border); +} + +.log-entry:last-child { + border-bottom: none; +} + +.log-title { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.log-date { + flex-shrink: 0; +} + +.btn-ghost { + background: transparent; + border: none; + color: var(--color-text-muted); + font-size: var(--font-size-sm); + cursor: pointer; + padding: var(--spacing-xs) var(--spacing-sm); +} + +.btn-ghost:hover { + color: var(--color-error, #dc2626); + background: transparent; + transform: none; +} + +.btn-sm { + padding: var(--spacing-xs) var(--spacing-sm); + font-size: var(--font-size-sm); +} + +.household-id { + font-size: var(--font-size-xs); + background: var(--color-bg-secondary); + padding: 2px 6px; + border-radius: 4px; +} + +.member-list { + display: flex; + flex-direction: column; + gap: 2px; +} + +.member-row { + display: flex; + justify-content: space-between; + align-items: center; + padding: var(--spacing-xs) 0; + border-bottom: 1px solid var(--color-border); + gap: var(--spacing-sm); +} + +.member-row:last-child { + border-bottom: none; +} + +.member-id { + flex: 1; + min-width: 0; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + color: var(--color-text-secondary); +} + +.invite-row { + display: flex; + gap: var(--spacing-xs); + align-items: center; +} + +.invite-input { + flex: 1; + font-size: var(--font-size-xs); + color: var(--color-text-muted); +}