Introduces: - src/api/fixtures/products.js + src/api/index.js — placeholder catalog (24 products across Kaiser-Natron / Holste / Gazelle / Grüne Tante / Linda) so search has real data. Same shape the backend will return. - Search.vue — Teleported dialog. Token-scored, diacritics-folded, ß→ss normalized so German terms still match when users type ASCII. Keyboard navigation (↑/↓/Enter/Esc), autofocus on open, scroll-lock. Full-screen on mobile, centered command-palette modal on md+. Tone prop defaults to 'brand' so the overlay reads as the site's primary affordance (green), with 'paper' and 'cream' variants available. - SearchSection.vue + ds-search route + sidebar entry. - DE + EN strings for the overlay and the showcase. Navbar wires the triggers: desktop search button sits left of the LanguageSwitcher in the right cluster; mobile gets a matching bottom- left floating button (cream surface, safe-area padded) that mirrors the existing bottom-right cart/menu cluster. The Search overlay is mounted inside Navbar with the default catalog, so every page that renders a Navbar gets search for free. Selected products bubble up as a @select event for navigation handling. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 line
810 B
JavaScript
1 line
810 B
JavaScript
import{$ as e,l as t,s as n,tt as r,u as i,w as a,x as o}from"./runtime-core.esm-bundler-CjdnoyKJ.js";var s={class:`mb-14 max-w-2xl`},c={class:`eyebrow mb-3`},l={class:`font-display text-5xl font-normal tracking-tight leading-[1.05] text-ink`},u={key:0,class:`mt-5 text-[17px] text-muted leading-relaxed`},d={class:`space-y-16`},f={__name:`SectionShell`,props:{eyebrow:{type:String,default:`Design system`},title:{type:String,required:!0},description:{type:String,default:``},wide:{type:Boolean,default:!1}},setup(f){return(p,m)=>(o(),i(`div`,{class:e([`mx-auto py-16`,f.wide?`max-w-none px-6 lg:px-8`:`max-w-5xl px-10 lg:px-16`])},[n(`header`,s,[n(`p`,c,r(f.eyebrow),1),n(`h1`,l,r(f.title),1),f.description?(o(),i(`p`,u,r(f.description),1)):t(``,!0)]),n(`div`,d,[a(p.$slots,`default`)])],2))}};export{f as t}; |