@seatlayer/js 0.69.0 → 0.71.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,6 +1,9 @@
1
- import { PickerSeat, PickerGAArea, PickerSelectionValidator, PickerMapTheme, RendererViewMode, SeatHoverDetails, PickerSelectionValidity, SectionSummary, ChartTheme, LodRung, PickerTransport } from '@seatlayer/core';
1
+ import { PickerSeat, PickerGAArea, PickerSelectionValidator, PickerMapTheme, RendererViewMode, SeatHoverDetails, PickerSelectionValidity, SectionSummary, ChartTheme, LodRung, PickerTransport, PickerController, AccessibilityType, ExpandedSeat } from '@seatlayer/core';
2
2
  export { ExpandedSeat, PickerMapTheme, PickerSelectionValidator, PickerSelectionValidity, PickerSelectionViolation, RendererViewMode, SeatHoverDetails } from '@seatlayer/core';
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 EventCategoryAssignmentResult, M as EventScopedManageToken, N as EventTableBookingMode, O as EventTableBookingResult, P as IntentSwitchBlockedDetails, Q as InventoryBooking, R as InventoryBookingActivity, S as InventoryBookingDetail, T as InventoryBookingObject, U as InventoryBookingState, V as InventoryBookingsPage, W as InventoryBookingsQuery, X as LogEntry, Y as LogPage, Z as ManageApi, _ as ManageApiError, $ as ReportByStatus, a0 as ReportCategoryMeta, a1 as ReportCategoryRow, a2 as ReportResult, a3 as SeatManager, a4 as SeatManagerActionResult, a5 as SeatManagerActivity, a6 as SeatManagerCapability, a7 as SeatManagerConnection, a8 as SeatManagerFilteredSection, a9 as SeatManagerMode, aa as SeatManagerOptions, ab as SeatManagerSelectionValidity, ac as SeatManagerTallies, ad as SelectionSourceRow } from './channelsMode-2z9HBOAX.cjs';
3
+ import * as _seatlayer_core_core_seatConfidence from '@seatlayer/core/core/seatConfidence';
4
+ import { Venue3DHandle } from '@seatlayer/core/view3d';
5
+ import { T as ThemeMode } from './channelsMode-goczEzyt.cjs';
6
+ 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';
4
7
 
5
8
  /**
6
9
  * Buyer access context — the browser half of the Sales Channels contract
@@ -1787,6 +1790,20 @@ interface SeatPickerBuyerViewOptions {
1787
1790
  }
1788
1791
  /** Host theme overrides — any subset; unset keys fall back to the org's chart theme, then defaults. */
