@seatlayer/js 0.81.0 → 0.82.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, PickerGAArea, PickerMapTheme, PickerTransport, PickerSelectionValidator, RendererViewMode, PickerSelectionValidity, ChartTheme, AccessibilityType, FloorLabelStyle, LodRung, SectionSummary, PickerAccessNeed, SeatHoverDetails, AccessibleSectionStep, AvailabilityRefreshOutcome, PickerController, ExpandedSeat, TableSelectionDetails, SeatStatus } from '@seatlayer/core';
1
+ import { PickerSeat, PickerGAArea, PickerMapTheme, PickerTransport, PickerSelectionValidator, RendererViewMode, PickerSelectionValidity, ChartTheme, AccessibilityType, FloorLabelStyle, LodRung, SectionSummary, PickerAccessNeed, SeatHoverDetails, AccessibleSectionStep, AvailabilityRefreshOutcome, PickerController, ExpandedSeat, TableSelectionDetails } from '@seatlayer/core';
2
2
  export { ExpandedSeat, PickerMapTheme, PickerSelectionValidator, PickerSelectionValidity, PickerSelectionViolation, RendererViewMode, SeatHoverDetails } from '@seatlayer/core';
3
3
  import { T as ThemeMode } from './channelsMode-goczEzyt.cjs';
4
4
  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 EventCategoryAssignmentResult, M as EventScopedManageToken, N as EventTableBookingMode, O as EventTableBookingResult, P as IntentSwitchBlockedDetails, Q as InventoryBooking, R as InventoryBookingActivity, S as InventoryBookingDetail, U as InventoryBookingObject, V as InventoryBookingState, W as InventoryBookingsPage, X as InventoryBookingsQuery, Y as LogEntry, Z as LogPage, _ as ManageApi, $ as ManageApiError, a0 as ReportByStatus, a1 as ReportCategoryMeta, a2 as ReportCategoryRow, a3 as ReportResult, a4 as SeatManager, a5 as SeatManagerActionResult, a6 as SeatManagerActivity, a7 as SeatManagerCapability, a8 as SeatManagerConnection, a9 as SeatManagerFilteredSection, aa as SeatManagerMode, ab as SeatManagerOptions, ac as SeatManagerSelectionValidity, ad as SeatManagerTallies, ae as SelectionSourceRow } from './channelsMode-goczEzyt.cjs';
