@seatlayer/js 0.46.0 → 0.47.1

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
  /**
@@ -641,7 +665,6 @@ declare class SeatingChart {
641
665
  private mount;
642
666
  private hostEl;
643
667
  private rendered;
644
- private retryBtn;
645
668
  private mode_;
646
669
  private tipEl;
647
670
  private tipPos;
@@ -1146,6 +1169,24 @@ interface SeatPickerTheme {
1146
1169
  logoUrl?: string;
1147
1170
  /** Brand/event fallback name for the monogram. */
1148
1171
  brandName?: string;
1172
+ /**
1173
+ * The DRAWN MAP, which the tokens above deliberately do not reach.
1174
+ *
1175
+ * Everything else on this interface is CSS: it re-inks panels, buttons and
1176
+ * the sidebar. The seat map is a canvas, painted from the chart document's
1177
+ * own `ChartTheme`, so a host could re-ink the whole widget and still be
1178
+ * looking at somebody else's dark venue in the middle of it (which is exactly
1179
+ * what SeatLayer's own light event-page palettes did, found 2026-08-07).
1180
+ *
1181
+ * Nested rather than flattened because `background` already means the
1182
+ * WIDGET's background here and the canvas ground is a different surface —
1183
+ * two things one word cannot carry.
1184
+ *
1185
+ * Set it only when you can vouch for the result: these colours are drawn
1186
+ * behind and beside live seat statuses (held, sold, selected), and the map is
1187
+ * the one part of this widget a buyer has to be able to read.
1188
+ */
1189
+ map?: PickerMapTheme;
1149
1190
  }
