// STAV — main app const { useState, useEffect, useMemo, useRef } = React; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "variant": "v1" }/*EDITMODE-END*/; // Products catalog --------------------------------------------------------- const CATEGORIES = [ { id: "all", label: "Vše" }, { id: "stavebnice", label: "Typové konstrukce" }, { id: "prvky", label: "Konstrukční prvky" }, { id: "balicky", label: "Sady podle fáze stavby" }, { id: "sluzby", label: "Služby" }, ]; const PRODUCTS = [ { id:"p01", cat:"stavebnice", tag:"BESTSELLER", name:"Stavebnice Bungalov 9×7 m", desc:"Kompletní nosná konstrukce pro bungalov 63 m². Dle konfigurátoru.", price:220500, unit:"kpl", sku:"BNG-9X7", color:"a" }, { id:"p02", cat:"stavebnice", tag:"NOVINKA", name:"Stavebnice Bungalov 10×8 m", desc:"Nosná konstrukce pro 80 m². Rastr 625 mm, 4 typové otvory.", price:280000, unit:"kpl", sku:"BNG-10X8", color:"b" }, { id:"p03", cat:"stavebnice", name:"Stavebnice Bungalov 12×10 m", desc:"Pro větší bungalovy do 120 m². Včetně věncového vazníku.", price:420000, unit:"kpl", sku:"BNG-12X10", color:"c" }, { id:"p04", cat:"prvky", name:"Zakládací U profil 6 m", desc:"Spodní základ stěny s vymezenými spárami pro žebra.", price:4890, unit:"ks", sku:"UP-600", color:"a" }, { id:"p05", cat:"prvky", name:"Věncový U profil 6 m", desc:"Horní uzavírací profil nosné konstrukce.", price:4990, unit:"ks", sku:"UP-V600", color:"b" }, { id:"p06", cat:"prvky", name:"Stěnový nosník (žebro) 3 m", desc:"Základní svislé žebro. OSB‑3 + KVH hranoly.", price:1290, unit:"ks", sku:"RIB-300", color:"c" }, { id:"p07", cat:"prvky", name:"Překlad 1250 mm", desc:"Typový překladový prvek pro okenní otvor.", price:890, unit:"ks", sku:"LIN-1250", color:"a" }, { id:"p08", cat:"prvky", name:"Parapetní žebro nízké 1200 mm", desc:"Pro osazení oken s výškou 600 mm.", price:690, unit:"ks", sku:"PAR-1200", color:"b" }, { id:"p09", cat:"prvky", name:"Parapetní žebro vysoké 1800 mm", desc:"Pro standardní okna výšky 1200 mm.", price:890, unit:"ks", sku:"PAR-1800", color:"c" }, { id:"p10", cat:"balicky", tag:"ÚSPORA", name:"Balíček 10× žebro", desc:"Sleva 8 % oproti kusové ceně. Zdarma doprava od 20 ks.", price:11890, unit:"bal", sku:"PKG-R10", color:"a" }, { id:"p11", cat:"balicky", name:"Startovní sada (pro zkoušku)", desc:"1× U profil, 4× žebro, 1× překlad. Pro první dílnu.", price:12490, unit:"sada", sku:"PKG-START", color:"b" }, { id:"p12", cat:"balicky", name:"Sada pro 1 stěnu 9 m", desc:"Kompletní sada prvků pro jednu obvodovou stěnu.", price:38900, unit:"sada", sku:"PKG-W9", color:"c" }, { id:"p13", cat:"sluzby", name:"Konzultace s projektantem (90 min)", desc:"Online schůzka nad vaším půdorysem. Zápis a doporučení.", price:2900, unit:"ks", sku:"SRV-CON", color:"a" }, { id:"p14", cat:"sluzby", name:"Doprava do 100 km", desc:"Od výrobny po stavbu. Paušál pro stavebnici bungalovu.", price:6900, unit:"ks", sku:"SRV-DLV", color:"b" }, { id:"p15", cat:"sluzby", tag:"VČETNĚ DOZORU", name:"Montáž nosné konstrukce", desc:"Tým + stavbyvedoucí. Cena dle výkazu, zde orientační paušál.", price:89000, unit:"projekt", sku:"SRV-ASM", color:"c" }, ]; // Visual placeholder for product tiles — schematic, brand-consistent function ProductVis({ color="a", kind="stavebnice" }) { const palettes = { a: ["var(--primary-soft)", "var(--primary)"], b: ["var(--accent-soft)", "var(--accent)"], c: ["var(--line)", "var(--fg)"], }; const [soft, strong] = palettes[color] || palettes.a; if (kind === "stavebnice") { return ( {/* grid */} {[...Array(9)].map((_,i)=>( ))} {/* bungalow silhouette */} {/* ribs */} {[50,70,90,110,130,150].map(x=>( ))} {/* window */} {/* door */} ); } if (kind === "prvky") { return ( {[60,80,100,120,140].map(x=>( ))} 625 mm raster ); } if (kind === "balicky") { return ( BALÍČEK ); } // sluzby return ( SLUŽBA ); } // Nav --------------------------------------------------------------------- function Nav({ page, setPage, cartCount, openCart }) { const links = [ { id:"home", label:"Úvod" }, { id:"system", label:"Jak funguje" }, { id:"skladba", label:"Skladba" }, { id:"config", label:"Konfigurátor" }, { id:"shop", label:"Stavebnice" }, { id:"kontakt", label:"Kontakt" }, ]; return ( ); } // Home page ---------------------------------------------------------------- function Home({ setPage, addToCart, cart, openCart }) { const featured = PRODUCTS.filter(p => p.cat === "stavebnice").slice(0,3); return (
{/* HERO */}
● Stavebnice pro stavbu svépomocí · rastr 625 mm · hrubá stavba za pár dní

