@seatlayer/vue 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 +54 -14
- package/dist/index.cjs +14 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +29 -0
- package/dist/index.d.ts +29 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# SeatLayer Vue Seat Map SDK
|
|
1
|
+
# SeatLayer Vue 3 Seating Chart and Seat Map SDK
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@seatlayer/vue)
|
|
4
4
|
[](https://www.npmjs.com/package/@seatlayer/vue)
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
[](https://www.typescriptlang.org/)
|
|
7
7
|
[](../../LICENSE)
|
|
8
8
|
|
|
9
|
-
The official Vue 3
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
The official Vue 3 seating chart component for SeatLayer reserved seating.
|
|
10
|
+
Render live seat availability and selection inside a Vue app, then take a
|
|
11
|
+
temporary hold on the inventory the buyer chooses.
|
|
12
12
|
|
|
13
13
|
The buyer modal and iframe integration stay framework-agnostic: this package
|
|
14
14
|
also re-exports the plain JavaScript `SeatPickerWidget` class and the
|
|
@@ -25,7 +25,7 @@ also re-exports the plain JavaScript `SeatPickerWidget` class and the
|
|
|
25
25
|
|
|
26
26
|
## What is included
|
|
27
27
|
|
|
28
|
-
- `SeatingChart` — one
|
|
28
|
+
- `SeatingChart` — one Vue 3 component wrapper (`SeatLayerSeatingChart`), written
|
|
29
29
|
as a render function so no Vue compiler plugin is needed.
|
|
30
30
|
- `SeasonPicker` — fixed-inclusion Season selection and returning-holder intent.
|
|
31
31
|
- `SeatPickerWidget` — the framework-agnostic one-call buyer modal.
|
|
@@ -76,6 +76,44 @@ async function checkout() {
|
|
|
76
76
|
</template>
|
|
77
77
|
```
|
|
78
78
|
|
|
79
|
+
### Complete buyer picker
|
|
80
|
+
|
|
81
|
+
Use the re-exported `SeatPickerWidget` when you want the ready modal with its
|
|
82
|
+
map, legend, priced tray, hold timer, and checkout hand-off:
|
|
83
|
+
|
|
84
|
+
```vue
|
|
85
|
+
<script setup lang="ts">
|
|
86
|
+
import { SeatPickerWidget } from '@seatlayer/vue';
|
|
87
|
+
|
|
88
|
+
async function openSeatPicker() {
|
|
89
|
+
await SeatPickerWidget.open({
|
|
90
|
+
event: 'ev_9f3a',
|
|
91
|
+
publicKey: 'pk_live_your_publishable_key',
|
|
92
|
+
webMcp: true,
|
|
93
|
+
onCheckout: (hold) => {
|
|
94
|
+
void continueCheckoutOnYourServer(hold.holdId).catch(showCheckoutError);
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
</script>
|
|
99
|
+
|
|
100
|
+
<template>
|
|
101
|
+
<button @click="openSeatPicker">Choose seats</button>
|
|
102
|
+
</template>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
`continueCheckoutOnYourServer` and `showCheckoutError` are supplied by your
|
|
106
|
+
application. The first owns the async server request; `.catch(...)` surfaces a
|
|
107
|
+
rejected checkout.
|
|
108
|
+
|
|
109
|
+
On supported browsers, the complete picker includes the Map | 3D buyer view.
|
|
110
|
+
Its opt-in `webMcp: true` setting lets a compatible in-browser assistant
|
|
111
|
+
describe the event, find seats, select them, and read the selection. Use
|
|
112
|
+
`webMcp: { holds: true }` only when the assistant should also place a temporary
|
|
113
|
+
hold. These tools do not take payment or book seats. See the
|
|
114
|
+
[buyer WebMCP seat-selection guide](https://docs.seatlayer.io/buyer-sdk/webmcp-agent-tools/)
|
|
115
|
+
for the full contract and iframe origin controls.
|
|
116
|
+
|
|
79
117
|
### Fixed renewable Season
|
|
80
118
|
|
|
81
119
|
```vue
|
|
@@ -198,11 +236,12 @@ covers props, events, holds, and checkout in depth.
|
|
|
198
236
|
|
|
199
237
|
### Is this a real Vue component or an iframe?
|
|
200
238
|
|
|
201
|
-
`SeatingChart` is a
|
|
202
|
-
|
|
203
|
-
function rather than a single-file component, so it needs no Vue compiler
|
|
204
|
-
|
|
205
|
-
the buyer picker in an iframe, `attachPickerFrame` is
|
|
239
|
+
`SeatingChart` is a Vue 3 component that renders a plain `<div>` into your own
|
|
240
|
+
tree — no iframe and no stylesheet of its own. It is written as a render
|
|
241
|
+
function rather than a single-file component, so it needs no Vue compiler
|
|
242
|
+
plugin. Use it on the client in Vite, Nuxt, or another Vue 3 bundler. If you
|
|
243
|
+
would rather embed the buyer picker in an iframe, `attachPickerFrame` is
|
|
244
|
+
exported for that.
|
|
206
245
|
|
|
207
246
|
### How do temporary seat holds work?
|
|
208
247
|
|
|
@@ -239,10 +278,10 @@ that, which books no real inventory.
|
|
|
239
278
|
- [Compare SeatLayer's mobile seat map SDKs](https://docs.seatlayer.io/buyer-sdk/mobile/)
|
|
240
279
|
when the same event also has to render in native iOS, Android, Flutter, or
|
|
241
280
|
React Native apps.
|
|
242
|
-
- [
|
|
243
|
-
|
|
281
|
+
- [Use the separate `@seatlayer/js` EmbeddedDesigner API](https://docs.seatlayer.io/platform/embedded-designer/)
|
|
282
|
+
when organizers need hosted chart editing inside a Vue product.
|
|
244
283
|
- [Explore the 3D seating chart](https://seatlayer.io/3d-seat-map/) for the
|
|
245
|
-
interactive venue view
|
|
284
|
+
interactive venue view available through `SeatPickerWidget` in supported browsers.
|
|
246
285
|
- [Point AI coding agents at the SeatLayer docs index](https://docs.seatlayer.io/llms.txt)
|
|
247
286
|
(`llms.txt`) for an agent-readable map of the documentation.
|
|
248
287
|
|
|
@@ -272,4 +311,5 @@ Source, issues, and contribution guidance live in
|
|
|
272
311
|
|
|
273
312
|
## License
|
|
274
313
|
|
|
275
|
-
MIT
|
|
314
|
+
The Vue wrapper source in this package is MIT licensed. The separately
|
|
315
|
+
distributed SeatLayer runtime is not covered by this package's MIT license.
|
package/dist/index.cjs
CHANGED
|
@@ -228,6 +228,12 @@ var SeasonPicker = (0, import_vue2.defineComponent)({
|
|
|
228
228
|
props: {
|
|
229
229
|
season: { type: String, required: true },
|
|
230
230
|
apiBase: { type: String, default: void 0 },
|
|
231
|
+
publicKey: { type: String, default: void 0 },
|
|
232
|
+
checkout: {
|
|
233
|
+
type: String,
|
|
234
|
+
default: void 0
|
|
235
|
+
},
|
|
236
|
+
returnUrl: { type: String, default: void 0 },
|
|
231
237
|
buyerAccessTokenProvider: {
|
|
232
238
|
type: Function,
|
|
233
239
|
default: void 0
|
|
@@ -247,6 +253,7 @@ var SeasonPicker = (0, import_vue2.defineComponent)({
|
|
|
247
253
|
"renewal-intent": (_intent) => true,
|
|
248
254
|
"access-expired": (_event) => true,
|
|
249
255
|
"access-unavailable": (_event) => true,
|
|
256
|
+
"order-confirmed": (_order) => true,
|
|
250
257
|
"status-change": (_event) => true,
|
|
251
258
|
error: (_error) => true
|
|
252
259
|
},
|
|
@@ -265,6 +272,9 @@ var SeasonPicker = (0, import_vue2.defineComponent)({
|
|
|
265
272
|
container: element,
|
|
266
273
|
season: props.season,
|
|
267
274
|
apiBase: props.apiBase,
|
|
275
|
+
publicKey: props.publicKey,
|
|
276
|
+
checkout: props.checkout,
|
|
277
|
+
returnUrl: props.returnUrl,
|
|
268
278
|
buyerAccessTokenProvider: props.buyerAccessTokenProvider,
|
|
269
279
|
buyerAccessToken: props.buyerAccessToken,
|
|
270
280
|
initialOperationId: props.initialOperationId,
|
|
@@ -276,6 +286,7 @@ var SeasonPicker = (0, import_vue2.defineComponent)({
|
|
|
276
286
|
onRenewalIntent: (intent) => emit("renewal-intent", intent),
|
|
277
287
|
onAccessExpired: (event) => emit("access-expired", event),
|
|
278
288
|
onAccessUnavailable: (event) => emit("access-unavailable", event),
|
|
289
|
+
onOrderConfirmed: (order) => emit("order-confirmed", order),
|
|
279
290
|
onStatusChange: (event) => emit("status-change", event),
|
|
280
291
|
onError: (error) => emit("error", error)
|
|
281
292
|
});
|
|
@@ -287,6 +298,9 @@ var SeasonPicker = (0, import_vue2.defineComponent)({
|
|
|
287
298
|
container.value,
|
|
288
299
|
props.season,
|
|
289
300
|
props.apiBase,
|
|
301
|
+
props.publicKey,
|
|
302
|
+
props.checkout,
|
|
303
|
+
props.returnUrl,
|
|
290
304
|
props.buyerAccessTokenProvider,
|
|
291
305
|
props.buyerAccessToken,
|
|
292
306
|
props.initialOperationId,
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/SeatingChart.ts","../src/SeasonPicker.ts"],"sourcesContent":["/**\n * @seatlayer/vue — the Vue 3 wrapper for the SeatLayer embed SDK.\n *\n * Components are written as render functions rather than SFCs, so installing\n * this package needs no Vue compiler plugin.\n */\nexport { SeatingChart } from './SeatingChart';\nexport type { SeatingChartExposed } from './SeatingChart';\nexport { SeasonPicker } from './SeasonPicker';\nexport type { SeasonPickerExposed } from './SeasonPicker';\n\nexport type {\n SelectedSeat,\n HoldResult,\n BestAvailableResult,\n GAAreaAvailability,\n HoldLineItem,\n SeatHoverDetails,\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonPickerOptions,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from '@seatlayer/js';\n\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\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n\n// Host-side embed helper: grows the iframe on `seatlayer:height` and pins it on\n// `seatlayer:fullscreen`. Vue hosts depend on this package alone, so it has to be\n// reachable here rather than only from @seatlayer/js.\nexport { attachPickerFrame } from '@seatlayer/js';\nexport type { AttachPickerFrameOptions } from '@seatlayer/js';\n","import {\n defineComponent,\n h,\n onBeforeUnmount,\n ref,\n shallowRef,\n watch,\n type PropType,\n type Ref,\n} from 'vue';\nimport {\n SeatingChart as CoreSeatingChart,\n SEATING_CHART_IDENTITY_PROPS,\n bindSeatingChartHandle,\n buildSeatingChartOptions,\n type RendererViewMode,\n type SeatingChartHandle,\n type SeatingChartOptions,\n type SelectedSeat,\n type HoldResult,\n type BestAvailableResult,\n type GAAreaAvailability,\n type SeatHoverDetails,\n type PickerSelectionValidity,\n type PickerSelectionValidator,\n type BuyerAccessToken,\n type BuyerAccessTokenProvider,\n type BuyerAccessExpiredEvent,\n type BuyerAccessUnavailableEvent,\n type SelectedObjectUnavailableEvent,\n} from '@seatlayer/js';\n\n/**\n * What `ref=\"chart\"` gives you — call these to drive the picker from your app.\n *\n * Vue exposes these through `defineExpose`, so a template ref is typed as this\n * rather than as the raw component instance. It is the shared\n * `SeatingChartHandle` from `@seatlayer/js`: the same 17 methods React's `ref`\n * and Angular's component expose, from one declaration, so the three wrappers\n * cannot drift apart again.\n */\nexport type SeatingChartExposed = SeatingChartHandle;\n\n/**\n * Vue 3 wrapper around the framework-agnostic `@seatlayer/js` SDK.\n *\n * The canvas is created once and torn down on unmount. Only the props that\n * change the chart's identity (`SEATING_CHART_IDENTITY_PROPS`: `event`,\n * `apiBase`, `maxSelection`, `numberOfPlacesToSelect`, `publicKey`, `locale`, `currency`,\n * `colorblindSafe`, `initialView`, `errorDisplay`) trigger a rebuild;\n * everything else is read live, so a parent re-render never destroys the canvas\n * mid-selection.\n *\n * Written as a render function rather than an SFC so the package builds with\n * plain TypeScript — a consumer needs no Vue compiler plugin to install it.\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { ref } from 'vue';\n * import { SeatingChart, type SeatingChartExposed } from '@seatlayer/vue';\n *\n * const chart = ref<SeatingChartExposed | null>(null);\n * const checkout = async () => {\n * const held = await chart.value?.hold();\n * if (held) await pay(held.holdId);\n * };\n * </script>\n *\n * <template>\n * <SeatingChart ref=\"chart\" event=\"summer-gala\" @selection-change=\"onChange\" />\n * </template>\n * ```\n */\nexport const SeatingChart = defineComponent({\n name: 'SeatLayerSeatingChart',\n\n props: {\n /** Event key to render. Changing it rebuilds the chart. */\n event: { type: String, required: true },\n /** API base URL. Defaults to the public API. */\n apiBase: { type: String, default: undefined },\n /** Cap on how many seats a buyer may select. */\n maxSelection: { type: Number, default: undefined },\n /** Object ids or public labels selected after availability loads. */\n selectedObjects: { type: Array as PropType<string[]>, default: undefined },\n /** Object ids or public labels the buyer may select. */\n selectableObjects: { type: Array as PropType<string[] | null>, default: undefined },\n /** Exact ticket count required for a valid selection. */\n numberOfPlacesToSelect: { type: Number, default: undefined },\n /** Local buyer selection guards. Changing them rebuilds the chart. */\n selectionValidators: { type: Array as PropType<PickerSelectionValidator[]>, default: undefined },\n /** Publishable key, when your integration uses one. */\n publicKey: { type: String, default: undefined },\n /** BCP-47 locale for built-in copy. */\n locale: { type: String, default: undefined },\n /** ISO currency for price formatting. */\n currency: { type: String, default: undefined },\n /** Render with colorblind-safe seat glyphs. */\n colorblindSafe: { type: Boolean, default: undefined },\n /**\n * Initial canvas projection. Read once when the chart is built, so\n * changing it rebuilds.\n * @deprecated `'isometric'` and `'perspective'` are retired in favour of\n * the real 3D venue view; use `'flat'`.\n */\n initialView: {\n type: String as PropType<RendererViewMode>,\n default: undefined,\n },\n /**\n * What the BUYER sees when the chart cannot load: `'message'` (default) is\n * a styleable notice with a Try again button, `'none'` is silent for hosts\n * that render their own failure UI from the `error` event.\n */\n errorDisplay: {\n type: String as PropType<'message' | 'none'>,\n default: undefined,\n },\n /** Copy overrides, read once per mount. */\n messages: {\n type: Object as PropType<SeatingChartOptions['messages']>,\n default: undefined,\n },\n /**\n * Show the built-in seat tooltip. Set false to draw your own popover from\n * the `seat-hover` event.\n */\n seatTooltip: { type: Boolean, default: undefined },\n /**\n * Sales Channels: mint a buyer access session on demand. Called with a\n * `reason`; returns `{ token, expiresAt }` from YOUR backend. The token is\n * held in memory only — never storage, never a URL, never a log.\n */\n buyerAccessTokenProvider: {\n type: Function as PropType<BuyerAccessTokenProvider>,\n default: undefined,\n },\n /** One-shot session for hosts that own the lifecycle. Cannot be renewed. */\n buyerAccessToken: {\n type: [String, Object] as PropType<string | BuyerAccessToken>,\n default: undefined,\n },\n },\n\n emits: {\n /** The buyer's selection changed. */\n 'selection-change': (_seats: SelectedSeat[]) => true,\n /** Exact-count state changed. */\n 'selection-validity-change': (_state: PickerSelectionValidity) => true,\n /** The exact count was reached. */\n 'selection-valid': (_seats: SelectedSeat[]) => true,\n /** The selection is not at the exact count. */\n 'selection-invalid': (_state: PickerSelectionValidity) => true,\n /** The active selection cap was reached. */\n 'selection-limit': (_max: number) => true,\n /** A hold succeeded. */\n hold: (_result: HoldResult) => true,\n /** A previous hold was restored on mount. */\n 'hold-restored': (_result: HoldResult) => true,\n /** The active hold lapsed. */\n 'hold-expired': () => true,\n /** A GA area was clicked. */\n 'ga-click': (_area: GAAreaAvailability) => true,\n /** Something failed — a network error, a rejected hold. */\n error: (_error: unknown) => true,\n /** A floor deck was tapped in the 3D view. */\n 'deck-tap': (_floorId: string) => true,\n /** A transient hint worth showing the buyer, or `null` to clear it. */\n hint: (_message: string | null) => true,\n /** The pointer moved onto a seat, or off one (`null`). */\n 'seat-hover': (_details: SeatHoverDetails | null) => true,\n /** The buyer access session lapsed; `refreshed` says whether it recovered. */\n 'access-expired': (_event: BuyerAccessExpiredEvent) => true,\n /** Private inventory is unavailable and refreshing will not fix it. */\n 'access-unavailable': (_event: BuyerAccessUnavailableEvent) => true,\n /** Selected-but-unheld units stopped being selectable. */\n 'selected-object-unavailable': (_event: SelectedObjectUnavailableEvent) => true,\n },\n\n setup(props, { emit, expose }) {\n const container: Ref<HTMLDivElement | null> = ref(null);\n // shallowRef: the chart owns a canvas and a large scene graph, and making it\n // deeply reactive would have Vue walk all of it on every touch.\n const chart = shallowRef<CoreSeatingChart | null>(null);\n\n const destroy = () => {\n chart.value?.destroy();\n chart.value = null;\n };\n\n const build = () => {\n const element = container.value;\n if (!element) return;\n\n destroy();\n\n // Handlers are bound here rather than inline in the options literal.\n // Inline, TypeScript has to resolve `emit`'s overloads while it is still\n // contextually typing the literal against SeatingChartOptions, and it\n // gives up — collapsing to the last emit signature. Naming them first\n // separates the two inference problems, and reads better besides.\n const onSelectionChange = (seats: SelectedSeat[]) => emit('selection-change', seats);\n const onSelectionValidityChange = (state: PickerSelectionValidity) => emit('selection-validity-change', state);\n const onSelectionValid = (seats: SelectedSeat[]) => emit('selection-valid', seats);\n const onSelectionInvalid = (state: PickerSelectionValidity) => emit('selection-invalid', state);\n const onSelectionLimit = (max: number) => emit('selection-limit', max);\n const onHold = (result: HoldResult) => emit('hold', result);\n const onHoldRestored = (result: HoldResult) => emit('hold-restored', result);\n const onHoldExpired = () => emit('hold-expired');\n const onGAClick = (area: GAAreaAvailability) => emit('ga-click', area);\n const onError = (error: unknown) => emit('error', error);\n const onDeckTap = (floorId: string) => emit('deck-tap', floorId);\n const onHint = (message: string | null) => emit('hint', message);\n const onSeatHover = (details: SeatHoverDetails | null) => emit('seat-hover', details);\n const onAccessExpired = (state: BuyerAccessExpiredEvent) => emit('access-expired', state);\n const onAccessUnavailable = (state: BuyerAccessUnavailableEvent) =>\n emit('access-unavailable', state);\n const onSelectedObjectUnavailable = (state: SelectedObjectUnavailableEvent) =>\n emit('selected-object-unavailable', state);\n\n const instance = new CoreSeatingChart(buildSeatingChartOptions(\n element,\n {\n event: props.event,\n apiBase: props.apiBase,\n maxSelection: props.maxSelection,\n selectedObjects: props.selectedObjects,\n selectableObjects: props.selectableObjects,\n numberOfPlacesToSelect: props.numberOfPlacesToSelect,\n selectionValidators: props.selectionValidators,\n publicKey: props.publicKey,\n locale: props.locale,\n currency: props.currency,\n colorblindSafe: props.colorblindSafe,\n initialView: props.initialView,\n errorDisplay: props.errorDisplay,\n messages: props.messages,\n seatTooltip: props.seatTooltip,\n buyerAccessTokenProvider: props.buyerAccessTokenProvider,\n buyerAccessToken: props.buyerAccessToken,\n },\n {\n onAccessExpired,\n onAccessUnavailable,\n onSelectedObjectUnavailable,\n onSelectionChange,\n onSelectionValidityChange,\n onSelectionValid,\n onSelectionInvalid,\n onSelectionLimit,\n onHold,\n onHoldRestored,\n onHoldExpired,\n onGAClick,\n onError,\n onDeckTap,\n onHint,\n onSeatHover,\n },\n ));\n\n chart.value = instance;\n void instance.render();\n };\n\n // `flush: 'post'` so the container element exists on the first run — a\n // pre-flush watcher would fire before the DOM node is attached.\n watch(\n () => [\n container.value,\n // The shared identity list, not a hand-copied one — this is exactly the\n // place Vue fell two props behind React.\n ...SEATING_CHART_IDENTITY_PROPS.map((prop) => props[prop]),\n ],\n build,\n { immediate: true, flush: 'post' },\n );\n\n onBeforeUnmount(destroy);\n\n // Built once and read live: the handle must survive every rebuild, so it\n // asks for the current instance on each call rather than capturing one.\n const exposed: SeatingChartExposed = bindSeatingChartHandle(() => chart.value);\n expose(exposed);\n\n return () => h('div', { ref: container });\n },\n});\n","import {\n defineComponent,\n h,\n onBeforeUnmount,\n ref,\n shallowRef,\n watch,\n type PropType,\n type Ref,\n} from 'vue';\nimport {\n SeasonPicker as CoreSeasonPicker,\n type SeasonAvailability,\n type SeasonCheckoutHandoff,\n type SeasonDescriptor,\n type SeasonPickerOptions,\n type SeasonRenewalIntent,\n type SeasonStatusEvent,\n} from '@seatlayer/js';\n\n/** Imperative controls exposed through a Vue template ref. */\nexport interface SeasonPickerExposed {\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/** Vue lifecycle adapter for the distinct fixed-inclusion Season buyer flow. */\nexport const SeasonPicker = defineComponent({\n name: 'SeatLayerSeasonPicker',\n props: {\n season: { type: String, required: true },\n apiBase: { type: String, default: undefined },\n buyerAccessTokenProvider: {\n type: Function as PropType<SeasonPickerOptions['buyerAccessTokenProvider']>,\n default: undefined,\n },\n buyerAccessToken: {\n type: [String, Object] as PropType<SeasonPickerOptions['buyerAccessToken']>,\n default: undefined,\n },\n initialOperationId: { type: String, default: undefined },\n recoveryTimeoutMs: { type: Number, default: undefined },\n fetch: { type: Function as PropType<typeof fetch>, default: undefined },\n },\n emits: {\n hold: (_handoff: SeasonCheckoutHandoff) => true,\n 'hold-change': (_handoff: SeasonCheckoutHandoff | null) => true,\n continue: (_handoff: SeasonCheckoutHandoff) => true,\n 'renewal-intent': (_intent: SeasonRenewalIntent) => true,\n 'access-expired': (_event: unknown) => true,\n 'access-unavailable': (_event: unknown) => true,\n 'status-change': (_event: SeasonStatusEvent) => true,\n error: (_error: unknown) => true,\n },\n setup(props, { emit, expose }) {\n const container: Ref<HTMLDivElement | null> = ref(null);\n const picker = shallowRef<CoreSeasonPicker | null>(null);\n\n const destroy = () => {\n picker.value?.destroy();\n picker.value = null;\n };\n const build = () => {\n const element = container.value;\n if (!element) return;\n destroy();\n const instance = new CoreSeasonPicker({\n container: element,\n season: props.season,\n apiBase: props.apiBase,\n buyerAccessTokenProvider: props.buyerAccessTokenProvider,\n buyerAccessToken: props.buyerAccessToken,\n initialOperationId: props.initialOperationId,\n recoveryTimeoutMs: props.recoveryTimeoutMs,\n fetch: props.fetch,\n onHold: (handoff) => emit('hold', handoff),\n onHoldChange: (handoff) => emit('hold-change', handoff),\n onContinue: (handoff) => emit('continue', handoff),\n onRenewalIntent: (intent) => emit('renewal-intent', intent),\n onAccessExpired: (event) => emit('access-expired', event),\n onAccessUnavailable: (event) => emit('access-unavailable', event),\n onStatusChange: (event) => emit('status-change', event),\n onError: (error) => emit('error', error),\n });\n picker.value = instance;\n void instance.render().catch(() => undefined);\n };\n\n watch(\n () => [\n container.value,\n props.season,\n props.apiBase,\n props.buyerAccessTokenProvider,\n props.buyerAccessToken,\n props.initialOperationId,\n props.recoveryTimeoutMs,\n props.fetch,\n ],\n build,\n { immediate: true, flush: 'post' },\n );\n onBeforeUnmount(destroy);\n\n const current = (): CoreSeasonPicker => {\n if (!picker.value) throw new Error('seatlayer: Vue SeasonPicker is not mounted');\n return picker.value;\n };\n const exposed: SeasonPickerExposed = {\n holdSameSeat: (labels, operationId) => current().holdSameSeat(labels, operationId),\n restoreOperation: (operationId) => current().restoreOperation(operationId),\n release: (releaseActionId) => current().release(releaseActionId),\n createRenewalIntent: (offerId) => current().createRenewalIntent(offerId),\n getDescriptor: () => picker.value?.getDescriptor() ?? null,\n getAvailability: () => picker.value?.getAvailability() ?? null,\n getHandoff: () => picker.value?.getHandoff() ?? null,\n };\n expose(exposed);\n return () => h('div', { ref: container });\n },\n});\n"],"mappings":"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","names":["CoreSeatingChart","import_vue","import_js","CoreSeasonPicker","import_js"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/SeatingChart.ts","../src/SeasonPicker.ts"],"sourcesContent":["/**\n * @seatlayer/vue — the Vue 3 wrapper for the SeatLayer embed SDK.\n *\n * Components are written as render functions rather than SFCs, so installing\n * this package needs no Vue compiler plugin.\n */\nexport { SeatingChart } from './SeatingChart';\nexport type { SeatingChartExposed } from './SeatingChart';\nexport { SeasonPicker } from './SeasonPicker';\nexport type { SeasonPickerExposed } from './SeasonPicker';\n\nexport type {\n SelectedSeat,\n HoldResult,\n BestAvailableResult,\n GAAreaAvailability,\n HoldLineItem,\n SeatHoverDetails,\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonPickerOptions,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from '@seatlayer/js';\n\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\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n\n// Host-side embed helper: grows the iframe on `seatlayer:height` and pins it on\n// `seatlayer:fullscreen`. Vue hosts depend on this package alone, so it has to be\n// reachable here rather than only from @seatlayer/js.\nexport { attachPickerFrame } from '@seatlayer/js';\nexport type { AttachPickerFrameOptions } from '@seatlayer/js';\n","import {\n defineComponent,\n h,\n onBeforeUnmount,\n ref,\n shallowRef,\n watch,\n type PropType,\n type Ref,\n} from 'vue';\nimport {\n SeatingChart as CoreSeatingChart,\n SEATING_CHART_IDENTITY_PROPS,\n bindSeatingChartHandle,\n buildSeatingChartOptions,\n type RendererViewMode,\n type SeatingChartHandle,\n type SeatingChartOptions,\n type SelectedSeat,\n type HoldResult,\n type BestAvailableResult,\n type GAAreaAvailability,\n type SeatHoverDetails,\n type PickerSelectionValidity,\n type PickerSelectionValidator,\n type BuyerAccessToken,\n type BuyerAccessTokenProvider,\n type BuyerAccessExpiredEvent,\n type BuyerAccessUnavailableEvent,\n type SelectedObjectUnavailableEvent,\n} from '@seatlayer/js';\n\n/**\n * What `ref=\"chart\"` gives you — call these to drive the picker from your app.\n *\n * Vue exposes these through `defineExpose`, so a template ref is typed as this\n * rather than as the raw component instance. It is the shared\n * `SeatingChartHandle` from `@seatlayer/js`: the same 17 methods React's `ref`\n * and Angular's component expose, from one declaration, so the three wrappers\n * cannot drift apart again.\n */\nexport type SeatingChartExposed = SeatingChartHandle;\n\n/**\n * Vue 3 wrapper around the framework-agnostic `@seatlayer/js` SDK.\n *\n * The canvas is created once and torn down on unmount. Only the props that\n * change the chart's identity (`SEATING_CHART_IDENTITY_PROPS`: `event`,\n * `apiBase`, `maxSelection`, `numberOfPlacesToSelect`, `publicKey`, `locale`, `currency`,\n * `colorblindSafe`, `initialView`, `errorDisplay`) trigger a rebuild;\n * everything else is read live, so a parent re-render never destroys the canvas\n * mid-selection.\n *\n * Written as a render function rather than an SFC so the package builds with\n * plain TypeScript — a consumer needs no Vue compiler plugin to install it.\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { ref } from 'vue';\n * import { SeatingChart, type SeatingChartExposed } from '@seatlayer/vue';\n *\n * const chart = ref<SeatingChartExposed | null>(null);\n * const checkout = async () => {\n * const held = await chart.value?.hold();\n * if (held) await pay(held.holdId);\n * };\n * </script>\n *\n * <template>\n * <SeatingChart ref=\"chart\" event=\"summer-gala\" @selection-change=\"onChange\" />\n * </template>\n * ```\n */\nexport const SeatingChart = defineComponent({\n name: 'SeatLayerSeatingChart',\n\n props: {\n /** Event key to render. Changing it rebuilds the chart. */\n event: { type: String, required: true },\n /** API base URL. Defaults to the public API. */\n apiBase: { type: String, default: undefined },\n /** Cap on how many seats a buyer may select. */\n maxSelection: { type: Number, default: undefined },\n /** Object ids or public labels selected after availability loads. */\n selectedObjects: { type: Array as PropType<string[]>, default: undefined },\n /** Object ids or public labels the buyer may select. */\n selectableObjects: { type: Array as PropType<string[] | null>, default: undefined },\n /** Exact ticket count required for a valid selection. */\n numberOfPlacesToSelect: { type: Number, default: undefined },\n /** Local buyer selection guards. Changing them rebuilds the chart. */\n selectionValidators: { type: Array as PropType<PickerSelectionValidator[]>, default: undefined },\n /** Publishable key, when your integration uses one. */\n publicKey: { type: String, default: undefined },\n /** BCP-47 locale for built-in copy. */\n locale: { type: String, default: undefined },\n /** ISO currency for price formatting. */\n currency: { type: String, default: undefined },\n /** Render with colorblind-safe seat glyphs. */\n colorblindSafe: { type: Boolean, default: undefined },\n /**\n * Initial canvas projection. Read once when the chart is built, so\n * changing it rebuilds.\n * @deprecated `'isometric'` and `'perspective'` are retired in favour of\n * the real 3D venue view; use `'flat'`.\n */\n initialView: {\n type: String as PropType<RendererViewMode>,\n default: undefined,\n },\n /**\n * What the BUYER sees when the chart cannot load: `'message'` (default) is\n * a styleable notice with a Try again button, `'none'` is silent for hosts\n * that render their own failure UI from the `error` event.\n */\n errorDisplay: {\n type: String as PropType<'message' | 'none'>,\n default: undefined,\n },\n /** Copy overrides, read once per mount. */\n messages: {\n type: Object as PropType<SeatingChartOptions['messages']>,\n default: undefined,\n },\n /**\n * Show the built-in seat tooltip. Set false to draw your own popover from\n * the `seat-hover` event.\n */\n seatTooltip: { type: Boolean, default: undefined },\n /**\n * Sales Channels: mint a buyer access session on demand. Called with a\n * `reason`; returns `{ token, expiresAt }` from YOUR backend. The token is\n * held in memory only — never storage, never a URL, never a log.\n */\n buyerAccessTokenProvider: {\n type: Function as PropType<BuyerAccessTokenProvider>,\n default: undefined,\n },\n /** One-shot session for hosts that own the lifecycle. Cannot be renewed. */\n buyerAccessToken: {\n type: [String, Object] as PropType<string | BuyerAccessToken>,\n default: undefined,\n },\n },\n\n emits: {\n /** The buyer's selection changed. */\n 'selection-change': (_seats: SelectedSeat[]) => true,\n /** Exact-count state changed. */\n 'selection-validity-change': (_state: PickerSelectionValidity) => true,\n /** The exact count was reached. */\n 'selection-valid': (_seats: SelectedSeat[]) => true,\n /** The selection is not at the exact count. */\n 'selection-invalid': (_state: PickerSelectionValidity) => true,\n /** The active selection cap was reached. */\n 'selection-limit': (_max: number) => true,\n /** A hold succeeded. */\n hold: (_result: HoldResult) => true,\n /** A previous hold was restored on mount. */\n 'hold-restored': (_result: HoldResult) => true,\n /** The active hold lapsed. */\n 'hold-expired': () => true,\n /** A GA area was clicked. */\n 'ga-click': (_area: GAAreaAvailability) => true,\n /** Something failed — a network error, a rejected hold. */\n error: (_error: unknown) => true,\n /** A floor deck was tapped in the 3D view. */\n 'deck-tap': (_floorId: string) => true,\n /** A transient hint worth showing the buyer, or `null` to clear it. */\n hint: (_message: string | null) => true,\n /** The pointer moved onto a seat, or off one (`null`). */\n 'seat-hover': (_details: SeatHoverDetails | null) => true,\n /** The buyer access session lapsed; `refreshed` says whether it recovered. */\n 'access-expired': (_event: BuyerAccessExpiredEvent) => true,\n /** Private inventory is unavailable and refreshing will not fix it. */\n 'access-unavailable': (_event: BuyerAccessUnavailableEvent) => true,\n /** Selected-but-unheld units stopped being selectable. */\n 'selected-object-unavailable': (_event: SelectedObjectUnavailableEvent) => true,\n },\n\n setup(props, { emit, expose }) {\n const container: Ref<HTMLDivElement | null> = ref(null);\n // shallowRef: the chart owns a canvas and a large scene graph, and making it\n // deeply reactive would have Vue walk all of it on every touch.\n const chart = shallowRef<CoreSeatingChart | null>(null);\n\n const destroy = () => {\n chart.value?.destroy();\n chart.value = null;\n };\n\n const build = () => {\n const element = container.value;\n if (!element) return;\n\n destroy();\n\n // Handlers are bound here rather than inline in the options literal.\n // Inline, TypeScript has to resolve `emit`'s overloads while it is still\n // contextually typing the literal against SeatingChartOptions, and it\n // gives up — collapsing to the last emit signature. Naming them first\n // separates the two inference problems, and reads better besides.\n const onSelectionChange = (seats: SelectedSeat[]) => emit('selection-change', seats);\n const onSelectionValidityChange = (state: PickerSelectionValidity) => emit('selection-validity-change', state);\n const onSelectionValid = (seats: SelectedSeat[]) => emit('selection-valid', seats);\n const onSelectionInvalid = (state: PickerSelectionValidity) => emit('selection-invalid', state);\n const onSelectionLimit = (max: number) => emit('selection-limit', max);\n const onHold = (result: HoldResult) => emit('hold', result);\n const onHoldRestored = (result: HoldResult) => emit('hold-restored', result);\n const onHoldExpired = () => emit('hold-expired');\n const onGAClick = (area: GAAreaAvailability) => emit('ga-click', area);\n const onError = (error: unknown) => emit('error', error);\n const onDeckTap = (floorId: string) => emit('deck-tap', floorId);\n const onHint = (message: string | null) => emit('hint', message);\n const onSeatHover = (details: SeatHoverDetails | null) => emit('seat-hover', details);\n const onAccessExpired = (state: BuyerAccessExpiredEvent) => emit('access-expired', state);\n const onAccessUnavailable = (state: BuyerAccessUnavailableEvent) =>\n emit('access-unavailable', state);\n const onSelectedObjectUnavailable = (state: SelectedObjectUnavailableEvent) =>\n emit('selected-object-unavailable', state);\n\n const instance = new CoreSeatingChart(buildSeatingChartOptions(\n element,\n {\n event: props.event,\n apiBase: props.apiBase,\n maxSelection: props.maxSelection,\n selectedObjects: props.selectedObjects,\n selectableObjects: props.selectableObjects,\n numberOfPlacesToSelect: props.numberOfPlacesToSelect,\n selectionValidators: props.selectionValidators,\n publicKey: props.publicKey,\n locale: props.locale,\n currency: props.currency,\n colorblindSafe: props.colorblindSafe,\n initialView: props.initialView,\n errorDisplay: props.errorDisplay,\n messages: props.messages,\n seatTooltip: props.seatTooltip,\n buyerAccessTokenProvider: props.buyerAccessTokenProvider,\n buyerAccessToken: props.buyerAccessToken,\n },\n {\n onAccessExpired,\n onAccessUnavailable,\n onSelectedObjectUnavailable,\n onSelectionChange,\n onSelectionValidityChange,\n onSelectionValid,\n onSelectionInvalid,\n onSelectionLimit,\n onHold,\n onHoldRestored,\n onHoldExpired,\n onGAClick,\n onError,\n onDeckTap,\n onHint,\n onSeatHover,\n },\n ));\n\n chart.value = instance;\n void instance.render();\n };\n\n // `flush: 'post'` so the container element exists on the first run — a\n // pre-flush watcher would fire before the DOM node is attached.\n watch(\n () => [\n container.value,\n // The shared identity list, not a hand-copied one — this is exactly the\n // place Vue fell two props behind React.\n ...SEATING_CHART_IDENTITY_PROPS.map((prop) => props[prop]),\n ],\n build,\n { immediate: true, flush: 'post' },\n );\n\n onBeforeUnmount(destroy);\n\n // Built once and read live: the handle must survive every rebuild, so it\n // asks for the current instance on each call rather than capturing one.\n const exposed: SeatingChartExposed = bindSeatingChartHandle(() => chart.value);\n expose(exposed);\n\n return () => h('div', { ref: container });\n },\n});\n","import {\n defineComponent,\n h,\n onBeforeUnmount,\n ref,\n shallowRef,\n watch,\n type PropType,\n type Ref,\n} from 'vue';\nimport {\n SeasonPicker as CoreSeasonPicker,\n type SeasonAvailability,\n type SeasonCheckoutHandoff,\n type SeasonDescriptor,\n type SeasonPickerOptions,\n type SeasonRenewalIntent,\n type SeasonStatusEvent,\n} from '@seatlayer/js';\n\n/** Imperative controls exposed through a Vue template ref. */\nexport interface SeasonPickerExposed {\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/** Vue lifecycle adapter for the distinct fixed-inclusion Season buyer flow. */\nexport const SeasonPicker = defineComponent({\n name: 'SeatLayerSeasonPicker',\n props: {\n season: { type: String, required: true },\n apiBase: { type: String, default: undefined },\n publicKey: { type: String, default: undefined },\n checkout: {\n type: String as PropType<SeasonPickerOptions['checkout']>,\n default: undefined,\n },\n returnUrl: { type: String, default: undefined },\n buyerAccessTokenProvider: {\n type: Function as PropType<SeasonPickerOptions['buyerAccessTokenProvider']>,\n default: undefined,\n },\n buyerAccessToken: {\n type: [String, Object] as PropType<SeasonPickerOptions['buyerAccessToken']>,\n default: undefined,\n },\n initialOperationId: { type: String, default: undefined },\n recoveryTimeoutMs: { type: Number, default: undefined },\n fetch: { type: Function as PropType<typeof fetch>, default: undefined },\n },\n emits: {\n hold: (_handoff: SeasonCheckoutHandoff) => true,\n 'hold-change': (_handoff: SeasonCheckoutHandoff | null) => true,\n continue: (_handoff: SeasonCheckoutHandoff) => true,\n 'renewal-intent': (_intent: SeasonRenewalIntent) => true,\n 'access-expired': (_event: unknown) => true,\n 'access-unavailable': (_event: unknown) => true,\n 'order-confirmed': (_order: unknown) => true,\n 'status-change': (_event: SeasonStatusEvent) => true,\n error: (_error: unknown) => true,\n },\n setup(props, { emit, expose }) {\n const container: Ref<HTMLDivElement | null> = ref(null);\n const picker = shallowRef<CoreSeasonPicker | null>(null);\n\n const destroy = () => {\n picker.value?.destroy();\n picker.value = null;\n };\n const build = () => {\n const element = container.value;\n if (!element) return;\n destroy();\n const instance = new CoreSeasonPicker({\n container: element,\n season: props.season,\n apiBase: props.apiBase,\n publicKey: props.publicKey,\n checkout: props.checkout,\n returnUrl: props.returnUrl,\n buyerAccessTokenProvider: props.buyerAccessTokenProvider,\n buyerAccessToken: props.buyerAccessToken,\n initialOperationId: props.initialOperationId,\n recoveryTimeoutMs: props.recoveryTimeoutMs,\n fetch: props.fetch,\n onHold: (handoff) => emit('hold', handoff),\n onHoldChange: (handoff) => emit('hold-change', handoff),\n onContinue: (handoff) => emit('continue', handoff),\n onRenewalIntent: (intent) => emit('renewal-intent', intent),\n onAccessExpired: (event) => emit('access-expired', event),\n onAccessUnavailable: (event) => emit('access-unavailable', event),\n onOrderConfirmed: (order) => emit('order-confirmed', order),\n onStatusChange: (event) => emit('status-change', event),\n onError: (error) => emit('error', error),\n });\n picker.value = instance;\n void instance.render().catch(() => undefined);\n };\n\n watch(\n () => [\n container.value,\n props.season,\n props.apiBase,\n props.publicKey,\n props.checkout,\n props.returnUrl,\n props.buyerAccessTokenProvider,\n props.buyerAccessToken,\n props.initialOperationId,\n props.recoveryTimeoutMs,\n props.fetch,\n ],\n build,\n { immediate: true, flush: 'post' },\n );\n onBeforeUnmount(destroy);\n\n const current = (): CoreSeasonPicker => {\n if (!picker.value) throw new Error('seatlayer: Vue SeasonPicker is not mounted');\n return picker.value;\n };\n const exposed: SeasonPickerExposed = {\n holdSameSeat: (labels, operationId) => current().holdSameSeat(labels, operationId),\n restoreOperation: (operationId) => current().restoreOperation(operationId),\n release: (releaseActionId) => current().release(releaseActionId),\n createRenewalIntent: (offerId) => current().createRenewalIntent(offerId),\n getDescriptor: () => picker.value?.getDescriptor() ?? null,\n getAvailability: () => picker.value?.getAvailability() ?? null,\n getHandoff: () => picker.value?.getHandoff() ?? null,\n };\n expose(exposed);\n return () => h('div', { ref: container });\n },\n});\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,iBASO;AACP,gBAoBO;AA4CA,IAAM,mBAAe,4BAAgB;AAAA,EAC1C,MAAM;AAAA,EAEN,OAAO;AAAA;AAAA,IAEL,OAAO,EAAE,MAAM,QAAQ,UAAU,KAAK;AAAA;AAAA,IAEtC,SAAS,EAAE,MAAM,QAAQ,SAAS,OAAU;AAAA;AAAA,IAE5C,cAAc,EAAE,MAAM,QAAQ,SAAS,OAAU;AAAA;AAAA,IAEjD,iBAAiB,EAAE,MAAM,OAA6B,SAAS,OAAU;AAAA;AAAA,IAEzE,mBAAmB,EAAE,MAAM,OAAoC,SAAS,OAAU;AAAA;AAAA,IAElF,wBAAwB,EAAE,MAAM,QAAQ,SAAS,OAAU;AAAA;AAAA,IAE3D,qBAAqB,EAAE,MAAM,OAA+C,SAAS,OAAU;AAAA;AAAA,IAE/F,WAAW,EAAE,MAAM,QAAQ,SAAS,OAAU;AAAA;AAAA,IAE9C,QAAQ,EAAE,MAAM,QAAQ,SAAS,OAAU;AAAA;AAAA,IAE3C,UAAU,EAAE,MAAM,QAAQ,SAAS,OAAU;AAAA;AAAA,IAE7C,gBAAgB,EAAE,MAAM,SAAS,SAAS,OAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOpD,aAAa;AAAA,MACX,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,cAAc;AAAA,MACZ,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,aAAa,EAAE,MAAM,SAAS,SAAS,OAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMjD,0BAA0B;AAAA,MACxB,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA;AAAA,IAEA,kBAAkB;AAAA,MAChB,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,OAAO;AAAA;AAAA,IAEL,oBAAoB,CAAC,WAA2B;AAAA;AAAA,IAEhD,6BAA6B,CAAC,WAAoC;AAAA;AAAA,IAElE,mBAAmB,CAAC,WAA2B;AAAA;AAAA,IAE/C,qBAAqB,CAAC,WAAoC;AAAA;AAAA,IAE1D,mBAAmB,CAAC,SAAiB;AAAA;AAAA,IAErC,MAAM,CAAC,YAAwB;AAAA;AAAA,IAE/B,iBAAiB,CAAC,YAAwB;AAAA;AAAA,IAE1C,gBAAgB,MAAM;AAAA;AAAA,IAEtB,YAAY,CAAC,UAA8B;AAAA;AAAA,IAE3C,OAAO,CAAC,WAAoB;AAAA;AAAA,IAE5B,YAAY,CAAC,aAAqB;AAAA;AAAA,IAElC,MAAM,CAAC,aAA4B;AAAA;AAAA,IAEnC,cAAc,CAAC,aAAsC;AAAA;AAAA,IAErD,kBAAkB,CAAC,WAAoC;AAAA;AAAA,IAEvD,sBAAsB,CAAC,WAAwC;AAAA;AAAA,IAE/D,+BAA+B,CAAC,WAA2C;AAAA,EAC7E;AAAA,EAEA,MAAM,OAAO,EAAE,MAAM,OAAO,GAAG;AAC7B,UAAM,gBAAwC,gBAAI,IAAI;AAGtD,UAAM,YAAQ,uBAAoC,IAAI;AAEtD,UAAM,UAAU,MAAM;AACpB,YAAM,OAAO,QAAQ;AACrB,YAAM,QAAQ;AAAA,IAChB;AAEA,UAAM,QAAQ,MAAM;AAClB,YAAM,UAAU,UAAU;AAC1B,UAAI,CAAC,QAAS;AAEd,cAAQ;AAOR,YAAM,oBAAoB,CAAC,UAA0B,KAAK,oBAAoB,KAAK;AACnF,YAAM,4BAA4B,CAAC,UAAmC,KAAK,6BAA6B,KAAK;AAC7G,YAAM,mBAAmB,CAAC,UAA0B,KAAK,mBAAmB,KAAK;AACjF,YAAM,qBAAqB,CAAC,UAAmC,KAAK,qBAAqB,KAAK;AAC9F,YAAM,mBAAmB,CAAC,QAAgB,KAAK,mBAAmB,GAAG;AACrE,YAAM,SAAS,CAAC,WAAuB,KAAK,QAAQ,MAAM;AAC1D,YAAM,iBAAiB,CAAC,WAAuB,KAAK,iBAAiB,MAAM;AAC3E,YAAM,gBAAgB,MAAM,KAAK,cAAc;AAC/C,YAAM,YAAY,CAAC,SAA6B,KAAK,YAAY,IAAI;AACrE,YAAM,UAAU,CAAC,UAAmB,KAAK,SAAS,KAAK;AACvD,YAAM,YAAY,CAAC,YAAoB,KAAK,YAAY,OAAO;AAC/D,YAAM,SAAS,CAAC,YAA2B,KAAK,QAAQ,OAAO;AAC/D,YAAM,cAAc,CAAC,YAAqC,KAAK,cAAc,OAAO;AACpF,YAAM,kBAAkB,CAAC,UAAmC,KAAK,kBAAkB,KAAK;AACxF,YAAM,sBAAsB,CAAC,UAC3B,KAAK,sBAAsB,KAAK;AAClC,YAAM,8BAA8B,CAAC,UACnC,KAAK,+BAA+B,KAAK;AAE3C,YAAM,WAAW,IAAI,UAAAA,iBAAiB;AAAA,QACpC;AAAA,QACA;AAAA,UACE,OAAO,MAAM;AAAA,UACb,SAAS,MAAM;AAAA,UACf,cAAc,MAAM;AAAA,UACpB,iBAAiB,MAAM;AAAA,UACvB,mBAAmB,MAAM;AAAA,UACzB,wBAAwB,MAAM;AAAA,UAC9B,qBAAqB,MAAM;AAAA,UAC3B,WAAW,MAAM;AAAA,UACjB,QAAQ,MAAM;AAAA,UACd,UAAU,MAAM;AAAA,UAChB,gBAAgB,MAAM;AAAA,UACtB,aAAa,MAAM;AAAA,UACnB,cAAc,MAAM;AAAA,UACpB,UAAU,MAAM;AAAA,UAChB,aAAa,MAAM;AAAA,UACnB,0BAA0B,MAAM;AAAA,UAChC,kBAAkB,MAAM;AAAA,QAC1B;AAAA,QACA;AAAA,UACE;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,QACF;AAAA,MACF,CAAC;AAED,YAAM,QAAQ;AACd,WAAK,SAAS,OAAO;AAAA,IACvB;AAIA;AAAA,MACE,MAAM;AAAA,QACJ,UAAU;AAAA;AAAA;AAAA,QAGV,GAAG,uCAA6B,IAAI,CAAC,SAAS,MAAM,IAAI,CAAC;AAAA,MAC3D;AAAA,MACA;AAAA,MACA,EAAE,WAAW,MAAM,OAAO,OAAO;AAAA,IACnC;AAEA,oCAAgB,OAAO;AAIvB,UAAM,cAA+B,kCAAuB,MAAM,MAAM,KAAK;AAC7E,WAAO,OAAO;AAEd,WAAO,UAAM,cAAE,OAAO,EAAE,KAAK,UAAU,CAAC;AAAA,EAC1C;AACF,CAAC;;;AChSD,IAAAC,cASO;AACP,IAAAC,aAQO;AAcA,IAAM,mBAAe,6BAAgB;AAAA,EAC1C,MAAM;AAAA,EACN,OAAO;AAAA,IACL,QAAQ,EAAE,MAAM,QAAQ,UAAU,KAAK;AAAA,IACvC,SAAS,EAAE,MAAM,QAAQ,SAAS,OAAU;AAAA,IAC5C,WAAW,EAAE,MAAM,QAAQ,SAAS,OAAU;AAAA,IAC9C,UAAU;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,WAAW,EAAE,MAAM,QAAQ,SAAS,OAAU;AAAA,IAC9C,0BAA0B;AAAA,MACxB,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,kBAAkB;AAAA,MAChB,MAAM,CAAC,QAAQ,MAAM;AAAA,MACrB,SAAS;AAAA,IACX;AAAA,IACA,oBAAoB,EAAE,MAAM,QAAQ,SAAS,OAAU;AAAA,IACvD,mBAAmB,EAAE,MAAM,QAAQ,SAAS,OAAU;AAAA,IACtD,OAAO,EAAE,MAAM,UAAoC,SAAS,OAAU;AAAA,EACxE;AAAA,EACA,OAAO;AAAA,IACL,MAAM,CAAC,aAAoC;AAAA,IAC3C,eAAe,CAAC,aAA2C;AAAA,IAC3D,UAAU,CAAC,aAAoC;AAAA,IAC/C,kBAAkB,CAAC,YAAiC;AAAA,IACpD,kBAAkB,CAAC,WAAoB;AAAA,IACvC,sBAAsB,CAAC,WAAoB;AAAA,IAC3C,mBAAmB,CAAC,WAAoB;AAAA,IACxC,iBAAiB,CAAC,WAA8B;AAAA,IAChD,OAAO,CAAC,WAAoB;AAAA,EAC9B;AAAA,EACA,MAAM,OAAO,EAAE,MAAM,OAAO,GAAG;AAC7B,UAAM,gBAAwC,iBAAI,IAAI;AACtD,UAAM,aAAS,wBAAoC,IAAI;AAEvD,UAAM,UAAU,MAAM;AACpB,aAAO,OAAO,QAAQ;AACtB,aAAO,QAAQ;AAAA,IACjB;AACA,UAAM,QAAQ,MAAM;AAClB,YAAM,UAAU,UAAU;AAC1B,UAAI,CAAC,QAAS;AACd,cAAQ;AACR,YAAM,WAAW,IAAI,WAAAC,aAAiB;AAAA,QACpC,WAAW;AAAA,QACX,QAAQ,MAAM;AAAA,QACd,SAAS,MAAM;AAAA,QACf,WAAW,MAAM;AAAA,QACjB,UAAU,MAAM;AAAA,QAChB,WAAW,MAAM;AAAA,QACjB,0BAA0B,MAAM;AAAA,QAChC,kBAAkB,MAAM;AAAA,QACxB,oBAAoB,MAAM;AAAA,QAC1B,mBAAmB,MAAM;AAAA,QACzB,OAAO,MAAM;AAAA,QACb,QAAQ,CAAC,YAAY,KAAK,QAAQ,OAAO;AAAA,QACzC,cAAc,CAAC,YAAY,KAAK,eAAe,OAAO;AAAA,QACtD,YAAY,CAAC,YAAY,KAAK,YAAY,OAAO;AAAA,QACjD,iBAAiB,CAAC,WAAW,KAAK,kBAAkB,MAAM;AAAA,QAC1D,iBAAiB,CAAC,UAAU,KAAK,kBAAkB,KAAK;AAAA,QACxD,qBAAqB,CAAC,UAAU,KAAK,sBAAsB,KAAK;AAAA,QAChE,kBAAkB,CAAC,UAAU,KAAK,mBAAmB,KAAK;AAAA,QAC1D,gBAAgB,CAAC,UAAU,KAAK,iBAAiB,KAAK;AAAA,QACtD,SAAS,CAAC,UAAU,KAAK,SAAS,KAAK;AAAA,MACzC,CAAC;AACD,aAAO,QAAQ;AACf,WAAK,SAAS,OAAO,EAAE,MAAM,MAAM,MAAS;AAAA,IAC9C;AAEA;AAAA,MACE,MAAM;AAAA,QACJ,UAAU;AAAA,QACV,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,MACA,EAAE,WAAW,MAAM,OAAO,OAAO;AAAA,IACnC;AACA,qCAAgB,OAAO;AAEvB,UAAM,UAAU,MAAwB;AACtC,UAAI,CAAC,OAAO,MAAO,OAAM,IAAI,MAAM,4CAA4C;AAC/E,aAAO,OAAO;AAAA,IAChB;AACA,UAAM,UAA+B;AAAA,MACnC,cAAc,CAAC,QAAQ,gBAAgB,QAAQ,EAAE,aAAa,QAAQ,WAAW;AAAA,MACjF,kBAAkB,CAAC,gBAAgB,QAAQ,EAAE,iBAAiB,WAAW;AAAA,MACzE,SAAS,CAAC,oBAAoB,QAAQ,EAAE,QAAQ,eAAe;AAAA,MAC/D,qBAAqB,CAAC,YAAY,QAAQ,EAAE,oBAAoB,OAAO;AAAA,MACvE,eAAe,MAAM,OAAO,OAAO,cAAc,KAAK;AAAA,MACtD,iBAAiB,MAAM,OAAO,OAAO,gBAAgB,KAAK;AAAA,MAC1D,YAAY,MAAM,OAAO,OAAO,WAAW,KAAK;AAAA,IAClD;AACA,WAAO,OAAO;AACd,WAAO,UAAM,eAAE,OAAO,EAAE,KAAK,UAAU,CAAC;AAAA,EAC1C;AACF,CAAC;;;AFnGD,IAAAC,aAA+C;AAK/C,IAAAA,aAAkC;","names":["CoreSeatingChart","import_vue","import_js","CoreSeasonPicker","import_js"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -341,6 +341,18 @@ declare const SeasonPicker: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
341
341
|
type: StringConstructor;
|
|
342
342
|
default: undefined;
|
|
343
343
|
};
|
|
344
|
+
publicKey: {
|
|
345
|
+
type: StringConstructor;
|
|
346
|
+
default: undefined;
|
|
347
|
+
};
|
|
348
|
+
checkout: {
|
|
349
|
+
type: PropType<SeasonPickerOptions["checkout"]>;
|
|
350
|
+
default: undefined;
|
|
351
|
+
};
|
|
352
|
+
returnUrl: {
|
|
353
|
+
type: StringConstructor;
|
|
354
|
+
default: undefined;
|
|
355
|
+
};
|
|
344
356
|
buyerAccessTokenProvider: {
|
|
345
357
|
type: PropType<SeasonPickerOptions["buyerAccessTokenProvider"]>;
|
|
346
358
|
default: undefined;
|
|
@@ -370,6 +382,7 @@ declare const SeasonPicker: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
370
382
|
'renewal-intent': (_intent: SeasonRenewalIntent) => true;
|
|
371
383
|
'access-expired': (_event: unknown) => true;
|
|
372
384
|
'access-unavailable': (_event: unknown) => true;
|
|
385
|
+
'order-confirmed': (_order: unknown) => true;
|
|
373
386
|
'status-change': (_event: SeasonStatusEvent) => true;
|
|
374
387
|
error: (_error: unknown) => true;
|
|
375
388
|
}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
@@ -381,6 +394,18 @@ declare const SeasonPicker: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
381
394
|
type: StringConstructor;
|
|
382
395
|
default: undefined;
|
|
383
396
|
};
|
|
397
|
+
publicKey: {
|
|
398
|
+
type: StringConstructor;
|
|
399
|
+
default: undefined;
|
|
400
|
+
};
|
|
401
|
+
checkout: {
|
|
402
|
+
type: PropType<SeasonPickerOptions["checkout"]>;
|
|
403
|
+
default: undefined;
|
|
404
|
+
};
|
|
405
|
+
returnUrl: {
|
|
406
|
+
type: StringConstructor;
|
|
407
|
+
default: undefined;
|
|
408
|
+
};
|
|
384
409
|
buyerAccessTokenProvider: {
|
|
385
410
|
type: PropType<SeasonPickerOptions["buyerAccessTokenProvider"]>;
|
|
386
411
|
default: undefined;
|
|
@@ -409,11 +434,15 @@ declare const SeasonPicker: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
409
434
|
"onHold-change"?: ((_handoff: SeasonCheckoutHandoff | null) => any) | undefined;
|
|
410
435
|
onContinue?: ((_handoff: SeasonCheckoutHandoff) => any) | undefined;
|
|
411
436
|
"onRenewal-intent"?: ((_intent: SeasonRenewalIntent) => any) | undefined;
|
|
437
|
+
"onOrder-confirmed"?: ((_order: unknown) => any) | undefined;
|
|
412
438
|
"onStatus-change"?: ((_event: SeasonStatusEvent) => any) | undefined;
|
|
413
439
|
}>, {
|
|
414
440
|
apiBase: string;
|
|
441
|
+
publicKey: string;
|
|
415
442
|
buyerAccessTokenProvider: _seatlayer_js.BuyerAccessTokenProvider | undefined;
|
|
416
443
|
buyerAccessToken: string | _seatlayer_js.BuyerAccessToken | undefined;
|
|
444
|
+
checkout: "handoff" | "hosted" | undefined;
|
|
445
|
+
returnUrl: string;
|
|
417
446
|
initialOperationId: string;
|
|
418
447
|
recoveryTimeoutMs: number;
|
|
419
448
|
fetch: typeof fetch;
|
package/dist/index.d.ts
CHANGED
|
@@ -341,6 +341,18 @@ declare const SeasonPicker: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
341
341
|
type: StringConstructor;
|
|
342
342
|
default: undefined;
|
|
343
343
|
};
|
|
344
|
+
publicKey: {
|
|
345
|
+
type: StringConstructor;
|
|
346
|
+
default: undefined;
|
|
347
|
+
};
|
|
348
|
+
checkout: {
|
|
349
|
+
type: PropType<SeasonPickerOptions["checkout"]>;
|
|
350
|
+
default: undefined;
|
|
351
|
+
};
|
|
352
|
+
returnUrl: {
|
|
353
|
+
type: StringConstructor;
|
|
354
|
+
default: undefined;
|
|
355
|
+
};
|
|
344
356
|
buyerAccessTokenProvider: {
|
|
345
357
|
type: PropType<SeasonPickerOptions["buyerAccessTokenProvider"]>;
|
|
346
358
|
default: undefined;
|
|
@@ -370,6 +382,7 @@ declare const SeasonPicker: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
370
382
|
'renewal-intent': (_intent: SeasonRenewalIntent) => true;
|
|
371
383
|
'access-expired': (_event: unknown) => true;
|
|
372
384
|
'access-unavailable': (_event: unknown) => true;
|
|
385
|
+
'order-confirmed': (_order: unknown) => true;
|
|
373
386
|
'status-change': (_event: SeasonStatusEvent) => true;
|
|
374
387
|
error: (_error: unknown) => true;
|
|
375
388
|
}, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
|
|
@@ -381,6 +394,18 @@ declare const SeasonPicker: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
381
394
|
type: StringConstructor;
|
|
382
395
|
default: undefined;
|
|
383
396
|
};
|
|
397
|
+
publicKey: {
|
|
398
|
+
type: StringConstructor;
|
|
399
|
+
default: undefined;
|
|
400
|
+
};
|
|
401
|
+
checkout: {
|
|
402
|
+
type: PropType<SeasonPickerOptions["checkout"]>;
|
|
403
|
+
default: undefined;
|
|
404
|
+
};
|
|
405
|
+
returnUrl: {
|
|
406
|
+
type: StringConstructor;
|
|
407
|
+
default: undefined;
|
|
408
|
+
};
|
|
384
409
|
buyerAccessTokenProvider: {
|
|
385
410
|
type: PropType<SeasonPickerOptions["buyerAccessTokenProvider"]>;
|
|
386
411
|
default: undefined;
|
|
@@ -409,11 +434,15 @@ declare const SeasonPicker: vue.DefineComponent<vue.ExtractPropTypes<{
|
|
|
409
434
|
"onHold-change"?: ((_handoff: SeasonCheckoutHandoff | null) => any) | undefined;
|
|
410
435
|
onContinue?: ((_handoff: SeasonCheckoutHandoff) => any) | undefined;
|
|
411
436
|
"onRenewal-intent"?: ((_intent: SeasonRenewalIntent) => any) | undefined;
|
|
437
|
+
"onOrder-confirmed"?: ((_order: unknown) => any) | undefined;
|
|
412
438
|
"onStatus-change"?: ((_event: SeasonStatusEvent) => any) | undefined;
|
|
413
439
|
}>, {
|
|
414
440
|
apiBase: string;
|
|
441
|
+
publicKey: string;
|
|
415
442
|
buyerAccessTokenProvider: _seatlayer_js.BuyerAccessTokenProvider | undefined;
|
|
416
443
|
buyerAccessToken: string | _seatlayer_js.BuyerAccessToken | undefined;
|
|
444
|
+
checkout: "handoff" | "hosted" | undefined;
|
|
445
|
+
returnUrl: string;
|
|
417
446
|
initialOperationId: string;
|
|
418
447
|
recoveryTimeoutMs: number;
|
|
419
448
|
fetch: typeof fetch;
|
package/dist/index.js
CHANGED
|
@@ -220,6 +220,12 @@ var SeasonPicker = defineComponent2({
|
|
|
220
220
|
props: {
|
|
221
221
|
season: { type: String, required: true },
|
|
222
222
|
apiBase: { type: String, default: void 0 },
|
|
223
|
+
publicKey: { type: String, default: void 0 },
|
|
224
|
+
checkout: {
|
|
225
|
+
type: String,
|
|
226
|
+
default: void 0
|
|
227
|
+
},
|
|
228
|
+
returnUrl: { type: String, default: void 0 },
|
|
223
229
|
buyerAccessTokenProvider: {
|
|
224
230
|
type: Function,
|
|
225
231
|
default: void 0
|
|
@@ -239,6 +245,7 @@ var SeasonPicker = defineComponent2({
|
|
|
239
245
|
"renewal-intent": (_intent) => true,
|
|
240
246
|
"access-expired": (_event) => true,
|
|
241
247
|
"access-unavailable": (_event) => true,
|
|
248
|
+
"order-confirmed": (_order) => true,
|
|
242
249
|
"status-change": (_event) => true,
|
|
243
250
|
error: (_error) => true
|
|
244
251
|
},
|
|
@@ -257,6 +264,9 @@ var SeasonPicker = defineComponent2({
|
|
|
257
264
|
container: element,
|
|
258
265
|
season: props.season,
|
|
259
266
|
apiBase: props.apiBase,
|
|
267
|
+
publicKey: props.publicKey,
|
|
268
|
+
checkout: props.checkout,
|
|
269
|
+
returnUrl: props.returnUrl,
|
|
260
270
|
buyerAccessTokenProvider: props.buyerAccessTokenProvider,
|
|
261
271
|
buyerAccessToken: props.buyerAccessToken,
|
|
262
272
|
initialOperationId: props.initialOperationId,
|
|
@@ -268,6 +278,7 @@ var SeasonPicker = defineComponent2({
|
|
|
268
278
|
onRenewalIntent: (intent) => emit("renewal-intent", intent),
|
|
269
279
|
onAccessExpired: (event) => emit("access-expired", event),
|
|
270
280
|
onAccessUnavailable: (event) => emit("access-unavailable", event),
|
|
281
|
+
onOrderConfirmed: (order) => emit("order-confirmed", order),
|
|
271
282
|
onStatusChange: (event) => emit("status-change", event),
|
|
272
283
|
onError: (error) => emit("error", error)
|
|
273
284
|
});
|
|
@@ -279,6 +290,9 @@ var SeasonPicker = defineComponent2({
|
|
|
279
290
|
container.value,
|
|
280
291
|
props.season,
|
|
281
292
|
props.apiBase,
|
|
293
|
+
props.publicKey,
|
|
294
|
+
props.checkout,
|
|
295
|
+
props.returnUrl,
|
|
282
296
|
props.buyerAccessTokenProvider,
|
|
283
297
|
props.buyerAccessToken,
|
|
284
298
|
props.initialOperationId,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/SeatingChart.ts","../src/SeasonPicker.ts","../src/index.ts"],"sourcesContent":["import {\n defineComponent,\n h,\n onBeforeUnmount,\n ref,\n shallowRef,\n watch,\n type PropType,\n type Ref,\n} from 'vue';\nimport {\n SeatingChart as CoreSeatingChart,\n SEATING_CHART_IDENTITY_PROPS,\n bindSeatingChartHandle,\n buildSeatingChartOptions,\n type RendererViewMode,\n type SeatingChartHandle,\n type SeatingChartOptions,\n type SelectedSeat,\n type HoldResult,\n type BestAvailableResult,\n type GAAreaAvailability,\n type SeatHoverDetails,\n type PickerSelectionValidity,\n type PickerSelectionValidator,\n type BuyerAccessToken,\n type BuyerAccessTokenProvider,\n type BuyerAccessExpiredEvent,\n type BuyerAccessUnavailableEvent,\n type SelectedObjectUnavailableEvent,\n} from '@seatlayer/js';\n\n/**\n * What `ref=\"chart\"` gives you — call these to drive the picker from your app.\n *\n * Vue exposes these through `defineExpose`, so a template ref is typed as this\n * rather than as the raw component instance. It is the shared\n * `SeatingChartHandle` from `@seatlayer/js`: the same 17 methods React's `ref`\n * and Angular's component expose, from one declaration, so the three wrappers\n * cannot drift apart again.\n */\nexport type SeatingChartExposed = SeatingChartHandle;\n\n/**\n * Vue 3 wrapper around the framework-agnostic `@seatlayer/js` SDK.\n *\n * The canvas is created once and torn down on unmount. Only the props that\n * change the chart's identity (`SEATING_CHART_IDENTITY_PROPS`: `event`,\n * `apiBase`, `maxSelection`, `numberOfPlacesToSelect`, `publicKey`, `locale`, `currency`,\n * `colorblindSafe`, `initialView`, `errorDisplay`) trigger a rebuild;\n * everything else is read live, so a parent re-render never destroys the canvas\n * mid-selection.\n *\n * Written as a render function rather than an SFC so the package builds with\n * plain TypeScript — a consumer needs no Vue compiler plugin to install it.\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { ref } from 'vue';\n * import { SeatingChart, type SeatingChartExposed } from '@seatlayer/vue';\n *\n * const chart = ref<SeatingChartExposed | null>(null);\n * const checkout = async () => {\n * const held = await chart.value?.hold();\n * if (held) await pay(held.holdId);\n * };\n * </script>\n *\n * <template>\n * <SeatingChart ref=\"chart\" event=\"summer-gala\" @selection-change=\"onChange\" />\n * </template>\n * ```\n */\nexport const SeatingChart = defineComponent({\n name: 'SeatLayerSeatingChart',\n\n props: {\n /** Event key to render. Changing it rebuilds the chart. */\n event: { type: String, required: true },\n /** API base URL. Defaults to the public API. */\n apiBase: { type: String, default: undefined },\n /** Cap on how many seats a buyer may select. */\n maxSelection: { type: Number, default: undefined },\n /** Object ids or public labels selected after availability loads. */\n selectedObjects: { type: Array as PropType<string[]>, default: undefined },\n /** Object ids or public labels the buyer may select. */\n selectableObjects: { type: Array as PropType<string[] | null>, default: undefined },\n /** Exact ticket count required for a valid selection. */\n numberOfPlacesToSelect: { type: Number, default: undefined },\n /** Local buyer selection guards. Changing them rebuilds the chart. */\n selectionValidators: { type: Array as PropType<PickerSelectionValidator[]>, default: undefined },\n /** Publishable key, when your integration uses one. */\n publicKey: { type: String, default: undefined },\n /** BCP-47 locale for built-in copy. */\n locale: { type: String, default: undefined },\n /** ISO currency for price formatting. */\n currency: { type: String, default: undefined },\n /** Render with colorblind-safe seat glyphs. */\n colorblindSafe: { type: Boolean, default: undefined },\n /**\n * Initial canvas projection. Read once when the chart is built, so\n * changing it rebuilds.\n * @deprecated `'isometric'` and `'perspective'` are retired in favour of\n * the real 3D venue view; use `'flat'`.\n */\n initialView: {\n type: String as PropType<RendererViewMode>,\n default: undefined,\n },\n /**\n * What the BUYER sees when the chart cannot load: `'message'` (default) is\n * a styleable notice with a Try again button, `'none'` is silent for hosts\n * that render their own failure UI from the `error` event.\n */\n errorDisplay: {\n type: String as PropType<'message' | 'none'>,\n default: undefined,\n },\n /** Copy overrides, read once per mount. */\n messages: {\n type: Object as PropType<SeatingChartOptions['messages']>,\n default: undefined,\n },\n /**\n * Show the built-in seat tooltip. Set false to draw your own popover from\n * the `seat-hover` event.\n */\n seatTooltip: { type: Boolean, default: undefined },\n /**\n * Sales Channels: mint a buyer access session on demand. Called with a\n * `reason`; returns `{ token, expiresAt }` from YOUR backend. The token is\n * held in memory only — never storage, never a URL, never a log.\n */\n buyerAccessTokenProvider: {\n type: Function as PropType<BuyerAccessTokenProvider>,\n default: undefined,\n },\n /** One-shot session for hosts that own the lifecycle. Cannot be renewed. */\n buyerAccessToken: {\n type: [String, Object] as PropType<string | BuyerAccessToken>,\n default: undefined,\n },\n },\n\n emits: {\n /** The buyer's selection changed. */\n 'selection-change': (_seats: SelectedSeat[]) => true,\n /** Exact-count state changed. */\n 'selection-validity-change': (_state: PickerSelectionValidity) => true,\n /** The exact count was reached. */\n 'selection-valid': (_seats: SelectedSeat[]) => true,\n /** The selection is not at the exact count. */\n 'selection-invalid': (_state: PickerSelectionValidity) => true,\n /** The active selection cap was reached. */\n 'selection-limit': (_max: number) => true,\n /** A hold succeeded. */\n hold: (_result: HoldResult) => true,\n /** A previous hold was restored on mount. */\n 'hold-restored': (_result: HoldResult) => true,\n /** The active hold lapsed. */\n 'hold-expired': () => true,\n /** A GA area was clicked. */\n 'ga-click': (_area: GAAreaAvailability) => true,\n /** Something failed — a network error, a rejected hold. */\n error: (_error: unknown) => true,\n /** A floor deck was tapped in the 3D view. */\n 'deck-tap': (_floorId: string) => true,\n /** A transient hint worth showing the buyer, or `null` to clear it. */\n hint: (_message: string | null) => true,\n /** The pointer moved onto a seat, or off one (`null`). */\n 'seat-hover': (_details: SeatHoverDetails | null) => true,\n /** The buyer access session lapsed; `refreshed` says whether it recovered. */\n 'access-expired': (_event: BuyerAccessExpiredEvent) => true,\n /** Private inventory is unavailable and refreshing will not fix it. */\n 'access-unavailable': (_event: BuyerAccessUnavailableEvent) => true,\n /** Selected-but-unheld units stopped being selectable. */\n 'selected-object-unavailable': (_event: SelectedObjectUnavailableEvent) => true,\n },\n\n setup(props, { emit, expose }) {\n const container: Ref<HTMLDivElement | null> = ref(null);\n // shallowRef: the chart owns a canvas and a large scene graph, and making it\n // deeply reactive would have Vue walk all of it on every touch.\n const chart = shallowRef<CoreSeatingChart | null>(null);\n\n const destroy = () => {\n chart.value?.destroy();\n chart.value = null;\n };\n\n const build = () => {\n const element = container.value;\n if (!element) return;\n\n destroy();\n\n // Handlers are bound here rather than inline in the options literal.\n // Inline, TypeScript has to resolve `emit`'s overloads while it is still\n // contextually typing the literal against SeatingChartOptions, and it\n // gives up — collapsing to the last emit signature. Naming them first\n // separates the two inference problems, and reads better besides.\n const onSelectionChange = (seats: SelectedSeat[]) => emit('selection-change', seats);\n const onSelectionValidityChange = (state: PickerSelectionValidity) => emit('selection-validity-change', state);\n const onSelectionValid = (seats: SelectedSeat[]) => emit('selection-valid', seats);\n const onSelectionInvalid = (state: PickerSelectionValidity) => emit('selection-invalid', state);\n const onSelectionLimit = (max: number) => emit('selection-limit', max);\n const onHold = (result: HoldResult) => emit('hold', result);\n const onHoldRestored = (result: HoldResult) => emit('hold-restored', result);\n const onHoldExpired = () => emit('hold-expired');\n const onGAClick = (area: GAAreaAvailability) => emit('ga-click', area);\n const onError = (error: unknown) => emit('error', error);\n const onDeckTap = (floorId: string) => emit('deck-tap', floorId);\n const onHint = (message: string | null) => emit('hint', message);\n const onSeatHover = (details: SeatHoverDetails | null) => emit('seat-hover', details);\n const onAccessExpired = (state: BuyerAccessExpiredEvent) => emit('access-expired', state);\n const onAccessUnavailable = (state: BuyerAccessUnavailableEvent) =>\n emit('access-unavailable', state);\n const onSelectedObjectUnavailable = (state: SelectedObjectUnavailableEvent) =>\n emit('selected-object-unavailable', state);\n\n const instance = new CoreSeatingChart(buildSeatingChartOptions(\n element,\n {\n event: props.event,\n apiBase: props.apiBase,\n maxSelection: props.maxSelection,\n selectedObjects: props.selectedObjects,\n selectableObjects: props.selectableObjects,\n numberOfPlacesToSelect: props.numberOfPlacesToSelect,\n selectionValidators: props.selectionValidators,\n publicKey: props.publicKey,\n locale: props.locale,\n currency: props.currency,\n colorblindSafe: props.colorblindSafe,\n initialView: props.initialView,\n errorDisplay: props.errorDisplay,\n messages: props.messages,\n seatTooltip: props.seatTooltip,\n buyerAccessTokenProvider: props.buyerAccessTokenProvider,\n buyerAccessToken: props.buyerAccessToken,\n },\n {\n onAccessExpired,\n onAccessUnavailable,\n onSelectedObjectUnavailable,\n onSelectionChange,\n onSelectionValidityChange,\n onSelectionValid,\n onSelectionInvalid,\n onSelectionLimit,\n onHold,\n onHoldRestored,\n onHoldExpired,\n onGAClick,\n onError,\n onDeckTap,\n onHint,\n onSeatHover,\n },\n ));\n\n chart.value = instance;\n void instance.render();\n };\n\n // `flush: 'post'` so the container element exists on the first run — a\n // pre-flush watcher would fire before the DOM node is attached.\n watch(\n () => [\n container.value,\n // The shared identity list, not a hand-copied one — this is exactly the\n // place Vue fell two props behind React.\n ...SEATING_CHART_IDENTITY_PROPS.map((prop) => props[prop]),\n ],\n build,\n { immediate: true, flush: 'post' },\n );\n\n onBeforeUnmount(destroy);\n\n // Built once and read live: the handle must survive every rebuild, so it\n // asks for the current instance on each call rather than capturing one.\n const exposed: SeatingChartExposed = bindSeatingChartHandle(() => chart.value);\n expose(exposed);\n\n return () => h('div', { ref: container });\n },\n});\n","import {\n defineComponent,\n h,\n onBeforeUnmount,\n ref,\n shallowRef,\n watch,\n type PropType,\n type Ref,\n} from 'vue';\nimport {\n SeasonPicker as CoreSeasonPicker,\n type SeasonAvailability,\n type SeasonCheckoutHandoff,\n type SeasonDescriptor,\n type SeasonPickerOptions,\n type SeasonRenewalIntent,\n type SeasonStatusEvent,\n} from '@seatlayer/js';\n\n/** Imperative controls exposed through a Vue template ref. */\nexport interface SeasonPickerExposed {\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/** Vue lifecycle adapter for the distinct fixed-inclusion Season buyer flow. */\nexport const SeasonPicker = defineComponent({\n name: 'SeatLayerSeasonPicker',\n props: {\n season: { type: String, required: true },\n apiBase: { type: String, default: undefined },\n buyerAccessTokenProvider: {\n type: Function as PropType<SeasonPickerOptions['buyerAccessTokenProvider']>,\n default: undefined,\n },\n buyerAccessToken: {\n type: [String, Object] as PropType<SeasonPickerOptions['buyerAccessToken']>,\n default: undefined,\n },\n initialOperationId: { type: String, default: undefined },\n recoveryTimeoutMs: { type: Number, default: undefined },\n fetch: { type: Function as PropType<typeof fetch>, default: undefined },\n },\n emits: {\n hold: (_handoff: SeasonCheckoutHandoff) => true,\n 'hold-change': (_handoff: SeasonCheckoutHandoff | null) => true,\n continue: (_handoff: SeasonCheckoutHandoff) => true,\n 'renewal-intent': (_intent: SeasonRenewalIntent) => true,\n 'access-expired': (_event: unknown) => true,\n 'access-unavailable': (_event: unknown) => true,\n 'status-change': (_event: SeasonStatusEvent) => true,\n error: (_error: unknown) => true,\n },\n setup(props, { emit, expose }) {\n const container: Ref<HTMLDivElement | null> = ref(null);\n const picker = shallowRef<CoreSeasonPicker | null>(null);\n\n const destroy = () => {\n picker.value?.destroy();\n picker.value = null;\n };\n const build = () => {\n const element = container.value;\n if (!element) return;\n destroy();\n const instance = new CoreSeasonPicker({\n container: element,\n season: props.season,\n apiBase: props.apiBase,\n buyerAccessTokenProvider: props.buyerAccessTokenProvider,\n buyerAccessToken: props.buyerAccessToken,\n initialOperationId: props.initialOperationId,\n recoveryTimeoutMs: props.recoveryTimeoutMs,\n fetch: props.fetch,\n onHold: (handoff) => emit('hold', handoff),\n onHoldChange: (handoff) => emit('hold-change', handoff),\n onContinue: (handoff) => emit('continue', handoff),\n onRenewalIntent: (intent) => emit('renewal-intent', intent),\n onAccessExpired: (event) => emit('access-expired', event),\n onAccessUnavailable: (event) => emit('access-unavailable', event),\n onStatusChange: (event) => emit('status-change', event),\n onError: (error) => emit('error', error),\n });\n picker.value = instance;\n void instance.render().catch(() => undefined);\n };\n\n watch(\n () => [\n container.value,\n props.season,\n props.apiBase,\n props.buyerAccessTokenProvider,\n props.buyerAccessToken,\n props.initialOperationId,\n props.recoveryTimeoutMs,\n props.fetch,\n ],\n build,\n { immediate: true, flush: 'post' },\n );\n onBeforeUnmount(destroy);\n\n const current = (): CoreSeasonPicker => {\n if (!picker.value) throw new Error('seatlayer: Vue SeasonPicker is not mounted');\n return picker.value;\n };\n const exposed: SeasonPickerExposed = {\n holdSameSeat: (labels, operationId) => current().holdSameSeat(labels, operationId),\n restoreOperation: (operationId) => current().restoreOperation(operationId),\n release: (releaseActionId) => current().release(releaseActionId),\n createRenewalIntent: (offerId) => current().createRenewalIntent(offerId),\n getDescriptor: () => picker.value?.getDescriptor() ?? null,\n getAvailability: () => picker.value?.getAvailability() ?? null,\n getHandoff: () => picker.value?.getHandoff() ?? null,\n };\n expose(exposed);\n return () => h('div', { ref: container });\n },\n});\n","/**\n * @seatlayer/vue — the Vue 3 wrapper for the SeatLayer embed SDK.\n *\n * Components are written as render functions rather than SFCs, so installing\n * this package needs no Vue compiler plugin.\n */\nexport { SeatingChart } from './SeatingChart';\nexport type { SeatingChartExposed } from './SeatingChart';\nexport { SeasonPicker } from './SeasonPicker';\nexport type { SeasonPickerExposed } from './SeasonPicker';\n\nexport type {\n SelectedSeat,\n HoldResult,\n BestAvailableResult,\n GAAreaAvailability,\n HoldLineItem,\n SeatHoverDetails,\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonPickerOptions,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from '@seatlayer/js';\n\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\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n\n// Host-side embed helper: grows the iframe on `seatlayer:height` and pins it on\n// `seatlayer:fullscreen`. Vue hosts depend on this package alone, so it has to be\n// reachable here rather than only from @seatlayer/js.\nexport { attachPickerFrame } from '@seatlayer/js';\nexport type { AttachPickerFrameOptions } from '@seatlayer/js';\n"],"mappings":"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","names":["defineComponent","h","onBeforeUnmount","ref","shallowRef","watch"]}
|
|
1
|
+
{"version":3,"sources":["../src/SeatingChart.ts","../src/SeasonPicker.ts","../src/index.ts"],"sourcesContent":["import {\n defineComponent,\n h,\n onBeforeUnmount,\n ref,\n shallowRef,\n watch,\n type PropType,\n type Ref,\n} from 'vue';\nimport {\n SeatingChart as CoreSeatingChart,\n SEATING_CHART_IDENTITY_PROPS,\n bindSeatingChartHandle,\n buildSeatingChartOptions,\n type RendererViewMode,\n type SeatingChartHandle,\n type SeatingChartOptions,\n type SelectedSeat,\n type HoldResult,\n type BestAvailableResult,\n type GAAreaAvailability,\n type SeatHoverDetails,\n type PickerSelectionValidity,\n type PickerSelectionValidator,\n type BuyerAccessToken,\n type BuyerAccessTokenProvider,\n type BuyerAccessExpiredEvent,\n type BuyerAccessUnavailableEvent,\n type SelectedObjectUnavailableEvent,\n} from '@seatlayer/js';\n\n/**\n * What `ref=\"chart\"` gives you — call these to drive the picker from your app.\n *\n * Vue exposes these through `defineExpose`, so a template ref is typed as this\n * rather than as the raw component instance. It is the shared\n * `SeatingChartHandle` from `@seatlayer/js`: the same 17 methods React's `ref`\n * and Angular's component expose, from one declaration, so the three wrappers\n * cannot drift apart again.\n */\nexport type SeatingChartExposed = SeatingChartHandle;\n\n/**\n * Vue 3 wrapper around the framework-agnostic `@seatlayer/js` SDK.\n *\n * The canvas is created once and torn down on unmount. Only the props that\n * change the chart's identity (`SEATING_CHART_IDENTITY_PROPS`: `event`,\n * `apiBase`, `maxSelection`, `numberOfPlacesToSelect`, `publicKey`, `locale`, `currency`,\n * `colorblindSafe`, `initialView`, `errorDisplay`) trigger a rebuild;\n * everything else is read live, so a parent re-render never destroys the canvas\n * mid-selection.\n *\n * Written as a render function rather than an SFC so the package builds with\n * plain TypeScript — a consumer needs no Vue compiler plugin to install it.\n *\n * @example\n * ```vue\n * <script setup lang=\"ts\">\n * import { ref } from 'vue';\n * import { SeatingChart, type SeatingChartExposed } from '@seatlayer/vue';\n *\n * const chart = ref<SeatingChartExposed | null>(null);\n * const checkout = async () => {\n * const held = await chart.value?.hold();\n * if (held) await pay(held.holdId);\n * };\n * </script>\n *\n * <template>\n * <SeatingChart ref=\"chart\" event=\"summer-gala\" @selection-change=\"onChange\" />\n * </template>\n * ```\n */\nexport const SeatingChart = defineComponent({\n name: 'SeatLayerSeatingChart',\n\n props: {\n /** Event key to render. Changing it rebuilds the chart. */\n event: { type: String, required: true },\n /** API base URL. Defaults to the public API. */\n apiBase: { type: String, default: undefined },\n /** Cap on how many seats a buyer may select. */\n maxSelection: { type: Number, default: undefined },\n /** Object ids or public labels selected after availability loads. */\n selectedObjects: { type: Array as PropType<string[]>, default: undefined },\n /** Object ids or public labels the buyer may select. */\n selectableObjects: { type: Array as PropType<string[] | null>, default: undefined },\n /** Exact ticket count required for a valid selection. */\n numberOfPlacesToSelect: { type: Number, default: undefined },\n /** Local buyer selection guards. Changing them rebuilds the chart. */\n selectionValidators: { type: Array as PropType<PickerSelectionValidator[]>, default: undefined },\n /** Publishable key, when your integration uses one. */\n publicKey: { type: String, default: undefined },\n /** BCP-47 locale for built-in copy. */\n locale: { type: String, default: undefined },\n /** ISO currency for price formatting. */\n currency: { type: String, default: undefined },\n /** Render with colorblind-safe seat glyphs. */\n colorblindSafe: { type: Boolean, default: undefined },\n /**\n * Initial canvas projection. Read once when the chart is built, so\n * changing it rebuilds.\n * @deprecated `'isometric'` and `'perspective'` are retired in favour of\n * the real 3D venue view; use `'flat'`.\n */\n initialView: {\n type: String as PropType<RendererViewMode>,\n default: undefined,\n },\n /**\n * What the BUYER sees when the chart cannot load: `'message'` (default) is\n * a styleable notice with a Try again button, `'none'` is silent for hosts\n * that render their own failure UI from the `error` event.\n */\n errorDisplay: {\n type: String as PropType<'message' | 'none'>,\n default: undefined,\n },\n /** Copy overrides, read once per mount. */\n messages: {\n type: Object as PropType<SeatingChartOptions['messages']>,\n default: undefined,\n },\n /**\n * Show the built-in seat tooltip. Set false to draw your own popover from\n * the `seat-hover` event.\n */\n seatTooltip: { type: Boolean, default: undefined },\n /**\n * Sales Channels: mint a buyer access session on demand. Called with a\n * `reason`; returns `{ token, expiresAt }` from YOUR backend. The token is\n * held in memory only — never storage, never a URL, never a log.\n */\n buyerAccessTokenProvider: {\n type: Function as PropType<BuyerAccessTokenProvider>,\n default: undefined,\n },\n /** One-shot session for hosts that own the lifecycle. Cannot be renewed. */\n buyerAccessToken: {\n type: [String, Object] as PropType<string | BuyerAccessToken>,\n default: undefined,\n },\n },\n\n emits: {\n /** The buyer's selection changed. */\n 'selection-change': (_seats: SelectedSeat[]) => true,\n /** Exact-count state changed. */\n 'selection-validity-change': (_state: PickerSelectionValidity) => true,\n /** The exact count was reached. */\n 'selection-valid': (_seats: SelectedSeat[]) => true,\n /** The selection is not at the exact count. */\n 'selection-invalid': (_state: PickerSelectionValidity) => true,\n /** The active selection cap was reached. */\n 'selection-limit': (_max: number) => true,\n /** A hold succeeded. */\n hold: (_result: HoldResult) => true,\n /** A previous hold was restored on mount. */\n 'hold-restored': (_result: HoldResult) => true,\n /** The active hold lapsed. */\n 'hold-expired': () => true,\n /** A GA area was clicked. */\n 'ga-click': (_area: GAAreaAvailability) => true,\n /** Something failed — a network error, a rejected hold. */\n error: (_error: unknown) => true,\n /** A floor deck was tapped in the 3D view. */\n 'deck-tap': (_floorId: string) => true,\n /** A transient hint worth showing the buyer, or `null` to clear it. */\n hint: (_message: string | null) => true,\n /** The pointer moved onto a seat, or off one (`null`). */\n 'seat-hover': (_details: SeatHoverDetails | null) => true,\n /** The buyer access session lapsed; `refreshed` says whether it recovered. */\n 'access-expired': (_event: BuyerAccessExpiredEvent) => true,\n /** Private inventory is unavailable and refreshing will not fix it. */\n 'access-unavailable': (_event: BuyerAccessUnavailableEvent) => true,\n /** Selected-but-unheld units stopped being selectable. */\n 'selected-object-unavailable': (_event: SelectedObjectUnavailableEvent) => true,\n },\n\n setup(props, { emit, expose }) {\n const container: Ref<HTMLDivElement | null> = ref(null);\n // shallowRef: the chart owns a canvas and a large scene graph, and making it\n // deeply reactive would have Vue walk all of it on every touch.\n const chart = shallowRef<CoreSeatingChart | null>(null);\n\n const destroy = () => {\n chart.value?.destroy();\n chart.value = null;\n };\n\n const build = () => {\n const element = container.value;\n if (!element) return;\n\n destroy();\n\n // Handlers are bound here rather than inline in the options literal.\n // Inline, TypeScript has to resolve `emit`'s overloads while it is still\n // contextually typing the literal against SeatingChartOptions, and it\n // gives up — collapsing to the last emit signature. Naming them first\n // separates the two inference problems, and reads better besides.\n const onSelectionChange = (seats: SelectedSeat[]) => emit('selection-change', seats);\n const onSelectionValidityChange = (state: PickerSelectionValidity) => emit('selection-validity-change', state);\n const onSelectionValid = (seats: SelectedSeat[]) => emit('selection-valid', seats);\n const onSelectionInvalid = (state: PickerSelectionValidity) => emit('selection-invalid', state);\n const onSelectionLimit = (max: number) => emit('selection-limit', max);\n const onHold = (result: HoldResult) => emit('hold', result);\n const onHoldRestored = (result: HoldResult) => emit('hold-restored', result);\n const onHoldExpired = () => emit('hold-expired');\n const onGAClick = (area: GAAreaAvailability) => emit('ga-click', area);\n const onError = (error: unknown) => emit('error', error);\n const onDeckTap = (floorId: string) => emit('deck-tap', floorId);\n const onHint = (message: string | null) => emit('hint', message);\n const onSeatHover = (details: SeatHoverDetails | null) => emit('seat-hover', details);\n const onAccessExpired = (state: BuyerAccessExpiredEvent) => emit('access-expired', state);\n const onAccessUnavailable = (state: BuyerAccessUnavailableEvent) =>\n emit('access-unavailable', state);\n const onSelectedObjectUnavailable = (state: SelectedObjectUnavailableEvent) =>\n emit('selected-object-unavailable', state);\n\n const instance = new CoreSeatingChart(buildSeatingChartOptions(\n element,\n {\n event: props.event,\n apiBase: props.apiBase,\n maxSelection: props.maxSelection,\n selectedObjects: props.selectedObjects,\n selectableObjects: props.selectableObjects,\n numberOfPlacesToSelect: props.numberOfPlacesToSelect,\n selectionValidators: props.selectionValidators,\n publicKey: props.publicKey,\n locale: props.locale,\n currency: props.currency,\n colorblindSafe: props.colorblindSafe,\n initialView: props.initialView,\n errorDisplay: props.errorDisplay,\n messages: props.messages,\n seatTooltip: props.seatTooltip,\n buyerAccessTokenProvider: props.buyerAccessTokenProvider,\n buyerAccessToken: props.buyerAccessToken,\n },\n {\n onAccessExpired,\n onAccessUnavailable,\n onSelectedObjectUnavailable,\n onSelectionChange,\n onSelectionValidityChange,\n onSelectionValid,\n onSelectionInvalid,\n onSelectionLimit,\n onHold,\n onHoldRestored,\n onHoldExpired,\n onGAClick,\n onError,\n onDeckTap,\n onHint,\n onSeatHover,\n },\n ));\n\n chart.value = instance;\n void instance.render();\n };\n\n // `flush: 'post'` so the container element exists on the first run — a\n // pre-flush watcher would fire before the DOM node is attached.\n watch(\n () => [\n container.value,\n // The shared identity list, not a hand-copied one — this is exactly the\n // place Vue fell two props behind React.\n ...SEATING_CHART_IDENTITY_PROPS.map((prop) => props[prop]),\n ],\n build,\n { immediate: true, flush: 'post' },\n );\n\n onBeforeUnmount(destroy);\n\n // Built once and read live: the handle must survive every rebuild, so it\n // asks for the current instance on each call rather than capturing one.\n const exposed: SeatingChartExposed = bindSeatingChartHandle(() => chart.value);\n expose(exposed);\n\n return () => h('div', { ref: container });\n },\n});\n","import {\n defineComponent,\n h,\n onBeforeUnmount,\n ref,\n shallowRef,\n watch,\n type PropType,\n type Ref,\n} from 'vue';\nimport {\n SeasonPicker as CoreSeasonPicker,\n type SeasonAvailability,\n type SeasonCheckoutHandoff,\n type SeasonDescriptor,\n type SeasonPickerOptions,\n type SeasonRenewalIntent,\n type SeasonStatusEvent,\n} from '@seatlayer/js';\n\n/** Imperative controls exposed through a Vue template ref. */\nexport interface SeasonPickerExposed {\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/** Vue lifecycle adapter for the distinct fixed-inclusion Season buyer flow. */\nexport const SeasonPicker = defineComponent({\n name: 'SeatLayerSeasonPicker',\n props: {\n season: { type: String, required: true },\n apiBase: { type: String, default: undefined },\n publicKey: { type: String, default: undefined },\n checkout: {\n type: String as PropType<SeasonPickerOptions['checkout']>,\n default: undefined,\n },\n returnUrl: { type: String, default: undefined },\n buyerAccessTokenProvider: {\n type: Function as PropType<SeasonPickerOptions['buyerAccessTokenProvider']>,\n default: undefined,\n },\n buyerAccessToken: {\n type: [String, Object] as PropType<SeasonPickerOptions['buyerAccessToken']>,\n default: undefined,\n },\n initialOperationId: { type: String, default: undefined },\n recoveryTimeoutMs: { type: Number, default: undefined },\n fetch: { type: Function as PropType<typeof fetch>, default: undefined },\n },\n emits: {\n hold: (_handoff: SeasonCheckoutHandoff) => true,\n 'hold-change': (_handoff: SeasonCheckoutHandoff | null) => true,\n continue: (_handoff: SeasonCheckoutHandoff) => true,\n 'renewal-intent': (_intent: SeasonRenewalIntent) => true,\n 'access-expired': (_event: unknown) => true,\n 'access-unavailable': (_event: unknown) => true,\n 'order-confirmed': (_order: unknown) => true,\n 'status-change': (_event: SeasonStatusEvent) => true,\n error: (_error: unknown) => true,\n },\n setup(props, { emit, expose }) {\n const container: Ref<HTMLDivElement | null> = ref(null);\n const picker = shallowRef<CoreSeasonPicker | null>(null);\n\n const destroy = () => {\n picker.value?.destroy();\n picker.value = null;\n };\n const build = () => {\n const element = container.value;\n if (!element) return;\n destroy();\n const instance = new CoreSeasonPicker({\n container: element,\n season: props.season,\n apiBase: props.apiBase,\n publicKey: props.publicKey,\n checkout: props.checkout,\n returnUrl: props.returnUrl,\n buyerAccessTokenProvider: props.buyerAccessTokenProvider,\n buyerAccessToken: props.buyerAccessToken,\n initialOperationId: props.initialOperationId,\n recoveryTimeoutMs: props.recoveryTimeoutMs,\n fetch: props.fetch,\n onHold: (handoff) => emit('hold', handoff),\n onHoldChange: (handoff) => emit('hold-change', handoff),\n onContinue: (handoff) => emit('continue', handoff),\n onRenewalIntent: (intent) => emit('renewal-intent', intent),\n onAccessExpired: (event) => emit('access-expired', event),\n onAccessUnavailable: (event) => emit('access-unavailable', event),\n onOrderConfirmed: (order) => emit('order-confirmed', order),\n onStatusChange: (event) => emit('status-change', event),\n onError: (error) => emit('error', error),\n });\n picker.value = instance;\n void instance.render().catch(() => undefined);\n };\n\n watch(\n () => [\n container.value,\n props.season,\n props.apiBase,\n props.publicKey,\n props.checkout,\n props.returnUrl,\n props.buyerAccessTokenProvider,\n props.buyerAccessToken,\n props.initialOperationId,\n props.recoveryTimeoutMs,\n props.fetch,\n ],\n build,\n { immediate: true, flush: 'post' },\n );\n onBeforeUnmount(destroy);\n\n const current = (): CoreSeasonPicker => {\n if (!picker.value) throw new Error('seatlayer: Vue SeasonPicker is not mounted');\n return picker.value;\n };\n const exposed: SeasonPickerExposed = {\n holdSameSeat: (labels, operationId) => current().holdSameSeat(labels, operationId),\n restoreOperation: (operationId) => current().restoreOperation(operationId),\n release: (releaseActionId) => current().release(releaseActionId),\n createRenewalIntent: (offerId) => current().createRenewalIntent(offerId),\n getDescriptor: () => picker.value?.getDescriptor() ?? null,\n getAvailability: () => picker.value?.getAvailability() ?? null,\n getHandoff: () => picker.value?.getHandoff() ?? null,\n };\n expose(exposed);\n return () => h('div', { ref: container });\n },\n});\n","/**\n * @seatlayer/vue — the Vue 3 wrapper for the SeatLayer embed SDK.\n *\n * Components are written as render functions rather than SFCs, so installing\n * this package needs no Vue compiler plugin.\n */\nexport { SeatingChart } from './SeatingChart';\nexport type { SeatingChartExposed } from './SeatingChart';\nexport { SeasonPicker } from './SeasonPicker';\nexport type { SeasonPickerExposed } from './SeasonPicker';\n\nexport type {\n SelectedSeat,\n HoldResult,\n BestAvailableResult,\n GAAreaAvailability,\n HoldLineItem,\n SeatHoverDetails,\n SeasonAvailability,\n SeasonCheckoutHandoff,\n SeasonDescriptor,\n SeasonOperation,\n SeasonOperationState,\n SeasonPickerOptions,\n SeasonRenewalIntent,\n SeasonStatusEvent,\n} from '@seatlayer/js';\n\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\n// The framework-agnostic widget class — for the one-call modal (SeatPickerWidget.open()).\nexport { SeatPicker as SeatPickerWidget } from '@seatlayer/js';\n\n// Host-side embed helper: grows the iframe on `seatlayer:height` and pins it on\n// `seatlayer:fullscreen`. Vue hosts depend on this package alone, so it has to be\n// reachable here rather than only from @seatlayer/js.\nexport { attachPickerFrame } from '@seatlayer/js';\nexport type { AttachPickerFrameOptions } from '@seatlayer/js';\n"],"mappings":"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","names":["defineComponent","h","onBeforeUnmount","ref","shallowRef","watch"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@seatlayer/vue",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.81.0",
|
|
4
4
|
"description": "SeatLayer's official Vue 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": {
|
|
@@ -56,8 +56,8 @@
|
|
|
56
56
|
"typescript"
|
|
57
57
|
],
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@seatlayer/core": "0.
|
|
60
|
-
"@seatlayer/js": "0.
|
|
59
|
+
"@seatlayer/core": "0.81.0",
|
|
60
|
+
"@seatlayer/js": "0.81.0"
|
|
61
61
|
},
|
|
62
62
|
"peerDependencies": {
|
|
63
63
|
"vue": ">=3.3.0"
|