// STAV — Home extras: rozcestník, anatomie, varianty, upload, inspirace, sticky panel
const { useState: useStateE, useRef: useRefE, useEffect: useEffectE } = React;
/* =================================================================
1. ROZCESTNÍK — "Vyberte, odkud začínáte"
================================================================= */
function StartingPoint({ setPage }) {
const items = [
{ id:"idea", title:"Mám jen nápad", desc:"Pomůžeme najít typovou konstrukci, která sedí.", cta:"Najít typ →", target:"shop", icon:"💡" },
{ id:"plan", title:"Mám půdorys", desc:"Otevřete konfigurátor a převeďte ho do modulu 625 mm.", cta:"Otevřít konfigurátor →", target:"config", icon:"📐" },
{ id:"bungalow", title:"Chci bungalov", desc:"Začněte z ověřeného tvaru a upravte si rozměry.", cta:"Vybrat konstrukci →", target:"shop", icon:"🏠" },
{ id:"pro", title:"Jsem projektant", desc:"Technické prvky, modul, exporty pro projekt.", cta:"Zobrazit prvky →", target:"system", icon:"📊" },
];
const handleClick = (target) => {
if (target === "upload") {
const el = document.getElementById("upload-section");
if (el) el.scrollIntoView({ behavior: "smooth", block: "start" });
} else {
setPage(target);
}
};
return (
Vyberte, odkud začínáte
Kde se v projektu právě teď nacházíte?
Každá cesta vede k modulu 625 mm — jen jinou rychlostí. Vyberte, co o stavbě víte, a budeme pokračovat odtamtud.
{items.map((i, idx) => (
))}
);
}
/* =================================================================
2. INTERAKTIVNÍ ANATOMIE — exploded view
================================================================= */
function Anatomy({ setPage }) {
const [active, setActive] = useStateE("rib");
const parts = {
base: { name:"Základová deska", use:"Hrubá rovina pro založení konstrukce.", count:"1×", price:"Není v dodávce" },
uprofile:{ name:"Zakládací U profil", use:"Spodní vymezení stěny, drží žebra v rastru.", count:"~16 ks", price:"od 4 890 Kč / 6 m" },
rib: { name:"Nosné žebro", use:"Svislý nosný prvek v rastru 625 mm.", count:"~52 ks", price:"od 1 290 Kč / ks" },
lintel: { name:"Překlad nad otvory", use:"Přenáší zatížení nad okny a dveřmi.", count:"~8 ks", price:"od 890 Kč / ks" },
crown: { name:"Věncový U profil", use:"Horní uzavírací prvek konstrukce.", count:"~16 ks", price:"od 4 990 Kč / 6 m" },
roof: { name:"Napojení střechy", use:"Příprava pro plochou / sedlovou / pultovou.", count:"varianta", price:"podle typu" },
};
const layers = ["base","uprofile","rib","lintel","crown","roof"];
return (
Interaktivní anatomie
Z čeho se konstrukce
skládá. Vrstva po vrstvě.
Klikněte na prvek a zobrazí se jeho funkce, počet v typové konstrukci a orientační cena. Žádné PDF — interaktivně.
{layers.map((id,i)=>(
))}
Detail prvku
{parts[active].name}
{parts[active].use}
V typové konstrukci{parts[active].count}
Cena{parts[active].price}
);
}
/* =================================================================
3. POROVNÁNÍ VARIANT
================================================================= */
function VariantCompare({ setPage, addToCart }) {
const variants = [
{ id:"v60", name:"Bungalov 9 × 7", area:63, size:"14 × 10 modulů", ribs:52, price:220500, diff:"2 lidi · víkend", popular:false },
{ id:"v80", name:"Bungalov 10 × 8", area:80, size:"16 × 12 modulů", ribs:62, price:280000, diff:"2 lidi · ~7 dní", popular:true },
{ id:"v100", name:"Bungalov 12 × 10", area:120, size:"19 × 16 modulů", ribs:84, price:420000, diff:"3 lidi · ~10 dní", popular:false },
];
return (
Porovnání variant
Která velikost dává smysl?
Tři typové konstrukce vedle sebe. Stejný systém, jiná plocha. Vyberte výchozí bod a doladíme v konfigurátoru.
{variants.map(v => (
{v.popular &&
Nejčastější volba
}
{v.name}
))}
{[
["Užitná plocha", v=>`${v.area} m²`],
["Modul", v=>v.size],
["Nosných žeber", v=>`${v.ribs} ks`],
["Montáž svépomocí", v=>v.diff],
["Cena konstrukce", v=>`od ${v.price.toLocaleString("cs-CZ")} Kč`],
["Vhodné pro", v=>v.area<=70 ? "1–2 osoby" : v.area<=90 ? "rodinu 3+" : "rodinu 4+ s rezervou"],
].map(([label, fn], i) => (
{label}
{variants.map(v => (
{fn(v)}
))}
))}
{variants.map(v => (
))}
);
}
/* =================================================================
4. UPLOAD PŮDORYSU
================================================================= */
function UploadPlan({ setPage }) {
const [file, setFile] = useStateE(null);
const [drag, setDrag] = useStateE(false);
const [sent, setSent] = useStateE(false);
const inputRef = useRefE(null);
const onDrop = (e) => { e.preventDefault(); setDrag(false); if (e.dataTransfer.files[0]) setFile(e.dataTransfer.files[0]); };
const onFile = (e) => { if (e.target.files[0]) setFile(e.target.files[0]); };
const submit = (e) => { e.preventDefault(); setSent(true); setTimeout(()=>setSent(false), 3000); };
return (
Máte půdorys?
Nahrajte ho. Ověříme, jestli
jde převést do modulu 625 mm.
Stačí PDF, JPG, PNG nebo DWG. Do 24 hodin se ozveme s odhadem proveditelnosti, počtem prvků a orientační cenou.
);
}
/* =================================================================
5. INSPIRACE PODLE VELIKOSTI
================================================================= */
function SizeInspiration() {
const [size, setSize] = useStateE("60-80");
const sizes = [
{ id:"-40", label:"do 40 m²", use:"studio · home office · zahradní pokoj" },
{ id:"40-60", label:"40–60 m²", use:"přístavba · víkendová chata · garsonka" },
{ id:"60-80", label:"60–80 m²", use:"bungalov pro pár · 2+kk · 3+kk kompakt" },
{ id:"80-100", label:"80–100 m²", use:"rodinný bungalov · 3+kk komfort · 4+kk" },
{ id:"100+", label:"100+ m²", use:"větší rodina · 4+kk · 5+kk · pracovna" },
];
const examples = {
"-40": [["Studio 6×4","24 m²","1+kk","bydlení / dílna"], ["Zahradní pokoj 5×4","20 m²","1 prostor","klid / práce"], ["Modul 4×4","16 m²","sklad / wellness","přístavba"]],
"40-60": [["Přístavba 8×5","40 m²","2 místnosti","rozšíření domu"], ["Chata 8×6","48 m²","2+kk","víkend"], ["Garsonka 10×5","50 m²","1+kk","kompakt"]],
"60-80": [["Bungalov 9×7","63 m²","2+kk","pár"], ["Bungalov 10×7","70 m²","3+kk","mladá rodina"], ["Bungalov 10×8","80 m²","3+kk","rodina 3+"]],
"80-100": [["Bungalov 11×8","88 m²","3+kk komfort","rodina 3+"], ["Bungalov 11×9","99 m²","4+kk","rodina 4"], ["L bungalov 10×10","100 m²","4+kk","atrium"]],
"100+": [["Bungalov 12×10","120 m²","4+kk","rodina 4+"], ["L bungalov 13×10","130 m²","5+kk","velká rodina"], ["Bungalov 14×11","154 m²","5+kk + pracovna","komfort"]],
};
return (
Inspirace podle velikosti
Kolik domu se vejde
do vaší plochy?
Vyberte velikost a uvidíte, co v ní typicky funguje. Konkrétní rozměry pak doladíte v konfigurátoru.
{sizes.map(s => (
))}
{examples[size].map(([name,area,layout,target],i) => (
{name}
Plocha{area}
Dispozice{layout}
Vhodné pro{target}
))}
);
}
/* =================================================================
6. STICKY PROJEKTOVÝ PANEL — bottom on mobile, top-right on desktop
================================================================= */
function ProjectPanel({ cart, setPage, openCart }) {
const count = cart.reduce((s,i)=>s+i.qty, 0);
const total = cart.reduce((s,i)=>s+i.price*i.qty, 0);
if (count === 0) return null;
return (
Moje konfigurace
{count} položek
·
od {total.toLocaleString("cs-CZ")} Kč
);
}
/* =================================================================
7. BENTO GRID — výhody systému
================================================================= */
function Bento({ setPage }) {
return (
Proč STAV
Šest věcí,
které dělají rozdíl.
— 01 · Modul 625 mm
Stejný rastr.
Po celou stavbu.
Žebra, otvory, profily — vše respektuje jeden modul. Odpadají individuální korekce a tolerance.
— 02 · Výkaz online
Soupis prvků
za pár minut.
Konfigurátor spočítá počet žeber, profilů a překladů automaticky.
— 03 · Cena ihned
Orientace
v reálném čase.
Při každé změně rozměru uvidíte aktualizovanou cenu konstrukce.
— 04 · Buildability
Návrh sám
kontroluje pravidla.
Modulové rozměry, počet otvorů, vhodnost střechy. Skóre 0–100 % řekne, kdy je čas zavolat projektantovi.
— 05 · 4 typy prvků
Méně dílů.
Jednodušší logika.
U profil, žebro, věncový profil, doplňky pro otvory. To je celá sada.
— 06 · Svépomocí
Postup, který
se dá pochopit.
Prvky do sebe zapadají v definovaných pozicích. Žádné improvizace.
);
}
Object.assign(window, { StartingPoint, Anatomy, VariantCompare, UploadPlan, SizeInspiration, ProjectPanel, Bento });