Revoluce ve dřevostavbách.Postavte si dům sami.Jako velkou stavebnici.

STAV je modulový systém dřevostavby, který zvládnete v páru lidí. Málo typů dílů, jasné instrukce, díly do sebe zapadají v rastru 625 mm. Hrubá stavba bungalovu stojí za pomocí kamaráda během několika dní — a ušetříte stovky tisíc na práci.

2 lidi
Stačí na složení konstrukce
~3 dny
Hrubá stavba bungalovu
až − 70 %
Úspora oproti firmě na klíč
Model nosné konstrukce
{/* ground */} {/* bungalow */} {/* ribs every 625mm (scaled) */} {Array.from({length:11}).map((_,i)=>( ))} {/* openings */} {/* roof detail */} {/* dim */}
Bungalov 10 × 8 m
2 lidi · ~7 dní · hrubá stavba
{/* Trust bar */}
−70%
Třetinová cenaOproti firmě na klíč
Stačí dva lidiBez jeřábu, bez party řemeslníků
7d
Za pár dnů kostraMísto měsíců čekání na firmu
FIX
Fixní cena dopředuŽádné vícepráce, žádné překvapení
{/* Starting point — rozcestník */} {/* Bento — výhody systému */} {/* Features */}
Proč STAV

Úspora je v tom,
co nemusíte platit.

Firma na klíč účtuje práci, která vám bere největší část rozpočtu. STAV je navržený tak, abyste tu práci zvládli sami — díly nejsou těžké, postup je jednoduchý a rastr 625 mm odpouští začátečnické chyby. Co ušetříte, jde rovnou do bydlení.

