// Event detail — refactored. // // Three templates / examples: // // 1. EventDetailConcert — Class or Concert (with or without ticket). // Plains Songbook example. NO checkout — replaced with a simple RSVP // "Reserve a seat" form and a suggested-donation note. Hero photo, // lineup with portraits, past-events photo gallery, venue. // // 2. EventDetailExhibit — Gallery opening + multi-day on-view. // Spring Senior Exhibit example. The page has two states: "On view // through Jun 28" (default) and an "Opening reception" featurette. // Works grid with photo slots, featured-artist portraits. // // 3. EventDetailDropIn — Campaign · Spring Open Studios (multi-site). // Kept as a one-off campaign artboard (not the standard template). // // All three obey the Events stream and place exactly one Hot Pink pop CTA // on the page. Image placeholders use so the user can drop // real photos and the drops persist. const ED = { paper: "#FBF7EE", warmPaper: "#F5F0E2", stone: "#E8E2D3", navy: "#01234B", ink: "#1F1B2E", mute: "#6B6577", pine: "#2F7A2E", pineDeep: "#1A461A", pineForest: "#0F2E10", pineLifted: "#4FA13A", meadow: "#78BE4D", leaf: "#BFE0A5", whisper: "#EBF3DF", pink: "#EB4D86", yellow: "#F3CF03", council: "#45217A", artists: "#01234B", artistsLake: "#1F5A8C", }; function EDNav() { const items = [ { label: "What's on", stream: "events", path: "#/events", active: true }, { label: "Artists", stream: "artists", path: "#/artists" }, { label: "Programs", stream: "council", path: "#/about" }, { label: "News", stream: "news", path: "#/news" }, { label: "Visit", stream: "council", path: "#/about" }, ]; return (
← All events Browse artists
); } function EDFooter() { return ( ); } function Breadcrumb({ parts }) { return (
{parts.map((p, i) => ( {i > 0 && } {i === parts.length - 1 ? {p} : {p}} ))}
); } // image-slot helper. `` is a custom element, so we instantiate // it via dangerouslySetInnerHTML so React doesn't choke on the unknown tag. // Each slot needs a unique id so drops persist; we accept it as a prop. function ImgSlot({ id, w = "100%", h = 240, placeholder, radius = 0, shape = "rect", style }) { const html = ``; return (
); } function RelatedEvents({ exclude }) { const others = EVENTS.filter(e => e.id !== exclude).slice(0, 3); return (

Around the same time

The full calendar
{others.map((e) => { const d = shortDate(e.date); const s = KIND_STYLE[e.kind]; return (
{s.label}
{d.day}
{d.mo} · {e.weekday}

{e.title}

{e.venue} · {e.time}
Details
); })}
); } // ════════════════════════════════════════════════════════════════ // Template 1 — Class / Concert (Plains Songbook) // No checkout. RSVP form + suggested donation copy. Plays for ticketed // concerts AND free classes — copy adapts; layout is the same. // ════════════════════════════════════════════════════════════════ function EventDetailConcert() { const e = EVENTS.find(x => x.id === "songbook"); const d = shortDate(e.date); return (
{/* Hero with photo */}
Music · Concert Suggested donation

Plains Songbook

Three songwriters, one fiddle, an honest pew. An evening of new songs about the county we live in.

{d.weekday}, {d.mo} {d.day} {e.time} {e.venue}
{/* One Pink pop */} Reserve a seat Add to calendar
{/* Hero photo — fills the right half */}
{/* Quick-info strip */}
{[ { l: "When", v: `${d.mo} ${d.day}, ${d.year}`, s: `${e.weekday} · doors 7 pm` }, { l: "Run time", v: "≈ 90 min", s: "No intermission" }, { l: "Where", v: "Old Methodist Church", s: "Stockton · 119 W Cedar" }, { l: "Suggested", v: "$12 · $6 students", s: "Pay what you can" }, { l: "Capacity", v: "140 seats", s: "86 still open" }, { l: "Accessibility", v: "Step-free", s: "Hearing loop · pews 1–4" }, ].map((it, i) => (
{it.l}
{it.v}
{it.s}
))}
{/* Body */}
{/* Left */}
About the show

An evening of new songs in a 110-year-old church.

The Songbook is a yearly evening of working songwriters from the High Plains — two locals and one guest from across the line. Most of them play in bars and farm-shop sessions; this is the one night a year you can sit still and listen.

The Old Methodist Church gave us its sanctuary for the night. The pews are wooden, the acoustics are forgiving, and Lillian Schaeffer agreed to make shortbread for the lobby.

{/* Lineup with portrait slots */}

Who's playing