1150
1191
  interface SeatPickerOptions {
1151
1192
  /** CSS selector or element to mount into. Omit when using SeatPicker.open(). */
@@ -1224,10 +1265,19 @@ interface SeatPickerOptions {
1224
1265
  * on a phone. Offering 3D there is offering a stall. A host that knows its
1225
1266
  * audience can raise this; the ceiling goes away when seat streaming lands. */
1226
1267
  max3DSeats?: number;
1268
+ /**
1269
+ * Fires when the buyer enters/leaves 3D or targets a seat there. Hosts can
1270
+ * mirror this small, non-sensitive state into a shareable URL.
1271
+ */
1272
+ onBuyerViewChange?: (state: {
1273
+ view: 'map' | 'venue3d';
1274
+ seatId?: string;
1275
+ }) => void;
1227
1276
  /**
1228
1277
  * Optional analytics sink for the widget's own journey events. Currently emits
1229
1278
  * the 3D venue-view journey (`3d_opened`, `3d_orbit_engaged`, `3d_seat_picked`,
1230
- * `3d_cinematic_played`/`_skipped`/`_cancelled`, `3d_panorama_opened`/`_closed`)
1279
+ * `3d_cinematic_played`/`_skipped`/`_cancelled`, panorama outcomes, and WebGL
1280
+ * context loss/recovery)
1231
1281
  * with `{ surface: 'buyer' }` merged into the props. A throwing sink never
1232
1282
  * breaks the widget. Route it to your product analytics (e.g. PostHog). */
1233
1283
  onAnalytics?: (event: string, props: Record<string, unknown>) => void;
@@ -1538,8 +1588,8 @@ declare class SeatPicker {
1538
1588
  /**
1539
1589
  * Eager sightline preview for the confirm card: the organizer's real view
1540
1590
  * 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
1591
+ * forward view plus an approximate distance-to-stage line. On a stageless
1592
+ * chart both the distance claim and the generic stage silhouette are
1543
1593
  * invented promises, so we suppress them; a real attached photo always shows.
1544
1594
  * (OV-52)
1545
1595
  */
@@ -1591,6 +1641,7 @@ declare class SeatPicker {
1591
1641
  private reportFramedHeight;
1592
1642
  /** Full screen via the native API, falling back to a fixed-position overlay (iOS Safari). */
1593
1643
  private toggleFullscreen;
1644
+ private syncFullscreenButtons;
1594
1645
  /**
1595
1646
  * Native element-fullscreen was unavailable or rejected. When framed, a CSS
1596
1647
  * `.sl-fs` overlay can't escape the iframe, so we ask the host page to pin us
@@ -1899,6 +1950,43 @@ declare class SeatPicker {
1899
1950
  private rowShort;
1900
1951
  private updateTooltip;
1901
1952
  getSelection(): PickerSeat[];
1953
+ /**
1954
+ * Re-ink the DRAWN MAP after mount, so the canvas can follow a page palette
1955
+ * the host did not know at construction time.
1956
+ *
1957
+ * Deliberately narrower than the `theme` option: it takes only the map half.
1958
+ * The chrome half is CSS custom properties, which a host restyles from its
1959
+ * own stylesheet without asking the widget for anything — and a host that
1960
+ * used both mechanisms at once would have two things writing one token. This
1961
+ * method exists for the half CSS genuinely cannot reach: pixels Konva draws.
1962
+ *
1963
+ * The rebuild is the controller's (`setMapTheme`), which repaints statuses
1964
+ * from the map already in memory and restores the selection, so a buyer
1965
+ * mid-pick keeps their seats and no round trip is spent. A no-op when the
1966
+ * colours have not changed; safe to call on every render.
1967
+ */
1968
+ setMapTheme(map: PickerMapTheme | null): void;
1969
+ /**
1970
+ * Replace the host pricing override AFTER mount, and repaint everything that
1971
+ * shows a price.
1972
+ *
1973
+ * WHY IT CANNOT JUST BE A MOUNT OPTION. The prices a host knows are often not
1974
+ * the prices it knows AT MOUNT: SeatLayer's own event page learns them from
1975
+ * `GET /pub/events/:key/availability`, a separate cached read that lands a
1976
+ * round trip after the map does — deliberately, because the map is not
1977
+ * allowed to wait on it. Remounting the widget to hand it new options would
1978
+ * tear down a live hold, so the override is settable in place.
1979
+ *
1980
+ * The prices themselves are still the SERVER'S. This method takes an answer;
1981
+ * it never derives one. Nothing here re-reads a release, a window or a quota
1982
+ * — see `paidPrice`, the one funnel every displayed price flows through, and
1983
+ * note that the checkout handoff's line items do not come from here at all:
1984
+ * they are priced by the worker from its own hold. So the worst a wrong call
1985
+ * to this method can do is misprint a price, never mischarge one.
1986
+ *
1987
+ * A no-op when the map is unchanged, so a host may call it on every poll.
1988
+ */
1989
+ setPricing(pricing: SeatPickerPricing | undefined): void;
1902
1990
  /** Current colorblind-safe render state, resolved from the stored buyer
1903
1991
  * preference at mount. Host chrome (e.g. the Designer preview) reads this to
1904
1992
  * surface the state rather than rendering colorblind colors silently. */
@@ -1925,10 +2013,7 @@ declare class SeatPicker {
1925
2013
  *
1926
2014
  * Entering `'venue3d'` with `opts.flyToSeatId` runs the cinematic tour: the
1927
2015
  * 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
2016
+ * 360° view-from-seat). When the widget is **already** in the 3D
1932
2017
  * view, the camera simply flies to the requested seat — the GL scene is not
1933
2018
  * torn down or rebuilt, so there is no flash or re-entry.
1934
2019
  *
@@ -1937,7 +2022,7 @@ declare class SeatPicker {
1937
2022
  *
1938
2023
  * @param view `'map'` for the flat picker, `'venue3d'` for the 3D venue.
1939
2024
  * @param opts.flyToSeatId When entering (or already in) `'venue3d'`, the seat
1940
- * id to fly the camera to — cinematic → panorama.
2025
+ * id to fly the camera to — cinematic → live seat view.
1941
2026
  * Ignored when `view` is `'map'`.
1942
2027
  *
1943
2028
  * @example
@@ -1946,6 +2031,7 @@ declare class SeatPicker {
1946
2031
  */
1947
2032
  setBuyerView(view: 'map' | 'venue3d', opts?: {
1948
2033
  flyToSeatId?: string;
2034
+ resetView?: boolean;
1949
2035
  }): void;
1950
2036
  /** SeatStatus → the view3d palette state. Selection is layered separately. */
1951
2037
  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
  /**
@@ -641,7 +665,6 @@ declare class SeatingChart {
641
665
  private mount;
642
666
  private hostEl;
643
667
  private rendered;
644
- private retryBtn;
645
668
  private mode_;
646
669
  private tipEl;
647
670
  private tipPos;
@@ -1146,6 +1169,24 @@ interface SeatPickerTheme {
1146
1169
  logoUrl?: string;
1147
1170
  /** Brand/event fallback name for the monogram. */
1148
1171
  brandName?: string;
1172
+ /**
1173
+ * The DRAWN MAP, which the tokens above deliberately do not reach.
1174
+ *
1175
+ * Everything else on this interface is CSS: it re-inks panels, buttons and
1176
+ * the sidebar. The seat map is a canvas, painted from the chart document's
1177
+ * own `ChartTheme`, so a host could re-ink the whole widget and still be
1178
+ * looking at somebody else's dark venue in the middle of it (which is exactly
1179
+ * what SeatLayer's own light event-page palettes did, found 2026-08-07).
1180
+ *
1181
+ * Nested rather than flattened because `background` already means the
1182
+ * WIDGET's background here and the canvas ground is a different surface —
1183
+ * two things one word cannot carry.
1184
+ *
1185
+ * Set it only when you can vouch for the result: these colours are drawn
1186
+ * behind and beside live seat statuses (held, sold, selected), and the map is
1187
+ * the one part of this widget a buyer has to be able to read.
1188
+ */
1189
+ map?: PickerMapTheme;
1149
1190
  }
1150
1191
  interface SeatPickerOptions {
1151
1192
  /** CSS selector or element to mount into. Omit when using SeatPicker.open(). */
@@ -1224,10 +1265,19 @@ interface SeatPickerOptions {
1224
1265
  * on a phone. Offering 3D there is offering a stall. A host that knows its
1225
1266
  * audience can raise this; the ceiling goes away when seat streaming lands. */
1226
1267
  max3DSeats?: number;
1268
+ /**
1269
+ * Fires when the buyer enters/leaves 3D or targets a seat there. Hosts can
1270
+ * mirror this small, non-sensitive state into a shareable URL.
1271
+ */
1272
+ onBuyerViewChange?: (state: {
1273
+ view: 'map' | 'venue3d';
1274
+ seatId?: string;
1275
+ }) => void;
1227
1276
  /**
1228
1277
  * Optional analytics sink for the widget's own journey events. Currently emits
1229
1278
  * the 3D venue-view journey (`3d_opened`, `3d_orbit_engaged`, `3d_seat_picked`,
1230
- * `3d_cinematic_played`/`_skipped`/`_cancelled`, `3d_panorama_opened`/`_closed`)
1279
+ * `3d_cinematic_played`/`_skipped`/`_cancelled`, panorama outcomes, and WebGL
1280
+ * context loss/recovery)
1231
1281
  * with `{ surface: 'buyer' }` merged into the props. A throwing sink never
1232
1282
  * breaks the widget. Route it to your product analytics (e.g. PostHog). */
1233
1283
  onAnalytics?: (event: string, props: Record<string, unknown>) => void;
@@ -1538,8 +1588,8 @@ declare class SeatPicker {
1538
1588
  /**
1539
1589
  * Eager sightline preview for the confirm card: the organizer's real view
1540
1590
  * 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
1591
+ * forward view plus an approximate distance-to-stage line. On a stageless
1592
+ * chart both the distance claim and the generic stage silhouette are
1543
1593
  * invented promises, so we suppress them; a real attached photo always shows.
1544
1594
  * (OV-52)
1545
1595
  */
@@ -1591,6 +1641,7 @@ declare class SeatPicker {
1591
1641
  private reportFramedHeight;
1592
1642
  /** Full screen via the native API, falling back to a fixed-position overlay (iOS Safari). */
1593
1643
  private toggleFullscreen;
1644
+ private syncFullscreenButtons;
1594
1645
  /**
1595
1646
  * Native element-fullscreen was unavailable or rejected. When framed, a CSS
1596
1647
  * `.sl-fs` overlay can't escape the iframe, so we ask the host page to pin us
@@ -1899,6 +1950,43 @@ declare class SeatPicker {
1899
1950
  private rowShort;
1900
1951
  private updateTooltip;
1901
1952
  getSelection(): PickerSeat[];
1953
+ /**
1954
+ * Re-ink the DRAWN MAP after mount, so the canvas can follow a page palette
1955
+ * the host did not know at construction time.
1956
+ *
1957
+ * Deliberately narrower than the `theme` option: it takes only the map half.
1958
+ * The chrome half is CSS custom properties, which a host restyles from its
1959
+ * own stylesheet without asking the widget for anything — and a host that
1960
+ * used both mechanisms at once would have two things writing one token. This
1961
+ * method exists for the half CSS genuinely cannot reach: pixels Konva draws.
1962
+ *
1963
+ * The rebuild is the controller's (`setMapTheme`), which repaints statuses
1964
+ * from the map already in memory and restores the selection, so a buyer
1965
+ * mid-pick keeps their seats and no round trip is spent. A no-op when the
1966
+ * colours have not changed; safe to call on every render.
1967
+ */
1968
+ setMapTheme(map: PickerMapTheme | null): void;
1969
+ /**
1970
+ * Replace the host pricing override AFTER mount, and repaint everything that
1971
+ * shows a price.
1972
+ *
1973
+ * WHY IT CANNOT JUST BE A MOUNT OPTION. The prices a host knows are often not
1974
+ * the prices it knows AT MOUNT: SeatLayer's own event page learns them from
1975
+ * `GET /pub/events/:key/availability`, a separate cached read that lands a
1976
+ * round trip after the map does — deliberately, because the map is not
1977
+ * allowed to wait on it. Remounting the widget to hand it new options would
1978
+ * tear down a live hold, so the override is settable in place.
1979
+ *
1980
+ * The prices themselves are still the SERVER'S. This method takes an answer;
1981
+ * it never derives one. Nothing here re-reads a release, a window or a quota
1982
+ * — see `paidPrice`, the one funnel every displayed price flows through, and
1983
+ * note that the checkout handoff's line items do not come from here at all:
1984
+ * they are priced by the worker from its own hold. So the worst a wrong call
1985
+ * to this method can do is misprint a price, never mischarge one.
1986
+ *
1987
+ * A no-op when the map is unchanged, so a host may call it on every poll.
1988
+ */
1989
+ setPricing(pricing: SeatPickerPricing | undefined): void;
1902
1990
  /** Current colorblind-safe render state, resolved from the stored buyer
1903
1991
  * preference at mount. Host chrome (e.g. the Designer preview) reads this to
1904
1992
  * surface the state rather than rendering colorblind colors silently. */
@@ -1925,10 +2013,7 @@ declare class SeatPicker {
1925
2013
  *
1926
2014
  * Entering `'venue3d'` with `opts.flyToSeatId` runs the cinematic tour: the
1927
2015
  * 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
2016
+ * 360° view-from-seat). When the widget is **already** in the 3D
1932
2017
  * view, the camera simply flies to the requested seat — the GL scene is not
1933
2018
  * torn down or rebuilt, so there is no flash or re-entry.
1934
2019
  *
@@ -1937,7 +2022,7 @@ declare class SeatPicker {
1937
2022
  *
1938
2023
  * @param view `'map'` for the flat picker, `'venue3d'` for the 3D venue.
1939
2024
  * @param opts.flyToSeatId When entering (or already in) `'venue3d'`, the seat
1940
- * id to fly the camera to — cinematic → panorama.
2025
+ * id to fly the camera to — cinematic → live seat view.
1941
2026
  * Ignored when `view` is `'map'`.
1942
2027
  *
1943
2028
  * @example
@@ -1946,6 +2031,7 @@ declare class SeatPicker {
1946
2031
  */
1947
2032
  setBuyerView(view: 'map' | 'venue3d', opts?: {
1948
2033
  flyToSeatId?: string;
2034
+ resetView?: boolean;
1949
2035
  }): void;
1950
2036
  /** SeatStatus → the view3d palette state. Selection is layered separately. */
1951
2037
  private seatState3dFor;