{[ ["01","Díl unesete sami","Nejtěžší prvek pod 25 kg. Žádný jeřáb, žádná ČKD, žádný živnostník žádající připlácen."], ["02","4 typy dílů","Celý dům stoí na čtyřech prvcích. Nepletení, menší obávy, levější objednávka."], ["03","Návod krok za krokem","PDF i video. Žádné „nějak si to srovnejte“ — každý krok má obrázek, popis a kontrolní bod."], ["04","Rastr vás vede","Díly do sebe zapadají jen jedním způsobem. Když to nejde, je to chyba — a ví se kde."], ["05","Hrubá stavba za dny","Bungalov ve dvou lidech zvládnete za zhruba týden. Víkend tátův, víkend kamarádův — a kostra stojí."], ["06","Úspora až 70 %","Co byste zaplatili firmě za práci, můžete dát do oken, kuchyně nebo zahrady."], ].map(([n,t,d]) => (
— {n}

{t}

{d}

))}
{/* How it works */}
Jak to funguje

Od půdorysu po hotovou kostruza pár dní.

{[ ["01","Navrhnete","V konfigurátoru zadáte rozměry a okna. Cena a počet dílů se počítá živě."], ["02","Objednáte","Stavebnici dovezeme na pozemek. Bez prvotních záloh, bez týdnů čekání."], ["03","Složíte","Vy a jeden šikovný kamarád. Šroubovák, vodováha, návod. Hotovo za dny, ne měsíce."], ["04","Bydlíte","Máte postaveno za polovinu. Druhou polovinu máte volnou na dokončení nebo na život."], ].map(([n,t,d]) => (
{n}

{t}

{d}

))}
{/* Anatomy — exploded view */} {/* Configurator (live) */} {/* Variant compare */} {/* Size inspiration */} {/* Featured products */}
Typové konstrukce

Stavebnice, kterou
postavíte sami.

Tři prověřené velikosti bungalovu. Vyberete tu, která sedí vašemu pozemku, doladíte v konfigurátoru a máte kompletní sadu dílů — včetně návodu, který vás provádí krok za krokem.

{featured.map(p => ( setPage("detail", p.id)} onAdd={()=>addToCart(p)}/> ))}
{/* Srovnání: běžná dřevostavba vs STAV */}
Srovnání

Firma na klíč
vs. STAV ve dvou lidech.

Stejný dům, jiná cesta. Tady je, co ušetříte penězi, časem a nervy, když si stavbu vezmete do vlastních rukou.

Firma na klíč
  • Práce v ceněMzda parta a stavbyvedoucí je polovina rozpočtu.
  • Čekání na termín3–6 měsíců, než firma začne. Další měsíce na hrubou stavbu.
  • Vícepráce„To jsme nevěděli“ — cena na konci jiná než na začátku.
  • Žádná kontrola kvalityCo se stane pod izolací, vidí jen oni.
  • Půjde to ve váš čas?Stavba se neřídí vaším rozpočtem ani životem.
STAV svépomocí
  • Práce ušetřenáCo ušetříte na práci, dáte do oken, kuchyně nebo fotovoltaiky.
  • Začínáte kdy chceteDíly dovezeme na pozemek do týdnů. Montáž podle vašeho víkendu.
  • Cena se neměníVýkaz dílů → fixní cena. Žádné překvapení na konci.
  • Kontrola po celý časDáláte to vy. Víte přesně, co je v každém metru čtverečním.
  • Váš víkend, váš tempoSložíte za 3 víkendy, nebo za 3 týdny dovolené. Vaše volba.
{/* Co je / není součástí */}
Rozsah dodávky

Co dostanete
a co už si řešíte sami.

Bez kličkování. STAV je nosná konstrukce — okolo ní (izolace, krytina, instalace) doplníte věci sami nebo s lokálními řemeslníky. A tady máte přesný seznam, na co se chystat.

+

Dostanete od nás

  • Kompletní sadu dílů v rastru 625 mm
  • Návod krok za krokem (PDF + video)
  • Výkres rozmístění žeber a otvorů
  • Přípravu pro střechu (plochou/sedlovou/pultovou)
  • Kotvící a spojovací prvky
  • Telefonickou podporu po celý čas stavby

