@seatlayer/react 0.80.3 → 0.81.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 +38 -6
- package/dist/index.cjs +6 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -23
- package/dist/index.d.ts +3 -23
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@ selects and **holds**, and your trusted server **books** the hold.
|
|
|
26
26
|
|
|
27
27
|
## What is included
|
|
28
28
|
|
|
29
|
-
- `SeatingChart` — the
|
|
29
|
+
- `SeatingChart` — the lower-level interactive chart, mounted into a plain `<div>`
|
|
30
30
|
your styles own.
|
|
31
31
|
- `SeatPicker` — the complete buyer experience: map, legend, tray, pricing, and
|
|
32
32
|
the checkout hand-off.
|
|
@@ -146,10 +146,39 @@ The full-experience `SeatPicker` exposes the canonical safe widget controls thro
|
|
|
146
146
|
| `setMapTheme()`, `setEventDetailsHidden()`, `setPricing()` | Update host-owned presentation without remounting or losing a hold. |
|
|
147
147
|
| `isColorblindSafe()`, `setColorblindSafe()` | Read and update the shared buyer accessibility preference. |
|
|
148
148
|
| `getViewMode()`, `setViewMode()` | Read and update the 2D map projection. |
|
|
149
|
-
| `getBuyerView()`, `setBuyerView()` | Switch between the map and interactive 3D
|
|
149
|
+
| `getBuyerView()`, `setBuyerView()` | Switch between the map and [interactive 3D seat views](https://seatlayer.io/3d-seat-map/), including optional camera intent. |
|
|
150
150
|
| `refreshAccess()` | Re-acquire a private buyer-access session. |
|
|
151
151
|
| `destroy()` | Intentionally omitted: React owns teardown through component unmount. |
|
|
152
152
|
|
|
153
|
+
### Buyer WebMCP tools
|
|
154
|
+
|
|
155
|
+
Set `webMcp` on `SeatPicker` to let a compatible in-browser assistant describe
|
|
156
|
+
the event, find seats, select them on the map, and read the current selection:
|
|
157
|
+
|
|
158
|
+
```tsx
|
|
159
|
+
import { SeatPicker } from '@seatlayer/react';
|
|
160
|
+
|
|
161
|
+
<SeatPicker
|
|
162
|
+
event="ev_9f3a"
|
|
163
|
+
publicKey="pk_live_your_publishable_key"
|
|
164
|
+
webMcp
|
|
165
|
+
style={{ width: '100%', height: 640 }}
|
|
166
|
+
onCheckout={(hold) => {
|
|
167
|
+
void continueCheckoutOnYourServer(hold.holdId).catch(showCheckoutError);
|
|
168
|
+
}}
|
|
169
|
+
/>
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
`continueCheckoutOnYourServer` and `showCheckoutError` are supplied by your
|
|
173
|
+
application. The first owns the async server request; `.catch(...)` surfaces a
|
|
174
|
+
rejected checkout.
|
|
175
|
+
|
|
176
|
+
WebMCP is off by default and inert in browsers without the API. Use
|
|
177
|
+
`webMcp={{ holds: true }}` only when the assistant should also be able to place
|
|
178
|
+
a temporary hold. The tools do not take payment or book seats; see the
|
|
179
|
+
[buyer WebMCP seat-selection guide](https://docs.seatlayer.io/buyer-sdk/webmcp-agent-tools/)
|
|
180
|
+
for iframe origin controls and the complete tool contract.
|
|
181
|
+
|
|
153
182
|
## Props
|
|
154
183
|
|
|
155
184
|
Extends the vanilla SDK options minus `container` (the component owns its own mount).
|
|
@@ -201,8 +230,8 @@ These components are a thin React layer over
|
|
|
201
230
|
framework-agnostic browser runtime. The wrapper mounts a plain `<div>`, builds
|
|
202
231
|
the chart inside an effect, forwards every prop and callback, and exposes the
|
|
203
232
|
runtime's imperative handle through `ref`. Chart geometry, availability, and
|
|
204
|
-
holds all come from the SeatLayer API at runtime, so the same event
|
|
205
|
-
|
|
233
|
+
holds all come from the SeatLayer API at runtime, so the same chart and event
|
|
234
|
+
inventory can be reused across supported web and mobile SDKs.
|
|
206
235
|
|
|
207
236
|
Callback props are read through a ref, so changing one never tears the chart
|
|
208
237
|
down. Only the identity props listed above rebuild it.
|
|
@@ -243,7 +272,7 @@ compact embeds, and the buyer SDK remains unchanged when manager options are off
|
|
|
243
272
|
|
|
244
273
|
## Embed the chart Designer
|
|
245
274
|
|
|
246
|
-
`EmbeddedDesigner` gives an organizer
|
|
275
|
+
`EmbeddedDesigner` gives an organizer the hosted Designer inside your React
|
|
247
276
|
application. Mint `designerUrl` from your backend — never from a browser using an
|
|
248
277
|
account secret key. The component verifies messages by iframe source, Designer origin,
|
|
249
278
|
and the chart/workspace ids you provide.
|
|
@@ -448,6 +477,8 @@ that imports it, or load it through `next/dynamic` with `ssr: false`.
|
|
|
448
477
|
|
|
449
478
|
- [Follow the buyer SDK installation guide](https://docs.seatlayer.io/buyer-sdk/install/)
|
|
450
479
|
for the full browser integration, options, and events.
|
|
480
|
+
- [Build a React or Next.js seating chart](https://docs.seatlayer.io/buyer-sdk/react-seating-chart/)
|
|
481
|
+
with the framework-specific tutorial and client-mounting guidance.
|
|
451
482
|
- [Connect seat holds to secure server-side checkout](https://docs.seatlayer.io/buyer-sdk/holds-and-checkout/)
|
|
452
483
|
without putting booking credentials in the browser.
|
|
453
484
|
- [Run the complete checkout example](https://docs.seatlayer.io/examples/complete-checkout/)
|
|
@@ -488,4 +519,5 @@ Source, issues, and contribution guidance live in
|
|
|
488
519
|
|
|
489
520
|
## License
|
|
490
521
|
|
|
491
|
-
MIT
|
|
522
|
+
The React wrapper source in this package is MIT licensed. The separately
|
|
523
|
+
distributed SeatLayer runtime is not covered by this package's MIT license.
|
package/dist/index.cjs
CHANGED
|
@@ -280,6 +280,9 @@ var SeasonPicker = (0, import_react4.forwardRef)(
|
|
|
280
280
|
const {
|
|
281
281
|
season,
|
|
282
282
|
apiBase,
|
|
283
|
+
publicKey,
|
|
284
|
+
checkout,
|
|
285
|
+
returnUrl,
|
|
283
286
|
buyerAccessToken,
|
|
284
287
|
initialOperationId,
|
|
285
288
|
recoveryTimeoutMs,
|
|
@@ -326,6 +329,9 @@ var SeasonPicker = (0, import_react4.forwardRef)(
|
|
|
326
329
|
}, [
|
|
327
330
|
season,
|
|
328
331
|
apiBase,
|
|
332
|
+
publicKey,
|
|
333
|
+
checkout,
|
|
334
|
+
returnUrl,
|
|
329
335
|
buyerAccessToken,
|
|
330
336
|
initialOperationId,
|
|
331
337
|
recoveryTimeoutMs,
|
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/SeasonPicker.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 SeatHoverDetails,\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 SeatPickerPricing,\n SeatPickerBestAvailableOptions,\n SeatPickerBuyerView,\n SeatPickerBuyerViewOptions,\n PickerMapTheme,\n RendererViewMode,\n CheckoutHandoff,\n CheckoutLineItem,\n} from './SeatPicker';\nexport { SeasonPicker } from './SeasonPicker';\nexport type {\n SeasonPickerHandle,\n SeasonPickerProps,\n SeasonPickerOptions,\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonOfferPresentation,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from './SeasonPicker';\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n// Host-side embed helper: grows the iframe on `seatlayer:height` and pins it on\n// `seatlayer:fullscreen`. React hosts depend on this package alone, so it has to\n// be reachable here rather than only from @seatlayer/js.\nexport { attachPickerFrame } from '@seatlayer/js';\nexport type { AttachPickerFrameOptions } 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 EventScopedManageToken,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n SeatManagerConnection,\n} from './SeatManager';\nexport type {\n ControlRoomActivityEntry,\n ControlRoomSectionMetric,\n ControlRoomSnapshot,\n} from '@seatlayer/js/manager';\n// Sales Channels — buyer access sessions for private channel inventory.\nexport type {\n BuyerAccessToken,\n BuyerAccessTokenProvider,\n BuyerAccessRefreshReason,\n BuyerAccessUnavailableReason,\n BuyerAccessExpiredEvent,\n BuyerAccessUnavailableEvent,\n SelectedObjectUnavailableEvent,\n} 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 bindSeatingChartHandle,\n buildSeatingChartOptions,\n type SeatingChartHandle,\n type SeatingChartIdentityProp,\n type SeatingChartOptions,\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 type { SeatingChartHandle } from '@seatlayer/js';\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 the props in\n * `SEATING_CHART_IDENTITY_PROPS` (`event`, `apiBase`, `maxSelection`, `numberOfPlacesToSelect`, `selectionValidators`,\n * `publicKey`, `locale`, `currency`, `colorblindSafe`, `initialView`,\n * `errorDisplay`) trigger a rebuild.\n * (`messages`, `selectedObjects`, and `selectableObjects` are read once per\n * mount; change selection policy later through the imperative handle.)\n */\nexport const SeatingChart = forwardRef<SeatingChartHandle, SeatingChartProps>(\n function SeatingChart(props, ref) {\n const {\n className, style, event, apiBase, maxSelection, selectedObjects, selectableObjects,\n numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency,\n colorblindSafe, initialView, errorDisplay,\n } = 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(buildSeatingChartOptions(\n el,\n {\n event,\n apiBase,\n maxSelection,\n selectedObjects,\n selectableObjects,\n numberOfPlacesToSelect,\n selectionValidators,\n publicKey,\n locale,\n currency,\n colorblindSafe,\n initialView,\n errorDisplay,\n messages: callbacks.current.messages,\n seatTooltip: props.seatTooltip,\n // Read through the ref so a host may pass the provider as an inline\n // arrow without its new identity tearing the canvas down each render.\n buyerAccessTokenProvider: props.buyerAccessTokenProvider\n ? (context) => callbacks.current.buyerAccessTokenProvider!(context)\n : undefined,\n buyerAccessToken: callbacks.current.buyerAccessToken,\n },\n {\n onAccessExpired: (state) => callbacks.current.onAccessExpired?.(state),\n onAccessUnavailable: (state) => callbacks.current.onAccessUnavailable?.(state),\n onSelectedObjectUnavailable: (state) =>\n callbacks.current.onSelectedObjectUnavailable?.(state),\n onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),\n onSelectionValidityChange: (state) => callbacks.current.onSelectionValidityChange?.(state),\n onSelectionValid: (seats) => callbacks.current.onSelectionValid?.(seats),\n onSelectionInvalid: (state) => callbacks.current.onSelectionInvalid?.(state),\n onSelectionLimit: (max) => callbacks.current.onSelectionLimit?.(max),\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 onSeatHover: (details) => callbacks.current.onSeatHover?.(details),\n },\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 — this dependency\n // array is SEATING_CHART_IDENTITY_PROPS, spelled out because React's\n // linter (and its compiler) must see the literal list.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency, colorblindSafe, initialView, errorDisplay]);\n\n useImperativeHandle(ref, () => bindSeatingChartHandle(() => chartRef.current), []);\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n\n/**\n * The `useEffect` dependency array above must list every identity prop, and\n * React's linter and compiler both require it to be a literal — so it cannot be\n * spread from `SEATING_CHART_IDENTITY_PROPS` the way Vue's watcher and Angular's\n * `ngOnChanges` do. This is the compile-time proof that the literal is still\n * complete: add a prop to the shared list without adding it above and\n * `MissingIdentityDeps` stops being `never`, which fails this line. Types only —\n * nothing here reaches the bundle.\n */\ntype MissingIdentityDeps = Exclude<\n SeatingChartIdentityProp,\n | 'event' | 'apiBase' | 'maxSelection' | 'numberOfPlacesToSelect' | 'selectionValidators'\n | 'publicKey' | 'locale'\n | 'currency' | 'colorblindSafe' | 'initialView' | 'errorDisplay'\n>;\ntype Assert<T extends true> = T;\ntype _IdentityDepsAreComplete = Assert<[MissingIdentityDeps] extends [never] ? true : false>;\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 /**\n * Show the built-in branded loading skeleton and error/expiry card inside the\n * container while the Designer boots. Defaults to `true`. Set `false` when you\n * render your own loading and error chrome.\n */\n showLoadingState?: boolean;\n /**\n * If the Designer never posts `ready` within this many milliseconds, the host\n * shows the error card with a timeout message. Defaults to `20000`.\n */\n loadingTimeoutMs?: number;\n /**\n * How the iframe is sized. `'fill'` (the default) is **container-aware**: if the\n * container has a definite height (a sized block, `flex-1 min-h-0`, a resolved\n * `%`) the Designer fills 100% of it and tracks its size via a `ResizeObserver`;\n * if the container is content-sized (full-page usage) the Designer fills the\n * viewport (`window.innerHeight` minus the iframe's top offset). Either way the\n * result is clamped to `minHeight` and re-probed on resize. Heights are applied\n * with `!important` so a host theme can't override them. Pass a number for a\n * fixed pixel height you manage yourself.\n */\n height?: 'fill' | number;\n /** Lower bound for `'fill'` sizing. Defaults to `480`. */\n minHeight?: number;\n /**\n * Legacy content-height auto-grow via the `seatlayer.designer.resize`\n * protocol. Only honored when `height` is a number; with the default\n * `height: 'fill'` the resize messages are ignored and the SDK sizes the iframe\n * to the container or viewport.\n */\n autoResize?: boolean;\n /**\n * Called when the user presses \"Try again\" on the error card. Mint a fresh\n * session and set the new `designerUrl` (recreating the iframe returns it to\n * the loading state). When omitted, \"Try again\" reloads the current URL.\n *\n * When supplied, it also powers automatic session renewal — see\n * {@link EmbeddedDesignerProps.autoRenewSession}.\n */\n onRequestRelaunch?: () => void;\n /**\n * Keep long editing sessions alive with no expiry wall. When you supply\n * `onRequestRelaunch`, the SDK schedules a silent relaunch shortly before the\n * session's `expiresAt` (mint a fresh session and update `designerUrl` in your\n * `onRequestRelaunch` handler), and makes one automatic recovery attempt if an\n * expiry error still slips through before showing the \"Try again\" card. Defaults\n * to `true` whenever `onRequestRelaunch` is provided; a no-op without it. Set\n * `false` to keep the fully manual \"Try again\" behavior.\n */\n autoRenewSession?: boolean;\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 showLoadingState: props.showLoadingState,\n loadingTimeoutMs: props.loadingTimeoutMs,\n height: props.height,\n minHeight: props.minHeight,\n autoResize: props.autoResize,\n autoRenewSession: props.autoRenewSession,\n // Only forward a relaunch hook when the host supplied one, so the core's\n // \"reload the same URL in place\" fallback still applies otherwise.\n onRequestRelaunch: props.onRequestRelaunch\n ? () => callbacks.current.onRequestRelaunch?.()\n : undefined,\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. Sizing and\n // relaunch policy are updated in place below; callbacks are read from refs.\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, props.showLoadingState, props.loadingTimeoutMs, props.autoResize]);\n\n useEffect(() => {\n designerRef.current?.setSizing(props.height, props.minHeight);\n }, [props.height, props.minHeight]);\n\n useEffect(() => {\n designerRef.current?.setRelaunchPolicy(\n props.onRequestRelaunch ? () => callbacks.current.onRequestRelaunch?.() : undefined,\n props.autoRenewSession,\n );\n }, [!!props.onRequestRelaunch, props.autoRenewSession]);\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 SeatPickerPricing,\n type SeatPickerBestAvailableOptions,\n type SeatPickerBuyerView,\n type SeatPickerBuyerViewOptions,\n type PickerMapTheme,\n type PickerSelectionValidity,\n type RendererViewMode,\n type SelectedSeat,\n type HoldResult,\n} from '@seatlayer/js';\n\nexport type {\n SeatPickerOptions,\n SeatPickerTheme,\n SeatPickerPricing,\n SeatPickerBestAvailableOptions,\n SeatPickerBuyerView,\n SeatPickerBuyerViewOptions,\n PickerMapTheme,\n PickerSelectionValidity,\n RendererViewMode,\n CheckoutHandoff,\n CheckoutLineItem,\n} from '@seatlayer/js';\n\n/** Imperative handle for the full-experience picker widget. */\nexport interface SeatPickerHandle {\n /** Logically close the picker. React still owns component unmount/teardown. */\n close(): void;\n /** Current selection with resolved prices. */\n getSelection(): SelectedSeat[];\n /** Select free objects by engine id or public label. */\n selectObjects(objects: string[]): SelectedSeat[];\n /** Deselect objects by engine id or public label. */\n deselectObjects(objects: string[]): void;\n /** Clear every unheld selection. */\n clearSelection(): void;\n /** Select every selectable object in the named categories. */\n selectCategories(categoryKeys: string[]): SelectedSeat[];\n /** Deselect every selected object in the named categories. */\n deselectCategories(categoryKeys: string[]): void;\n /** Replace the buyer-selectable object allow-list without remounting. */\n setSelectableObjects(objects: string[] | null): void;\n /** Change the active selection cap without remounting. */\n setMaxSelection(maxSelection: number): void;\n /** Current exact-count validity, or null when exact selection is disabled. */\n getSelectionValidity(): PickerSelectionValidity | null;\n /** Server-side best seats + hold, reflected in the widget tray. */\n bestAvailable(\n qty: number,\n categoryKey?: string,\n options?: SeatPickerBestAvailableOptions,\n ): 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 * Re-acquire the buyer access session after your app re-authorizes the buyer\n * (Sales Channels). Resolves false when the picker is not access-scoped.\n */\n refreshAccess(): Promise<boolean>;\n /** Re-ink the drawn map without rebuilding the picker or disturbing a hold. */\n setMapTheme(map: PickerMapTheme | null): void;\n /** Hide or restore duplicate event identity after mount. */\n setEventDetailsHidden(hidden: boolean): void;\n /** Replace host display-pricing overrides without remounting. */\n setPricing(pricing: SeatPickerPricing | undefined): void;\n /** Current colorblind-safe buyer preference. */\n isColorblindSafe(): boolean;\n /** Update the colorblind-safe buyer preference and renderer. */\n setColorblindSafe(on: boolean): void;\n /** Switch the underlying 2D map projection. */\n setViewMode(mode: RendererViewMode): void;\n /** Current 2D map projection. */\n getViewMode(): RendererViewMode;\n /** Current buyer surface: map or interactive 3D venue. */\n getBuyerView(): SeatPickerBuyerView;\n /** Switch the buyer surface, optionally carrying a 3D camera intent. */\n setBuyerView(view: SeatPickerBuyerView, options?: SeatPickerBuyerViewOptions): 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, selectedObjects, selectableObjects, numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency, colorblindSafe, hideBadge, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView, checkout } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const pickerRef = useRef<CoreSeatPicker | null>(null);\n const closeRef = useRef<(() => void) | 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 // Forward every option the host passed. Spreading rather than naming each\n // field keeps new core options (pricing, hideBadge, transport, …) working\n // here the day they ship: a hand-maintained list silently drops anything\n // it forgets, and `SeatPickerProps extends SeatPickerOptions` means such a\n // drop still type-checks clean for the host.\n const { className: _className, style: _style, ...options } = callbacks.current;\n\n const picker = new CoreSeatPicker({\n ...options,\n container: el,\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 onSelectionValidityChange: (state) => callbacks.current.onSelectionValidityChange?.(state),\n onSelectionValid: (seats) => callbacks.current.onSelectionValid?.(seats),\n onSelectionInvalid: (state) => callbacks.current.onSelectionInvalid?.(state),\n onSelectionLimit: (max) => callbacks.current.onSelectionLimit?.(max),\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 // Sales Channels. The provider is read through the ref for the same\n // reason as every other callback: a host may pass an inline arrow.\n buyerAccessTokenProvider: options.buyerAccessTokenProvider\n ? (context) => callbacks.current.buyerAccessTokenProvider!(context)\n : undefined,\n onAccessExpired: (state) => callbacks.current.onAccessExpired?.(state),\n onAccessUnavailable: (state) => callbacks.current.onAccessUnavailable?.(state),\n onSelectedObjectUnavailable: (state) =>\n callbacks.current.onSelectedObjectUnavailable?.(state),\n // Hosted checkout. Read through the ref like every other callback — the\n // spread above would freeze an inline arrow at construction, and these\n // two fire long after it (a payment webhook can land minutes later).\n onCheckoutUnavailable: (state) => callbacks.current.onCheckoutUnavailable?.(state),\n onOrderConfirmed: (order) => callbacks.current.onOrderConfirmed?.(order),\n });\n pickerRef.current = picker;\n let closed = false;\n const close = (): void => {\n if (closed) return;\n closed = true;\n if (pickerRef.current === picker) pickerRef.current = null;\n picker.close();\n };\n closeRef.current = close;\n void picker.render();\n\n return () => {\n if (!closed) picker.destroy();\n if (pickerRef.current === picker) pickerRef.current = null;\n if (closeRef.current === close) closeRef.current = null;\n };\n // Rebuild only when the identity of the event/config changes. Object-valued\n // options (theme, messages, pricing, transport) stay out: hosts routinely\n // pass them as inline literals, so a new identity every render would tear\n // the widget down mid-selection. They are read fresh at construction.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency, colorblindSafe, hideBadge, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView, checkout]);\n\n useImperativeHandle(\n ref,\n (): SeatPickerHandle => ({\n close: () => closeRef.current?.(),\n getSelection: () => pickerRef.current?.getSelection() ?? [],\n selectObjects: (objects) => pickerRef.current?.selectObjects(objects) ?? [],\n deselectObjects: (objects) => pickerRef.current?.deselectObjects(objects),\n clearSelection: () => pickerRef.current?.clearSelection(),\n selectCategories: (categoryKeys) => pickerRef.current?.selectCategories(categoryKeys) ?? [],\n deselectCategories: (categoryKeys) => pickerRef.current?.deselectCategories(categoryKeys),\n setSelectableObjects: (objects) => pickerRef.current?.setSelectableObjects(objects),\n setMaxSelection: (max) => pickerRef.current?.setMaxSelection(max),\n getSelectionValidity: () => pickerRef.current?.getSelectionValidity() ?? null,\n bestAvailable: (qty, categoryKey, options) =>\n pickerRef.current?.bestAvailable(qty, categoryKey, options) ?? 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 refreshAccess: () => pickerRef.current?.refreshAccess() ?? Promise.resolve(false),\n setMapTheme: (map) => pickerRef.current?.setMapTheme(map),\n setEventDetailsHidden: (hidden) => pickerRef.current?.setEventDetailsHidden(hidden),\n setPricing: (pricing) => pickerRef.current?.setPricing(pricing),\n isColorblindSafe: () => pickerRef.current?.isColorblindSafe() ?? false,\n setColorblindSafe: (on) => pickerRef.current?.setColorblindSafe(on),\n setViewMode: (mode) => pickerRef.current?.setViewMode(mode),\n getViewMode: () => pickerRef.current?.getViewMode() ?? 'flat',\n getBuyerView: () => pickerRef.current?.getBuyerView() ?? 'map',\n setBuyerView: (view, options) => pickerRef.current?.setBuyerView(view, options),\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 SeasonPicker as CoreSeasonPicker,\n type SeasonAvailability,\n type SeasonCheckoutHandoff,\n type SeasonDescriptor,\n type SeasonPickerOptions as CoreSeasonPickerOptions,\n type SeasonRenewalIntent,\n type RendererViewMode,\n type SeatPickerTheme,\n} from '@seatlayer/js';\n\nexport type {\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from '@seatlayer/js';\n\n/** Display-only commercial context; the host must re-price on its server. */\nexport interface SeasonOfferPresentation {\n eyebrow?: string;\n priceLabel?: string;\n compareAtPriceLabel?: string;\n savingsLabel?: string;\n priceNote?: string;\n benefits?: readonly string[];\n renewalLabel?: string;\n}\n\n/** Forward-compatible wrapper options for the interactive Season buyer flow. */\nexport interface SeasonPickerOptions extends CoreSeasonPickerOptions {\n offer?: SeasonOfferPresentation;\n maxSelection?: number;\n numberOfPlacesToSelect?: number;\n locale?: string;\n initialView?: RendererViewMode;\n enable3D?: boolean;\n theme?: SeatPickerTheme;\n}\n\n/** Imperative controls for the fixed-inclusion Season buyer flow. */\nexport interface SeasonPickerHandle {\n holdSameSeat(labels: readonly string[], operationId: string): Promise<SeasonCheckoutHandoff>;\n restoreOperation(operationId: string): Promise<SeasonCheckoutHandoff | null>;\n release(releaseActionId: string): Promise<void>;\n createRenewalIntent(offerId: string): Promise<SeasonRenewalIntent>;\n getDescriptor(): SeasonDescriptor | null;\n getAvailability(): SeasonAvailability | null;\n getHandoff(): SeasonCheckoutHandoff | null;\n}\n\n/** Props accepted by the React Season wrapper. */\nexport interface SeasonPickerProps extends Omit<SeasonPickerOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React lifecycle adapter for the distinct fixed-inclusion `SeasonPicker`.\n * It never receives a secret key and never turns a browser handoff into proof\n * of price, payment, booking, or renewal.\n */\nexport const SeasonPicker = forwardRef<SeasonPickerHandle, SeasonPickerProps>(\n function SeasonPicker(props, ref) {\n const {\n season,\n apiBase,\n buyerAccessToken,\n initialOperationId,\n recoveryTimeoutMs,\n fetch,\n offer,\n maxSelection,\n numberOfPlacesToSelect,\n locale,\n initialView,\n enable3D,\n theme,\n className,\n style,\n } = props;\n const containerRef = useRef<HTMLDivElement | null>(null);\n const pickerRef = useRef<CoreSeasonPicker | null>(null);\n const latest = useRef(props);\n latest.current = props;\n const offerKey = JSON.stringify(offer ?? null);\n const themeKey = JSON.stringify(theme ?? null);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const { className: _className, style: _style, ...options } = latest.current;\n const picker = new CoreSeasonPicker({\n ...options,\n container,\n buyerAccessTokenProvider: options.buyerAccessTokenProvider\n ? (context) => latest.current.buyerAccessTokenProvider!(context)\n : undefined,\n onHold: (handoff) => latest.current.onHold?.(handoff),\n onHoldChange: (handoff) => latest.current.onHoldChange?.(handoff),\n onContinue: (handoff) => latest.current.onContinue?.(handoff),\n onRenewalIntent: (intent) => latest.current.onRenewalIntent?.(intent),\n onAccessExpired: (event) => latest.current.onAccessExpired?.(event),\n onAccessUnavailable: (event) => latest.current.onAccessUnavailable?.(event),\n onStatusChange: (event) => latest.current.onStatusChange?.(event),\n onError: (error) => latest.current.onError?.(error),\n });\n pickerRef.current = picker;\n void picker.render().catch(() => undefined);\n\n return () => {\n picker.destroy();\n if (pickerRef.current === picker) pickerRef.current = null;\n };\n }, [\n season,\n apiBase,\n buyerAccessToken,\n initialOperationId,\n recoveryTimeoutMs,\n fetch,\n offerKey,\n maxSelection,\n numberOfPlacesToSelect,\n locale,\n initialView,\n enable3D,\n themeKey,\n ]);\n\n useImperativeHandle(ref, (): SeasonPickerHandle => ({\n holdSameSeat: (labels, operationId) => required(pickerRef).holdSameSeat(labels, operationId),\n restoreOperation: (operationId) => required(pickerRef).restoreOperation(operationId),\n release: (releaseActionId) => required(pickerRef).release(releaseActionId),\n createRenewalIntent: (offerId) => required(pickerRef).createRenewalIntent(offerId),\n getDescriptor: () => pickerRef.current?.getDescriptor() ?? null,\n getAvailability: () => pickerRef.current?.getAvailability() ?? null,\n getHandoff: () => pickerRef.current?.getHandoff() ?? null,\n }), []);\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n\nfunction required(ref: { current: CoreSeasonPicker | null }): CoreSeasonPicker {\n if (!ref.current) throw new Error('seatlayer: React SeasonPicker is not mounted');\n return ref.current;\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 EventScopedManageToken,\n type SeatManagerTallies,\n type SeatManagerActivity,\n type SeatManagerActionResult,\n type SeatManagerConnection,\n type SeatManagerFilteredSection,\n type SeatManagerSelectionValidity,\n type EventTableBookingMode,\n type ReportResult,\n type ControlRoomSnapshot,\n type LogEntry,\n type ExpandedSeat,\n// `@seatlayer/js/manager`, NOT the bare `@seatlayer/js` barrel. The barrel is a\n// buyer SDK that also exports the cockpit, so importing the cockpit through it\n// drags SeatPicker, SeatingChart, EmbeddedDesigner and the engine code only\n// those reach into every bundle that renders a control room. See the header of\n// `@seatlayer/js`'s `src/manager.ts` for the measurement.\n} from '@seatlayer/js/manager';\n\nexport type {\n SeatManagerOptions,\n SeatManagerMode,\n EventScopedManageToken,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n SeatManagerConnection,\n SeatManagerFilteredSection,\n SeatManagerSelectionValidity,\n EventTableBookingMode,\n} from '@seatlayer/js/manager';\n\n/** Imperative handle for the organizer manage board. */\nexport interface SeatManagerHandle {\n setMode(mode: SeatManagerMode): void;\n setToken(token: EventScopedManageToken, expiresAt?: number): void;\n setHeatOverlay(enabled: boolean): void;\n setFollowLive(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 setCategory(categoryKey: string, labels?: string[]): Promise<void>;\n setTableBooking(\n tableIds: string[],\n mode: EventTableBookingMode,\n bounds?: { minOccupancy?: number; maxOccupancy?: number },\n ): Promise<void>;\n selectAll(): ExpandedSeat[];\n selectSection(sectionId: string): ExpandedSeat[];\n selectByLabels(labels: string[]): ExpandedSeat[];\n selectObjects(labels: string[]): ExpandedSeat[];\n deselectObjects(labels: string[]): ExpandedSeat[];\n selectCategories(keys: string[]): ExpandedSeat[];\n deselectCategories(keys: string[]): ExpandedSeat[];\n setSelectableObjects(labels: string[]): void;\n setUnavailableObjectsSelectable(enabled: boolean): void;\n setObjectSelectable(predicate: SeatManagerOptions['isObjectSelectable']): void;\n setMaxSelectedObjects(max: number | undefined): void;\n setNumberOfPlacesToSelect(required: number | undefined): void;\n getSelectionValidity(): SeatManagerSelectionValidity | null;\n setFilteredSection(label: string): SeatManagerFilteredSection[];\n clearFilteredSection(): void;\n getFilteredSections(): SeatManagerFilteredSection[];\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 /**\n * Realtime link state plus the \"as of\" behind the numbers on screen.\n *\n * Null only before the manager has mounted. Pair with the `onConnectionChange`\n * prop: the callback gives the edges, this gives the answer on demand — which\n * is what a host needs on tab focus, when no transition is coming.\n */\n getConnection(): SeatManagerConnection | null;\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, declared capabilities,\n * theme, fallback currency, background liveness, and callbacks are updated in\n * 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, followLive, capabilities,\n selectedObjects, selectableObjects, unavailableObjectsSelectable,\n maxSelectedObjects, numberOfPlacesToSelect, isObjectSelectable, tools,\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 followLive,\n capabilities,\n selectedObjects,\n selectableObjects,\n unavailableObjectsSelectable,\n maxSelectedObjects,\n numberOfPlacesToSelect,\n isObjectSelectable,\n // Which tools the cockpit offers (Watch / Manage / Host tools). Read\n // once at mount like `capabilities`: hosts decide this per surface,\n // not per render.\n tools,\n theme: callbacks.current.theme,\n // Light / dark / follow the operator's own preference. Applied before\n // first paint so a cockpit asked for light never flashes the war-room\n // dark on the way in.\n themeMode: callbacks.current.themeMode,\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 onFollowLiveChange: (enabled) => callbacks.current.onFollowLiveChange?.(enabled),\n onSelectionChange: (s: ExpandedSeat[]) => callbacks.current.onSelectionChange?.(s),\n onObjectSelected: (object) => callbacks.current.onObjectSelected?.(object),\n onObjectDeselected: (object) => callbacks.current.onObjectDeselected?.(object),\n onSelectionValidityChange: (state) => callbacks.current.onSelectionValidityChange?.(state),\n onSelectionValid: (state) => callbacks.current.onSelectionValid?.(state),\n onSelectionInvalid: (state) => callbacks.current.onSelectionInvalid?.(state),\n onSelectionLimit: (max) => callbacks.current.onSelectionLimit?.(max),\n onFilteredSectionChange: (sections) => callbacks.current.onFilteredSectionChange?.(sections),\n onActionComplete: (r: SeatManagerActionResult) => callbacks.current.onActionComplete?.(r),\n onConnectionChange: (s: SeatManagerConnection) => callbacks.current.onConnectionChange?.(s),\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 useEffect(() => {\n managerRef.current?.setCapabilities(capabilities);\n }, [capabilities]);\n\n useEffect(() => {\n managerRef.current?.setCurrency(currency);\n }, [currency]);\n\n useEffect(() => {\n managerRef.current?.setTheme(props.theme);\n }, [props.theme]);\n\n // Reflected in place: the cockpit keeps the operator's selection, the\n // camera and the realtime socket across a mode change.\n useEffect(() => {\n managerRef.current?.setThemeMode(props.themeMode);\n }, [props.themeMode]);\n\n useEffect(() => {\n managerRef.current?.setKeepLiveWhileHidden(keepLiveWhileHidden);\n }, [keepLiveWhileHidden]);\n\n useEffect(() => {\n managerRef.current?.setTokenRefresh(\n props.onTokenRefresh ? async () => callbacks.current.onTokenRefresh!() : undefined,\n );\n }, [!!props.onTokenRefresh]);\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 useEffect(() => {\n if (followLive != null) managerRef.current?.setFollowLive(followLive);\n }, [followLive]);\n\n useEffect(() => {\n managerRef.current?.setSelectableObjects(selectableObjects ?? []);\n }, [selectableObjects]);\n\n useEffect(() => {\n managerRef.current?.setUnavailableObjectsSelectable(unavailableObjectsSelectable ?? true);\n }, [unavailableObjectsSelectable]);\n\n useEffect(() => {\n managerRef.current?.setMaxSelectedObjects(maxSelectedObjects);\n }, [maxSelectedObjects]);\n\n useEffect(() => {\n managerRef.current?.setNumberOfPlacesToSelect(numberOfPlacesToSelect);\n }, [numberOfPlacesToSelect]);\n\n useEffect(() => {\n managerRef.current?.setObjectSelectable(isObjectSelectable);\n }, [isObjectSelectable]);\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 setFollowLive: (enabled) => managerRef.current?.setFollowLive(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 setCategory: (categoryKey, labels) => managerRef.current?.setCategory(categoryKey, labels) ?? Promise.resolve(),\n setTableBooking: (tableIds, nextMode, bounds) => managerRef.current?.setTableBooking(tableIds, nextMode, bounds)\n ?? Promise.resolve(),\n selectAll: () => managerRef.current?.selectAll() ?? [],\n selectSection: (id) => managerRef.current?.selectSection(id) ?? [],\n selectByLabels: (labels) => managerRef.current?.selectByLabels(labels) ?? [],\n selectObjects: (labels) => managerRef.current?.selectObjects(labels) ?? [],\n deselectObjects: (labels) => managerRef.current?.deselectObjects(labels) ?? [],\n selectCategories: (keys) => managerRef.current?.selectCategories(keys) ?? [],\n deselectCategories: (keys) => managerRef.current?.deselectCategories(keys) ?? [],\n setSelectableObjects: (labels) => managerRef.current?.setSelectableObjects(labels),\n setUnavailableObjectsSelectable: (enabled) => managerRef.current?.setUnavailableObjectsSelectable(enabled),\n setObjectSelectable: (predicate) => managerRef.current?.setObjectSelectable(predicate),\n setMaxSelectedObjects: (max) => managerRef.current?.setMaxSelectedObjects(max),\n setNumberOfPlacesToSelect: (required) => managerRef.current?.setNumberOfPlacesToSelect(required),\n getSelectionValidity: () => managerRef.current?.getSelectionValidity() ?? null,\n setFilteredSection: (label) => managerRef.current?.setFilteredSection(label) ?? [],\n clearFilteredSection: () => managerRef.current?.clearFilteredSection(),\n getFilteredSections: () => managerRef.current?.getFilteredSections() ?? [],\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 getConnection: () => managerRef.current?.getConnection() ?? 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_react","import_js","import_jsx_runtime","SeasonPicker","CoreSeasonPicker","import_js","import_react","import_jsx_runtime","SeatManager","CoreSeatManager","required"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/SeatingChart.tsx","../src/EmbeddedDesigner.tsx","../src/SeatPicker.tsx","../src/SeasonPicker.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 SeatHoverDetails,\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 SeatPickerPricing,\n SeatPickerBestAvailableOptions,\n SeatPickerBuyerView,\n SeatPickerBuyerViewOptions,\n PickerMapTheme,\n RendererViewMode,\n CheckoutHandoff,\n CheckoutLineItem,\n} from './SeatPicker';\nexport { SeasonPicker } from './SeasonPicker';\nexport type {\n SeasonPickerHandle,\n SeasonPickerProps,\n SeasonPickerOptions,\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonOfferPresentation,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from './SeasonPicker';\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n// Host-side embed helper: grows the iframe on `seatlayer:height` and pins it on\n// `seatlayer:fullscreen`. React hosts depend on this package alone, so it has to\n// be reachable here rather than only from @seatlayer/js.\nexport { attachPickerFrame } from '@seatlayer/js';\nexport type { AttachPickerFrameOptions } 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 EventScopedManageToken,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n SeatManagerConnection,\n} from './SeatManager';\nexport type {\n ControlRoomActivityEntry,\n ControlRoomSectionMetric,\n ControlRoomSnapshot,\n} from '@seatlayer/js/manager';\n// Sales Channels — buyer access sessions for private channel inventory.\nexport type {\n BuyerAccessToken,\n BuyerAccessTokenProvider,\n BuyerAccessRefreshReason,\n BuyerAccessUnavailableReason,\n BuyerAccessExpiredEvent,\n BuyerAccessUnavailableEvent,\n SelectedObjectUnavailableEvent,\n} 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 bindSeatingChartHandle,\n buildSeatingChartOptions,\n type SeatingChartHandle,\n type SeatingChartIdentityProp,\n type SeatingChartOptions,\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 type { SeatingChartHandle } from '@seatlayer/js';\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 the props in\n * `SEATING_CHART_IDENTITY_PROPS` (`event`, `apiBase`, `maxSelection`, `numberOfPlacesToSelect`, `selectionValidators`,\n * `publicKey`, `locale`, `currency`, `colorblindSafe`, `initialView`,\n * `errorDisplay`) trigger a rebuild.\n * (`messages`, `selectedObjects`, and `selectableObjects` are read once per\n * mount; change selection policy later through the imperative handle.)\n */\nexport const SeatingChart = forwardRef<SeatingChartHandle, SeatingChartProps>(\n function SeatingChart(props, ref) {\n const {\n className, style, event, apiBase, maxSelection, selectedObjects, selectableObjects,\n numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency,\n colorblindSafe, initialView, errorDisplay,\n } = 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(buildSeatingChartOptions(\n el,\n {\n event,\n apiBase,\n maxSelection,\n selectedObjects,\n selectableObjects,\n numberOfPlacesToSelect,\n selectionValidators,\n publicKey,\n locale,\n currency,\n colorblindSafe,\n initialView,\n errorDisplay,\n messages: callbacks.current.messages,\n seatTooltip: props.seatTooltip,\n // Read through the ref so a host may pass the provider as an inline\n // arrow without its new identity tearing the canvas down each render.\n buyerAccessTokenProvider: props.buyerAccessTokenProvider\n ? (context) => callbacks.current.buyerAccessTokenProvider!(context)\n : undefined,\n buyerAccessToken: callbacks.current.buyerAccessToken,\n },\n {\n onAccessExpired: (state) => callbacks.current.onAccessExpired?.(state),\n onAccessUnavailable: (state) => callbacks.current.onAccessUnavailable?.(state),\n onSelectedObjectUnavailable: (state) =>\n callbacks.current.onSelectedObjectUnavailable?.(state),\n onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),\n onSelectionValidityChange: (state) => callbacks.current.onSelectionValidityChange?.(state),\n onSelectionValid: (seats) => callbacks.current.onSelectionValid?.(seats),\n onSelectionInvalid: (state) => callbacks.current.onSelectionInvalid?.(state),\n onSelectionLimit: (max) => callbacks.current.onSelectionLimit?.(max),\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 onSeatHover: (details) => callbacks.current.onSeatHover?.(details),\n },\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 — this dependency\n // array is SEATING_CHART_IDENTITY_PROPS, spelled out because React's\n // linter (and its compiler) must see the literal list.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency, colorblindSafe, initialView, errorDisplay]);\n\n useImperativeHandle(ref, () => bindSeatingChartHandle(() => chartRef.current), []);\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n\n/**\n * The `useEffect` dependency array above must list every identity prop, and\n * React's linter and compiler both require it to be a literal — so it cannot be\n * spread from `SEATING_CHART_IDENTITY_PROPS` the way Vue's watcher and Angular's\n * `ngOnChanges` do. This is the compile-time proof that the literal is still\n * complete: add a prop to the shared list without adding it above and\n * `MissingIdentityDeps` stops being `never`, which fails this line. Types only —\n * nothing here reaches the bundle.\n */\ntype MissingIdentityDeps = Exclude<\n SeatingChartIdentityProp,\n | 'event' | 'apiBase' | 'maxSelection' | 'numberOfPlacesToSelect' | 'selectionValidators'\n | 'publicKey' | 'locale'\n | 'currency' | 'colorblindSafe' | 'initialView' | 'errorDisplay'\n>;\ntype Assert<T extends true> = T;\ntype _IdentityDepsAreComplete = Assert<[MissingIdentityDeps] extends [never] ? true : false>;\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 /**\n * Show the built-in branded loading skeleton and error/expiry card inside the\n * container while the Designer boots. Defaults to `true`. Set `false` when you\n * render your own loading and error chrome.\n */\n showLoadingState?: boolean;\n /**\n * If the Designer never posts `ready` within this many milliseconds, the host\n * shows the error card with a timeout message. Defaults to `20000`.\n */\n loadingTimeoutMs?: number;\n /**\n * How the iframe is sized. `'fill'` (the default) is **container-aware**: if the\n * container has a definite height (a sized block, `flex-1 min-h-0`, a resolved\n * `%`) the Designer fills 100% of it and tracks its size via a `ResizeObserver`;\n * if the container is content-sized (full-page usage) the Designer fills the\n * viewport (`window.innerHeight` minus the iframe's top offset). Either way the\n * result is clamped to `minHeight` and re-probed on resize. Heights are applied\n * with `!important` so a host theme can't override them. Pass a number for a\n * fixed pixel height you manage yourself.\n */\n height?: 'fill' | number;\n /** Lower bound for `'fill'` sizing. Defaults to `480`. */\n minHeight?: number;\n /**\n * Legacy content-height auto-grow via the `seatlayer.designer.resize`\n * protocol. Only honored when `height` is a number; with the default\n * `height: 'fill'` the resize messages are ignored and the SDK sizes the iframe\n * to the container or viewport.\n */\n autoResize?: boolean;\n /**\n * Called when the user presses \"Try again\" on the error card. Mint a fresh\n * session and set the new `designerUrl` (recreating the iframe returns it to\n * the loading state). When omitted, \"Try again\" reloads the current URL.\n *\n * When supplied, it also powers automatic session renewal — see\n * {@link EmbeddedDesignerProps.autoRenewSession}.\n */\n onRequestRelaunch?: () => void;\n /**\n * Keep long editing sessions alive with no expiry wall. When you supply\n * `onRequestRelaunch`, the SDK schedules a silent relaunch shortly before the\n * session's `expiresAt` (mint a fresh session and update `designerUrl` in your\n * `onRequestRelaunch` handler), and makes one automatic recovery attempt if an\n * expiry error still slips through before showing the \"Try again\" card. Defaults\n * to `true` whenever `onRequestRelaunch` is provided; a no-op without it. Set\n * `false` to keep the fully manual \"Try again\" behavior.\n */\n autoRenewSession?: boolean;\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 showLoadingState: props.showLoadingState,\n loadingTimeoutMs: props.loadingTimeoutMs,\n height: props.height,\n minHeight: props.minHeight,\n autoResize: props.autoResize,\n autoRenewSession: props.autoRenewSession,\n // Only forward a relaunch hook when the host supplied one, so the core's\n // \"reload the same URL in place\" fallback still applies otherwise.\n onRequestRelaunch: props.onRequestRelaunch\n ? () => callbacks.current.onRequestRelaunch?.()\n : undefined,\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. Sizing and\n // relaunch policy are updated in place below; callbacks are read from refs.\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, props.showLoadingState, props.loadingTimeoutMs, props.autoResize]);\n\n useEffect(() => {\n designerRef.current?.setSizing(props.height, props.minHeight);\n }, [props.height, props.minHeight]);\n\n useEffect(() => {\n designerRef.current?.setRelaunchPolicy(\n props.onRequestRelaunch ? () => callbacks.current.onRequestRelaunch?.() : undefined,\n props.autoRenewSession,\n );\n }, [!!props.onRequestRelaunch, props.autoRenewSession]);\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 SeatPickerPricing,\n type SeatPickerBestAvailableOptions,\n type SeatPickerBuyerView,\n type SeatPickerBuyerViewOptions,\n type PickerMapTheme,\n type PickerSelectionValidity,\n type RendererViewMode,\n type SelectedSeat,\n type HoldResult,\n} from '@seatlayer/js';\n\nexport type {\n SeatPickerOptions,\n SeatPickerTheme,\n SeatPickerPricing,\n SeatPickerBestAvailableOptions,\n SeatPickerBuyerView,\n SeatPickerBuyerViewOptions,\n PickerMapTheme,\n PickerSelectionValidity,\n RendererViewMode,\n CheckoutHandoff,\n CheckoutLineItem,\n} from '@seatlayer/js';\n\n/** Imperative handle for the full-experience picker widget. */\nexport interface SeatPickerHandle {\n /** Logically close the picker. React still owns component unmount/teardown. */\n close(): void;\n /** Current selection with resolved prices. */\n getSelection(): SelectedSeat[];\n /** Select free objects by engine id or public label. */\n selectObjects(objects: string[]): SelectedSeat[];\n /** Deselect objects by engine id or public label. */\n deselectObjects(objects: string[]): void;\n /** Clear every unheld selection. */\n clearSelection(): void;\n /** Select every selectable object in the named categories. */\n selectCategories(categoryKeys: string[]): SelectedSeat[];\n /** Deselect every selected object in the named categories. */\n deselectCategories(categoryKeys: string[]): void;\n /** Replace the buyer-selectable object allow-list without remounting. */\n setSelectableObjects(objects: string[] | null): void;\n /** Change the active selection cap without remounting. */\n setMaxSelection(maxSelection: number): void;\n /** Current exact-count validity, or null when exact selection is disabled. */\n getSelectionValidity(): PickerSelectionValidity | null;\n /** Server-side best seats + hold, reflected in the widget tray. */\n bestAvailable(\n qty: number,\n categoryKey?: string,\n options?: SeatPickerBestAvailableOptions,\n ): 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 * Re-acquire the buyer access session after your app re-authorizes the buyer\n * (Sales Channels). Resolves false when the picker is not access-scoped.\n */\n refreshAccess(): Promise<boolean>;\n /** Re-ink the drawn map without rebuilding the picker or disturbing a hold. */\n setMapTheme(map: PickerMapTheme | null): void;\n /** Hide or restore duplicate event identity after mount. */\n setEventDetailsHidden(hidden: boolean): void;\n /** Replace host display-pricing overrides without remounting. */\n setPricing(pricing: SeatPickerPricing | undefined): void;\n /** Current colorblind-safe buyer preference. */\n isColorblindSafe(): boolean;\n /** Update the colorblind-safe buyer preference and renderer. */\n setColorblindSafe(on: boolean): void;\n /** Switch the underlying 2D map projection. */\n setViewMode(mode: RendererViewMode): void;\n /** Current 2D map projection. */\n getViewMode(): RendererViewMode;\n /** Current buyer surface: map or interactive 3D venue. */\n getBuyerView(): SeatPickerBuyerView;\n /** Switch the buyer surface, optionally carrying a 3D camera intent. */\n setBuyerView(view: SeatPickerBuyerView, options?: SeatPickerBuyerViewOptions): 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, selectedObjects, selectableObjects, numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency, colorblindSafe, hideBadge, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView, checkout } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const pickerRef = useRef<CoreSeatPicker | null>(null);\n const closeRef = useRef<(() => void) | 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 // Forward every option the host passed. Spreading rather than naming each\n // field keeps new core options (pricing, hideBadge, transport, …) working\n // here the day they ship: a hand-maintained list silently drops anything\n // it forgets, and `SeatPickerProps extends SeatPickerOptions` means such a\n // drop still type-checks clean for the host.\n const { className: _className, style: _style, ...options } = callbacks.current;\n\n const picker = new CoreSeatPicker({\n ...options,\n container: el,\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 onSelectionValidityChange: (state) => callbacks.current.onSelectionValidityChange?.(state),\n onSelectionValid: (seats) => callbacks.current.onSelectionValid?.(seats),\n onSelectionInvalid: (state) => callbacks.current.onSelectionInvalid?.(state),\n onSelectionLimit: (max) => callbacks.current.onSelectionLimit?.(max),\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 // Sales Channels. The provider is read through the ref for the same\n // reason as every other callback: a host may pass an inline arrow.\n buyerAccessTokenProvider: options.buyerAccessTokenProvider\n ? (context) => callbacks.current.buyerAccessTokenProvider!(context)\n : undefined,\n onAccessExpired: (state) => callbacks.current.onAccessExpired?.(state),\n onAccessUnavailable: (state) => callbacks.current.onAccessUnavailable?.(state),\n onSelectedObjectUnavailable: (state) =>\n callbacks.current.onSelectedObjectUnavailable?.(state),\n // Hosted checkout. Read through the ref like every other callback — the\n // spread above would freeze an inline arrow at construction, and these\n // two fire long after it (a payment webhook can land minutes later).\n onCheckoutUnavailable: (state) => callbacks.current.onCheckoutUnavailable?.(state),\n onOrderConfirmed: (order) => callbacks.current.onOrderConfirmed?.(order),\n });\n pickerRef.current = picker;\n let closed = false;\n const close = (): void => {\n if (closed) return;\n closed = true;\n if (pickerRef.current === picker) pickerRef.current = null;\n picker.close();\n };\n closeRef.current = close;\n void picker.render();\n\n return () => {\n if (!closed) picker.destroy();\n if (pickerRef.current === picker) pickerRef.current = null;\n if (closeRef.current === close) closeRef.current = null;\n };\n // Rebuild only when the identity of the event/config changes. Object-valued\n // options (theme, messages, pricing, transport) stay out: hosts routinely\n // pass them as inline literals, so a new identity every render would tear\n // the widget down mid-selection. They are read fresh at construction.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency, colorblindSafe, hideBadge, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView, checkout]);\n\n useImperativeHandle(\n ref,\n (): SeatPickerHandle => ({\n close: () => closeRef.current?.(),\n getSelection: () => pickerRef.current?.getSelection() ?? [],\n selectObjects: (objects) => pickerRef.current?.selectObjects(objects) ?? [],\n deselectObjects: (objects) => pickerRef.current?.deselectObjects(objects),\n clearSelection: () => pickerRef.current?.clearSelection(),\n selectCategories: (categoryKeys) => pickerRef.current?.selectCategories(categoryKeys) ?? [],\n deselectCategories: (categoryKeys) => pickerRef.current?.deselectCategories(categoryKeys),\n setSelectableObjects: (objects) => pickerRef.current?.setSelectableObjects(objects),\n setMaxSelection: (max) => pickerRef.current?.setMaxSelection(max),\n getSelectionValidity: () => pickerRef.current?.getSelectionValidity() ?? null,\n bestAvailable: (qty, categoryKey, options) =>\n pickerRef.current?.bestAvailable(qty, categoryKey, options) ?? 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 refreshAccess: () => pickerRef.current?.refreshAccess() ?? Promise.resolve(false),\n setMapTheme: (map) => pickerRef.current?.setMapTheme(map),\n setEventDetailsHidden: (hidden) => pickerRef.current?.setEventDetailsHidden(hidden),\n setPricing: (pricing) => pickerRef.current?.setPricing(pricing),\n isColorblindSafe: () => pickerRef.current?.isColorblindSafe() ?? false,\n setColorblindSafe: (on) => pickerRef.current?.setColorblindSafe(on),\n setViewMode: (mode) => pickerRef.current?.setViewMode(mode),\n getViewMode: () => pickerRef.current?.getViewMode() ?? 'flat',\n getBuyerView: () => pickerRef.current?.getBuyerView() ?? 'map',\n setBuyerView: (view, options) => pickerRef.current?.setBuyerView(view, options),\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 SeasonPicker as CoreSeasonPicker,\n type SeasonAvailability,\n type SeasonCheckoutHandoff,\n type SeasonDescriptor,\n type SeasonPickerOptions,\n type SeasonRenewalIntent,\n} from '@seatlayer/js';\n\nexport type {\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonOfferPresentation,\n SeasonPickerOptions,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from '@seatlayer/js';\n\n/** Imperative controls for the fixed-inclusion Season buyer flow. */\nexport interface SeasonPickerHandle {\n holdSameSeat(labels: readonly string[], operationId: string): Promise<SeasonCheckoutHandoff>;\n restoreOperation(operationId: string): Promise<SeasonCheckoutHandoff | null>;\n release(releaseActionId: string): Promise<void>;\n createRenewalIntent(offerId: string): Promise<SeasonRenewalIntent>;\n getDescriptor(): SeasonDescriptor | null;\n getAvailability(): SeasonAvailability | null;\n getHandoff(): SeasonCheckoutHandoff | null;\n}\n\n/** Props accepted by the React Season wrapper. */\nexport interface SeasonPickerProps extends Omit<SeasonPickerOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React lifecycle adapter for the distinct fixed-inclusion `SeasonPicker`.\n * It never receives a secret key and never turns a browser handoff into proof\n * of price, payment, booking, or renewal.\n */\nexport const SeasonPicker = forwardRef<SeasonPickerHandle, SeasonPickerProps>(\n function SeasonPicker(props, ref) {\n const {\n season,\n apiBase,\n publicKey,\n checkout,\n returnUrl,\n buyerAccessToken,\n initialOperationId,\n recoveryTimeoutMs,\n fetch,\n offer,\n maxSelection,\n numberOfPlacesToSelect,\n locale,\n initialView,\n enable3D,\n theme,\n className,\n style,\n } = props;\n const containerRef = useRef<HTMLDivElement | null>(null);\n const pickerRef = useRef<CoreSeasonPicker | null>(null);\n const latest = useRef(props);\n latest.current = props;\n const offerKey = JSON.stringify(offer ?? null);\n const themeKey = JSON.stringify(theme ?? null);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const { className: _className, style: _style, ...options } = latest.current;\n const picker = new CoreSeasonPicker({\n ...options,\n container,\n buyerAccessTokenProvider: options.buyerAccessTokenProvider\n ? (context) => latest.current.buyerAccessTokenProvider!(context)\n : undefined,\n onHold: (handoff) => latest.current.onHold?.(handoff),\n onHoldChange: (handoff) => latest.current.onHoldChange?.(handoff),\n onContinue: (handoff) => latest.current.onContinue?.(handoff),\n onRenewalIntent: (intent) => latest.current.onRenewalIntent?.(intent),\n onAccessExpired: (event) => latest.current.onAccessExpired?.(event),\n onAccessUnavailable: (event) => latest.current.onAccessUnavailable?.(event),\n onStatusChange: (event) => latest.current.onStatusChange?.(event),\n onError: (error) => latest.current.onError?.(error),\n });\n pickerRef.current = picker;\n void picker.render().catch(() => undefined);\n\n return () => {\n picker.destroy();\n if (pickerRef.current === picker) pickerRef.current = null;\n };\n }, [\n season, apiBase, publicKey, checkout, returnUrl,\n buyerAccessToken, initialOperationId, recoveryTimeoutMs, fetch,\n offerKey, maxSelection, numberOfPlacesToSelect, locale, initialView, enable3D, themeKey,\n ]);\n\n useImperativeHandle(ref, (): SeasonPickerHandle => ({\n holdSameSeat: (labels, operationId) => required(pickerRef).holdSameSeat(labels, operationId),\n restoreOperation: (operationId) => required(pickerRef).restoreOperation(operationId),\n release: (releaseActionId) => required(pickerRef).release(releaseActionId),\n createRenewalIntent: (offerId) => required(pickerRef).createRenewalIntent(offerId),\n getDescriptor: () => pickerRef.current?.getDescriptor() ?? null,\n getAvailability: () => pickerRef.current?.getAvailability() ?? null,\n getHandoff: () => pickerRef.current?.getHandoff() ?? null,\n }), []);\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n\nfunction required(ref: { current: CoreSeasonPicker | null }): CoreSeasonPicker {\n if (!ref.current) throw new Error('seatlayer: React SeasonPicker is not mounted');\n return ref.current;\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 EventScopedManageToken,\n type SeatManagerTallies,\n type SeatManagerActivity,\n type SeatManagerActionResult,\n type SeatManagerConnection,\n type SeatManagerFilteredSection,\n type SeatManagerSelectionValidity,\n type EventTableBookingMode,\n type ReportResult,\n type ControlRoomSnapshot,\n type LogEntry,\n type ExpandedSeat,\n// `@seatlayer/js/manager`, NOT the bare `@seatlayer/js` barrel. The barrel is a\n// buyer SDK that also exports the cockpit, so importing the cockpit through it\n// drags SeatPicker, SeatingChart, EmbeddedDesigner and the engine code only\n// those reach into every bundle that renders a control room. See the header of\n// `@seatlayer/js`'s `src/manager.ts` for the measurement.\n} from '@seatlayer/js/manager';\n\nexport type {\n SeatManagerOptions,\n SeatManagerMode,\n EventScopedManageToken,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n SeatManagerConnection,\n SeatManagerFilteredSection,\n SeatManagerSelectionValidity,\n EventTableBookingMode,\n} from '@seatlayer/js/manager';\n\n/** Imperative handle for the organizer manage board. */\nexport interface SeatManagerHandle {\n setMode(mode: SeatManagerMode): void;\n setToken(token: EventScopedManageToken, expiresAt?: number): void;\n setHeatOverlay(enabled: boolean): void;\n setFollowLive(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 setCategory(categoryKey: string, labels?: string[]): Promise<void>;\n setTableBooking(\n tableIds: string[],\n mode: EventTableBookingMode,\n bounds?: { minOccupancy?: number; maxOccupancy?: number },\n ): Promise<void>;\n selectAll(): ExpandedSeat[];\n selectSection(sectionId: string): ExpandedSeat[];\n selectByLabels(labels: string[]): ExpandedSeat[];\n selectObjects(labels: string[]): ExpandedSeat[];\n deselectObjects(labels: string[]): ExpandedSeat[];\n selectCategories(keys: string[]): ExpandedSeat[];\n deselectCategories(keys: string[]): ExpandedSeat[];\n setSelectableObjects(labels: string[]): void;\n setUnavailableObjectsSelectable(enabled: boolean): void;\n setObjectSelectable(predicate: SeatManagerOptions['isObjectSelectable']): void;\n setMaxSelectedObjects(max: number | undefined): void;\n setNumberOfPlacesToSelect(required: number | undefined): void;\n getSelectionValidity(): SeatManagerSelectionValidity | null;\n setFilteredSection(label: string): SeatManagerFilteredSection[];\n clearFilteredSection(): void;\n getFilteredSections(): SeatManagerFilteredSection[];\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 /**\n * Realtime link state plus the \"as of\" behind the numbers on screen.\n *\n * Null only before the manager has mounted. Pair with the `onConnectionChange`\n * prop: the callback gives the edges, this gives the answer on demand — which\n * is what a host needs on tab focus, when no transition is coming.\n */\n getConnection(): SeatManagerConnection | null;\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, declared capabilities,\n * theme, fallback currency, background liveness, and callbacks are updated in\n * 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, followLive, capabilities,\n selectedObjects, selectableObjects, unavailableObjectsSelectable,\n maxSelectedObjects, numberOfPlacesToSelect, isObjectSelectable, tools,\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 followLive,\n capabilities,\n selectedObjects,\n selectableObjects,\n unavailableObjectsSelectable,\n maxSelectedObjects,\n numberOfPlacesToSelect,\n isObjectSelectable,\n // Which tools the cockpit offers (Watch / Manage / Host tools). Read\n // once at mount like `capabilities`: hosts decide this per surface,\n // not per render.\n tools,\n theme: callbacks.current.theme,\n // Light / dark / follow the operator's own preference. Applied before\n // first paint so a cockpit asked for light never flashes the war-room\n // dark on the way in.\n themeMode: callbacks.current.themeMode,\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 onFollowLiveChange: (enabled) => callbacks.current.onFollowLiveChange?.(enabled),\n onSelectionChange: (s: ExpandedSeat[]) => callbacks.current.onSelectionChange?.(s),\n onObjectSelected: (object) => callbacks.current.onObjectSelected?.(object),\n onObjectDeselected: (object) => callbacks.current.onObjectDeselected?.(object),\n onSelectionValidityChange: (state) => callbacks.current.onSelectionValidityChange?.(state),\n onSelectionValid: (state) => callbacks.current.onSelectionValid?.(state),\n onSelectionInvalid: (state) => callbacks.current.onSelectionInvalid?.(state),\n onSelectionLimit: (max) => callbacks.current.onSelectionLimit?.(max),\n onFilteredSectionChange: (sections) => callbacks.current.onFilteredSectionChange?.(sections),\n onActionComplete: (r: SeatManagerActionResult) => callbacks.current.onActionComplete?.(r),\n onConnectionChange: (s: SeatManagerConnection) => callbacks.current.onConnectionChange?.(s),\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 useEffect(() => {\n managerRef.current?.setCapabilities(capabilities);\n }, [capabilities]);\n\n useEffect(() => {\n managerRef.current?.setCurrency(currency);\n }, [currency]);\n\n useEffect(() => {\n managerRef.current?.setTheme(props.theme);\n }, [props.theme]);\n\n // Reflected in place: the cockpit keeps the operator's selection, the\n // camera and the realtime socket across a mode change.\n useEffect(() => {\n managerRef.current?.setThemeMode(props.themeMode);\n }, [props.themeMode]);\n\n useEffect(() => {\n managerRef.current?.setKeepLiveWhileHidden(keepLiveWhileHidden);\n }, [keepLiveWhileHidden]);\n\n useEffect(() => {\n managerRef.current?.setTokenRefresh(\n props.onTokenRefresh ? async () => callbacks.current.onTokenRefresh!() : undefined,\n );\n }, [!!props.onTokenRefresh]);\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 useEffect(() => {\n if (followLive != null) managerRef.current?.setFollowLive(followLive);\n }, [followLive]);\n\n useEffect(() => {\n managerRef.current?.setSelectableObjects(selectableObjects ?? []);\n }, [selectableObjects]);\n\n useEffect(() => {\n managerRef.current?.setUnavailableObjectsSelectable(unavailableObjectsSelectable ?? true);\n }, [unavailableObjectsSelectable]);\n\n useEffect(() => {\n managerRef.current?.setMaxSelectedObjects(maxSelectedObjects);\n }, [maxSelectedObjects]);\n\n useEffect(() => {\n managerRef.current?.setNumberOfPlacesToSelect(numberOfPlacesToSelect);\n }, [numberOfPlacesToSelect]);\n\n useEffect(() => {\n managerRef.current?.setObjectSelectable(isObjectSelectable);\n }, [isObjectSelectable]);\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 setFollowLive: (enabled) => managerRef.current?.setFollowLive(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 setCategory: (categoryKey, labels) => managerRef.current?.setCategory(categoryKey, labels) ?? Promise.resolve(),\n setTableBooking: (tableIds, nextMode, bounds) => managerRef.current?.setTableBooking(tableIds, nextMode, bounds)\n ?? Promise.resolve(),\n selectAll: () => managerRef.current?.selectAll() ?? [],\n selectSection: (id) => managerRef.current?.selectSection(id) ?? [],\n selectByLabels: (labels) => managerRef.current?.selectByLabels(labels) ?? [],\n selectObjects: (labels) => managerRef.current?.selectObjects(labels) ?? [],\n deselectObjects: (labels) => managerRef.current?.deselectObjects(labels) ?? [],\n selectCategories: (keys) => managerRef.current?.selectCategories(keys) ?? [],\n deselectCategories: (keys) => managerRef.current?.deselectCategories(keys) ?? [],\n setSelectableObjects: (labels) => managerRef.current?.setSelectableObjects(labels),\n setUnavailableObjectsSelectable: (enabled) => managerRef.current?.setUnavailableObjectsSelectable(enabled),\n setObjectSelectable: (predicate) => managerRef.current?.setObjectSelectable(predicate),\n setMaxSelectedObjects: (max) => managerRef.current?.setMaxSelectedObjects(max),\n setNumberOfPlacesToSelect: (required) => managerRef.current?.setNumberOfPlacesToSelect(required),\n getSelectionValidity: () => managerRef.current?.getSelectionValidity() ?? null,\n setFilteredSection: (label) => managerRef.current?.setFilteredSection(label) ?? [],\n clearFilteredSection: () => managerRef.current?.clearFilteredSection(),\n getFilteredSections: () => managerRef.current?.getFilteredSections() ?? [],\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 getConnection: () => managerRef.current?.getConnection() ?? 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_react","import_js","import_jsx_runtime","SeasonPicker","CoreSeasonPicker","import_js","import_react","import_jsx_runtime","SeatManager","CoreSeatManager","required"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { CSSProperties } from 'react';
|
|
3
|
-
import { SeatingChartOptions, SeatingChartHandle, EmbeddedDesignerMessage, SeatPickerOptions, SelectedSeat, PickerSelectionValidity, SeatPickerBestAvailableOptions, HoldResult, PickerMapTheme, SeatPickerPricing, RendererViewMode, SeatPickerBuyerView, SeatPickerBuyerViewOptions, SeasonPickerOptions
|
|
4
|
-
export { AttachPickerFrameOptions, BestAvailableResult, BuyerAccessExpiredEvent, BuyerAccessRefreshReason, BuyerAccessToken, BuyerAccessTokenProvider, BuyerAccessUnavailableEvent, BuyerAccessUnavailableReason, CheckoutHandoff, CheckoutLineItem, EmbeddedDesignerMessage, GAAreaAvailability, HoldLineItem, HoldResult, PickerMapTheme, RendererViewMode, SeasonAvailability, SeasonCheckoutHandoff, SeasonDescriptor, SeasonOperation, SeasonOperationState, SeasonRenewalIntent, SeasonStatusEvent, SeatHoverDetails, SeatPickerBestAvailableOptions, SeatPickerBuyerView, SeatPickerBuyerViewOptions, SeatPickerOptions, SeatPickerPricing, SeatPickerTheme, SeatPicker as SeatPickerWidget, SeatingChartHandle, SelectedObjectUnavailableEvent, SelectedSeat, attachPickerFrame } from '@seatlayer/js';
|
|
3
|
+
import { SeatingChartOptions, SeatingChartHandle, EmbeddedDesignerMessage, SeatPickerOptions, SelectedSeat, PickerSelectionValidity, SeatPickerBestAvailableOptions, HoldResult, PickerMapTheme, SeatPickerPricing, RendererViewMode, SeatPickerBuyerView, SeatPickerBuyerViewOptions, SeasonPickerOptions, SeasonCheckoutHandoff, SeasonRenewalIntent, SeasonDescriptor, SeasonAvailability } from '@seatlayer/js';
|
|
4
|
+
export { AttachPickerFrameOptions, BestAvailableResult, BuyerAccessExpiredEvent, BuyerAccessRefreshReason, BuyerAccessToken, BuyerAccessTokenProvider, BuyerAccessUnavailableEvent, BuyerAccessUnavailableReason, CheckoutHandoff, CheckoutLineItem, EmbeddedDesignerMessage, GAAreaAvailability, HoldLineItem, HoldResult, PickerMapTheme, RendererViewMode, SeasonAvailability, SeasonCheckoutHandoff, SeasonDescriptor, SeasonOfferPresentation, SeasonOperation, SeasonOperationState, SeasonPickerOptions, SeasonRenewalIntent, SeasonStatusEvent, SeatHoverDetails, SeatPickerBestAvailableOptions, SeatPickerBuyerView, SeatPickerBuyerViewOptions, SeatPickerOptions, SeatPickerPricing, SeatPickerTheme, SeatPicker as SeatPickerWidget, SeatingChartHandle, SelectedObjectUnavailableEvent, SelectedSeat, attachPickerFrame } from '@seatlayer/js';
|
|
5
5
|
export { SeatManager, SeatManagerHandle, SeatManagerProps } from './manager.cjs';
|
|
6
6
|
export { ControlRoomActivityEntry, ControlRoomSectionMetric, ControlRoomSnapshot, EventScopedManageToken, SeatManagerActionResult, SeatManagerActivity, SeatManagerConnection, SeatManagerMode, SeatManagerOptions, SeatManagerTallies } from '@seatlayer/js/manager';
|
|
7
7
|
|
|
@@ -173,26 +173,6 @@ interface SeatPickerProps extends Omit<SeatPickerOptions, 'container'> {
|
|
|
173
173
|
*/
|
|
174
174
|
declare const SeatPicker: react.ForwardRefExoticComponent<SeatPickerProps & react.RefAttributes<SeatPickerHandle>>;
|
|
175
175
|
|
|
176
|
-
/** Display-only commercial context; the host must re-price on its server. */
|
|
177
|
-
interface SeasonOfferPresentation {
|
|
178
|
-
eyebrow?: string;
|
|
179
|
-
priceLabel?: string;
|
|
180
|
-
compareAtPriceLabel?: string;
|
|
181
|
-
savingsLabel?: string;
|
|
182
|
-
priceNote?: string;
|
|
183
|
-
benefits?: readonly string[];
|
|
184
|
-
renewalLabel?: string;
|
|
185
|
-
}
|
|
186
|
-
/** Forward-compatible wrapper options for the interactive Season buyer flow. */
|
|
187
|
-
interface SeasonPickerOptions extends SeasonPickerOptions$1 {
|
|
188
|
-
offer?: SeasonOfferPresentation;
|
|
189
|
-
maxSelection?: number;
|
|
190
|
-
numberOfPlacesToSelect?: number;
|
|
191
|
-
locale?: string;
|
|
192
|
-
initialView?: RendererViewMode;
|
|
193
|
-
enable3D?: boolean;
|
|
194
|
-
theme?: SeatPickerTheme;
|
|
195
|
-
}
|
|
196
176
|
/** Imperative controls for the fixed-inclusion Season buyer flow. */
|
|
197
177
|
interface SeasonPickerHandle {
|
|
198
178
|
holdSameSeat(labels: readonly string[], operationId: string): Promise<SeasonCheckoutHandoff>;
|
|
@@ -215,4 +195,4 @@ interface SeasonPickerProps extends Omit<SeasonPickerOptions, 'container'> {
|
|
|
215
195
|
*/
|
|
216
196
|
declare const SeasonPicker: react.ForwardRefExoticComponent<SeasonPickerProps & react.RefAttributes<SeasonPickerHandle>>;
|
|
217
197
|
|
|
218
|
-
export { EmbeddedDesigner, type EmbeddedDesignerHandle, type EmbeddedDesignerProps,
|
|
198
|
+
export { EmbeddedDesigner, type EmbeddedDesignerHandle, type EmbeddedDesignerProps, SeasonPicker, type SeasonPickerHandle, type SeasonPickerProps, SeatPicker, type SeatPickerHandle, type SeatPickerProps, SeatingChart, type SeatingChartProps };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as react from 'react';
|
|
2
2
|
import { CSSProperties } from 'react';
|
|
3
|
-
import { SeatingChartOptions, SeatingChartHandle, EmbeddedDesignerMessage, SeatPickerOptions, SelectedSeat, PickerSelectionValidity, SeatPickerBestAvailableOptions, HoldResult, PickerMapTheme, SeatPickerPricing, RendererViewMode, SeatPickerBuyerView, SeatPickerBuyerViewOptions, SeasonPickerOptions
|
|
4
|
-
export { AttachPickerFrameOptions, BestAvailableResult, BuyerAccessExpiredEvent, BuyerAccessRefreshReason, BuyerAccessToken, BuyerAccessTokenProvider, BuyerAccessUnavailableEvent, BuyerAccessUnavailableReason, CheckoutHandoff, CheckoutLineItem, EmbeddedDesignerMessage, GAAreaAvailability, HoldLineItem, HoldResult, PickerMapTheme, RendererViewMode, SeasonAvailability, SeasonCheckoutHandoff, SeasonDescriptor, SeasonOperation, SeasonOperationState, SeasonRenewalIntent, SeasonStatusEvent, SeatHoverDetails, SeatPickerBestAvailableOptions, SeatPickerBuyerView, SeatPickerBuyerViewOptions, SeatPickerOptions, SeatPickerPricing, SeatPickerTheme, SeatPicker as SeatPickerWidget, SeatingChartHandle, SelectedObjectUnavailableEvent, SelectedSeat, attachPickerFrame } from '@seatlayer/js';
|
|
3
|
+
import { SeatingChartOptions, SeatingChartHandle, EmbeddedDesignerMessage, SeatPickerOptions, SelectedSeat, PickerSelectionValidity, SeatPickerBestAvailableOptions, HoldResult, PickerMapTheme, SeatPickerPricing, RendererViewMode, SeatPickerBuyerView, SeatPickerBuyerViewOptions, SeasonPickerOptions, SeasonCheckoutHandoff, SeasonRenewalIntent, SeasonDescriptor, SeasonAvailability } from '@seatlayer/js';
|
|
4
|
+
export { AttachPickerFrameOptions, BestAvailableResult, BuyerAccessExpiredEvent, BuyerAccessRefreshReason, BuyerAccessToken, BuyerAccessTokenProvider, BuyerAccessUnavailableEvent, BuyerAccessUnavailableReason, CheckoutHandoff, CheckoutLineItem, EmbeddedDesignerMessage, GAAreaAvailability, HoldLineItem, HoldResult, PickerMapTheme, RendererViewMode, SeasonAvailability, SeasonCheckoutHandoff, SeasonDescriptor, SeasonOfferPresentation, SeasonOperation, SeasonOperationState, SeasonPickerOptions, SeasonRenewalIntent, SeasonStatusEvent, SeatHoverDetails, SeatPickerBestAvailableOptions, SeatPickerBuyerView, SeatPickerBuyerViewOptions, SeatPickerOptions, SeatPickerPricing, SeatPickerTheme, SeatPicker as SeatPickerWidget, SeatingChartHandle, SelectedObjectUnavailableEvent, SelectedSeat, attachPickerFrame } from '@seatlayer/js';
|
|
5
5
|
export { SeatManager, SeatManagerHandle, SeatManagerProps } from './manager.js';
|
|
6
6
|
export { ControlRoomActivityEntry, ControlRoomSectionMetric, ControlRoomSnapshot, EventScopedManageToken, SeatManagerActionResult, SeatManagerActivity, SeatManagerConnection, SeatManagerMode, SeatManagerOptions, SeatManagerTallies } from '@seatlayer/js/manager';
|
|
7
7
|
|
|
@@ -173,26 +173,6 @@ interface SeatPickerProps extends Omit<SeatPickerOptions, 'container'> {
|
|
|
173
173
|
*/
|
|
174
174
|
declare const SeatPicker: react.ForwardRefExoticComponent<SeatPickerProps & react.RefAttributes<SeatPickerHandle>>;
|
|
175
175
|
|
|
176
|
-
/** Display-only commercial context; the host must re-price on its server. */
|
|
177
|
-
interface SeasonOfferPresentation {
|
|
178
|
-
eyebrow?: string;
|
|
179
|
-
priceLabel?: string;
|
|
180
|
-
compareAtPriceLabel?: string;
|
|
181
|
-
savingsLabel?: string;
|
|
182
|
-
priceNote?: string;
|
|
183
|
-
benefits?: readonly string[];
|
|
184
|
-
renewalLabel?: string;
|
|
185
|
-
}
|
|
186
|
-
/** Forward-compatible wrapper options for the interactive Season buyer flow. */
|
|
187
|
-
interface SeasonPickerOptions extends SeasonPickerOptions$1 {
|
|
188
|
-
offer?: SeasonOfferPresentation;
|
|
189
|
-
maxSelection?: number;
|
|
190
|
-
numberOfPlacesToSelect?: number;
|
|
191
|
-
locale?: string;
|
|
192
|
-
initialView?: RendererViewMode;
|
|
193
|
-
enable3D?: boolean;
|
|
194
|
-
theme?: SeatPickerTheme;
|
|
195
|
-
}
|
|
196
176
|
/** Imperative controls for the fixed-inclusion Season buyer flow. */
|
|
197
177
|
interface SeasonPickerHandle {
|
|
198
178
|
holdSameSeat(labels: readonly string[], operationId: string): Promise<SeasonCheckoutHandoff>;
|
|
@@ -215,4 +195,4 @@ interface SeasonPickerProps extends Omit<SeasonPickerOptions, 'container'> {
|
|
|
215
195
|
*/
|
|
216
196
|
declare const SeasonPicker: react.ForwardRefExoticComponent<SeasonPickerProps & react.RefAttributes<SeasonPickerHandle>>;
|
|
217
197
|
|
|
218
|
-
export { EmbeddedDesigner, type EmbeddedDesignerHandle, type EmbeddedDesignerProps,
|
|
198
|
+
export { EmbeddedDesigner, type EmbeddedDesignerHandle, type EmbeddedDesignerProps, SeasonPicker, type SeasonPickerHandle, type SeasonPickerProps, SeatPicker, type SeatPickerHandle, type SeatPickerProps, SeatingChart, type SeatingChartProps };
|
package/dist/index.js
CHANGED
|
@@ -282,6 +282,9 @@ var SeasonPicker = forwardRef4(
|
|
|
282
282
|
const {
|
|
283
283
|
season,
|
|
284
284
|
apiBase,
|
|
285
|
+
publicKey,
|
|
286
|
+
checkout,
|
|
287
|
+
returnUrl,
|
|
285
288
|
buyerAccessToken,
|
|
286
289
|
initialOperationId,
|
|
287
290
|
recoveryTimeoutMs,
|
|
@@ -328,6 +331,9 @@ var SeasonPicker = forwardRef4(
|
|
|
328
331
|
}, [
|
|
329
332
|
season,
|
|
330
333
|
apiBase,
|
|
334
|
+
publicKey,
|
|
335
|
+
checkout,
|
|
336
|
+
returnUrl,
|
|
331
337
|
buyerAccessToken,
|
|
332
338
|
initialOperationId,
|
|
333
339
|
recoveryTimeoutMs,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SeatingChart.tsx","../src/EmbeddedDesigner.tsx","../src/SeatPicker.tsx","../src/SeasonPicker.tsx","../src/index.ts"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatingChart as CoreSeatingChart,\n bindSeatingChartHandle,\n buildSeatingChartOptions,\n type SeatingChartHandle,\n type SeatingChartIdentityProp,\n type SeatingChartOptions,\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 type { SeatingChartHandle } from '@seatlayer/js';\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 the props in\n * `SEATING_CHART_IDENTITY_PROPS` (`event`, `apiBase`, `maxSelection`, `numberOfPlacesToSelect`, `selectionValidators`,\n * `publicKey`, `locale`, `currency`, `colorblindSafe`, `initialView`,\n * `errorDisplay`) trigger a rebuild.\n * (`messages`, `selectedObjects`, and `selectableObjects` are read once per\n * mount; change selection policy later through the imperative handle.)\n */\nexport const SeatingChart = forwardRef<SeatingChartHandle, SeatingChartProps>(\n function SeatingChart(props, ref) {\n const {\n className, style, event, apiBase, maxSelection, selectedObjects, selectableObjects,\n numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency,\n colorblindSafe, initialView, errorDisplay,\n } = 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(buildSeatingChartOptions(\n el,\n {\n event,\n apiBase,\n maxSelection,\n selectedObjects,\n selectableObjects,\n numberOfPlacesToSelect,\n selectionValidators,\n publicKey,\n locale,\n currency,\n colorblindSafe,\n initialView,\n errorDisplay,\n messages: callbacks.current.messages,\n seatTooltip: props.seatTooltip,\n // Read through the ref so a host may pass the provider as an inline\n // arrow without its new identity tearing the canvas down each render.\n buyerAccessTokenProvider: props.buyerAccessTokenProvider\n ? (context) => callbacks.current.buyerAccessTokenProvider!(context)\n : undefined,\n buyerAccessToken: callbacks.current.buyerAccessToken,\n },\n {\n onAccessExpired: (state) => callbacks.current.onAccessExpired?.(state),\n onAccessUnavailable: (state) => callbacks.current.onAccessUnavailable?.(state),\n onSelectedObjectUnavailable: (state) =>\n callbacks.current.onSelectedObjectUnavailable?.(state),\n onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),\n onSelectionValidityChange: (state) => callbacks.current.onSelectionValidityChange?.(state),\n onSelectionValid: (seats) => callbacks.current.onSelectionValid?.(seats),\n onSelectionInvalid: (state) => callbacks.current.onSelectionInvalid?.(state),\n onSelectionLimit: (max) => callbacks.current.onSelectionLimit?.(max),\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 onSeatHover: (details) => callbacks.current.onSeatHover?.(details),\n },\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 — this dependency\n // array is SEATING_CHART_IDENTITY_PROPS, spelled out because React's\n // linter (and its compiler) must see the literal list.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency, colorblindSafe, initialView, errorDisplay]);\n\n useImperativeHandle(ref, () => bindSeatingChartHandle(() => chartRef.current), []);\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n\n/**\n * The `useEffect` dependency array above must list every identity prop, and\n * React's linter and compiler both require it to be a literal — so it cannot be\n * spread from `SEATING_CHART_IDENTITY_PROPS` the way Vue's watcher and Angular's\n * `ngOnChanges` do. This is the compile-time proof that the literal is still\n * complete: add a prop to the shared list without adding it above and\n * `MissingIdentityDeps` stops being `never`, which fails this line. Types only —\n * nothing here reaches the bundle.\n */\ntype MissingIdentityDeps = Exclude<\n SeatingChartIdentityProp,\n | 'event' | 'apiBase' | 'maxSelection' | 'numberOfPlacesToSelect' | 'selectionValidators'\n | 'publicKey' | 'locale'\n | 'currency' | 'colorblindSafe' | 'initialView' | 'errorDisplay'\n>;\ntype Assert<T extends true> = T;\ntype _IdentityDepsAreComplete = Assert<[MissingIdentityDeps] extends [never] ? true : false>;\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 /**\n * Show the built-in branded loading skeleton and error/expiry card inside the\n * container while the Designer boots. Defaults to `true`. Set `false` when you\n * render your own loading and error chrome.\n */\n showLoadingState?: boolean;\n /**\n * If the Designer never posts `ready` within this many milliseconds, the host\n * shows the error card with a timeout message. Defaults to `20000`.\n */\n loadingTimeoutMs?: number;\n /**\n * How the iframe is sized. `'fill'` (the default) is **container-aware**: if the\n * container has a definite height (a sized block, `flex-1 min-h-0`, a resolved\n * `%`) the Designer fills 100% of it and tracks its size via a `ResizeObserver`;\n * if the container is content-sized (full-page usage) the Designer fills the\n * viewport (`window.innerHeight` minus the iframe's top offset). Either way the\n * result is clamped to `minHeight` and re-probed on resize. Heights are applied\n * with `!important` so a host theme can't override them. Pass a number for a\n * fixed pixel height you manage yourself.\n */\n height?: 'fill' | number;\n /** Lower bound for `'fill'` sizing. Defaults to `480`. */\n minHeight?: number;\n /**\n * Legacy content-height auto-grow via the `seatlayer.designer.resize`\n * protocol. Only honored when `height` is a number; with the default\n * `height: 'fill'` the resize messages are ignored and the SDK sizes the iframe\n * to the container or viewport.\n */\n autoResize?: boolean;\n /**\n * Called when the user presses \"Try again\" on the error card. Mint a fresh\n * session and set the new `designerUrl` (recreating the iframe returns it to\n * the loading state). When omitted, \"Try again\" reloads the current URL.\n *\n * When supplied, it also powers automatic session renewal — see\n * {@link EmbeddedDesignerProps.autoRenewSession}.\n */\n onRequestRelaunch?: () => void;\n /**\n * Keep long editing sessions alive with no expiry wall. When you supply\n * `onRequestRelaunch`, the SDK schedules a silent relaunch shortly before the\n * session's `expiresAt` (mint a fresh session and update `designerUrl` in your\n * `onRequestRelaunch` handler), and makes one automatic recovery attempt if an\n * expiry error still slips through before showing the \"Try again\" card. Defaults\n * to `true` whenever `onRequestRelaunch` is provided; a no-op without it. Set\n * `false` to keep the fully manual \"Try again\" behavior.\n */\n autoRenewSession?: boolean;\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 showLoadingState: props.showLoadingState,\n loadingTimeoutMs: props.loadingTimeoutMs,\n height: props.height,\n minHeight: props.minHeight,\n autoResize: props.autoResize,\n autoRenewSession: props.autoRenewSession,\n // Only forward a relaunch hook when the host supplied one, so the core's\n // \"reload the same URL in place\" fallback still applies otherwise.\n onRequestRelaunch: props.onRequestRelaunch\n ? () => callbacks.current.onRequestRelaunch?.()\n : undefined,\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. Sizing and\n // relaunch policy are updated in place below; callbacks are read from refs.\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, props.showLoadingState, props.loadingTimeoutMs, props.autoResize]);\n\n useEffect(() => {\n designerRef.current?.setSizing(props.height, props.minHeight);\n }, [props.height, props.minHeight]);\n\n useEffect(() => {\n designerRef.current?.setRelaunchPolicy(\n props.onRequestRelaunch ? () => callbacks.current.onRequestRelaunch?.() : undefined,\n props.autoRenewSession,\n );\n }, [!!props.onRequestRelaunch, props.autoRenewSession]);\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 SeatPickerPricing,\n type SeatPickerBestAvailableOptions,\n type SeatPickerBuyerView,\n type SeatPickerBuyerViewOptions,\n type PickerMapTheme,\n type PickerSelectionValidity,\n type RendererViewMode,\n type SelectedSeat,\n type HoldResult,\n} from '@seatlayer/js';\n\nexport type {\n SeatPickerOptions,\n SeatPickerTheme,\n SeatPickerPricing,\n SeatPickerBestAvailableOptions,\n SeatPickerBuyerView,\n SeatPickerBuyerViewOptions,\n PickerMapTheme,\n PickerSelectionValidity,\n RendererViewMode,\n CheckoutHandoff,\n CheckoutLineItem,\n} from '@seatlayer/js';\n\n/** Imperative handle for the full-experience picker widget. */\nexport interface SeatPickerHandle {\n /** Logically close the picker. React still owns component unmount/teardown. */\n close(): void;\n /** Current selection with resolved prices. */\n getSelection(): SelectedSeat[];\n /** Select free objects by engine id or public label. */\n selectObjects(objects: string[]): SelectedSeat[];\n /** Deselect objects by engine id or public label. */\n deselectObjects(objects: string[]): void;\n /** Clear every unheld selection. */\n clearSelection(): void;\n /** Select every selectable object in the named categories. */\n selectCategories(categoryKeys: string[]): SelectedSeat[];\n /** Deselect every selected object in the named categories. */\n deselectCategories(categoryKeys: string[]): void;\n /** Replace the buyer-selectable object allow-list without remounting. */\n setSelectableObjects(objects: string[] | null): void;\n /** Change the active selection cap without remounting. */\n setMaxSelection(maxSelection: number): void;\n /** Current exact-count validity, or null when exact selection is disabled. */\n getSelectionValidity(): PickerSelectionValidity | null;\n /** Server-side best seats + hold, reflected in the widget tray. */\n bestAvailable(\n qty: number,\n categoryKey?: string,\n options?: SeatPickerBestAvailableOptions,\n ): 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 * Re-acquire the buyer access session after your app re-authorizes the buyer\n * (Sales Channels). Resolves false when the picker is not access-scoped.\n */\n refreshAccess(): Promise<boolean>;\n /** Re-ink the drawn map without rebuilding the picker or disturbing a hold. */\n setMapTheme(map: PickerMapTheme | null): void;\n /** Hide or restore duplicate event identity after mount. */\n setEventDetailsHidden(hidden: boolean): void;\n /** Replace host display-pricing overrides without remounting. */\n setPricing(pricing: SeatPickerPricing | undefined): void;\n /** Current colorblind-safe buyer preference. */\n isColorblindSafe(): boolean;\n /** Update the colorblind-safe buyer preference and renderer. */\n setColorblindSafe(on: boolean): void;\n /** Switch the underlying 2D map projection. */\n setViewMode(mode: RendererViewMode): void;\n /** Current 2D map projection. */\n getViewMode(): RendererViewMode;\n /** Current buyer surface: map or interactive 3D venue. */\n getBuyerView(): SeatPickerBuyerView;\n /** Switch the buyer surface, optionally carrying a 3D camera intent. */\n setBuyerView(view: SeatPickerBuyerView, options?: SeatPickerBuyerViewOptions): 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, selectedObjects, selectableObjects, numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency, colorblindSafe, hideBadge, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView, checkout } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const pickerRef = useRef<CoreSeatPicker | null>(null);\n const closeRef = useRef<(() => void) | 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 // Forward every option the host passed. Spreading rather than naming each\n // field keeps new core options (pricing, hideBadge, transport, …) working\n // here the day they ship: a hand-maintained list silently drops anything\n // it forgets, and `SeatPickerProps extends SeatPickerOptions` means such a\n // drop still type-checks clean for the host.\n const { className: _className, style: _style, ...options } = callbacks.current;\n\n const picker = new CoreSeatPicker({\n ...options,\n container: el,\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 onSelectionValidityChange: (state) => callbacks.current.onSelectionValidityChange?.(state),\n onSelectionValid: (seats) => callbacks.current.onSelectionValid?.(seats),\n onSelectionInvalid: (state) => callbacks.current.onSelectionInvalid?.(state),\n onSelectionLimit: (max) => callbacks.current.onSelectionLimit?.(max),\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 // Sales Channels. The provider is read through the ref for the same\n // reason as every other callback: a host may pass an inline arrow.\n buyerAccessTokenProvider: options.buyerAccessTokenProvider\n ? (context) => callbacks.current.buyerAccessTokenProvider!(context)\n : undefined,\n onAccessExpired: (state) => callbacks.current.onAccessExpired?.(state),\n onAccessUnavailable: (state) => callbacks.current.onAccessUnavailable?.(state),\n onSelectedObjectUnavailable: (state) =>\n callbacks.current.onSelectedObjectUnavailable?.(state),\n // Hosted checkout. Read through the ref like every other callback — the\n // spread above would freeze an inline arrow at construction, and these\n // two fire long after it (a payment webhook can land minutes later).\n onCheckoutUnavailable: (state) => callbacks.current.onCheckoutUnavailable?.(state),\n onOrderConfirmed: (order) => callbacks.current.onOrderConfirmed?.(order),\n });\n pickerRef.current = picker;\n let closed = false;\n const close = (): void => {\n if (closed) return;\n closed = true;\n if (pickerRef.current === picker) pickerRef.current = null;\n picker.close();\n };\n closeRef.current = close;\n void picker.render();\n\n return () => {\n if (!closed) picker.destroy();\n if (pickerRef.current === picker) pickerRef.current = null;\n if (closeRef.current === close) closeRef.current = null;\n };\n // Rebuild only when the identity of the event/config changes. Object-valued\n // options (theme, messages, pricing, transport) stay out: hosts routinely\n // pass them as inline literals, so a new identity every render would tear\n // the widget down mid-selection. They are read fresh at construction.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency, colorblindSafe, hideBadge, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView, checkout]);\n\n useImperativeHandle(\n ref,\n (): SeatPickerHandle => ({\n close: () => closeRef.current?.(),\n getSelection: () => pickerRef.current?.getSelection() ?? [],\n selectObjects: (objects) => pickerRef.current?.selectObjects(objects) ?? [],\n deselectObjects: (objects) => pickerRef.current?.deselectObjects(objects),\n clearSelection: () => pickerRef.current?.clearSelection(),\n selectCategories: (categoryKeys) => pickerRef.current?.selectCategories(categoryKeys) ?? [],\n deselectCategories: (categoryKeys) => pickerRef.current?.deselectCategories(categoryKeys),\n setSelectableObjects: (objects) => pickerRef.current?.setSelectableObjects(objects),\n setMaxSelection: (max) => pickerRef.current?.setMaxSelection(max),\n getSelectionValidity: () => pickerRef.current?.getSelectionValidity() ?? null,\n bestAvailable: (qty, categoryKey, options) =>\n pickerRef.current?.bestAvailable(qty, categoryKey, options) ?? 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 refreshAccess: () => pickerRef.current?.refreshAccess() ?? Promise.resolve(false),\n setMapTheme: (map) => pickerRef.current?.setMapTheme(map),\n setEventDetailsHidden: (hidden) => pickerRef.current?.setEventDetailsHidden(hidden),\n setPricing: (pricing) => pickerRef.current?.setPricing(pricing),\n isColorblindSafe: () => pickerRef.current?.isColorblindSafe() ?? false,\n setColorblindSafe: (on) => pickerRef.current?.setColorblindSafe(on),\n setViewMode: (mode) => pickerRef.current?.setViewMode(mode),\n getViewMode: () => pickerRef.current?.getViewMode() ?? 'flat',\n getBuyerView: () => pickerRef.current?.getBuyerView() ?? 'map',\n setBuyerView: (view, options) => pickerRef.current?.setBuyerView(view, options),\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 SeasonPicker as CoreSeasonPicker,\n type SeasonAvailability,\n type SeasonCheckoutHandoff,\n type SeasonDescriptor,\n type SeasonPickerOptions as CoreSeasonPickerOptions,\n type SeasonRenewalIntent,\n type RendererViewMode,\n type SeatPickerTheme,\n} from '@seatlayer/js';\n\nexport type {\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from '@seatlayer/js';\n\n/** Display-only commercial context; the host must re-price on its server. */\nexport interface SeasonOfferPresentation {\n eyebrow?: string;\n priceLabel?: string;\n compareAtPriceLabel?: string;\n savingsLabel?: string;\n priceNote?: string;\n benefits?: readonly string[];\n renewalLabel?: string;\n}\n\n/** Forward-compatible wrapper options for the interactive Season buyer flow. */\nexport interface SeasonPickerOptions extends CoreSeasonPickerOptions {\n offer?: SeasonOfferPresentation;\n maxSelection?: number;\n numberOfPlacesToSelect?: number;\n locale?: string;\n initialView?: RendererViewMode;\n enable3D?: boolean;\n theme?: SeatPickerTheme;\n}\n\n/** Imperative controls for the fixed-inclusion Season buyer flow. */\nexport interface SeasonPickerHandle {\n holdSameSeat(labels: readonly string[], operationId: string): Promise<SeasonCheckoutHandoff>;\n restoreOperation(operationId: string): Promise<SeasonCheckoutHandoff | null>;\n release(releaseActionId: string): Promise<void>;\n createRenewalIntent(offerId: string): Promise<SeasonRenewalIntent>;\n getDescriptor(): SeasonDescriptor | null;\n getAvailability(): SeasonAvailability | null;\n getHandoff(): SeasonCheckoutHandoff | null;\n}\n\n/** Props accepted by the React Season wrapper. */\nexport interface SeasonPickerProps extends Omit<SeasonPickerOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React lifecycle adapter for the distinct fixed-inclusion `SeasonPicker`.\n * It never receives a secret key and never turns a browser handoff into proof\n * of price, payment, booking, or renewal.\n */\nexport const SeasonPicker = forwardRef<SeasonPickerHandle, SeasonPickerProps>(\n function SeasonPicker(props, ref) {\n const {\n season,\n apiBase,\n buyerAccessToken,\n initialOperationId,\n recoveryTimeoutMs,\n fetch,\n offer,\n maxSelection,\n numberOfPlacesToSelect,\n locale,\n initialView,\n enable3D,\n theme,\n className,\n style,\n } = props;\n const containerRef = useRef<HTMLDivElement | null>(null);\n const pickerRef = useRef<CoreSeasonPicker | null>(null);\n const latest = useRef(props);\n latest.current = props;\n const offerKey = JSON.stringify(offer ?? null);\n const themeKey = JSON.stringify(theme ?? null);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const { className: _className, style: _style, ...options } = latest.current;\n const picker = new CoreSeasonPicker({\n ...options,\n container,\n buyerAccessTokenProvider: options.buyerAccessTokenProvider\n ? (context) => latest.current.buyerAccessTokenProvider!(context)\n : undefined,\n onHold: (handoff) => latest.current.onHold?.(handoff),\n onHoldChange: (handoff) => latest.current.onHoldChange?.(handoff),\n onContinue: (handoff) => latest.current.onContinue?.(handoff),\n onRenewalIntent: (intent) => latest.current.onRenewalIntent?.(intent),\n onAccessExpired: (event) => latest.current.onAccessExpired?.(event),\n onAccessUnavailable: (event) => latest.current.onAccessUnavailable?.(event),\n onStatusChange: (event) => latest.current.onStatusChange?.(event),\n onError: (error) => latest.current.onError?.(error),\n });\n pickerRef.current = picker;\n void picker.render().catch(() => undefined);\n\n return () => {\n picker.destroy();\n if (pickerRef.current === picker) pickerRef.current = null;\n };\n }, [\n season,\n apiBase,\n buyerAccessToken,\n initialOperationId,\n recoveryTimeoutMs,\n fetch,\n offerKey,\n maxSelection,\n numberOfPlacesToSelect,\n locale,\n initialView,\n enable3D,\n themeKey,\n ]);\n\n useImperativeHandle(ref, (): SeasonPickerHandle => ({\n holdSameSeat: (labels, operationId) => required(pickerRef).holdSameSeat(labels, operationId),\n restoreOperation: (operationId) => required(pickerRef).restoreOperation(operationId),\n release: (releaseActionId) => required(pickerRef).release(releaseActionId),\n createRenewalIntent: (offerId) => required(pickerRef).createRenewalIntent(offerId),\n getDescriptor: () => pickerRef.current?.getDescriptor() ?? null,\n getAvailability: () => pickerRef.current?.getAvailability() ?? null,\n getHandoff: () => pickerRef.current?.getHandoff() ?? null,\n }), []);\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n\nfunction required(ref: { current: CoreSeasonPicker | null }): CoreSeasonPicker {\n if (!ref.current) throw new Error('seatlayer: React SeasonPicker is not mounted');\n return ref.current;\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 SeatHoverDetails,\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 SeatPickerPricing,\n SeatPickerBestAvailableOptions,\n SeatPickerBuyerView,\n SeatPickerBuyerViewOptions,\n PickerMapTheme,\n RendererViewMode,\n CheckoutHandoff,\n CheckoutLineItem,\n} from './SeatPicker';\nexport { SeasonPicker } from './SeasonPicker';\nexport type {\n SeasonPickerHandle,\n SeasonPickerProps,\n SeasonPickerOptions,\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonOfferPresentation,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from './SeasonPicker';\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n// Host-side embed helper: grows the iframe on `seatlayer:height` and pins it on\n// `seatlayer:fullscreen`. React hosts depend on this package alone, so it has to\n// be reachable here rather than only from @seatlayer/js.\nexport { attachPickerFrame } from '@seatlayer/js';\nexport type { AttachPickerFrameOptions } 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 EventScopedManageToken,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n SeatManagerConnection,\n} from './SeatManager';\nexport type {\n ControlRoomActivityEntry,\n ControlRoomSectionMetric,\n ControlRoomSnapshot,\n} from '@seatlayer/js/manager';\n// Sales Channels — buyer access sessions for private channel inventory.\nexport type {\n BuyerAccessToken,\n BuyerAccessTokenProvider,\n BuyerAccessRefreshReason,\n BuyerAccessUnavailableReason,\n BuyerAccessExpiredEvent,\n BuyerAccessUnavailableEvent,\n SelectedObjectUnavailableEvent,\n} from '@seatlayer/js';\n"],"mappings":"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","names":["SeatingChart","forwardRef","useEffect","useImperativeHandle","useRef","jsx","EmbeddedDesigner","forwardRef","useEffect","useImperativeHandle","useRef","jsx","SeatPicker","forwardRef","useEffect","useImperativeHandle","useRef","jsx","SeasonPicker","SeatPicker"]}
|
|
1
|
+
{"version":3,"sources":["../src/SeatingChart.tsx","../src/EmbeddedDesigner.tsx","../src/SeatPicker.tsx","../src/SeasonPicker.tsx","../src/index.ts"],"sourcesContent":["import {\n forwardRef,\n useEffect,\n useImperativeHandle,\n useRef,\n type CSSProperties,\n} from 'react';\nimport {\n SeatingChart as CoreSeatingChart,\n bindSeatingChartHandle,\n buildSeatingChartOptions,\n type SeatingChartHandle,\n type SeatingChartIdentityProp,\n type SeatingChartOptions,\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 type { SeatingChartHandle } from '@seatlayer/js';\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 the props in\n * `SEATING_CHART_IDENTITY_PROPS` (`event`, `apiBase`, `maxSelection`, `numberOfPlacesToSelect`, `selectionValidators`,\n * `publicKey`, `locale`, `currency`, `colorblindSafe`, `initialView`,\n * `errorDisplay`) trigger a rebuild.\n * (`messages`, `selectedObjects`, and `selectableObjects` are read once per\n * mount; change selection policy later through the imperative handle.)\n */\nexport const SeatingChart = forwardRef<SeatingChartHandle, SeatingChartProps>(\n function SeatingChart(props, ref) {\n const {\n className, style, event, apiBase, maxSelection, selectedObjects, selectableObjects,\n numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency,\n colorblindSafe, initialView, errorDisplay,\n } = 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(buildSeatingChartOptions(\n el,\n {\n event,\n apiBase,\n maxSelection,\n selectedObjects,\n selectableObjects,\n numberOfPlacesToSelect,\n selectionValidators,\n publicKey,\n locale,\n currency,\n colorblindSafe,\n initialView,\n errorDisplay,\n messages: callbacks.current.messages,\n seatTooltip: props.seatTooltip,\n // Read through the ref so a host may pass the provider as an inline\n // arrow without its new identity tearing the canvas down each render.\n buyerAccessTokenProvider: props.buyerAccessTokenProvider\n ? (context) => callbacks.current.buyerAccessTokenProvider!(context)\n : undefined,\n buyerAccessToken: callbacks.current.buyerAccessToken,\n },\n {\n onAccessExpired: (state) => callbacks.current.onAccessExpired?.(state),\n onAccessUnavailable: (state) => callbacks.current.onAccessUnavailable?.(state),\n onSelectedObjectUnavailable: (state) =>\n callbacks.current.onSelectedObjectUnavailable?.(state),\n onSelectionChange: (seats) => callbacks.current.onSelectionChange?.(seats),\n onSelectionValidityChange: (state) => callbacks.current.onSelectionValidityChange?.(state),\n onSelectionValid: (seats) => callbacks.current.onSelectionValid?.(seats),\n onSelectionInvalid: (state) => callbacks.current.onSelectionInvalid?.(state),\n onSelectionLimit: (max) => callbacks.current.onSelectionLimit?.(max),\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 onSeatHover: (details) => callbacks.current.onSeatHover?.(details),\n },\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 — this dependency\n // array is SEATING_CHART_IDENTITY_PROPS, spelled out because React's\n // linter (and its compiler) must see the literal list.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency, colorblindSafe, initialView, errorDisplay]);\n\n useImperativeHandle(ref, () => bindSeatingChartHandle(() => chartRef.current), []);\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n\n/**\n * The `useEffect` dependency array above must list every identity prop, and\n * React's linter and compiler both require it to be a literal — so it cannot be\n * spread from `SEATING_CHART_IDENTITY_PROPS` the way Vue's watcher and Angular's\n * `ngOnChanges` do. This is the compile-time proof that the literal is still\n * complete: add a prop to the shared list without adding it above and\n * `MissingIdentityDeps` stops being `never`, which fails this line. Types only —\n * nothing here reaches the bundle.\n */\ntype MissingIdentityDeps = Exclude<\n SeatingChartIdentityProp,\n | 'event' | 'apiBase' | 'maxSelection' | 'numberOfPlacesToSelect' | 'selectionValidators'\n | 'publicKey' | 'locale'\n | 'currency' | 'colorblindSafe' | 'initialView' | 'errorDisplay'\n>;\ntype Assert<T extends true> = T;\ntype _IdentityDepsAreComplete = Assert<[MissingIdentityDeps] extends [never] ? true : false>;\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 /**\n * Show the built-in branded loading skeleton and error/expiry card inside the\n * container while the Designer boots. Defaults to `true`. Set `false` when you\n * render your own loading and error chrome.\n */\n showLoadingState?: boolean;\n /**\n * If the Designer never posts `ready` within this many milliseconds, the host\n * shows the error card with a timeout message. Defaults to `20000`.\n */\n loadingTimeoutMs?: number;\n /**\n * How the iframe is sized. `'fill'` (the default) is **container-aware**: if the\n * container has a definite height (a sized block, `flex-1 min-h-0`, a resolved\n * `%`) the Designer fills 100% of it and tracks its size via a `ResizeObserver`;\n * if the container is content-sized (full-page usage) the Designer fills the\n * viewport (`window.innerHeight` minus the iframe's top offset). Either way the\n * result is clamped to `minHeight` and re-probed on resize. Heights are applied\n * with `!important` so a host theme can't override them. Pass a number for a\n * fixed pixel height you manage yourself.\n */\n height?: 'fill' | number;\n /** Lower bound for `'fill'` sizing. Defaults to `480`. */\n minHeight?: number;\n /**\n * Legacy content-height auto-grow via the `seatlayer.designer.resize`\n * protocol. Only honored when `height` is a number; with the default\n * `height: 'fill'` the resize messages are ignored and the SDK sizes the iframe\n * to the container or viewport.\n */\n autoResize?: boolean;\n /**\n * Called when the user presses \"Try again\" on the error card. Mint a fresh\n * session and set the new `designerUrl` (recreating the iframe returns it to\n * the loading state). When omitted, \"Try again\" reloads the current URL.\n *\n * When supplied, it also powers automatic session renewal — see\n * {@link EmbeddedDesignerProps.autoRenewSession}.\n */\n onRequestRelaunch?: () => void;\n /**\n * Keep long editing sessions alive with no expiry wall. When you supply\n * `onRequestRelaunch`, the SDK schedules a silent relaunch shortly before the\n * session's `expiresAt` (mint a fresh session and update `designerUrl` in your\n * `onRequestRelaunch` handler), and makes one automatic recovery attempt if an\n * expiry error still slips through before showing the \"Try again\" card. Defaults\n * to `true` whenever `onRequestRelaunch` is provided; a no-op without it. Set\n * `false` to keep the fully manual \"Try again\" behavior.\n */\n autoRenewSession?: boolean;\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 showLoadingState: props.showLoadingState,\n loadingTimeoutMs: props.loadingTimeoutMs,\n height: props.height,\n minHeight: props.minHeight,\n autoResize: props.autoResize,\n autoRenewSession: props.autoRenewSession,\n // Only forward a relaunch hook when the host supplied one, so the core's\n // \"reload the same URL in place\" fallback still applies otherwise.\n onRequestRelaunch: props.onRequestRelaunch\n ? () => callbacks.current.onRequestRelaunch?.()\n : undefined,\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. Sizing and\n // relaunch policy are updated in place below; callbacks are read from refs.\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, props.showLoadingState, props.loadingTimeoutMs, props.autoResize]);\n\n useEffect(() => {\n designerRef.current?.setSizing(props.height, props.minHeight);\n }, [props.height, props.minHeight]);\n\n useEffect(() => {\n designerRef.current?.setRelaunchPolicy(\n props.onRequestRelaunch ? () => callbacks.current.onRequestRelaunch?.() : undefined,\n props.autoRenewSession,\n );\n }, [!!props.onRequestRelaunch, props.autoRenewSession]);\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 SeatPickerPricing,\n type SeatPickerBestAvailableOptions,\n type SeatPickerBuyerView,\n type SeatPickerBuyerViewOptions,\n type PickerMapTheme,\n type PickerSelectionValidity,\n type RendererViewMode,\n type SelectedSeat,\n type HoldResult,\n} from '@seatlayer/js';\n\nexport type {\n SeatPickerOptions,\n SeatPickerTheme,\n SeatPickerPricing,\n SeatPickerBestAvailableOptions,\n SeatPickerBuyerView,\n SeatPickerBuyerViewOptions,\n PickerMapTheme,\n PickerSelectionValidity,\n RendererViewMode,\n CheckoutHandoff,\n CheckoutLineItem,\n} from '@seatlayer/js';\n\n/** Imperative handle for the full-experience picker widget. */\nexport interface SeatPickerHandle {\n /** Logically close the picker. React still owns component unmount/teardown. */\n close(): void;\n /** Current selection with resolved prices. */\n getSelection(): SelectedSeat[];\n /** Select free objects by engine id or public label. */\n selectObjects(objects: string[]): SelectedSeat[];\n /** Deselect objects by engine id or public label. */\n deselectObjects(objects: string[]): void;\n /** Clear every unheld selection. */\n clearSelection(): void;\n /** Select every selectable object in the named categories. */\n selectCategories(categoryKeys: string[]): SelectedSeat[];\n /** Deselect every selected object in the named categories. */\n deselectCategories(categoryKeys: string[]): void;\n /** Replace the buyer-selectable object allow-list without remounting. */\n setSelectableObjects(objects: string[] | null): void;\n /** Change the active selection cap without remounting. */\n setMaxSelection(maxSelection: number): void;\n /** Current exact-count validity, or null when exact selection is disabled. */\n getSelectionValidity(): PickerSelectionValidity | null;\n /** Server-side best seats + hold, reflected in the widget tray. */\n bestAvailable(\n qty: number,\n categoryKey?: string,\n options?: SeatPickerBestAvailableOptions,\n ): 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 * Re-acquire the buyer access session after your app re-authorizes the buyer\n * (Sales Channels). Resolves false when the picker is not access-scoped.\n */\n refreshAccess(): Promise<boolean>;\n /** Re-ink the drawn map without rebuilding the picker or disturbing a hold. */\n setMapTheme(map: PickerMapTheme | null): void;\n /** Hide or restore duplicate event identity after mount. */\n setEventDetailsHidden(hidden: boolean): void;\n /** Replace host display-pricing overrides without remounting. */\n setPricing(pricing: SeatPickerPricing | undefined): void;\n /** Current colorblind-safe buyer preference. */\n isColorblindSafe(): boolean;\n /** Update the colorblind-safe buyer preference and renderer. */\n setColorblindSafe(on: boolean): void;\n /** Switch the underlying 2D map projection. */\n setViewMode(mode: RendererViewMode): void;\n /** Current 2D map projection. */\n getViewMode(): RendererViewMode;\n /** Current buyer surface: map or interactive 3D venue. */\n getBuyerView(): SeatPickerBuyerView;\n /** Switch the buyer surface, optionally carrying a 3D camera intent. */\n setBuyerView(view: SeatPickerBuyerView, options?: SeatPickerBuyerViewOptions): 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, selectedObjects, selectableObjects, numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency, colorblindSafe, hideBadge, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView, checkout } = props;\n\n const containerRef = useRef<HTMLDivElement | null>(null);\n const pickerRef = useRef<CoreSeatPicker | null>(null);\n const closeRef = useRef<(() => void) | 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 // Forward every option the host passed. Spreading rather than naming each\n // field keeps new core options (pricing, hideBadge, transport, …) working\n // here the day they ship: a hand-maintained list silently drops anything\n // it forgets, and `SeatPickerProps extends SeatPickerOptions` means such a\n // drop still type-checks clean for the host.\n const { className: _className, style: _style, ...options } = callbacks.current;\n\n const picker = new CoreSeatPicker({\n ...options,\n container: el,\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 onSelectionValidityChange: (state) => callbacks.current.onSelectionValidityChange?.(state),\n onSelectionValid: (seats) => callbacks.current.onSelectionValid?.(seats),\n onSelectionInvalid: (state) => callbacks.current.onSelectionInvalid?.(state),\n onSelectionLimit: (max) => callbacks.current.onSelectionLimit?.(max),\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 // Sales Channels. The provider is read through the ref for the same\n // reason as every other callback: a host may pass an inline arrow.\n buyerAccessTokenProvider: options.buyerAccessTokenProvider\n ? (context) => callbacks.current.buyerAccessTokenProvider!(context)\n : undefined,\n onAccessExpired: (state) => callbacks.current.onAccessExpired?.(state),\n onAccessUnavailable: (state) => callbacks.current.onAccessUnavailable?.(state),\n onSelectedObjectUnavailable: (state) =>\n callbacks.current.onSelectedObjectUnavailable?.(state),\n // Hosted checkout. Read through the ref like every other callback — the\n // spread above would freeze an inline arrow at construction, and these\n // two fire long after it (a payment webhook can land minutes later).\n onCheckoutUnavailable: (state) => callbacks.current.onCheckoutUnavailable?.(state),\n onOrderConfirmed: (order) => callbacks.current.onOrderConfirmed?.(order),\n });\n pickerRef.current = picker;\n let closed = false;\n const close = (): void => {\n if (closed) return;\n closed = true;\n if (pickerRef.current === picker) pickerRef.current = null;\n picker.close();\n };\n closeRef.current = close;\n void picker.render();\n\n return () => {\n if (!closed) picker.destroy();\n if (pickerRef.current === picker) pickerRef.current = null;\n if (closeRef.current === close) closeRef.current = null;\n };\n // Rebuild only when the identity of the event/config changes. Object-valued\n // options (theme, messages, pricing, transport) stay out: hosts routinely\n // pass them as inline literals, so a new identity every render would tear\n // the widget down mid-selection. They are read fresh at construction.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [event, apiBase, maxSelection, numberOfPlacesToSelect, selectionValidators, publicKey, locale, currency, colorblindSafe, hideBadge, holdTtlMs, initialHoldId, restoreHold, confirmSelection, seatView, checkout]);\n\n useImperativeHandle(\n ref,\n (): SeatPickerHandle => ({\n close: () => closeRef.current?.(),\n getSelection: () => pickerRef.current?.getSelection() ?? [],\n selectObjects: (objects) => pickerRef.current?.selectObjects(objects) ?? [],\n deselectObjects: (objects) => pickerRef.current?.deselectObjects(objects),\n clearSelection: () => pickerRef.current?.clearSelection(),\n selectCategories: (categoryKeys) => pickerRef.current?.selectCategories(categoryKeys) ?? [],\n deselectCategories: (categoryKeys) => pickerRef.current?.deselectCategories(categoryKeys),\n setSelectableObjects: (objects) => pickerRef.current?.setSelectableObjects(objects),\n setMaxSelection: (max) => pickerRef.current?.setMaxSelection(max),\n getSelectionValidity: () => pickerRef.current?.getSelectionValidity() ?? null,\n bestAvailable: (qty, categoryKey, options) =>\n pickerRef.current?.bestAvailable(qty, categoryKey, options) ?? 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 refreshAccess: () => pickerRef.current?.refreshAccess() ?? Promise.resolve(false),\n setMapTheme: (map) => pickerRef.current?.setMapTheme(map),\n setEventDetailsHidden: (hidden) => pickerRef.current?.setEventDetailsHidden(hidden),\n setPricing: (pricing) => pickerRef.current?.setPricing(pricing),\n isColorblindSafe: () => pickerRef.current?.isColorblindSafe() ?? false,\n setColorblindSafe: (on) => pickerRef.current?.setColorblindSafe(on),\n setViewMode: (mode) => pickerRef.current?.setViewMode(mode),\n getViewMode: () => pickerRef.current?.getViewMode() ?? 'flat',\n getBuyerView: () => pickerRef.current?.getBuyerView() ?? 'map',\n setBuyerView: (view, options) => pickerRef.current?.setBuyerView(view, options),\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 SeasonPicker as CoreSeasonPicker,\n type SeasonAvailability,\n type SeasonCheckoutHandoff,\n type SeasonDescriptor,\n type SeasonPickerOptions,\n type SeasonRenewalIntent,\n} from '@seatlayer/js';\n\nexport type {\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonOfferPresentation,\n SeasonPickerOptions,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from '@seatlayer/js';\n\n/** Imperative controls for the fixed-inclusion Season buyer flow. */\nexport interface SeasonPickerHandle {\n holdSameSeat(labels: readonly string[], operationId: string): Promise<SeasonCheckoutHandoff>;\n restoreOperation(operationId: string): Promise<SeasonCheckoutHandoff | null>;\n release(releaseActionId: string): Promise<void>;\n createRenewalIntent(offerId: string): Promise<SeasonRenewalIntent>;\n getDescriptor(): SeasonDescriptor | null;\n getAvailability(): SeasonAvailability | null;\n getHandoff(): SeasonCheckoutHandoff | null;\n}\n\n/** Props accepted by the React Season wrapper. */\nexport interface SeasonPickerProps extends Omit<SeasonPickerOptions, 'container'> {\n className?: string;\n style?: CSSProperties;\n}\n\n/**\n * React lifecycle adapter for the distinct fixed-inclusion `SeasonPicker`.\n * It never receives a secret key and never turns a browser handoff into proof\n * of price, payment, booking, or renewal.\n */\nexport const SeasonPicker = forwardRef<SeasonPickerHandle, SeasonPickerProps>(\n function SeasonPicker(props, ref) {\n const {\n season,\n apiBase,\n publicKey,\n checkout,\n returnUrl,\n buyerAccessToken,\n initialOperationId,\n recoveryTimeoutMs,\n fetch,\n offer,\n maxSelection,\n numberOfPlacesToSelect,\n locale,\n initialView,\n enable3D,\n theme,\n className,\n style,\n } = props;\n const containerRef = useRef<HTMLDivElement | null>(null);\n const pickerRef = useRef<CoreSeasonPicker | null>(null);\n const latest = useRef(props);\n latest.current = props;\n const offerKey = JSON.stringify(offer ?? null);\n const themeKey = JSON.stringify(theme ?? null);\n\n useEffect(() => {\n const container = containerRef.current;\n if (!container) return;\n\n const { className: _className, style: _style, ...options } = latest.current;\n const picker = new CoreSeasonPicker({\n ...options,\n container,\n buyerAccessTokenProvider: options.buyerAccessTokenProvider\n ? (context) => latest.current.buyerAccessTokenProvider!(context)\n : undefined,\n onHold: (handoff) => latest.current.onHold?.(handoff),\n onHoldChange: (handoff) => latest.current.onHoldChange?.(handoff),\n onContinue: (handoff) => latest.current.onContinue?.(handoff),\n onRenewalIntent: (intent) => latest.current.onRenewalIntent?.(intent),\n onAccessExpired: (event) => latest.current.onAccessExpired?.(event),\n onAccessUnavailable: (event) => latest.current.onAccessUnavailable?.(event),\n onStatusChange: (event) => latest.current.onStatusChange?.(event),\n onError: (error) => latest.current.onError?.(error),\n });\n pickerRef.current = picker;\n void picker.render().catch(() => undefined);\n\n return () => {\n picker.destroy();\n if (pickerRef.current === picker) pickerRef.current = null;\n };\n }, [\n season, apiBase, publicKey, checkout, returnUrl,\n buyerAccessToken, initialOperationId, recoveryTimeoutMs, fetch,\n offerKey, maxSelection, numberOfPlacesToSelect, locale, initialView, enable3D, themeKey,\n ]);\n\n useImperativeHandle(ref, (): SeasonPickerHandle => ({\n holdSameSeat: (labels, operationId) => required(pickerRef).holdSameSeat(labels, operationId),\n restoreOperation: (operationId) => required(pickerRef).restoreOperation(operationId),\n release: (releaseActionId) => required(pickerRef).release(releaseActionId),\n createRenewalIntent: (offerId) => required(pickerRef).createRenewalIntent(offerId),\n getDescriptor: () => pickerRef.current?.getDescriptor() ?? null,\n getAvailability: () => pickerRef.current?.getAvailability() ?? null,\n getHandoff: () => pickerRef.current?.getHandoff() ?? null,\n }), []);\n\n return <div ref={containerRef} className={className} style={style} />;\n },\n);\n\nfunction required(ref: { current: CoreSeasonPicker | null }): CoreSeasonPicker {\n if (!ref.current) throw new Error('seatlayer: React SeasonPicker is not mounted');\n return ref.current;\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 SeatHoverDetails,\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 SeatPickerPricing,\n SeatPickerBestAvailableOptions,\n SeatPickerBuyerView,\n SeatPickerBuyerViewOptions,\n PickerMapTheme,\n RendererViewMode,\n CheckoutHandoff,\n CheckoutLineItem,\n} from './SeatPicker';\nexport { SeasonPicker } from './SeasonPicker';\nexport type {\n SeasonPickerHandle,\n SeasonPickerProps,\n SeasonPickerOptions,\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonOfferPresentation,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from './SeasonPicker';\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n// Host-side embed helper: grows the iframe on `seatlayer:height` and pins it on\n// `seatlayer:fullscreen`. React hosts depend on this package alone, so it has to\n// be reachable here rather than only from @seatlayer/js.\nexport { attachPickerFrame } from '@seatlayer/js';\nexport type { AttachPickerFrameOptions } 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 EventScopedManageToken,\n SeatManagerTallies,\n SeatManagerActivity,\n SeatManagerActionResult,\n SeatManagerConnection,\n} from './SeatManager';\nexport type {\n ControlRoomActivityEntry,\n ControlRoomSectionMetric,\n ControlRoomSnapshot,\n} from '@seatlayer/js/manager';\n// Sales Channels — buyer access sessions for private channel inventory.\nexport type {\n BuyerAccessToken,\n BuyerAccessTokenProvider,\n BuyerAccessRefreshReason,\n BuyerAccessUnavailableReason,\n BuyerAccessExpiredEvent,\n BuyerAccessUnavailableEvent,\n SelectedObjectUnavailableEvent,\n} from '@seatlayer/js';\n"],"mappings":"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","names":["SeatingChart","forwardRef","useEffect","useImperativeHandle","useRef","jsx","EmbeddedDesigner","forwardRef","useEffect","useImperativeHandle","useRef","jsx","SeatPicker","forwardRef","useEffect","useImperativeHandle","useRef","jsx","SeasonPicker","SeatPicker"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seatlayer/react",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.81.0",
|
|
4
4
|
"description": "SeatLayer's official React seating chart and seat map SDK — live availability, seat selection, temporary holds, and a typed TypeScript API for ticketing apps.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": {
|
|
@@ -73,8 +73,8 @@
|
|
|
73
73
|
"typescript"
|
|
74
74
|
],
|
|
75
75
|
"dependencies": {
|
|
76
|
-
"@seatlayer/core": "0.
|
|
77
|
-
"@seatlayer/js": "0.
|
|
76
|
+
"@seatlayer/core": "0.81.0",
|
|
77
|
+
"@seatlayer/js": "0.81.0"
|
|
78
78
|
},
|
|
79
79
|
"peerDependencies": {
|
|
80
80
|
"react": ">=17.0.0"
|