import React, { useState, createContext, useContext } from 'react'; import { View, Text, Pressable } from 'react-native'; import { ThemeProvider, useT, T, Screen, Scroll, Header, NavBar, Card, Group, Row, Button, Segmented, Chip, Pill, Stat, Progress, TabBar, Tabs, Stack, Sheet, Icon, Spacer, SectionTitle, Gradient, alpha } from './ui/kit'; const ACCENT = '#C08457'; const THEME = { dark: { bg: '#100C09', card: '#1C1612', card2: '#29201A', line: '#2E251E', text2: '#A6968A', text3: '#6D5F54' }, light: { bg: '#F8F3EE', card: '#FFFFFF', card2: '#EFE4DA' } }; const MENU = [ { id: 1, name: 'Flat white', price: 4.2, emoji: 'โ˜•', c: '#C08457', sizes: ['S', 'M', 'L'] }, { id: 2, name: 'Cold brew', price: 4.8, emoji: '๐ŸงŠ', c: '#5B7C99', sizes: ['M', 'L'] }, { id: 3, name: 'Cortado', price: 3.9, emoji: '๐Ÿฅ›', c: '#A3734F', sizes: ['S'] }, { id: 4, name: 'Matcha latte', price: 5.1, emoji: '๐Ÿต', c: '#7CA667', sizes: ['S', 'M', 'L'] }, { id: 5, name: 'Cardamom bun', price: 3.6, emoji: '๐Ÿฅ', c: '#D4A05B', sizes: [] }, { id: 6, name: 'Banana bread', price: 3.2, emoji: '๐Ÿž', c: '#B07B4F', sizes: [] }, ]; const Store = createContext(null); const usd = (n) => '$' + n.toFixed(2); function HomeScreen({ nav }) { const t = useT(); const { stamps, orders } = useContext(Store); const need = 10; return (
} /> nav.push('rewards')}> {stamps >= need ? 'Free drink unlocked' : (need - stamps) + ' more for a free cup'} {Array.from({ length: need }).map((_, i) => ( ))} Every drink earns a stamp. Pastries earn double on Tuesdays. {}} /> {MENU.slice(0, 4).map((m) => ( nav.push('item', { id: m.id })}> {m.emoji} {m.name} {usd(m.price)} ))} Roast ยท Market StreetOpen until 18:00 ยท 4 min walk ยท no queue {orders.map((o, i) => )} ); } function OrderScreen({ nav }) { const t = useT(); const [cat, setCat] = useState('Drinks'); const list = MENU.filter((m) => (cat === 'Drinks' ? m.sizes.length > 0 : m.sizes.length === 0)); return (
{list.map((m) => nav.push('item', { id: m.id })} />)} ); } function RewardsScreen() { const t = useT(); const { stamps } = useContext(Store); return (
760 points to Platinum: free size upgrades, birthday pastry. } /> {}} /> {}} /> ); } function ItemDetail({ nav, params }) { const t = useT(); const { order } = useContext(Store); const m = MENU.find((x) => x.id === params.id) || MENU[0]; const [size, setSize] = useState(m.sizes[1] || m.sizes[0] || ''); const [milk, setMilk] = useState('Oat'); const [done, setDone] = useState(false); const extra = size === 'L' ? 0.6 : size === 'M' ? 0.3 : 0; return ( {m.emoji} {m.name} {usd(m.price + extra)} {m.sizes.length ? ( {['Whole', 'Oat', 'Almond', 'Skimmed'].map((x) => setMilk(x)} />)} ) : null} {}} /> } />