Vyříšíte si sami

  • Základovou desku (šikovný kamarád nebo lokální firma)
  • Tepelnou izolaci a opláštění (svépomocí)
  • Okna a dveře (máme typové rozměry, dodavatele si vyberete)
  • Střešní krytinu a klempířinu
  • Elektroinstalaci, vodu, topení
  • Vnitřní vrstvy, podlahy, povrchy
{/* CTA band */}

Přestaňte čekat
na firmu, která nemá čas.

Otevřete konfigurátor, vyberte velikost a za pár minut víte, kolik stavebnice stojí a kdy ji můžete vyzvednout. Stavbu si vezmete do vlastních rukou — a ušetříte stovky tisíc.

); } // Product card ------------------------------------------------------------- function ProductCard({ p, onOpen, onAdd }) { const [added, setAdded] = useState(false); const handle = (e) => { e.stopPropagation(); onAdd(); setAdded(true); setTimeout(()=>setAdded(false), 1200); }; return (
{p.tag && {p.tag}}
{CATEGORIES.find(c=>c.id===p.cat)?.label}

{p.name}

{p.desc}

{p.price.toLocaleString("cs-CZ")} Kč / {p.unit}
); } // Shop page ---------------------------------------------------------------- function Shop({ setPage, addToCart }) { const [cat, setCat] = useState("all"); const [q, setQ] = useState(""); const [sort, setSort] = useState("rel"); const [price, setPrice] = useState(500000); const items = useMemo(() => { let list = PRODUCTS.slice(); if (cat !== "all") list = list.filter(p => p.cat === cat); if (q) list = list.filter(p => (p.name+p.desc+p.sku).toLowerCase().includes(q.toLowerCase())); list = list.filter(p => p.price <= price); if (sort === "pa") list.sort((a,b)=>a.price-b.price); if (sort === "pd") list.sort((a,b)=>b.price-a.price); if (sort === "name") list.sort((a,b)=>a.name.localeCompare(b.name)); return list; }, [cat, q, sort, price]); return (
Stavebnice

Katalog typových konstrukcí a prvků.

Kompletní stavebnice pro typové bungalovy, jednotlivé prvky, zvýhodněné sady a navazující služby. Ceny jsou orientační; finální objednávku potvrzujeme dle projektu.

setQ(e.target.value)}/>
Nalezeno {items.length}
{items.map(p => ( setPage("detail", p.id)} onAdd={()=>addToCart(p)}/> ))} {items.length === 0 && (
Nic nenalezeno. Zkuste jiný filtr.
)}
); } // Product detail ----------------------------------------------------------- function Detail({ id, setPage, addToCart }) { const p = PRODUCTS.find(x => x.id === id) || PRODUCTS[0]; const [qty, setQty] = useState(1); const [thumb, setThumb] = useState(0); const [tab, setTab] = useState("desc"); const [added, setAdded] = useState(false); const handleAdd = () => { for (let i=0; isetAdded(false), 1500); }; return (
setPage("home")}>Úvod · setPage("shop")}> Stavebnice · {p.name}
{[0,1,2,3].map(i => (
setThumb(i)}>
))}
{p.sku} · Skladem (výroba 7–10 dní)

{p.name}

{p.desc}

