@seatlayer/js 0.68.0 → 0.69.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
@@ -615,6 +615,9 @@ interface GaPromptPicker {
615
615
  onGAPromptHook?: ((prompt: GAPromptRequest) => boolean | void) | undefined;
616
616
  }
617
617
 
618
+ type SeatingChartBuyerView = 'map' | 'venue3d';
619
+ type SeatingChartNavigationMode = 'orbit' | 'pan';
620
+
618
621
  /**
619
622
  * SeatingChart — the embeddable buyer picker.
620
623
  *
@@ -681,6 +684,10 @@ interface SeatingChartPickerState {
681
684
  bestAvailable: boolean;
682
685
  accessibilityFilter: boolean;
683
686
  limitedViewFilter: boolean;
687
+ /** Real lazy-loaded WebGL venue view, not the retired isometric projection. */
688
+ venue3d: boolean;
689
+ /** Authored or chart-derived view-from-seat panorama. */
690
+ seatView: boolean;
684
691
  };
685
692
  catalog: {
686
693
  categories: Array<{
@@ -723,6 +730,9 @@ interface SeatingChartPickerState {
723
730
  focusedSectionId: string | null;
724
731
  focusedSection: SectionSummary | null;
725
732
  viewMode: RendererViewMode;
733
+ buyerView: SeatingChartBuyerView;
734
+ view3dTargetSeatId: string | null;
735
+ view3dNavigationMode: SeatingChartNavigationMode;
726
736
  colorblindSafe: boolean;
727
737
  categoryFilter: string[] | null;
728
738
  accessibilityFilter: string[] | null;
@@ -820,6 +830,12 @@ interface SeatingChartOptions {
820
830
  * real 3D venue view (`setBuyerView('venue3d')`); they remain accepted for
821
831
  * source compatibility and will be removed in the next major. Use `'flat'`. */
822
832
  initialView?: RendererViewMode;
833
+ /** Offer the real, lazy-loaded interactive venue view. Default true. */
834
+ enable3D?: boolean;
835
+ /** Offer authored/generated view-from-seat inspection. Default true. */
836
+ enableSeatView?: boolean;
837
+ /** Optional device-specific ceiling for offering the venue WebGL scene. */
838
+ max3DSeats?: number;
823
839
  /**
824
840
  * Built-in seat tooltip on mouse hover (seat · category · price · status).
825
841
  * Rendered inside the widget so every host gets it; default true. Turn off
@@ -906,8 +922,13 @@ interface SeatingChartOptions {
906
922
  onSalesClosed?: () => void;
907
923
  /** A programmatic/native map-control action changed serializable map state. */
908
924
  onMapStateChange?: () => void;
909
- /** Pan/zoom/resize settled; useful for host overlays and native map controls. */
925
+ /** rAF-coalesced camera-frame signal for in-page overlays; not native state. */
910
926
  onViewChange?: () => void;
927
+ /** Real buyer-view transitions and 3D camera targets. */
928
+ onBuyerViewChange?: (state: {
929
+ view: SeatingChartBuyerView;
930
+ seatId?: string;
931
+ }) => void;
911
932
  /**
912
933
  * Non-blocking, localized selection advice — currently the orphan-seat hint
913
934
  * (the selection would strand a single free seat between taken neighbors).
@@ -922,6 +943,13 @@ declare class SeatingChart {
922
943
  readonly publicKey?: string;
923
944
  private mount;
924
945
  private hostEl;
946
+ /**
947
+ * Native hosts can render a Flutter/Swift/Kotlin decision surface above this
948
+ * DOM tree. UIKit platform views still participate in hit testing beneath a
949
+ * composited native overlay, so the runtime must be able to make its own DOM
950
+ * inert rather than relying on the host's visual stacking alone.
951
+ */
952
+ private interactionEnabled_;
925
953
  /** The organizer's language for this event, learned when the chart resolves. */
926
954
  private eventLocale;
927
955
  private rendered;
@@ -933,6 +961,8 @@ declare class SeatingChart {
933
961
  private accessibilityFilter_;
934
962
  private hideLimitedView_;
935
963
  private focusedSection_;
964
+ /** Last rung already exposed to native chrome; raw camera frames stay in-canvas. */
965
+ private lastReportedViewRung_;
936
966
  private accessState_;
937
967
  private tipEl;
938
968
  private tipPos;
@@ -940,8 +970,19 @@ declare class SeatingChart {
940
970
  /** Null for the ordinary public chart — the tokenless path is untouched. */
941
971
  private readonly access;
942
972
  private readonly api;
973
+ private readonly apiBase;
974
+ private readonly buyerAssetUrls;
975
+ private readonly immersive;
943
976
  private realtime;
944
977
  constructor(options: SeatingChartOptions);
978
+ /**
979
+ * Camera x/y/scale is renderer-local and deliberately absent from the native
980
+ * picker snapshot. Keep pan and pinch frames on the canvas; only a semantic
981
+ * rung transition needs to wake native chrome.
982
+ */
983
+ private handleViewChange;
984
+ /** Record the current rung before publishing an explicit state mutation. */
985
+ private notifyMapStateChange;
945
986
  /** Fetch the chart, mount the renderer, seed statuses and go live. Idempotent. */
946
987
  render(): Promise<this>;
947
988
  /**
@@ -1125,6 +1166,28 @@ declare class SeatingChart {
1125
1166
  zoomOut(): void;
1126
1167
  /** Reset the camera so the whole chart fits the container. */
1127
1168
  zoomToFit(): void;
1169
+ /** Enter or leave the same real lazy-loaded venue scene as SeatPicker. */
1170
+ setBuyerView(view: SeatingChartBuyerView, options?: {
1171
+ flyToSeatId?: string;
1172
+ resetView?: boolean;
1173
+ }): Promise<void>;
1174
+ getBuyerView(): SeatingChartBuyerView;
1175
+ /** Open an authored or chart-derived 360° view for one physical seat. */
1176
+ openSeatView(seatId: string): Promise<void>;
1177
+ /** Explicit Rotate / Move control for native and custom picker chrome. */
1178
+ setVenue3DNavigationMode(mode: SeatingChartNavigationMode): void;
1179
+ /**
1180
+ * Enable or suppress all buyer input inside this chart without unmounting it.
1181
+ *
1182
+ * Native SDKs use this while a native confirmation, quantity prompt, loading
1183
+ * surface or error surface owns the chart area. Disabling input in the DOM is
1184
+ * intentional: an iOS WKWebView can receive the same physical tap beneath a
1185
+ * Flutter overlay even when the Flutter widget is wrapped in IgnorePointer.
1186
+ * Programmatic bridge commands continue to work, so a prompt can still open
1187
+ * view-from-seat or 3D and then re-enable interaction after the handoff.
1188
+ */
1189
+ setInteractionEnabled(enabled: boolean): void;
1190
+ private applyInteractionState;
1128
1191
  /** Release the current hold (if any). No-op when nothing is held. */
1129
1192
  release(): Promise<void>;
1130
1193
  /** Release selected labels from the current hold while keeping the remainder. */
@@ -2241,9 +2304,11 @@ declare class SeatPicker implements GaPromptPicker {
2241
2304
  private tipPos;
2242
2305
  /** True while a TAPPED seat card is held open (touch has no hover to lose). */
2243
2306
  private tipPinned;
2307
+ private tipMarkedHoverLabel;
2244
2308
  private lastPointerType;
2245
2309
  private confirmEl;
2246
2310
  private confirmSeat;
2311
+ private suppressConfirmationSeatId;
2247
2312
  private tableDialogEl;
2248
2313
  private tableDialog;
2249
2314
  private tableDialogHeld;
@@ -2563,6 +2628,26 @@ declare class SeatPicker implements GaPromptPicker {
2563
2628
  * the sheet head (narrow). Never floats over the seats at the tap point.
2564
2629
  */
2565
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;
2566
2651
  /** Collapse the expanded card to its slim pill (seat-picking started). */
2567
2652
  private collapseSectionCard;
2568
2653
  /**
@@ -2749,8 +2834,8 @@ declare class SeatPicker implements GaPromptPicker {
2749
2834
  * group whose wrapper did not supply the nights.
2750
2835
  */
2751
2836
  private nightStripFor;
2752
- /** Close a tapped-open card. Safe to call when nothing is pinned. */
2753
2837
  private unpinTooltip;
2838
+ private handleMapPointerDown;
2754
2839
  private updateTooltip;
2755
2840
  /**
2756
2841
  * Push the wrapper's current seat marks at the renderer.
@@ -2765,6 +2850,7 @@ declare class SeatPicker implements GaPromptPicker {
2765
2850
  getSelection(): PickerSeat[];
2766
2851
  /** Select free objects by engine id or public label. */
2767
2852
  selectObjects(objects: string[]): PickerSeat[];
2853
+ selectObjectsWithoutConfirmation(objects: string[]): PickerSeat[];
2768
2854
  /** Deselect objects by engine id or public label. */
2769
2855
  deselectObjects(objects: string[]): void;
2770
2856
  /** Clear every unheld selection. */
@@ -3008,6 +3094,7 @@ interface PerformanceGroupDescriptor {
3008
3094
  venue: string;
3009
3095
  timezone: string | null;
3010
3096
  inventoryModelVersion: 2;
3097
+ inclusionMode?: 'fixed' | 'flexible_dates';
3011
3098
  performanceCount: number;
3012
3099
  /** Present when the server versions the inclusion set. See {@link PerformanceGroupAvailability}. */
3013
3100
  revision?: string;
@@ -3103,6 +3190,8 @@ interface PerformanceGroupCheckoutHandoff {
3103
3190
  expiresAt: number;
3104
3191
  performanceGroup: PerformanceGroupDescriptor;
3105
3192
  selectionMode: PerformanceGroupSelectionMode;
3193
+ /** Performances actually included in this hold (all members for fixed groups). */
3194
+ performanceKeys: string[];
3106
3195
  /** Logical booking identities only. Re-inspect the opaque hold on your server. */
3107
3196
  seatLabels: string[];
3108
3197
  /** Present for per-performance selection. Prices and child hold IDs remain server-only. */
@@ -3159,6 +3248,8 @@ interface PerformanceGroupPickerOptions {
3159
3248
  view: SeatPickerBuyerView;
3160
3249
  seatId?: string;
3161
3250
  }) => void;
3251
+ /** Receives the underlying chart journey with Performance Group identity attached. */
3252
+ onAnalytics?: (event: string, props: Record<string, unknown>) => void;
3162
3253
  hideBadge?: boolean;
3163
3254
  theme?: SeatPickerTheme;
3164
3255
  holdTtlMs?: number;
@@ -3221,6 +3312,12 @@ declare class PerformanceGroupPicker {
3221
3312
  private progressHost;
3222
3313
  private legendHost;
3223
3314
  private paneHost;
3315
+ private datesSummaryHost;
3316
+ private datesCardsHost;
3317
+ private resettingFlexibleSelection;
3318
+ private selectingPartialSeat;
3319
+ /** The free dates advertised by a two-tone seat before the chart is narrowed. */
3320
+ private readonly partialSeatDates;
3224
3321
  /** Labels pushed at the renderer on the last pull, so departures clear. */
3225
3322
  private markedLabels;
3226
3323
  private holdTicker;
@@ -3315,6 +3412,12 @@ declare class PerformanceGroupPicker {
3315
3412
  * the buyer could reasonably hold us to.
3316
3413
  */
3317
3414
  private heldTotal;
3415
+ private includedPerformances;
3416
+ /** Keep the persistent date promise aligned with the subset used by HOLD. */
3417
+ private syncIncludedDates;
3418
+ /** Turn one two-tone seat into a normal selection without changing charts. */
3419
+ private selectPartialSeat;
3420
+ private applySeatDates;
3318
3421
  /** One tick a second while a hold is live, so the countdown line is true. */
3319
3422
  private syncHoldTicker;
3320
3423
  /**
package/dist/index.d.ts CHANGED
@@ -615,6 +615,9 @@ interface GaPromptPicker {
615
615
  onGAPromptHook?: ((prompt: GAPromptRequest) => boolean | void) | undefined;
616
616
  }
617
617
 
618
+ type SeatingChartBuyerView = 'map' | 'venue3d';
619
+ type SeatingChartNavigationMode = 'orbit' | 'pan';
620
+
618
621
  /**
619
622
  * SeatingChart — the embeddable buyer picker.
620
623
  *
@@ -681,6 +684,10 @@ interface SeatingChartPickerState {
681
684
  bestAvailable: boolean;
682
685
  accessibilityFilter: boolean;
683
686
  limitedViewFilter: boolean;
687
+ /** Real lazy-loaded WebGL venue view, not the retired isometric projection. */
688
+ venue3d: boolean;
689
+ /** Authored or chart-derived view-from-seat panorama. */
690
+ seatView: boolean;
684
691
  };
685
692
  catalog: {
686
693
  categories: Array<{
@@ -723,6 +730,9 @@ interface SeatingChartPickerState {
723
730
  focusedSectionId: string | null;
724
731
  focusedSection: SectionSummary | null;
725
732
  viewMode: RendererViewMode;
733
+ buyerView: SeatingChartBuyerView;
734
+ view3dTargetSeatId: string | null;
735
+ view3dNavigationMode: SeatingChartNavigationMode;
726
736
  colorblindSafe: boolean;
727
737
  categoryFilter: string[] | null;
728
738
  accessibilityFilter: string[] | null;
@@ -820,6 +830,12 @@ interface SeatingChartOptions {
820
830
  * real 3D venue view (`setBuyerView('venue3d')`); they remain accepted for
821
831
  * source compatibility and will be removed in the next major. Use `'flat'`. */
822
832
  initialView?: RendererViewMode;
833
+ /** Offer the real, lazy-loaded interactive venue view. Default true. */
834
+ enable3D?: boolean;
835
+ /** Offer authored/generated view-from-seat inspection. Default true. */
836
+ enableSeatView?: boolean;
837
+ /** Optional device-specific ceiling for offering the venue WebGL scene. */
838
+ max3DSeats?: number;
823
839
  /**
824
840
  * Built-in seat tooltip on mouse hover (seat · category · price · status).
825
841
  * Rendered inside the widget so every host gets it; default true. Turn off
@@ -906,8 +922,13 @@ interface SeatingChartOptions {
906
922
  onSalesClosed?: () => void;
907
923
  /** A programmatic/native map-control action changed serializable map state. */
908
924
  onMapStateChange?: () => void;
909
- /** Pan/zoom/resize settled; useful for host overlays and native map controls. */
925
+ /** rAF-coalesced camera-frame signal for in-page overlays; not native state. */
910
926
  onViewChange?: () => void;
927
+ /** Real buyer-view transitions and 3D camera targets. */
928
+ onBuyerViewChange?: (state: {
929
+ view: SeatingChartBuyerView;
930
+ seatId?: string;
931
+ }) => void;
911
932
  /**
912
933
  * Non-blocking, localized selection advice — currently the orphan-seat hint
913
934
  * (the selection would strand a single free seat between taken neighbors).
@@ -922,6 +943,13 @@ declare class SeatingChart {
922
943
  readonly publicKey?: string;
923
944
  private mount;
924
945
  private hostEl;
946
+ /**
947
+ * Native hosts can render a Flutter/Swift/Kotlin decision surface above this
948
+ * DOM tree. UIKit platform views still participate in hit testing beneath a
949
+ * composited native overlay, so the runtime must be able to make its own DOM
950
+ * inert rather than relying on the host's visual stacking alone.
951
+ */
952
+ private interactionEnabled_;
925
953
  /** The organizer's language for this event, learned when the chart resolves. */
926
954
  private eventLocale;
927
955
  private rendered;
@@ -933,6 +961,8 @@ declare class SeatingChart {
933
961
  private accessibilityFilter_;
934
962
  private hideLimitedView_;
935
963
  private focusedSection_;
964
+ /** Last rung already exposed to native chrome; raw camera frames stay in-canvas. */
965
+ private lastReportedViewRung_;
936
966
  private accessState_;
937
967
  private tipEl;
938
968
  private tipPos;
@@ -940,8 +970,19 @@ declare class SeatingChart {
940
970
  /** Null for the ordinary public chart — the tokenless path is untouched. */
941
971
  private readonly access;
942
972
  private readonly api;
973
+ private readonly apiBase;
974
+ private readonly buyerAssetUrls;
975
+ private readonly immersive;
943
976
  private realtime;
944
977
  constructor(options: SeatingChartOptions);
978
+ /**
979
+ * Camera x/y/scale is renderer-local and deliberately absent from the native
980
+ * picker snapshot. Keep pan and pinch frames on the canvas; only a semantic
981
+ * rung transition needs to wake native chrome.
982
+ */
983
+ private handleViewChange;
984
+ /** Record the current rung before publishing an explicit state mutation. */
985
+ private notifyMapStateChange;
945
986
  /** Fetch the chart, mount the renderer, seed statuses and go live. Idempotent. */
946
987
  render(): Promise<this>;
947
988
  /**
@@ -1125,6 +1166,28 @@ declare class SeatingChart {
1125
1166
  zoomOut(): void;
1126
1167
  /** Reset the camera so the whole chart fits the container. */
1127
1168
  zoomToFit(): void;
1169
+ /** Enter or leave the same real lazy-loaded venue scene as SeatPicker. */
1170
+ setBuyerView(view: SeatingChartBuyerView, options?: {
1171
+ flyToSeatId?: string;
1172
+ resetView?: boolean;
1173
+ }): Promise<void>;
1174
+ getBuyerView(): SeatingChartBuyerView;
1175
+ /** Open an authored or chart-derived 360° view for one physical seat. */
1176
+ openSeatView(seatId: string): Promise<void>;
1177
+ /** Explicit Rotate / Move control for native and custom picker chrome. */
1178
+ setVenue3DNavigationMode(mode: SeatingChartNavigationMode): void;
1179
+ /**
1180
+ * Enable or suppress all buyer input inside this chart without unmounting it.
1181
+ *
1182
+ * Native SDKs use this while a native confirmation, quantity prompt, loading
1183
+ * surface or error surface owns the chart area. Disabling input in the DOM is
1184
+ * intentional: an iOS WKWebView can receive the same physical tap beneath a
1185
+ * Flutter overlay even when the Flutter widget is wrapped in IgnorePointer.
1186
+ * Programmatic bridge commands continue to work, so a prompt can still open
1187
+ * view-from-seat or 3D and then re-enable interaction after the handoff.
1188
+ */
1189
+ setInteractionEnabled(enabled: boolean): void;
1190
+ private applyInteractionState;
1128
1191
  /** Release the current hold (if any). No-op when nothing is held. */
1129
1192
  release(): Promise<void>;
1130
1193
  /** Release selected labels from the current hold while keeping the remainder. */
@@ -2241,9 +2304,11 @@ declare class SeatPicker implements GaPromptPicker {
2241
2304
  private tipPos;
2242
2305
  /** True while a TAPPED seat card is held open (touch has no hover to lose). */
2243
2306
  private tipPinned;
2307
+ private tipMarkedHoverLabel;
2244
2308
  private lastPointerType;
2245
2309
  private confirmEl;
2246
2310
  private confirmSeat;
2311
+ private suppressConfirmationSeatId;
2247
2312
  private tableDialogEl;
2248
2313
  private tableDialog;
2249
2314
  private tableDialogHeld;
@@ -2563,6 +2628,26 @@ declare class SeatPicker implements GaPromptPicker {
2563
2628
  * the sheet head (narrow). Never floats over the seats at the tap point.
2564
2629
  */
2565
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;
2566
2651
  /** Collapse the expanded card to its slim pill (seat-picking started). */
2567
2652
  private collapseSectionCard;
2568
2653
  /**
@@ -2749,8 +2834,8 @@ declare class SeatPicker implements GaPromptPicker {
2749
2834
  * group whose wrapper did not supply the nights.
2750
2835
  */
2751
2836
  private nightStripFor;
2752
- /** Close a tapped-open card. Safe to call when nothing is pinned. */
2753
2837
  private unpinTooltip;
2838
+ private handleMapPointerDown;
2754
2839
  private updateTooltip;
2755
2840
  /**
2756
2841
  * Push the wrapper's current seat marks at the renderer.
@@ -2765,6 +2850,7 @@ declare class SeatPicker implements GaPromptPicker {
2765
2850
  getSelection(): PickerSeat[];
2766
2851
  /** Select free objects by engine id or public label. */
2767
2852
  selectObjects(objects: string[]): PickerSeat[];
2853
+ selectObjectsWithoutConfirmation(objects: string[]): PickerSeat[];
2768
2854
  /** Deselect objects by engine id or public label. */
2769
2855
  deselectObjects(objects: string[]): void;
2770
2856
  /** Clear every unheld selection. */
@@ -3008,6 +3094,7 @@ interface PerformanceGroupDescriptor {
3008
3094
  venue: string;
3009
3095
  timezone: string | null;
3010
3096
  inventoryModelVersion: 2;
3097
+ inclusionMode?: 'fixed' | 'flexible_dates';
3011
3098
  performanceCount: number;
3012
3099
  /** Present when the server versions the inclusion set. See {@link PerformanceGroupAvailability}. */
3013
3100
  revision?: string;
@@ -3103,6 +3190,8 @@ interface PerformanceGroupCheckoutHandoff {
3103
3190
  expiresAt: number;
3104
3191
  performanceGroup: PerformanceGroupDescriptor;
3105
3192
  selectionMode: PerformanceGroupSelectionMode;
3193
+ /** Performances actually included in this hold (all members for fixed groups). */
3194
+ performanceKeys: string[];
3106
3195
  /** Logical booking identities only. Re-inspect the opaque hold on your server. */
3107
3196
  seatLabels: string[];
3108
3197
  /** Present for per-performance selection. Prices and child hold IDs remain server-only. */
@@ -3159,6 +3248,8 @@ interface PerformanceGroupPickerOptions {
3159
3248
  view: SeatPickerBuyerView;
3160
3249
  seatId?: string;
3161
3250
  }) => void;
3251
+ /** Receives the underlying chart journey with Performance Group identity attached. */
3252
+ onAnalytics?: (event: string, props: Record<string, unknown>) => void;
3162
3253
  hideBadge?: boolean;
3163
3254
  theme?: SeatPickerTheme;
3164
3255
  holdTtlMs?: number;
@@ -3221,6 +3312,12 @@ declare class PerformanceGroupPicker {
3221
3312
  private progressHost;
3222
3313
  private legendHost;
3223
3314
  private paneHost;
3315
+ private datesSummaryHost;
3316
+ private datesCardsHost;
3317
+ private resettingFlexibleSelection;
3318
+ private selectingPartialSeat;
3319
+ /** The free dates advertised by a two-tone seat before the chart is narrowed. */
3320
+ private readonly partialSeatDates;
3224
3321
  /** Labels pushed at the renderer on the last pull, so departures clear. */
3225
3322
  private markedLabels;
3226
3323
  private holdTicker;
@@ -3315,6 +3412,12 @@ declare class PerformanceGroupPicker {
3315
3412
  * the buyer could reasonably hold us to.
3316
3413
  */
3317
3414
  private heldTotal;
3415
+ private includedPerformances;
3416
+ /** Keep the persistent date promise aligned with the subset used by HOLD. */
3417
+ private syncIncludedDates;
3418
+ /** Turn one two-tone seat into a normal selection without changing charts. */
3419
+ private selectPartialSeat;
3420
+ private applySeatDates;
3318
3421
  /** One tick a second while a hold is live, so the countdown line is true. */
3319
3422
  private syncHoldTicker;
3320
3423
  /**