From 15c15c84942323f21bd17655015dac97d1b16058 Mon Sep 17 00:00:00 2001 From: hsiegeln <37154749+hsiegeln@users.noreply.github.com> Date: Sat, 18 Apr 2026 08:28:02 +0200 Subject: [PATCH] feat(domains): Inline-Edit + Favicon in Settings + Filter IN Suchmaske MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) --- src/lib/components/SearchFilter.svelte | 21 ++++ src/lib/server/domains/repository.ts | 32 +++++ src/routes/+page.svelte | 45 ++++--- src/routes/admin/domains/+page.svelte | 155 +++++++++++++++++++++++-- src/routes/api/domains/[id]/+server.ts | 47 +++++++- tests/integration/whitelist.test.ts | 40 ++++++- 6 files changed, 312 insertions(+), 28 deletions(-) diff --git a/src/lib/components/SearchFilter.svelte b/src/lib/components/SearchFilter.svelte index f1883a5..e2749af 100644 --- a/src/lib/components/SearchFilter.svelte +++ b/src/lib/components/SearchFilter.svelte @@ -2,6 +2,10 @@ import { SlidersHorizontal, Check, ChevronDown } from 'lucide-svelte'; import { searchFilterStore } from '$lib/client/search-filter.svelte'; + // inline: Button wird transparent und ohne eigenen Border gestylt, + // damit er sich in einen umgebenden Such-Container einpassen lässt. + let { inline = false }: { inline?: boolean } = $props(); + let open = $state(false); let container: HTMLElement | undefined = $state(); @@ -53,6 +57,7 @@