{p.price.toLocaleString("cs-CZ")} Kč
bez DPH / {p.unit}
{(p.price*1.21).toLocaleString("cs-CZ", {maximumFractionDigits:0})} Kč s DPH
MateriálKVH + OSB‑3
Rastr625 mm
Šířka stěny240 mm
Hmotnost~{(p.price/1500).toFixed(0)} kg
VýrobaČR, Třebíč
PatentČR 310294
Množství
{qty}
= {(p.price*qty).toLocaleString("cs-CZ")} Kč
{[["desc","Popis"],["spec","Parametry"],["dod","Dodání"],["faq","FAQ"]].map(([id,l])=>( ))}
{tab==="desc" && <>

Prvek navržený podle patentu ČR č. 310294. Koncové části zapadají do spár v zakládacím a věncovém profilu — žádné individuální vyměřování, žádné tesařské improvizace.

Systém je konstrukční platforma. Finální návrh každého objektu musí být ověřen autorizovaným projektantem a statikem podle konkrétních podmínek stavby.

} {tab==="spec" &&
  • Materiál: OSB‑3 15 × 3000 × 1250 mm + KVH 40 × 60 × 4000 mm
  • Osová vzdálenost žeber: 625 mm
  • Vhodné pro bungalovy do 150 m²
  • Montáž v rastru 625 mm bez individuálního vyměřování
} {tab==="dod" && <>

Výroba 7–10 pracovních dní po potvrzení objednávky. Doprava na stavbu dle lokality — kalkulujeme paušálně pro 100/200/300+ km.

Samostatné prvky posíláme balíkovou službou, kompletní stavebnice vlastní logistikou.

} {tab==="faq" && <>

Mohu stavět svépomocí? Ano. Systém je navržen pro srozumitelnou montáž. Přesto musí stavba probíhat podle projektové dokumentace a platných předpisů.

Co není součástí? Opláštění, izolace, fasáda, okna, střešní krytina, instalace, základová deska.

}
); } // System page (jak funguje) ----------------------------------------------- function SystemPage({ setPage }) { return (
Konstrukční systém

Čtyři prvky. Jeden modul. Celá kostra domu.

STAV stojí na drobném souboru opakovatelných dílů, které do sebe zapadají v rastru 625 mm. Zakládací U profil určuje polohu žeber, žebra tvoří svislou kostru, věncový profil konstrukci uzavírá a doplňky vytvářejí otvory.

{[ ["Zakládací U profil","Spodní základ stěny. Vymezené spáry určují polohu nosníků a omezují chyby na stavbě."], ["Stěnový nosník (žebro)","Svislá kostra stěny. OSB‑3 deska po stranách s KVH hranoly tvoří tuhý lehký prvek."], ["Věncový U profil","Horní uzavírací profil. Stejný princip vymezených spár jako u zakládacího profilu."], ["Doplňkové prvky","Překlady, parapetní žebra a kratší nosníky pro okna a dveře v typových rozměrech."], ].map(([t,d],i)=>(
0{i+1}

{t}

{d}

))}
Logika rastru

Proč zrovna 625 mm.

Modul 625 mm je standardní osová vzdálenost pro dřevěné rámové konstrukce. Vychází z formátů desek a izolací, takže navazující vrstvy stavby se k němu chovají přirozeně. Konstrukce z toho profituje hned třikrát: jasná pozice prvků, méně řezání, kratší kontrola na stavbě.

Materiál
  • KVH hranolyKonstrukční smrkové dřevo s definovanou vlhkostí.
  • OSB‑3 deskyStabilní opláštění pro nosné stěnové prvky.
  • Suchý procesKonstrukce postupuje rychle, bez technologických přestávek na vyzrání.
Práce na stavbě
  • Předem dané poziceSpáry v profilu určují, kam který prvek patří.
  • Méně řezání na míruVětšina prvků je v typových délkách. Atypů je málo.
  • Kontrolovatelný postupNávod popisuje pořadí montáže krok za krokem.

Chcete vidět, jak vychází vaše dispozice.

