feat(domains): Inline-Edit + Favicon in Settings + Filter IN Suchmaske
All checks were successful
Build & Publish Docker Image / build-and-push (push) Successful in 1m17s

Domain-Admin-Seite bekommt jetzt ein Favicon-Icon vor jedem Eintrag,
einen Pencil-Button zum Inline-Editieren von Domain und Anzeigename,
und Save/Cancel-Buttons. Beim Ändern des Domain-Namens wird das Favicon
zurückgesetzt und beim Speichern frisch nachgeladen (den Filter-Dropdown-
Icons reicht der neue favicon_path automatisch zu).

Der Filter-Button auf der Hauptseite sitzt jetzt IM weißen Suchfeld-
Container (neuer .search-box-Wrapper mit Border) statt daneben, analog
zum Referenz-Screenshot von rezeptwelt.de. Neue inline-Prop an
SearchFilter schaltet eigenen Border/Background ab und setzt stattdessen
einen vertikalen Divider nach rechts.

- Neuer PATCH /api/domains/[id] mit zod-Schema.
- Repository: updateDomain(id, patch) + getDomainById(id).
  domain-Change nullt favicon_path → Caller lädt neu.
- Tests für updateDomain-Fälle und getDomainById.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
hsiegeln
2026-04-18 08:28:02 +02:00
parent 6c2b24d060
commit 15c15c8494
6 changed files with 312 additions and 28 deletions

View File

@@ -281,15 +281,17 @@
<h1>Kochwas</h1>
<p class="tagline" aria-live="polite">{quote || '\u00a0'}</p>
<form class="search-form" onsubmit={submit}>
<SearchFilter />
<input
type="search"
bind:value={query}
placeholder="Rezept suchen…"
autocomplete="off"
inputmode="search"
aria-label="Suchbegriff"
/>
<div class="search-box">
<SearchFilter inline />
<input
type="search"
bind:value={query}
placeholder="Rezept suchen"
autocomplete="off"
inputmode="search"
aria-label="Suchbegriff"
/>
</div>
</form>
</section>
@@ -444,20 +446,31 @@
}
form {
display: flex;
gap: 0.5rem;
}
.search-box {
flex: 1;
display: flex;
align-items: stretch;
background: white;
border: 1px solid #cfd9d1;
border-radius: 12px;
overflow: hidden;
min-height: 52px;
}
.search-box:focus-within {
outline: 2px solid #2b6a3d;
outline-offset: 1px;
}
input[type='search'] {
flex: 1;
padding: 0.9rem 1rem;
font-size: 1.1rem;
border: 1px solid #cfd9d1;
border-radius: 10px;
background: white;
min-height: 48px;
border: 0;
background: transparent;
min-width: 0;
}
input[type='search']:focus {
outline: 2px solid #2b6a3d;
outline-offset: 1px;
outline: none;
}
.results,
.listing {