@seatlayer/js 0.46.0 → 0.47.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/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { PickerSeat, RendererViewMode, SeatHoverDetails, PickerTransport } from '@seatlayer/core';
1
+ import { PickerSeat, RendererViewMode, SeatHoverDetails, PickerTransport, PickerMapTheme } from '@seatlayer/core';
2
2
  export { ExpandedSeat, SeatHoverDetails } from '@seatlayer/core';
3
3
  import { C as ChannelListResult, a as ChannelAllocationPage, b as ChannelRecord, A as AssignmentResult, c as ChannelPreviewProjection, d as ChannelAccessIntent, e as AccessLinkReveal, f as AccessLinkStatusRecord, g as ChannelSeatStatus, B as BucketRow } from './manager-CAIPkUYl.cjs';
4
4
  export { h as ACCESS_LINK_DEFAULTS, i as AccessIntentForbidsDetails, j as AccessLinkRecord, k as AccessLinkState, l as AccessLinkStatus, m as ArchiveBlockedDetails, n as AssignmentBuckets, o as AssignmentDropDetails, p as ChannelAccessSummary, q as ChannelAuditEntry, r as ChannelAuditPage, s as ChannelCounts, t as ChannelState, u as ControlRoomActivityEntry, v as ControlRoomSectionMetric, w as ControlRoomSnapshot, I as IntentSwitchBlockedDetails, L as LogEntry, x as LogPage, M as ManageApi, y as ManageApiError, P as PUBLIC_CHANNEL_ID, z as PUBLIC_CHANNEL_NAME, R as ReportByStatus, D as ReportCategoryMeta, E as ReportCategoryRow, F as ReportResult, S as SeatManager, G as SeatManagerActionResult, H as SeatManagerActivity, J as SeatManagerCapability, K as SeatManagerConnection, N as SeatManagerMode, O as SeatManagerOptions, Q as SeatManagerTallies, T as SelectionSourceRow, U as accessIntentDescription, V as accessIntentLabel, W as accessLine, X as accessLinkBadge, Y as accessLinkErrorCopy, Z as accessLinkIsLive, _ as accessLinkPolicyLines, $ as bucketRows, a0 as dropReviewRows, a1 as intentForbidsCopy, a2 as intentSwitchBlockedCopy, a3 as isPublicChannelId, a4 as markerLetter, a5 as markerOf, a6 as mutationCount, a7 as needsMoveConfirmation, a8 as planAssignment, a9 as retryAfterCopy, aa as selectionSources, ab as stateBadge, ac as suggestMarker } from './manager-CAIPkUYl.cjs';
@@ -232,10 +232,21 @@ interface RealtimeSink {
232
232
  /** Apply a batch of label→status changes. Implementations must paint this as
233
233
  * ONE pass, not one pass per label (motion system §4 rule 2). */
234
234
  applyStatuses(changes: StatusChange[]): void;
235
+ /**
236
+ * Paint a COMPLETE projection — the default plus the units that differ.
237
+ *
238
+ * Every case that cannot be expressed as a bounded diff (the first snapshot,
239
+ * or a changed default) still arrives as a whole authoritative projection: the
240
+ * client holds it, it just has no way to hand it over. This is that way, and
241
+ * where a sink provides it the {@link resync} round trip is skipped entirely.
242
+ *
243
+ * Optional, so an older sink keeps working unchanged.
244
+ */
245
+ applyProjection?(projection: Projection): void;
235
246
  /** Re-pull authoritative state over the scoped HTTP route. Used when a frame
236
247
  * cannot be diffed against what we hold (first snapshot, or the scope's
237
248
  * default itself changed, which redefines every unit we were never told
238
- * about). */
249
+ * about), and the sink cannot take a whole projection. */
239
250
  resync(): void | Promise<void>;
240
251
  /** Section availability changed (channel-agnostic; identical for every scope). */
241
252
  onSections?(hidden: string[], closed: string[]): void;
@@ -464,6 +475,19 @@ interface OrderStatusResult {
464
475
  currency: string;
465
476
  amountFormatted: string;
466
477
  seatCount: number;
478
+ eventName?: string | null;
479
+ venue?: string | null;
480
+ startsAt?: number | null;
481
+ tickets?: Array<{
482
+ label: string;
483
+ token: string;
484
+ status: 'issued' | 'checked_in' | 'void';
485
+ checkedInAt: number | null;
486
+ }>;
487
+ /** Hosted ticket page — the durable re-entry point after the modal closes. */
488
+ ticketUrl?: string;
489
+ /** Printable PDF, one page per ticket. */
490
+ pdfUrl?: string;
467
491
  }
