// Main app — menu list in an iOS frame, tap an item to open the drawer const { IOSDevice } = window; const { MENU, DIAVOLA, OrderDrawer } = window; function MenuItemRow({ item, onTap, badge }) { const [pressed, setPressed] = React.useState(false); return (
setPressed(true)} onMouseUp={() => setPressed(false)} onMouseLeave={() => setPressed(false)} onClick={onTap} style={{ display: 'flex', alignItems: 'center', gap: 14, padding: '14px 16px', background: pressed ? 'var(--ink-100)' : 'white', border: '1px solid var(--ink-100)', borderRadius: 14, cursor: 'pointer', transition: 'background 120ms ease, transform 100ms ease', transform: pressed ? 'scale(0.99)' : 'scale(1)', position: 'relative', }} >
{item.emoji}
{item.name}
{item.desc}
€{item.price.toFixed(2)}
{badge > 0 && (
{badge}
)}
); } function MenuScreen({ onTapItem, orderCounts }) { const categories = [ { label: 'All', active: true }, { label: 'Pizza' }, { label: 'Pasta' }, { label: 'Desserts' }, { label: 'Drinks' }, ]; return (
{/* Top bar */}
TABLE B2
· 4 guests · Marco
Cart 3
Add item
{categories.map(c => ( ))}
{/* Menu list */}
{MENU.map(item => ( onTapItem(item)} /> ))}
{/* Hint banner when drawer not open */}
Tap "Pizza Diavola" to open the drawer
); } function App() { const [drawerOpen, setDrawerOpen] = React.useState(true); // open by default so the design is immediately visible const [orderCounts, setOrderCounts] = React.useState({ margherita: 2, coke: 1 }); // Tapping a menu item: for this demo only Diavola has a full spec, // so we always feed the drawer the Diavola config but show the tap behavior. const openDrawer = (_item) => setDrawerOpen(true); const closeDrawer = () => setDrawerOpen(false); const handleAdd = ({ product, qty }) => { setOrderCounts(prev => ({ ...prev, [product.id]: (prev[product.id] || 0) + qty })); setDrawerOpen(false); }; return (
); } const root = ReactDOM.createRoot(document.getElementById('root')); root.render();