// Root app — wires everything together + Tweaks const { BrandMark, UtilityStrip, Header, Hero, Marquee, Worlds, Picks, aed } = window.__sfApp1; const { Editorial, HiddenPlayground, Values, Brands, Gifting, Visit, Happenings, Footer, CartDrawer, Toast } = window.__sfApp2; const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": "berry", "heroStyle": "magazine", "heroMotifs": true, "headline": "world", "marquee": true, "density": "comfortable" }/*EDITMODE-END*/; // Palette variants — all stay in the brief's spirit (warm paper + berry/sage/sun) const PALETTES = { berry: { label: "Berry (default)", swatch: ["#FBF4EE", "#C0436A", "#7FA66A", "#E9B44C"], vars: {} // brief defaults }, terracotta: { label: "Terracotta morning", swatch: ["#FBF4EE", "#C76B3F", "#7FA66A", "#E9B44C"], vars: { "--primary": "#C76B3F", "--primary-ink": "#9A4F2A", "--focus": "#E27A4F" } }, sage: { label: "Sage hour", swatch: ["#FBF4EE", "#7FA66A", "#C0436A", "#E9B44C"], vars: { "--primary": "#4F7341", "--primary-ink": "#365228", "--focus": "#7FA66A" } }, plum: { label: "Plum dusk", swatch: ["#FBF4EE", "#7B3A66", "#E9B44C", "#7FA66A"], vars: { "--primary": "#7B3A66", "--primary-ink": "#5A2649", "--focus": "#A85C8E" } }, }; function App() { const t = window.useTweaks(TWEAK_DEFAULTS); const tweaks = t[0]; const setTweak = t[1]; const [cart, setCart] = React.useState([]); const [cartOpen, setCartOpen] = React.useState(false); const [toast, setToast] = React.useState(""); const [locale, setLocale] = React.useState("en"); const toastTimer = React.useRef(); // Apply palette CSS vars React.useEffect(() => { const root = document.documentElement; // reset first ["--primary","--primary-ink","--focus"].forEach(v => root.style.removeProperty(v)); const vars = PALETTES[tweaks.palette]?.vars || {}; Object.entries(vars).forEach(([k, v]) => root.style.setProperty(k, v)); }, [tweaks.palette]); // Apply RTL when Arabic is selected React.useEffect(() => { document.documentElement.dir = locale === "ar" ? "rtl" : "ltr"; document.documentElement.lang = locale; }, [locale]); const addToCart = (p) => { if (!p) return; setCart(prev => { const found = prev.find(x => x.id === p.id); if (found) return prev.map(x => x.id === p.id ? { ...x, qty: x.qty + 1 } : x); return [...prev, { ...p, qty: 1 }]; }); setToast(`Added · ${p.title}`); clearTimeout(toastTimer.current); toastTimer.current = setTimeout(() => setToast(""), 1800); }; const changeQty = (id, qty) => setCart(prev => prev.map(x => x.id === id ? { ...x, qty } : x)); const removeItem = (id) => setCart(prev => prev.filter(x => x.id !== id)); const jumpTo = (id) => { if (id === "top") return window.scrollTo({ top: 0, behavior: "smooth" }); const el = document.getElementById(id); if (el) { const y = el.getBoundingClientRect().top + window.scrollY - 90; window.scrollTo({ top: y, behavior: "smooth" }); } }; const cartCount = cart.reduce((s, x) => s + x.qty, 0); // Tweakable hero headline variants const headlineVariants = { world: <>A world of magic& imagination forthe next generation.>, curated: <>Objects, curated the waygrown-ups choose art.>, playground: <>A strawberry tuckedbetween the galleries.>, }; return ( <> setCartOpen(true)} locale={locale} onLocale={setLocale} onJump={jumpTo} /> {tweaks.heroStyle === "magazine" ? ( jumpTo("worlds")} onPlayground={() => jumpTo("playground")} onAdd={addToCart} /> ) : ( {tweaks.heroMotifs && ( <> > )} A curated children's design house {headlineVariants[tweaks.headline] || headlineVariants.world} Five hundred and fifteen carefully chosen objects from forty-eight design houses — and a real-life Hidden Playground at Alserkal Avenue, Dubai. Sustainable, design-led, parent-trusted. jumpTo("worlds")}> Step into the shop → jumpTo("playground")}>Visit the Hidden Playground 515objects in store 48design houses WH G58Alserkal Avenue, Dubai Little Lights · Train Hibou Home · Wallpaper )} {tweaks.marquee && } setCartOpen(false)} onChange={changeQty} onRemove={removeItem} /> {/* Tweaks */} ({ value: k, label: v.label }))} onChange={v => setTweak("palette", v)} /> {(PALETTES[tweaks.palette]?.swatch || []).map((c, i) => ( ))} setTweak("heroStyle", v)} /> setTweak("headline", v)} /> setTweak("heroMotifs", v)} /> setTweak("marquee", v)} /> { addToCart(PRODUCTS[0]); setCartOpen(true); }}>Add wooden kitchen → open bag { setLocale(locale === "en" ? "ar" : "en"); }}>Toggle EN ↔ ع (RTL) jumpTo("playground")}>Jump to Hidden Playground > ); } ReactDOM.createRoot(document.getElementById("root")).render();
Five hundred and fifteen carefully chosen objects from forty-eight design houses — and a real-life Hidden Playground at Alserkal Avenue, Dubai. Sustainable, design-led, parent-trusted.