@@ -1526,6 +1526,15 @@ interface SeatingChartPickerState {
1526
1526
  rung: LodRung;
1527
1527
  /** True only when one semantic zoom-out step can reveal more of the venue. */
1528
1528
  canZoomOut: boolean;
1529
+ /**
1530
+ * Is the camera exactly at the whole-venue fit? Present only when the
1531
+ * renderer can answer; a host that reads `canZoomOut` alone re-creates the
1532
+ * dead "−" between the fit and the seats rung (web fix, 2026-09-05), so a
1533
+ * native host should dim its "−"/"fit" controls on THIS, when present.
1534
+ */
1535
+ atVenueFit?: boolean;
1536
+ /** False only at the zoom ceiling. Present only when the renderer can answer. */
1537
+ canZoomIn?: boolean;
1529
1538
  focusedSectionId: string | null;
1530
1539
  focusedSection: SectionSummary | null;
1531
1540
  viewMode: RendererViewMode;
@@ -2711,9 +2720,11 @@ declare class EmbeddedDesigner {
2711
2720
  /**
2712
2721
  * pickerLegend — the two places the picker explains its colours.
2713
2722
  *
2714
- * The price LIST (`.sl-price-row`) is the detail view: colour, name, how many
2715
- * are left, the offer name, the exact price or spread. It lives in the side
2716
- * panel on desktop and behind a disclosure inside the bottom sheet on a phone.
2723
+ * The price LIST (`.sl-price-row`) is the detail view: colour, name, the offer
2724
+ * name, the exact price or spread. (It no longer prints how many are left —
2725
+ * owner call 2026-09-05 — though it still reads the count to dim a sold-out
2726
+ * row.) It lives in the side panel on desktop and behind a disclosure inside
2727
+ * the bottom sheet on a phone.
2717
2728
  *
2718
2729
  * The price RAIL (`.sl-rc`) is the phone's always-visible legend: colour and
2719
2730
  * price, nothing else, pinned above the map. It exists because on a narrow
@@ -3594,6 +3605,24 @@ declare class SeatPicker implements GaPromptPicker {
3594
3605
  /** @internal */ webMcpHost(holds: boolean): WebMcpHost;
3595
3606
  /** Wire host chrome after the skeleton exists and before the renderer owns its map host. */
3596
3607
  private wireBuyerShell;
3608
+ /**
3609
+ * Open or collapse the phone sheet, and say so.
3610
+ *
3611
+ * The one place `data-sheet` is written together with the chevron's
3612
+ * `aria-expanded` and its label: the two used to drift, and a chevron that
3613
+ * says "Open ticket panel" over an open panel is worse than no label at all.
3614
+ *
3615
+ * @internal
3616
+ */
3617
+ setSheetOpen(open: boolean): void;
3618
+ /**
3619
+ * The empty phone cart's way in to the best-seats form.
3620
+ *
3621
+ * Still a FORM, not a verb: it reveals quantity/type/zone and picks nothing
3622
+ * for anyone. Opening the sheet is not the same as arriving at the card
3623
+ * either — on a short phone the tray can open scrolled past it.
3624
+ */
3625
+ private openBestSeatsForm;
3597
3626
  /**
3598
3627
  * Put the phone sheet back to its peek.
3599
3628
  *
@@ -3635,8 +3664,13 @@ declare class SeatPicker implements GaPromptPicker {
3635
3664
  setPanelCollapsed(collapsed: boolean): void;
3636
3665
  /** Idempotent DOM apply, also run on every layout flip (inert must lift on narrow). */
3637
3666
  private applyPanelCollapsed;
3638
- /** Build the ♿ menu (filter + limited view + palette) into the map's
3639
- * bottom-left corner. The menu owns its own state machine; see the module. */
3667
+ /**
3668
+ * Build the ♿ menu (filter + limited view + palette) as the TOP DISC of the
3669
+ * right-hand control column (owner call 2026-09-06). It used to stand alone
3670
+ * in the map's bottom-left corner, which is the minimap's corner, and read
3671
+ * as a stray control facing a stack of them. The menu owns its own state
3672
+ * machine and docks itself first in the column; see the module.
3673
+ */
3640
3674
  private buildAccessibilityMenu;
3641
3675
  /**
3642
3676
  * Jump to the seats rung when a dimming filter turns on — the dimming only
@@ -3809,18 +3843,20 @@ declare class SeatPicker implements GaPromptPicker {
3809
3843
  /** Reflect the engine's current LOD rung onto the pill group. */
3810
3844
  /** @internal */ syncRung(): void;
3811
3845
  /**
3812
- * The phone's ONE map control, and whether it still has anywhere to go.
3846
+ * The phone's back-out controls, and whether they still have anywhere to go.
3813
3847
  *
3814
- * On narrow the "fit to screen" disc is gone (CSS) and "−" is the whole
3815
- * back-out story: one tap to the section the buyer drilled into, one more to
3816
- * the whole venue. The ladder itself is `mapZoomOutStep`; this only dresses
3817
- * it, and only on narrow — the wide layout keeps its "+", "−" and ⛶ exactly
3818
- * as they were.
3848
+ * On narrow the corner carries "+", "−" and the fit disc (owner call
3849
+ * 2026-09-05). "−" is the ladder — one tap to the section the buyer drilled
3850
+ * into, one more to the whole venue — and the fit disc is that last step on
3851
+ * its own. The ladder itself is `mapZoomOutStep`; this only dresses it, and
3852
+ * only on narrow: wide keeps "+" and "−" undimmed and never shows the disc.
3819
3853
  *
3820
- * DIMMED, NOT GONE. The control used to appear only once the buyer was deep
3854
+ * DIMMED, NOT GONE. The controls used to appear only once the buyer was deep
3821
3855
  * enough to be lost, so the corner grew and shrank a button underneath their
3822
3856
  * thumb. A control that stays put and plainly cannot be pressed says "you
3823
- * are already looking at everything" without moving the target.
3857
+ * are already looking at everything" without moving the target — as long as
3858
+ * it dims only when that is TRUE, which is why the reading is the engine's
3859
+ * fit pose and not a guess from whether seats happen to be on screen.
3824
3860
  */
3825
3861
  private syncMapStepBack;
3826
3862
  /** @internal */ syncProjection(): void;
@@ -3989,8 +4025,6 @@ declare class SeatPicker implements GaPromptPicker {
3989
4025
  /** @internal */ scheduleFit(): void;
3990
4026
  private fitTranslatedRows;
3991
4027
  private emitSelectionValidity;
3992
- /** Paint the bottom-sheet's collapsed one-liner (pickerTray.ts builds it). */
3993
- /** @internal */ renderPeek(count: number, total: number, pendingCount: number, bump?: boolean): void;
3994
4028
  /**
3995
4029
  * Release one buyer-visible held LINE. That is one label for a seat, and every
3996
4030
  * unit label behind a grouped GA line — a buyer who presses × on
@@ -4026,6 +4060,29 @@ declare class SeatPicker implements GaPromptPicker {
4026
4060
  private showBooked;
4027
4061
  /** Take the confirmation down and give the map back. The booking stands. */
4028
4062
  private dismissBooked;
4063
+ /**
4064
+ * The seats are BOUGHT. Put the picker back to the state a buyer who has
4065
+ * just arrived would find.
4066
+ *
4067
+ * "Back to map" used to take down the overlay and nothing else, and what it
4068
+ * uncovered was the cart that had paid for the booking: the same tickets
4069
+ * still listed (with padlocks, because the labels now read `booked`), the
4070
+ * same total in the footer, and a CTA frozen on "Opening secure checkout…"
4071
+ * with its spinner — a control that could never finish, over a hold that no
4072
+ * longer existed. The seats still painted as the buyer's own selection, ✕ on
4073
+ * a row did nothing (there is no hold left to release from), and any seat
4074
+ * added next was totalled together with tickets that were already paid for.
4075
+ *
4076
+ * A settled hold is not a hold, so everything that was showing one goes: the
4077
+ * hold and its handoff, the session's remembered hold id, the timer, the
4078
+ * selection behind the cart (which is what repaints those seats as inert
4079
+ * `booked` rather than as picks), the GA quantities, and the CTA phase.
4080
+ * `showBooked` has already fired `onBooked` and stopped the timer — this is
4081
+ * about the surface it left standing, and it runs on the way OUT of the
4082
+ * overlay, so a host that navigates away on `onBooked` (DesiPass) never
4083
+ * reaches it.
4084
+ */
4085
+ private resetAfterBooking;
4029
4086
  /**
4030
4087
  * A Performance Group hold settled, told to us by the WRAPPER rather than by
4031
4088
  * a socket (§8: this surface has no realtime feed). `detectBooked` waits for
@@ -4105,18 +4162,10 @@ declare class SeatPicker implements GaPromptPicker {
4105
4162
  * group whose wrapper did not supply the nights.
4106
4163
  */
4107
4164
  private nightStripFor;
4108
- /**
4109
- * Why a tapped seat cannot be taken, or '' when it can.
4110
- *
4111
- * Only the PRESS path asks for this — a mouse already has the status tag and
4112
- * a card that follows the pointer, so a sentence under every hover would be
4113
- * noise. A partly-available group seat is excluded: its night strip already
4114
- * names the exact nights that block it, and "already booked" would flatly
4115
- * contradict the row underneath saying it is free on Friday.
4116
- */
4117
- private unavailableReason;
4118
4165
  private unpinTooltip;
4119
4166
  private handleMapPointerDown;
4167
+ /** Close every open ⓘ popover, except `keep`. */
4168
+ private closeInfoPops;
4120
4169
  private updateTooltip;
4121
4170
  /**
4122
4171
  * Push the wrapper's current seat marks at the renderer.
@@ -4305,8 +4354,6 @@ declare class SeatPicker implements GaPromptPicker {
4305
4354
  /** @internal */ seatViewFor3d(seatId: string): Promise<SeatView | null>;
4306
4355
  /** @internal */ onView3dSeatPick(seatId: string): void;
4307
4356
  /** @internal */ seatViewCaption(seatId: string): string;
4308
- /** @internal */ showUnavailable3dSeat(seat: ExpandedSeat, visualState: SeatState3D, status: Exclude<SeatStatus, 'free'>): void;
4309
- /** @internal */ dismissUnavailable3dSeat(): void;
4310
4357
  private saveView3dComparisonSeat;
4311
4358
  /** @internal */ clearView3dComparison(): void;
4312
4359
  /** @internal */ view3dComparisonSnapshot(seatId: string): {
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { PickerSeat, PickerGAArea, PickerMapTheme, PickerTransport, PickerSelectionValidator, RendererViewMode, PickerSelectionValidity, ChartTheme, AccessibilityType, FloorLabelStyle, LodRung, SectionSummary, PickerAccessNeed, SeatHoverDetails, AccessibleSectionStep, AvailabilityRefreshOutcome, PickerController, ExpandedSeat, TableSelectionDetails, SeatStatus } from '@seatlayer/core';
1
+ import { PickerSeat, PickerGAArea, PickerMapTheme, PickerTransport, PickerSelectionValidator, RendererViewMode, PickerSelectionValidity, ChartTheme, AccessibilityType, FloorLabelStyle, LodRung, SectionSummary, PickerAccessNeed, SeatHoverDetails, AccessibleSectionStep, AvailabilityRefreshOutcome, PickerController, ExpandedSeat, TableSelectionDetails } from '@seatlayer/core';
2
2
  export { ExpandedSeat, PickerMapTheme, PickerSelectionValidator, PickerSelectionValidity, PickerSelectionViolation, RendererViewMode, SeatHoverDetails } from '@seatlayer/core';
3
3
  import { T as ThemeMode } from './channelsMode-goczEzyt.js';
4
4
  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 EventCategoryAssignmentResult, M as EventScopedManageToken, N as EventTableBookingMode, O as EventTableBookingResult, P as IntentSwitchBlockedDetails, Q as InventoryBooking, R as InventoryBookingActivity, S as InventoryBookingDetail, U as InventoryBookingObject, V as InventoryBookingState, W as InventoryBookingsPage, X as InventoryBookingsQuery, Y as LogEntry, Z as LogPage, _ as ManageApi, $ as ManageApiError, a0 as ReportByStatus, a1 as ReportCategoryMeta, a2 as ReportCategoryRow, a3 as ReportResult, a4 as SeatManager, a5 as SeatManagerActionResult, a6 as SeatManagerActivity, a7 as SeatManagerCapability, a8 as SeatManagerConnection, a9 as SeatManagerFilteredSection, aa as SeatManagerMode, ab as SeatManagerOptions, ac as SeatManagerSelectionValidity, ad as SeatManagerTallies, ae as SelectionSourceRow } from './channelsMode-goczEzyt.js';
@@ -1526,6 +1526,15 @@ interface SeatingChartPickerState {
1526
1526
  rung: LodRung;
1527
1527
  /** True only when one semantic zoom-out step can reveal more of the venue. */
1528
1528
  canZoomOut: boolean;
1529
+ /**
1530
+ * Is the camera exactly at the whole-venue fit? Present only when the
1531
+ * renderer can answer; a host that reads `canZoomOut` alone re-creates the
1532
+ * dead "−" between the fit and the seats rung (web fix, 2026-09-05), so a
1533
+ * native host should dim its "−"/"fit" controls on THIS, when present.
1534
+ */
1535
+ atVenueFit?: boolean;
1536
+ /** False only at the zoom ceiling. Present only when the renderer can answer. */
1537
+ canZoomIn?: boolean;
1529
1538
  focusedSectionId: string | null;
1530
1539
  focusedSection: SectionSummary | null;
1531
1540
  viewMode: RendererViewMode;
@@ -2711,9 +2720,11 @@ declare class EmbeddedDesigner {
2711
2720
  /**
2712
2721
  * pickerLegend — the two places the picker explains its colours.
2713
2722
  *
2714
- * The price LIST (`.sl-price-row`) is the detail view: colour, name, how many
2715
- * are left, the offer name, the exact price or spread. It lives in the side
2716
- * panel on desktop and behind a disclosure inside the bottom sheet on a phone.
2723
+ * The price LIST (`.sl-price-row`) is the detail view: colour, name, the offer
2724
+ * name, the exact price or spread. (It no longer prints how many are left —
2725
+ * owner call 2026-09-05 — though it still reads the count to dim a sold-out
2726
+ * row.) It lives in the side panel on desktop and behind a disclosure inside
2727
+ * the bottom sheet on a phone.
2717
2728
  *
2718
2729
  * The price RAIL (`.sl-rc`) is the phone's always-visible legend: colour and
2719
2730
  * price, nothing else, pinned above the map. It exists because on a narrow
@@ -3594,6 +3605,24 @@ declare class SeatPicker implements GaPromptPicker {
3594
3605
  /** @internal */ webMcpHost(holds: boolean): WebMcpHost;
3595
3606
  /** Wire host chrome after the skeleton exists and before the renderer owns its map host. */
3596
3607
  private wireBuyerShell;
3608
+ /**
3609
+ * Open or collapse the phone sheet, and say so.
3610
+ *
3611
+ * The one place `data-sheet` is written together with the chevron's
3612
+ * `aria-expanded` and its label: the two used to drift, and a chevron that
3613
+ * says "Open ticket panel" over an open panel is worse than no label at all.
3614
+ *
3615
+ * @internal
3616
+ */
3617
+ setSheetOpen(open: boolean): void;
3618
+ /**
3619
+ * The empty phone cart's way in to the best-seats form.
3620
+ *
3621
+ * Still a FORM, not a verb: it reveals quantity/type/zone and picks nothing
3622
+ * for anyone. Opening the sheet is not the same as arriving at the card
3623
+ * either — on a short phone the tray can open scrolled past it.
3624
+ */
3625
+ private openBestSeatsForm;
3597
3626
  /**
3598
3627
  * Put the phone sheet back to its peek.
3599
3628
  *
@@ -3635,8 +3664,13 @@ declare class SeatPicker implements GaPromptPicker {
3635
3664
  setPanelCollapsed(collapsed: boolean): void;
3636
3665
  /** Idempotent DOM apply, also run on every layout flip (inert must lift on narrow). */
3637
3666
  private applyPanelCollapsed;
3638
- /** Build the ♿ menu (filter + limited view + palette) into the map's
3639
- * bottom-left corner. The menu owns its own state machine; see the module. */
3667
+ /**
3668
+ * Build the ♿ menu (filter + limited view + palette) as the TOP DISC of the
3669
+ * right-hand control column (owner call 2026-09-06). It used to stand alone
3670
+ * in the map's bottom-left corner, which is the minimap's corner, and read
3671
+ * as a stray control facing a stack of them. The menu owns its own state
3672
+ * machine and docks itself first in the column; see the module.
3673
+ */
3640
3674
  private buildAccessibilityMenu;
3641
3675
  /**
3642
3676
  * Jump to the seats rung when a dimming filter turns on — the dimming only
@@ -3809,18 +3843,20 @@ declare class SeatPicker implements GaPromptPicker {
3809
3843
  /** Reflect the engine's current LOD rung onto the pill group. */
3810
3844
  /** @internal */ syncRung(): void;
3811
3845
  /**
3812
- * The phone's ONE map control, and whether it still has anywhere to go.
3846
+ * The phone's back-out controls, and whether they still have anywhere to go.
3813
3847
  *
3814
- * On narrow the "fit to screen" disc is gone (CSS) and "−" is the whole
3815
- * back-out story: one tap to the section the buyer drilled into, one more to
3816
- * the whole venue. The ladder itself is `mapZoomOutStep`; this only dresses
3817
- * it, and only on narrow — the wide layout keeps its "+", "−" and ⛶ exactly
3818
- * as they were.
3848
+ * On narrow the corner carries "+", "−" and the fit disc (owner call
3849
+ * 2026-09-05). "−" is the ladder — one tap to the section the buyer drilled
3850
+ * into, one more to the whole venue — and the fit disc is that last step on
3851
+ * its own. The ladder itself is `mapZoomOutStep`; this only dresses it, and
3852
+ * only on narrow: wide keeps "+" and "−" undimmed and never shows the disc.
3819
3853
  *
3820
- * DIMMED, NOT GONE. The control used to appear only once the buyer was deep
3854
+ * DIMMED, NOT GONE. The controls used to appear only once the buyer was deep
3821
3855
  * enough to be lost, so the corner grew and shrank a button underneath their
3822
3856
  * thumb. A control that stays put and plainly cannot be pressed says "you
3823
- * are already looking at everything" without moving the target.
3857
+ * are already looking at everything" without moving the target — as long as
3858
+ * it dims only when that is TRUE, which is why the reading is the engine's
3859
+ * fit pose and not a guess from whether seats happen to be on screen.
3824
3860
  */
3825
3861
  private syncMapStepBack;
3826
3862
  /** @internal */ syncProjection(): void;
@@ -3989,8 +4025,6 @@ declare class SeatPicker implements GaPromptPicker {
3989
4025
  /** @internal */ scheduleFit(): void;
3990
4026
  private fitTranslatedRows;
3991
4027
  private emitSelectionValidity;
3992
- /** Paint the bottom-sheet's collapsed one-liner (pickerTray.ts builds it). */
3993
- /** @internal */ renderPeek(count: number, total: number, pendingCount: number, bump?: boolean): void;
3994
4028
  /**
3995
4029
  * Release one buyer-visible held LINE. That is one label for a seat, and every
3996
4030
  * unit label behind a grouped GA line — a buyer who presses × on
@@ -4026,6 +4060,29 @@ declare class SeatPicker implements GaPromptPicker {
4026
4060
  private showBooked;
4027
4061
  /** Take the confirmation down and give the map back. The booking stands. */
4028
4062
  private dismissBooked;
4063
+ /**
4064
+ * The seats are BOUGHT. Put the picker back to the state a buyer who has
4065
+ * just arrived would find.
4066
+ *
4067
+ * "Back to map" used to take down the overlay and nothing else, and what it
4068
+ * uncovered was the cart that had paid for the booking: the same tickets
4069
+ * still listed (with padlocks, because the labels now read `booked`), the
4070
+ * same total in the footer, and a CTA frozen on "Opening secure checkout…"
4071
+ * with its spinner — a control that could never finish, over a hold that no
4072
+ * longer existed. The seats still painted as the buyer's own selection, ✕ on
4073
+ * a row did nothing (there is no hold left to release from), and any seat
4074
+ * added next was totalled together with tickets that were already paid for.
4075
+ *
4076
+ * A settled hold is not a hold, so everything that was showing one goes: the
4077
+ * hold and its handoff, the session's remembered hold id, the timer, the
4078
+ * selection behind the cart (which is what repaints those seats as inert
4079
+ * `booked` rather than as picks), the GA quantities, and the CTA phase.
4080
+ * `showBooked` has already fired `onBooked` and stopped the timer — this is
4081
+ * about the surface it left standing, and it runs on the way OUT of the
4082
+ * overlay, so a host that navigates away on `onBooked` (DesiPass) never
4083
+ * reaches it.
4084
+ */
4085
+ private resetAfterBooking;
4029
4086
  /**
4030
4087
  * A Performance Group hold settled, told to us by the WRAPPER rather than by
4031
4088
  * a socket (§8: this surface has no realtime feed). `detectBooked` waits for
@@ -4105,18 +4162,10 @@ declare class SeatPicker implements GaPromptPicker {
4105
4162
  * group whose wrapper did not supply the nights.
4106
4163
  */
4107
4164
  private nightStripFor;
4108
- /**
4109
- * Why a tapped seat cannot be taken, or '' when it can.
4110
- *
4111
- * Only the PRESS path asks for this — a mouse already has the status tag and
4112
- * a card that follows the pointer, so a sentence under every hover would be
4113
- * noise. A partly-available group seat is excluded: its night strip already
4114
- * names the exact nights that block it, and "already booked" would flatly
4115
- * contradict the row underneath saying it is free on Friday.
4116
- */
4117
- private unavailableReason;
4118
4165
  private unpinTooltip;
4119
4166
  private handleMapPointerDown;
4167
+ /** Close every open ⓘ popover, except `keep`. */
4168
+ private closeInfoPops;
4120
4169
  private updateTooltip;
4121
4170
  /**
4122
4171
  * Push the wrapper's current seat marks at the renderer.
@@ -4305,8 +4354,6 @@ declare class SeatPicker implements GaPromptPicker {
4305
4354
  /** @internal */ seatViewFor3d(seatId: string): Promise<SeatView | null>;
4306
4355
  /** @internal */ onView3dSeatPick(seatId: string): void;
4307
4356
  /** @internal */ seatViewCaption(seatId: string): string;
4308
- /** @internal */ showUnavailable3dSeat(seat: ExpandedSeat, visualState: SeatState3D, status: Exclude<SeatStatus, 'free'>): void;
4309
- /** @internal */ dismissUnavailable3dSeat(): void;
4310
4357
  private saveView3dComparisonSeat;
4311
4358
  /** @internal */ clearView3dComparison(): void;
4312
4359
  /** @internal */ view3dComparisonSnapshot(seatId: string): {