468
492
  interface PubApiOptions {
469
493
  /**
@@ -1146,6 +1170,24 @@ interface SeatPickerTheme {
1146
1170
  logoUrl?: string;
1147
1171
  /** Brand/event fallback name for the monogram. */
1148
1172
  brandName?: string;
1173
+ /**
1174
+ * The DRAWN MAP, which the tokens above deliberately do not reach.
1175
+ *
1176
+ * Everything else on this interface is CSS: it re-inks panels, buttons and
1177
+ * the sidebar. The seat map is a canvas, painted from the chart document's
1178
+ * own `ChartTheme`, so a host could re-ink the whole widget and still be
1179
+ * looking at somebody else's dark venue in the middle of it (which is exactly
1180
+ * what SeatLayer's own light event-page palettes did, found 2026-08-07).
1181
+ *
1182
+ * Nested rather than flattened because `background` already means the
1183
+ * WIDGET's background here and the canvas ground is a different surface —
1184
+ * two things one word cannot carry.
1185
+ *
1186
+ * Set it only when you can vouch for the result: these colours are drawn
1187
+ * behind and beside live seat statuses (held, sold, selected), and the map is
1188
+ * the one part of this widget a buyer has to be able to read.
1189
+ */
1190
+ map?: PickerMapTheme;
1149
1191
  }
