// Kiosk screens — flow-based layout (no absolute positioning) const LANGS = [ { code:'SI', label:'Slovenščina' }, { code:'GB', label:'English' }, { code:'DE', label:'Deutsch' }, { code:'IT', label:'Italiano' }, ]; function ScreenLanguage({ onPick }) { const [sel, setSel] = React.useState('SI'); return ( Jezik / Language
{LANGS.map(l => (
setSel(l.code)} size={240} />
{l.label}
))}
Naprej →
); } function ScreenWelcome({ onStart, onStaff }) { return ( DOBRODOŠLI Dobrodošli v Hotel Triglav Dotaknite se zaslona za začetek ZAČNI {/* Discreet staff entry — visible only if you look for it */} ); } function ScreenScanQR({ onManual, onBack }) { return ( {'Prosim skenirajte\nQR kodo'}
{[[0,0],[1,0],[0,1],[1,1]].map(([x,y],i)=>(
))}
Usmerite QR
v okvir
✎ Vpiši ročno ); } function ScreenReservation({ onConfirm, onBack }) { const [val, setVal] = React.useState('RES-48210'); return ( {'Vnesite številko\nrezervacije'}
{val || RES-…}
{['1','2','3','4','5','6','7','8','9','←','0','✓'].map(k => ( ))}
); } function ScreenScanId({ guestNum=1, onManual, onBack }) { return ( {`Prosimo skenirajte\nosebni dokument ${guestNum}. gosta`}
Skeniranje…
✎ Vpiši ročno ); } function ScreenProcessing({ label='Obdelujem…\n\nProsimo počakajte' }) { return ( {label}
); } function ScreenGuestForm({ guestNum=1, onCapture, onBack }) { const defaults = [ { k:'Ime', v:'Ana' }, { k:'Priimek', v:'Novak' }, { k:'Datum rojstva', v:'14. 06. 1992' }, { k:'Dokument', v:'SI 123 456 789' }, { k:'Državljanstvo', v:'Slovenija' }, { k:'Naslov', v:'Trubarjeva 12, Ljubljana' }, ]; const [fields, setFields] = React.useState(defaults); const [editing, setEditing] = React.useState(null); const update = (idx, val) => setFields(f => f.map((x,i) => i===idx ? {...x, v:val} : x)); return ( {`Preverite podatke ${guestNum}. gosta`} Pritisnite na polje za popravek
{fields.map((f,idx) => (
setEditing(idx)} style={{ background:'rgba(255,255,255,.96)', color:'#111', borderRadius:20, padding:'22px 28px', boxShadow: editing===idx ? '0 0 0 4px #00BCD4, 0 10px 30px rgba(0,0,0,.2)' : '0 10px 30px rgba(0,0,0,.2)', cursor:'pointer', transition:'box-shadow 200ms', }}>
{f.k}
{editing===idx ? ( update(idx, e.target.value)} onBlur={()=>setEditing(null)} onKeyDown={e=>e.key==='Enter'&&setEditing(null)} style={{ width:'100%', fontSize:34, fontWeight:600, marginTop:6, border:'none', borderBottom:'3px solid #00BCD4', background:'transparent', outline:'none', fontFamily:'inherit', padding:'4px 0', color:'#111', }} /> ) : (
{f.v}
)}
))}
POTRDI PODATKE
); } function ScreenAllRegistered({ guests, onYes, onAddMore, onBack }) { return ( {'Ali so vsi gostje\nprijavljeni?'} {`${guests.length} ${guests.length===1?'gost prijavljen':'gostje prijavljeni'}`}
{guests.map((g,i) => (
{g.split(' ').map(n=>n[0]).join('')}
{g}
Dokument preverjen
))}
{/* Add another guest — prominent standalone button */}
DA, NADALJUJ
); } function ScreenKeyDone({ onDone }) { return ( {'Ključ izdan spodaj\nŽelimo vam prijetno\nbivanje'}
🔑
ZAKLJUČI
); } function ScreenClosed() { return (
{'No self\ncheck-in'}
Obrnite se na recepcijo · Visit the reception
); } Object.assign(window, { ScreenLanguage, ScreenWelcome, ScreenScanQR, ScreenReservation, ScreenScanId, ScreenProcessing, ScreenGuestForm, ScreenAllRegistered, ScreenKeyDone, ScreenClosed, });