@seatlayer/react 0.14.0 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/dist/index.cjs +13 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +12 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +13 -2
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -34,6 +34,8 @@ Drive it imperatively through the ref:
|
|
|
34
34
|
```tsx
|
|
35
35
|
const hold = await chart.current?.hold(); // hold the selection (null on conflict)
|
|
36
36
|
const best = await chart.current?.bestAvailable(4); // auto-pick 4 seats and hold them
|
|
37
|
+
const restored = await chart.current?.resumeHold(savedHoldId);
|
|
38
|
+
await chart.current?.releaseLabels(['A-12']); // keep the remainder held
|
|
37
39
|
await chart.current?.release(); // release the current hold
|
|
38
40
|
```
|
|
39
41
|
|
|
@@ -48,6 +50,7 @@ Extends the vanilla SDK options minus `container` (the component owns its own mo
|
|
|
48
50
|
| `maxSelection` | `number?` | Max seats selectable at once (default 10). |
|
|
49
51
|
| `onSelectionChange` | `(seats) => void` | Fires when the selection changes. |
|
|
50
52
|
| `onHold` | `(result) => void` | Fires when seats are held; hand `holdId` to your server. |
|
|
53
|
+
| `onHoldRestored` | `(result) => void` | Fires after `resumeHold()` verifies an active hold. |
|
|
51
54
|
| `onError` | `(err) => void` | Fires on errors. |
|
|
52
55
|
| `className` / `style` | — | Applied to the container element. |
|
|
53
56
|
|
package/dist/index.cjs
CHANGED
|
@@ -54,6 +54,7 @@ var SeatingChart = (0, import_react.forwardRef)(
|
|
|
54
54
|
messages: callbacks.current.messages,
|
|
55
55
|
onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),
|
|
56
56
|
onHold: (result) => callbacks.current.onHold?.(result),
|
|
57
|
+
onHoldRestored: (result) => callbacks.current.onHoldRestored?.(result),
|
|
57
58
|
onHoldExpired: () => callbacks.current.onHoldExpired?.(),
|
|
58
59
|
onGAClick: (area) => callbacks.current.onGAClick?.(area),
|
|
59
60
|
onError: (err) => callbacks.current.onError?.(err),
|
|
@@ -73,10 +74,13 @@ var SeatingChart = (0, import_react.forwardRef)(
|
|
|
73
74
|
ref,
|
|
74
75
|
() => ({
|
|
75
76
|
hold: (options) => chartRef.current?.hold(options) ?? Promise.resolve(null),
|
|
77
|
+
resumeHold: (holdId) => chartRef.current?.resumeHold(holdId) ?? Promise.resolve(null),
|
|
78
|
+
getCurrentHold: () => chartRef.current?.getCurrentHold() ?? null,
|
|
76
79
|
getGAAreas: () => chartRef.current?.getGAAreas() ?? [],
|
|
77
80
|
holdGA: (areaId, qty, options) => chartRef.current?.holdGA(areaId, qty, options) ?? Promise.resolve(null),
|
|
78
81
|
bestAvailable: (qty, categoryKey) => chartRef.current?.bestAvailable(qty, categoryKey) ?? Promise.resolve(null),
|
|
79
82
|
release: () => chartRef.current?.release() ?? Promise.resolve(),
|
|
83
|
+
releaseLabels: (labels) => chartRef.current?.releaseLabels(labels) ?? Promise.resolve(false),
|
|
80
84
|
getSelection: () => chartRef.current?.getSelection() ?? [],
|
|
81
85
|
setSeatTier: (seatId, tierId) => chartRef.current?.setSeatTier(seatId, tierId),
|
|
82
86
|
getFloors: () => chartRef.current?.getFloors() ?? [],
|
|
@@ -144,7 +148,7 @@ var import_js3 = require("@seatlayer/js");
|
|
|
144
148
|
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
145
149
|
var SeatPicker = (0, import_react3.forwardRef)(
|
|
146
150
|
function SeatPicker2(props, ref) {
|
|
147
|
-
const { className, style, event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, confirmSelection, seatView } = props;
|
|
151
|
+
const { className, style, event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView } = props;
|
|
148
152
|
const containerRef = (0, import_react3.useRef)(null);
|
|
149
153
|
const pickerRef = (0, import_react3.useRef)(null);
|
|
150
154
|
const callbacks = (0, import_react3.useRef)(props);
|
|
@@ -162,6 +166,8 @@ var SeatPicker = (0, import_react3.forwardRef)(
|
|
|
162
166
|
currency,
|
|
163
167
|
colorblindSafe,
|
|
164
168
|
holdTtlMs,
|
|
169
|
+
initialHoldId,
|
|
170
|
+
restoreHold,
|
|
165
171
|
confirmSelection,
|
|
166
172
|
seatView,
|
|
167
173
|
theme: callbacks.current.theme,
|
|
@@ -169,7 +175,9 @@ var SeatPicker = (0, import_react3.forwardRef)(
|
|
|
169
175
|
onCheckout: (hold, seats, handoff) => callbacks.current.onCheckout?.(hold, seats, handoff),
|
|
170
176
|
onBooked: (handoff) => callbacks.current.onBooked?.(handoff),
|
|
171
177
|
onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),
|
|
178
|
+
onHoldChange: (hold, seats, handoff) => callbacks.current.onHoldChange?.(hold, seats, handoff),
|
|
172
179
|
onHoldExpired: () => callbacks.current.onHoldExpired?.(),
|
|
180
|
+
onHoldRestored: (hold, seats, handoff) => callbacks.current.onHoldRestored?.(hold, seats, handoff),
|
|
173
181
|
onError: (err) => callbacks.current.onError?.(err)
|
|
174
182
|
});
|
|
175
183
|
pickerRef.current = picker;
|
|
@@ -178,12 +186,15 @@ var SeatPicker = (0, import_react3.forwardRef)(
|
|
|
178
186
|
picker.destroy();
|
|
179
187
|
pickerRef.current = null;
|
|
180
188
|
};
|
|
181
|
-
}, [event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, confirmSelection, seatView]);
|
|
189
|
+
}, [event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView]);
|
|
182
190
|
(0, import_react3.useImperativeHandle)(
|
|
183
191
|
ref,
|
|
184
192
|
() => ({
|
|
185
193
|
getSelection: () => pickerRef.current?.getSelection() ?? [],
|
|
186
194
|
bestAvailable: (qty, categoryKey) => pickerRef.current?.bestAvailable(qty, categoryKey) ?? Promise.resolve(null),
|
|
195
|
+
getCurrentHold: () => pickerRef.current?.getCurrentHold() ?? null,
|
|
196
|
+
resumeHold: (holdId) => pickerRef.current?.resumeHold(holdId) ?? Promise.resolve(null),
|
|
197
|
+
removeHeldTicket: (label) => pickerRef.current?.removeHeldTicket(label) ?? Promise.resolve(false),
|
|
187
198
|
release: () => pickerRef.current?.release() ?? Promise.resolve()
|
|
188
199
|
}),
|
|
189
200
|
[]
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/SeatingChart.tsx","../src/EmbeddedDesigner.tsx","../src/SeatPicker.tsx","../src/SeatManager.tsx"],"sourcesContent":["/**\n * @seatlayer/react — the React wrapper for the SeatLayer embed SDK.\n */\nexport { SeatingChart } from './SeatingChart';\nexport { EmbeddedDesigner } from './EmbeddedDesigner';\nexport type {\n SeatingChartProps,\n SeatingChartHandle,\n SelectedSeat,\n HoldResult,\n BestAvailableResult,\n GAAreaAvailability,\n HoldLineItem,\n} from './SeatingChart';\nexport type { EmbeddedDesignerProps, EmbeddedDesignerHandle, EmbeddedDesignerMessage } from './EmbeddedDesigner';\nexport { SeatPicker } from './SeatPicker';\nexport type {\n SeatPickerHandle,\n SeatPickerProps,\n SeatPickerOptions,\n SeatPickerTheme,\n CheckoutHandoff,\n CheckoutLineItem,\n} from './SeatPicker';\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n\n// Organizer control room: Monitor + Inspect + bulk Block/unblock on one renderer.\nexport { SeatManager } from './SeatManager';\nexport type {\n SeatManagerHandle,\n SeatManagerProps,\n SeatManagerOptions,\n SeatManagerMode,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n} from './SeatManager';\nexport type { ControlRoomActivityEntry, ControlRoomSectionMetric, ControlRoomSnapshot } from '@seatlayer/js';\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatingChart as CoreSeatingChart,\n type SeatingChartOptions,\n type SelectedSeat,\n type HoldResult,\n type BestAvailableResult,\n type GAAreaAvailability,\n type HoldLineItem,\n} from '@seatlayer/js';\n\nexport type { SelectedSeat, HoldResult, BestAvailableResult, GAAreaAvailability, HoldLineItem } from '@seatlayer/js';\nexport type { SeatHoverDetails } from '@seatlayer/js';\n\n/** Imperative handle exposed via `ref` — call these to drive the picker from your app. */\nexport interface SeatingChartHandle {\n /** Hold the current selection. Resolves the hold, or `null` on a 409 conflict. */\n hold(options?: { ttlMs?: number }): Promise<HoldResult | null>;\n /** GA areas with live remaining capacity. */\n getGAAreas(): GAAreaAvailability[];\n /** Atomically hold a quantity from one GA area. */\n holdGA(areaId: string, qty: number, options?: { tierId?: string | null; ttlMs?: number }): Promise<HoldResult | null>;\n /** Ask the server for the `qty` best free seats and hold them atomically. */\n bestAvailable(qty: number, categoryKey?: string): Promise<BestAvailableResult | null>;\n /** Release the current hold (if any). */\n release(): Promise<void>;\n /** The current selection, with prices resolved from the chart categories. */\n getSelection(): SelectedSeat[];\n /**\n * Choose a ticket tier for a selected seat (e.g. Adult → Child). Available\n * `tiers` are on each `SelectedSeat`; `tierId=null` reverts to the default.\n */\n setSeatTier(seatId: string, tierId: string | null): void;\n /**\n * Floors of a multi-floor chart — `[{ id, name }]` (single-floor charts\n * return one entry; empty before render()). Pair with setFloor().\n */\n getFloors(): { id: string; name: string }[];\n /** Switch the shown floor (2D). Warns + no-ops on single-floor charts. */\n setFloor(floorId: string): void;\n /** Toggle colorblind-safe rendering at runtime (see the `colorblindSafe` prop). */\n setColorblindSafe(on: boolean): void;\n /** Zoom in one step (same increment as the wheel/pinch gesture). */\n zoomIn(): void;\n /** Zoom out one step. */\n zoomOut(): void;\n /** Reset the camera so the whole chart fits the container. */\n zoomToFit(): void;\n}\n\nexport interface SeatingChartProps extends Omit<SeatingChartOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React wrapper around the framework-agnostic `@seatlayer/js` SDK.\n *\n * The underlying canvas is created once and torn down on unmount. Callback props\n * (`onSelectionChange`, `onHold`, `onError`, `onDeckTap`, `onHint`) may change\n * freely between renders without re-mounting the canvas — only `event`,\n * `apiBase`, `maxSelection`, `publicKey`, `locale`, `currency`, and\n * `colorblindSafe` trigger a rebuild. (`messages` is read once per mount;\n * changing it alone does not re-apply.)\n */\nexport const SeatingChart = forwardRef<SeatingChartHandle, SeatingChartProps>(\n function SeatingChart(props, ref) {\n const { className, style, event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const chartRef = useRef<CoreSeatingChart | null>(null);\n\n // Always call the latest callbacks without rebuilding the chart.\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const chart = new CoreSeatingChart({\n container: el,\n event,\n apiBase,\n maxSelection,\n publicKey,\n locale,\n currency,\n colorblindSafe,\n messages: callbacks.current.messages,\n onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),\n onHold: (result) => callbacks.current.onHold?.(result),\n onHoldExpired: () => callbacks.current.onHoldExpired?.(),\n onGAClick: (area) => callbacks.current.onGAClick?.(area),\n onError: (err) => callbacks.current.onError?.(err),\n onDeckTap: (floorId) => callbacks.current.onDeckTap?.(floorId),\n onHint: (message) => callbacks.current.onHint?.(message),\n seatTooltip: props.seatTooltip,\n onSeatHover: (details) => callbacks.current.onSeatHover?.(details),\n });\n chartRef.current = chart;\n void chart.render();\n\n return () => {\n chart.destroy();\n chartRef.current = null;\n };\n // Rebuild only when the identity of the chart changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe]);\n\n useImperativeHandle(\n ref,\n (): SeatingChartHandle => ({\n hold: (options) => chartRef.current?.hold(options) ?? Promise.resolve(null),\n getGAAreas: () => chartRef.current?.getGAAreas() ?? [],\n holdGA: (areaId, qty, options) => chartRef.current?.holdGA(areaId, qty, options) ?? Promise.resolve(null),\n bestAvailable: (qty, categoryKey) =>\n chartRef.current?.bestAvailable(qty, categoryKey) ?? Promise.resolve(null),\n release: () => chartRef.current?.release() ?? Promise.resolve(),\n getSelection: () => chartRef.current?.getSelection() ?? [],\n setSeatTier: (seatId, tierId) => chartRef.current?.setSeatTier(seatId, tierId),\n getFloors: () => chartRef.current?.getFloors() ?? [],\n setFloor: (floorId) => chartRef.current?.setFloor(floorId),\n setColorblindSafe: (on) => chartRef.current?.setColorblindSafe(on),\n zoomIn: () => chartRef.current?.zoomIn(),\n zoomOut: () => chartRef.current?.zoomOut(),\n zoomToFit: () => chartRef.current?.zoomToFit(),\n }),\n [],\n );\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n EmbeddedDesigner as CoreEmbeddedDesigner,\n type EmbeddedDesignerMessage,\n} from '@seatlayer/js';\n\nexport type { EmbeddedDesignerMessage } from '@seatlayer/js';\n\nexport interface EmbeddedDesignerHandle {\n /** Recreate the iframe with a newly-minted session URL. */\n setDesignerUrl(designerUrl: string): void;\n /** The currently mounted iframe, if any. */\n getIframe(): HTMLIFrameElement | null;\n}\n\nexport interface EmbeddedDesignerProps {\n /** Short-lived `designerUrl` returned by your backend. Never pass an `sk_` key. */\n designerUrl: string;\n expectedChartId?: string;\n expectedWorkspaceId?: string;\n title?: string;\n className?: string;\n style?: CSSProperties;\n iframeClassName?: string;\n iframeStyle?: Partial<CSSStyleDeclaration>;\n allow?: string;\n referrerPolicy?: ReferrerPolicy;\n onReady?: (message: EmbeddedDesignerMessage) => void;\n onSaved?: (message: EmbeddedDesignerMessage) => void;\n onPublished?: (message: EmbeddedDesignerMessage) => void;\n onClose?: (message: EmbeddedDesignerMessage) => void;\n onError?: (message: EmbeddedDesignerMessage) => void;\n}\n\n/**\n * Native-feeling React host for the secure SeatLayer Designer iframe.\n * A new `designerUrl` always recreates the iframe, so a new fragment token can\n * never retain state from an earlier chart session.\n */\nexport const EmbeddedDesigner = forwardRef<EmbeddedDesignerHandle, EmbeddedDesignerProps>(\n function EmbeddedDesigner(props, ref) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const designerRef = useRef<CoreEmbeddedDesigner | null>(null);\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const designer = new CoreEmbeddedDesigner({\n designerUrl: props.designerUrl,\n container,\n expectedChartId: props.expectedChartId,\n expectedWorkspaceId: props.expectedWorkspaceId,\n title: props.title,\n className: props.iframeClassName,\n style: props.iframeStyle,\n allow: props.allow,\n referrerPolicy: props.referrerPolicy,\n onReady: (message) => callbacks.current.onReady?.(message),\n onSaved: (message) => callbacks.current.onSaved?.(message),\n onPublished: (message) => callbacks.current.onPublished?.(message),\n onClose: (message) => callbacks.current.onClose?.(message),\n onError: (message) => callbacks.current.onError?.(message),\n });\n designer.mount();\n designerRef.current = designer;\n return () => {\n designer.destroy();\n designerRef.current = null;\n };\n // Session/chart identity changes must recreate the iframe. Callback changes are\n // picked up from the ref without reloading an in-progress Designer session.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.designerUrl, props.expectedChartId, props.expectedWorkspaceId, props.title, props.iframeClassName, props.iframeStyle, props.allow, props.referrerPolicy]);\n\n useImperativeHandle(ref, () => ({\n setDesignerUrl: (designerUrl) => { designerRef.current?.setDesignerUrl(designerUrl); },\n getIframe: () => designerRef.current?.getIframe() ?? null,\n }), []);\n\n return <div ref={containerRef} className={props.className} style={props.style} />;\n },\n);\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatPicker as CoreSeatPicker,\n type SeatPickerOptions,\n type SeatPickerTheme,\n type SelectedSeat,\n type HoldResult,\n} from '@seatlayer/js';\n\nexport type { SeatPickerOptions, SeatPickerTheme, CheckoutHandoff, CheckoutLineItem } from '@seatlayer/js';\n\n/** Imperative handle for the full-experience picker widget. */\nexport interface SeatPickerHandle {\n /** Current selection with resolved prices. */\n getSelection(): SelectedSeat[];\n /** Server-side best seats + hold, reflected in the widget tray. */\n bestAvailable(qty: number, categoryKey?: string): Promise<HoldResult | null>;\n /** Release the current hold (if any) and reset the tray. */\n release(): Promise<void>;\n}\n\nexport interface SeatPickerProps extends Omit<SeatPickerOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React wrapper around the full SeatPicker widget (header · live price panel ·\n * tray · GA · hold countdown · toasts). The widget is container-adaptive: give\n * the wrapping div a size and it lays itself out for that box (side panel wide,\n * bottom sheet narrow). For the one-call modal, use `SeatPicker.open()` from\n * `@seatlayer/js` directly.\n */\nexport const SeatPicker = forwardRef<SeatPickerHandle, SeatPickerProps>(\n function SeatPicker(props, ref) {\n const { className, style, event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, confirmSelection, seatView } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const pickerRef = useRef<CoreSeatPicker | null>(null);\n\n // Always call the latest callbacks without rebuilding the widget.\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const picker = new CoreSeatPicker({\n container: el,\n event,\n apiBase,\n maxSelection,\n publicKey,\n locale,\n currency,\n colorblindSafe,\n holdTtlMs,\n confirmSelection,\n seatView,\n theme: callbacks.current.theme,\n messages: callbacks.current.messages,\n onCheckout: (hold, seats, handoff) => callbacks.current.onCheckout?.(hold, seats, handoff),\n onBooked: (handoff) => callbacks.current.onBooked?.(handoff),\n onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),\n onHoldExpired: () => callbacks.current.onHoldExpired?.(),\n onError: (err) => callbacks.current.onError?.(err),\n });\n pickerRef.current = picker;\n void picker.render();\n\n return () => {\n picker.destroy();\n pickerRef.current = null;\n };\n // Rebuild only when the identity of the event/config changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, confirmSelection, seatView]);\n\n useImperativeHandle(\n ref,\n (): SeatPickerHandle => ({\n getSelection: () => pickerRef.current?.getSelection() ?? [],\n bestAvailable: (qty, categoryKey) => pickerRef.current?.bestAvailable(qty, categoryKey) ?? Promise.resolve(null),\n release: () => pickerRef.current?.release() ?? Promise.resolve(),\n }),\n [],\n );\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatManager as CoreSeatManager,\n type SeatManagerOptions,\n type SeatManagerMode,\n type SeatManagerTallies,\n type SeatManagerActivity,\n type SeatManagerActionResult,\n type ReportResult,\n type ControlRoomSnapshot,\n type LogEntry,\n type ExpandedSeat,\n} from '@seatlayer/js';\n\nexport type {\n SeatManagerOptions,\n SeatManagerMode,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n} from '@seatlayer/js';\n\n/** Imperative handle for the organizer manage board. */\nexport interface SeatManagerHandle {\n setMode(mode: SeatManagerMode): void;\n setToken(token: string, expiresAt?: number): void;\n setHeatOverlay(enabled: boolean): void;\n setTrendWindow(windowMinutes: number): Promise<ControlRoomSnapshot>;\n enterFullscreen(): Promise<void>;\n exitFullscreen(): Promise<void>;\n isFullscreen(): boolean;\n block(labels?: string[], opts?: { releaseAt?: number; reason?: string }): Promise<void>;\n unblock(labels?: string[]): Promise<void>;\n unblockAll(): Promise<void>;\n cancelBooking(labels: string[], bookingRef: string): Promise<void>;\n selectAll(): ExpandedSeat[];\n selectSection(sectionId: string): ExpandedSeat[];\n selectByLabels(labels: string[]): ExpandedSeat[];\n clearSelection(): void;\n getSelection(): ExpandedSeat[];\n getReport(): Promise<ReportResult>;\n getControlRoomSnapshot(windowMinutes?: number): Promise<ControlRoomSnapshot>;\n getLog(opts?: { limit?: number; before?: number }): Promise<{ entries: LogEntry[]; nextBefore: number | null }>;\n setHoldTtl(ms: number | null): Promise<void>;\n zoomToFit(): void;\n}\n\nexport interface SeatManagerProps extends Omit<SeatManagerOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React wrapper around the framework-agnostic {@link CoreSeatManager}. Give the\n * wrapping div a size (it fills its box — a war-room board wants a big one) and\n * the manager lays out the live map + KPI bar + rails inside it. Rebuilt only\n * when the event identity / apiBase changes. Tokens and callbacks are updated\n * in place without tearing the board down.\n */\nexport const SeatManager = forwardRef<SeatManagerHandle, SeatManagerProps>(\n function SeatManager(props, ref) {\n const {\n className, style, apiBase, eventKey, token, tokenExpiresAt,\n mode, currency, keepLiveWhileHidden,\n } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const managerRef = useRef<CoreSeatManager | null>(null);\n\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const manager = new CoreSeatManager({\n container: el,\n apiBase,\n eventKey,\n token,\n tokenExpiresAt,\n mode,\n currency,\n keepLiveWhileHidden,\n theme: callbacks.current.theme,\n onReady: () => callbacks.current.onReady?.(),\n onTallies: (t: SeatManagerTallies) => callbacks.current.onTallies?.(t),\n onActivity: (activity: SeatManagerActivity) => callbacks.current.onActivity?.(activity),\n onControlRoom: (snapshot: ControlRoomSnapshot) => callbacks.current.onControlRoom?.(snapshot),\n onTokenRefresh: callbacks.current.onTokenRefresh ? async () => callbacks.current.onTokenRefresh!() : undefined,\n onModeChange: (nextMode) => callbacks.current.onModeChange?.(nextMode),\n onSelectionChange: (s: ExpandedSeat[]) => callbacks.current.onSelectionChange?.(s),\n onActionComplete: (r: SeatManagerActionResult) => callbacks.current.onActionComplete?.(r),\n onError: (e: unknown) => callbacks.current.onError?.(e),\n });\n managerRef.current = manager;\n void manager.render();\n\n return () => {\n manager.destroy();\n managerRef.current = null;\n };\n // Rebuild only on identity change (not on every callback change).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [apiBase, eventKey]);\n\n // Rotate credentials without losing camera, selection, realtime state or DOM.\n useEffect(() => {\n managerRef.current?.setToken(token, tokenExpiresAt);\n }, [token, tokenExpiresAt]);\n\n // Reflect a controlled `mode` prop onto the live instance without rebuilding.\n useEffect(() => {\n if (mode) managerRef.current?.setMode(mode);\n }, [mode]);\n\n useImperativeHandle(\n ref,\n (): SeatManagerHandle => ({\n setMode: (m) => managerRef.current?.setMode(m),\n setToken: (nextToken, expiresAt) => managerRef.current?.setToken(nextToken, expiresAt),\n setHeatOverlay: (enabled) => managerRef.current?.setHeatOverlay(enabled),\n setTrendWindow: (windowMinutes) => managerRef.current?.setTrendWindow(windowMinutes)\n ?? Promise.reject(new Error('not ready')),\n enterFullscreen: () => managerRef.current?.enterFullscreen() ?? Promise.resolve(),\n exitFullscreen: () => managerRef.current?.exitFullscreen() ?? Promise.resolve(),\n isFullscreen: () => managerRef.current?.isFullscreen() ?? false,\n block: (labels, opts) => managerRef.current?.block(labels, opts) ?? Promise.resolve(),\n unblock: (labels) => managerRef.current?.unblock(labels) ?? Promise.resolve(),\n unblockAll: () => managerRef.current?.unblockAll() ?? Promise.resolve(),\n cancelBooking: (labels, bookingRef) => managerRef.current?.cancelBooking(labels, bookingRef) ?? Promise.resolve(),\n selectAll: () => managerRef.current?.selectAll() ?? [],\n selectSection: (id) => managerRef.current?.selectSection(id) ?? [],\n selectByLabels: (labels) => managerRef.current?.selectByLabels(labels) ?? [],\n clearSelection: () => managerRef.current?.clearSelection(),\n getSelection: () => managerRef.current?.getSelection() ?? [],\n getReport: () => managerRef.current?.getReport() ?? Promise.reject(new Error('not ready')),\n getControlRoomSnapshot: (windowMinutes) => managerRef.current?.getControlRoomSnapshot(windowMinutes)\n ?? Promise.reject(new Error('not ready')),\n getLog: (opts) => managerRef.current?.getLog(opts) ?? Promise.resolve({ entries: [], nextBefore: null }),\n setHoldTtl: (ms) => managerRef.current?.setHoldTtl(ms) ?? Promise.resolve(),\n zoomToFit: () => managerRef.current?.zoomToFit(),\n }),\n [],\n );\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n"],"mappings":"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","names":["SeatingChart","CoreSeatingChart","import_react","import_js","import_jsx_runtime","EmbeddedDesigner","CoreEmbeddedDesigner","import_react","import_js","import_jsx_runtime","SeatPicker","CoreSeatPicker","import_js","import_react","import_js","import_jsx_runtime","SeatManager","CoreSeatManager"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/SeatingChart.tsx","../src/EmbeddedDesigner.tsx","../src/SeatPicker.tsx","../src/SeatManager.tsx"],"sourcesContent":["/**\n * @seatlayer/react — the React wrapper for the SeatLayer embed SDK.\n */\nexport { SeatingChart } from './SeatingChart';\nexport { EmbeddedDesigner } from './EmbeddedDesigner';\nexport type {\n SeatingChartProps,\n SeatingChartHandle,\n SelectedSeat,\n HoldResult,\n BestAvailableResult,\n GAAreaAvailability,\n HoldLineItem,\n} from './SeatingChart';\nexport type { EmbeddedDesignerProps, EmbeddedDesignerHandle, EmbeddedDesignerMessage } from './EmbeddedDesigner';\nexport { SeatPicker } from './SeatPicker';\nexport type {\n SeatPickerHandle,\n SeatPickerProps,\n SeatPickerOptions,\n SeatPickerTheme,\n CheckoutHandoff,\n CheckoutLineItem,\n} from './SeatPicker';\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n\n// Organizer control room: Monitor + Inspect + bulk Block/unblock on one renderer.\nexport { SeatManager } from './SeatManager';\nexport type {\n SeatManagerHandle,\n SeatManagerProps,\n SeatManagerOptions,\n SeatManagerMode,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n} from './SeatManager';\nexport type { ControlRoomActivityEntry, ControlRoomSectionMetric, ControlRoomSnapshot } from '@seatlayer/js';\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatingChart as CoreSeatingChart,\n type SeatingChartOptions,\n type SelectedSeat,\n type HoldResult,\n type BestAvailableResult,\n type GAAreaAvailability,\n type HoldLineItem,\n} from '@seatlayer/js';\n\nexport type { SelectedSeat, HoldResult, BestAvailableResult, GAAreaAvailability, HoldLineItem } from '@seatlayer/js';\nexport type { SeatHoverDetails } from '@seatlayer/js';\n\n/** Imperative handle exposed via `ref` — call these to drive the picker from your app. */\nexport interface SeatingChartHandle {\n /** Hold the current selection. Resolves the hold, or `null` on a 409 conflict. */\n hold(options?: { ttlMs?: number }): Promise<HoldResult | null>;\n /** Restore an active hold by its opaque id. */\n resumeHold(holdId: string): Promise<HoldResult | null>;\n /** Current active hold known to the chart. */\n getCurrentHold(): HoldResult | null;\n /** GA areas with live remaining capacity. */\n getGAAreas(): GAAreaAvailability[];\n /** Atomically hold a quantity from one GA area. */\n holdGA(areaId: string, qty: number, options?: { tierId?: string | null; ttlMs?: number }): Promise<HoldResult | null>;\n /** Ask the server for the `qty` best free seats and hold them atomically. */\n bestAvailable(qty: number, categoryKey?: string): Promise<BestAvailableResult | null>;\n /** Release the current hold (if any). */\n release(): Promise<void>;\n /** Release some held labels while keeping the remainder active. */\n releaseLabels(labels: string[]): Promise<boolean>;\n /** The current selection, with prices resolved from the chart categories. */\n getSelection(): SelectedSeat[];\n /**\n * Choose a ticket tier for a selected seat (e.g. Adult → Child). Available\n * `tiers` are on each `SelectedSeat`; `tierId=null` reverts to the default.\n */\n setSeatTier(seatId: string, tierId: string | null): void;\n /**\n * Floors of a multi-floor chart — `[{ id, name }]` (single-floor charts\n * return one entry; empty before render()). Pair with setFloor().\n */\n getFloors(): { id: string; name: string }[];\n /** Switch the shown floor (2D). Warns + no-ops on single-floor charts. */\n setFloor(floorId: string): void;\n /** Toggle colorblind-safe rendering at runtime (see the `colorblindSafe` prop). */\n setColorblindSafe(on: boolean): void;\n /** Zoom in one step (same increment as the wheel/pinch gesture). */\n zoomIn(): void;\n /** Zoom out one step. */\n zoomOut(): void;\n /** Reset the camera so the whole chart fits the container. */\n zoomToFit(): void;\n}\n\nexport interface SeatingChartProps extends Omit<SeatingChartOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React wrapper around the framework-agnostic `@seatlayer/js` SDK.\n *\n * The underlying canvas is created once and torn down on unmount. Callback props\n * (`onSelectionChange`, `onHold`, `onError`, `onDeckTap`, `onHint`) may change\n * freely between renders without re-mounting the canvas — only `event`,\n * `apiBase`, `maxSelection`, `publicKey`, `locale`, `currency`, and\n * `colorblindSafe` trigger a rebuild. (`messages` is read once per mount;\n * changing it alone does not re-apply.)\n */\nexport const SeatingChart = forwardRef<SeatingChartHandle, SeatingChartProps>(\n function SeatingChart(props, ref) {\n const { className, style, event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const chartRef = useRef<CoreSeatingChart | null>(null);\n\n // Always call the latest callbacks without rebuilding the chart.\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const chart = new CoreSeatingChart({\n container: el,\n event,\n apiBase,\n maxSelection,\n publicKey,\n locale,\n currency,\n colorblindSafe,\n messages: callbacks.current.messages,\n onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),\n onHold: (result) => callbacks.current.onHold?.(result),\n onHoldRestored: (result) => callbacks.current.onHoldRestored?.(result),\n onHoldExpired: () => callbacks.current.onHoldExpired?.(),\n onGAClick: (area) => callbacks.current.onGAClick?.(area),\n onError: (err) => callbacks.current.onError?.(err),\n onDeckTap: (floorId) => callbacks.current.onDeckTap?.(floorId),\n onHint: (message) => callbacks.current.onHint?.(message),\n seatTooltip: props.seatTooltip,\n onSeatHover: (details) => callbacks.current.onSeatHover?.(details),\n });\n chartRef.current = chart;\n void chart.render();\n\n return () => {\n chart.destroy();\n chartRef.current = null;\n };\n // Rebuild only when the identity of the chart changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe]);\n\n useImperativeHandle(\n ref,\n (): SeatingChartHandle => ({\n hold: (options) => chartRef.current?.hold(options) ?? Promise.resolve(null),\n resumeHold: (holdId) => chartRef.current?.resumeHold(holdId) ?? Promise.resolve(null),\n getCurrentHold: () => chartRef.current?.getCurrentHold() ?? null,\n getGAAreas: () => chartRef.current?.getGAAreas() ?? [],\n holdGA: (areaId, qty, options) => chartRef.current?.holdGA(areaId, qty, options) ?? Promise.resolve(null),\n bestAvailable: (qty, categoryKey) =>\n chartRef.current?.bestAvailable(qty, categoryKey) ?? Promise.resolve(null),\n release: () => chartRef.current?.release() ?? Promise.resolve(),\n releaseLabels: (labels) => chartRef.current?.releaseLabels(labels) ?? Promise.resolve(false),\n getSelection: () => chartRef.current?.getSelection() ?? [],\n setSeatTier: (seatId, tierId) => chartRef.current?.setSeatTier(seatId, tierId),\n getFloors: () => chartRef.current?.getFloors() ?? [],\n setFloor: (floorId) => chartRef.current?.setFloor(floorId),\n setColorblindSafe: (on) => chartRef.current?.setColorblindSafe(on),\n zoomIn: () => chartRef.current?.zoomIn(),\n zoomOut: () => chartRef.current?.zoomOut(),\n zoomToFit: () => chartRef.current?.zoomToFit(),\n }),\n [],\n );\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n EmbeddedDesigner as CoreEmbeddedDesigner,\n type EmbeddedDesignerMessage,\n} from '@seatlayer/js';\n\nexport type { EmbeddedDesignerMessage } from '@seatlayer/js';\n\nexport interface EmbeddedDesignerHandle {\n /** Recreate the iframe with a newly-minted session URL. */\n setDesignerUrl(designerUrl: string): void;\n /** The currently mounted iframe, if any. */\n getIframe(): HTMLIFrameElement | null;\n}\n\nexport interface EmbeddedDesignerProps {\n /** Short-lived `designerUrl` returned by your backend. Never pass an `sk_` key. */\n designerUrl: string;\n expectedChartId?: string;\n expectedWorkspaceId?: string;\n title?: string;\n className?: string;\n style?: CSSProperties;\n iframeClassName?: string;\n iframeStyle?: Partial<CSSStyleDeclaration>;\n allow?: string;\n referrerPolicy?: ReferrerPolicy;\n onReady?: (message: EmbeddedDesignerMessage) => void;\n onSaved?: (message: EmbeddedDesignerMessage) => void;\n onPublished?: (message: EmbeddedDesignerMessage) => void;\n onClose?: (message: EmbeddedDesignerMessage) => void;\n onError?: (message: EmbeddedDesignerMessage) => void;\n}\n\n/**\n * Native-feeling React host for the secure SeatLayer Designer iframe.\n * A new `designerUrl` always recreates the iframe, so a new fragment token can\n * never retain state from an earlier chart session.\n */\nexport const EmbeddedDesigner = forwardRef<EmbeddedDesignerHandle, EmbeddedDesignerProps>(\n function EmbeddedDesigner(props, ref) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const designerRef = useRef<CoreEmbeddedDesigner | null>(null);\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const designer = new CoreEmbeddedDesigner({\n designerUrl: props.designerUrl,\n container,\n expectedChartId: props.expectedChartId,\n expectedWorkspaceId: props.expectedWorkspaceId,\n title: props.title,\n className: props.iframeClassName,\n style: props.iframeStyle,\n allow: props.allow,\n referrerPolicy: props.referrerPolicy,\n onReady: (message) => callbacks.current.onReady?.(message),\n onSaved: (message) => callbacks.current.onSaved?.(message),\n onPublished: (message) => callbacks.current.onPublished?.(message),\n onClose: (message) => callbacks.current.onClose?.(message),\n onError: (message) => callbacks.current.onError?.(message),\n });\n designer.mount();\n designerRef.current = designer;\n return () => {\n designer.destroy();\n designerRef.current = null;\n };\n // Session/chart identity changes must recreate the iframe. Callback changes are\n // picked up from the ref without reloading an in-progress Designer session.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.designerUrl, props.expectedChartId, props.expectedWorkspaceId, props.title, props.iframeClassName, props.iframeStyle, props.allow, props.referrerPolicy]);\n\n useImperativeHandle(ref, () => ({\n setDesignerUrl: (designerUrl) => { designerRef.current?.setDesignerUrl(designerUrl); },\n getIframe: () => designerRef.current?.getIframe() ?? null,\n }), []);\n\n return <div ref={containerRef} className={props.className} style={props.style} />;\n },\n);\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatPicker as CoreSeatPicker,\n type SeatPickerOptions,\n type SeatPickerTheme,\n type SelectedSeat,\n type HoldResult,\n} from '@seatlayer/js';\n\nexport type { SeatPickerOptions, SeatPickerTheme, CheckoutHandoff, CheckoutLineItem } from '@seatlayer/js';\n\n/** Imperative handle for the full-experience picker widget. */\nexport interface SeatPickerHandle {\n /** Current selection with resolved prices. */\n getSelection(): SelectedSeat[];\n /** Server-side best seats + hold, reflected in the widget tray. */\n bestAvailable(qty: number, categoryKey?: string): Promise<HoldResult | null>;\n /** Current active/restored hold reflected in the tray. */\n getCurrentHold(): HoldResult | null;\n /** Restore an active hold by its opaque id. */\n resumeHold(holdId: string): Promise<HoldResult | null>;\n /** Remove one held ticket while preserving the remainder. */\n removeHeldTicket(label: string): Promise<boolean>;\n /** Release the current hold (if any) and reset the tray. */\n release(): Promise<void>;\n}\n\nexport interface SeatPickerProps extends Omit<SeatPickerOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React wrapper around the full SeatPicker widget (header · live price panel ·\n * tray · GA · hold countdown · toasts). The widget is container-adaptive: give\n * the wrapping div a size and it lays itself out for that box (side panel wide,\n * bottom sheet narrow). For the one-call modal, use `SeatPicker.open()` from\n * `@seatlayer/js` directly.\n */\nexport const SeatPicker = forwardRef<SeatPickerHandle, SeatPickerProps>(\n function SeatPicker(props, ref) {\n const { className, style, event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const pickerRef = useRef<CoreSeatPicker | null>(null);\n\n // Always call the latest callbacks without rebuilding the widget.\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const picker = new CoreSeatPicker({\n container: el,\n event,\n apiBase,\n maxSelection,\n publicKey,\n locale,\n currency,\n colorblindSafe,\n holdTtlMs,\n initialHoldId,\n restoreHold,\n confirmSelection,\n seatView,\n theme: callbacks.current.theme,\n messages: callbacks.current.messages,\n onCheckout: (hold, seats, handoff) => callbacks.current.onCheckout?.(hold, seats, handoff),\n onBooked: (handoff) => callbacks.current.onBooked?.(handoff),\n onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),\n onHoldChange: (hold, seats, handoff) => callbacks.current.onHoldChange?.(hold, seats, handoff),\n onHoldExpired: () => callbacks.current.onHoldExpired?.(),\n onHoldRestored: (hold, seats, handoff) => callbacks.current.onHoldRestored?.(hold, seats, handoff),\n onError: (err) => callbacks.current.onError?.(err),\n });\n pickerRef.current = picker;\n void picker.render();\n\n return () => {\n picker.destroy();\n pickerRef.current = null;\n };\n // Rebuild only when the identity of the event/config changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView]);\n\n useImperativeHandle(\n ref,\n (): SeatPickerHandle => ({\n getSelection: () => pickerRef.current?.getSelection() ?? [],\n bestAvailable: (qty, categoryKey) => pickerRef.current?.bestAvailable(qty, categoryKey) ?? Promise.resolve(null),\n getCurrentHold: () => pickerRef.current?.getCurrentHold() ?? null,\n resumeHold: (holdId) => pickerRef.current?.resumeHold(holdId) ?? Promise.resolve(null),\n removeHeldTicket: (label) => pickerRef.current?.removeHeldTicket(label) ?? Promise.resolve(false),\n release: () => pickerRef.current?.release() ?? Promise.resolve(),\n }),\n [],\n );\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatManager as CoreSeatManager,\n type SeatManagerOptions,\n type SeatManagerMode,\n type SeatManagerTallies,\n type SeatManagerActivity,\n type SeatManagerActionResult,\n type ReportResult,\n type ControlRoomSnapshot,\n type LogEntry,\n type ExpandedSeat,\n} from '@seatlayer/js';\n\nexport type {\n SeatManagerOptions,\n SeatManagerMode,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n} from '@seatlayer/js';\n\n/** Imperative handle for the organizer manage board. */\nexport interface SeatManagerHandle {\n setMode(mode: SeatManagerMode): void;\n setToken(token: string, expiresAt?: number): void;\n setHeatOverlay(enabled: boolean): void;\n setTrendWindow(windowMinutes: number): Promise<ControlRoomSnapshot>;\n enterFullscreen(): Promise<void>;\n exitFullscreen(): Promise<void>;\n isFullscreen(): boolean;\n block(labels?: string[], opts?: { releaseAt?: number; reason?: string }): Promise<void>;\n unblock(labels?: string[]): Promise<void>;\n unblockAll(): Promise<void>;\n cancelBooking(labels: string[], bookingRef: string): Promise<void>;\n selectAll(): ExpandedSeat[];\n selectSection(sectionId: string): ExpandedSeat[];\n selectByLabels(labels: string[]): ExpandedSeat[];\n clearSelection(): void;\n getSelection(): ExpandedSeat[];\n getReport(): Promise<ReportResult>;\n getControlRoomSnapshot(windowMinutes?: number): Promise<ControlRoomSnapshot>;\n getLog(opts?: { limit?: number; before?: number }): Promise<{ entries: LogEntry[]; nextBefore: number | null }>;\n setHoldTtl(ms: number | null): Promise<void>;\n zoomToFit(): void;\n}\n\nexport interface SeatManagerProps extends Omit<SeatManagerOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React wrapper around the framework-agnostic {@link CoreSeatManager}. Give the\n * wrapping div a size (it fills its box — a war-room board wants a big one) and\n * the manager lays out the live map + KPI bar + rails inside it. Rebuilt only\n * when the event identity / apiBase changes. Tokens and callbacks are updated\n * in place without tearing the board down.\n */\nexport const SeatManager = forwardRef<SeatManagerHandle, SeatManagerProps>(\n function SeatManager(props, ref) {\n const {\n className, style, apiBase, eventKey, token, tokenExpiresAt,\n mode, currency, keepLiveWhileHidden,\n } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const managerRef = useRef<CoreSeatManager | null>(null);\n\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const manager = new CoreSeatManager({\n container: el,\n apiBase,\n eventKey,\n token,\n tokenExpiresAt,\n mode,\n currency,\n keepLiveWhileHidden,\n theme: callbacks.current.theme,\n onReady: () => callbacks.current.onReady?.(),\n onTallies: (t: SeatManagerTallies) => callbacks.current.onTallies?.(t),\n onActivity: (activity: SeatManagerActivity) => callbacks.current.onActivity?.(activity),\n onControlRoom: (snapshot: ControlRoomSnapshot) => callbacks.current.onControlRoom?.(snapshot),\n onTokenRefresh: callbacks.current.onTokenRefresh ? async () => callbacks.current.onTokenRefresh!() : undefined,\n onModeChange: (nextMode) => callbacks.current.onModeChange?.(nextMode),\n onSelectionChange: (s: ExpandedSeat[]) => callbacks.current.onSelectionChange?.(s),\n onActionComplete: (r: SeatManagerActionResult) => callbacks.current.onActionComplete?.(r),\n onError: (e: unknown) => callbacks.current.onError?.(e),\n });\n managerRef.current = manager;\n void manager.render();\n\n return () => {\n manager.destroy();\n managerRef.current = null;\n };\n // Rebuild only on identity change (not on every callback change).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [apiBase, eventKey]);\n\n // Rotate credentials without losing camera, selection, realtime state or DOM.\n useEffect(() => {\n managerRef.current?.setToken(token, tokenExpiresAt);\n }, [token, tokenExpiresAt]);\n\n // Reflect a controlled `mode` prop onto the live instance without rebuilding.\n useEffect(() => {\n if (mode) managerRef.current?.setMode(mode);\n }, [mode]);\n\n useImperativeHandle(\n ref,\n (): SeatManagerHandle => ({\n setMode: (m) => managerRef.current?.setMode(m),\n setToken: (nextToken, expiresAt) => managerRef.current?.setToken(nextToken, expiresAt),\n setHeatOverlay: (enabled) => managerRef.current?.setHeatOverlay(enabled),\n setTrendWindow: (windowMinutes) => managerRef.current?.setTrendWindow(windowMinutes)\n ?? Promise.reject(new Error('not ready')),\n enterFullscreen: () => managerRef.current?.enterFullscreen() ?? Promise.resolve(),\n exitFullscreen: () => managerRef.current?.exitFullscreen() ?? Promise.resolve(),\n isFullscreen: () => managerRef.current?.isFullscreen() ?? false,\n block: (labels, opts) => managerRef.current?.block(labels, opts) ?? Promise.resolve(),\n unblock: (labels) => managerRef.current?.unblock(labels) ?? Promise.resolve(),\n unblockAll: () => managerRef.current?.unblockAll() ?? Promise.resolve(),\n cancelBooking: (labels, bookingRef) => managerRef.current?.cancelBooking(labels, bookingRef) ?? Promise.resolve(),\n selectAll: () => managerRef.current?.selectAll() ?? [],\n selectSection: (id) => managerRef.current?.selectSection(id) ?? [],\n selectByLabels: (labels) => managerRef.current?.selectByLabels(labels) ?? [],\n clearSelection: () => managerRef.current?.clearSelection(),\n getSelection: () => managerRef.current?.getSelection() ?? [],\n getReport: () => managerRef.current?.getReport() ?? Promise.reject(new Error('not ready')),\n getControlRoomSnapshot: (windowMinutes) => managerRef.current?.getControlRoomSnapshot(windowMinutes)\n ?? Promise.reject(new Error('not ready')),\n getLog: (opts) => managerRef.current?.getLog(opts) ?? Promise.resolve({ entries: [], nextBefore: null }),\n setHoldTtl: (ms) => managerRef.current?.setHoldTtl(ms) ?? Promise.resolve(),\n zoomToFit: () => managerRef.current?.zoomToFit(),\n }),\n [],\n );\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n"],"mappings":"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","names":["SeatingChart","CoreSeatingChart","import_react","import_js","import_jsx_runtime","EmbeddedDesigner","CoreEmbeddedDesigner","import_react","import_js","import_jsx_runtime","SeatPicker","CoreSeatPicker","import_js","import_react","import_js","import_jsx_runtime","SeatManager","CoreSeatManager"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -9,6 +9,10 @@ interface SeatingChartHandle {
|
|
|
9
9
|
hold(options?: {
|
|
10
10
|
ttlMs?: number;
|
|
11
11
|
}): Promise<HoldResult | null>;
|
|
12
|
+
/** Restore an active hold by its opaque id. */
|
|
13
|
+
resumeHold(holdId: string): Promise<HoldResult | null>;
|
|
14
|
+
/** Current active hold known to the chart. */
|
|
15
|
+
getCurrentHold(): HoldResult | null;
|
|
12
16
|
/** GA areas with live remaining capacity. */
|
|
13
17
|
getGAAreas(): GAAreaAvailability[];
|
|
14
18
|
/** Atomically hold a quantity from one GA area. */
|
|
@@ -20,6 +24,8 @@ interface SeatingChartHandle {
|
|
|
20
24
|
bestAvailable(qty: number, categoryKey?: string): Promise<BestAvailableResult | null>;
|
|
21
25
|
/** Release the current hold (if any). */
|
|
22
26
|
release(): Promise<void>;
|
|
27
|
+
/** Release some held labels while keeping the remainder active. */
|
|
28
|
+
releaseLabels(labels: string[]): Promise<boolean>;
|
|
23
29
|
/** The current selection, with prices resolved from the chart categories. */
|
|
24
30
|
getSelection(): SelectedSeat[];
|
|
25
31
|
/**
|
|
@@ -99,6 +105,12 @@ interface SeatPickerHandle {
|
|
|
99
105
|
getSelection(): SelectedSeat[];
|
|
100
106
|
/** Server-side best seats + hold, reflected in the widget tray. */
|
|
101
107
|
bestAvailable(qty: number, categoryKey?: string): Promise<HoldResult | null>;
|
|
108
|
+
/** Current active/restored hold reflected in the tray. */
|
|
109
|
+
getCurrentHold(): HoldResult | null;
|
|
110
|
+
/** Restore an active hold by its opaque id. */
|
|
111
|
+
resumeHold(holdId: string): Promise<HoldResult | null>;
|
|
112
|
+
/** Remove one held ticket while preserving the remainder. */
|
|
113
|
+
removeHeldTicket(label: string): Promise<boolean>;
|
|
102
114
|
/** Release the current hold (if any) and reset the tray. */
|
|
103
115
|
release(): Promise<void>;
|
|
104
116
|
}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,10 @@ interface SeatingChartHandle {
|
|
|
9
9
|
hold(options?: {
|
|
10
10
|
ttlMs?: number;
|
|
11
11
|
}): Promise<HoldResult | null>;
|
|
12
|
+
/** Restore an active hold by its opaque id. */
|
|
13
|
+
resumeHold(holdId: string): Promise<HoldResult | null>;
|
|
14
|
+
/** Current active hold known to the chart. */
|
|
15
|
+
getCurrentHold(): HoldResult | null;
|
|
12
16
|
/** GA areas with live remaining capacity. */
|
|
13
17
|
getGAAreas(): GAAreaAvailability[];
|
|
14
18
|
/** Atomically hold a quantity from one GA area. */
|
|
@@ -20,6 +24,8 @@ interface SeatingChartHandle {
|
|
|
20
24
|
bestAvailable(qty: number, categoryKey?: string): Promise<BestAvailableResult | null>;
|
|
21
25
|
/** Release the current hold (if any). */
|
|
22
26
|
release(): Promise<void>;
|
|
27
|
+
/** Release some held labels while keeping the remainder active. */
|
|
28
|
+
releaseLabels(labels: string[]): Promise<boolean>;
|
|
23
29
|
/** The current selection, with prices resolved from the chart categories. */
|
|
24
30
|
getSelection(): SelectedSeat[];
|
|
25
31
|
/**
|
|
@@ -99,6 +105,12 @@ interface SeatPickerHandle {
|
|
|
99
105
|
getSelection(): SelectedSeat[];
|
|
100
106
|
/** Server-side best seats + hold, reflected in the widget tray. */
|
|
101
107
|
bestAvailable(qty: number, categoryKey?: string): Promise<HoldResult | null>;
|
|
108
|
+
/** Current active/restored hold reflected in the tray. */
|
|
109
|
+
getCurrentHold(): HoldResult | null;
|
|
110
|
+
/** Restore an active hold by its opaque id. */
|
|
111
|
+
resumeHold(holdId: string): Promise<HoldResult | null>;
|
|
112
|
+
/** Remove one held ticket while preserving the remainder. */
|
|
113
|
+
removeHeldTicket(label: string): Promise<boolean>;
|
|
102
114
|
/** Release the current hold (if any) and reset the tray. */
|
|
103
115
|
release(): Promise<void>;
|
|
104
116
|
}
|
package/dist/index.js
CHANGED
|
@@ -31,6 +31,7 @@ var SeatingChart = forwardRef(
|
|
|
31
31
|
messages: callbacks.current.messages,
|
|
32
32
|
onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),
|
|
33
33
|
onHold: (result) => callbacks.current.onHold?.(result),
|
|
34
|
+
onHoldRestored: (result) => callbacks.current.onHoldRestored?.(result),
|
|
34
35
|
onHoldExpired: () => callbacks.current.onHoldExpired?.(),
|
|
35
36
|
onGAClick: (area) => callbacks.current.onGAClick?.(area),
|
|
36
37
|
onError: (err) => callbacks.current.onError?.(err),
|
|
@@ -50,10 +51,13 @@ var SeatingChart = forwardRef(
|
|
|
50
51
|
ref,
|
|
51
52
|
() => ({
|
|
52
53
|
hold: (options) => chartRef.current?.hold(options) ?? Promise.resolve(null),
|
|
54
|
+
resumeHold: (holdId) => chartRef.current?.resumeHold(holdId) ?? Promise.resolve(null),
|
|
55
|
+
getCurrentHold: () => chartRef.current?.getCurrentHold() ?? null,
|
|
53
56
|
getGAAreas: () => chartRef.current?.getGAAreas() ?? [],
|
|
54
57
|
holdGA: (areaId, qty, options) => chartRef.current?.holdGA(areaId, qty, options) ?? Promise.resolve(null),
|
|
55
58
|
bestAvailable: (qty, categoryKey) => chartRef.current?.bestAvailable(qty, categoryKey) ?? Promise.resolve(null),
|
|
56
59
|
release: () => chartRef.current?.release() ?? Promise.resolve(),
|
|
60
|
+
releaseLabels: (labels) => chartRef.current?.releaseLabels(labels) ?? Promise.resolve(false),
|
|
57
61
|
getSelection: () => chartRef.current?.getSelection() ?? [],
|
|
58
62
|
setSeatTier: (seatId, tierId) => chartRef.current?.setSeatTier(seatId, tierId),
|
|
59
63
|
getFloors: () => chartRef.current?.getFloors() ?? [],
|
|
@@ -135,7 +139,7 @@ import {
|
|
|
135
139
|
import { jsx as jsx3 } from "react/jsx-runtime";
|
|
136
140
|
var SeatPicker = forwardRef3(
|
|
137
141
|
function SeatPicker2(props, ref) {
|
|
138
|
-
const { className, style, event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, confirmSelection, seatView } = props;
|
|
142
|
+
const { className, style, event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView } = props;
|
|
139
143
|
const containerRef = useRef3(null);
|
|
140
144
|
const pickerRef = useRef3(null);
|
|
141
145
|
const callbacks = useRef3(props);
|
|
@@ -153,6 +157,8 @@ var SeatPicker = forwardRef3(
|
|
|
153
157
|
currency,
|
|
154
158
|
colorblindSafe,
|
|
155
159
|
holdTtlMs,
|
|
160
|
+
initialHoldId,
|
|
161
|
+
restoreHold,
|
|
156
162
|
confirmSelection,
|
|
157
163
|
seatView,
|
|
158
164
|
theme: callbacks.current.theme,
|
|
@@ -160,7 +166,9 @@ var SeatPicker = forwardRef3(
|
|
|
160
166
|
onCheckout: (hold, seats, handoff) => callbacks.current.onCheckout?.(hold, seats, handoff),
|
|
161
167
|
onBooked: (handoff) => callbacks.current.onBooked?.(handoff),
|
|
162
168
|
onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),
|
|
169
|
+
onHoldChange: (hold, seats, handoff) => callbacks.current.onHoldChange?.(hold, seats, handoff),
|
|
163
170
|
onHoldExpired: () => callbacks.current.onHoldExpired?.(),
|
|
171
|
+
onHoldRestored: (hold, seats, handoff) => callbacks.current.onHoldRestored?.(hold, seats, handoff),
|
|
164
172
|
onError: (err) => callbacks.current.onError?.(err)
|
|
165
173
|
});
|
|
166
174
|
pickerRef.current = picker;
|
|
@@ -169,12 +177,15 @@ var SeatPicker = forwardRef3(
|
|
|
169
177
|
picker.destroy();
|
|
170
178
|
pickerRef.current = null;
|
|
171
179
|
};
|
|
172
|
-
}, [event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, confirmSelection, seatView]);
|
|
180
|
+
}, [event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView]);
|
|
173
181
|
useImperativeHandle3(
|
|
174
182
|
ref,
|
|
175
183
|
() => ({
|
|
176
184
|
getSelection: () => pickerRef.current?.getSelection() ?? [],
|
|
177
185
|
bestAvailable: (qty, categoryKey) => pickerRef.current?.bestAvailable(qty, categoryKey) ?? Promise.resolve(null),
|
|
186
|
+
getCurrentHold: () => pickerRef.current?.getCurrentHold() ?? null,
|
|
187
|
+
resumeHold: (holdId) => pickerRef.current?.resumeHold(holdId) ?? Promise.resolve(null),
|
|
188
|
+
removeHeldTicket: (label) => pickerRef.current?.removeHeldTicket(label) ?? Promise.resolve(false),
|
|
178
189
|
release: () => pickerRef.current?.release() ?? Promise.resolve()
|
|
179
190
|
}),
|
|
180
191
|
[]
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SeatingChart.tsx","../src/EmbeddedDesigner.tsx","../src/SeatPicker.tsx","../src/index.ts","../src/SeatManager.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatingChart as CoreSeatingChart,\n type SeatingChartOptions,\n type SelectedSeat,\n type HoldResult,\n type BestAvailableResult,\n type GAAreaAvailability,\n type HoldLineItem,\n} from '@seatlayer/js';\n\nexport type { SelectedSeat, HoldResult, BestAvailableResult, GAAreaAvailability, HoldLineItem } from '@seatlayer/js';\nexport type { SeatHoverDetails } from '@seatlayer/js';\n\n/** Imperative handle exposed via `ref` — call these to drive the picker from your app. */\nexport interface SeatingChartHandle {\n /** Hold the current selection. Resolves the hold, or `null` on a 409 conflict. */\n hold(options?: { ttlMs?: number }): Promise<HoldResult | null>;\n /** GA areas with live remaining capacity. */\n getGAAreas(): GAAreaAvailability[];\n /** Atomically hold a quantity from one GA area. */\n holdGA(areaId: string, qty: number, options?: { tierId?: string | null; ttlMs?: number }): Promise<HoldResult | null>;\n /** Ask the server for the `qty` best free seats and hold them atomically. */\n bestAvailable(qty: number, categoryKey?: string): Promise<BestAvailableResult | null>;\n /** Release the current hold (if any). */\n release(): Promise<void>;\n /** The current selection, with prices resolved from the chart categories. */\n getSelection(): SelectedSeat[];\n /**\n * Choose a ticket tier for a selected seat (e.g. Adult → Child). Available\n * `tiers` are on each `SelectedSeat`; `tierId=null` reverts to the default.\n */\n setSeatTier(seatId: string, tierId: string | null): void;\n /**\n * Floors of a multi-floor chart — `[{ id, name }]` (single-floor charts\n * return one entry; empty before render()). Pair with setFloor().\n */\n getFloors(): { id: string; name: string }[];\n /** Switch the shown floor (2D). Warns + no-ops on single-floor charts. */\n setFloor(floorId: string): void;\n /** Toggle colorblind-safe rendering at runtime (see the `colorblindSafe` prop). */\n setColorblindSafe(on: boolean): void;\n /** Zoom in one step (same increment as the wheel/pinch gesture). */\n zoomIn(): void;\n /** Zoom out one step. */\n zoomOut(): void;\n /** Reset the camera so the whole chart fits the container. */\n zoomToFit(): void;\n}\n\nexport interface SeatingChartProps extends Omit<SeatingChartOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React wrapper around the framework-agnostic `@seatlayer/js` SDK.\n *\n * The underlying canvas is created once and torn down on unmount. Callback props\n * (`onSelectionChange`, `onHold`, `onError`, `onDeckTap`, `onHint`) may change\n * freely between renders without re-mounting the canvas — only `event`,\n * `apiBase`, `maxSelection`, `publicKey`, `locale`, `currency`, and\n * `colorblindSafe` trigger a rebuild. (`messages` is read once per mount;\n * changing it alone does not re-apply.)\n */\nexport const SeatingChart = forwardRef<SeatingChartHandle, SeatingChartProps>(\n function SeatingChart(props, ref) {\n const { className, style, event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const chartRef = useRef<CoreSeatingChart | null>(null);\n\n // Always call the latest callbacks without rebuilding the chart.\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const chart = new CoreSeatingChart({\n container: el,\n event,\n apiBase,\n maxSelection,\n publicKey,\n locale,\n currency,\n colorblindSafe,\n messages: callbacks.current.messages,\n onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),\n onHold: (result) => callbacks.current.onHold?.(result),\n onHoldExpired: () => callbacks.current.onHoldExpired?.(),\n onGAClick: (area) => callbacks.current.onGAClick?.(area),\n onError: (err) => callbacks.current.onError?.(err),\n onDeckTap: (floorId) => callbacks.current.onDeckTap?.(floorId),\n onHint: (message) => callbacks.current.onHint?.(message),\n seatTooltip: props.seatTooltip,\n onSeatHover: (details) => callbacks.current.onSeatHover?.(details),\n });\n chartRef.current = chart;\n void chart.render();\n\n return () => {\n chart.destroy();\n chartRef.current = null;\n };\n // Rebuild only when the identity of the chart changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe]);\n\n useImperativeHandle(\n ref,\n (): SeatingChartHandle => ({\n hold: (options) => chartRef.current?.hold(options) ?? Promise.resolve(null),\n getGAAreas: () => chartRef.current?.getGAAreas() ?? [],\n holdGA: (areaId, qty, options) => chartRef.current?.holdGA(areaId, qty, options) ?? Promise.resolve(null),\n bestAvailable: (qty, categoryKey) =>\n chartRef.current?.bestAvailable(qty, categoryKey) ?? Promise.resolve(null),\n release: () => chartRef.current?.release() ?? Promise.resolve(),\n getSelection: () => chartRef.current?.getSelection() ?? [],\n setSeatTier: (seatId, tierId) => chartRef.current?.setSeatTier(seatId, tierId),\n getFloors: () => chartRef.current?.getFloors() ?? [],\n setFloor: (floorId) => chartRef.current?.setFloor(floorId),\n setColorblindSafe: (on) => chartRef.current?.setColorblindSafe(on),\n zoomIn: () => chartRef.current?.zoomIn(),\n zoomOut: () => chartRef.current?.zoomOut(),\n zoomToFit: () => chartRef.current?.zoomToFit(),\n }),\n [],\n );\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n EmbeddedDesigner as CoreEmbeddedDesigner,\n type EmbeddedDesignerMessage,\n} from '@seatlayer/js';\n\nexport type { EmbeddedDesignerMessage } from '@seatlayer/js';\n\nexport interface EmbeddedDesignerHandle {\n /** Recreate the iframe with a newly-minted session URL. */\n setDesignerUrl(designerUrl: string): void;\n /** The currently mounted iframe, if any. */\n getIframe(): HTMLIFrameElement | null;\n}\n\nexport interface EmbeddedDesignerProps {\n /** Short-lived `designerUrl` returned by your backend. Never pass an `sk_` key. */\n designerUrl: string;\n expectedChartId?: string;\n expectedWorkspaceId?: string;\n title?: string;\n className?: string;\n style?: CSSProperties;\n iframeClassName?: string;\n iframeStyle?: Partial<CSSStyleDeclaration>;\n allow?: string;\n referrerPolicy?: ReferrerPolicy;\n onReady?: (message: EmbeddedDesignerMessage) => void;\n onSaved?: (message: EmbeddedDesignerMessage) => void;\n onPublished?: (message: EmbeddedDesignerMessage) => void;\n onClose?: (message: EmbeddedDesignerMessage) => void;\n onError?: (message: EmbeddedDesignerMessage) => void;\n}\n\n/**\n * Native-feeling React host for the secure SeatLayer Designer iframe.\n * A new `designerUrl` always recreates the iframe, so a new fragment token can\n * never retain state from an earlier chart session.\n */\nexport const EmbeddedDesigner = forwardRef<EmbeddedDesignerHandle, EmbeddedDesignerProps>(\n function EmbeddedDesigner(props, ref) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const designerRef = useRef<CoreEmbeddedDesigner | null>(null);\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const designer = new CoreEmbeddedDesigner({\n designerUrl: props.designerUrl,\n container,\n expectedChartId: props.expectedChartId,\n expectedWorkspaceId: props.expectedWorkspaceId,\n title: props.title,\n className: props.iframeClassName,\n style: props.iframeStyle,\n allow: props.allow,\n referrerPolicy: props.referrerPolicy,\n onReady: (message) => callbacks.current.onReady?.(message),\n onSaved: (message) => callbacks.current.onSaved?.(message),\n onPublished: (message) => callbacks.current.onPublished?.(message),\n onClose: (message) => callbacks.current.onClose?.(message),\n onError: (message) => callbacks.current.onError?.(message),\n });\n designer.mount();\n designerRef.current = designer;\n return () => {\n designer.destroy();\n designerRef.current = null;\n };\n // Session/chart identity changes must recreate the iframe. Callback changes are\n // picked up from the ref without reloading an in-progress Designer session.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.designerUrl, props.expectedChartId, props.expectedWorkspaceId, props.title, props.iframeClassName, props.iframeStyle, props.allow, props.referrerPolicy]);\n\n useImperativeHandle(ref, () => ({\n setDesignerUrl: (designerUrl) => { designerRef.current?.setDesignerUrl(designerUrl); },\n getIframe: () => designerRef.current?.getIframe() ?? null,\n }), []);\n\n return <div ref={containerRef} className={props.className} style={props.style} />;\n },\n);\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatPicker as CoreSeatPicker,\n type SeatPickerOptions,\n type SeatPickerTheme,\n type SelectedSeat,\n type HoldResult,\n} from '@seatlayer/js';\n\nexport type { SeatPickerOptions, SeatPickerTheme, CheckoutHandoff, CheckoutLineItem } from '@seatlayer/js';\n\n/** Imperative handle for the full-experience picker widget. */\nexport interface SeatPickerHandle {\n /** Current selection with resolved prices. */\n getSelection(): SelectedSeat[];\n /** Server-side best seats + hold, reflected in the widget tray. */\n bestAvailable(qty: number, categoryKey?: string): Promise<HoldResult | null>;\n /** Release the current hold (if any) and reset the tray. */\n release(): Promise<void>;\n}\n\nexport interface SeatPickerProps extends Omit<SeatPickerOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React wrapper around the full SeatPicker widget (header · live price panel ·\n * tray · GA · hold countdown · toasts). The widget is container-adaptive: give\n * the wrapping div a size and it lays itself out for that box (side panel wide,\n * bottom sheet narrow). For the one-call modal, use `SeatPicker.open()` from\n * `@seatlayer/js` directly.\n */\nexport const SeatPicker = forwardRef<SeatPickerHandle, SeatPickerProps>(\n function SeatPicker(props, ref) {\n const { className, style, event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, confirmSelection, seatView } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const pickerRef = useRef<CoreSeatPicker | null>(null);\n\n // Always call the latest callbacks without rebuilding the widget.\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const picker = new CoreSeatPicker({\n container: el,\n event,\n apiBase,\n maxSelection,\n publicKey,\n locale,\n currency,\n colorblindSafe,\n holdTtlMs,\n confirmSelection,\n seatView,\n theme: callbacks.current.theme,\n messages: callbacks.current.messages,\n onCheckout: (hold, seats, handoff) => callbacks.current.onCheckout?.(hold, seats, handoff),\n onBooked: (handoff) => callbacks.current.onBooked?.(handoff),\n onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),\n onHoldExpired: () => callbacks.current.onHoldExpired?.(),\n onError: (err) => callbacks.current.onError?.(err),\n });\n pickerRef.current = picker;\n void picker.render();\n\n return () => {\n picker.destroy();\n pickerRef.current = null;\n };\n // Rebuild only when the identity of the event/config changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, confirmSelection, seatView]);\n\n useImperativeHandle(\n ref,\n (): SeatPickerHandle => ({\n getSelection: () => pickerRef.current?.getSelection() ?? [],\n bestAvailable: (qty, categoryKey) => pickerRef.current?.bestAvailable(qty, categoryKey) ?? Promise.resolve(null),\n release: () => pickerRef.current?.release() ?? Promise.resolve(),\n }),\n [],\n );\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n","/**\n * @seatlayer/react — the React wrapper for the SeatLayer embed SDK.\n */\nexport { SeatingChart } from './SeatingChart';\nexport { EmbeddedDesigner } from './EmbeddedDesigner';\nexport type {\n SeatingChartProps,\n SeatingChartHandle,\n SelectedSeat,\n HoldResult,\n BestAvailableResult,\n GAAreaAvailability,\n HoldLineItem,\n} from './SeatingChart';\nexport type { EmbeddedDesignerProps, EmbeddedDesignerHandle, EmbeddedDesignerMessage } from './EmbeddedDesigner';\nexport { SeatPicker } from './SeatPicker';\nexport type {\n SeatPickerHandle,\n SeatPickerProps,\n SeatPickerOptions,\n SeatPickerTheme,\n CheckoutHandoff,\n CheckoutLineItem,\n} from './SeatPicker';\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n\n// Organizer control room: Monitor + Inspect + bulk Block/unblock on one renderer.\nexport { SeatManager } from './SeatManager';\nexport type {\n SeatManagerHandle,\n SeatManagerProps,\n SeatManagerOptions,\n SeatManagerMode,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n} from './SeatManager';\nexport type { ControlRoomActivityEntry, ControlRoomSectionMetric, ControlRoomSnapshot } from '@seatlayer/js';\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatManager as CoreSeatManager,\n type SeatManagerOptions,\n type SeatManagerMode,\n type SeatManagerTallies,\n type SeatManagerActivity,\n type SeatManagerActionResult,\n type ReportResult,\n type ControlRoomSnapshot,\n type LogEntry,\n type ExpandedSeat,\n} from '@seatlayer/js';\n\nexport type {\n SeatManagerOptions,\n SeatManagerMode,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n} from '@seatlayer/js';\n\n/** Imperative handle for the organizer manage board. */\nexport interface SeatManagerHandle {\n setMode(mode: SeatManagerMode): void;\n setToken(token: string, expiresAt?: number): void;\n setHeatOverlay(enabled: boolean): void;\n setTrendWindow(windowMinutes: number): Promise<ControlRoomSnapshot>;\n enterFullscreen(): Promise<void>;\n exitFullscreen(): Promise<void>;\n isFullscreen(): boolean;\n block(labels?: string[], opts?: { releaseAt?: number; reason?: string }): Promise<void>;\n unblock(labels?: string[]): Promise<void>;\n unblockAll(): Promise<void>;\n cancelBooking(labels: string[], bookingRef: string): Promise<void>;\n selectAll(): ExpandedSeat[];\n selectSection(sectionId: string): ExpandedSeat[];\n selectByLabels(labels: string[]): ExpandedSeat[];\n clearSelection(): void;\n getSelection(): ExpandedSeat[];\n getReport(): Promise<ReportResult>;\n getControlRoomSnapshot(windowMinutes?: number): Promise<ControlRoomSnapshot>;\n getLog(opts?: { limit?: number; before?: number }): Promise<{ entries: LogEntry[]; nextBefore: number | null }>;\n setHoldTtl(ms: number | null): Promise<void>;\n zoomToFit(): void;\n}\n\nexport interface SeatManagerProps extends Omit<SeatManagerOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React wrapper around the framework-agnostic {@link CoreSeatManager}. Give the\n * wrapping div a size (it fills its box — a war-room board wants a big one) and\n * the manager lays out the live map + KPI bar + rails inside it. Rebuilt only\n * when the event identity / apiBase changes. Tokens and callbacks are updated\n * in place without tearing the board down.\n */\nexport const SeatManager = forwardRef<SeatManagerHandle, SeatManagerProps>(\n function SeatManager(props, ref) {\n const {\n className, style, apiBase, eventKey, token, tokenExpiresAt,\n mode, currency, keepLiveWhileHidden,\n } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const managerRef = useRef<CoreSeatManager | null>(null);\n\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const manager = new CoreSeatManager({\n container: el,\n apiBase,\n eventKey,\n token,\n tokenExpiresAt,\n mode,\n currency,\n keepLiveWhileHidden,\n theme: callbacks.current.theme,\n onReady: () => callbacks.current.onReady?.(),\n onTallies: (t: SeatManagerTallies) => callbacks.current.onTallies?.(t),\n onActivity: (activity: SeatManagerActivity) => callbacks.current.onActivity?.(activity),\n onControlRoom: (snapshot: ControlRoomSnapshot) => callbacks.current.onControlRoom?.(snapshot),\n onTokenRefresh: callbacks.current.onTokenRefresh ? async () => callbacks.current.onTokenRefresh!() : undefined,\n onModeChange: (nextMode) => callbacks.current.onModeChange?.(nextMode),\n onSelectionChange: (s: ExpandedSeat[]) => callbacks.current.onSelectionChange?.(s),\n onActionComplete: (r: SeatManagerActionResult) => callbacks.current.onActionComplete?.(r),\n onError: (e: unknown) => callbacks.current.onError?.(e),\n });\n managerRef.current = manager;\n void manager.render();\n\n return () => {\n manager.destroy();\n managerRef.current = null;\n };\n // Rebuild only on identity change (not on every callback change).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [apiBase, eventKey]);\n\n // Rotate credentials without losing camera, selection, realtime state or DOM.\n useEffect(() => {\n managerRef.current?.setToken(token, tokenExpiresAt);\n }, [token, tokenExpiresAt]);\n\n // Reflect a controlled `mode` prop onto the live instance without rebuilding.\n useEffect(() => {\n if (mode) managerRef.current?.setMode(mode);\n }, [mode]);\n\n useImperativeHandle(\n ref,\n (): SeatManagerHandle => ({\n setMode: (m) => managerRef.current?.setMode(m),\n setToken: (nextToken, expiresAt) => managerRef.current?.setToken(nextToken, expiresAt),\n setHeatOverlay: (enabled) => managerRef.current?.setHeatOverlay(enabled),\n setTrendWindow: (windowMinutes) => managerRef.current?.setTrendWindow(windowMinutes)\n ?? Promise.reject(new Error('not ready')),\n enterFullscreen: () => managerRef.current?.enterFullscreen() ?? Promise.resolve(),\n exitFullscreen: () => managerRef.current?.exitFullscreen() ?? Promise.resolve(),\n isFullscreen: () => managerRef.current?.isFullscreen() ?? false,\n block: (labels, opts) => managerRef.current?.block(labels, opts) ?? Promise.resolve(),\n unblock: (labels) => managerRef.current?.unblock(labels) ?? Promise.resolve(),\n unblockAll: () => managerRef.current?.unblockAll() ?? Promise.resolve(),\n cancelBooking: (labels, bookingRef) => managerRef.current?.cancelBooking(labels, bookingRef) ?? Promise.resolve(),\n selectAll: () => managerRef.current?.selectAll() ?? [],\n selectSection: (id) => managerRef.current?.selectSection(id) ?? [],\n selectByLabels: (labels) => managerRef.current?.selectByLabels(labels) ?? [],\n clearSelection: () => managerRef.current?.clearSelection(),\n getSelection: () => managerRef.current?.getSelection() ?? [],\n getReport: () => managerRef.current?.getReport() ?? Promise.reject(new Error('not ready')),\n getControlRoomSnapshot: (windowMinutes) => managerRef.current?.getControlRoomSnapshot(windowMinutes)\n ?? Promise.reject(new Error('not ready')),\n getLog: (opts) => managerRef.current?.getLog(opts) ?? Promise.resolve({ entries: [], nextBefore: null }),\n setHoldTtl: (ms) => managerRef.current?.setHoldTtl(ms) ?? Promise.resolve(),\n zoomToFit: () => managerRef.current?.zoomToFit(),\n }),\n [],\n );\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n"],"mappings":"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","names":["SeatingChart","forwardRef","useEffect","useImperativeHandle","useRef","jsx","EmbeddedDesigner","forwardRef","useEffect","useImperativeHandle","useRef","jsx","SeatPicker","SeatPicker","forwardRef","useEffect","useImperativeHandle","useRef","jsx","SeatManager"]}
|
|
1
|
+
{"version":3,"sources":["../src/SeatingChart.tsx","../src/EmbeddedDesigner.tsx","../src/SeatPicker.tsx","../src/index.ts","../src/SeatManager.tsx"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatingChart as CoreSeatingChart,\n type SeatingChartOptions,\n type SelectedSeat,\n type HoldResult,\n type BestAvailableResult,\n type GAAreaAvailability,\n type HoldLineItem,\n} from '@seatlayer/js';\n\nexport type { SelectedSeat, HoldResult, BestAvailableResult, GAAreaAvailability, HoldLineItem } from '@seatlayer/js';\nexport type { SeatHoverDetails } from '@seatlayer/js';\n\n/** Imperative handle exposed via `ref` — call these to drive the picker from your app. */\nexport interface SeatingChartHandle {\n /** Hold the current selection. Resolves the hold, or `null` on a 409 conflict. */\n hold(options?: { ttlMs?: number }): Promise<HoldResult | null>;\n /** Restore an active hold by its opaque id. */\n resumeHold(holdId: string): Promise<HoldResult | null>;\n /** Current active hold known to the chart. */\n getCurrentHold(): HoldResult | null;\n /** GA areas with live remaining capacity. */\n getGAAreas(): GAAreaAvailability[];\n /** Atomically hold a quantity from one GA area. */\n holdGA(areaId: string, qty: number, options?: { tierId?: string | null; ttlMs?: number }): Promise<HoldResult | null>;\n /** Ask the server for the `qty` best free seats and hold them atomically. */\n bestAvailable(qty: number, categoryKey?: string): Promise<BestAvailableResult | null>;\n /** Release the current hold (if any). */\n release(): Promise<void>;\n /** Release some held labels while keeping the remainder active. */\n releaseLabels(labels: string[]): Promise<boolean>;\n /** The current selection, with prices resolved from the chart categories. */\n getSelection(): SelectedSeat[];\n /**\n * Choose a ticket tier for a selected seat (e.g. Adult → Child). Available\n * `tiers` are on each `SelectedSeat`; `tierId=null` reverts to the default.\n */\n setSeatTier(seatId: string, tierId: string | null): void;\n /**\n * Floors of a multi-floor chart — `[{ id, name }]` (single-floor charts\n * return one entry; empty before render()). Pair with setFloor().\n */\n getFloors(): { id: string; name: string }[];\n /** Switch the shown floor (2D). Warns + no-ops on single-floor charts. */\n setFloor(floorId: string): void;\n /** Toggle colorblind-safe rendering at runtime (see the `colorblindSafe` prop). */\n setColorblindSafe(on: boolean): void;\n /** Zoom in one step (same increment as the wheel/pinch gesture). */\n zoomIn(): void;\n /** Zoom out one step. */\n zoomOut(): void;\n /** Reset the camera so the whole chart fits the container. */\n zoomToFit(): void;\n}\n\nexport interface SeatingChartProps extends Omit<SeatingChartOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React wrapper around the framework-agnostic `@seatlayer/js` SDK.\n *\n * The underlying canvas is created once and torn down on unmount. Callback props\n * (`onSelectionChange`, `onHold`, `onError`, `onDeckTap`, `onHint`) may change\n * freely between renders without re-mounting the canvas — only `event`,\n * `apiBase`, `maxSelection`, `publicKey`, `locale`, `currency`, and\n * `colorblindSafe` trigger a rebuild. (`messages` is read once per mount;\n * changing it alone does not re-apply.)\n */\nexport const SeatingChart = forwardRef<SeatingChartHandle, SeatingChartProps>(\n function SeatingChart(props, ref) {\n const { className, style, event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const chartRef = useRef<CoreSeatingChart | null>(null);\n\n // Always call the latest callbacks without rebuilding the chart.\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const chart = new CoreSeatingChart({\n container: el,\n event,\n apiBase,\n maxSelection,\n publicKey,\n locale,\n currency,\n colorblindSafe,\n messages: callbacks.current.messages,\n onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),\n onHold: (result) => callbacks.current.onHold?.(result),\n onHoldRestored: (result) => callbacks.current.onHoldRestored?.(result),\n onHoldExpired: () => callbacks.current.onHoldExpired?.(),\n onGAClick: (area) => callbacks.current.onGAClick?.(area),\n onError: (err) => callbacks.current.onError?.(err),\n onDeckTap: (floorId) => callbacks.current.onDeckTap?.(floorId),\n onHint: (message) => callbacks.current.onHint?.(message),\n seatTooltip: props.seatTooltip,\n onSeatHover: (details) => callbacks.current.onSeatHover?.(details),\n });\n chartRef.current = chart;\n void chart.render();\n\n return () => {\n chart.destroy();\n chartRef.current = null;\n };\n // Rebuild only when the identity of the chart changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe]);\n\n useImperativeHandle(\n ref,\n (): SeatingChartHandle => ({\n hold: (options) => chartRef.current?.hold(options) ?? Promise.resolve(null),\n resumeHold: (holdId) => chartRef.current?.resumeHold(holdId) ?? Promise.resolve(null),\n getCurrentHold: () => chartRef.current?.getCurrentHold() ?? null,\n getGAAreas: () => chartRef.current?.getGAAreas() ?? [],\n holdGA: (areaId, qty, options) => chartRef.current?.holdGA(areaId, qty, options) ?? Promise.resolve(null),\n bestAvailable: (qty, categoryKey) =>\n chartRef.current?.bestAvailable(qty, categoryKey) ?? Promise.resolve(null),\n release: () => chartRef.current?.release() ?? Promise.resolve(),\n releaseLabels: (labels) => chartRef.current?.releaseLabels(labels) ?? Promise.resolve(false),\n getSelection: () => chartRef.current?.getSelection() ?? [],\n setSeatTier: (seatId, tierId) => chartRef.current?.setSeatTier(seatId, tierId),\n getFloors: () => chartRef.current?.getFloors() ?? [],\n setFloor: (floorId) => chartRef.current?.setFloor(floorId),\n setColorblindSafe: (on) => chartRef.current?.setColorblindSafe(on),\n zoomIn: () => chartRef.current?.zoomIn(),\n zoomOut: () => chartRef.current?.zoomOut(),\n zoomToFit: () => chartRef.current?.zoomToFit(),\n }),\n [],\n );\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n EmbeddedDesigner as CoreEmbeddedDesigner,\n type EmbeddedDesignerMessage,\n} from '@seatlayer/js';\n\nexport type { EmbeddedDesignerMessage } from '@seatlayer/js';\n\nexport interface EmbeddedDesignerHandle {\n /** Recreate the iframe with a newly-minted session URL. */\n setDesignerUrl(designerUrl: string): void;\n /** The currently mounted iframe, if any. */\n getIframe(): HTMLIFrameElement | null;\n}\n\nexport interface EmbeddedDesignerProps {\n /** Short-lived `designerUrl` returned by your backend. Never pass an `sk_` key. */\n designerUrl: string;\n expectedChartId?: string;\n expectedWorkspaceId?: string;\n title?: string;\n className?: string;\n style?: CSSProperties;\n iframeClassName?: string;\n iframeStyle?: Partial<CSSStyleDeclaration>;\n allow?: string;\n referrerPolicy?: ReferrerPolicy;\n onReady?: (message: EmbeddedDesignerMessage) => void;\n onSaved?: (message: EmbeddedDesignerMessage) => void;\n onPublished?: (message: EmbeddedDesignerMessage) => void;\n onClose?: (message: EmbeddedDesignerMessage) => void;\n onError?: (message: EmbeddedDesignerMessage) => void;\n}\n\n/**\n * Native-feeling React host for the secure SeatLayer Designer iframe.\n * A new `designerUrl` always recreates the iframe, so a new fragment token can\n * never retain state from an earlier chart session.\n */\nexport const EmbeddedDesigner = forwardRef<EmbeddedDesignerHandle, EmbeddedDesignerProps>(\n function EmbeddedDesigner(props, ref) {\n const containerRef = useRef<HTMLDivElement | null>(null);\n const designerRef = useRef<CoreEmbeddedDesigner | null>(null);\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n const designer = new CoreEmbeddedDesigner({\n designerUrl: props.designerUrl,\n container,\n expectedChartId: props.expectedChartId,\n expectedWorkspaceId: props.expectedWorkspaceId,\n title: props.title,\n className: props.iframeClassName,\n style: props.iframeStyle,\n allow: props.allow,\n referrerPolicy: props.referrerPolicy,\n onReady: (message) => callbacks.current.onReady?.(message),\n onSaved: (message) => callbacks.current.onSaved?.(message),\n onPublished: (message) => callbacks.current.onPublished?.(message),\n onClose: (message) => callbacks.current.onClose?.(message),\n onError: (message) => callbacks.current.onError?.(message),\n });\n designer.mount();\n designerRef.current = designer;\n return () => {\n designer.destroy();\n designerRef.current = null;\n };\n // Session/chart identity changes must recreate the iframe. Callback changes are\n // picked up from the ref without reloading an in-progress Designer session.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [props.designerUrl, props.expectedChartId, props.expectedWorkspaceId, props.title, props.iframeClassName, props.iframeStyle, props.allow, props.referrerPolicy]);\n\n useImperativeHandle(ref, () => ({\n setDesignerUrl: (designerUrl) => { designerRef.current?.setDesignerUrl(designerUrl); },\n getIframe: () => designerRef.current?.getIframe() ?? null,\n }), []);\n\n return <div ref={containerRef} className={props.className} style={props.style} />;\n },\n);\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatPicker as CoreSeatPicker,\n type SeatPickerOptions,\n type SeatPickerTheme,\n type SelectedSeat,\n type HoldResult,\n} from '@seatlayer/js';\n\nexport type { SeatPickerOptions, SeatPickerTheme, CheckoutHandoff, CheckoutLineItem } from '@seatlayer/js';\n\n/** Imperative handle for the full-experience picker widget. */\nexport interface SeatPickerHandle {\n /** Current selection with resolved prices. */\n getSelection(): SelectedSeat[];\n /** Server-side best seats + hold, reflected in the widget tray. */\n bestAvailable(qty: number, categoryKey?: string): Promise<HoldResult | null>;\n /** Current active/restored hold reflected in the tray. */\n getCurrentHold(): HoldResult | null;\n /** Restore an active hold by its opaque id. */\n resumeHold(holdId: string): Promise<HoldResult | null>;\n /** Remove one held ticket while preserving the remainder. */\n removeHeldTicket(label: string): Promise<boolean>;\n /** Release the current hold (if any) and reset the tray. */\n release(): Promise<void>;\n}\n\nexport interface SeatPickerProps extends Omit<SeatPickerOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React wrapper around the full SeatPicker widget (header · live price panel ·\n * tray · GA · hold countdown · toasts). The widget is container-adaptive: give\n * the wrapping div a size and it lays itself out for that box (side panel wide,\n * bottom sheet narrow). For the one-call modal, use `SeatPicker.open()` from\n * `@seatlayer/js` directly.\n */\nexport const SeatPicker = forwardRef<SeatPickerHandle, SeatPickerProps>(\n function SeatPicker(props, ref) {\n const { className, style, event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const pickerRef = useRef<CoreSeatPicker | null>(null);\n\n // Always call the latest callbacks without rebuilding the widget.\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const picker = new CoreSeatPicker({\n container: el,\n event,\n apiBase,\n maxSelection,\n publicKey,\n locale,\n currency,\n colorblindSafe,\n holdTtlMs,\n initialHoldId,\n restoreHold,\n confirmSelection,\n seatView,\n theme: callbacks.current.theme,\n messages: callbacks.current.messages,\n onCheckout: (hold, seats, handoff) => callbacks.current.onCheckout?.(hold, seats, handoff),\n onBooked: (handoff) => callbacks.current.onBooked?.(handoff),\n onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),\n onHoldChange: (hold, seats, handoff) => callbacks.current.onHoldChange?.(hold, seats, handoff),\n onHoldExpired: () => callbacks.current.onHoldExpired?.(),\n onHoldRestored: (hold, seats, handoff) => callbacks.current.onHoldRestored?.(hold, seats, handoff),\n onError: (err) => callbacks.current.onError?.(err),\n });\n pickerRef.current = picker;\n void picker.render();\n\n return () => {\n picker.destroy();\n pickerRef.current = null;\n };\n // Rebuild only when the identity of the event/config changes.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, publicKey, locale, currency, colorblindSafe, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView]);\n\n useImperativeHandle(\n ref,\n (): SeatPickerHandle => ({\n getSelection: () => pickerRef.current?.getSelection() ?? [],\n bestAvailable: (qty, categoryKey) => pickerRef.current?.bestAvailable(qty, categoryKey) ?? Promise.resolve(null),\n getCurrentHold: () => pickerRef.current?.getCurrentHold() ?? null,\n resumeHold: (holdId) => pickerRef.current?.resumeHold(holdId) ?? Promise.resolve(null),\n removeHeldTicket: (label) => pickerRef.current?.removeHeldTicket(label) ?? Promise.resolve(false),\n release: () => pickerRef.current?.release() ?? Promise.resolve(),\n }),\n [],\n );\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n","/**\n * @seatlayer/react — the React wrapper for the SeatLayer embed SDK.\n */\nexport { SeatingChart } from './SeatingChart';\nexport { EmbeddedDesigner } from './EmbeddedDesigner';\nexport type {\n SeatingChartProps,\n SeatingChartHandle,\n SelectedSeat,\n HoldResult,\n BestAvailableResult,\n GAAreaAvailability,\n HoldLineItem,\n} from './SeatingChart';\nexport type { EmbeddedDesignerProps, EmbeddedDesignerHandle, EmbeddedDesignerMessage } from './EmbeddedDesigner';\nexport { SeatPicker } from './SeatPicker';\nexport type {\n SeatPickerHandle,\n SeatPickerProps,\n SeatPickerOptions,\n SeatPickerTheme,\n CheckoutHandoff,\n CheckoutLineItem,\n} from './SeatPicker';\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n\n// Organizer control room: Monitor + Inspect + bulk Block/unblock on one renderer.\nexport { SeatManager } from './SeatManager';\nexport type {\n SeatManagerHandle,\n SeatManagerProps,\n SeatManagerOptions,\n SeatManagerMode,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n} from './SeatManager';\nexport type { ControlRoomActivityEntry, ControlRoomSectionMetric, ControlRoomSnapshot } from '@seatlayer/js';\n","import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatManager as CoreSeatManager,\n type SeatManagerOptions,\n type SeatManagerMode,\n type SeatManagerTallies,\n type SeatManagerActivity,\n type SeatManagerActionResult,\n type ReportResult,\n type ControlRoomSnapshot,\n type LogEntry,\n type ExpandedSeat,\n} from '@seatlayer/js';\n\nexport type {\n SeatManagerOptions,\n SeatManagerMode,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n} from '@seatlayer/js';\n\n/** Imperative handle for the organizer manage board. */\nexport interface SeatManagerHandle {\n setMode(mode: SeatManagerMode): void;\n setToken(token: string, expiresAt?: number): void;\n setHeatOverlay(enabled: boolean): void;\n setTrendWindow(windowMinutes: number): Promise<ControlRoomSnapshot>;\n enterFullscreen(): Promise<void>;\n exitFullscreen(): Promise<void>;\n isFullscreen(): boolean;\n block(labels?: string[], opts?: { releaseAt?: number; reason?: string }): Promise<void>;\n unblock(labels?: string[]): Promise<void>;\n unblockAll(): Promise<void>;\n cancelBooking(labels: string[], bookingRef: string): Promise<void>;\n selectAll(): ExpandedSeat[];\n selectSection(sectionId: string): ExpandedSeat[];\n selectByLabels(labels: string[]): ExpandedSeat[];\n clearSelection(): void;\n getSelection(): ExpandedSeat[];\n getReport(): Promise<ReportResult>;\n getControlRoomSnapshot(windowMinutes?: number): Promise<ControlRoomSnapshot>;\n getLog(opts?: { limit?: number; before?: number }): Promise<{ entries: LogEntry[]; nextBefore: number | null }>;\n setHoldTtl(ms: number | null): Promise<void>;\n zoomToFit(): void;\n}\n\nexport interface SeatManagerProps extends Omit<SeatManagerOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React wrapper around the framework-agnostic {@link CoreSeatManager}. Give the\n * wrapping div a size (it fills its box — a war-room board wants a big one) and\n * the manager lays out the live map + KPI bar + rails inside it. Rebuilt only\n * when the event identity / apiBase changes. Tokens and callbacks are updated\n * in place without tearing the board down.\n */\nexport const SeatManager = forwardRef<SeatManagerHandle, SeatManagerProps>(\n function SeatManager(props, ref) {\n const {\n className, style, apiBase, eventKey, token, tokenExpiresAt,\n mode, currency, keepLiveWhileHidden,\n } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const managerRef = useRef<CoreSeatManager | null>(null);\n\n const callbacks = useRef(props);\n callbacks.current = props;\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el) return;\n\n const manager = new CoreSeatManager({\n container: el,\n apiBase,\n eventKey,\n token,\n tokenExpiresAt,\n mode,\n currency,\n keepLiveWhileHidden,\n theme: callbacks.current.theme,\n onReady: () => callbacks.current.onReady?.(),\n onTallies: (t: SeatManagerTallies) => callbacks.current.onTallies?.(t),\n onActivity: (activity: SeatManagerActivity) => callbacks.current.onActivity?.(activity),\n onControlRoom: (snapshot: ControlRoomSnapshot) => callbacks.current.onControlRoom?.(snapshot),\n onTokenRefresh: callbacks.current.onTokenRefresh ? async () => callbacks.current.onTokenRefresh!() : undefined,\n onModeChange: (nextMode) => callbacks.current.onModeChange?.(nextMode),\n onSelectionChange: (s: ExpandedSeat[]) => callbacks.current.onSelectionChange?.(s),\n onActionComplete: (r: SeatManagerActionResult) => callbacks.current.onActionComplete?.(r),\n onError: (e: unknown) => callbacks.current.onError?.(e),\n });\n managerRef.current = manager;\n void manager.render();\n\n return () => {\n manager.destroy();\n managerRef.current = null;\n };\n // Rebuild only on identity change (not on every callback change).\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [apiBase, eventKey]);\n\n // Rotate credentials without losing camera, selection, realtime state or DOM.\n useEffect(() => {\n managerRef.current?.setToken(token, tokenExpiresAt);\n }, [token, tokenExpiresAt]);\n\n // Reflect a controlled `mode` prop onto the live instance without rebuilding.\n useEffect(() => {\n if (mode) managerRef.current?.setMode(mode);\n }, [mode]);\n\n useImperativeHandle(\n ref,\n (): SeatManagerHandle => ({\n setMode: (m) => managerRef.current?.setMode(m),\n setToken: (nextToken, expiresAt) => managerRef.current?.setToken(nextToken, expiresAt),\n setHeatOverlay: (enabled) => managerRef.current?.setHeatOverlay(enabled),\n setTrendWindow: (windowMinutes) => managerRef.current?.setTrendWindow(windowMinutes)\n ?? Promise.reject(new Error('not ready')),\n enterFullscreen: () => managerRef.current?.enterFullscreen() ?? Promise.resolve(),\n exitFullscreen: () => managerRef.current?.exitFullscreen() ?? Promise.resolve(),\n isFullscreen: () => managerRef.current?.isFullscreen() ?? false,\n block: (labels, opts) => managerRef.current?.block(labels, opts) ?? Promise.resolve(),\n unblock: (labels) => managerRef.current?.unblock(labels) ?? Promise.resolve(),\n unblockAll: () => managerRef.current?.unblockAll() ?? Promise.resolve(),\n cancelBooking: (labels, bookingRef) => managerRef.current?.cancelBooking(labels, bookingRef) ?? Promise.resolve(),\n selectAll: () => managerRef.current?.selectAll() ?? [],\n selectSection: (id) => managerRef.current?.selectSection(id) ?? [],\n selectByLabels: (labels) => managerRef.current?.selectByLabels(labels) ?? [],\n clearSelection: () => managerRef.current?.clearSelection(),\n getSelection: () => managerRef.current?.getSelection() ?? [],\n getReport: () => managerRef.current?.getReport() ?? Promise.reject(new Error('not ready')),\n getControlRoomSnapshot: (windowMinutes) => managerRef.current?.getControlRoomSnapshot(windowMinutes)\n ?? Promise.reject(new Error('not ready')),\n getLog: (opts) => managerRef.current?.getLog(opts) ?? Promise.resolve({ entries: [], nextBefore: null }),\n setHoldTtl: (ms) => managerRef.current?.setHoldTtl(ms) ?? Promise.resolve(),\n zoomToFit: () => managerRef.current?.zoomToFit(),\n }),\n [],\n );\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n"],"mappings":"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","names":["SeatingChart","forwardRef","useEffect","useImperativeHandle","useRef","jsx","EmbeddedDesigner","forwardRef","useEffect","useImperativeHandle","useRef","jsx","SeatPicker","SeatPicker","forwardRef","useEffect","useImperativeHandle","useRef","jsx","SeatManager"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seatlayer/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.15.0",
|
|
4
4
|
"description": "React component for the SeatLayer embed SDK — render an interactive seat picker and hold seats.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://docs.seatlayer.io",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"ticketing"
|
|
36
36
|
],
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@seatlayer/js": "^0.
|
|
38
|
+
"@seatlayer/js": "^0.15.0"
|
|
39
39
|
},
|
|
40
40
|
"peerDependencies": {
|
|
41
41
|
"react": ">=17.0.0"
|