@seatlayer/vue 0.71.4 → 0.72.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 CHANGED
@@ -15,8 +15,8 @@ also re-exports the plain JavaScript `SeatPickerWidget` class and the
15
15
  `attachPickerFrame` helper, so a Vue host depends on one package.
16
16
 
17
17
  [SeatLayer Vue SDK on npm](https://www.npmjs.com/package/@seatlayer/vue) ·
18
- [Vue seat-map documentation](https://docs.seatlayer.io/buyer-sdk/seat-picker/) ·
19
- [SeatLayer reserved-seating platform](https://seatlayer.io/) ·
18
+ [Vue seat-map documentation](https://docs.seatlayer.io/buyer-sdk/vue/) ·
19
+ [SeatLayer SDK and API overview](https://seatlayer.io/developers/) ·
20
20
  [Buyer seat-map demo](https://app.seatlayer.io/demo/play/grand-theatre) ·
21
21
  [SeatLayer JavaScript seat map SDK](https://www.npmjs.com/package/@seatlayer/js) ·
22
22
  [SeatLayer React seat map SDK](https://www.npmjs.com/package/@seatlayer/react) ·
@@ -27,6 +27,7 @@ also re-exports the plain JavaScript `SeatPickerWidget` class and the
27
27
 
28
28
  - `SeatingChart` — one native Vue component (`SeatLayerSeatingChart`), written
29
29
  as a render function so no Vue compiler plugin is needed.
30
+ - `SeasonPicker` — an unpublished fixed-inclusion Season source candidate.
30
31
  - `SeatPickerWidget` — the framework-agnostic one-call buyer modal.
31
32
  - `attachPickerFrame` — the host-side iframe helper for embedded pickers.
32
33
  - TypeScript declarations for ESM (`dist/index.d.ts`) and CommonJS
@@ -75,6 +76,23 @@ async function checkout() {
75
76
  </template>
76
77
  ```
77
78
 
79
+ ### Fixed renewable Season source candidate
80
+
81
+ ```vue
82
+ <SeasonPicker
83
+ ref="season"
84
+ season="sea_2027"
85
+ :buyer-access-token="session.token"
86
+ @continue="handoff => continueOnYourServer(handoff.operationId)"
87
+ />
88
+ ```
89
+
90
+ The Season handoff is opaque and price-free. Its `pricingAuthority: "host"`
91
+ and `authoritativeAmountIncluded: false` flags mean trusted server code must
92
+ apply the package price, tax, and payment decision before booking the
93
+ identity-only allocation. This source is not a published framework support
94
+ claim.
95
+
78
96
  ## Props
79
97
 
80
98
  | Prop | Type | Notes |
package/dist/index.cjs CHANGED
@@ -20,9 +20,10 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
- SeatPickerWidget: () => import_js2.SeatPicker,
23
+ SeasonPicker: () => SeasonPicker,
24
+ SeatPickerWidget: () => import_js3.SeatPicker,
24
25
  SeatingChart: () => SeatingChart,
25
- attachPickerFrame: () => import_js3.attachPickerFrame
26
+ attachPickerFrame: () => import_js4.attachPickerFrame
26
27
  });
27
28
  module.exports = __toCommonJS(index_exports);
28
29
 
@@ -219,11 +220,107 @@ var SeatingChart = (0, import_vue.defineComponent)({
219
220
  }
220
221
  });
221
222
 
222
- // src/index.ts
223
+ // src/SeasonPicker.ts
224
+ var import_vue2 = require("vue");
223
225
  var import_js2 = require("@seatlayer/js");
226
+ var SeasonPicker = (0, import_vue2.defineComponent)({
227
+ name: "SeatLayerSeasonPicker",
228
+ props: {
229
+ season: { type: String, required: true },
230
+ apiBase: { type: String, default: void 0 },
231
+ buyerAccessTokenProvider: {
232
+ type: Function,
233
+ default: void 0
234
+ },
235
+ buyerAccessToken: {
236
+ type: [String, Object],
237
+ default: void 0
238
+ },
239
+ initialOperationId: { type: String, default: void 0 },
240
+ recoveryTimeoutMs: { type: Number, default: void 0 },
241
+ fetch: { type: Function, default: void 0 }
242
+ },
243
+ emits: {
244
+ hold: (_handoff) => true,
245
+ "hold-change": (_handoff) => true,
246
+ continue: (_handoff) => true,
247
+ "renewal-intent": (_intent) => true,
248
+ "access-expired": (_event) => true,
249
+ "access-unavailable": (_event) => true,
250
+ "status-change": (_event) => true,
251
+ error: (_error) => true
252
+ },
253
+ setup(props, { emit, expose }) {
254
+ const container = (0, import_vue2.ref)(null);
255
+ const picker = (0, import_vue2.shallowRef)(null);
256
+ const destroy = () => {
257
+ picker.value?.destroy();
258
+ picker.value = null;
259
+ };
260
+ const build = () => {
261
+ const element = container.value;
262
+ if (!element) return;
263
+ destroy();
264
+ const instance = new import_js2.SeasonPicker({
265
+ container: element,
266
+ season: props.season,
267
+ apiBase: props.apiBase,
268
+ buyerAccessTokenProvider: props.buyerAccessTokenProvider,
269
+ buyerAccessToken: props.buyerAccessToken,
270
+ initialOperationId: props.initialOperationId,
271
+ recoveryTimeoutMs: props.recoveryTimeoutMs,
272
+ fetch: props.fetch,
273
+ onHold: (handoff) => emit("hold", handoff),
274
+ onHoldChange: (handoff) => emit("hold-change", handoff),
275
+ onContinue: (handoff) => emit("continue", handoff),
276
+ onRenewalIntent: (intent) => emit("renewal-intent", intent),
277
+ onAccessExpired: (event) => emit("access-expired", event),
278
+ onAccessUnavailable: (event) => emit("access-unavailable", event),
279
+ onStatusChange: (event) => emit("status-change", event),
280
+ onError: (error) => emit("error", error)
281
+ });
282
+ picker.value = instance;
283
+ void instance.render().catch(() => void 0);
284
+ };
285
+ (0, import_vue2.watch)(
286
+ () => [
287
+ container.value,
288
+ props.season,
289
+ props.apiBase,
290
+ props.buyerAccessTokenProvider,
291
+ props.buyerAccessToken,
292
+ props.initialOperationId,
293
+ props.recoveryTimeoutMs,
294
+ props.fetch
295
+ ],
296
+ build,
297
+ { immediate: true, flush: "post" }
298
+ );
299
+ (0, import_vue2.onBeforeUnmount)(destroy);
300
+ const current = () => {
301
+ if (!picker.value) throw new Error("seatlayer: Vue SeasonPicker is not mounted");
302
+ return picker.value;
303
+ };
304
+ const exposed = {
305
+ holdSameSeat: (labels, operationId) => current().holdSameSeat(labels, operationId),
306
+ restoreOperation: (operationId) => current().restoreOperation(operationId),
307
+ release: (releaseActionId) => current().release(releaseActionId),
308
+ createRenewalIntent: (offerId) => current().createRenewalIntent(offerId),
309
+ getDescriptor: () => picker.value?.getDescriptor() ?? null,
310
+ getAvailability: () => picker.value?.getAvailability() ?? null,
311
+ getHandoff: () => picker.value?.getHandoff() ?? null
312
+ };
313
+ expose(exposed);
314
+ return () => (0, import_vue2.h)("div", { ref: container });
315
+ }
316
+ });
317
+
318
+ // src/index.ts
224
319
  var import_js3 = require("@seatlayer/js");
320
+ var import_js4 = require("@seatlayer/js");
225
321
  // Annotate the CommonJS export names for ESM import in node:
226
322
  0 && (module.exports = {
323
+ SeasonPicker,
227
324
  SeatPickerWidget,
228
325
  SeatingChart,
229
326
  attachPickerFrame
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/SeatingChart.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';\n\nexport type {\n SelectedSeat,\n HoldResult,\n BestAvailableResult,\n GAAreaAvailability,\n HoldLineItem,\n SeatHoverDetails,\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"],"mappings":"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","names":["CoreSeatingChart","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 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"]}
package/dist/index.d.cts CHANGED
@@ -1,8 +1,9 @@
1
1
  import * as _seatlayer_core from '@seatlayer/core';
2
2
  import * as vue from 'vue';
3
3
  import { PropType } from 'vue';
4
- import { PickerSelectionValidator, RendererViewMode, SeatingChartOptions, BuyerAccessTokenProvider, BuyerAccessToken, SelectedSeat, PickerSelectionValidity, HoldResult, GAAreaAvailability, SeatHoverDetails, BuyerAccessExpiredEvent, BuyerAccessUnavailableEvent, SelectedObjectUnavailableEvent, SeatingChartHandle } from '@seatlayer/js';
5
- export { AttachPickerFrameOptions, BestAvailableResult, BuyerAccessExpiredEvent, BuyerAccessRefreshReason, BuyerAccessToken, BuyerAccessTokenProvider, BuyerAccessUnavailableEvent, BuyerAccessUnavailableReason, GAAreaAvailability, HoldLineItem, HoldResult, SeatHoverDetails, SeatPicker as SeatPickerWidget, SelectedObjectUnavailableEvent, SelectedSeat, attachPickerFrame } from '@seatlayer/js';
4
+ import * as _seatlayer_js from '@seatlayer/js';
5
+ import { PickerSelectionValidator, RendererViewMode, SeatingChartOptions, BuyerAccessTokenProvider, BuyerAccessToken, SelectedSeat, PickerSelectionValidity, HoldResult, GAAreaAvailability, SeatHoverDetails, BuyerAccessExpiredEvent, BuyerAccessUnavailableEvent, SelectedObjectUnavailableEvent, SeatingChartHandle, SeasonPickerOptions, SeasonCheckoutHandoff, SeasonRenewalIntent, SeasonStatusEvent, SeasonDescriptor, SeasonAvailability } from '@seatlayer/js';
6
+ export { AttachPickerFrameOptions, BestAvailableResult, BuyerAccessExpiredEvent, BuyerAccessRefreshReason, BuyerAccessToken, BuyerAccessTokenProvider, BuyerAccessUnavailableEvent, BuyerAccessUnavailableReason, GAAreaAvailability, HoldLineItem, HoldResult, SeasonAvailability, SeasonCheckoutHandoff, SeasonDescriptor, SeasonOperation, SeasonOperationState, SeasonPickerOptions, SeasonRenewalIntent, SeasonStatusEvent, SeatHoverDetails, SeatPicker as SeatPickerWidget, SelectedObjectUnavailableEvent, SelectedSeat, attachPickerFrame } from '@seatlayer/js';
6
7
 
7
8
  /**
8
9
  * What `ref="chart"` gives you — call these to drive the picker from your app.
@@ -320,4 +321,102 @@ declare const SeatingChart: vue.DefineComponent<vue.ExtractPropTypes<{
320
321
  buyerAccessToken: string | BuyerAccessToken;
321
322
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
322
323
 
323
- export { SeatingChart, type SeatingChartExposed };
324
+ /** Imperative controls exposed through a Vue template ref. */
325
+ interface SeasonPickerExposed {
326
+ holdSameSeat(labels: readonly string[], operationId: string): Promise<SeasonCheckoutHandoff>;
327
+ restoreOperation(operationId: string): Promise<SeasonCheckoutHandoff | null>;
328
+ release(releaseActionId: string): Promise<void>;
329
+ createRenewalIntent(offerId: string): Promise<SeasonRenewalIntent>;
330
+ getDescriptor(): SeasonDescriptor | null;
331
+ getAvailability(): SeasonAvailability | null;
332
+ getHandoff(): SeasonCheckoutHandoff | null;
333
+ }
334
+ /** Vue lifecycle adapter for the distinct fixed-inclusion Season buyer flow. */
335
+ declare const SeasonPicker: vue.DefineComponent<vue.ExtractPropTypes<{
336
+ season: {
337
+ type: StringConstructor;
338
+ required: true;
339
+ };
340
+ apiBase: {
341
+ type: StringConstructor;
342
+ default: undefined;
343
+ };
344
+ buyerAccessTokenProvider: {
345
+ type: PropType<SeasonPickerOptions["buyerAccessTokenProvider"]>;
346
+ default: undefined;
347
+ };
348
+ buyerAccessToken: {
349
+ type: PropType<SeasonPickerOptions["buyerAccessToken"]>;
350
+ default: undefined;
351
+ };
352
+ initialOperationId: {
353
+ type: StringConstructor;
354
+ default: undefined;
355
+ };
356
+ recoveryTimeoutMs: {
357
+ type: NumberConstructor;
358
+ default: undefined;
359
+ };
360
+ fetch: {
361
+ type: PropType<typeof fetch>;
362
+ default: undefined;
363
+ };
364
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
365
+ [key: string]: any;
366
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
367
+ hold: (_handoff: SeasonCheckoutHandoff) => true;
368
+ 'hold-change': (_handoff: SeasonCheckoutHandoff | null) => true;
369
+ continue: (_handoff: SeasonCheckoutHandoff) => true;
370
+ 'renewal-intent': (_intent: SeasonRenewalIntent) => true;
371
+ 'access-expired': (_event: unknown) => true;
372
+ 'access-unavailable': (_event: unknown) => true;
373
+ 'status-change': (_event: SeasonStatusEvent) => true;
374
+ error: (_error: unknown) => true;
375
+ }, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
376
+ season: {
377
+ type: StringConstructor;
378
+ required: true;
379
+ };
380
+ apiBase: {
381
+ type: StringConstructor;
382
+ default: undefined;
383
+ };
384
+ buyerAccessTokenProvider: {
385
+ type: PropType<SeasonPickerOptions["buyerAccessTokenProvider"]>;
386
+ default: undefined;
387
+ };
388
+ buyerAccessToken: {
389
+ type: PropType<SeasonPickerOptions["buyerAccessToken"]>;
390
+ default: undefined;
391
+ };
392
+ initialOperationId: {
393
+ type: StringConstructor;
394
+ default: undefined;
395
+ };
396
+ recoveryTimeoutMs: {
397
+ type: NumberConstructor;
398
+ default: undefined;
399
+ };
400
+ fetch: {
401
+ type: PropType<typeof fetch>;
402
+ default: undefined;
403
+ };
404
+ }>> & Readonly<{
405
+ onHold?: ((_handoff: SeasonCheckoutHandoff) => any) | undefined;
406
+ onError?: ((_error: unknown) => any) | undefined;
407
+ "onAccess-expired"?: ((_event: unknown) => any) | undefined;
408
+ "onAccess-unavailable"?: ((_event: unknown) => any) | undefined;
409
+ "onHold-change"?: ((_handoff: SeasonCheckoutHandoff | null) => any) | undefined;
410
+ onContinue?: ((_handoff: SeasonCheckoutHandoff) => any) | undefined;
411
+ "onRenewal-intent"?: ((_intent: SeasonRenewalIntent) => any) | undefined;
412
+ "onStatus-change"?: ((_event: SeasonStatusEvent) => any) | undefined;
413
+ }>, {
414
+ apiBase: string;
415
+ buyerAccessTokenProvider: _seatlayer_js.BuyerAccessTokenProvider | undefined;
416
+ buyerAccessToken: string | _seatlayer_js.BuyerAccessToken | undefined;
417
+ initialOperationId: string;
418
+ recoveryTimeoutMs: number;
419
+ fetch: typeof fetch;
420
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
421
+
422
+ export { SeasonPicker, type SeasonPickerExposed, SeatingChart, type SeatingChartExposed };
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import * as _seatlayer_core from '@seatlayer/core';
2
2
  import * as vue from 'vue';
3
3
  import { PropType } from 'vue';
4
- import { PickerSelectionValidator, RendererViewMode, SeatingChartOptions, BuyerAccessTokenProvider, BuyerAccessToken, SelectedSeat, PickerSelectionValidity, HoldResult, GAAreaAvailability, SeatHoverDetails, BuyerAccessExpiredEvent, BuyerAccessUnavailableEvent, SelectedObjectUnavailableEvent, SeatingChartHandle } from '@seatlayer/js';
5
- export { AttachPickerFrameOptions, BestAvailableResult, BuyerAccessExpiredEvent, BuyerAccessRefreshReason, BuyerAccessToken, BuyerAccessTokenProvider, BuyerAccessUnavailableEvent, BuyerAccessUnavailableReason, GAAreaAvailability, HoldLineItem, HoldResult, SeatHoverDetails, SeatPicker as SeatPickerWidget, SelectedObjectUnavailableEvent, SelectedSeat, attachPickerFrame } from '@seatlayer/js';
4
+ import * as _seatlayer_js from '@seatlayer/js';
5
+ import { PickerSelectionValidator, RendererViewMode, SeatingChartOptions, BuyerAccessTokenProvider, BuyerAccessToken, SelectedSeat, PickerSelectionValidity, HoldResult, GAAreaAvailability, SeatHoverDetails, BuyerAccessExpiredEvent, BuyerAccessUnavailableEvent, SelectedObjectUnavailableEvent, SeatingChartHandle, SeasonPickerOptions, SeasonCheckoutHandoff, SeasonRenewalIntent, SeasonStatusEvent, SeasonDescriptor, SeasonAvailability } from '@seatlayer/js';
6
+ export { AttachPickerFrameOptions, BestAvailableResult, BuyerAccessExpiredEvent, BuyerAccessRefreshReason, BuyerAccessToken, BuyerAccessTokenProvider, BuyerAccessUnavailableEvent, BuyerAccessUnavailableReason, GAAreaAvailability, HoldLineItem, HoldResult, SeasonAvailability, SeasonCheckoutHandoff, SeasonDescriptor, SeasonOperation, SeasonOperationState, SeasonPickerOptions, SeasonRenewalIntent, SeasonStatusEvent, SeatHoverDetails, SeatPicker as SeatPickerWidget, SelectedObjectUnavailableEvent, SelectedSeat, attachPickerFrame } from '@seatlayer/js';
6
7
 
7
8
  /**
8
9
  * What `ref="chart"` gives you — call these to drive the picker from your app.
@@ -320,4 +321,102 @@ declare const SeatingChart: vue.DefineComponent<vue.ExtractPropTypes<{
320
321
  buyerAccessToken: string | BuyerAccessToken;
321
322
  }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
322
323
 
323
- export { SeatingChart, type SeatingChartExposed };
324
+ /** Imperative controls exposed through a Vue template ref. */
325
+ interface SeasonPickerExposed {
326
+ holdSameSeat(labels: readonly string[], operationId: string): Promise<SeasonCheckoutHandoff>;
327
+ restoreOperation(operationId: string): Promise<SeasonCheckoutHandoff | null>;
328
+ release(releaseActionId: string): Promise<void>;
329
+ createRenewalIntent(offerId: string): Promise<SeasonRenewalIntent>;
330
+ getDescriptor(): SeasonDescriptor | null;
331
+ getAvailability(): SeasonAvailability | null;
332
+ getHandoff(): SeasonCheckoutHandoff | null;
333
+ }
334
+ /** Vue lifecycle adapter for the distinct fixed-inclusion Season buyer flow. */
335
+ declare const SeasonPicker: vue.DefineComponent<vue.ExtractPropTypes<{
336
+ season: {
337
+ type: StringConstructor;
338
+ required: true;
339
+ };
340
+ apiBase: {
341
+ type: StringConstructor;
342
+ default: undefined;
343
+ };
344
+ buyerAccessTokenProvider: {
345
+ type: PropType<SeasonPickerOptions["buyerAccessTokenProvider"]>;
346
+ default: undefined;
347
+ };
348
+ buyerAccessToken: {
349
+ type: PropType<SeasonPickerOptions["buyerAccessToken"]>;
350
+ default: undefined;
351
+ };
352
+ initialOperationId: {
353
+ type: StringConstructor;
354
+ default: undefined;
355
+ };
356
+ recoveryTimeoutMs: {
357
+ type: NumberConstructor;
358
+ default: undefined;
359
+ };
360
+ fetch: {
361
+ type: PropType<typeof fetch>;
362
+ default: undefined;
363
+ };
364
+ }>, () => vue.VNode<vue.RendererNode, vue.RendererElement, {
365
+ [key: string]: any;
366
+ }>, {}, {}, {}, vue.ComponentOptionsMixin, vue.ComponentOptionsMixin, {
367
+ hold: (_handoff: SeasonCheckoutHandoff) => true;
368
+ 'hold-change': (_handoff: SeasonCheckoutHandoff | null) => true;
369
+ continue: (_handoff: SeasonCheckoutHandoff) => true;
370
+ 'renewal-intent': (_intent: SeasonRenewalIntent) => true;
371
+ 'access-expired': (_event: unknown) => true;
372
+ 'access-unavailable': (_event: unknown) => true;
373
+ 'status-change': (_event: SeasonStatusEvent) => true;
374
+ error: (_error: unknown) => true;
375
+ }, string, vue.PublicProps, Readonly<vue.ExtractPropTypes<{
376
+ season: {
377
+ type: StringConstructor;
378
+ required: true;
379
+ };
380
+ apiBase: {
381
+ type: StringConstructor;
382
+ default: undefined;
383
+ };
384
+ buyerAccessTokenProvider: {
385
+ type: PropType<SeasonPickerOptions["buyerAccessTokenProvider"]>;
386
+ default: undefined;
387
+ };
388
+ buyerAccessToken: {
389
+ type: PropType<SeasonPickerOptions["buyerAccessToken"]>;
390
+ default: undefined;
391
+ };
392
+ initialOperationId: {
393
+ type: StringConstructor;
394
+ default: undefined;
395
+ };
396
+ recoveryTimeoutMs: {
397
+ type: NumberConstructor;
398
+ default: undefined;
399
+ };
400
+ fetch: {
401
+ type: PropType<typeof fetch>;
402
+ default: undefined;
403
+ };
404
+ }>> & Readonly<{
405
+ onHold?: ((_handoff: SeasonCheckoutHandoff) => any) | undefined;
406
+ onError?: ((_error: unknown) => any) | undefined;
407
+ "onAccess-expired"?: ((_event: unknown) => any) | undefined;
408
+ "onAccess-unavailable"?: ((_event: unknown) => any) | undefined;
409
+ "onHold-change"?: ((_handoff: SeasonCheckoutHandoff | null) => any) | undefined;
410
+ onContinue?: ((_handoff: SeasonCheckoutHandoff) => any) | undefined;
411
+ "onRenewal-intent"?: ((_intent: SeasonRenewalIntent) => any) | undefined;
412
+ "onStatus-change"?: ((_event: SeasonStatusEvent) => any) | undefined;
413
+ }>, {
414
+ apiBase: string;
415
+ buyerAccessTokenProvider: _seatlayer_js.BuyerAccessTokenProvider | undefined;
416
+ buyerAccessToken: string | _seatlayer_js.BuyerAccessToken | undefined;
417
+ initialOperationId: string;
418
+ recoveryTimeoutMs: number;
419
+ fetch: typeof fetch;
420
+ }, {}, {}, {}, string, vue.ComponentProvideOptions, true, {}, any>;
421
+
422
+ export { SeasonPicker, type SeasonPickerExposed, SeatingChart, type SeatingChartExposed };
package/dist/index.js CHANGED
@@ -203,10 +203,115 @@ var SeatingChart = defineComponent({
203
203
  }
204
204
  });
205
205
 
206
+ // src/SeasonPicker.ts
207
+ import {
208
+ defineComponent as defineComponent2,
209
+ h as h2,
210
+ onBeforeUnmount as onBeforeUnmount2,
211
+ ref as ref2,
212
+ shallowRef as shallowRef2,
213
+ watch as watch2
214
+ } from "vue";
215
+ import {
216
+ SeasonPicker as CoreSeasonPicker
217
+ } from "@seatlayer/js";
218
+ var SeasonPicker = defineComponent2({
219
+ name: "SeatLayerSeasonPicker",
220
+ props: {
221
+ season: { type: String, required: true },
222
+ apiBase: { type: String, default: void 0 },
223
+ buyerAccessTokenProvider: {
224
+ type: Function,
225
+ default: void 0
226
+ },
227
+ buyerAccessToken: {
228
+ type: [String, Object],
229
+ default: void 0
230
+ },
231
+ initialOperationId: { type: String, default: void 0 },
232
+ recoveryTimeoutMs: { type: Number, default: void 0 },
233
+ fetch: { type: Function, default: void 0 }
234
+ },
235
+ emits: {
236
+ hold: (_handoff) => true,
237
+ "hold-change": (_handoff) => true,
238
+ continue: (_handoff) => true,
239
+ "renewal-intent": (_intent) => true,
240
+ "access-expired": (_event) => true,
241
+ "access-unavailable": (_event) => true,
242
+ "status-change": (_event) => true,
243
+ error: (_error) => true
244
+ },
245
+ setup(props, { emit, expose }) {
246
+ const container = ref2(null);
247
+ const picker = shallowRef2(null);
248
+ const destroy = () => {
249
+ picker.value?.destroy();
250
+ picker.value = null;
251
+ };
252
+ const build = () => {
253
+ const element = container.value;
254
+ if (!element) return;
255
+ destroy();
256
+ const instance = new CoreSeasonPicker({
257
+ container: element,
258
+ season: props.season,
259
+ apiBase: props.apiBase,
260
+ buyerAccessTokenProvider: props.buyerAccessTokenProvider,
261
+ buyerAccessToken: props.buyerAccessToken,
262
+ initialOperationId: props.initialOperationId,
263
+ recoveryTimeoutMs: props.recoveryTimeoutMs,
264
+ fetch: props.fetch,
265
+ onHold: (handoff) => emit("hold", handoff),
266
+ onHoldChange: (handoff) => emit("hold-change", handoff),
267
+ onContinue: (handoff) => emit("continue", handoff),
268
+ onRenewalIntent: (intent) => emit("renewal-intent", intent),
269
+ onAccessExpired: (event) => emit("access-expired", event),
270
+ onAccessUnavailable: (event) => emit("access-unavailable", event),
271
+ onStatusChange: (event) => emit("status-change", event),
272
+ onError: (error) => emit("error", error)
273
+ });
274
+ picker.value = instance;
275
+ void instance.render().catch(() => void 0);
276
+ };
277
+ watch2(
278
+ () => [
279
+ container.value,
280
+ props.season,
281
+ props.apiBase,
282
+ props.buyerAccessTokenProvider,
283
+ props.buyerAccessToken,
284
+ props.initialOperationId,
285
+ props.recoveryTimeoutMs,
286
+ props.fetch
287
+ ],
288
+ build,
289
+ { immediate: true, flush: "post" }
290
+ );
291
+ onBeforeUnmount2(destroy);
292
+ const current = () => {
293
+ if (!picker.value) throw new Error("seatlayer: Vue SeasonPicker is not mounted");
294
+ return picker.value;
295
+ };
296
+ const exposed = {
297
+ holdSameSeat: (labels, operationId) => current().holdSameSeat(labels, operationId),
298
+ restoreOperation: (operationId) => current().restoreOperation(operationId),
299
+ release: (releaseActionId) => current().release(releaseActionId),
300
+ createRenewalIntent: (offerId) => current().createRenewalIntent(offerId),
301
+ getDescriptor: () => picker.value?.getDescriptor() ?? null,
302
+ getAvailability: () => picker.value?.getAvailability() ?? null,
303
+ getHandoff: () => picker.value?.getHandoff() ?? null
304
+ };
305
+ expose(exposed);
306
+ return () => h2("div", { ref: container });
307
+ }
308
+ });
309
+
206
310
  // src/index.ts
207
311
  import { SeatPicker } from "@seatlayer/js";
208
312
  import { attachPickerFrame } from "@seatlayer/js";
209
313
  export {
314
+ SeasonPicker,
210
315
  SeatPicker as SeatPickerWidget,
211
316
  SeatingChart,
212
317
  attachPickerFrame
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/SeatingChart.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","/**\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';\n\nexport type {\n SelectedSeat,\n HoldResult,\n BestAvailableResult,\n GAAreaAvailability,\n HoldLineItem,\n SeatHoverDetails,\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":[]}
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"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@seatlayer/vue",
3
- "version": "0.71.4",
3
+ "version": "0.72.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.71.4",
60
- "@seatlayer/js": "0.71.4"
59
+ "@seatlayer/core": "0.72.0",
60
+ "@seatlayer/js": "0.72.0"
61
61
  },
62
62
  "peerDependencies": {
63
63
  "vue": ">=3.3.0"