@seatlayer/js 0.54.0 → 0.55.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.cts CHANGED
@@ -1,6 +1,6 @@
1
- import { PickerSeat, RendererViewMode, SeatHoverDetails, PickerTransport, PickerMapTheme } from '@seatlayer/core';
2
- export { ExpandedSeat, PickerMapTheme, 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 EventScopedManageToken, M as IntentSwitchBlockedDetails, N as InventoryBooking, O as InventoryBookingActivity, P as InventoryBookingDetail, Q as InventoryBookingObject, R as InventoryBookingState, S as InventoryBookingsPage, T as InventoryBookingsQuery, U as LogEntry, V as LogPage, W as ManageApi, X as ManageApiError, Y as ReportByStatus, Z as ReportCategoryMeta, _ as ReportCategoryRow, $ as ReportResult, a0 as SeatManager, a1 as SeatManagerActionResult, a2 as SeatManagerActivity, a3 as SeatManagerCapability, a4 as SeatManagerConnection, a5 as SeatManagerMode, a6 as SeatManagerOptions, a7 as SeatManagerTallies, a8 as SelectionSourceRow } from './channelsMode-BX7s9bUl.cjs';
1
+ import { PickerSeat, RendererViewMode, SeatHoverDetails, PickerSelectionValidity, PickerTransport, PickerMapTheme } from '@seatlayer/core';
2
+ export { ExpandedSeat, PickerMapTheme, PickerSelectionValidity, 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-1b6xBWKM.cjs';
4
4
 
5
5
  /**
6
6
  * Buyer access context — the browser half of the Sales Channels contract
@@ -568,6 +568,12 @@ interface SeatingChartOptions {
568
568
  buyerAccessToken?: string | BuyerAccessToken;
569
569
  /** Max seats selectable at once (default 10). */
570
570
  maxSelection?: number;
571
+ /** Object ids or public labels selected after live availability is loaded. */
572
+ selectedObjects?: string[];
573
+ /** Object ids or public labels the buyer may select. Omit for all free objects. */
574
+ selectableObjects?: string[] | null;
575
+ /** Require exactly this many seated/table guest units before the selection is valid. */
576
+ numberOfPlacesToSelect?: number;
571
577
  /**
572
578
  * BCP 47 language for the widget UI — `'de'`, `'es-MX'`, etc. Falls back to
573
579
  * the browser language, then English. Built-in: en, es, de, fr. The German
@@ -605,6 +611,14 @@ interface SeatingChartOptions {
605
611
  */
606
612
  onSeatHover?: (details: SeatHoverDetails | null) => void;
607
613
  onSelectionChange?: (seats: SelectedSeat[]) => void;
614
+ /** Exact-count state after each selection change. */
615
+ onSelectionValidityChange?: (state: PickerSelectionValidity) => void;
616
+ /** The exact configured count has just been reached. */
617
+ onSelectionValid?: (seats: SelectedSeat[]) => void;
618
+ /** The current selection does not match the configured exact count. */
619
+ onSelectionInvalid?: (state: PickerSelectionValidity) => void;
620
+ /** A manual or programmatic selection reached the active maximum. */
621
+ onSelectionLimit?: (maxSelection: number) => void;
608
622
  onHold?: (result: HoldResult) => void;
609
623
  /** A prior active hold was restored with resumeHold(). */
610
624
  onHoldRestored?: (result: HoldResult) => void;
@@ -701,6 +715,22 @@ declare class SeatingChart {
701
715
  getMode(): 'live' | 'test' | null;
702
716
  /** Current selection with prices resolved from the chart categories. */
703
717
  getSelection(): SelectedSeat[];
718
+ /** Select free objects by engine id or public label. Returns newly selected objects. */
719
+ selectObjects(objects: string[]): SelectedSeat[];
720
+ /** Deselect objects by engine id or public label. */
721
+ deselectObjects(objects: string[]): void;
722
+ /** Clear every unheld selection. */
723
+ clearSelection(): void;
724
+ /** Select every selectable object in the named categories. */
725
+ selectCategories(categoryKeys: string[]): SelectedSeat[];
726
+ /** Deselect every selected object in the named categories. */
727
+ deselectCategories(categoryKeys: string[]): void;
728
+ /** Replace the buyer-selectable object allow-list without remounting. */
729
+ setSelectableObjects(objects: string[] | null): void;
730
+ /** Change the selection cap without remounting. */
731
+ setMaxSelection(maxSelection: number): void;
732
+ /** Current exact-count validity, or null when no exact count was configured. */
733
+ getSelectionValidity(): PickerSelectionValidity | null;
704
734
  /** Hold the current selection. Resolves the hold, or null on a 409 conflict. */
705
735
  hold(options?: {
706
736
  ttlMs?: number;
@@ -871,6 +901,22 @@ interface SeatingChartHandle {
871
901
  releaseLabels(labels: string[]): Promise<boolean>;
872
902
  /** The current selection, with prices resolved from the chart categories. */
873
903
  getSelection(): SelectedSeat[];
904
+ /** Select free objects by engine id or public label. */
905
+ selectObjects(objects: string[]): SelectedSeat[];
906
+ /** Deselect objects by engine id or public label. */
907
+ deselectObjects(objects: string[]): void;
908
+ /** Clear every unheld selection. */
909
+ clearSelection(): void;
910
+ /** Select every selectable object in the named categories. */
911
+ selectCategories(categoryKeys: string[]): SelectedSeat[];
912
+ /** Deselect every selected object in the named categories. */
913
+ deselectCategories(categoryKeys: string[]): void;
914
+ /** Replace the buyer-selectable object allow-list without rebuilding. */
915
+ setSelectableObjects(objects: string[] | null): void;
916
+ /** Change the selection cap without rebuilding. */
917
+ setMaxSelection(maxSelection: number): void;
918
+ /** Current exact-count validity, or null when no exact count was configured. */
919
+ getSelectionValidity(): PickerSelectionValidity | null;
874
920
  /**
875
921
  * Choose a ticket tier for a selected seat (e.g. Adult → Child). Available
876
922
  * `tiers` are on each `SelectedSeat`; `tierId=null` reverts to the default.
@@ -904,7 +950,7 @@ interface SeatingChartHandle {
904
950
  * Every method a wrapper must forward. The wrappers build their handle by
905
951
  * iterating this, so the list IS the contract rather than a description of it.
906
952
  */
907
- declare const SEATING_CHART_HANDLE_METHODS: readonly ["hold", "resumeHold", "getCurrentHold", "getGAAreas", "holdGA", "bestAvailable", "release", "releaseLabels", "getSelection", "setSeatTier", "getFloors", "setFloor", "setColorblindSafe", "zoomIn", "zoomOut", "zoomToFit", "refreshAccess"];
953
+ declare const SEATING_CHART_HANDLE_METHODS: readonly ["hold", "resumeHold", "getCurrentHold", "getGAAreas", "holdGA", "bestAvailable", "release", "releaseLabels", "getSelection", "selectObjects", "deselectObjects", "clearSelection", "selectCategories", "deselectCategories", "setSelectableObjects", "setMaxSelection", "getSelectionValidity", "setSeatTier", "getFloors", "setFloor", "setColorblindSafe", "zoomIn", "zoomOut", "zoomToFit", "refreshAccess"];
908
954
  type SeatingChartHandleMethod = (typeof SEATING_CHART_HANDLE_METHODS)[number];
909
955
  /**
910
956
  * Build the forwarding object every wrapper exposes.
@@ -925,13 +971,13 @@ declare function bindSeatingChartHandle(getInstance: () => SeatingChart | null):
925
971
  * two behaviours. React already treated them this way; Vue and Angular did not
926
972
  * expose them at all.
927
973
  */
928
- declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
974
+ declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
929
975
  type SeatingChartIdentityProp = (typeof SEATING_CHART_IDENTITY_PROPS)[number];
930
976
  /** Non-callback options a wrapper accepts as props/inputs and passes straight through. */
931
- declare const SEATING_CHART_VALUE_PROPS: readonly ["event", "apiBase", "maxSelection", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay", "messages", "seatTooltip", "buyerAccessTokenProvider", "buyerAccessToken"];
977
+ declare const SEATING_CHART_VALUE_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay", "selectedObjects", "selectableObjects", "messages", "seatTooltip", "buyerAccessTokenProvider", "buyerAccessToken"];
932
978
  type SeatingChartValueProp = (typeof SEATING_CHART_VALUE_PROPS)[number];
933
979
  /** Every callback option a wrapper wires to its own event mechanism. */
934
- declare const SEATING_CHART_CALLBACK_PROPS: readonly ["onSelectionChange", "onHold", "onHoldRestored", "onHoldExpired", "onGAClick", "onError", "onDeckTap", "onHint", "onSeatHover", "onAccessExpired", "onAccessUnavailable", "onSelectedObjectUnavailable"];
980
+ declare const SEATING_CHART_CALLBACK_PROPS: readonly ["onSelectionChange", "onSelectionValidityChange", "onSelectionValid", "onSelectionInvalid", "onSelectionLimit", "onHold", "onHoldRestored", "onHoldExpired", "onGAClick", "onError", "onDeckTap", "onHint", "onSeatHover", "onAccessExpired", "onAccessUnavailable", "onSelectedObjectUnavailable"];
935
981
  type SeatingChartCallbackProp = (typeof SEATING_CHART_CALLBACK_PROPS)[number];
936
982
  /** The value half of the options, as a wrapper holds it. */
937
983
  type SeatingChartValues = Pick<SeatingChartOptions, SeatingChartValueProp>;
@@ -1440,6 +1486,12 @@ interface SeatPickerOptions {
1440
1486
  buyerAccessToken?: string | BuyerAccessToken;
1441
1487
  /** Max seats selectable at once (default 10). */
1442
1488
  maxSelection?: number;
1489
+ /** Object ids or public labels selected after live availability is loaded. */
1490
+ selectedObjects?: string[];
1491
+ /** Object ids or public labels the buyer may select. Omit for all free objects. */
1492
+ selectableObjects?: string[] | null;
1493
+ /** Require exactly this many total seated/table/GA guest units before checkout. */
1494
+ numberOfPlacesToSelect?: number;
1443
1495
  /** BCP 47 language for the widget UI. Built-in: en, es, de, fr. */
1444
1496
  locale?: string;
1445
1497
  /** Per-key string overrides layered over the active locale. */
@@ -1665,6 +1717,14 @@ interface SeatPickerOptions {
1665
1717
  onBooked?: (handoff: CheckoutHandoff) => void;
1666
1718
  /** Selection changed (tap or best-available). */
1667
1719
  onSelectionChange?: (seats: PickerSeat[]) => void;
1720
+ /** Exact-count state after each selection change. */
1721
+ onSelectionValidityChange?: (state: PickerSelectionValidity) => void;
1722
+ /** The configured exact ticket count has just been reached. */
1723
+ onSelectionValid?: (seats: PickerSeat[]) => void;
1724
+ /** The current selection does not match the configured exact ticket count. */
1725
+ onSelectionInvalid?: (state: PickerSelectionValidity) => void;
1726
+ /** A selection attempt reached the active maximum. */
1727
+ onSelectionLimit?: (maxSelection: number) => void;
1668
1728
  /**
1669
1729
  * Active hold changed because it was created, restored, extended, partially
1670
1730
  * released, or fully released. Hosts should persist this state for route
@@ -1734,7 +1794,10 @@ declare class SeatPicker {
1734
1794
  private accessEl;
1735
1795
  private readonly apiBase;
1736
1796
  private readonly controller;
1737
- private readonly maxTickets;
1797
+ private maxTickets;
1798
+ /** Exact ticket count required before checkout; null keeps ordinary 1..max behavior. */
1799
+ private readonly exactTickets;
1800
+ private lastExactSelectionValidity;
1738
1801
  /** Original host pricing, kept separate from live server offer overrides. */
1739
1802
  private readonly hostPricing;
1740
1803
  private root;
@@ -2212,6 +2275,7 @@ declare class SeatPicker {
2212
2275
  /** A live delta took one of OUR selected (not yet held) seats — evict + tell the buyer. */
2213
2276
  private evictTakenSelections;
2214
2277
  private syncTray;
2278
+ private emitExactSelectionValidity;
2215
2279
  /** Paint the bottom-sheet's collapsed one-liner (pickerTray.ts builds it). */
2216
2280
  private renderPeek;
2217
2281
  private removeHeldLabel;
@@ -2282,6 +2346,22 @@ declare class SeatPicker {
2282
2346
  private rowTypeWord;
2283
2347
  private updateTooltip;
2284
2348
  getSelection(): PickerSeat[];
2349
+ /** Select free objects by engine id or public label. */
2350
+ selectObjects(objects: string[]): PickerSeat[];
2351
+ /** Deselect objects by engine id or public label. */
2352
+ deselectObjects(objects: string[]): void;
2353
+ /** Clear every unheld selection. */
2354
+ clearSelection(): void;
2355
+ /** Select every selectable object in the named categories. */
2356
+ selectCategories(categoryKeys: string[]): PickerSeat[];
2357
+ /** Deselect every selected object in the named categories. */
2358
+ deselectCategories(categoryKeys: string[]): void;
2359
+ /** Replace the buyer-selectable object allow-list without remounting. */
2360
+ setSelectableObjects(objects: string[] | null): void;
2361
+ /** Change the order selection cap without remounting. */
2362
+ setMaxSelection(maxSelection: number): void;
2363
+ /** Current exact-count validity, including held and pending GA tickets. */
2364
+ getSelectionValidity(): PickerSelectionValidity | null;
2285
2365
  /**
2286
2366
  * Re-ink the DRAWN MAP after mount, so the canvas can follow a page palette
2287
2367
  * the host did not know at construction time.
package/dist/index.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { PickerSeat, RendererViewMode, SeatHoverDetails, PickerTransport, PickerMapTheme } from '@seatlayer/core';
2
- export { ExpandedSeat, PickerMapTheme, 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 EventScopedManageToken, M as IntentSwitchBlockedDetails, N as InventoryBooking, O as InventoryBookingActivity, P as InventoryBookingDetail, Q as InventoryBookingObject, R as InventoryBookingState, S as InventoryBookingsPage, T as InventoryBookingsQuery, U as LogEntry, V as LogPage, W as ManageApi, X as ManageApiError, Y as ReportByStatus, Z as ReportCategoryMeta, _ as ReportCategoryRow, $ as ReportResult, a0 as SeatManager, a1 as SeatManagerActionResult, a2 as SeatManagerActivity, a3 as SeatManagerCapability, a4 as SeatManagerConnection, a5 as SeatManagerMode, a6 as SeatManagerOptions, a7 as SeatManagerTallies, a8 as SelectionSourceRow } from './channelsMode-BX7s9bUl.js';
1
+ import { PickerSeat, RendererViewMode, SeatHoverDetails, PickerSelectionValidity, PickerTransport, PickerMapTheme } from '@seatlayer/core';
2
+ export { ExpandedSeat, PickerMapTheme, PickerSelectionValidity, 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-1b6xBWKM.js';
4
4
 
5
5
  /**
6
6
  * Buyer access context — the browser half of the Sales Channels contract
@@ -568,6 +568,12 @@ interface SeatingChartOptions {
568
568
  buyerAccessToken?: string | BuyerAccessToken;
569
569
  /** Max seats selectable at once (default 10). */
570
570
  maxSelection?: number;
571
+ /** Object ids or public labels selected after live availability is loaded. */
572
+ selectedObjects?: string[];
573
+ /** Object ids or public labels the buyer may select. Omit for all free objects. */
574
+ selectableObjects?: string[] | null;
575
+ /** Require exactly this many seated/table guest units before the selection is valid. */
576
+ numberOfPlacesToSelect?: number;
571
577
  /**
572
578
  * BCP 47 language for the widget UI — `'de'`, `'es-MX'`, etc. Falls back to
573
579
  * the browser language, then English. Built-in: en, es, de, fr. The German
@@ -605,6 +611,14 @@ interface SeatingChartOptions {
605
611
  */
606
612
  onSeatHover?: (details: SeatHoverDetails | null) => void;
607
613
  onSelectionChange?: (seats: SelectedSeat[]) => void;
614
+ /** Exact-count state after each selection change. */
615
+ onSelectionValidityChange?: (state: PickerSelectionValidity) => void;
616
+ /** The exact configured count has just been reached. */
617
+ onSelectionValid?: (seats: SelectedSeat[]) => void;
618
+ /** The current selection does not match the configured exact count. */
619
+ onSelectionInvalid?: (state: PickerSelectionValidity) => void;
620
+ /** A manual or programmatic selection reached the active maximum. */
621
+ onSelectionLimit?: (maxSelection: number) => void;
608
622
  onHold?: (result: HoldResult) => void;
609
623
  /** A prior active hold was restored with resumeHold(). */
610
624
  onHoldRestored?: (result: HoldResult) => void;
@@ -701,6 +715,22 @@ declare class SeatingChart {
701
715
  getMode(): 'live' | 'test' | null;
702
716
  /** Current selection with prices resolved from the chart categories. */
703
717
  getSelection(): SelectedSeat[];
718
+ /** Select free objects by engine id or public label. Returns newly selected objects. */
719
+ selectObjects(objects: string[]): SelectedSeat[];
720
+ /** Deselect objects by engine id or public label. */
721
+ deselectObjects(objects: string[]): void;
722
+ /** Clear every unheld selection. */
723
+ clearSelection(): void;
724
+ /** Select every selectable object in the named categories. */
725
+ selectCategories(categoryKeys: string[]): SelectedSeat[];
726
+ /** Deselect every selected object in the named categories. */
727
+ deselectCategories(categoryKeys: string[]): void;
728
+ /** Replace the buyer-selectable object allow-list without remounting. */
729
+ setSelectableObjects(objects: string[] | null): void;
730
+ /** Change the selection cap without remounting. */
731
+ setMaxSelection(maxSelection: number): void;
732
+ /** Current exact-count validity, or null when no exact count was configured. */
733
+ getSelectionValidity(): PickerSelectionValidity | null;
704
734
  /** Hold the current selection. Resolves the hold, or null on a 409 conflict. */
705
735
  hold(options?: {
706
736
  ttlMs?: number;
@@ -871,6 +901,22 @@ interface SeatingChartHandle {
871
901
  releaseLabels(labels: string[]): Promise<boolean>;
872
902
  /** The current selection, with prices resolved from the chart categories. */
873
903
  getSelection(): SelectedSeat[];
904
+ /** Select free objects by engine id or public label. */
905
+ selectObjects(objects: string[]): SelectedSeat[];
906
+ /** Deselect objects by engine id or public label. */
907
+ deselectObjects(objects: string[]): void;
908
+ /** Clear every unheld selection. */
909
+ clearSelection(): void;
910
+ /** Select every selectable object in the named categories. */
911
+ selectCategories(categoryKeys: string[]): SelectedSeat[];
912
+ /** Deselect every selected object in the named categories. */
913
+ deselectCategories(categoryKeys: string[]): void;
914
+ /** Replace the buyer-selectable object allow-list without rebuilding. */
915
+ setSelectableObjects(objects: string[] | null): void;
916
+ /** Change the selection cap without rebuilding. */
917
+ setMaxSelection(maxSelection: number): void;
918
+ /** Current exact-count validity, or null when no exact count was configured. */
919
+ getSelectionValidity(): PickerSelectionValidity | null;
874
920
  /**
875
921
  * Choose a ticket tier for a selected seat (e.g. Adult → Child). Available
876
922
  * `tiers` are on each `SelectedSeat`; `tierId=null` reverts to the default.
@@ -904,7 +950,7 @@ interface SeatingChartHandle {
904
950
  * Every method a wrapper must forward. The wrappers build their handle by
905
951
  * iterating this, so the list IS the contract rather than a description of it.
906
952
  */
907
- declare const SEATING_CHART_HANDLE_METHODS: readonly ["hold", "resumeHold", "getCurrentHold", "getGAAreas", "holdGA", "bestAvailable", "release", "releaseLabels", "getSelection", "setSeatTier", "getFloors", "setFloor", "setColorblindSafe", "zoomIn", "zoomOut", "zoomToFit", "refreshAccess"];
953
+ declare const SEATING_CHART_HANDLE_METHODS: readonly ["hold", "resumeHold", "getCurrentHold", "getGAAreas", "holdGA", "bestAvailable", "release", "releaseLabels", "getSelection", "selectObjects", "deselectObjects", "clearSelection", "selectCategories", "deselectCategories", "setSelectableObjects", "setMaxSelection", "getSelectionValidity", "setSeatTier", "getFloors", "setFloor", "setColorblindSafe", "zoomIn", "zoomOut", "zoomToFit", "refreshAccess"];
908
954
  type SeatingChartHandleMethod = (typeof SEATING_CHART_HANDLE_METHODS)[number];
909
955
  /**
910
956
  * Build the forwarding object every wrapper exposes.
@@ -925,13 +971,13 @@ declare function bindSeatingChartHandle(getInstance: () => SeatingChart | null):
925
971
  * two behaviours. React already treated them this way; Vue and Angular did not
926
972
  * expose them at all.
927
973
  */
928
- declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
974
+ declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
929
975
  type SeatingChartIdentityProp = (typeof SEATING_CHART_IDENTITY_PROPS)[number];
930
976
  /** Non-callback options a wrapper accepts as props/inputs and passes straight through. */
931
- declare const SEATING_CHART_VALUE_PROPS: readonly ["event", "apiBase", "maxSelection", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay", "messages", "seatTooltip", "buyerAccessTokenProvider", "buyerAccessToken"];
977
+ declare const SEATING_CHART_VALUE_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay", "selectedObjects", "selectableObjects", "messages", "seatTooltip", "buyerAccessTokenProvider", "buyerAccessToken"];
932
978
  type SeatingChartValueProp = (typeof SEATING_CHART_VALUE_PROPS)[number];
933
979
  /** Every callback option a wrapper wires to its own event mechanism. */
934
- declare const SEATING_CHART_CALLBACK_PROPS: readonly ["onSelectionChange", "onHold", "onHoldRestored", "onHoldExpired", "onGAClick", "onError", "onDeckTap", "onHint", "onSeatHover", "onAccessExpired", "onAccessUnavailable", "onSelectedObjectUnavailable"];
980
+ declare const SEATING_CHART_CALLBACK_PROPS: readonly ["onSelectionChange", "onSelectionValidityChange", "onSelectionValid", "onSelectionInvalid", "onSelectionLimit", "onHold", "onHoldRestored", "onHoldExpired", "onGAClick", "onError", "onDeckTap", "onHint", "onSeatHover", "onAccessExpired", "onAccessUnavailable", "onSelectedObjectUnavailable"];
935
981
  type SeatingChartCallbackProp = (typeof SEATING_CHART_CALLBACK_PROPS)[number];
936
982
  /** The value half of the options, as a wrapper holds it. */
937
983
  type SeatingChartValues = Pick<SeatingChartOptions, SeatingChartValueProp>;
@@ -1440,6 +1486,12 @@ interface SeatPickerOptions {
1440
1486
  buyerAccessToken?: string | BuyerAccessToken;
1441
1487
  /** Max seats selectable at once (default 10). */
1442
1488
  maxSelection?: number;
1489
+ /** Object ids or public labels selected after live availability is loaded. */
1490
+ selectedObjects?: string[];
1491
+ /** Object ids or public labels the buyer may select. Omit for all free objects. */
1492
+ selectableObjects?: string[] | null;
1493
+ /** Require exactly this many total seated/table/GA guest units before checkout. */
1494
+ numberOfPlacesToSelect?: number;
1443
1495
  /** BCP 47 language for the widget UI. Built-in: en, es, de, fr. */
1444
1496
  locale?: string;
1445
1497
  /** Per-key string overrides layered over the active locale. */
@@ -1665,6 +1717,14 @@ interface SeatPickerOptions {
1665
1717
  onBooked?: (handoff: CheckoutHandoff) => void;
1666
1718
  /** Selection changed (tap or best-available). */
1667
1719
  onSelectionChange?: (seats: PickerSeat[]) => void;
1720
+ /** Exact-count state after each selection change. */
1721
+ onSelectionValidityChange?: (state: PickerSelectionValidity) => void;
1722
+ /** The configured exact ticket count has just been reached. */
1723
+ onSelectionValid?: (seats: PickerSeat[]) => void;
1724
+ /** The current selection does not match the configured exact ticket count. */
1725
+ onSelectionInvalid?: (state: PickerSelectionValidity) => void;
1726
+ /** A selection attempt reached the active maximum. */
1727
+ onSelectionLimit?: (maxSelection: number) => void;
1668
1728
  /**
1669
1729
  * Active hold changed because it was created, restored, extended, partially
1670
1730
  * released, or fully released. Hosts should persist this state for route
@@ -1734,7 +1794,10 @@ declare class SeatPicker {
1734
1794
  private accessEl;
1735
1795
  private readonly apiBase;
1736
1796
  private readonly controller;
1737
- private readonly maxTickets;
1797
+ private maxTickets;
1798
+ /** Exact ticket count required before checkout; null keeps ordinary 1..max behavior. */
1799
+ private readonly exactTickets;
1800
+ private lastExactSelectionValidity;
1738
1801
  /** Original host pricing, kept separate from live server offer overrides. */
1739
1802
  private readonly hostPricing;
1740
1803
  private root;
@@ -2212,6 +2275,7 @@ declare class SeatPicker {
2212
2275
  /** A live delta took one of OUR selected (not yet held) seats — evict + tell the buyer. */
2213
2276
  private evictTakenSelections;
2214
2277
  private syncTray;
2278
+ private emitExactSelectionValidity;
2215
2279
  /** Paint the bottom-sheet's collapsed one-liner (pickerTray.ts builds it). */
2216
2280
  private renderPeek;
2217
2281
  private removeHeldLabel;
@@ -2282,6 +2346,22 @@ declare class SeatPicker {
2282
2346
  private rowTypeWord;
2283
2347
  private updateTooltip;
2284
2348
  getSelection(): PickerSeat[];
2349
+ /** Select free objects by engine id or public label. */
2350
+ selectObjects(objects: string[]): PickerSeat[];
2351
+ /** Deselect objects by engine id or public label. */
2352
+ deselectObjects(objects: string[]): void;
2353
+ /** Clear every unheld selection. */
2354
+ clearSelection(): void;
2355
+ /** Select every selectable object in the named categories. */
2356
+ selectCategories(categoryKeys: string[]): PickerSeat[];
2357
+ /** Deselect every selected object in the named categories. */
2358
+ deselectCategories(categoryKeys: string[]): void;
2359
+ /** Replace the buyer-selectable object allow-list without remounting. */
2360
+ setSelectableObjects(objects: string[] | null): void;
2361
+ /** Change the order selection cap without remounting. */
2362
+ setMaxSelection(maxSelection: number): void;
2363
+ /** Current exact-count validity, including held and pending GA tickets. */
2364
+ getSelectionValidity(): PickerSelectionValidity | null;
2285
2365
  /**
2286
2366
  * Re-ink the DRAWN MAP after mount, so the canvas can follow a page palette
2287
2367
  * the host did not know at construction time.