Canvas
Selection that feels as good as it looks.
Tap seats, drag across rows, and watch states read instantly, while your backend stays the source of truth for holds and sales through echoed seat metadata.
Sound familiar?
Forty seats, forty taps
A corporate block booking shouldn't be a thumb workout. Drag multi-select sweeps rows into the cart in one gesture.
Dead clicks on sold seats
Nothing says 'broken' like tapping a seat and getting silence. Salable state is data. Unsalable seats read as such, and clicks are configurable.
Renderer pretending to be inventory
Widgets that 'hold' seats client-side sell them twice. Canvas renders and reports; your backend owns the truth.
The honest selection widget
01Real selection primitivesselect, unSelect, isSelected, getSelectedSeats: the selection state is queryable, not buried in the DOM.
02Drag multi-selectA marquee gesture sweeps contiguous seats. Enable it with one flag.
03States as dataSalable or not is a fact on the seat, styled by your theme, not a CSS hope.
04Your metadata, echoedcustom_data rides every seat and comes back in every event, the clean hook for your cart and pricing.
05Sold seats, your rulesDecide whether unsalable seats are clickable, for details, upsells, or silence.
06Truth stays server-sideHolds and sales live in your backend or the Seatmap platform. The widget never invents availability.
From tap to cart
- 01Tap or dragSingle seats or marquee sweeps: selection state updates instantly.
- 02Events carry metadataYour handlers receive the seat with your custom_data attached.
- 03Your backend decidesHold, price, and commit server-side; the map reflects what you confirm.
Feel the selection
Tap, drag, and multi-select, live in the demo.