{[ { name: "Charlie Otieno", role: "Headliner", town: "Stockton", id: "songbook-headshot-1" }, { name: "Sonny Briggs", role: "Songbook", town: "Stockton", id: "songbook-headshot-2" }, { name: "Marisol Vega", role: "Guest", town: "Hays, KS", id: "songbook-headshot-3" }, ].map((p) => (
{p.role}
{p.name}
{p.town}
))}
{/* Past-events gallery */}

From past Songbooks

{[1, 2, 3, 4].map((i) => ( ))}
{/* Notes */}

A few things to know

    {[ ["Seating", "Open seating in wooden pews. Early arrivers get the soft cushion."], ["Kids", "Welcome but the room is quiet. Recommended ages 10+."], ["Refreshments", "Shortbread and lemonade in the lobby. Donations to Lillian's flour fund appreciated."], ["Photos", "No flash. Phones on silent. Recordings only with the artist's nod."], ].map(([t, b]) => (
  • {t}. {b}
  • ))}
{/* Right — RSVP card (the no-checkout replacement) */}
); } function FormField({ label, placeholder, small, textarea }) { return ( ); } // ════════════════════════════════════════════════════════════════ // Template 2 — Gallery opening + on-view exhibit // Spring Senior Exhibit: opening reception May 22, on view through Jun 28 // ════════════════════════════════════════════════════════════════ function EventDetailExhibit() { return (
{/* Hero — split black with texture + photo */}
On view now Exhibition · Free

Spring Senior Exhibit

Eight portfolios from county high-school seniors, hung together for the first time. The Annex · May 22 through Jun 28.

Opening Fri May 22 · 6 – 9 pm On view through Jun 28 The Annex · Stockton
{/* One Pink pop */} RSVP to the opening Plan a gallery visit
{/* Photo fills the right half */}
{/* Dual-state info row — Opening reception AND On view */}
{/* Opening night */}
22
May · Fri
Opening reception
Friday night, 6 – 9 pm

The artists will be there. So will their families and a sheet cake. Bring a friend. Free, RSVP appreciated.

{/* One Pink pop */} RSVP to the opening
{/* On view */}
38
days on view
On view
May 22 – Jun 28

The Annex · 119 N Main, Stockton · Thursday – Sunday, 11 am – 4 pm. Free admission.

{/* About + Featured artists */}
About the show

Eight portfolios.
Three high schools.
One room.

Every spring we hand the back room of the Annex over to eight graduating seniors from county high schools. They show what they've been working on for the last two years — drawings, ceramics, photographs, a zine.

Curated by faculty advisors from Stockton, Plainville, and Palco. Most of the work is for sale; proceeds go straight to the student's college fund.

{/* Featured artists portrait row */}
Featured artists · 8
{[ ["Jacob Steinmiller", "Drawing", "Stockton HS"], ["Lily Cho", "Photo", "Plainville HS"], ["Sage Wallin", "Painting","Palco HS"], ["Mira Petrov", "Fiber", "Plainville HS"], ["Ben Yoon", "Sculpture","Stockton HS"], ["Devon Heller", "Ceramics","Plainville HS"], ["Ivy Reinholt", "Photo", "Palco HS"], ["Marcus Otieno", "Print", "Stockton HS"], ].map((p, i) => (
{p[0]}
{p[1]} · {p[2]}
))}
{/* Works grid */}

Selected works

See all 24 works
{[ ["Northbound · cover", "Jacob Steinmiller · Risograph zine"], ["The gas station, before", "Jacob Steinmiller · Ink"], ["Stockton at 2 am", "Jacob Steinmiller · Brush"], ["Self-portrait, II", "Jacob Steinmiller · Pen + brush"], ["First Friday", "Lily Cho · Photograph"], ["Six fields", "Lily Cho · Photograph"], ["Tea bowl #4", "Devon Heller · Ceramic"], ["Loomwork", "Mira Petrov · Fiber"], ].map((w, i) => (
{w[0]}
{w[1]}
))}
{/* Visit panel */}
Plan a visit

The Annex · 119 N Main, Stockton, KS

Open Thursday – Sunday, 11 am – 4 pm. Free admission. The Annex is wheelchair-accessible with a step-free entry on Main Street.

School visits and group tours by appointment — drop us a line at hello@rocoarts.org.

Hours
  • Mon – WedClosed
  • Thu – Sat11 am – 4 pm
  • Sun12 – 4 pm
  • Fri May 22Opening · 6 – 9
