// App — arranges the three table-card variations inside a design canvas. // Each variation gets its own artboard showing a 4×2 mini-grid of mixed statuses // so you can see how they read together, plus a separate artboard showing // hover/pressed states. const { DesignCanvas, DCSection, DCArtboard } = window; const { TableCardV1, TableCardV2, TableCardV3 } = window; // Shared dataset — same across all variations so they compare fairly const TABLES = [ { name: 'A1', status: 'occupied', amount: 84.50, occupiedMins: 42, waiters: ['Marco Riva'], flags: [] }, { name: 'A2', status: 'occupied', amount: 127.20, occupiedMins: 98, waiters: ['Sofia Greco'], flags: ['VIP'] }, { name: 'A3', status: 'open', amount: null, occupiedMins: null, waiters: [], flags: [] }, { name: 'A4', status: 'alert', amount: 56.00, occupiedMins: 73, waiters: ['Luca Bianchi'], flags: ['Allergy'] }, { name: 'B1', status: 'reserved', amount: null, occupiedMins: null, waiters: ['Elena Costa'], flags: ['Birthday'] }, { name: 'B2', status: 'occupied', amount: 212.80, occupiedMins: 115,waiters: ['Marco Riva', 'Sofia Greco', 'Luca Bianchi', 'Elena Costa'], flags: ['VIP'] }, { name: 'B3', status: 'dirty', amount: null, occupiedMins: null, waiters: [], flags: [] }, { name: 'B4', status: 'occupied', amount: 38.00, occupiedMins: 14, waiters: ['Luca Bianchi', 'Elena Costa'], flags: [] }, ]; // Interaction states preview — shows the SAME card in 4 states side by side const STATE_CARD = { name: 'A2', status: 'occupied', amount: 127.20, occupiedMins: 98, waiters: ['Sofia Greco'], flags: ['VIP'] }; function TableGrid({ Card }) { return (
{TABLES.map((t, i) => )}
); } function StatesStrip({ Card, label }) { // Render four copies with simulated states by forcing CSS return (
{['Default', 'Hover', 'Pressed', 'Selected'].map((state) => (
{state}
{state === 'Selected' && (
)}
))}
{/* Style overrides to force hover/pressed on the middle two */}
); } function App() { return ( ); } const root = ReactDOM.createRoot(document.getElementById('root')); root.render();