@seatlayer/js 0.51.0 → 0.53.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,6 +1,6 @@
1
1
  import { PickerSeat, RendererViewMode, SeatHoverDetails, PickerTransport, PickerMapTheme } from '@seatlayer/core';
2
2
  export { ExpandedSeat, PickerMapTheme, RendererViewMode, SeatHoverDetails } from '@seatlayer/core';
3
- export { AccessIntentForbidsDetails, AccessLinkRecord, AccessLinkReveal, AccessLinkState, AccessLinkStatus, AccessLinkStatusRecord, ArchiveBlockedDetails, AssignmentBuckets, AssignmentDropDetails, AssignmentResult, BucketRow, ChannelAccessIntent, ChannelAccessSummary, ChannelAllocationPage, ChannelAttribution, ChannelAuditEntry, ChannelAuditPage, ChannelCounts, ChannelListResult, ChannelPreviewProjection, ChannelRecord, ChannelReport, ChannelReportLinkRecord, ChannelReportLinkReveal, ChannelReportResult, ChannelReportRow, ChannelSeatStatus, ChannelState, ChannelsCapabilities, ChannelsClient, ChannelsMode, ChannelsModeHost, ChannelsRowView, ChannelsSeatView, ControlRoomActivityEntry, ControlRoomSectionMetric, ControlRoomSnapshot, EventScopedManageToken, IntentSwitchBlockedDetails, InventoryBooking, InventoryBookingActivity, InventoryBookingDetail, InventoryBookingObject, InventoryBookingState, InventoryBookingsPage, InventoryBookingsQuery, LogEntry, LogPage, ManageApi, ManageApiError, ReportByStatus, ReportCategoryMeta, ReportCategoryRow, ReportResult, SeatManager, SeatManagerActionResult, SeatManagerActivity, SeatManagerCapability, SeatManagerConnection, SeatManagerMode, SeatManagerOptions, SeatManagerTallies, SelectionSourceRow } from './manager.cjs';
3
+ export { A as AccessIntentForbidsDetails, a as AccessLinkRecord, b as AccessLinkReveal, c as AccessLinkState, d as AccessLinkStatus, e as AccessLinkStatusRecord, f as ArchiveBlockedDetails, g as AssignmentBuckets, h as AssignmentDropDetails, i as AssignmentResult, B as BucketRow, C as ChannelAccessIntent, j as ChannelAccessSummary, k as ChannelAllocationPage, l as ChannelAttribution, m as ChannelAuditEntry, n as ChannelAuditPage, o as ChannelCounts, p as ChannelListResult, q as ChannelPreviewProjection, r as ChannelRecord, s as ChannelReport, t as ChannelReportLinkRecord, u as ChannelReportLinkReveal, v as ChannelReportResult, w as ChannelReportRow, x as ChannelSeatStatus, y as ChannelState, z as ChannelsCapabilities, D as ChannelsClient, E as ChannelsMode, F as ChannelsModeHost, G as ChannelsRowView, H as ChannelsSeatView, I as ControlRoomActivityEntry, J as ControlRoomSectionMetric, K as ControlRoomSnapshot, L as EventScopedManageToken, M as IntentSwitchBlockedDetails, N as InventoryBooking, O as InventoryBookingActivity, P as InventoryBookingDetail, Q as InventoryBookingObject, R as InventoryBookingState, S as InventoryBookingsPage, T as InventoryBookingsQuery, U as LogEntry, V as LogPage, W as ManageApi, X as ManageApiError, Y as ReportByStatus, Z as ReportCategoryMeta, _ as ReportCategoryRow, $ as ReportResult, a0 as SeatManager, a1 as SeatManagerActionResult, a2 as SeatManagerActivity, a3 as SeatManagerCapability, a4 as SeatManagerConnection, a5 as SeatManagerMode, a6 as SeatManagerOptions, a7 as SeatManagerTallies, a8 as SelectionSourceRow } from './channelsMode-BX7s9bUl.cjs';
4
4
 