Otevřete konfigurátor a projděte si půdorys, otvory a typ střechy. Orientační výkaz prvků máte za pár minut.

); } // Skladba page — doporučená skladba pro pasivní dům ---------------------- function SkladbaPage({ setPage }) { const wall = [ ["Sádrokarton protipožární", "12,5 mm", "cca 10,5 kg/m²", "10,5 kg/m²"], ["OSB 3", "15 mm", "cca 630 kg/m³", "9,5 kg/m²"], ["PUR pěna otevřená", "250 mm", "cca 10 kg/m³", "2,5 kg/m²"], ["Fasádní deska Naturheld WAND 140", "140 mm", "140 kg/m³", "19,6 kg/m²"], ["Tenkovrstvá omítka + stěrka + síť", "—", "cca 7 kg/m²", "7,0 kg/m²"], ]; const ceiling = [ ["SDK protipožární", "12,5 mm", "cca 10,5 kg/m²", "10,5 kg/m²"], ["OSB 3", "15 mm", "cca 630 kg/m³", "9,5 kg/m²"], ["CD profily", "—", "orientačně dle roštu", "2,5 kg/m²"], ["PUR pěna otevřená", "350 mm", "cca 10 kg/m³", "3,5 kg/m²"], ]; const perBm = [ ["2,5 m", "cca 125 kg/bm", "cca 1,23 kN/bm"], ["2,7 m", "cca 135 kg/bm", "cca 1,32 kN/bm"], ["3,0 m", "cca 150 kg/bm", "cca 1,47 kN/bm"], ]; const tableStyle = { width:"100%", borderCollapse:"collapse", fontSize:14, background:"var(--card,#fff)", border:"1px solid var(--border,#e5e3dd)", borderRadius:10, overflow:"hidden", }; const th = { textAlign:"left", padding:"12px 14px", background:"var(--bg-2,#f6f4ee)", fontWeight:600, fontSize:12, letterSpacing:".04em", textTransform:"uppercase", color:"var(--muted,#6b6a64)", borderBottom:"1px solid var(--border,#e5e3dd)" }; const td = { padding:"12px 14px", borderTop:"1px solid var(--border,#e5e3dd)", verticalAlign:"top" }; const tdNum = { ...td, fontFamily:"var(--font-mono)", whiteSpace:"nowrap" }; const Result = ({ title, mass, kn }) => (
Výsledek

{title}

Hmotnost
{mass}
Stálé zatížení
{kn}
); return (
Skladba konstrukce

Doporučená skladba pro pasivní dům

Difúzně otevřená stěna a strop, navržené pro nízkoenergetický a pasivní standard. Hodnoty počítáme bez nosných prvků (sloupky, trámy, krokve, latě, kotvení). U stropu uvažujeme jen uvedené vrstvy včetně CD profilů.

Použitý převod: 1 kg/m² ≈ 0,00981 kN/m²

Skladba stěny — pasivní dům
Schéma vrstev difúzně otevřené stěny — od interiéru po fasádu.
{/* Stěna */}
1) Stěna difúzně otevřená

Vrstvy stěnové konstrukce

{wall.map((r,i)=>( ))}
Vrstva Tloušťka Uvažovaná objemová / plošná hmotnost Hmotnost
{r[0]} {r[1]} {r[2]} {r[3]}

U desky Naturheld WAND 140 vychází hmotnost z objemové hmotnosti 140 kg/m³ uvedené v technických údajích výrobku.

Přepočet na běžný metr
{perBm.map((r,i)=>( ))}
Výška stěny Hmotnost / bm Zatížení / bm
{r[0]} {r[1]} {r[2]}
{/* Strop */}
2) Strop difúzně otevřený

Vrstvy stropní konstrukce

{ceiling.map((r,i)=>( ))}
Vrstva Tloušťka Uvažovaná objemová / plošná hmotnost Hmotnost
{r[0]} {r[1]} {r[2]} {r[3]}
{/* Souhrn */}
Souhrn

Hmotnosti a stálá zatížení

Konstrukce Hmotnost Stálé zatížení
Stěna difúzně otevřená cca 50 kg/m² cca 0,49 kN/m²
Strop difúzně otevřený cca 26 kg/m² cca 0,25 kN/m²
Pro statický výpočet
  • Stěna0,50 až 0,55 kN/m² — bezpečnější uvažovaná hodnota.
  • Strop0,25 až 0,30 kN/m² — bezpečnější uvažovaná hodnota.
