@seatlayer/js 0.55.0 → 0.57.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/README.md +28 -0
- package/dist/{channelsMode-1b6xBWKM.d.cts → channelsMode-CFxx1jp3.d.cts} +30 -0
- package/dist/{channelsMode-1b6xBWKM.d.ts → channelsMode-CFxx1jp3.d.ts} +30 -0
- package/dist/{channelsMode-LDIT556C.js → channelsMode-XA5FM2LX.js} +1 -1
- package/dist/{chunk-MZAMI4UR.js → chunk-VCVUAOOK.js} +75 -39
- package/dist/index.cjs +5 -5
- package/dist/index.d.cts +48 -18
- package/dist/index.d.ts +48 -18
- package/dist/index.js +4 -4
- package/dist/manager.cjs +116 -80
- package/dist/manager.d.cts +2 -2
- package/dist/manager.d.ts +2 -2
- package/dist/manager.js +2 -2
- package/package.json +2 -2
package/dist/index.d.cts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
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-
|
|
1
|
+
import { PickerSeat, PickerSelectionValidator, RendererViewMode, SeatHoverDetails, PickerSelectionValidity, PickerTransport, PickerMapTheme } from '@seatlayer/core';
|
|
2
|
+
export { ExpandedSeat, PickerMapTheme, PickerSelectionValidator, PickerSelectionValidity, PickerSelectionViolation, RendererViewMode, SeatHoverDetails } from '@seatlayer/core';
|
|
3
|
+
export { A as AccessIntentForbidsDetails, a as AccessLinkRecord, b as AccessLinkReveal, c as AccessLinkState, d as AccessLinkStatus, e as AccessLinkStatusRecord, f as ArchiveBlockedDetails, g as AssignmentBuckets, h as AssignmentDropDetails, i as AssignmentResult, B as BucketRow, C as ChannelAccessIntent, j as ChannelAccessSummary, k as ChannelAllocationPage, l as ChannelAttribution, m as ChannelAuditEntry, n as ChannelAuditPage, o as ChannelCounts, p as ChannelListResult, q as ChannelPreviewProjection, r as ChannelRecord, s as ChannelReport, t as ChannelReportLinkRecord, u as ChannelReportLinkReveal, v as ChannelReportResult, w as ChannelReportRow, x as ChannelSeatStatus, y as ChannelState, z as ChannelsCapabilities, D as ChannelsClient, E as ChannelsMode, F as ChannelsModeHost, G as ChannelsRowView, H as ChannelsSeatView, I as ControlRoomActivityEntry, J as ControlRoomSectionMetric, K as ControlRoomSnapshot, L as EventCategoryAssignmentResult, M as EventScopedManageToken, N as EventTableBookingMode, O as EventTableBookingResult, P as IntentSwitchBlockedDetails, Q as InventoryBooking, R as InventoryBookingActivity, S as InventoryBookingDetail, T as InventoryBookingObject, U as InventoryBookingState, V as InventoryBookingsPage, W as InventoryBookingsQuery, X as LogEntry, Y as LogPage, Z as ManageApi, _ as ManageApiError, $ as ReportByStatus, a0 as ReportCategoryMeta, a1 as ReportCategoryRow, a2 as ReportResult, a3 as SeatManager, a4 as SeatManagerActionResult, a5 as SeatManagerActivity, a6 as SeatManagerCapability, a7 as SeatManagerConnection, a8 as SeatManagerFilteredSection, a9 as SeatManagerMode, aa as SeatManagerOptions, ab as SeatManagerSelectionValidity, ac as SeatManagerTallies, ad as SelectionSourceRow } from './channelsMode-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;
|
|
@@ -574,6 +576,8 @@ interface SeatingChartOptions {
|
|
|
574
576
|
selectableObjects?: string[] | null;
|
|
575
577
|
/** Require exactly this many seated/table guest units before the selection is valid. */
|
|
576
578
|
numberOfPlacesToSelect?: number;
|
|
579
|
+
/** Optional local selection guards, enforced again before hold. */
|
|
580
|
+
selectionValidators?: PickerSelectionValidator[];
|
|
577
581
|
/**
|
|
578
582
|
* BCP 47 language for the widget UI — `'de'`, `'es-MX'`, etc. Falls back to
|
|
579
583
|
* the browser language, then English. Built-in: en, es, de, fr. The German
|
|
@@ -611,11 +615,11 @@ interface SeatingChartOptions {
|
|
|
611
615
|
*/
|
|
612
616
|
onSeatHover?: (details: SeatHoverDetails | null) => void;
|
|
613
617
|
onSelectionChange?: (seats: SelectedSeat[]) => void;
|
|
614
|
-
/**
|
|
618
|
+
/** Selection-rule state after each selection change. */
|
|
615
619
|
onSelectionValidityChange?: (state: PickerSelectionValidity) => void;
|
|
616
|
-
/** The
|
|
620
|
+
/** The configured selection rules have just become valid. */
|
|
617
621
|
onSelectionValid?: (seats: SelectedSeat[]) => void;
|
|
618
|
-
/** The
|
|
622
|
+
/** The configured selection rules have just become invalid. */
|
|
619
623
|
onSelectionInvalid?: (state: PickerSelectionValidity) => void;
|
|
620
624
|
/** A manual or programmatic selection reached the active maximum. */
|
|
621
625
|
onSelectionLimit?: (maxSelection: number) => void;
|
|
@@ -729,7 +733,7 @@ declare class SeatingChart {
|
|
|
729
733
|
setSelectableObjects(objects: string[] | null): void;
|
|
730
734
|
/** Change the selection cap without remounting. */
|
|
731
735
|
setMaxSelection(maxSelection: number): void;
|
|
732
|
-
/** Current
|
|
736
|
+
/** Current selection-rule validity, or null when no rules were configured. */
|
|
733
737
|
getSelectionValidity(): PickerSelectionValidity | null;
|
|
734
738
|
/** Hold the current selection. Resolves the hold, or null on a 409 conflict. */
|
|
735
739
|
hold(options?: {
|
|
@@ -971,10 +975,10 @@ declare function bindSeatingChartHandle(getInstance: () => SeatingChart | null):
|
|
|
971
975
|
* two behaviours. React already treated them this way; Vue and Angular did not
|
|
972
976
|
* expose them at all.
|
|
973
977
|
*/
|
|
974
|
-
declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
|
|
978
|
+
declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "selectionValidators", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
|
|
975
979
|
type SeatingChartIdentityProp = (typeof SEATING_CHART_IDENTITY_PROPS)[number];
|
|
976
980
|
/** Non-callback options a wrapper accepts as props/inputs and passes straight through. */
|
|
977
|
-
declare const SEATING_CHART_VALUE_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay", "selectedObjects", "selectableObjects", "messages", "seatTooltip", "buyerAccessTokenProvider", "buyerAccessToken"];
|
|
981
|
+
declare const SEATING_CHART_VALUE_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "selectionValidators", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay", "selectedObjects", "selectableObjects", "messages", "seatTooltip", "buyerAccessTokenProvider", "buyerAccessToken"];
|
|
978
982
|
type SeatingChartValueProp = (typeof SEATING_CHART_VALUE_PROPS)[number];
|
|
979
983
|
/** Every callback option a wrapper wires to its own event mechanism. */
|
|
980
984
|
declare const SEATING_CHART_CALLBACK_PROPS: readonly ["onSelectionChange", "onSelectionValidityChange", "onSelectionValid", "onSelectionInvalid", "onSelectionLimit", "onHold", "onHoldRestored", "onHoldExpired", "onGAClick", "onError", "onDeckTap", "onHint", "onSeatHover", "onAccessExpired", "onAccessUnavailable", "onSelectedObjectUnavailable"];
|
|
@@ -1297,6 +1301,24 @@ interface TicketOfferPrice {
|
|
|
1297
1301
|
startsAt?: number | null;
|
|
1298
1302
|
endsAt?: number | null;
|
|
1299
1303
|
}
|
|
1304
|
+
interface ChannelPriceOverride {
|
|
1305
|
+
categoryKey: string;
|
|
1306
|
+
tierId: string | null;
|
|
1307
|
+
price: number;
|
|
1308
|
+
}
|
|
1309
|
+
/** Pricing configuration projected only for the private channels in this grant. */
|
|
1310
|
+
interface BuyerChannelPricing {
|
|
1311
|
+
assignmentVersion: number;
|
|
1312
|
+
channels: Array<{
|
|
1313
|
+
channelId: string;
|
|
1314
|
+
pricingVersion: number;
|
|
1315
|
+
priceOverrides: ChannelPriceOverride[];
|
|
1316
|
+
}>;
|
|
1317
|
+
objects: Array<{
|
|
1318
|
+
label: string;
|
|
1319
|
+
channelId: string;
|
|
1320
|
+
}>;
|
|
1321
|
+
}
|
|
1300
1322
|
interface TicketOfferAvailability {
|
|
1301
1323
|
state: SaleState;
|
|
1302
1324
|
/** Currently advertised offer price, in minor units. */
|
|
@@ -1309,6 +1331,7 @@ interface TicketOfferAvailability {
|
|
|
1309
1331
|
upcoming: TicketOfferSummary | null;
|
|
1310
1332
|
/** Server-resolved active offer prices by category, in major units. */
|
|
1311
1333
|
prices: TicketOfferPrice[];
|
|
1334
|
+
channelPricing: BuyerChannelPricing | null;
|
|
1312
1335
|
}
|
|
1313
1336
|
/** Parse a public offer payload without repairing a half-understood price. */
|
|
1314
1337
|
declare function parseTicketOfferAvailability(body: unknown): TicketOfferAvailability | null;
|
|
@@ -1492,6 +1515,9 @@ interface SeatPickerOptions {
|
|
|
1492
1515
|
selectableObjects?: string[] | null;
|
|
1493
1516
|
/** Require exactly this many total seated/table/GA guest units before checkout. */
|
|
1494
1517
|
numberOfPlacesToSelect?: number;
|
|
1518
|
+
/** Optional sale guards evaluated after every change and enforced before a
|
|
1519
|
+
* hold: minimum quantity, consecutive seats, and/or no stranded singles. */
|
|
1520
|
+
selectionValidators?: PickerSelectionValidator[];
|
|
1495
1521
|
/** BCP 47 language for the widget UI. Built-in: en, es, de, fr. */
|
|
1496
1522
|
locale?: string;
|
|
1497
1523
|
/** Per-key string overrides layered over the active locale. */
|
|
@@ -1717,11 +1743,11 @@ interface SeatPickerOptions {
|
|
|
1717
1743
|
onBooked?: (handoff: CheckoutHandoff) => void;
|
|
1718
1744
|
/** Selection changed (tap or best-available). */
|
|
1719
1745
|
onSelectionChange?: (seats: PickerSeat[]) => void;
|
|
1720
|
-
/**
|
|
1746
|
+
/** Selection-rule state after each selection change. */
|
|
1721
1747
|
onSelectionValidityChange?: (state: PickerSelectionValidity) => void;
|
|
1722
|
-
/** The configured
|
|
1748
|
+
/** The configured selection rules have just become valid. */
|
|
1723
1749
|
onSelectionValid?: (seats: PickerSeat[]) => void;
|
|
1724
|
-
/** The
|
|
1750
|
+
/** The configured selection rules have just become invalid. */
|
|
1725
1751
|
onSelectionInvalid?: (state: PickerSelectionValidity) => void;
|
|
1726
1752
|
/** A selection attempt reached the active maximum. */
|
|
1727
1753
|
onSelectionLimit?: (maxSelection: number) => void;
|
|
@@ -1797,7 +1823,7 @@ declare class SeatPicker {
|
|
|
1797
1823
|
private maxTickets;
|
|
1798
1824
|
/** Exact ticket count required before checkout; null keeps ordinary 1..max behavior. */
|
|
1799
1825
|
private readonly exactTickets;
|
|
1800
|
-
private
|
|
1826
|
+
private lastSelectionValidity;
|
|
1801
1827
|
/** Original host pricing, kept separate from live server offer overrides. */
|
|
1802
1828
|
private readonly hostPricing;
|
|
1803
1829
|
private root;
|
|
@@ -1822,6 +1848,9 @@ declare class SeatPicker {
|
|
|
1822
1848
|
/** The event's formatted date-time (event-zone), reused by the closed-state note. */
|
|
1823
1849
|
private eventWhenText;
|
|
1824
1850
|
private offerAvailability;
|
|
1851
|
+
/** Server-authoritative channel rules, projected only for this buyer scope. */
|
|
1852
|
+
private readonly channelByObject;
|
|
1853
|
+
private readonly pricesByChannel;
|
|
1825
1854
|
private hold;
|
|
1826
1855
|
/** Latest server expiry for the open hold (moves on extend). */
|
|
1827
1856
|
private holdExpiresAt;
|
|
@@ -2144,7 +2173,7 @@ declare class SeatPicker {
|
|
|
2144
2173
|
private activeFloorObjects;
|
|
2145
2174
|
/** Attach the F3 overview minimap into the bottom-left chrome region. */
|
|
2146
2175
|
private buildMinimap;
|
|
2147
|
-
/** Effective
|
|
2176
|
+
/** Effective category summary price. Object-specific channel prices are added to the range below. */
|
|
2148
2177
|
private catPrice;
|
|
2149
2178
|
/** Complete buyer-visible price range, including every ticket tier and
|
|
2150
2179
|
* tier-specific host override. */
|
|
@@ -2247,11 +2276,12 @@ declare class SeatPicker {
|
|
|
2247
2276
|
*/
|
|
2248
2277
|
private refreshOfferAvailability;
|
|
2249
2278
|
private offerPrice;
|
|
2279
|
+
private applyChannelPricing;
|
|
2250
2280
|
/** The compact current/upcoming offer card above Ticket prices. */
|
|
2251
2281
|
private syncOffer;
|
|
2252
2282
|
/**
|
|
2253
|
-
* The price the buyer will actually pay for
|
|
2254
|
-
*
|
|
2283
|
+
* The price the buyer will actually pay for an object/category/tier: its
|
|
2284
|
+
* scoped channel override, then the host/server offer, then the chart. Every
|
|
2255
2285
|
* price the widget DISPLAYS or hands off must flow through here — a map
|
|
2256
2286
|
* that shows one price while checkout charges another destroys trust.
|
|
2257
2287
|
*/
|
|
@@ -2275,7 +2305,7 @@ declare class SeatPicker {
|
|
|
2275
2305
|
/** A live delta took one of OUR selected (not yet held) seats — evict + tell the buyer. */
|
|
2276
2306
|
private evictTakenSelections;
|
|
2277
2307
|
private syncTray;
|
|
2278
|
-
private
|
|
2308
|
+
private emitSelectionValidity;
|
|
2279
2309
|
/** Paint the bottom-sheet's collapsed one-liner (pickerTray.ts builds it). */
|
|
2280
2310
|
private renderPeek;
|
|
2281
2311
|
private removeHeldLabel;
|
|
@@ -2360,7 +2390,7 @@ declare class SeatPicker {
|
|
|
2360
2390
|
setSelectableObjects(objects: string[] | null): void;
|
|
2361
2391
|
/** Change the order selection cap without remounting. */
|
|
2362
2392
|
setMaxSelection(maxSelection: number): void;
|
|
2363
|
-
/** Current
|
|
2393
|
+
/** Current selection-rule validity, including held and pending GA tickets. */
|
|
2364
2394
|
getSelectionValidity(): PickerSelectionValidity | null;
|
|
2365
2395
|
/**
|
|
2366
2396
|
* Re-ink the DRAWN MAP after mount, so the canvas can follow a page palette
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
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-
|
|
1
|
+
import { PickerSeat, PickerSelectionValidator, RendererViewMode, SeatHoverDetails, PickerSelectionValidity, PickerTransport, PickerMapTheme } from '@seatlayer/core';
|
|
2
|
+
export { ExpandedSeat, PickerMapTheme, PickerSelectionValidator, PickerSelectionValidity, PickerSelectionViolation, RendererViewMode, SeatHoverDetails } from '@seatlayer/core';
|
|
3
|
+
export { A as AccessIntentForbidsDetails, a as AccessLinkRecord, b as AccessLinkReveal, c as AccessLinkState, d as AccessLinkStatus, e as AccessLinkStatusRecord, f as ArchiveBlockedDetails, g as AssignmentBuckets, h as AssignmentDropDetails, i as AssignmentResult, B as BucketRow, C as ChannelAccessIntent, j as ChannelAccessSummary, k as ChannelAllocationPage, l as ChannelAttribution, m as ChannelAuditEntry, n as ChannelAuditPage, o as ChannelCounts, p as ChannelListResult, q as ChannelPreviewProjection, r as ChannelRecord, s as ChannelReport, t as ChannelReportLinkRecord, u as ChannelReportLinkReveal, v as ChannelReportResult, w as ChannelReportRow, x as ChannelSeatStatus, y as ChannelState, z as ChannelsCapabilities, D as ChannelsClient, E as ChannelsMode, F as ChannelsModeHost, G as ChannelsRowView, H as ChannelsSeatView, I as ControlRoomActivityEntry, J as ControlRoomSectionMetric, K as ControlRoomSnapshot, L as EventCategoryAssignmentResult, M as EventScopedManageToken, N as EventTableBookingMode, O as EventTableBookingResult, P as IntentSwitchBlockedDetails, Q as InventoryBooking, R as InventoryBookingActivity, S as InventoryBookingDetail, T as InventoryBookingObject, U as InventoryBookingState, V as InventoryBookingsPage, W as InventoryBookingsQuery, X as LogEntry, Y as LogPage, Z as ManageApi, _ as ManageApiError, $ as ReportByStatus, a0 as ReportCategoryMeta, a1 as ReportCategoryRow, a2 as ReportResult, a3 as SeatManager, a4 as SeatManagerActionResult, a5 as SeatManagerActivity, a6 as SeatManagerCapability, a7 as SeatManagerConnection, a8 as SeatManagerFilteredSection, a9 as SeatManagerMode, aa as SeatManagerOptions, ab as SeatManagerSelectionValidity, ac as SeatManagerTallies, ad as SelectionSourceRow } from './channelsMode-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;
|
|
@@ -574,6 +576,8 @@ interface SeatingChartOptions {
|
|
|
574
576
|
selectableObjects?: string[] | null;
|
|
575
577
|
/** Require exactly this many seated/table guest units before the selection is valid. */
|
|
576
578
|
numberOfPlacesToSelect?: number;
|
|
579
|
+
/** Optional local selection guards, enforced again before hold. */
|
|
580
|
+
selectionValidators?: PickerSelectionValidator[];
|
|
577
581
|
/**
|
|
578
582
|
* BCP 47 language for the widget UI — `'de'`, `'es-MX'`, etc. Falls back to
|
|
579
583
|
* the browser language, then English. Built-in: en, es, de, fr. The German
|
|
@@ -611,11 +615,11 @@ interface SeatingChartOptions {
|
|
|
611
615
|
*/
|
|
612
616
|
onSeatHover?: (details: SeatHoverDetails | null) => void;
|
|
613
617
|
onSelectionChange?: (seats: SelectedSeat[]) => void;
|
|
614
|
-
/**
|
|
618
|
+
/** Selection-rule state after each selection change. */
|
|
615
619
|
onSelectionValidityChange?: (state: PickerSelectionValidity) => void;
|
|
616
|
-
/** The
|
|
620
|
+
/** The configured selection rules have just become valid. */
|
|
617
621
|
onSelectionValid?: (seats: SelectedSeat[]) => void;
|
|
618
|
-
/** The
|
|
622
|
+
/** The configured selection rules have just become invalid. */
|
|
619
623
|
onSelectionInvalid?: (state: PickerSelectionValidity) => void;
|
|
620
624
|
/** A manual or programmatic selection reached the active maximum. */
|
|
621
625
|
onSelectionLimit?: (maxSelection: number) => void;
|
|
@@ -729,7 +733,7 @@ declare class SeatingChart {
|
|
|
729
733
|
setSelectableObjects(objects: string[] | null): void;
|
|
730
734
|
/** Change the selection cap without remounting. */
|
|
731
735
|
setMaxSelection(maxSelection: number): void;
|
|
732
|
-
/** Current
|
|
736
|
+
/** Current selection-rule validity, or null when no rules were configured. */
|
|
733
737
|
getSelectionValidity(): PickerSelectionValidity | null;
|
|
734
738
|
/** Hold the current selection. Resolves the hold, or null on a 409 conflict. */
|
|
735
739
|
hold(options?: {
|
|
@@ -971,10 +975,10 @@ declare function bindSeatingChartHandle(getInstance: () => SeatingChart | null):
|
|
|
971
975
|
* two behaviours. React already treated them this way; Vue and Angular did not
|
|
972
976
|
* expose them at all.
|
|
973
977
|
*/
|
|
974
|
-
declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
|
|
978
|
+
declare const SEATING_CHART_IDENTITY_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "selectionValidators", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay"];
|
|
975
979
|
type SeatingChartIdentityProp = (typeof SEATING_CHART_IDENTITY_PROPS)[number];
|
|
976
980
|
/** Non-callback options a wrapper accepts as props/inputs and passes straight through. */
|
|
977
|
-
declare const SEATING_CHART_VALUE_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay", "selectedObjects", "selectableObjects", "messages", "seatTooltip", "buyerAccessTokenProvider", "buyerAccessToken"];
|
|
981
|
+
declare const SEATING_CHART_VALUE_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "selectionValidators", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay", "selectedObjects", "selectableObjects", "messages", "seatTooltip", "buyerAccessTokenProvider", "buyerAccessToken"];
|
|
978
982
|
type SeatingChartValueProp = (typeof SEATING_CHART_VALUE_PROPS)[number];
|
|
979
983
|
/** Every callback option a wrapper wires to its own event mechanism. */
|
|
980
984
|
declare const SEATING_CHART_CALLBACK_PROPS: readonly ["onSelectionChange", "onSelectionValidityChange", "onSelectionValid", "onSelectionInvalid", "onSelectionLimit", "onHold", "onHoldRestored", "onHoldExpired", "onGAClick", "onError", "onDeckTap", "onHint", "onSeatHover", "onAccessExpired", "onAccessUnavailable", "onSelectedObjectUnavailable"];
|
|
@@ -1297,6 +1301,24 @@ interface TicketOfferPrice {
|
|
|
1297
1301
|
startsAt?: number | null;
|
|
1298
1302
|
endsAt?: number | null;
|
|
1299
1303
|
}
|
|
1304
|
+
interface ChannelPriceOverride {
|
|
1305
|
+
categoryKey: string;
|
|
1306
|
+
tierId: string | null;
|
|
1307
|
+
price: number;
|
|
1308
|
+
}
|
|
1309
|
+
/** Pricing configuration projected only for the private channels in this grant. */
|
|
1310
|
+
interface BuyerChannelPricing {
|
|
1311
|
+
assignmentVersion: number;
|
|
1312
|
+
channels: Array<{
|
|
1313
|
+
channelId: string;
|
|
1314
|
+
pricingVersion: number;
|
|
1315
|
+
priceOverrides: ChannelPriceOverride[];
|
|
1316
|
+
}>;
|
|
1317
|
+
objects: Array<{
|
|
1318
|
+
label: string;
|
|
1319
|
+
channelId: string;
|
|
1320
|
+
}>;
|
|
1321
|
+
}
|
|
1300
1322
|
interface TicketOfferAvailability {
|
|
1301
1323
|
state: SaleState;
|
|
1302
1324
|
/** Currently advertised offer price, in minor units. */
|
|
@@ -1309,6 +1331,7 @@ interface TicketOfferAvailability {
|
|
|
1309
1331
|
upcoming: TicketOfferSummary | null;
|
|
1310
1332
|
/** Server-resolved active offer prices by category, in major units. */
|
|
1311
1333
|
prices: TicketOfferPrice[];
|
|
1334
|
+
channelPricing: BuyerChannelPricing | null;
|
|
1312
1335
|
}
|
|
1313
1336
|
/** Parse a public offer payload without repairing a half-understood price. */
|
|
1314
1337
|
declare function parseTicketOfferAvailability(body: unknown): TicketOfferAvailability | null;
|
|
@@ -1492,6 +1515,9 @@ interface SeatPickerOptions {
|
|
|
1492
1515
|
selectableObjects?: string[] | null;
|
|
1493
1516
|
/** Require exactly this many total seated/table/GA guest units before checkout. */
|
|
1494
1517
|
numberOfPlacesToSelect?: number;
|
|
1518
|
+
/** Optional sale guards evaluated after every change and enforced before a
|
|
1519
|
+
* hold: minimum quantity, consecutive seats, and/or no stranded singles. */
|
|
1520
|
+
selectionValidators?: PickerSelectionValidator[];
|
|
1495
1521
|
/** BCP 47 language for the widget UI. Built-in: en, es, de, fr. */
|
|
1496
1522
|
locale?: string;
|
|
1497
1523
|
/** Per-key string overrides layered over the active locale. */
|
|
@@ -1717,11 +1743,11 @@ interface SeatPickerOptions {
|
|
|
1717
1743
|
onBooked?: (handoff: CheckoutHandoff) => void;
|
|
1718
1744
|
/** Selection changed (tap or best-available). */
|
|
1719
1745
|
onSelectionChange?: (seats: PickerSeat[]) => void;
|
|
1720
|
-
/**
|
|
1746
|
+
/** Selection-rule state after each selection change. */
|
|
1721
1747
|
onSelectionValidityChange?: (state: PickerSelectionValidity) => void;
|
|
1722
|
-
/** The configured
|
|
1748
|
+
/** The configured selection rules have just become valid. */
|
|
1723
1749
|
onSelectionValid?: (seats: PickerSeat[]) => void;
|
|
1724
|
-
/** The
|
|
1750
|
+
/** The configured selection rules have just become invalid. */
|
|
1725
1751
|
onSelectionInvalid?: (state: PickerSelectionValidity) => void;
|
|
1726
1752
|
/** A selection attempt reached the active maximum. */
|
|
1727
1753
|
onSelectionLimit?: (maxSelection: number) => void;
|
|
@@ -1797,7 +1823,7 @@ declare class SeatPicker {
|
|
|
1797
1823
|
private maxTickets;
|
|
1798
1824
|
/** Exact ticket count required before checkout; null keeps ordinary 1..max behavior. */
|
|
1799
1825
|
private readonly exactTickets;
|
|
1800
|
-
private
|
|
1826
|
+
private lastSelectionValidity;
|
|
1801
1827
|
/** Original host pricing, kept separate from live server offer overrides. */
|
|
1802
1828
|
private readonly hostPricing;
|
|
1803
1829
|
private root;
|
|
@@ -1822,6 +1848,9 @@ declare class SeatPicker {
|
|
|
1822
1848
|
/** The event's formatted date-time (event-zone), reused by the closed-state note. */
|
|
1823
1849
|
private eventWhenText;
|
|
1824
1850
|
private offerAvailability;
|
|
1851
|
+
/** Server-authoritative channel rules, projected only for this buyer scope. */
|
|
1852
|
+
private readonly channelByObject;
|
|
1853
|
+
private readonly pricesByChannel;
|
|
1825
1854
|
private hold;
|
|
1826
1855
|
/** Latest server expiry for the open hold (moves on extend). */
|
|
1827
1856
|
private holdExpiresAt;
|
|
@@ -2144,7 +2173,7 @@ declare class SeatPicker {
|
|
|
2144
2173
|
private activeFloorObjects;
|
|
2145
2174
|
/** Attach the F3 overview minimap into the bottom-left chrome region. */
|
|
2146
2175
|
private buildMinimap;
|
|
2147
|
-
/** Effective
|
|
2176
|
+
/** Effective category summary price. Object-specific channel prices are added to the range below. */
|
|
2148
2177
|
private catPrice;
|
|
2149
2178
|
/** Complete buyer-visible price range, including every ticket tier and
|
|
2150
2179
|
* tier-specific host override. */
|
|
@@ -2247,11 +2276,12 @@ declare class SeatPicker {
|
|
|
2247
2276
|
*/
|
|
2248
2277
|
private refreshOfferAvailability;
|
|
2249
2278
|
private offerPrice;
|
|
2279
|
+
private applyChannelPricing;
|
|
2250
2280
|
/** The compact current/upcoming offer card above Ticket prices. */
|
|
2251
2281
|
private syncOffer;
|
|
2252
2282
|
/**
|
|
2253
|
-
* The price the buyer will actually pay for
|
|
2254
|
-
*
|
|
2283
|
+
* The price the buyer will actually pay for an object/category/tier: its
|
|
2284
|
+
* scoped channel override, then the host/server offer, then the chart. Every
|
|
2255
2285
|
* price the widget DISPLAYS or hands off must flow through here — a map
|
|
2256
2286
|
* that shows one price while checkout charges another destroys trust.
|
|
2257
2287
|
*/
|
|
@@ -2275,7 +2305,7 @@ declare class SeatPicker {
|
|
|
2275
2305
|
/** A live delta took one of OUR selected (not yet held) seats — evict + tell the buyer. */
|
|
2276
2306
|
private evictTakenSelections;
|
|
2277
2307
|
private syncTray;
|
|
2278
|
-
private
|
|
2308
|
+
private emitSelectionValidity;
|
|
2279
2309
|
/** Paint the bottom-sheet's collapsed one-liner (pickerTray.ts builds it). */
|
|
2280
2310
|
private renderPeek;
|
|
2281
2311
|
private removeHeldLabel;
|
|
@@ -2360,7 +2390,7 @@ declare class SeatPicker {
|
|
|
2360
2390
|
setSelectableObjects(objects: string[] | null): void;
|
|
2361
2391
|
/** Change the order selection cap without remounting. */
|
|
2362
2392
|
setMaxSelection(maxSelection: number): void;
|
|
2363
|
-
/** Current
|
|
2393
|
+
/** Current selection-rule validity, including held and pending GA tickets. */
|
|
2364
2394
|
getSelectionValidity(): PickerSelectionValidity | null;
|
|
2365
2395
|
/**
|
|
2366
2396
|
* Re-ink the DRAWN MAP after mount, so the canvas can follow a page palette
|