5
5
  /**
6
6
  * Buyer access context — the browser half of the Sales Channels contract
@@ -820,6 +820,132 @@ declare class SeatingChart {
820
820
  destroy(): void;
821
821
  }
822
822
 
823
+ /**
824
+ * seatingChartBinding — the single source of truth the framework wrappers bind
825
+ * against.
826
+ *
827
+ * `@seatlayer/react`, `@seatlayer/vue` and `@seatlayer/angular` are supposed to
828
+ * be thin: mount a `SeatingChart`, forward the props, forward the callbacks,
829
+ * expose the imperative handle. In practice each of them hand-wrote all three
830
+ * lists, and they drifted — React grew `initialView` and `errorDisplay` props
831
+ * that Vue and Angular never got, and nothing in any build caught it, because a
832
+ * missing prop in a hand-written list is not a type error anywhere.
833
+ *
834
+ * So the lists live here, next to the class they describe, and the wrappers
835
+ * iterate them. Adding a method to `SeatingChart` that buyers should be able to
836
+ * call now means adding one entry to {@link SEATING_CHART_HANDLE_METHODS}; every
837
+ * wrapper picks it up, and the wrapper tests fail until each one exposes it.
838
+ *
839
+ * Types only against `SeatingChart` — this module imports no runtime value from
840
+ * it, so it costs a host nothing but the two arrays and the binder below.
841
+ */
842
+
843
+ /**
844
+ * Imperative handle exposed by every wrapper — call these to drive the picker
845
+ * from your app.
846
+ *
847
+ * Angular is the one exception to the naming: its component surfaces `hold` as
848
+ * `holdSelection`, because `hold` is already taken by its `@Output()` event.
849
+ */
850
+ interface SeatingChartHandle {
851
+ /** Hold the current selection. Resolves the hold, or `null` on a 409 conflict. */
852
+ hold(options?: {
853
+ ttlMs?: number;
854
+ }): Promise<HoldResult | null>;
855
+ /** Restore an active hold by its opaque id. */
856
+ resumeHold(holdId: string): Promise<HoldResult | null>;
857
+ /** Current active hold known to the chart. */
858
+ getCurrentHold(): HoldResult | null;
859
+ /** GA areas with live remaining capacity. */
860
+ getGAAreas(): GAAreaAvailability[];
861
+ /** Atomically hold a quantity from one GA area. */
862
+ holdGA(areaId: string, qty: number, options?: {
863
+ tierId?: string | null;
864
+ ttlMs?: number;
865
+ }): Promise<HoldResult | null>;
866
+ /** Ask the server for the `qty` best free seats and hold them atomically. */
867
+ bestAvailable(qty: number, categoryKey?: string): Promise<BestAvailableResult | null>;
868
+ /** Release the current hold (if any). */
869
+ release(): Promise<void>;
870
+ /** Release some held labels while keeping the remainder active. */
871
+ releaseLabels(labels: string[]): Promise<boolean>;
872
+ /** The current selection, with prices resolved from the chart categories. */
873
+ getSelection(): SelectedSeat[];
874
+ /**
875
+ * Choose a ticket tier for a selected seat (e.g. Adult → Child). Available
876
+ * `tiers` are on each `SelectedSeat`; `tierId=null` reverts to the default.
877
+ */
878
+ setSeatTier(seatId: string, tierId: string | null): void;
879
+ /**
880
+ * Floors of a multi-floor chart — `[{ id, name }]` (single-floor charts
881
+ * return one entry; empty before render()). Pair with setFloor().
882
+ */
883
+ getFloors(): {
884
+ id: string;
885
+ name: string;
886
+ }[];
887
+ /** Switch the shown floor (2D). Warns + no-ops on single-floor charts. */
888
+ setFloor(floorId: string): void;
889
+ /** Toggle colorblind-safe rendering at runtime (see the `colorblindSafe` prop). */
890
+ setColorblindSafe(on: boolean): void;
891
+ /** Zoom in one step (same increment as the wheel/pinch gesture). */
892
+ zoomIn(): void;
893
+ /** Zoom out one step. */
894
+ zoomOut(): void;
895
+ /** Reset the camera so the whole chart fits the container. */
896
+ zoomToFit(): void;
897
+ /**
898
+ * Re-acquire the buyer access session after your app re-authorizes the buyer
899
+ * (Sales Channels). Resolves false when the chart is not access-scoped.
900
+ */
901
+ refreshAccess(): Promise<boolean>;
902
+ }
903
+ /**
904
+ * Every method a wrapper must forward. The wrappers build their handle by
905
+ * iterating this, so the list IS the contract rather than a description of it.
906
+ */
907
+ declare const SEATING_CHART_HANDLE_METHODS: readonly ["hold", "resumeHold", "getCurrentHold", "getGAAreas", "holdGA", "bestAvailable", "release", "releaseLabels", "getSelection", "setSeatTier", "getFloors", "setFloor", "setColorblindSafe", "zoomIn", "zoomOut", "zoomToFit", "refreshAccess"];
908
+ type SeatingChartHandleMethod = (typeof SEATING_CHART_HANDLE_METHODS)[number];
909
+ /**
910
+ * Build the forwarding object every wrapper exposes.
911
+ *
912
+ * `getInstance` is a function rather than the instance itself: a wrapper's
913
+ * handle is created ONCE and must keep working across rebuilds, so it has to
914
+ * read the current chart on each call instead of capturing one.
915
+ */
916
+ declare function bindSeatingChartHandle(getInstance: () => SeatingChart | null): SeatingChartHandle;
917
+ /**
918
+ * Props whose change means a DIFFERENT chart, so the wrapper tears the canvas
919
+ * down and builds a new one. Everything else is read live: a parent re-render
920
+ * must never destroy a canvas mid-selection.
921
+ *
922
+ * `initialView` and `errorDisplay` are here because they are read once at
923
+ * construction and never re-applied — leaving them out does not make them
924
+ * "live", it makes them silently ignored after mount, which is the worse of the
925
+ * two behaviours. React already treated them this way; Vue and Angular did not
926
+ * expose them at all.
927
+ */
928
+ declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
929
+ type SeatingChartIdentityProp = (typeof SEATING_CHART_IDENTITY_PROPS)[number];
930
+ /** Non-callback options a wrapper accepts as props/inputs and passes straight through. */
931
+ declare const SEATING_CHART_VALUE_PROPS: readonly ["event", "apiBase", "maxSelection", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay", "messages", "seatTooltip", "buyerAccessTokenProvider", "buyerAccessToken"];
932
+ type SeatingChartValueProp = (typeof SEATING_CHART_VALUE_PROPS)[number];
933
+ /** Every callback option a wrapper wires to its own event mechanism. */
934
+ declare const SEATING_CHART_CALLBACK_PROPS: readonly ["onSelectionChange", "onHold", "onHoldRestored", "onHoldExpired", "onGAClick", "onError", "onDeckTap", "onHint", "onSeatHover", "onAccessExpired", "onAccessUnavailable", "onSelectedObjectUnavailable"];
935
+ type SeatingChartCallbackProp = (typeof SEATING_CHART_CALLBACK_PROPS)[number];
936
+ /** The value half of the options, as a wrapper holds it. */
937
+ type SeatingChartValues = Pick<SeatingChartOptions, SeatingChartValueProp>;
938
+ /** The callback half, already bound to the wrapper's event mechanism. */
939
+ type SeatingChartCallbacks = Pick<SeatingChartOptions, SeatingChartCallbackProp>;
940
+ /**
941
+ * Assemble the options literal for `new SeatingChart(...)`.
942
+ *
943
+ * Picks by the lists above rather than spreading, so a wrapper cannot pass a
944
+ * stray prop of its own (React's `className`/`style`, Vue's attrs) into the
945
+ * SDK, and cannot forget one either.
946
+ */
947
+ declare function buildSeatingChartOptions(container: HTMLElement, values: Partial<SeatingChartValues>, callbacks: SeatingChartCallbacks): SeatingChartOptions;
948
+
823
949
  /**
824
950
  * A secure, framework-neutral host for the SeatLayer chart Designer.
825
951
  *
@@ -1144,24 +1270,14 @@ declare function parseTicketOfferAvailability(body: unknown): TicketOfferAvailab
1144
1270
  declare function ticketOfferPrices(availability: TicketOfferAvailability | null): Record<string, number>;
1145
1271
 
1146
1272
  /**
1147
- * SeatPicker — the full buyer experience as a widget.
1148
- *
1149
- * Where `SeatingChart` is canvas-only, SeatPicker owns the complete chrome
1150
- * from the canonical UX contract: branded header,
1151
- * live price panel, selection tray with GA steppers, hold countdown, snipe
1152
- * toasts and expiry recovery — all on top of the shared PickerController, so
1153
- * every host gets the whole experience with one mount.
1273
+ * pickerTypes — the SeatPicker public option/theme/pricing contract, plus the
1274
+ * two internal shapes (`SectionLike`, `PriceBand`) the picker reads off a
1275
+ * ChartDoc.
1154
1276
  *
1155
- * Render contexts (owner requirement): the SAME widget adapts to a full-screen
1156
- * takeover, an inline <div> in a content page, or a popup — breakpoints key
1157
- * off the CONTAINER via ResizeObserver, never the viewport. `SeatPicker.open()`
1158
- * mounts a document-level modal (scrim, ESC, focus restore) in one call.
1159
- *
1160
- * Theming (owner requirement): org account customization flows automatically —
1161
- * the chart payload's ChartTheme (accent, accentInk, logoUrl, brand name,
1162
- * fontFamily, …) seeds the look; the host `theme` option overrides any subset;
1163
- * and every value lands as a `--sl-*` CSS custom property on the widget root
1164
- * so plain host CSS can restyle too.
1277
+ * Split out of SeatPicker.ts verbatim; these declarations are the widget's
1278
+ * published API surface, so SeatPicker.ts re-exports every public name from
1279
+ * here and `@seatlayer/js`'s entry (src/index.ts) is untouched. Types only —
1280
+ * nothing in this file emits a byte of runtime JavaScript.
1165
1281
  */
1166
1282
 
1167
1283
  /**
@@ -1362,8 +1478,10 @@ interface SeatPickerOptions {
1362
1478
  seatId?: string;
1363
1479
  }) => void;
1364
1480
  /**
1365
- * Optional analytics sink for the widget's own journey events. Currently emits
1366
- * the 3D venue-view journey (`3d_opened`, `3d_orbit_engaged`, `3d_seat_picked`,
1481
+ * Optional analytics sink for the widget's journey and performance events.
1482
+ * Emits `chart_rendered` once per successful load with total time, step
1483
+ * timings and anonymous chart-size counts, plus the 3D venue-view journey
1484
+ * (`3d_opened`, `3d_orbit_engaged`, `3d_seat_picked`,
1367
1485
  * `3d_cinematic_played`/`_skipped`/`_cancelled`, panorama outcomes, and WebGL
1368
1486
  * context loss/recovery)
1369
1487
  * with `{ surface: 'buyer' }` merged into the props. A throwing sink never
@@ -1581,6 +1699,28 @@ interface SeatPickerOptions {
1581
1699
  onSelectedObjectUnavailable?: (event: SelectedObjectUnavailableEvent) => void;
1582
1700
  onError?: (err: unknown) => void;
1583
1701
  }
1702
+
1703
+ /**
1704
+ * SeatPicker — the full buyer experience as a widget.
1705
+ *
1706
+ * Where `SeatingChart` is canvas-only, SeatPicker owns the complete chrome
1707
+ * from the canonical UX contract: branded header,
1708
+ * live price panel, selection tray with GA steppers, hold countdown, snipe
1709
+ * toasts and expiry recovery — all on top of the shared PickerController, so
1710
+ * every host gets the whole experience with one mount.
1711
+ *
1712
+ * Render contexts (owner requirement): the SAME widget adapts to a full-screen
1713
+ * takeover, an inline <div> in a content page, or a popup — breakpoints key
1714
+ * off the CONTAINER via ResizeObserver, never the viewport. `SeatPicker.open()`
1715
+ * mounts a document-level modal (scrim, ESC, focus restore) in one call.
1716
+ *
1717
+ * Theming (owner requirement): org account customization flows automatically —
1718
+ * the chart payload's ChartTheme (accent, accentInk, logoUrl, brand name,
1719
+ * fontFamily, …) seeds the look; the host `theme` option overrides any subset;
1720
+ * and every value lands as a `--sl-*` CSS custom property on the widget root
1721
+ * so plain host CSS can restyle too.
1722
+ */
1723
+
1584
1724
  declare class SeatPicker {
1585
1725
  private readonly opts;
1586
1726
  private readonly api;
@@ -1691,7 +1831,8 @@ declare class SeatPicker {
1691
1831
  private view3dTargetSeatId;
1692
1832
  /** Inspection-only comparison. These ids never represent cart selection. */
1693
1833
  private view3dCompareSeatIds;
1694
- private view3dCompareChip;
1834
+ /** The saved-seat comparison chip — owned by pickerView3dNav.ts. */
1835
+ private readonly view3dCompareChip;
1695
1836
  private view3dCompareEl;
1696
1837
  private view3dCompareCleanup;
1697
1838
  private view3dPassportEl;
@@ -1703,9 +1844,8 @@ declare class SeatPicker {
1703
1844
  /** Supersedes an older authored-view byte request when another seat is opened. */
1704
1845
  private seatViewGen;
1705
1846
  private allSeatsCache;
1706
- private miniCanvas;
1707
- private miniBase;
1708
- private miniTf;
1847
+ private minimap;
1848
+ private pickerLayoutSize;
1709
1849
  private priceBandKeys;
1710
1850
  private focusedCatKey;
1711
1851
  /** "Hide limited-view seats" — mirrored into 3D by `seatState3dFor`. */
@@ -1757,27 +1897,6 @@ declare class SeatPicker {
1757
1897
  * (OV-52)
1758
1898
  */
1759
1899
  private confirmThumbHtml;
1760
- /** "See it in 3D" (2D) / "View from this seat" (already in 3D) action for the
1761
- * confirm card. Only when 3D is available — the purchase-moment bridge into
1762
- * the cinematic that reaches buyers who never press the Map | 3D toggle. */
1763
- private see3dConfirmHtml;
1764
- /** Minimal HTML/attribute escaper for buyer-authored commercial text (notes). */
1765
- private escCx;
1766
- /** Localized "Restricted view" / "Obstructed view" label for a seat's flags,
1767
- * or '' when neither is set. Restricted takes precedence when both are on. */
1768
- private limitedViewLabel;
1769
- /**
1770
- * Commercial flags block for the confirm/detail surface: a subtle ★ Premium
1771
- * tag plus an amber ◐ limited-view caution (with the organizer's note when
1772
- * present). '' when the seat carries no surfaced commercial flag.
1773
- */
1774
- private commercialConfirmHtml;
1775
- /** Small ◐ limited-view marker for a cart chip; title/aria uses the seat's
1776
- * note when present, else the generic view label. '' for a clear-view seat. */
1777
- private commercialChipMarker;
1778
- private wheelchairProvisionLabel;
1779
- private wheelchairConfirmHtml;
1780
- private wheelchairChipMarker;
1781
1900
  /** True when the picker is rendered inside an iframe (snippet embed at /e/:key). */
1782
1901
  private isFramed;
1783
1902
  /**
@@ -1952,23 +2071,14 @@ declare class SeatPicker {
1952
2071
  private restoreRememberedHold;
1953
2072
  /** Section-bearing objects on the active floor (single-floor → doc.objects). */
1954
2073
  private activeFloorObjects;
1955
- /**
1956
- * Build the overview minimap: a static venue thumbnail (section outlines, or
1957
- * seat dots when the chart has no sections) with the live viewport rectangle
1958
- * drawn on top. The rect tracks pan/zoom via the constructor's onViewChange.
1959
- */
2074
+ /** Attach the F3 overview minimap into the bottom-left chrome region. */
1960
2075
  private buildMinimap;
1961
- /** Repaint the static overview + rect (floor switch, live open/close). */
1962
- private refreshMinimap;
1963
- /** Paint the venue overview into the offscreen base canvas. */
1964
- private drawMinimapStatic;
1965
- /** Blit the base overview, then stroke the current viewport rectangle on top. */
1966
- private drawMinimapRect;
1967
- /** Minimap click → focus the section under the point (or overview on a miss). */
1968
- private minimapJump;
1969
2076
  /** Effective display price of a category: host pricing override → first tier → base. */
1970
2077
  private catPrice;
1971
- /** Derive price bands: one chip per distinct price (≤5), else quantile ranges. */
2078
+ /** Complete buyer-visible price range, including every ticket tier and
2079
+ * tier-specific host override. */
2080
+ private catPriceRange;
2081
+ /** Derive category price bands without hiding the upper end of tier ranges. */
1972
2082
  private priceBands;
1973
2083
  /** Build the compact price selector in the panel header. Choosing a band both
1974
2084
  * filters availability and smoothly frames the matching seats on the map. */
@@ -1991,6 +2101,16 @@ declare class SeatPicker {
1991
2101
  private syncFloors;
1992
2102
  /** Show (or clear, on null) the tapped-section summary card. */
1993
2103
  private showSectionCard;
2104
+ /**
2105
+ * Open sections next to the focused one, in authored order.
2106
+ *
2107
+ * This is intentionally a circular ring: arena sections are usually authored
2108
+ * clockwise, so moving past the last section should reach the first without
2109
+ * forcing a buyer back through the overview level. Closed or empty sections
2110
+ * are skipped because focusing one cannot produce a useful buyer card.
2111
+ */
2112
+ private sectionNeighbours;
2113
+ private wireSectionNavigation;
1994
2114
  /**
1995
2115
  * Render the section card in the form the layout + state want: expanded card
1996
2116
  * or slim pill in the top-center anchor region (wide), or a compact strip in
@@ -2084,20 +2204,11 @@ declare class SeatPicker {
2084
2204
  /** A live delta took one of OUR selected (not yet held) seats — evict + tell the buyer. */
2085
2205
  private evictTakenSelections;
2086
2206
  private syncTray;
2087
- /**
2088
- * The bottom-sheet's collapsed one-liner. Called from syncTray on every
2089
- * repaint AND from setCtaPhase: while the widget is securing seats or
2090
- * opening checkout, the peek is the phone buyer's ONLY line of sight, and a
2091
- * pill still reading "Continue" at the moment money is about to move is the
2092
- * emotional trapdoor the audit flagged. The phase lines restate what is
2093
- * secured and promise no charge yet.
2094
- */
2207
+ /** Paint the bottom-sheet's collapsed one-liner (pickerTray.ts builds it). */
2095
2208
  private renderPeek;
2096
2209
  private removeHeldLabel;
2097
2210
  private handleChangeSeats;
2098
2211
  private handleCta;
2099
- /** "Yours for m:ss — you won't be charged yet." — the hold note's promise. */
2100
- private holdReassuranceText;
2101
2212
  private startHoldTimer;
2102
2213
  private stopHoldTimer;
2103
2214
  /** Show/refresh (or hide) the "Need more time?" prompt with the live seconds left. */
@@ -2161,7 +2272,6 @@ declare class SeatPicker {
2161
2272
  /** Buyer-facing type word for the row/table key label — the designer's
2162
2273
  * per-object "Displayed type" override, or the default "Row". */
2163
2274
  private rowTypeWord;
2164
- private rowShort;
2165
2275
  private updateTooltip;
2166
2276
  getSelection(): PickerSeat[];
2167
2277
  /**
@@ -2260,45 +2370,26 @@ declare class SeatPicker {
2260
2370
  /** Build the view-from-seat panorama the cinematic dissolves into — reuses the
2261
2371
  * exact input path as the 2D `openSeatView` (organizer photo, else generated). */
2262
2372
  private seatViewFor3d;
2263
- /** Route the module's decoupled analytics into the host callback, tagged buyer. */
2373
+ /** Route decoupled analytics into the host callback, tagged buyer. */
2374
+ private emitAnalytics;
2264
2375
  private emit3dAnalytics;
2265
2376
  /** A 3D seat tap runs the SAME selection path as a 2D tap: toggle through the
2266
2377
  * controller, then raise the shared confirm card (bottom-sheeted in 3D). */
2267
2378
  private onView3dSeatPick;
2268
- /** Explain a visible-but-unselectable 3D seat without entering the booking
2269
- * flow. Category colour remains visible in the venue; this card names the
2270
- * availability state explicitly so yellow never has to carry both meanings. */
2379
+ /** Explain a 3D seat that INVENTORY refuses — never one the buyer's own
2380
+ * filters merely dimmed, which stays buyable exactly as it is in 2D. Category
2381
+ * colour remains visible in the venue; this card names the availability state
2382
+ * explicitly so yellow never has to carry both meanings. */
2271
2383
  private showUnavailable3dSeat;
2272
2384
  private dismissUnavailable3dSeat;
2273
- /** Comparison belongs to inspection, never selection. The confirm candidate
2274
- * remains excluded from checkout until Select; saving it releases that
2275
- * candidate before any comparison state is created. */
2276
- private view3dCompareConfirmHtml;
2277
- private seatConfidenceConfirmHtml;
2278
2385
  private saveView3dComparisonSeat;
2279
2386
  private clearView3dComparison;
2280
- private syncView3dCompareChip;
2281
2387
  private view3dComparisonSnapshot;
2282
2388
  private openSeatConfidencePassport;
2283
2389
  private closeSeatConfidencePassport;
2284
2390
  private openView3dComparison;
2285
2391
  private closeView3dComparison;
2286
2392
  private selectComparedSeat;
2287
- /**
2288
- * The venue-navigation rail inside 3D: levels and areas.
2289
- *
2290
- * In 2D a buyer moves through the venue by floor switcher and by the LOD
2291
- * rungs. Both are hidden while immersed, and the 3D module's own chips only
2292
- * cover "go home" and "see the 360" — so on a multi-floor or multi-zone chart
2293
- * the buyer entered 3D and LOST the ability to reach the level or area they
2294
- * were booking. The camera moves for both already exist on the handle
2295
- * (`focusFloor` / `focusZone`); this is the surface that offers them.
2296
- *
2297
- * Levels are a TOGGLE (a floor stays isolated until you pick another), areas
2298
- * are an ACTION (the camera flies there and you are then free to orbit), which
2299
- * is why only the level pills carry a pressed state.
2300
- */
2301
- private buildView3dNav;
2302
2393
  private enter3d;
2303
2394
  private exit3d;
2304
2395
  /** Current active/restored hold reflected in the tray. */
@@ -2377,4 +2468,4 @@ interface AttachPickerFrameOptions {
2377
2468
  */
2378
2469
  declare function attachPickerFrame(iframe: HTMLIFrameElement, opts?: AttachPickerFrameOptions): () => void;
2379
2470
 
2380
- export { ApiError, type AttachPickerFrameOptions, type BestAvailableResult, BuyerAccessContext, type BuyerAccessExpiredEvent, type BuyerAccessRefreshReason, type BuyerAccessToken, type BuyerAccessTokenProvider, BuyerAccessUnavailableError, type BuyerAccessUnavailableEvent, type BuyerAccessUnavailableReason, BuyerRealtimeClient, type BuyerRealtimeOptions, type CheckoutHandoff, type CheckoutLineItem, type CheckoutSessionResult, EmbeddedDesigner, type EmbeddedDesignerEventType, type EmbeddedDesignerMessage, type EmbeddedDesignerOptions, type GAAreaAvailability, type HoldConflict, type HoldLineItem, type HoldResult, type OrderStatusResult, type PaymentOptionsReason, type PaymentOptionsResult, type PaymentProviderName, type Projection, type PubApiOptions, type RealtimeSink, type ResumedHoldResult, type SaleState, SeatPicker, type SeatPickerBestAvailableOptions, type SeatPickerBuyerView, type SeatPickerBuyerViewOptions, type SeatPickerOptions, type SeatPickerPricing, type SeatPickerTheme, SeatingChart, type SeatingChartOptions, type SelectedObjectUnavailableEvent, type SelectedSeat, type StatusChange, type SubscribeTicket, type TicketOfferAvailability, type TicketOfferPrice, type TicketOfferSummary, attachPickerFrame, createBuyerAccessContext, createControllerSink, parseTicketOfferAvailability, ticketOfferPrices };
2471
+ export { ApiError, type AttachPickerFrameOptions, type BestAvailableResult, BuyerAccessContext, type BuyerAccessExpiredEvent, type BuyerAccessRefreshReason, type BuyerAccessToken, type BuyerAccessTokenProvider, BuyerAccessUnavailableError, type BuyerAccessUnavailableEvent, type BuyerAccessUnavailableReason, BuyerRealtimeClient, type BuyerRealtimeOptions, type CheckoutHandoff, type CheckoutLineItem, type CheckoutSessionResult, EmbeddedDesigner, type EmbeddedDesignerEventType, type EmbeddedDesignerMessage, type EmbeddedDesignerOptions, type GAAreaAvailability, type HoldConflict, type HoldLineItem, type HoldResult, type OrderStatusResult, type PaymentOptionsReason, type PaymentOptionsResult, type PaymentProviderName, type Projection, type PubApiOptions, type RealtimeSink, type ResumedHoldResult, SEATING_CHART_CALLBACK_PROPS, SEATING_CHART_HANDLE_METHODS, SEATING_CHART_IDENTITY_PROPS, SEATING_CHART_VALUE_PROPS, type SaleState, SeatPicker, type SeatPickerBestAvailableOptions, type SeatPickerBuyerView, type SeatPickerBuyerViewOptions, type SeatPickerOptions, type SeatPickerPricing, type SeatPickerTheme, SeatingChart, type SeatingChartCallbackProp, type SeatingChartCallbacks, type SeatingChartHandle, type SeatingChartHandleMethod, type SeatingChartIdentityProp, type SeatingChartOptions, type SeatingChartValueProp, type SeatingChartValues, type SelectedObjectUnavailableEvent, type SelectedSeat, type StatusChange, type SubscribeTicket, type TicketOfferAvailability, type TicketOfferPrice, type TicketOfferSummary, attachPickerFrame, bindSeatingChartHandle, buildSeatingChartOptions, createBuyerAccessContext, createControllerSink, parseTicketOfferAvailability, ticketOfferPrices };