Hlavní nejistoty
  • SDK deskaPřesná hmotnost se mezi výrobci liší.
  • PUR pěna otevřenáHustota kolísá v rozsahu výrobní tolerance.
  • CD rošt a omítkaSkladba roštu a tloušťka stěrkové vrstvy.

Navrhněte si dům s touto skladbou.

V konfigurátoru projdete dispozici, otvory a typ střechy. Skladbu stěn a stropů uvidíte v orientačním výkazu prvků.

); } // Configurator page — redirects to home embed ----------------------------- function ConfigPage({ setPage }) { React.useEffect(() => { setPage("home"); setTimeout(() => { const el = document.getElementById("konfigurator"); if (el) el.scrollIntoView({ behavior: "smooth", block: "start" }); }, 60); }, []); return null; } // Contact page ------------------------------------------------------------- function ContactPage({ setPage }) { const [sent, setSent] = useState(false); return (
Kontakt

Máte dotaz k systému nebo konfiguraci?

Návrh domu si připravíte sami v konfigurátoru — výkaz prvků a orientační cenu máte za pár minut. Tady jsme pro doplňující dotazy ke stavebnici, dopravě, montáži nebo ke konkrétní položce z výkazu.

{sent ? (

Děkujeme za zprávu

Ozveme se do dvou pracovních dnů s odpovědí na váš dotaz.

) : (
{e.preventDefault();setSent(true);}}>
)}

STAV systém

Roman Budějovský
Třebíč, Česká republika

☎ 777 794 483
✉ info@stav-system.cz

S čím vám tu pomůžeme

  • Dotazy k položkám z výkazu konfigurátoru
  • Doprava, termín dodání, montáž
  • Technické dotazy ke skladbě a systému
  • Objednání po dokončené konfiguraci

Ještě nemáte návrh?

); } // Cart drawer -------------------------------------------------------------- function CartDrawer({ open, onClose, cart, setCart, setPage }) { const subtotal = cart.reduce((s,i)=>s+i.price*i.qty, 0); const vat = subtotal * 0.21; const total = subtotal + vat; const setQty = (id, d) => setCart(c => c.map(i => i.id===id ? {...i, qty:Math.max(1,i.qty+d)} : i)); const remove = (id) => setCart(c => c.filter(i => i.id !== id)); return ( <>
); } // Checkout ----------------------------------------------------------------- function CartPage({ cart, setCart, setPage }) { const [pay, setPay] = useState("card"); const subtotal = cart.reduce((s,i)=>s+i.price*i.qty, 0); const ship = cart.length > 0 ? 890 : 0; const vat = (subtotal+ship) * 0.21; const total = subtotal + ship + vat; return (
Pokladna

Dokončit objednávku

01 Údaje
02 Doprava
03 Platba
04 Shrnutí

Kontaktní a dodací údaje

Způsob platby

{[ ["card","Kartou online","VISA"], ["bank","Bankovní převod","BANK"], ["cod","Na fakturu (pro firmy)","FA"], ].map(([id,l,pi])=>(
setPay(id)}>
{pi}
{l}
))}
); } // Footer ------------------------------------------------------------------- function SiteFooter({ setPage }) { return ( ); } // Main App ----------------------------------------------------------------- function App() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); const [page, setPageRaw] = useState("home"); const [detailId, setDetailId] = useState("p01"); const [cart, setCart] = useState([]); const [cartOpen, setCartOpen] = useState(false); const setPage = (p, id) => { if (p === "detail" && id) setDetailId(id); setPageRaw(p); window.scrollTo({top:0, behavior:"smooth"}); }; const addToCart = (p) => { setCart(c => { const existing = c.find(i => i.id === p.id); if (existing) return c.map(i => i.id === p.id ? {...i, qty:i.qty+1} : i); return [...c, {...p, qty:1}]; }); setCartOpen(true); }; useEffect(() => {}, []); const cartCount = cart.reduce((s,i)=>s+i.qty, 0); return ( <>