/* App root — view router, tweaks, language, enquiry modal state */
const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{
"palette": "marina",
"type": "serif-inter",
"lang": "en",
"density": "default",
"fab": "panel",
"heroLayout": "marquee"
}/*EDITMODE-END*/;
const App = () => {
const [tweaks, setTweak] = window.useTweaks(TWEAK_DEFAULTS);
const [view, setView] = React.useState({ name: 'home' });
const [enquiry, setEnquiry] = React.useState({ open: false, category: null, message: '' });
// Sync html attributes for palette/type/density/lang/dir
React.useEffect(() => {
const html = document.documentElement;
if (tweaks.palette && tweaks.palette !== 'marina') html.setAttribute('data-palette', tweaks.palette);
else html.removeAttribute('data-palette');
if (tweaks.type && tweaks.type !== 'serif-inter') html.setAttribute('data-type', tweaks.type);
else html.removeAttribute('data-type');
if (tweaks.density && tweaks.density !== 'default') html.setAttribute('data-density', tweaks.density);
else html.removeAttribute('data-density');
html.lang = tweaks.lang || 'en';
html.dir = tweaks.lang === 'ar' ? 'rtl' : 'ltr';
}, [tweaks.palette, tweaks.type, tweaks.density, tweaks.lang]);
// Scroll to top on view change
React.useEffect(() => { window.scrollTo({ top: 0, behavior: 'instant' }); }, [view.name, view.id]);
const openEnquiry = (cat, msg) => {
// cat can be a category object, a string id, or null
let category = null;
if (cat && typeof cat === 'object' && cat.id) category = cat;
else if (typeof cat === 'string') category = window.BENO.categories.find(c => c.id === cat) || null;
setEnquiry({ open: true, category, message: typeof cat === 'string' && !category ? cat : (msg || '') });
};
const navHandlers = {
onNav: v => setView(v),
onCategory: id => setView({ name: 'category', id }),
onExperience: id => setView({ name: 'experience', id }),
onEnquire: (cat, msg) => openEnquiry(cat, msg),
};
const dark = view.name === 'home' || view.name === 'rentals' || view.name === 'experiences' || view.name === 'category' || view.name === 'experience' || view.name === 'about';
// Nav is dark when first thing after it is dark — home/category/about have dark heroes
const navDark = ['home', 'rentals', 'category', 'experiences', 'experience', 'about'].includes(view.name);
return (
);
};
ReactDOM.createRoot(document.getElementById('root')).render();