@seatlayer/js 0.76.0 → 0.77.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { PickerSeat, PickerGAArea, PickerMapTheme, PickerTransport, PickerSelectionValidator, RendererViewMode, PickerSelectionValidity, ChartTheme, FloorLabelStyle, LodRung, SectionSummary, PickerAccessNeed, SeatHoverDetails, AvailabilityRefreshOutcome, PickerController, AccessibilityType, ExpandedSeat } from '@seatlayer/core';
1
+ import { PickerSeat, PickerGAArea, PickerMapTheme, PickerTransport, PickerSelectionValidator, RendererViewMode, PickerSelectionValidity, ChartTheme, AccessibilityType, FloorLabelStyle, LodRung, SectionSummary, PickerAccessNeed, SeatHoverDetails, AccessibleSectionStep, AvailabilityRefreshOutcome, PickerController, ExpandedSeat } 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';
@@ -1377,6 +1377,23 @@ interface SeatingChartPickerState {
1377
1377
  label: string;
1378
1378
  displayLabel?: string;
1379
1379
  zoneId?: string;
1380
+ /**
1381
+ * Free spaces in THIS section for each provision the event offers —
1382
+ * `{ wheelchair: 2, companion: 2 }`. `capability: section-access-counts-v1`.
1383
+ *
1384
+ * The same numbers the web menu's spread hint is built from, so a native
1385
+ * shell can draw its own "where" instead of only dimming the map. A shell
1386
+ * that filtered to fifteen wheelchair spaces scattered round a bowl had
1387
+ * nothing to point at; these are the sections to point at.
1388
+ *
1389
+ * PRESENT-ONLY, at every level: a type appears only when the engine
1390
+ * counted it and found at least one free, and the whole field is absent
1391
+ * for a section that holds none — and also before a renderer exists,
1392
+ * which is why absent must be read as NOT COUNTED and never as zero. It
1393
+ * describes the floor the map is currently on, like everything else the
1394
+ * renderer answers.
1395
+ */
1396
+ accessibleFree?: Partial<Record<AccessibilityType, number>>;
1380
1397
  }>;
1381
1398
  gaAreas: GAAreaAvailability[];