Programs around this show
  • May 31 · 2 pm · Zine release reading (Jacob Steinmiller)
  • Jun 7 · 1 pm · Quilt Wall Block Party
  • Jun 14 · 11 am· Walk-through with the artists
); } // ════════════════════════════════════════════════════════════════ // Campaign — Spring Open Studios (kept as a one-off, not template) // (Largely the same as before, with photo placeholders added.) // ════════════════════════════════════════════════════════════════ function EventDetailDropIn() { const e = EVENTS.find(x => x.id === "spring-os"); const d = shortDate(e.date); const sites = [ { n: "01", town: "Stockton", host: "Maribel Cortez", medium: "Quilting", hours: "10 – 5", note: "Front-room studio · shortbread" }, { n: "02", town: "Stockton", host: "Pat Lindsey", medium: "Fiber", hours: "10 – 4", note: "Loom demos at 11 & 2" }, { n: "03", town: "Stockton", host: "Jay Pruitt", medium: "Printmaking", hours: "12 – 5", note: "Linocut try-it table" }, { n: "04", town: "Plainville", host: "Henry Plumb", medium: "Letterpress", hours: "10 – 5", note: "Set a poster, take it home" }, { n: "05", town: "Plainville", host: "Joe Beaumont", medium: "Printmaking", hours: "10 – 4", note: "Risograph zines" }, { n: "06", town: "Plainville", host: "Nori Tagawa", medium: "Ceramics", hours: "10 – 4", note: "Hand-building & glazes" }, { n: "07", town: "Palco", host: "Marcus Reinholt", medium: "Photography", hours: "11 – 4", note: "Darkroom open · BYO film" }, { n: "08", town: "Damar", host: "Ada Felix", medium: "Fiber", hours: "10 – 3", note: "Sheep on site, sometimes" }, { n: "09", town: "Webster", host: "Cal Westra", medium: "Woodworking", hours: "10 – 5", note: "Shop demos hourly" }, { n: "10", town: "Webster", host: "Esau Hartmann", medium: "Sculpture", hours: "12 – 5", note: "Outdoor metal work · loud" }, { n: "11", town: "Zurich", host: "Walt Henning", medium: "Woodturning", hours: "11 – 4", note: "Lathe demos at noon" }, { n: "12", town: "Logan", host: "Imogene Tate", medium: "Watercolor", hours: "10 – 4", note: "Porch setup if dry · garage if wet" }, ]; return (
Campaign · County-wide · Free Featured this season

Spring Open Studios

Twelve barns and back rooms across Rooks County, one Saturday. Pack a sandwich, start in Plainville, end in Logan.

{[ { n: "12", l: "studio sites" }, { n: "7", l: "towns" }, { n: "5h", l: "loop · 90 min driving" }, { n: "0", l: "dollars to enter" }, ].map((s, i) => (
{s.n}
{s.l}
))}
Plan a route Print the map (PDF)
The loop · {d.weekday}, {d.mo} {d.day}
{/* photo strip - past Open Studios */}
From past Open Studios
{[1, 2, 3, 4, 5].map((i) => ( ))}
{[ { l: "When", v: `${d.mo} ${d.day}, ${d.year}`, s: e.weekday }, { l: "Hours", v: e.time, s: "Most sites · varies" }, { l: "Sites", v: "12", s: "7 towns" }, { l: "Cost", v: "Free", s: "No registration" }, { l: "How to RSVP", v: "Just show up", s: "Or tell us · helps planning" }, { l: "Rain plan", v: "Sites stay open", s: "Most are indoors" }, ].map((it, i) => (
{it.l}
{it.v}
{it.s}
))}
The twelve sites

Studios on the loop.

Hosts set their own hours. The loop runs west to east — drive it any way you like.

{sites.map((s, i) => (
{s.n}
{s.town}
{s.host}
{s.medium} · {s.note}
{s.hours}
Profile
))}
); } function OpenStudiosMap() { const sitePins = [ { x: 47, y: 51 }, { x: 49, y: 49 }, { x: 51, y: 53 }, { x: 30, y: 75 }, { x: 28, y: 77 }, { x: 32, y: 73 }, { x: 18, y: 60 }, { x: 12, y: 25 }, { x: 36, y: 28 }, { x: 38, y: 30 }, { x: 64, y: 70 }, { x: 86, y: 44 }, ]; return ( {[1,2].map(i => )} {[1,2,3,4].map(i => )} ROOKS COUNTY · 12 SITES {sitePins.map((p, i) => { const X = 16 + (p.x / 100) * 568; const Y = 16 + (p.y / 100) * 348; return ( {i + 1} ); })} ); } window.EventDetailConcert = EventDetailConcert; window.EventDetailExhibit = EventDetailExhibit; window.EventDetailDropIn = EventDetailDropIn; // keep old name for back-compat with any existing references window.EventDetailTicketed = EventDetailConcert;