@seatlayer/js 0.54.0 → 0.56.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-CFxx1jp3.cjs';
4
4
 
5
5
  /**
6
6
  * Buyer access context — the browser half of the Sales Channels contract
@@ -393,6 +393,8 @@ interface HoldLineItem {
393
393
  unitPrice: number;
394
394
  currency: string;
395
395
  quantity?: number;
396
+ /** Channel pricing revision captured when this line used an override. */
397
+ channelPricingVersion?: number | null;
396
398
  }
397
399
  declare class ApiError extends Error {
398
400
  status: number;
@@ -568,6 +570,12 @@ interface SeatingChartOptions {
568
570
  buyerAccessToken?: string | BuyerAccessToken;
569
571
  /** Max seats selectable at once (default 10). */
570
572
  maxSelection?: number;
573
+ /** Object ids or public labels selected after live availability is loaded. */
574
+ selectedObjects?: string[];
575
+ /** Object ids or public labels the buyer may select. Omit for all free objects. */
576
+ selectableObjects?: string[] | null;
577
+ /** Require exactly this many seated/table guest units before the selection is valid. */
578
+ numberOfPlacesToSelect?: number;
571
579
  /**
572
580
  * BCP 47 language for the widget UI — `'de'`, `'es-MX'`, etc. Falls back to
573
581
  * the browser language, then English. Built-in: en, es, de, fr. The German
@@ -605,6 +613,14 @@ interface SeatingChartOptions {
605
613
  */
606
614
  onSeatHover?: (details: SeatHoverDetails | null) => void;
607
615
  onSelectionChange?: (seats: SelectedSeat[]) => void;
616
+ /** Exact-count state after each selection change. */
617
+ onSelectionValidityChange?: (state: PickerSelectionValidity) => void;
618
+ /** The exact configured count has just been reached. */
619
+ onSelectionValid?: (seats: SelectedSeat[]) => void;
620
+ /** The current selection does not match the configured exact count. */
621
+ onSelectionInvalid?: (state: PickerSelectionValidity) => void;
622
+ /** A manual or programmatic selection reached the active maximum. */
623
+ onSelectionLimit?: (maxSelection: number) => void;
608
624
  onHold?: (result: HoldResult) => void;
609
625
  /** A prior active hold was restored with resumeHold(). */
610
626
  onHoldRestored?: (result: HoldResult) => void;
@@ -701,6 +717,22 @@ declare class SeatingChart {
701
717
  getMode(): 'live' | 'test' | null;
702
718
  /** Current selection with prices resolved from the chart categories. */
703
719
  getSelection(): SelectedSeat[];
720
+ /** Select free objects by engine id or public label. Returns newly selected objects. */
721
+ selectObjects(objects: string[]): SelectedSeat[];
722
+ /** Deselect objects by engine id or public label. */
723
+ deselectObjects(objects: string[]): void;
724
+ /** Clear every unheld selection. */
725
+ clearSelection(): void;
726
+ /** Select every selectable object in the named categories. */
727
+ selectCategories(categoryKeys: string[]): SelectedSeat[];
728
+ /** Deselect every selected object in the named categories. */
729
+ deselectCategories(categoryKeys: string[]): void;
730
+ /** Replace the buyer-selectable object allow-list without remounting. */
731
+ setSelectableObjects(objects: string[] | null): void;
732
+ /** Change the selection cap without remounting. */
733
+ setMaxSelection(maxSelection: number): void;
734
+ /** Current exact-count validity, or null when no exact count was configured. */
735
+ getSelectionValidity(): PickerSelectionValidity | null;
704
736
  /** Hold the current selection. Resolves the hold, or null on a 409 conflict. */
705
737
  hold(options?: {
706
738
  ttlMs?: number;
@@ -871,6 +903,22 @@ interface SeatingChartHandle {
871
903
  releaseLabels(labels: string[]): Promise<boolean>;
872
904
  /** The current selection, with prices resolved from the chart categories. */
873
905
  getSelection(): SelectedSeat[];
906
+ /** Select free objects by engine id or public label. */
907
+ selectObjects(objects: string[]): SelectedSeat[];
908
+ /** Deselect objects by engine id or public label. */
909
+ deselectObjects(objects: string[]): void;
910
+ /** Clear every unheld selection. */
911
+ clearSelection(): void;
912
+ /** Select every selectable object in the named categories. */
913
+ selectCategories(categoryKeys: string[]): SelectedSeat[];
914
+ /** Deselect every selected object in the named categories. */
915
+ deselectCategories(categoryKeys: string[]): void;
916
+ /** Replace the buyer-selectable object allow-list without rebuilding. */
917
+ setSelectableObjects(objects: string[] | null): void;
918
+ /** Change the selection cap without rebuilding. */
919
+ setMaxSelection(maxSelection: number): void;
920
+ /** Current exact-count validity, or null when no exact count was configured. */
921
+ getSelectionValidity(): PickerSelectionValidity | null;
874
922
  /**
875
923
  * Choose a ticket tier for a selected seat (e.g. Adult → Child). Available
876
924
  * `tiers` are on each `SelectedSeat`; `tierId=null` reverts to the default.
@@ -904,7 +952,7 @@ interface SeatingChartHandle {
904
952
  * Every method a wrapper must forward. The wrappers build their handle by
905
953
  * iterating this, so the list IS the contract rather than a description of it.
906
954
  */
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"];
955
+ 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
956
  type SeatingChartHandleMethod = (typeof SEATING_CHART_HANDLE_METHODS)[number];
909
957
  /**
910
958
  * Build the forwarding object every wrapper exposes.
@@ -925,13 +973,13 @@ declare function bindSeatingChartHandle(getInstance: () => SeatingChart | null):
925
973
  * two behaviours. React already treated them this way; Vue and Angular did not
926
974
  * expose them at all.
927
975
  */
928
- declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
976
+ declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
929
977
  type SeatingChartIdentityProp = (typeof SEATING_CHART_IDENTITY_PROPS)[number];
930
978
  /** 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"];
979
+ declare const SEATING_CHART_VALUE_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay", "selectedObjects", "selectableObjects", "messages", "seatTooltip", "buyerAccessTokenProvider", "buyerAccessToken"];
932
980
  type SeatingChartValueProp = (typeof SEATING_CHART_VALUE_PROPS)[number];
933
981
  /** 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"];
982
+ declare const SEATING_CHART_CALLBACK_PROPS: readonly ["onSelectionChange", "onSelectionValidityChange", "onSelectionValid", "onSelectionInvalid", "onSelectionLimit", "onHold", "onHoldRestored", "onHoldExpired", "onGAClick", "onError", "onDeckTap", "onHint", "onSeatHover", "onAccessExpired", "onAccessUnavailable", "onSelectedObjectUnavailable"];
935
983
  type SeatingChartCallbackProp = (typeof SEATING_CHART_CALLBACK_PROPS)[number];
936
984
  /** The value half of the options, as a wrapper holds it. */
937
985
  type SeatingChartValues = Pick<SeatingChartOptions, SeatingChartValueProp>;
@@ -1251,6 +1299,24 @@ interface TicketOfferPrice {
1251
1299
  startsAt?: number | null;
1252
1300
  endsAt?: number | null;
1253
1301
  }
1302
+ interface ChannelPriceOverride {
1303
+ categoryKey: string;
1304
+ tierId: string | null;
1305
+ price: number;
1306
+ }
1307
+ /** Pricing configuration projected only for the private channels in this grant. */
1308
+ interface BuyerChannelPricing {
1309
+ assignmentVersion: number;
1310
+ channels: Array<{
1311
+ channelId: string;
1312
+ pricingVersion: number;
1313
+ priceOverrides: ChannelPriceOverride[];
1314
+ }>;
1315
+ objects: Array<{
1316
+ label: string;
1317
+ channelId: string;
1318
+ }>;
1319
+ }
1254
1320
  interface TicketOfferAvailability {
1255
1321
  state: SaleState;
1256
1322
  /** Currently advertised offer price, in minor units. */
@@ -1263,6 +1329,7 @@ interface TicketOfferAvailability {
1263
1329
  upcoming: TicketOfferSummary | null;
1264
1330
  /** Server-resolved active offer prices by category, in major units. */
1265
1331
  prices: TicketOfferPrice[];
1332
+ channelPricing: BuyerChannelPricing | null;
1266
1333
  }
1267
1334
  /** Parse a public offer payload without repairing a half-understood price. */
1268
1335
  declare function parseTicketOfferAvailability(body: unknown): TicketOfferAvailability | null;
@@ -1440,6 +1507,12 @@ interface SeatPickerOptions {
1440
1507
  buyerAccessToken?: string | BuyerAccessToken;
1441
1508
  /** Max seats selectable at once (default 10). */
1442
1509
  maxSelection?: number;
1510
+ /** Object ids or public labels selected after live availability is loaded. */
1511
+ selectedObjects?: string[];
1512
+ /** Object ids or public labels the buyer may select. Omit for all free objects. */
1513
+ selectableObjects?: string[] | null;
1514
+ /** Require exactly this many total seated/table/GA guest units before checkout. */
1515
+ numberOfPlacesToSelect?: number;
1443
1516
  /** BCP 47 language for the widget UI. Built-in: en, es, de, fr. */
1444
1517
  locale?: string;
1445
1518
  /** Per-key string overrides layered over the active locale. */
@@ -1665,6 +1738,14 @@ interface SeatPickerOptions {
1665
1738
  onBooked?: (handoff: CheckoutHandoff) => void;
1666
1739
  /** Selection changed (tap or best-available). */
1667
1740
  onSelectionChange?: (seats: PickerSeat[]) => void;
1741
+ /** Exact-count state after each selection change. */
1742
+ onSelectionValidityChange?: (state: PickerSelectionValidity) => void;
1743
+ /** The configured exact ticket count has just been reached. */
1744
+ onSelectionValid?: (seats: PickerSeat[]) => void;
1745
+ /** The current selection does not match the configured exact ticket count. */
1746
+ onSelectionInvalid?: (state: PickerSelectionValidity) => void;
1747
+ /** A selection attempt reached the active maximum. */
1748
+ onSelectionLimit?: (maxSelection: number) => void;
1668
1749
  /**
1669
1750
  * Active hold changed because it was created, restored, extended, partially
1670
1751
  * released, or fully released. Hosts should persist this state for route
@@ -1734,7 +1815,10 @@ declare class SeatPicker {
1734
1815
  private accessEl;
1735
1816
  private readonly apiBase;
1736
1817
  private readonly controller;
1737
- private readonly maxTickets;
1818
+ private maxTickets;
1819
+ /** Exact ticket count required before checkout; null keeps ordinary 1..max behavior. */
1820
+ private readonly exactTickets;
1821
+ private lastExactSelectionValidity;
1738
1822
  /** Original host pricing, kept separate from live server offer overrides. */
1739
1823
  private readonly hostPricing;
1740
1824
  private root;
@@ -1759,6 +1843,9 @@ declare class SeatPicker {
1759
1843
  /** The event's formatted date-time (event-zone), reused by the closed-state note. */
1760
1844
  private eventWhenText;
1761
1845
  private offerAvailability;
1846
+ /** Server-authoritative channel rules, projected only for this buyer scope. */
1847
+ private readonly channelByObject;
1848
+ private readonly pricesByChannel;
1762
1849
  private hold;
1763
1850
  /** Latest server expiry for the open hold (moves on extend). */
1764
1851
  private holdExpiresAt;
@@ -2081,7 +2168,7 @@ declare class SeatPicker {
2081
2168
  private activeFloorObjects;
2082
2169
  /** Attach the F3 overview minimap into the bottom-left chrome region. */
2083
2170
  private buildMinimap;
2084
- /** Effective display price of a category: host pricing override first tier → base. */
2171
+ /** Effective category summary price. Object-specific channel prices are added to the range below. */
2085
2172
  private catPrice;
2086
2173
  /** Complete buyer-visible price range, including every ticket tier and
2087
2174
  * tier-specific host override. */
@@ -2184,11 +2271,12 @@ declare class SeatPicker {
2184
2271
  */
2185
2272
  private refreshOfferAvailability;
2186
2273
  private offerPrice;
2274
+ private applyChannelPricing;
2187
2275
  /** The compact current/upcoming offer card above Ticket prices. */
2188
2276
  private syncOffer;
2189
2277
  /**
2190
- * The price the buyer will actually pay for a category (+tier): the host's
2191
- * `pricing` override when present, else the chart's stored price. Every
2278
+ * The price the buyer will actually pay for an object/category/tier: its
2279
+ * scoped channel override, then the host/server offer, then the chart. Every
2192
2280
  * price the widget DISPLAYS or hands off must flow through here — a map
2193
2281
  * that shows one price while checkout charges another destroys trust.
2194
2282
  */
@@ -2212,6 +2300,7 @@ declare class SeatPicker {
2212
2300
  /** A live delta took one of OUR selected (not yet held) seats — evict + tell the buyer. */
2213
2301
  private evictTakenSelections;
2214
2302
  private syncTray;
2303
+ private emitExactSelectionValidity;
2215
2304
  /** Paint the bottom-sheet's collapsed one-liner (pickerTray.ts builds it). */
2216
2305
  private renderPeek;
2217
2306
  private removeHeldLabel;
@@ -2282,6 +2371,22 @@ declare class SeatPicker {
2282
2371
  private rowTypeWord;
2283
2372
  private updateTooltip;
2284
2373
  getSelection(): PickerSeat[];
2374
+ /** Select free objects by engine id or public label. */
2375
+ selectObjects(objects: string[]): PickerSeat[];
2376
+ /** Deselect objects by engine id or public label. */
2377
+ deselectObjects(objects: string[]): void;
2378
+ /** Clear every unheld selection. */
2379
+ clearSelection(): void;
2380
+ /** Select every selectable object in the named categories. */
2381
+ selectCategories(categoryKeys: string[]): PickerSeat[];
2382
+ /** Deselect every selected object in the named categories. */
2383
+ deselectCategories(categoryKeys: string[]): void;
2384
+ /** Replace the buyer-selectable object allow-list without remounting. */
2385
+ setSelectableObjects(objects: string[] | null): void;
2386
+ /** Change the order selection cap without remounting. */
2387
+ setMaxSelection(maxSelection: number): void;
2388
+ /** Current exact-count validity, including held and pending GA tickets. */
2389
+ getSelectionValidity(): PickerSelectionValidity | null;
2285
2390
  /**
2286
2391
  * Re-ink the DRAWN MAP after mount, so the canvas can follow a page palette
2287
2392
  * 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-CFxx1jp3.js';
4
4
 
5
5
  /**
6
6
  * Buyer access context — the browser half of the Sales Channels contract
@@ -393,6 +393,8 @@ interface HoldLineItem {
393
393
  unitPrice: number;
394
394
  currency: string;
395
395
  quantity?: number;
396
+ /** Channel pricing revision captured when this line used an override. */
397
+ channelPricingVersion?: number | null;
396
398
  }
397
399
  declare class ApiError extends Error {
398
400
  status: number;
@@ -568,6 +570,12 @@ interface SeatingChartOptions {
568
570
  buyerAccessToken?: string | BuyerAccessToken;
569
571
  /** Max seats selectable at once (default 10). */
570
572
  maxSelection?: number;
573
+ /** Object ids or public labels selected after live availability is loaded. */
574
+ selectedObjects?: string[];
575
+ /** Object ids or public labels the buyer may select. Omit for all free objects. */
576
+ selectableObjects?: string[] | null;
577
+ /** Require exactly this many seated/table guest units before the selection is valid. */
578
+ numberOfPlacesToSelect?: number;
571
579
  /**
572
580
  * BCP 47 language for the widget UI — `'de'`, `'es-MX'`, etc. Falls back to
573
581
  * the browser language, then English. Built-in: en, es, de, fr. The German
@@ -605,6 +613,14 @@ interface SeatingChartOptions {
605
613
  */
606
614
  onSeatHover?: (details: SeatHoverDetails | null) => void;
607
615
  onSelectionChange?: (seats: SelectedSeat[]) => void;
616
+ /** Exact-count state after each selection change. */
617
+ onSelectionValidityChange?: (state: PickerSelectionValidity) => void;
618
+ /** The exact configured count has just been reached. */
619
+ onSelectionValid?: (seats: SelectedSeat[]) => void;
620
+ /** The current selection does not match the configured exact count. */
621
+ onSelectionInvalid?: (state: PickerSelectionValidity) => void;
622
+ /** A manual or programmatic selection reached the active maximum. */
623
+ onSelectionLimit?: (maxSelection: number) => void;
608
624
  onHold?: (result: HoldResult) => void;
609
625
  /** A prior active hold was restored with resumeHold(). */
610
626
  onHoldRestored?: (result: HoldResult) => void;
@@ -701,6 +717,22 @@ declare class SeatingChart {
701
717
  getMode(): 'live' | 'test' | null;
702
718
  /** Current selection with prices resolved from the chart categories. */
703
719
  getSelection(): SelectedSeat[];
720
+ /** Select free objects by engine id or public label. Returns newly selected objects. */
721
+ selectObjects(objects: string[]): SelectedSeat[];
722
+ /** Deselect objects by engine id or public label. */
723
+ deselectObjects(objects: string[]): void;
724
+ /** Clear every unheld selection. */
725
+ clearSelection(): void;
726
+ /** Select every selectable object in the named categories. */
727
+ selectCategories(categoryKeys: string[]): SelectedSeat[];
728
+ /** Deselect every selected object in the named categories. */
729
+ deselectCategories(categoryKeys: string[]): void;
730
+ /** Replace the buyer-selectable object allow-list without remounting. */
731
+ setSelectableObjects(objects: string[] | null): void;
732
+ /** Change the selection cap without remounting. */
733
+ setMaxSelection(maxSelection: number): void;
734
+ /** Current exact-count validity, or null when no exact count was configured. */
735
+ getSelectionValidity(): PickerSelectionValidity | null;
704
736
  /** Hold the current selection. Resolves the hold, or null on a 409 conflict. */
705
737
  hold(options?: {
706
738
  ttlMs?: number;
@@ -871,6 +903,22 @@ interface SeatingChartHandle {
871
903
  releaseLabels(labels: string[]): Promise<boolean>;
872
904
  /** The current selection, with prices resolved from the chart categories. */
873
905
  getSelection(): SelectedSeat[];
906
+ /** Select free objects by engine id or public label. */
907
+ selectObjects(objects: string[]): SelectedSeat[];
908
+ /** Deselect objects by engine id or public label. */
909
+ deselectObjects(objects: string[]): void;
910
+ /** Clear every unheld selection. */
911
+ clearSelection(): void;
912
+ /** Select every selectable object in the named categories. */
913
+ selectCategories(categoryKeys: string[]): SelectedSeat[];
914
+ /** Deselect every selected object in the named categories. */
915
+ deselectCategories(categoryKeys: string[]): void;
916
+ /** Replace the buyer-selectable object allow-list without rebuilding. */
917
+ setSelectableObjects(objects: string[] | null): void;
918
+ /** Change the selection cap without rebuilding. */
919
+ setMaxSelection(maxSelection: number): void;
920
+ /** Current exact-count validity, or null when no exact count was configured. */
921
+ getSelectionValidity(): PickerSelectionValidity | null;
874
922
  /**
875
923
  * Choose a ticket tier for a selected seat (e.g. Adult → Child). Available
876
924
  * `tiers` are on each `SelectedSeat`; `tierId=null` reverts to the default.
@@ -904,7 +952,7 @@ interface SeatingChartHandle {
904
952
  * Every method a wrapper must forward. The wrappers build their handle by
905
953
  * iterating this, so the list IS the contract rather than a description of it.
906
954
  */
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"];
955
+ 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
956
  type SeatingChartHandleMethod = (typeof SEATING_CHART_HANDLE_METHODS)[number];
909
957
  /**
910
958
  * Build the forwarding object every wrapper exposes.
@@ -925,13 +973,13 @@ declare function bindSeatingChartHandle(getInstance: () => SeatingChart | null):
925
973
  * two behaviours. React already treated them this way; Vue and Angular did not
926
974
  * expose them at all.
927
975
  */
928
- declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
976
+ declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
929
977
  type SeatingChartIdentityProp = (typeof SEATING_CHART_IDENTITY_PROPS)[number];
930
978
  /** 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"];
979
+ declare const SEATING_CHART_VALUE_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay", "selectedObjects", "selectableObjects", "messages", "seatTooltip", "buyerAccessTokenProvider", "buyerAccessToken"];
932
980
  type SeatingChartValueProp = (typeof SEATING_CHART_VALUE_PROPS)[number];
933
981
  /** 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"];
982
+ declare const SEATING_CHART_CALLBACK_PROPS: readonly ["onSelectionChange", "onSelectionValidityChange", "onSelectionValid", "onSelectionInvalid", "onSelectionLimit", "onHold", "onHoldRestored", "onHoldExpired", "onGAClick", "onError", "onDeckTap", "onHint", "onSeatHover", "onAccessExpired", "onAccessUnavailable", "onSelectedObjectUnavailable"];
935
983
  type SeatingChartCallbackProp = (typeof SEATING_CHART_CALLBACK_PROPS)[number];
936
984
  /** The value half of the options, as a wrapper holds it. */
937
985
  type SeatingChartValues = Pick<SeatingChartOptions, SeatingChartValueProp>;
@@ -1251,6 +1299,24 @@ interface TicketOfferPrice {
1251
1299
  startsAt?: number | null;
1252
1300
  endsAt?: number | null;
1253
1301
  }
1302
+ interface ChannelPriceOverride {
1303
+ categoryKey: string;
1304
+ tierId: string | null;
1305
+ price: number;
1306
+ }
1307
+ /** Pricing configuration projected only for the private channels in this grant. */
1308
+ interface BuyerChannelPricing {
1309
+ assignmentVersion: number;
1310
+ channels: Array<{
1311
+ channelId: string;
1312
+ pricingVersion: number;
1313
+ priceOverrides: ChannelPriceOverride[];
1314
+ }>;
1315
+ objects: Array<{
1316
+ label: string;
1317
+ channelId: string;
1318
+ }>;
1319
+ }
1254
1320
  interface TicketOfferAvailability {
1255
1321
  state: SaleState;
1256
1322
  /** Currently advertised offer price, in minor units. */
@@ -1263,6 +1329,7 @@ interface TicketOfferAvailability {
1263
1329
  upcoming: TicketOfferSummary | null;
1264
1330
  /** Server-resolved active offer prices by category, in major units. */
1265
1331
  prices: TicketOfferPrice[];
1332
+ channelPricing: BuyerChannelPricing | null;
1266
1333
  }
1267
1334
  /** Parse a public offer payload without repairing a half-understood price. */
1268
1335
  declare function parseTicketOfferAvailability(body: unknown): TicketOfferAvailability | null;
@@ -1440,6 +1507,12 @@ interface SeatPickerOptions {
1440
1507
  buyerAccessToken?: string | BuyerAccessToken;
1441
1508
  /** Max seats selectable at once (default 10). */
1442
1509
  maxSelection?: number;
1510
+ /** Object ids or public labels selected after live availability is loaded. */
1511
+ selectedObjects?: string[];
1512
+ /** Object ids or public labels the buyer may select. Omit for all free objects. */
1513
+ selectableObjects?: string[] | null;
1514
+ /** Require exactly this many total seated/table/GA guest units before checkout. */
1515
+ numberOfPlacesToSelect?: number;
1443
1516
  /** BCP 47 language for the widget UI. Built-in: en, es, de, fr. */
1444
1517
  locale?: string;
1445
1518
  /** Per-key string overrides layered over the active locale. */
@@ -1665,6 +1738,14 @@ interface SeatPickerOptions {
1665
1738
  onBooked?: (handoff: CheckoutHandoff) => void;
1666
1739
  /** Selection changed (tap or best-available). */
1667
1740
  onSelectionChange?: (seats: PickerSeat[]) => void;
1741
+ /** Exact-count state after each selection change. */
1742
+ onSelectionValidityChange?: (state: PickerSelectionValidity) => void;
1743
+ /** The configured exact ticket count has just been reached. */
1744
+ onSelectionValid?: (seats: PickerSeat[]) => void;
1745
+ /** The current selection does not match the configured exact ticket count. */
1746
+ onSelectionInvalid?: (state: PickerSelectionValidity) => void;
1747
+ /** A selection attempt reached the active maximum. */
1748
+ onSelectionLimit?: (maxSelection: number) => void;
1668
1749
  /**
1669
1750
  * Active hold changed because it was created, restored, extended, partially
1670
1751
  * released, or fully released. Hosts should persist this state for route
@@ -1734,7 +1815,10 @@ declare class SeatPicker {
1734
1815
  private accessEl;
1735
1816
  private readonly apiBase;
1736
1817
  private readonly controller;
1737
- private readonly maxTickets;
1818
+ private maxTickets;
1819
+ /** Exact ticket count required before checkout; null keeps ordinary 1..max behavior. */
1820
+ private readonly exactTickets;
1821
+ private lastExactSelectionValidity;
1738
1822
  /** Original host pricing, kept separate from live server offer overrides. */
1739
1823
  private readonly hostPricing;
1740
1824
  private root;
@@ -1759,6 +1843,9 @@ declare class SeatPicker {
1759
1843
  /** The event's formatted date-time (event-zone), reused by the closed-state note. */
1760
1844
  private eventWhenText;
1761
1845
  private offerAvailability;
1846
+ /** Server-authoritative channel rules, projected only for this buyer scope. */
1847
+ private readonly channelByObject;
1848
+ private readonly pricesByChannel;
1762
1849
  private hold;
1763
1850
  /** Latest server expiry for the open hold (moves on extend). */
1764
1851
  private holdExpiresAt;
@@ -2081,7 +2168,7 @@ declare class SeatPicker {
2081
2168
  private activeFloorObjects;
2082
2169
  /** Attach the F3 overview minimap into the bottom-left chrome region. */
2083
2170
  private buildMinimap;
2084
- /** Effective display price of a category: host pricing override first tier → base. */
2171
+ /** Effective category summary price. Object-specific channel prices are added to the range below. */
2085
2172
  private catPrice;
2086
2173
  /** Complete buyer-visible price range, including every ticket tier and
2087
2174
  * tier-specific host override. */
@@ -2184,11 +2271,12 @@ declare class SeatPicker {
2184
2271
  */
2185
2272
  private refreshOfferAvailability;
2186
2273
  private offerPrice;
2274
+ private applyChannelPricing;
2187
2275
  /** The compact current/upcoming offer card above Ticket prices. */
2188
2276
  private syncOffer;
2189
2277
  /**
2190
- * The price the buyer will actually pay for a category (+tier): the host's
2191
- * `pricing` override when present, else the chart's stored price. Every
2278
+ * The price the buyer will actually pay for an object/category/tier: its
2279
+ * scoped channel override, then the host/server offer, then the chart. Every
2192
2280
  * price the widget DISPLAYS or hands off must flow through here — a map
2193
2281
  * that shows one price while checkout charges another destroys trust.
2194
2282
  */
@@ -2212,6 +2300,7 @@ declare class SeatPicker {
2212
2300
  /** A live delta took one of OUR selected (not yet held) seats — evict + tell the buyer. */
2213
2301
  private evictTakenSelections;
2214
2302
  private syncTray;
2303
+ private emitExactSelectionValidity;
2215
2304
  /** Paint the bottom-sheet's collapsed one-liner (pickerTray.ts builds it). */
2216
2305
  private renderPeek;
2217
2306
  private removeHeldLabel;
@@ -2282,6 +2371,22 @@ declare class SeatPicker {
2282
2371
  private rowTypeWord;
2283
2372
  private updateTooltip;
2284
2373
  getSelection(): PickerSeat[];
2374
+ /** Select free objects by engine id or public label. */
2375
+ selectObjects(objects: string[]): PickerSeat[];
2376
+ /** Deselect objects by engine id or public label. */
2377
+ deselectObjects(objects: string[]): void;
2378
+ /** Clear every unheld selection. */
2379
+ clearSelection(): void;
2380
+ /** Select every selectable object in the named categories. */
2381
+ selectCategories(categoryKeys: string[]): PickerSeat[];
2382
+ /** Deselect every selected object in the named categories. */
2383
+ deselectCategories(categoryKeys: string[]): void;
2384
+ /** Replace the buyer-selectable object allow-list without remounting. */
2385
+ setSelectableObjects(objects: string[] | null): void;
2386
+ /** Change the order selection cap without remounting. */
2387
+ setMaxSelection(maxSelection: number): void;
2388
+ /** Current exact-count validity, including held and pending GA tickets. */
2389
+ getSelectionValidity(): PickerSelectionValidity | null;
2285
2390
  /**
2286
2391
  * Re-ink the DRAWN MAP after mount, so the canvas can follow a page palette
2287
2392
  * the host did not know at construction time.