1789
1792
  interface SeatPickerTheme {
1793
+ /**
1794
+ * Light, dark, or follow the reader's own `prefers-color-scheme`.
1795
+ *
1796
+ * OPT-IN. Omit it and the widget renders exactly what it always did: the
1797
+ * chart's authored ground, the organizer's colours, your own overrides. Set
1798
+ * it and the built-in token set for that side takes the GROUND roles —
1799
+ * background, surface, ink, muted ink, hairlines, and the drawn map's own
1800
+ * canvas — while the organizer's accent, font, radius and logo, and every
1801
+ * colour you state explicitly below, stay exactly as they are.
1802
+ *
1803
+ * `'auto'` is re-read live: a buyer who flips their phone into dark mode
1804
+ * mid-purchase keeps their seats and their hold.
1805
+ */
1806
+ mode?: ThemeMode;
1790
1807
  /** Brand accent (CTA, active chips, hold pill). */
1791
1808
  accent?: string;
1792
1809
  /** Ink on the accent (button labels). */
@@ -1914,6 +1931,13 @@ interface SeatPickerOptions {
1914
1931
  currency?: string;
1915
1932
  /** Colorblind-safe rendering (Okabe-Ito palette, hollow booked seats). */
1916
1933
  colorblindSafe?: boolean;
1934
+ /**
1935
+ * How a big chart's seats arrive: 'progressive' (default) shows the venue's
1936
+ * sections as soon as the chart lands and fills the seats in a section at a
1937
+ * time, nearest the viewport first; 'plain' builds the whole scene in one
1938
+ * step. Small charts are built in one step either way.
1939
+ */
1940
+ loadingReveal?: 'progressive' | 'plain';
1917
1941
  /** Initial map projection. Buyers now toggle **Map (flat 2D) + 3D** only; the
1918
1942
  * legacy `perspective` (2.5D) value is still ACCEPTED for source compatibility
1919
1943
  * but is deprecated — it is coerced to `flat` with a one-time console warning.
@@ -1953,6 +1977,16 @@ interface SeatPickerOptions {
1953
1977
  * with `{ surface: 'buyer' }` merged into the props. A throwing sink never
1954
1978
  * breaks the widget. Route it to your product analytics (e.g. PostHog). */
1955
1979
  onAnalytics?: (event: string, props: Record<string, unknown>) => void;
1980
+ /**
1981
+ * Every seat of a progressively revealed chart is now built and painted.
1982
+ *
1983
+ * `render()` resolves with the section shells and the nearest seats — the
1984
+ * rest arrive in idle slices. A host that needs "the whole venue is on
1985
+ * screen" waits for this rather than for `render()`. Fires exactly once per
1986
+ * chart, and never for a chart small enough to build in one step (there is
1987
+ * nothing to wait for: `render()` already was that moment).
1988
+ */
1989
+ onSeatsRevealed?: () => void;
1956
1990
  /**
1957
1991
  * Optional organiser-defined campaign/referral label (max 120 characters).
1958
1992
  * On the public SeatLayer transport it is frozen onto the hold, then copied
@@ -2199,31 +2233,38 @@ interface SeatPickerOptions {
2199
2233
  onError?: (err: unknown) => void;
2200
2234
  }
2201
2235
 
2236
+ /** What the saved-seat comparison chip needs from the widget around it. */
2237
+ interface CompareChipHost {
2238
+ /** The live 3D overlay the chip mounts into, or null when 3D is down. */
2239
+ overlay(): HTMLElement | null;
2240
+ /** Seat ids currently saved for comparison (0, 1 or 2 of them). */
2241
+ savedSeatIds(): string[];
2242
+ /** Open the two-seat comparison surface. */
2243
+ openComparison(): void;
2244
+ /** Drop every saved seat and tear the comparison down. */
2245
+ clearComparison(): void;
2246
+ toast(msg: string, tone?: 'neutral' | 'success' | 'warning' | 'error'): void;
2247
+ }
2202
2248
  /**
2203
- * SeatPicker the full buyer experience as a widget.
2204
- *
2205
- * Where `SeatingChart` is canvas-only, SeatPicker owns the complete chrome
2206
- * from the canonical UX contract: branded header,
2207
- * live price panel, selection tray with GA steppers, hold countdown, snipe
2208
- * toasts and expiry recovery — all on top of the shared PickerController, so
2209
- * every host gets the whole experience with one mount.
2210
- *
2211
- * Render contexts (owner requirement): the SAME widget adapts to a full-screen
2212
- * takeover, an inline <div> in a content page, or a popup — breakpoints key
2213
- * off the CONTAINER via ResizeObserver, never the viewport. `SeatPicker.open()`
2214
- * mounts a document-level modal (scrim, ESC, focus restore) in one call.
2215
- *
2216
- * Theming (owner requirement): org account customization flows automatically —
2217
- * the chart payload's ChartTheme (accent, accentInk, logoUrl, brand name,
2218
- * fontFamily, …) seeds the look; the host `theme` option overrides any subset;
2219
- * and every value lands as a `--sl-*` CSS custom property on the widget root
2220
- * so plain host CSS can restyle too.
2249
+ * The "N seats saved" chip pinned inside the 3D overlay. `sync()` is
2250
+ * idempotent: it builds the chip on first need, updates its label after, and
2251
+ * removes it once nothing is saved (or the overlay is gone).
2221
2252
  */
2253
+ declare class View3dCompareChip {
2254
+ private readonly host;
2255
+ private chip;
2256
+ constructor(host: CompareChipHost);
2257
+ sync(): void;
2258
+ /** Drop the chip element (3D teardown). Saved ids are the host's to clear. */
2259
+ remove(): void;
2260
+ /** The chip's primary button — a focus target when an overlay above it closes. */
2261
+ mainButton(): HTMLElement | null;
2262
+ }
2222
2263
 
2223
2264
  declare class SeatPicker implements GaPromptPicker {
2224
2265
  /** @internal Read by pickerGaPrompt for the `onGAPrompt` host hook. */
2225
2266
  readonly opts: SeatPickerOptions;
2226
- private readonly api;
2267
+ /** @internal */ readonly api: PickerTransport;
2227
2268
  /** Authenticated view media, cached only for this picker lifetime. */
2228
2269
  private readonly buyerAssetUrls;
2229
2270
  /** Our own public client, or null when the host injected a transport. */
@@ -2233,7 +2274,7 @@ declare class SeatPicker implements GaPromptPicker {
2233
2274
  private realtime;
2234
2275
  private accessEl;
2235
2276
  private readonly apiBase;
2236
- private readonly controller;
2277
+ /** @internal */ readonly controller: PickerController;
2237
2278
  /** @internal */ maxTickets: number;
2238
2279
  /** Exact ticket count required before checkout; null keeps ordinary 1..max behavior. */
2239
2280
  private readonly exactTickets;
@@ -2247,6 +2288,9 @@ declare class SeatPicker implements GaPromptPicker {
2247
2288
  private mapHost;
2248
2289
  private rendered;
2249
2290
  private destroyed;
2291
+ /** Bumped on every locale REQUEST, so a load that resolves late can tell it
2292
+ * is no longer the one asked for. See {@link applyActiveLocale}. */
2293
+ private localeGeneration;
2250
2294
  /** @internal */ els: Record<string, HTMLElement>;
2251
2295
  /** Feature 6 anchor regions — positioned flex containers over the map. */
2252
2296
  private regions;
@@ -2306,7 +2350,16 @@ declare class SeatPicker implements GaPromptPicker {
2306
2350
  private tipPinned;
2307
2351
  private tipMarkedHoverLabel;
2308
2352
  private lastPointerType;
2309
- private confirmEl;
2353
+ /** @internal */ confirmEl: HTMLDivElement | null;
2354
+ /** Light / dark / auto, or null when the widget is not managing a mode at
2355
+ * all — which is the default, and is byte-for-byte the old behaviour. */
2356
+ private themeMode;
2357
+ /** Live `prefers-color-scheme` subscription, held only while mode is auto. */
2358
+ private colorSchemeStop;
2359
+ /** The progressive reveal has finished for the chart currently mounted, and
2360
+ * the closure that says so once the render facts exist to say it with. */
2361
+ private seatsRevealed;
2362
+ private seatsRevealedReport;
2310
2363
  private confirmSeat;
2311
2364
  private suppressConfirmationSeatId;
2312
2365
  private tableDialogEl;
@@ -2341,8 +2394,8 @@ declare class SeatPicker implements GaPromptPicker {
2341
2394
  private rungsEl;
2342
2395
  private projectionEl;
2343
2396
  private buyerView;
2344
- private view3dEl;
2345
- private view3dHandle;
2397
+ /** @internal */ view3dEl: HTMLDivElement | null;
2398
+ /** @internal */ view3dHandle: Venue3DHandle | null;
2346
2399
  /** Monotonic token so a stale async mount (buyer left before OGL finished
2347
2400
  * loading) never installs its handle over a newer state. */
2348
2401
  private view3dGen;
@@ -2352,15 +2405,15 @@ declare class SeatPicker implements GaPromptPicker {
2352
2405
  * fixed seat-eye state. It lets Back unwind one step before leaving 3D. */
2353
2406
  private view3dTargetSeatId;
2354
2407
  /** Inspection-only comparison. These ids never represent cart selection. */
2355
- private view3dCompareSeatIds;
2408
+ /** @internal */ view3dCompareSeatIds: string[];
2356
2409
  /** The saved-seat comparison chip — owned by pickerView3dNav.ts. */
2357
- private readonly view3dCompareChip;
2358
- private view3dCompareEl;
2359
- private view3dCompareCleanup;
2360
- private view3dPassportEl;
2361
- private view3dPassportCleanup;
2410
+ /** @internal */ readonly view3dCompareChip: View3dCompareChip;
2411
+ /** @internal */ view3dCompareEl: HTMLDivElement | null;
2412
+ /** @internal */ view3dCompareCleanup: (() => void) | null;
2413
+ private view3dSeatViewChrome;
2414
+ /** @internal */ view3dPassportEl: HTMLDivElement | null;
2415
+ /** @internal */ view3dPassportCleanup: (() => void) | null;
2362
2416
  private floorsEl;
2363
- private secCardEl;
2364
2417
  private viewEl;
2365
2418
  private viewCleanup;
2366
2419
  /** Supersedes an older authored-view byte request when another seat is opened. */
@@ -2373,12 +2426,14 @@ declare class SeatPicker implements GaPromptPicker {
2373
2426
  /** "Hide limited-view seats" — mirrored into 3D by `seatState3dFor`. */
2374
2427
  private limitedViewFilter;
2375
2428
  private pricesExpanded;
2429
+ /** The section card owns its element, collapse state and shown-at clock. */
2430
+ private sectionCardCache;
2376
2431
  /** Last surfaced section summary (re-rendered when the price band changes). */
2377
- private lastSection;
2378
- /** Section card collapsed to its slim pill (seat-picking has begun). */
2379
- private secCardCollapsed;
2380
- /** When the card was (re)shown — the focus glide's own view change must not collapse it. */
2381
- private secCardShownAt;
2432
+ /** The tapped section the card is holding. A facade over the card in both
2433
+ * directions: reading it must not build chrome, and writing it must not
2434
+ * repaint — see SectionCard.adopt. */
2435
+ private get lastSection();
2436
+ private set lastSection(value);
2382
2437
  /** Previous tray ticket count — first 0→n transition auto-expands the mobile sheet. */
2383
2438
  private lastTrayCount;
2384
2439
  /** The opt-in language switcher, when `languages` named at least two. */
@@ -2392,7 +2447,8 @@ declare class SeatPicker implements GaPromptPicker {
2392
2447
  /** Selected labels awaiting the hold response; their own realtime echo can arrive first. */
2393
2448
  private holdingLabels;
2394
2449
  private ctaPhase;
2395
- private a11yChipsEl;
2450
+ /** The ♿ control and its menu — one node, in the map's bottom-left corner. */
2451
+ private a11yMenu;
2396
2452
  /** Rail scroll listener attached once; the rail repaints many times. */
2397
2453
  private railEdgesBound;
2398
2454
  private fsFallback;
@@ -2422,6 +2478,16 @@ declare class SeatPicker implements GaPromptPicker {
2422
2478
  * (OV-52)
2423
2479
  */
2424
2480
  private confirmThumbHtml;
2481
+ /**
2482
+ * The reference the card's thumbnail would load, or null when there is none
2483
+ * the buyer-media policy will hand back.
2484
+ *
2485
+ * The same predicate `BuyerAssetObjectUrls.resolve` applies, asked BEFORE the
2486
+ * markup is built rather than after the fetch fails — which is the difference
2487
+ * between a card that never shows a frame and one that shows a frame and then
2488
+ * takes it away.
2489
+ */
2490
+ private deliverableViewReference;
2425
2491
  /** True when the picker is rendered inside an iframe (snippet embed at /e/:key). */
2426
2492
  private isFramed;
2427
2493
  /** Post a widget→host message only when the browser identifies its origin. */
@@ -2475,6 +2541,17 @@ declare class SeatPicker implements GaPromptPicker {
2475
2541
  render(): Promise<this>;
2476
2542
  /** Wire host chrome after the skeleton exists and before the renderer owns its map host. */
2477
2543
  private wireBuyerShell;
2544
+ /**
2545
+ * Put the phone sheet back to its peek.
2546
+ *
2547
+ * THE MAP IS THE PRODUCT, and a buyer who reaches past an open sheet to tap
2548
+ * the venue has already said which one they want to look at. Called from the
2549
+ * renderer's own tap callbacks — never from raw pointer events, so a pan or a
2550
+ * pinch that happens to end over a seat is not mistaken for a tap.
2551
+ *
2552
+ * @internal
2553
+ */
2554
+ collapseSheet(): void;
2478
2555
  /** Observe the host container rather than the viewport; embeds resize independently. */
2479
2556
  private observeLayout;
2480
2557
  /** Render the shared controller into the already-mounted canvas host. */
@@ -2505,6 +2582,18 @@ declare class SeatPicker implements GaPromptPicker {
2505
2582
  setPanelCollapsed(collapsed: boolean): void;
2506
2583
  /** Idempotent DOM apply, also run on every layout flip (inert must lift on narrow). */
2507
2584
  private applyPanelCollapsed;
2585
+ /** Build the ♿ menu (filter + limited view + palette) into the map's
2586
+ * bottom-left corner. The menu owns its own state machine; see the module. */
2587
+ private buildAccessibilityMenu;
2588
+ /**
2589
+ * Jump to the seats rung when a dimming filter turns on — the dimming only
2590
+ * renders at seat detail, so applying it zoomed out would silently change
2591
+ * seats the buyer cannot see.
2592
+ */
2593
+ private focusSeatsForFilter;
2594
+ /** Turn the buyer's accessibility filter on or off from host code. Mirrors
2595
+ * the bridge command and the menu, so the three never diverge. */
2596
+ setAccessibilityFilter(types: AccessibilityType[] | null): void;
2508
2597
  private dockLayoutChrome;
2509
2598
  /** The "Need more time?" prompt shown in the hold's final EXTEND_PROMPT_MS. */
2510
2599
  private buildExtendPrompt;
@@ -2610,8 +2699,15 @@ declare class SeatPicker implements GaPromptPicker {
2610
2699
  private max3dSeats;
2611
2700
  /** Reflect the active floor onto the switcher rail. */
2612
2701
  private syncFloors;
2702
+ /** The tapped-section summary card in all three of its forms. Built lazily:
2703
+ * it reads `els`/`root`, which are assigned after construction. */
2704
+ private get sectionCard();
2613
2705
  /** Show (or clear, on null) the tapped-section summary card. */
2614
2706
  private showSectionCard;
2707
+ private renderSectionCard;
2708
+ private collapseSectionCard;
2709
+ private sectionCardOnView;
2710
+ private fitSectionStripCount;
2615
2711
  /**
2616
2712
  * Open sections next to the focused one, in authored order.
2617
2713
  *
@@ -2621,43 +2717,6 @@ declare class SeatPicker implements GaPromptPicker {
2621
2717
  * are skipped because focusing one cannot produce a useful buyer card.
2622
2718
  */
2623
2719
  private sectionNeighbours;
2624
- private wireSectionNavigation;
2625
- /**
2626
- * Render the section card in the form the layout + state want: expanded card
2627
- * or slim pill in the top-center anchor region (wide), or a compact strip in
2628
- * the sheet head (narrow). Never floats over the seats at the tap point.
2629
- */
2630
- private renderSectionCard;
2631
- /**
2632
- * Flag the root while the phone locator is docked to the map's bottom edge,
2633
- * so the map's own bottom-corner controls lift above it. The bar owns that
2634
- * edge outright — without this the minimap/accessibility cluster and the
2635
- * zoom/fit/eye stack sit underneath it and only their rounded corners show.
2636
- */
2637
- private syncLocatorDock;
2638
- /**
2639
- * THE COUNT IS NEVER TRUNCATED. At 390px the strip carries a dot, the section
2640
- * name, the seats-left count, prev/next, and a "‹ Overview" chip; when that
2641
- * ran long the count was the flex item that shrank, and "73 seats left"
2642
- * clipped to "7" — not a smaller answer but a WRONG one, and one the buyer
2643
- * has no way to tell is wrong. The name is the answer to "where am I" and
2644
- * keeps its room; the count yields, in order: full text → short form
2645
- * ("7 left") → gone. Gone is honest; a clipped number is not.
2646
- *
2647
- * Re-run on every real host resize, so a rotation or a resized embed that
2648
- * makes room gives the long form back.
2649
- */
2650
- private fitSectionStripCount;
2651
- /** Collapse the expanded card to its slim pill (seat-picking started). */
2652
- private collapseSectionCard;
2653
- /**
2654
- * onViewChange hook for the card. The focus glide's own settle (within the
2655
- * grace window) enforces the ~25% coverage rule with the FINAL viewport; any
2656
- * later pan/zoom means seat-picking has begun → collapse to the pill.
2657
- */
2658
- private sectionCardOnView;
2659
- /** Fraction of the focused section's on-screen bbox covered by the card. */
2660
- private sectionCardCoverage;
2661
2720
  /**
2662
2721
  * The polite-live sentence for a partly-available seat, or '' for any other.
2663
2722
  *
@@ -2672,7 +2731,7 @@ declare class SeatPicker implements GaPromptPicker {
2672
2731
  private confirmTableDialog;
2673
2732
  private cancelTableDialog;
2674
2733
  private dismissTableDialog;
2675
- private showConfirm;
2734
+ /** @internal */ showConfirm(seat: ExpandedSeat): void;
2676
2735
  private reanchorConfirm;
2677
2736
  private dismissConfirm;
2678
2737
  private commitConfirm;
@@ -2680,7 +2739,7 @@ declare class SeatPicker implements GaPromptPicker {
2680
2739
  private closeConfirm;
2681
2740
  private seatViewEnabled;
2682
2741
  /** Every bookable seat (cached) — neighbor heads for the generated panorama. */
2683
- private allSeats;
2742
+ /** @internal */ allSeats(): ExpandedSeat[];
2684
2743
  /**
2685
2744
  * Open the drag-to-look-around 360° preview for a seat. Uses the organizer's
2686
2745
  * uploaded photo (seat.viewUrl) when present, else a panorama generated from
@@ -2824,6 +2883,8 @@ declare class SeatPicker implements GaPromptPicker {
2824
2883
  label: string;
2825
2884
  onClick: () => void;
2826
2885
  }): void;
2886
+ /** Loading silhouette → real venue. The sequence lives in pickerBootReveal. */
2887
+ private dismissSkeleton;
2827
2888
  private placeTooltip;
2828
2889
  /**
2829
2890
  * The Performance Group night strip for a two-tone seat.
@@ -2834,6 +2895,16 @@ declare class SeatPicker implements GaPromptPicker {
2834
2895
  * group whose wrapper did not supply the nights.
2835
2896
  */
2836
2897
  private nightStripFor;
2898
+ /**
2899
+ * Why a tapped seat cannot be taken, or '' when it can.
2900
+ *
2901
+ * Only the PRESS path asks for this — a mouse already has the status tag and
2902
+ * a card that follows the pointer, so a sentence under every hover would be
2903
+ * noise. A partly-available group seat is excluded: its night strip already
2904
+ * names the exact nights that block it, and "already booked" would flatly
2905
+ * contradict the row underneath saying it is free on Friday.
2906
+ */
2907
+ private unavailableReason;
2837
2908
  private unpinTooltip;
2838
2909
  private handleMapPointerDown;
2839
2910
  private updateTooltip;
@@ -2894,10 +2965,42 @@ declare class SeatPicker implements GaPromptPicker {
2894
2965
  * colours have not changed; safe to call on every render.
2895
2966
  */
2896
2967
  setMapTheme(map: PickerMapTheme | null): void;
2968
+ /**
2969
+ * Write the resolved `--sl-*` tokens onto the root, and stamp `data-theme`.
2970
+ *
2971
+ * `data-theme` is not read by the widget's own stylesheet — every rule spends
2972
+ * tokens. It is there for the HOST: a page wrapping the picker needs to know
2973
+ * which side the widget settled on to match its own chrome, and reading it
2974
+ * off an attribute is cheaper and more reliable than re-deriving the
2975
+ * luminance of a custom property. Absent when no mode is managed, so a host
2976
+ * can tell "dark" from "not asked".
2977
+ */
2978
+ private applyThemeTokens;
2979
+ /** Follow `prefers-color-scheme` only while the mode actually is `auto`. */
2980
+ private watchThemeMode;
2981
+ /**
2982
+ * Re-ink everything a mode owns, WITHOUT touching the buyer's selection.
2983
+ *
2984
+ * The canvas half goes through the controller's `setMapTheme`, which rebuilds
2985
+ * from the chart already in memory and restores the selection — so a reader
2986
+ * flipping their phone into dark mode mid-purchase keeps their seats, their
2987
+ * hold and their place on the map. No round trip is spent.
2988
+ */
2989
+ private repaintForThemeMode;
2990
+ /**
2991
+ * Switch the widget between light, dark and the reader's own preference
2992
+ * after mount. `null` hands the colours back to the chart and the host.
2993
+ *
2994
+ * Selection-safe by construction — see {@link repaintForThemeMode}.
2995
+ */
2996
+ setThemeMode(mode: ThemeMode | null): void;
2997
+ /** The mode the host asked for — `'auto'`, not what `auto` resolved to. */
2998
+ getThemeMode(): ThemeMode | null;
2897
2999
  /**
2898
3000
  * Chrome docked on the map follows the MAP's ground, not the picker's — see
2899
3001
  * resolveMapChromeTokens. The map ground resolves the way the renderer does:
2900
- * host map override → chart theme → the picker's own background.
3002
+ * host map override → the mode's ground → chart theme → the picker's own
3003
+ * background — the same ladder the canvas itself is painted from.
2901
3004
  */
2902
3005
  private applyMapChromeTokens;
2903
3006
  /**
@@ -2927,19 +3030,7 @@ declare class SeatPicker implements GaPromptPicker {
2927
3030
  * A no-op when the map is unchanged, so a host may call it on every poll.
2928
3031
  */
2929
3032
  setPricing(pricing: SeatPickerPricing | undefined): void;
2930
- /**
2931
- * The opt-in language switcher.
2932
- *
2933
- * Rendered only when `languages` resolves to at least two distinct locales.
2934
- * Curated rather than all 37 on purpose — a German venue wants de/en/pl in
2935
- * the menu, not Welsh — and absent by default, because a multilingual host
2936
- * site already has its own switcher and two that can disagree is worse than
2937
- * either alone.
2938
- *
2939
- * Each language names itself: a reader scanning for their own finds
2940
- * "Deutsch", never "German". An English list is unreadable to exactly the
2941
- * people who need it.
2942
- */
3033
+ /** The opt-in language switcher — see `pickerLocaleBoot.buildLanguageSwitcher`. */
2943
3034
  private buildLanguageSwitcher;
2944
3035
  /**
2945
3036
  * Change the language of a mounted picker, keeping the buyer's seats.
@@ -2951,25 +3042,29 @@ declare class SeatPicker implements GaPromptPicker {
2951
3042
  * language is not a trade worth making, so nothing here is destroyed and
2952
3043
  * rebuilt: the copy is re-applied in place.
2953
3044
  *
2954
- * Three passes, because the picker's ~195 `tf()` sites fall into three kinds:
2955
- *
2956
- * 1. The skeleton's static labels and aria — set once inside one `innerHTML`
2957
- * template. Re-applied from the `data-sl-*` markers on those nodes.
2958
- * 2. The painters (tray, prices, CTA, offer, rails, rungs, floors) — these
2959
- * already rebuild their HTML from `tf()` whenever state moves, so calling
2960
- * them again is all it takes.
2961
- * 3. Everything transient — toasts, dialogs, screen-reader announcements,
2962
- * tooltips. Those read `tf()` at the moment they fire, so they are already
2963
- * correct the next time they run and must NOT be forced now.
2964
- *
2965
- * The map is last and goes through the controller, because its labels are
2966
- * baked into Konva `Text` at build time — a repaint would faithfully redraw
2967
- * the old language.
3045
+ * `relanguagePicker` in pickerLocaleBoot.ts holds the three passes the copy
3046
+ * on screen needs and the order they have to run in.
2968
3047
  *
2969
3048
  * Returns the locale that actually became active; an unsupported or
2970
3049
  * untranslated tag resolves to English rather than throwing.
2971
3050
  */
2972
3051
  setLocale(next: string | null | undefined): Promise<string>;
3052
+ /**
3053
+ * Re-say everything already on screen in the now-active locale.
3054
+ *
3055
+ * Split out of {@link setLocale} because two paths reach it: an explicit
3056
+ * language change, and the boot dictionary landing after first paint (see
3057
+ * `pickerLocaleBoot.ts`). Both have exactly the same work to do, and the
3058
+ * second one is the reason `render()` no longer waits for a locale fetch.
3059
+ *
3060
+ * `generation` fences out a stale winner. Several locale loads can be in
3061
+ * flight at once — the boot fetch, the event's own language arriving with the
3062
+ * chart, a buyer using the language switcher — and they resolve in whatever
3063
+ * order the network chooses. Without the fence the LAST to arrive wins rather
3064
+ * than the last to be ASKED for, which is how a buyer who picks French ends
3065
+ * up reading the organizer's German.
3066
+ */
3067
+ private applyActiveLocale;
2973
3068
  /** Current colorblind-safe render state, resolved from the stored buyer
2974
3069
  * preference at mount. Host chrome (e.g. the Designer preview) reads this to
2975
3070
  * surface the state rather than rendering colorblind colors silently. */
@@ -3019,16 +3114,18 @@ declare class SeatPicker implements GaPromptPicker {
3019
3114
  * preserved inside the module). Cheap enough per status delta. */
3020
3115
  private pushAvailabilityTo3d;
3021
3116
  /** Mirror the authoritative widget selection into the 3D handle. */
3022
- private syncSelectionTo3d;
3117
+ /** @internal */ syncSelectionTo3d(): void;
3023
3118
  /** Build the view-from-seat panorama the cinematic dissolves into — reuses the
3024
3119
  * exact input path as the 2D `openSeatView` (organizer photo, else generated). */
3025
3120
  private seatViewFor3d;
3026
3121
  /** Route decoupled analytics into the host callback, tagged buyer. */
3027
3122
  private emitAnalytics;
3028
- private emit3dAnalytics;
3123
+ /** @internal */ emit3dAnalytics(event: string, props?: Record<string, unknown>): void;
3029
3124
  /** A 3D seat tap runs the SAME selection path as a 2D tap: toggle through the
3030
3125
  * controller, then raise the shared confirm card (bottom-sheeted in 3D). */
3031
3126
  private onView3dSeatPick;
3127
+ /** The arrival caption for a seat-eye landing; assembled in pickerSeatViewChrome. */
3128
+ private seatViewCaption;
3032
3129
  /** Explain a 3D seat that INVENTORY refuses — never one the buyer's own
3033
3130
  * filters merely dimmed, which stays buyable exactly as it is in 2D. Category
3034
3131
  * colour remains visible in the venue; this card names the availability state
@@ -3036,14 +3133,26 @@ declare class SeatPicker implements GaPromptPicker {
3036
3133
  private showUnavailable3dSeat;
3037
3134
  private dismissUnavailable3dSeat;
3038
3135
  private saveView3dComparisonSeat;
3039
- private clearView3dComparison;
3040
- private view3dComparisonSnapshot;
3136
+ /** @internal */ clearView3dComparison(): void;
3137
+ /** @internal */ view3dComparisonSnapshot(seatId: string): {
3138
+ seat: ExpandedSeat;
3139
+ label: string;
3140
+ section: string;
3141
+ row: string;
3142
+ category: string;
3143
+ price: string;
3144
+ availability: string;
3145
+ selectable: boolean;
3146
+ viewSource: string;
3147
+ limited: string;
3148
+ accessibility: string;
3149
+ confidence: _seatlayer_core_core_seatConfidence.SeatConfidenceDisclosure;
3150
+ } | null;
3151
+ /** The two dialogs INSIDE the 3D overlay — see pickerView3dModals.ts. */
3041
3152
  private openSeatConfidencePassport;
3042
- private reportSeatConfidenceView;
3043
3153
  private closeSeatConfidencePassport;
3044
3154
  private openView3dComparison;
3045
3155
  private closeView3dComparison;
3046
- private selectComparedSeat;
3047
3156
  private enter3d;
3048
3157
  private exit3d;
3049
3158
  /** Current active/restored hold reflected in the tray. */
@@ -3638,4 +3747,4 @@ interface AttachPickerFrameOptions {
3638
3747
  */
3639
3748
  declare function attachPickerFrame(iframe: HTMLIFrameElement, opts?: AttachPickerFrameOptions): () => void;
3640
3749
 
3641
- 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 GAPromptRequest, type GaPromptTier, type HoldConflict, type HoldLineItem, type HoldResult, type OrderStatusResult, type PaymentOptionsReason, type PaymentOptionsResult, type PaymentProviderName, type PerformanceGroupAvailability, type PerformanceGroupCheckoutHandoff, type PerformanceGroupDescriptor, PerformanceGroupDestroyedError, type PerformanceGroupHold, type PerformanceGroupHoldAllocation, type PerformanceGroupOperationEvent, type PerformanceGroupOperationState, PerformanceGroupPicker, type PerformanceGroupPickerOptions, type PerformanceGroupRecoveryState, type PerformanceGroupSeatAllocation, type PerformanceGroupSelectionMode, type PerformanceGroupStatusEvent, 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, SeasonApiError, type SeasonAvailability, type SeasonCheckoutHandoff, type SeasonDescriptor, type SeasonOperation, type SeasonOperationState, SeasonPicker, type SeasonPickerOptions, SeasonRecoveryTimeoutError, type SeasonRenewalIntent, type SeasonStatusEvent, 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, shortOperationReference, ticketOfferPrices };
3750
+ 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 GAPromptRequest, type GaPromptTier, type HoldConflict, type HoldLineItem, type HoldResult, type OrderStatusResult, type PaymentOptionsReason, type PaymentOptionsResult, type PaymentProviderName, type PerformanceGroupAvailability, type PerformanceGroupCheckoutHandoff, type PerformanceGroupDescriptor, PerformanceGroupDestroyedError, type PerformanceGroupHold, type PerformanceGroupHoldAllocation, type PerformanceGroupOperationEvent, type PerformanceGroupOperationState, PerformanceGroupPicker, type PerformanceGroupPickerOptions, type PerformanceGroupRecoveryState, type PerformanceGroupSeatAllocation, type PerformanceGroupSelectionMode, type PerformanceGroupStatusEvent, 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, SeasonApiError, type SeasonAvailability, type SeasonCheckoutHandoff, type SeasonDescriptor, type SeasonOperation, type SeasonOperationState, SeasonPicker, type SeasonPickerOptions, SeasonRecoveryTimeoutError, type SeasonRenewalIntent, type SeasonStatusEvent, 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, ThemeMode, type TicketOfferAvailability, type TicketOfferPrice, type TicketOfferSummary, attachPickerFrame, bindSeatingChartHandle, buildSeatingChartOptions, createBuyerAccessContext, createControllerSink, parseTicketOfferAvailability, shortOperationReference, ticketOfferPrices };