1382
1399
  bestAvailableZones: Array<{
@@ -1884,6 +1901,11 @@ declare class SeatingChart {
1884
1901
  setRung(rung: LodRung): void;
1885
1902
  setCategoryFilter(categoryKeys: string[] | null, focus?: boolean): void;
1886
1903
  setAccessibilityFilter(types: string[] | null): void;
1904
+ /** Fly to the matches of the filter already on, leaving the filter alone. */
1905
+ focusAccessibilityFilter(): void;
1906
+ /** Step to the next section holding a free matching space, framing the
1907
+ * spaces rather than the stand. Null when nothing matches. */
1908
+ focusNextAccessibleSection(types?: string[] | null): AccessibleSectionStep | null;
1887
1909
  setCommercialLimitedFilter(on: boolean): void;
1888
1910
  /** Current selection with prices resolved from the chart categories. */
1889
1911
  getSelection(): SelectedSeat[];
@@ -2783,7 +2805,11 @@ declare class SeatPicker implements GaPromptPicker {
2783
2805
  private tipPinned;
2784
2806
  private tipMarkedHoverLabel;
2785
2807
  private lastPointerType;
2786
- /** @internal */ confirmEl: HTMLDivElement | null;
2808
+ /** @internal The mounted confirm card. A facade over ConfirmCard in both
2809
+ * directions — the widget's own callers, its tests and the toast placer all
2810
+ * read and assign it as the plain field it used to be. */
2811
+ /** @internal */ get confirmEl(): HTMLDivElement | null;
2812
+ /** @internal */ set confirmEl(el: HTMLDivElement | null);
2787
2813
  /** Light / dark / auto, or null when the widget is not managing a mode at
2788
2814
  * all — which is the default, and is byte-for-byte the old behaviour. */
2789
2815
  private themeMode;
@@ -2793,7 +2819,11 @@ declare class SeatPicker implements GaPromptPicker {
2793
2819
  * the closure that says so once the render facts exist to say it with. */
2794
2820
  private seatsRevealed;
2795
2821
  private seatsRevealedReport;
2796
- private confirmSeat;
2822
+ /** The seat the confirm card is about — the same facade as `confirmEl`. */
2823
+ private get confirmSeat();
2824
+ private set confirmSeat(value);
2825
+ /** The confirm card owns its element and its candidate seat. */
2826
+ private confirmCardCache;
2797
2827
  private suppressConfirmationSeatId;
2798
2828
  private tableDialogEl;
2799
2829
  private tableDialog;
@@ -2916,19 +2946,6 @@ declare class SeatPicker implements GaPromptPicker {
2916
2946
  private framedFs;
2917
2947
  /** Last height (px) posted to a host frame; dedupes redundant reports. */
2918
2948
  private lastPostedHeight;
2919
- /** True when the chart carries a real performance anchor — a stage-kind shape.
2920
- * Every chart has a `focalPoint` (a bare look-at coordinate), so its presence
2921
- * alone never justifies a "to stage" claim; only an actual stage does. */
2922
- private chartHasStage;
2923
- /**
2924
- * Eager sightline preview for the confirm card: the organizer's real view
2925
- * photo, or — only when the chart has an actual stage to look at — a generated
2926
- * forward view plus an approximate distance-to-stage line. On a stageless
2927
- * chart both the distance claim and the generic stage silhouette are
2928
- * invented promises, so we suppress them; a real attached photo always shows.
2929
- * (OV-52)
2930
- */
2931
- private confirmThumbHtml;
2932
2949
  /** See `./seatViewThumb`, which the native bridge answers from as well. */
2933
2950
  private deliverableViewReference;
2934
2951
  /** True when the picker is rendered inside an iframe (snippet embed at /e/:key). */
@@ -3037,9 +3054,42 @@ declare class SeatPicker implements GaPromptPicker {
3037
3054
  * seats the buyer cannot see.
3038
3055
  */
3039
3056
  private focusSeatsForFilter;
3057
+ /**
3058
+ * Say what just happened when the camera could not say it.
3059
+ *
3060
+ * Fifteen wheelchair spaces in fifteen sections around a bowl have no "there"
3061
+ * to fly to: the framing call frames the whole venue, which is the view the
3062
+ * buyer was already looking at, so from their side the map dimmed and nothing
3063
+ * else changed. The overview now marks the sections that carry them; this is
3064
+ * the sentence that tells the buyer to look for those marks. Said only for
3065
+ * that shape — a tight cluster is dived into and explains itself.
3066
+ */
3067
+ private explainAccessibilitySpread;
3068
+ /**
3069
+ * Put the filter on the map and on everything that quotes the map.
3070
+ *
3071
+ * EVERY DOOR RUNS THIS ONE BODY — the ♿ menu, host code, and the native
3072
+ * bridge through it — because each surface that was updated on only one of
3073
+ * those paths went on quoting the unfiltered venue:
3074
+ *
3075
+ * • the price chips carry free counts, and a filter changes what "free"
3076
+ * means; left unsynced they offered bands the dimmed map no longer does;
3077
+ * • the minimap outlines what the map is showing, so an unrefreshed one
3078
+ * drew the buyer a venue they were no longer being offered;
3079
+ * • 3D applies the filter as its own dim. The 2D one is Konva opacity,
3080
+ * which the GL view never sees — `seatState3dFor` knows how to dim for
3081
+ * it, but nothing was asking it to, so a buyer who filtered to wheelchair
3082
+ * places and switched to 3D got the whole venue back, undimmed, with the
3083
+ * switch still reading as on.
3084
+ */
3085
+ private applyAccessibilityFilter;
3040
3086
  /** Turn the buyer's accessibility filter on or off from host code. Mirrors
3041
3087
  * the bridge command and the menu, so the three never diverge. */
3042
3088
  setAccessibilityFilter(types: AccessibilityType[] | null): void;
3089
+ /** Fly to what the accessibility filter ALREADY ON matched, without
3090
+ * toggling it — `picker.focusAccessibilityFilter` on the native bridge, for
3091
+ * a shell whose own chips are drawn outside the widget. */
3092
+ focusAccessibilityFilter(): void;
3043
3093
  private dockLayoutChrome;
3044
3094
  /** The "Need more time?" prompt shown in the hold's final EXTEND_PROMPT_MS. */
3045
3095
  private buildExtendPrompt;
@@ -3221,59 +3271,27 @@ declare class SeatPicker implements GaPromptPicker {
3221
3271
  private confirmTableDialog;
3222
3272
  private cancelTableDialog;
3223
3273
  private dismissTableDialog;
3224
- /** @internal */ showConfirm(seat: ExpandedSeat): void;
3225
3274
  /**
3226
- * Ask for the press, once, until someone answers.
3227
- *
3228
- * The confirm card arrives with two buttons and nothing saying which one
3229
- * carries the decision. So the commit button shimmers shortly after the card
3230
- * lands and then breathes — and stops at the first sign of a person touching
3231
- * the card at all, not after a fixed count. An invitation that keeps being
3232
- * made after it has been received is nagging, which is why the stop is bound
3233
- * to three different first-contacts rather than to a timer.
3275
+ * The confirm card, built on first use.
3234
3276
  *
3235
- * Nothing here runs under reduced motion: the class is never added, so the
3236
- * button is simply a button. (pickerMotion also stands the class down, for a
3237
- * caller that is not this one.)
3277
+ * Every host member is a function that calls back through `this`, never a
3278
+ * captured value: the widget's tests replace `dismissConfirm`,
3279
+ * `reducedMotion`, `scheduleMotion`, `syncTray`, `canOffer3d`, `enter3d` and
3280
+ * `buyerAssetUrls` on the INSTANCE, and the card has to see those.
3238
3281
  */
3239
- private inviteCommit;
3240
- /**
3241
- * What the confirm card's commit button says.
3242
- *
3243
- * "Select" named the mechanism, not the act — on a card already showing Row,
3244
- * Seat and a price, the one control that decides the purchase was the least
3245
- * specific thing on it. It names the act instead.
3246
- *
3247
- * NO PRICE ON THE BUTTON (owner call 2026-09-02). "Add seat · $180" was tried
3248
- * and wrapped the button to two lines beside a one-line Cancel on a 310px
3249
- * phone card. The amount is already the largest thing in the band directly
3250
- * above, so putting it on the button bought a second copy of a fact the
3251
- * buyer is looking at and cost the row its shape.
3252
- *
3253
- * A seat only. A booth, a table or a general-admission line keeps the
3254
- * existing wording rather than being told it is adding a "seat" — those
3255
- * surfaces have their own nouns (the table dialog says "Select whole table"),
3256
- * and a wrong noun is worse than a general verb.
3257
- */
3258
- private addSeatLabel;
3282
+ private get confirmCard();
3283
+ /** @internal */ showConfirm(seat: ExpandedSeat): void;
3259
3284
  private reanchorConfirm;
3260
3285
  private dismissConfirm;
3261
- /**
3262
- * Commit the candidate — and let the press be seen.
3263
- *
3264
- * STATE FIRST, ALWAYS. The cart, the totals and the 3D snapshot update on the
3265
- * same tick as the click; nothing below defers a fact. What IS sequenced is
3266
- * the card's departure: the button sweeps its accent left to right while the
3267
- * tick draws and the label turns to "Added", and only then does the card
3268
- * leave and the seat fly to the tray. Dismissing on the click cut that sweep
3269
- * off after about one frame — the widget was animating a moment nobody could
3270
- * see, which is worse than not animating it.
3271
- *
3272
- * Reduced motion takes the old path exactly: no sweep, no wait.
3273
- */
3274
- private commitConfirm;
3286
+ /** @internal The card's own button calls the card; this is the seam the
3287
+ * widget's tests press. */
3288
+ /** @internal */ commitConfirm(): Promise<void>;
3275
3289
  private cancelConfirm;
3276
3290
  private closeConfirm;
3291
+ /** See `./pickerConfirmCard`; kept as members because the widget's tests
3292
+ * call and replace both on the instance. */
3293
+ private inviteCommit;
3294
+ private addSeatLabel;
3277
3295
  private seatViewEnabled;
3278
3296
  /** Every bookable seat (cached) — neighbor heads for the generated panorama. */
3279
3297
  /** @internal */ allSeats(): ExpandedSeat[];
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { PickerSeat, PickerGAArea, PickerMapTheme, PickerTransport, PickerSelectionValidator, RendererViewMode, PickerSelectionValidity, ChartTheme, FloorLabelStyle, LodRung, SectionSummary, PickerAccessNeed, SeatHoverDetails, AvailabilityRefreshOutcome, PickerController, AccessibilityType, ExpandedSeat } from '@seatlayer/core';
1
+ import { PickerSeat, PickerGAArea, PickerMapTheme, PickerTransport, PickerSelectionValidator, RendererViewMode, PickerSelectionValidity, ChartTheme, AccessibilityType, FloorLabelStyle, LodRung, SectionSummary, PickerAccessNeed, SeatHoverDetails, AccessibleSectionStep, AvailabilityRefreshOutcome, PickerController, ExpandedSeat } 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';
@@ -1377,6 +1377,23 @@ interface SeatingChartPickerState {
1377
1377
  label: string;
1378
1378
  displayLabel?: string;
1379
1379
  zoneId?: string;
1380
+ /**
1381
+ * Free spaces in THIS section for each provision the event offers —
1382
+ * `{ wheelchair: 2, companion: 2 }`. `capability: section-access-counts-v1`.
1383
+ *
1384
+ * The same numbers the web menu's spread hint is built from, so a native
1385
+ * shell can draw its own "where" instead of only dimming the map. A shell
1386
+ * that filtered to fifteen wheelchair spaces scattered round a bowl had
1387
+ * nothing to point at; these are the sections to point at.
1388
+ *
1389
+ * PRESENT-ONLY, at every level: a type appears only when the engine
1390
+ * counted it and found at least one free, and the whole field is absent
1391
+ * for a section that holds none — and also before a renderer exists,
1392
+ * which is why absent must be read as NOT COUNTED and never as zero. It
1393
+ * describes the floor the map is currently on, like everything else the
1394
+ * renderer answers.
1395
+ */
1396
+ accessibleFree?: Partial<Record<AccessibilityType, number>>;
1380
1397
  }>;
1381
1398
  gaAreas: GAAreaAvailability[];
1382
1399
  bestAvailableZones: Array<{
@@ -1884,6 +1901,11 @@ declare class SeatingChart {
1884
1901
  setRung(rung: LodRung): void;
1885
1902
  setCategoryFilter(categoryKeys: string[] | null, focus?: boolean): void;
1886
1903
  setAccessibilityFilter(types: string[] | null): void;
1904
+ /** Fly to the matches of the filter already on, leaving the filter alone. */
1905
+ focusAccessibilityFilter(): void;
1906
+ /** Step to the next section holding a free matching space, framing the
1907
+ * spaces rather than the stand. Null when nothing matches. */
1908
+ focusNextAccessibleSection(types?: string[] | null): AccessibleSectionStep | null;
1887
1909
  setCommercialLimitedFilter(on: boolean): void;
1888
1910
  /** Current selection with prices resolved from the chart categories. */
1889
1911
  getSelection(): SelectedSeat[];
@@ -2783,7 +2805,11 @@ declare class SeatPicker implements GaPromptPicker {
2783
2805
  private tipPinned;
2784
2806
  private tipMarkedHoverLabel;
2785
2807
  private lastPointerType;
2786
- /** @internal */ confirmEl: HTMLDivElement | null;
2808
+ /** @internal The mounted confirm card. A facade over ConfirmCard in both
2809
+ * directions — the widget's own callers, its tests and the toast placer all
2810
+ * read and assign it as the plain field it used to be. */
2811
+ /** @internal */ get confirmEl(): HTMLDivElement | null;
2812
+ /** @internal */ set confirmEl(el: HTMLDivElement | null);
2787
2813
  /** Light / dark / auto, or null when the widget is not managing a mode at
2788
2814
  * all — which is the default, and is byte-for-byte the old behaviour. */
2789
2815
  private themeMode;
@@ -2793,7 +2819,11 @@ declare class SeatPicker implements GaPromptPicker {
2793
2819
  * the closure that says so once the render facts exist to say it with. */
2794
2820
  private seatsRevealed;
2795
2821
  private seatsRevealedReport;
2796
- private confirmSeat;
2822
+ /** The seat the confirm card is about — the same facade as `confirmEl`. */
2823
+ private get confirmSeat();
2824
+ private set confirmSeat(value);
2825
+ /** The confirm card owns its element and its candidate seat. */
2826
+ private confirmCardCache;
2797
2827
  private suppressConfirmationSeatId;
2798
2828
  private tableDialogEl;
2799
2829
  private tableDialog;
@@ -2916,19 +2946,6 @@ declare class SeatPicker implements GaPromptPicker {
2916
2946
  private framedFs;
2917
2947
  /** Last height (px) posted to a host frame; dedupes redundant reports. */
2918
2948
  private lastPostedHeight;
2919
- /** True when the chart carries a real performance anchor — a stage-kind shape.
2920
- * Every chart has a `focalPoint` (a bare look-at coordinate), so its presence
2921
- * alone never justifies a "to stage" claim; only an actual stage does. */
2922
- private chartHasStage;
2923
- /**
2924
- * Eager sightline preview for the confirm card: the organizer's real view
2925
- * photo, or — only when the chart has an actual stage to look at — a generated
2926
- * forward view plus an approximate distance-to-stage line. On a stageless
2927
- * chart both the distance claim and the generic stage silhouette are
2928
- * invented promises, so we suppress them; a real attached photo always shows.
2929
- * (OV-52)
2930
- */
2931
- private confirmThumbHtml;
2932
2949
  /** See `./seatViewThumb`, which the native bridge answers from as well. */
2933
2950
  private deliverableViewReference;
2934
2951
  /** True when the picker is rendered inside an iframe (snippet embed at /e/:key). */
@@ -3037,9 +3054,42 @@ declare class SeatPicker implements GaPromptPicker {
3037
3054
  * seats the buyer cannot see.
3038
3055
  */
3039
3056
  private focusSeatsForFilter;
3057
+ /**
3058
+ * Say what just happened when the camera could not say it.
3059
+ *
3060
+ * Fifteen wheelchair spaces in fifteen sections around a bowl have no "there"
3061
+ * to fly to: the framing call frames the whole venue, which is the view the
3062
+ * buyer was already looking at, so from their side the map dimmed and nothing
3063
+ * else changed. The overview now marks the sections that carry them; this is
3064
+ * the sentence that tells the buyer to look for those marks. Said only for
3065
+ * that shape — a tight cluster is dived into and explains itself.
3066
+ */
3067
+ private explainAccessibilitySpread;
3068
+ /**
3069
+ * Put the filter on the map and on everything that quotes the map.
3070
+ *
3071
+ * EVERY DOOR RUNS THIS ONE BODY — the ♿ menu, host code, and the native
3072
+ * bridge through it — because each surface that was updated on only one of
3073
+ * those paths went on quoting the unfiltered venue:
3074
+ *
3075
+ * • the price chips carry free counts, and a filter changes what "free"
3076
+ * means; left unsynced they offered bands the dimmed map no longer does;
3077
+ * • the minimap outlines what the map is showing, so an unrefreshed one
3078
+ * drew the buyer a venue they were no longer being offered;
3079
+ * • 3D applies the filter as its own dim. The 2D one is Konva opacity,
3080
+ * which the GL view never sees — `seatState3dFor` knows how to dim for
3081
+ * it, but nothing was asking it to, so a buyer who filtered to wheelchair
3082
+ * places and switched to 3D got the whole venue back, undimmed, with the
3083
+ * switch still reading as on.
3084
+ */
3085
+ private applyAccessibilityFilter;
3040
3086
  /** Turn the buyer's accessibility filter on or off from host code. Mirrors
3041
3087
  * the bridge command and the menu, so the three never diverge. */
3042
3088
  setAccessibilityFilter(types: AccessibilityType[] | null): void;
3089
+ /** Fly to what the accessibility filter ALREADY ON matched, without
3090
+ * toggling it — `picker.focusAccessibilityFilter` on the native bridge, for
3091
+ * a shell whose own chips are drawn outside the widget. */
3092
+ focusAccessibilityFilter(): void;
3043
3093
  private dockLayoutChrome;
3044
3094
  /** The "Need more time?" prompt shown in the hold's final EXTEND_PROMPT_MS. */
3045
3095
  private buildExtendPrompt;
@@ -3221,59 +3271,27 @@ declare class SeatPicker implements GaPromptPicker {
3221
3271
  private confirmTableDialog;
3222
3272
  private cancelTableDialog;
3223
3273
  private dismissTableDialog;
3224
- /** @internal */ showConfirm(seat: ExpandedSeat): void;
3225
3274
  /**
3226
- * Ask for the press, once, until someone answers.
3227
- *
3228
- * The confirm card arrives with two buttons and nothing saying which one
3229
- * carries the decision. So the commit button shimmers shortly after the card
3230
- * lands and then breathes — and stops at the first sign of a person touching
3231
- * the card at all, not after a fixed count. An invitation that keeps being
3232
- * made after it has been received is nagging, which is why the stop is bound
3233
- * to three different first-contacts rather than to a timer.
3275
+ * The confirm card, built on first use.
3234
3276
  *
3235
- * Nothing here runs under reduced motion: the class is never added, so the
3236
- * button is simply a button. (pickerMotion also stands the class down, for a
3237
- * caller that is not this one.)
3277
+ * Every host member is a function that calls back through `this`, never a
3278
+ * captured value: the widget's tests replace `dismissConfirm`,
3279
+ * `reducedMotion`, `scheduleMotion`, `syncTray`, `canOffer3d`, `enter3d` and
3280
+ * `buyerAssetUrls` on the INSTANCE, and the card has to see those.
3238
3281
  */
3239
- private inviteCommit;
3240
- /**
3241
- * What the confirm card's commit button says.
3242
- *
3243
- * "Select" named the mechanism, not the act — on a card already showing Row,
3244
- * Seat and a price, the one control that decides the purchase was the least
3245
- * specific thing on it. It names the act instead.
3246
- *
3247
- * NO PRICE ON THE BUTTON (owner call 2026-09-02). "Add seat · $180" was tried
3248
- * and wrapped the button to two lines beside a one-line Cancel on a 310px
3249
- * phone card. The amount is already the largest thing in the band directly
3250
- * above, so putting it on the button bought a second copy of a fact the
3251
- * buyer is looking at and cost the row its shape.
3252
- *
3253
- * A seat only. A booth, a table or a general-admission line keeps the
3254
- * existing wording rather than being told it is adding a "seat" — those
3255
- * surfaces have their own nouns (the table dialog says "Select whole table"),
3256
- * and a wrong noun is worse than a general verb.
3257
- */
3258
- private addSeatLabel;
3282
+ private get confirmCard();
3283
+ /** @internal */ showConfirm(seat: ExpandedSeat): void;
3259
3284
  private reanchorConfirm;
3260
3285
  private dismissConfirm;
3261
- /**
3262
- * Commit the candidate — and let the press be seen.
3263
- *
3264
- * STATE FIRST, ALWAYS. The cart, the totals and the 3D snapshot update on the
3265
- * same tick as the click; nothing below defers a fact. What IS sequenced is
3266
- * the card's departure: the button sweeps its accent left to right while the
3267
- * tick draws and the label turns to "Added", and only then does the card
3268
- * leave and the seat fly to the tray. Dismissing on the click cut that sweep
3269
- * off after about one frame — the widget was animating a moment nobody could
3270
- * see, which is worse than not animating it.
3271
- *
3272
- * Reduced motion takes the old path exactly: no sweep, no wait.
3273
- */
3274
- private commitConfirm;
3286
+ /** @internal The card's own button calls the card; this is the seam the
3287
+ * widget's tests press. */
3288
+ /** @internal */ commitConfirm(): Promise<void>;
3275
3289
  private cancelConfirm;
3276
3290
  private closeConfirm;
3291
+ /** See `./pickerConfirmCard`; kept as members because the widget's tests
3292
+ * call and replace both on the instance. */
3293
+ private inviteCommit;
3294
+ private addSeatLabel;
3277
3295
  private seatViewEnabled;
3278
3296
  /** Every bookable seat (cached) — neighbor heads for the generated panorama. */
3279
3297
  /** @internal */ allSeats(): ExpandedSeat[];