// app-screens-2.jsx — Additional SURVIVAL screens (First Aid list, Map+download, Plant ID detail, Compass) // ── First Aid list screen ────────────────────────────────────────────────── function FirstAidScreen() { const items = [ { id: 1, title: 'Anaphylaxis (Severe Allergic Reaction)', desc: 'Severe systemic allergic reaction. Life-threatening without immediate treatment.', iconColor: APP.warning }, { id: 2, title: 'Recognizing a Stroke (CVA)', desc: 'Stroke — blockage or bleeding of blood vessel in the brain. Every minute counts.', iconColor: '#7AA8E0' }, { id: 3, title: 'Cardiac Arrest — Adult CPR', desc: 'Person is unresponsive and not breathing normally. Every second counts.', iconColor: APP.danger }, { id: 4, title: 'Treating Heat Stroke', desc: 'Core body temperature rises above 40°C. A life-threatening emergency.', iconColor: APP.warning }, ]; const tabs = ['Skills', 'Disasters', 'First Aid']; const filters = ['All', 'Reanimation', 'Bleeding', 'Breathing', 'Trauma']; return (
Survival
{/* Segmented tabs */}
{tabs.map((t, i) => (
{t}
))}
{/* Category filter chips */}
{filters.map((f, i) => (
{f}
))}
{/* Cards */}
{items.map(it => (
{Icons.plus(it.iconColor)}
{it.title}
{it.desc}
Life-threatening
))}
); } // ── Map + offline download sheet ─────────────────────────────────────────── function MapScreen({ downloadedIdx = 0 }) { const regions = [ { name: 'Nederland', size: '~180 MB', downloaded: true }, { name: 'België', size: '~140 MB' }, { name: 'Duitsland (NW)', size: '~220 MB' }, { name: 'Noord-Frankrijk', size: '~190 MB' }, { name: 'Zuid-Engeland', size: '~170 MB' }, { name: 'Alpen Regio', size: '~260 MB' }, { name: 'Scandinavië', size: '~500 MB' }, ]; return (
Map
{/* Faux map */}
{/* Streets - vertical */} {[15, 28, 42, 56, 70, 82].map(p => (
))} {/* Streets - horizontal */} {[20, 38, 56, 74].map(p => (
))} {/* Diagonal */}
{/* Water on right */}
{/* Street label */}
Union Street
Bay Street
{/* Bottom sheet */}
Download Offline Maps
{Icons.close(APP.primary)}
{regions.map((r, i) => (
{r.name}
{r.size}
{i <= downloadedIdx ? (
{Icons.check(APP.primary)}
View
) : (
Download
)}
))}
); } // ── Plant ID detail (hero close-up screen) ───────────────────────────────── function PlantIDScreen() { return (
Plant Identification
{/* Image placeholder */}
{/* Faux leaf veins */} {[20, 30, 40, 50, 60, 70, 80].map(y => ( ))} {/* Crosshair scan */} {/* Match badge */}
97% MATCH
Wood Sorrel
Oxalis acetosella
EDIBLE EAT IN MODERATION
Sour-tasting clover-like leaves. Rich in vitamin C. Contains oxalic acid — avoid in large quantities or if you have kidney issues.
IDENTIFIED OFFLINE · NO DATA SENT
); } // ── Compass / navigation screen ──────────────────────────────────────────── function CompassScreen({ bearing = 0, lat = '60.4720°N', lng = '8.4689°E' }) { const cx = 50, cy = 50, r = 38; return (
Navigation
OFFLINE · GPS ONLY
{/* Compass dial */}
{/* Outer ring */} {/* Tick marks */} {Array.from({ length: 36 }).map((_, i) => { const angle = (i * 10) * Math.PI / 180; const major = i % 3 === 0; const r1 = r; const r2 = r - (major ? 4 : 2); const x1 = cx + Math.sin(angle) * r1; const y1 = cy - Math.cos(angle) * r1; const x2 = cx + Math.sin(angle) * r2; const y2 = cy - Math.cos(angle) * r2; return ; })} {/* Cardinal labels */} {[ { l: 'N', x: 50, y: 8, c: APP.danger }, { l: 'E', x: 92, y: 51 }, { l: 'S', x: 50, y: 95 }, { l: 'W', x: 8, y: 51 }, ].map(d => ( {d.l} ))} {/* Needle */} {/* Bearing readout */}
{Math.round(bearing)}°
TRUE NORTH
{/* Coordinates */}
LAT
{lat}
LNG
{lng}
ALT
1284 m
); } Object.assign(window, { FirstAidScreen, MapScreen, PlantIDScreen, CompassScreen });