1150
1192
  interface SeatPickerOptions {
1151
1193
  /** CSS selector or element to mount into. Omit when using SeatPicker.open(). */
@@ -1224,10 +1266,19 @@ interface SeatPickerOptions {
1224
1266
  * on a phone. Offering 3D there is offering a stall. A host that knows its
1225
1267
  * audience can raise this; the ceiling goes away when seat streaming lands. */
1226
1268
  max3DSeats?: number;
1269
+ /**
1270
+ * Fires when the buyer enters/leaves 3D or targets a seat there. Hosts can
1271
+ * mirror this small, non-sensitive state into a shareable URL.
1272
+ */
1273
+ onBuyerViewChange?: (state: {
1274
+ view: 'map' | 'venue3d';
1275
+ seatId?: string;
1276
+ }) => void;
1227
1277
  /**
1228
1278
  * Optional analytics sink for the widget's own journey events. Currently emits
1229
1279
  * the 3D venue-view journey (`3d_opened`, `3d_orbit_engaged`, `3d_seat_picked`,
1230
- * `3d_cinematic_played`/`_skipped`/`_cancelled`, `3d_panorama_opened`/`_closed`)
1280
+ * `3d_cinematic_played`/`_skipped`/`_cancelled`, panorama outcomes, and WebGL
1281
+ * context loss/recovery)
1231
1282
  * with `{ surface: 'buyer' }` merged into the props. A throwing sink never
1232
1283
  * breaks the widget. Route it to your product analytics (e.g. PostHog). */
1233
1284
  onAnalytics?: (event: string, props: Record<string, unknown>) => void;
@@ -1538,8 +1589,8 @@ declare class SeatPicker {
1538
1589
  /**
1539
1590
  * Eager sightline preview for the confirm card: the organizer's real view
1540
1591
  * photo, or — only when the chart has an actual stage to look at — a generated
1541
- * forward view plus an "≈ Nm to stage · clear sightline" line. On a stageless
1542
- * chart both the distance/sightline claim and the generic stage silhouette are
1592
+ * forward view plus an approximate distance-to-stage line. On a stageless
1593
+ * chart both the distance claim and the generic stage silhouette are
1543
1594
  * invented promises, so we suppress them; a real attached photo always shows.
1544
1595
  * (OV-52)
1545
1596
  */
@@ -1591,6 +1642,7 @@ declare class SeatPicker {
1591
1642
  private reportFramedHeight;
1592
1643
  /** Full screen via the native API, falling back to a fixed-position overlay (iOS Safari). */
1593
1644
  private toggleFullscreen;
1645
+ private syncFullscreenButtons;
1594
1646
  /**
1595
1647
  * Native element-fullscreen was unavailable or rejected. When framed, a CSS
1596
1648
  * `.sl-fs` overlay can't escape the iframe, so we ask the host page to pin us
@@ -1899,6 +1951,43 @@ declare class SeatPicker {
1899
1951
  private rowShort;
1900
1952
  private updateTooltip;
1901
1953
  getSelection(): PickerSeat[];
1954
+ /**
1955
+ * Re-ink the DRAWN MAP after mount, so the canvas can follow a page palette
1956
+ * the host did not know at construction time.
1957
+ *
1958
+ * Deliberately narrower than the `theme` option: it takes only the map half.
1959
+ * The chrome half is CSS custom properties, which a host restyles from its
1960
+ * own stylesheet without asking the widget for anything — and a host that
1961
+ * used both mechanisms at once would have two things writing one token. This
1962
+ * method exists for the half CSS genuinely cannot reach: pixels Konva draws.
1963
+ *
1964
+ * The rebuild is the controller's (`setMapTheme`), which repaints statuses
1965
+ * from the map already in memory and restores the selection, so a buyer
1966
+ * mid-pick keeps their seats and no round trip is spent. A no-op when the
1967
+ * colours have not changed; safe to call on every render.
1968
+ */
1969
+ setMapTheme(map: PickerMapTheme | null): void;
1970
+ /**
1971
+ * Replace the host pricing override AFTER mount, and repaint everything that
1972
+ * shows a price.
1973
+ *
1974
+ * WHY IT CANNOT JUST BE A MOUNT OPTION. The prices a host knows are often not
1975
+ * the prices it knows AT MOUNT: SeatLayer's own event page learns them from
1976
+ * `GET /pub/events/:key/availability`, a separate cached read that lands a
1977
+ * round trip after the map does — deliberately, because the map is not
1978
+ * allowed to wait on it. Remounting the widget to hand it new options would
1979
+ * tear down a live hold, so the override is settable in place.
1980
+ *
1981
+ * The prices themselves are still the SERVER'S. This method takes an answer;
1982
+ * it never derives one. Nothing here re-reads a release, a window or a quota
1983
+ * — see `paidPrice`, the one funnel every displayed price flows through, and
1984
+ * note that the checkout handoff's line items do not come from here at all:
1985
+ * they are priced by the worker from its own hold. So the worst a wrong call
1986
+ * to this method can do is misprint a price, never mischarge one.
1987
+ *
1988
+ * A no-op when the map is unchanged, so a host may call it on every poll.
1989
+ */
1990
+ setPricing(pricing: SeatPickerPricing | undefined): void;
1902
1991
  /** Current colorblind-safe render state, resolved from the stored buyer
1903
1992
  * preference at mount. Host chrome (e.g. the Designer preview) reads this to
1904
1993
  * surface the state rather than rendering colorblind colors silently. */
@@ -1925,10 +2014,7 @@ declare class SeatPicker {
1925
2014
  *
1926
2015
  * Entering `'venue3d'` with `opts.flyToSeatId` runs the cinematic tour: the
1927
2016
  * camera flies to the seat and holds in the live scene (a chip offers the
1928
- * 360° view-from-seat)
1929
- * the widget enters 3D and auto-flies the camera to that seat, dissolving into
1930
- * its view-from-seat panorama (the same chain as tapping "See the view from
1931
- * here" on a seat's confirm card). When the widget is **already** in the 3D
2017
+ * 360° view-from-seat). When the widget is **already** in the 3D
1932
2018
  * view, the camera simply flies to the requested seat — the GL scene is not
1933
2019
  * torn down or rebuilt, so there is no flash or re-entry.
1934
2020
  *
@@ -1937,7 +2023,7 @@ declare class SeatPicker {
1937
2023
  *
1938
2024
  * @param view `'map'` for the flat picker, `'venue3d'` for the 3D venue.
1939
2025
  * @param opts.flyToSeatId When entering (or already in) `'venue3d'`, the seat
1940
- * id to fly the camera to — cinematic → panorama.
2026
+ * id to fly the camera to — cinematic → live seat view.
1941
2027
  * Ignored when `view` is `'map'`.
1942
2028
  *
1943
2029
  * @example
@@ -1946,6 +2032,7 @@ declare class SeatPicker {
1946
2032
  */
1947
2033
  setBuyerView(view: 'map' | 'venue3d', opts?: {
1948
2034
  flyToSeatId?: string;
2035
+ resetView?: boolean;
1949
2036
  }): void;
1950
2037
  /** SeatStatus → the view3d palette state. Selection is layered separately. */
1951
2038
  private seatState3dFor;
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { PickerSeat, RendererViewMode, SeatHoverDetails, PickerTransport } from '@seatlayer/core';
1
+ import { PickerSeat, RendererViewMode, SeatHoverDetails, PickerTransport, PickerMapTheme } from '@seatlayer/core';
2
2
  export { ExpandedSeat, SeatHoverDetails } from '@seatlayer/core';
3
3
  import { C as ChannelListResult, a as ChannelAllocationPage, b as ChannelRecord, A as AssignmentResult, c as ChannelPreviewProjection, d as ChannelAccessIntent, e as AccessLinkReveal, f as AccessLinkStatusRecord, g as ChannelSeatStatus, B as BucketRow } from './manager-CAIPkUYl.js';
4
4
  export { h as ACCESS_LINK_DEFAULTS, i as AccessIntentForbidsDetails, j as AccessLinkRecord, k as AccessLinkState, l as AccessLinkStatus, m as ArchiveBlockedDetails, n as AssignmentBuckets, o as AssignmentDropDetails, p as ChannelAccessSummary, q as ChannelAuditEntry, r as ChannelAuditPage, s as ChannelCounts, t as ChannelState, u as ControlRoomActivityEntry, v as ControlRoomSectionMetric, w as ControlRoomSnapshot, I as IntentSwitchBlockedDetails, L as LogEntry, x as LogPage, M as ManageApi, y as ManageApiError, P as PUBLIC_CHANNEL_ID, z as PUBLIC_CHANNEL_NAME, R as ReportByStatus, D as ReportCategoryMeta, E as ReportCategoryRow, F as ReportResult, S as SeatManager, G as SeatManagerActionResult, H as SeatManagerActivity, J as SeatManagerCapability, K as SeatManagerConnection, N as SeatManagerMode, O as SeatManagerOptions, Q as SeatManagerTallies, T as SelectionSourceRow, U as accessIntentDescription, V as accessIntentLabel, W as accessLine, X as accessLinkBadge, Y as accessLinkErrorCopy, Z as accessLinkIsLive, _ as accessLinkPolicyLines, $ as bucketRows, a0 as dropReviewRows, a1 as intentForbidsCopy, a2 as intentSwitchBlockedCopy, a3 as isPublicChannelId, a4 as markerLetter, a5 as markerOf, a6 as mutationCount, a7 as needsMoveConfirmation, a8 as planAssignment, a9 as retryAfterCopy, aa as selectionSources, ab as stateBadge, ac as suggestMarker } from './manager-CAIPkUYl.js';
@@ -232,10 +232,21 @@ interface RealtimeSink {
232
232
  /** Apply a batch of label→status changes. Implementations must paint this as
233
233
  * ONE pass, not one pass per label (motion system §4 rule 2). */
234
234
  applyStatuses(changes: StatusChange[]): void;
235
+ /**
236
+ * Paint a COMPLETE projection — the default plus the units that differ.
237
+ *
238
+ * Every case that cannot be expressed as a bounded diff (the first snapshot,
239
+ * or a changed default) still arrives as a whole authoritative projection: the
240
+ * client holds it, it just has no way to hand it over. This is that way, and
241
+ * where a sink provides it the {@link resync} round trip is skipped entirely.
242
+ *
243
+ * Optional, so an older sink keeps working unchanged.
244
+ */
245
+ applyProjection?(projection: Projection): void;
235
246
  /** Re-pull authoritative state over the scoped HTTP route. Used when a frame
236
247
  * cannot be diffed against what we hold (first snapshot, or the scope's
237
248
  * default itself changed, which redefines every unit we were never told
238
- * about). */
249
+ * about), and the sink cannot take a whole projection. */
239
250
  resync(): void | Promise<void>;
240
251
  /** Section availability changed (channel-agnostic; identical for every scope). */
241
252
  onSections?(hidden: string[], closed: string[]): void;
@@ -464,6 +475,19 @@ interface OrderStatusResult {
464
475
  currency: string;
465
476
  amountFormatted: string;
466
477
  seatCount: number;
478
+ eventName?: string | null;
479
+ venue?: string | null;
480
+ startsAt?: number | null;
481
+ tickets?: Array<{
482
+ label: string;
483
+ token: string;
484
+ status: 'issued' | 'checked_in' | 'void';
485
+ checkedInAt: number | null;
486
+ }>;
487
+ /** Hosted ticket page — the durable re-entry point after the modal closes. */
488
+ ticketUrl?: string;
489
+ /** Printable PDF, one page per ticket. */
490
+ pdfUrl?: string;
467
491
  }
468
492
  interface PubApiOptions {
469
493
  /**
@@ -1146,6 +1170,24 @@ interface SeatPickerTheme {
1146
1170
  logoUrl?: string;
1147
1171
  /** Brand/event fallback name for the monogram. */
1148
1172
  brandName?: string;
1173
+ /**
1174
+ * The DRAWN MAP, which the tokens above deliberately do not reach.
1175
+ *
1176
+ * Everything else on this interface is CSS: it re-inks panels, buttons and
1177
+ * the sidebar. The seat map is a canvas, painted from the chart document's
1178
+ * own `ChartTheme`, so a host could re-ink the whole widget and still be
1179
+ * looking at somebody else's dark venue in the middle of it (which is exactly
1180
+ * what SeatLayer's own light event-page palettes did, found 2026-08-07).
1181
+ *
1182
+ * Nested rather than flattened because `background` already means the
1183
+ * WIDGET's background here and the canvas ground is a different surface —
1184
+ * two things one word cannot carry.
1185
+ *
1186
+ * Set it only when you can vouch for the result: these colours are drawn
1187
+ * behind and beside live seat statuses (held, sold, selected), and the map is
1188
+ * the one part of this widget a buyer has to be able to read.
1189
+ */
1190
+ map?: PickerMapTheme;
1149
1191
  }
1150
1192
  interface SeatPickerOptions {
1151
1193
  /** CSS selector or element to mount into. Omit when using SeatPicker.open(). */
@@ -1224,10 +1266,19 @@ interface SeatPickerOptions {
1224
1266
  * on a phone. Offering 3D there is offering a stall. A host that knows its
1225
1267
  * audience can raise this; the ceiling goes away when seat streaming lands. */
1226
1268
  max3DSeats?: number;
1269
+ /**
1270
+ * Fires when the buyer enters/leaves 3D or targets a seat there. Hosts can
1271
+ * mirror this small, non-sensitive state into a shareable URL.
1272
+ */
1273
+ onBuyerViewChange?: (state: {
1274
+ view: 'map' | 'venue3d';
1275
+ seatId?: string;
1276
+ }) => void;
1227
1277
  /**
1228
1278
  * Optional analytics sink for the widget's own journey events. Currently emits
1229
1279
  * the 3D venue-view journey (`3d_opened`, `3d_orbit_engaged`, `3d_seat_picked`,
1230
- * `3d_cinematic_played`/`_skipped`/`_cancelled`, `3d_panorama_opened`/`_closed`)
1280
+ * `3d_cinematic_played`/`_skipped`/`_cancelled`, panorama outcomes, and WebGL
1281
+ * context loss/recovery)
1231
1282
  * with `{ surface: 'buyer' }` merged into the props. A throwing sink never
1232
1283
  * breaks the widget. Route it to your product analytics (e.g. PostHog). */
1233
1284
  onAnalytics?: (event: string, props: Record<string, unknown>) => void;
@@ -1538,8 +1589,8 @@ declare class SeatPicker {
1538
1589
  /**
1539
1590
  * Eager sightline preview for the confirm card: the organizer's real view
1540
1591
  * photo, or — only when the chart has an actual stage to look at — a generated
1541
- * forward view plus an "≈ Nm to stage · clear sightline" line. On a stageless
1542
- * chart both the distance/sightline claim and the generic stage silhouette are
1592
+ * forward view plus an approximate distance-to-stage line. On a stageless
1593
+ * chart both the distance claim and the generic stage silhouette are
1543
1594
  * invented promises, so we suppress them; a real attached photo always shows.
1544
1595
  * (OV-52)
1545
1596
  */
@@ -1591,6 +1642,7 @@ declare class SeatPicker {
1591
1642
  private reportFramedHeight;
1592
1643
  /** Full screen via the native API, falling back to a fixed-position overlay (iOS Safari). */
1593
1644
  private toggleFullscreen;
1645
+ private syncFullscreenButtons;
1594
1646
  /**
1595
1647
  * Native element-fullscreen was unavailable or rejected. When framed, a CSS
1596
1648
  * `.sl-fs` overlay can't escape the iframe, so we ask the host page to pin us
@@ -1899,6 +1951,43 @@ declare class SeatPicker {
1899
1951
  private rowShort;
1900
1952
  private updateTooltip;
1901
1953
  getSelection(): PickerSeat[];
1954
+ /**
1955
+ * Re-ink the DRAWN MAP after mount, so the canvas can follow a page palette
1956
+ * the host did not know at construction time.
1957
+ *
1958
+ * Deliberately narrower than the `theme` option: it takes only the map half.
1959
+ * The chrome half is CSS custom properties, which a host restyles from its
1960
+ * own stylesheet without asking the widget for anything — and a host that
1961
+ * used both mechanisms at once would have two things writing one token. This
1962
+ * method exists for the half CSS genuinely cannot reach: pixels Konva draws.
1963
+ *
1964
+ * The rebuild is the controller's (`setMapTheme`), which repaints statuses
1965
+ * from the map already in memory and restores the selection, so a buyer
1966
+ * mid-pick keeps their seats and no round trip is spent. A no-op when the
1967
+ * colours have not changed; safe to call on every render.
1968
+ */
1969
+ setMapTheme(map: PickerMapTheme | null): void;
1970
+ /**
1971
+ * Replace the host pricing override AFTER mount, and repaint everything that
1972
+ * shows a price.
1973
+ *
1974
+ * WHY IT CANNOT JUST BE A MOUNT OPTION. The prices a host knows are often not
1975
+ * the prices it knows AT MOUNT: SeatLayer's own event page learns them from
1976
+ * `GET /pub/events/:key/availability`, a separate cached read that lands a
1977
+ * round trip after the map does — deliberately, because the map is not
1978
+ * allowed to wait on it. Remounting the widget to hand it new options would
1979
+ * tear down a live hold, so the override is settable in place.
1980
+ *
1981
+ * The prices themselves are still the SERVER'S. This method takes an answer;
1982
+ * it never derives one. Nothing here re-reads a release, a window or a quota
1983
+ * — see `paidPrice`, the one funnel every displayed price flows through, and
1984
+ * note that the checkout handoff's line items do not come from here at all:
1985
+ * they are priced by the worker from its own hold. So the worst a wrong call
1986
+ * to this method can do is misprint a price, never mischarge one.
1987
+ *
1988
+ * A no-op when the map is unchanged, so a host may call it on every poll.
1989
+ */
1990
+ setPricing(pricing: SeatPickerPricing | undefined): void;
1902
1991
  /** Current colorblind-safe render state, resolved from the stored buyer
1903
1992
  * preference at mount. Host chrome (e.g. the Designer preview) reads this to
1904
1993
  * surface the state rather than rendering colorblind colors silently. */
@@ -1925,10 +2014,7 @@ declare class SeatPicker {
1925
2014
  *
1926
2015
  * Entering `'venue3d'` with `opts.flyToSeatId` runs the cinematic tour: the
1927
2016
  * camera flies to the seat and holds in the live scene (a chip offers the
1928
- * 360° view-from-seat)
1929
- * the widget enters 3D and auto-flies the camera to that seat, dissolving into
1930
- * its view-from-seat panorama (the same chain as tapping "See the view from
1931
- * here" on a seat's confirm card). When the widget is **already** in the 3D
2017
+ * 360° view-from-seat). When the widget is **already** in the 3D
1932
2018
  * view, the camera simply flies to the requested seat — the GL scene is not
1933
2019
  * torn down or rebuilt, so there is no flash or re-entry.
1934
2020
  *
@@ -1937,7 +2023,7 @@ declare class SeatPicker {
1937
2023
  *
1938
2024
  * @param view `'map'` for the flat picker, `'venue3d'` for the 3D venue.
1939
2025
  * @param opts.flyToSeatId When entering (or already in) `'venue3d'`, the seat
1940
- * id to fly the camera to — cinematic → panorama.
2026
+ * id to fly the camera to — cinematic → live seat view.
1941
2027
  * Ignored when `view` is `'map'`.
1942
2028
  *
1943
2029
  * @example
@@ -1946,6 +2032,7 @@ declare class SeatPicker {
1946
2032
  */
1947
2033
  setBuyerView(view: 'map' | 'venue3d', opts?: {
1948
2034
  flyToSeatId?: string;
2035
+ resetView?: boolean;
1949
2036
  }): void;
1950
2037
  /** SeatStatus → the view3d palette state. Selection is layered separately. */
1951
2038
  private seatState3dFor;