@seatlayer/js 0.59.0 → 0.61.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.cjs +202 -36
- package/dist/index.d.cts +241 -25
- package/dist/index.d.ts +241 -25
- package/dist/index.js +201 -35
- package/package.json +7 -3
package/dist/index.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { PickerSeat, PickerSelectionValidator, RendererViewMode, SeatHoverDetails, PickerSelectionValidity, PickerTransport, PickerMapTheme } from '@seatlayer/core';
|
|
1
|
+
import { PickerSeat, PickerGAArea, PickerSelectionValidator, RendererViewMode, SeatHoverDetails, PickerSelectionValidity, PickerTransport, PickerMapTheme } from '@seatlayer/core';
|
|
2
2
|
export { ExpandedSeat, PickerMapTheme, PickerSelectionValidator, PickerSelectionValidity, PickerSelectionViolation, RendererViewMode, SeatHoverDetails } from '@seatlayer/core';
|
|
3
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-2z9HBOAX.cjs';
|
|
4
4
|
|
|
@@ -506,6 +506,77 @@ interface PubApiOptions {
|
|
|
506
506
|
onObjectUnavailable?: (event: SelectedObjectUnavailableEvent) => void;
|
|
507
507
|
}
|
|
508
508
|
|
|
509
|
+
/**
|
|
510
|
+
* The general-admission quantity prompt, and the GA half of the tray.
|
|
511
|
+
*
|
|
512
|
+
* Before this module a buyer could tap a GA area on the map and nothing at all
|
|
513
|
+
* happened — `onGAClick` reached `PickerController` but the drop-in widget never
|
|
514
|
+
* wired it — while every area on the chart rendered a permanent stepper row in
|
|
515
|
+
* the tray whether or not the buyer wanted one. Twelve areas meant twelve
|
|
516
|
+
* steppers of clutter, and on a phone (where the tray is a collapsed sheet) the
|
|
517
|
+
* only control that existed was the one the buyer could not see.
|
|
518
|
+
*
|
|
519
|
+
* What replaces it is two taps: tap the area, the prompt opens with a quantity
|
|
520
|
+
* already seeded to 1 (never 0 — nobody opens a ticket picker to buy none), and
|
|
521
|
+
* the primary button reads what it will do, priced live: `Add 3 tickets · $45`.
|
|
522
|
+
* The map stays visible behind it — a popover anchored at the tap on a wide
|
|
523
|
+
* layout, a bottom sheet on a narrow one — because the buyer is choosing where
|
|
524
|
+
* to stand, and a centred modal hides exactly the thing being chosen.
|
|
525
|
+
*
|
|
526
|
+
* The tray keeps the stepper rows, but only for areas with a quantity: it is a
|
|
527
|
+
* cart, not a price list. Everything else collapses into one compact `Areas`
|
|
528
|
+
* list, which is the keyboard/screen-reader entry point into the same prompt.
|
|
529
|
+
*
|
|
530
|
+
* Split out of SeatPicker.ts rather than added to it: that file is pinned at its
|
|
531
|
+
* size in the app's file-size ratchet and may not grow.
|
|
532
|
+
*/
|
|
533
|
+
|
|
534
|
+
/** One priced ticket type inside an area. `id` is null for an untiered area. */
|
|
535
|
+
interface GaPromptTier {
|
|
536
|
+
id: string | null;
|
|
537
|
+
label: string;
|
|
538
|
+
price: number;
|
|
539
|
+
}
|
|
540
|
+
/**
|
|
541
|
+
* What a host takes over when it returns `true` from `onGAPrompt`. `confirm`
|
|
542
|
+
* accepts a plain number for a single-tier area, or a per-tier record; both
|
|
543
|
+
* land in exactly the same place the built-in prompt's Add button does.
|
|
544
|
+
*/
|
|
545
|
+
interface GAPromptRequest {
|
|
546
|
+
area: PickerGAArea;
|
|
547
|
+
/** Quantities already chosen here, per tier id (`''` for an untiered area). */
|
|
548
|
+
selected: Record<string, number>;
|
|
549
|
+
min: number;
|
|
550
|
+
/** min(units still free, order cap − tickets chosen elsewhere). */
|
|
551
|
+
max: number;
|
|
552
|
+
tiers: GaPromptTier[];
|
|
553
|
+
confirm(quantity: number | Record<string, number>): void;
|
|
554
|
+
cancel(): void;
|
|
555
|
+
}
|
|
556
|
+
/** Per (area, tier) pending quantities. A `null` tier key is an untiered area. */
|
|
557
|
+
type GaQtyMap = Map<string, Map<string | null, number>>;
|
|
558
|
+
/** The slice of SeatPicker this module drives. Everything else stays private. */
|
|
559
|
+
interface GaPromptPicker {
|
|
560
|
+
root: HTMLDivElement | null;
|
|
561
|
+
els: Record<string, HTMLElement>;
|
|
562
|
+
srEl: HTMLDivElement | null;
|
|
563
|
+
gaQty: GaQtyMap;
|
|
564
|
+
maxTickets: number;
|
|
565
|
+
salesClosed: boolean;
|
|
566
|
+
gaPromptEl: HTMLDivElement | null;
|
|
567
|
+
gaPromptReturnFocus: HTMLElement | null;
|
|
568
|
+
gaAreasExpanded: boolean;
|
|
569
|
+
money(amount: number): string;
|
|
570
|
+
paidPrice(categoryKey: string | undefined, tierId: string | null | undefined, fallback: number, objectLabel?: string): number;
|
|
571
|
+
tf(key: string, fallback: string): string;
|
|
572
|
+
toast(message: string, tone?: 'error' | 'success' | 'warning' | 'neutral'): void;
|
|
573
|
+
reducedMotion(): boolean;
|
|
574
|
+
syncTray(): void;
|
|
575
|
+
/** Tickets in the order right now, held + selected seats + every GA quantity. */
|
|
576
|
+
totalTicketCount(): number;
|
|
577
|
+
onGAPromptHook?: ((prompt: GAPromptRequest) => boolean | void) | undefined;
|
|
578
|
+
}
|
|
579
|
+
|
|
509
580
|
/**
|
|
510
581
|
* SeatingChart — the embeddable buyer picker.
|
|
511
582
|
*
|
|
@@ -580,7 +651,7 @@ interface SeatingChartOptions {
|
|
|
580
651
|
selectionValidators?: PickerSelectionValidator[];
|
|
581
652
|
/**
|
|
582
653
|
* BCP 47 language for the widget UI — `'de'`, `'es-MX'`, etc. Falls back to
|
|
583
|
-
* the browser language, then English.
|
|
654
|
+
* the browser language, then English. 37 languages ship. The German
|
|
584
655
|
* bundle (etc.) is fetched on demand so unused languages cost nothing.
|
|
585
656
|
*/
|
|
586
657
|
locale?: string;
|
|
@@ -589,6 +660,16 @@ interface SeatingChartOptions {
|
|
|
589
660
|
* without shipping a whole bundle, e.g. `{ 'map.fromPrice': 'ab {price}' }`.
|
|
590
661
|
*/
|
|
591
662
|
messages?: Record<string, string>;
|
|
663
|
+
/**
|
|
664
|
+
* Show an in-chart language switcher offering exactly these languages.
|
|
665
|
+
*
|
|
666
|
+
* Opt-in and curated on purpose: the chart sits inside someone else's page,
|
|
667
|
+
* a multilingual host already has its own switcher, and two that can
|
|
668
|
+
* disagree is worse than either alone. A curated list also beats all 37 — a
|
|
669
|
+
* German venue wants de/en/pl in the menu, not Welsh. Fewer than two
|
|
670
|
+
* resolvable entries renders nothing.
|
|
671
|
+
*/
|
|
672
|
+
languages?: string[];
|
|
592
673
|
/** ISO 4217 currency for on-map prices (default USD). */
|
|
593
674
|
currency?: string;
|
|
594
675
|
/**
|
|
@@ -628,6 +709,13 @@ interface SeatingChartOptions {
|
|
|
628
709
|
onHoldRestored?: (result: HoldResult) => void;
|
|
629
710
|
onHoldExpired?: () => void;
|
|
630
711
|
onGAClick?: (area: GAAreaAvailability) => void;
|
|
712
|
+
/**
|
|
713
|
+
* Mirror of {@link SeatPickerOptions.onGAPrompt}. The low-level chart draws no
|
|
714
|
+
* quantity UI of its own, so this fires purely as the "the buyer wants to pick
|
|
715
|
+
* a quantity here" signal, with the same pre-computed `min`/`max`/`tiers` the
|
|
716
|
+
* full widget would have used; the return value is accepted and ignored.
|
|
717
|
+
*/
|
|
718
|
+
onGAPrompt?: (prompt: GAPromptRequest) => boolean | void;
|
|
631
719
|
/**
|
|
632
720
|
* The buyer access session lapsed. `refreshed` says whether the provider
|
|
633
721
|
* already recovered it — false means private inventory is now unavailable and
|
|
@@ -683,6 +771,8 @@ declare class SeatingChart {
|
|
|
683
771
|
readonly publicKey?: string;
|
|
684
772
|
private mount;
|
|
685
773
|
private hostEl;
|
|
774
|
+
/** The organizer's language for this event, learned when the chart resolves. */
|
|
775
|
+
private eventLocale;
|
|
686
776
|
private rendered;
|
|
687
777
|
private mode_;
|
|
688
778
|
private tipEl;
|
|
@@ -716,6 +806,32 @@ declare class SeatingChart {
|
|
|
716
806
|
* wrapper, which must be able to tell an integrator that the build they are
|
|
717
807
|
* about to ship is pointed at a test event.
|
|
718
808
|
*/
|
|
809
|
+
/**
|
|
810
|
+
* The opt-in language switcher, offering exactly the languages the host
|
|
811
|
+
* named. Absent unless `languages` lists at least two — a menu with one
|
|
812
|
+
* entry is furniture, and an unrequested one duplicates the switcher a
|
|
813
|
+
* multilingual host site already has.
|
|
814
|
+
*
|
|
815
|
+
* Each language names itself (`LOCALE_NAMES`): a reader scanning for their
|
|
816
|
+
* own language finds "Deutsch", never "German". An English list is
|
|
817
|
+
* unreadable to exactly the people who need it.
|
|
818
|
+
*/
|
|
819
|
+
private buildLanguageSwitcher;
|
|
820
|
+
/**
|
|
821
|
+
* Change the language of a LIVE chart, keeping the buyer's selection.
|
|
822
|
+
*
|
|
823
|
+
* `locale` is otherwise read once at render, which is fine for a page that
|
|
824
|
+
* knows its language up front and useless for one with a language switcher.
|
|
825
|
+
* The competing embed API can only `rerender()`, and that clears the
|
|
826
|
+
* selection — losing someone's seats because they changed language is not an
|
|
827
|
+
* acceptable trade, so this rebuilds the map through `refreshMapCopy()`,
|
|
828
|
+
* which restores the selection on the far side.
|
|
829
|
+
*
|
|
830
|
+
* Returns the locale that actually became active: an unsupported or
|
|
831
|
+
* not-yet-translated tag resolves to English rather than throwing, exactly as
|
|
832
|
+
* it does at first render.
|
|
833
|
+
*/
|
|
834
|
+
setLocale(next: string | null | undefined): Promise<string>;
|
|
719
835
|
getMode(): 'live' | 'test' | null;
|
|
720
836
|
/** Current selection with prices resolved from the chart categories. */
|
|
721
837
|
getSelection(): SelectedSeat[];
|
|
@@ -981,7 +1097,7 @@ type SeatingChartIdentityProp = (typeof SEATING_CHART_IDENTITY_PROPS)[number];
|
|
|
981
1097
|
declare const SEATING_CHART_VALUE_PROPS: readonly ["event", "apiBase", "maxSelection", "numberOfPlacesToSelect", "selectionValidators", "publicKey", "locale", "currency", "colorblindSafe", "initialView", "errorDisplay", "selectedObjects", "selectableObjects", "messages", "seatTooltip", "buyerAccessTokenProvider", "buyerAccessToken"];
|
|
982
1098
|
type SeatingChartValueProp = (typeof SEATING_CHART_VALUE_PROPS)[number];
|
|
983
1099
|
/** Every callback option a wrapper wires to its own event mechanism. */
|
|
984
|
-
declare const SEATING_CHART_CALLBACK_PROPS: readonly ["onSelectionChange", "onSelectionValidityChange", "onSelectionValid", "onSelectionInvalid", "onSelectionLimit", "onHold", "onHoldRestored", "onHoldExpired", "onGAClick", "onError", "onDeckTap", "onHint", "onSeatHover", "onAccessExpired", "onAccessUnavailable", "onSelectedObjectUnavailable"];
|
|
1100
|
+
declare const SEATING_CHART_CALLBACK_PROPS: readonly ["onSelectionChange", "onSelectionValidityChange", "onSelectionValid", "onSelectionInvalid", "onSelectionLimit", "onHold", "onHoldRestored", "onHoldExpired", "onGAClick", "onGAPrompt", "onError", "onDeckTap", "onHint", "onSeatHover", "onAccessExpired", "onAccessUnavailable", "onSelectedObjectUnavailable"];
|
|
985
1101
|
type SeatingChartCallbackProp = (typeof SEATING_CHART_CALLBACK_PROPS)[number];
|
|
986
1102
|
/** The value half of the options, as a wrapper holds it. */
|
|
987
1103
|
type SeatingChartValues = Pick<SeatingChartOptions, SeatingChartValueProp>;
|
|
@@ -1518,10 +1634,26 @@ interface SeatPickerOptions {
|
|
|
1518
1634
|
/** Optional sale guards evaluated after every change and enforced before a
|
|
1519
1635
|
* hold: minimum quantity, consecutive seats, and/or no stranded singles. */
|
|
1520
1636
|
selectionValidators?: PickerSelectionValidator[];
|
|
1521
|
-
/**
|
|
1637
|
+
/**
|
|
1638
|
+
* BCP 47 language for the widget UI. 37 languages ship; omit this and each
|
|
1639
|
+
* buyer gets their own `navigator.languages`, falling back to English.
|
|
1640
|
+
* Read once at render — there is no way to change it on a live chart.
|
|
1641
|
+
*/
|
|
1522
1642
|
locale?: string;
|
|
1523
1643
|
/** Per-key string overrides layered over the active locale. */
|
|
1524
1644
|
messages?: Record<string, string>;
|
|
1645
|
+
/**
|
|
1646
|
+
* Show an in-picker language switcher offering exactly these languages.
|
|
1647
|
+
*
|
|
1648
|
+
* Opt-in and curated on purpose. Omit it and there is no control: the widget
|
|
1649
|
+
* sits inside someone else's page, and a multilingual host site already has
|
|
1650
|
+
* its own switcher — two that can disagree is worse than either alone. A
|
|
1651
|
+
* curated list also beats offering all 37: a German venue wants de/en/pl in
|
|
1652
|
+
* the menu, not Welsh.
|
|
1653
|
+
*
|
|
1654
|
+
* Switching keeps the buyer's selection; it does not re-render the chart.
|
|
1655
|
+
*/
|
|
1656
|
+
languages?: string[];
|
|
1525
1657
|
/** ISO 4217 currency fallback (the org/event currency on the chart wins). */
|
|
1526
1658
|
currency?: string;
|
|
1527
1659
|
/** Colorblind-safe rendering (Okabe-Ito palette, hollow booked seats). */
|
|
@@ -1783,6 +1915,22 @@ interface SeatPickerOptions {
|
|
|
1783
1915
|
* widget has already dropped them from the tray.
|
|
1784
1916
|
*/
|
|
1785
1917
|
onSelectedObjectUnavailable?: (event: SelectedObjectUnavailableEvent) => void;
|
|
1918
|
+
/**
|
|
1919
|
+
* A buyer tapped a general-admission area (on the map, or in the tray's
|
|
1920
|
+
* `Areas` list) and the widget is about to open its own quantity prompt.
|
|
1921
|
+
*
|
|
1922
|
+
* Return `true` to take the interaction over completely — the built-in
|
|
1923
|
+
* popover/sheet is suppressed, and the host drives the choice with whatever
|
|
1924
|
+
* UI it likes, landing the result through `prompt.confirm(quantity)` (a plain
|
|
1925
|
+
* number for a single-tier area, or `{ [tierId]: quantity }`) or dropping it
|
|
1926
|
+
* with `prompt.cancel()`. Return anything else (or nothing) and the built-in
|
|
1927
|
+
* prompt opens as usual, so this is also usable as a plain notification.
|
|
1928
|
+
*
|
|
1929
|
+
* `prompt.max` already folds in the area's live availability AND the
|
|
1930
|
+
* order-wide ticket cap minus everything chosen elsewhere; a `confirm` above
|
|
1931
|
+
* it is clamped rather than rejected.
|
|
1932
|
+
*/
|
|
1933
|
+
onGAPrompt?: (prompt: GAPromptRequest) => boolean | void;
|
|
1786
1934
|
onError?: (err: unknown) => void;
|
|
1787
1935
|
}
|
|
1788
1936
|
|
|
@@ -1807,8 +1955,9 @@ interface SeatPickerOptions {
|
|
|
1807
1955
|
* so plain host CSS can restyle too.
|
|
1808
1956
|
*/
|
|
1809
1957
|
|
|
1810
|
-
declare class SeatPicker {
|
|
1811
|
-
|
|
1958
|
+
declare class SeatPicker implements GaPromptPicker {
|
|
1959
|
+
/** @internal Read by pickerGaPrompt for the `onGAPrompt` host hook. */
|
|
1960
|
+
readonly opts: SeatPickerOptions;
|
|
1812
1961
|
private readonly api;
|
|
1813
1962
|
/** Authenticated view media, cached only for this picker lifetime. */
|
|
1814
1963
|
private readonly buyerAssetUrls;
|
|
@@ -1820,17 +1969,17 @@ declare class SeatPicker {
|
|
|
1820
1969
|
private accessEl;
|
|
1821
1970
|
private readonly apiBase;
|
|
1822
1971
|
private readonly controller;
|
|
1823
|
-
|
|
1972
|
+
/** @internal */ maxTickets: number;
|
|
1824
1973
|
/** Exact ticket count required before checkout; null keeps ordinary 1..max behavior. */
|
|
1825
1974
|
private readonly exactTickets;
|
|
1826
1975
|
private lastSelectionValidity;
|
|
1827
1976
|
/** Original host pricing, kept separate from live server offer overrides. */
|
|
1828
1977
|
private readonly hostPricing;
|
|
1829
|
-
|
|
1978
|
+
/** @internal */ root: HTMLDivElement | null;
|
|
1830
1979
|
private mapHost;
|
|
1831
1980
|
private rendered;
|
|
1832
1981
|
private destroyed;
|
|
1833
|
-
|
|
1982
|
+
/** @internal */ els: Record<string, HTMLElement>;
|
|
1834
1983
|
/** Feature 6 anchor regions — positioned flex containers over the map. */
|
|
1835
1984
|
private regions;
|
|
1836
1985
|
private ro;
|
|
@@ -1874,7 +2023,15 @@ declare class SeatPicker {
|
|
|
1874
2023
|
private checkoutPanel;
|
|
1875
2024
|
private extendEl;
|
|
1876
2025
|
private bookedEl;
|
|
1877
|
-
|
|
2026
|
+
/** @internal Pending GA units per (area, tier) — see pickerGaPrompt.ts. */
|
|
2027
|
+
gaQty: GaQtyMap;
|
|
2028
|
+
/** @internal The open quantity prompt (popover or sheet), while one is up. */
|
|
2029
|
+
gaPromptEl: HTMLDivElement | null;
|
|
2030
|
+
/** @internal */ gaPromptReturnFocus: HTMLElement | null;
|
|
2031
|
+
/** @internal Whether the tray's collapsed `Areas` list is open. */
|
|
2032
|
+
gaAreasExpanded: boolean;
|
|
2033
|
+
/** Viewport point of the last map tap — anchors the GA popover. */
|
|
2034
|
+
private lastMapPoint;
|
|
1878
2035
|
private tipEl;
|
|
1879
2036
|
private tipPos;
|
|
1880
2037
|
private confirmEl;
|
|
@@ -1883,7 +2040,7 @@ declare class SeatPicker {
|
|
|
1883
2040
|
private tableDialog;
|
|
1884
2041
|
private tableDialogHeld;
|
|
1885
2042
|
private tableDialogReturnFocus;
|
|
1886
|
-
|
|
2043
|
+
/** @internal */ srEl: HTMLDivElement | null;
|
|
1887
2044
|
private baQty;
|
|
1888
2045
|
private baCat;
|
|
1889
2046
|
/** Optional navigation-zone scope for buyer best-available. */
|
|
@@ -1902,7 +2059,7 @@ declare class SeatPicker {
|
|
|
1902
2059
|
private bestAvailableConfirm;
|
|
1903
2060
|
private releasingHold;
|
|
1904
2061
|
/** Event sales window is closed (read-only load state / live close). */
|
|
1905
|
-
|
|
2062
|
+
/** @internal */ salesClosed: boolean;
|
|
1906
2063
|
/** Every seated category's live availability is 0 (sold-out overlay is up). */
|
|
1907
2064
|
private soldOut;
|
|
1908
2065
|
private soldoutEl;
|
|
@@ -1951,6 +2108,8 @@ declare class SeatPicker {
|
|
|
1951
2108
|
private secCardShownAt;
|
|
1952
2109
|
/** Previous tray ticket count — first 0→n transition auto-expands the mobile sheet. */
|
|
1953
2110
|
private lastTrayCount;
|
|
2111
|
+
/** The opt-in language switcher, when `languages` named at least two. */
|
|
2112
|
+
private langSel;
|
|
1954
2113
|
/** Previous computed total — drives a single explanatory value bump. */
|
|
1955
2114
|
private lastTrayTotal;
|
|
1956
2115
|
/** Stable item keys prevent tray chips re-animating on unrelated realtime syncs. */
|
|
@@ -1961,6 +2120,8 @@ declare class SeatPicker {
|
|
|
1961
2120
|
private holdingLabels;
|
|
1962
2121
|
private ctaPhase;
|
|
1963
2122
|
private a11yChipsEl;
|
|
2123
|
+
/** Rail scroll listener attached once; the rail repaints many times. */
|
|
2124
|
+
private railEdgesBound;
|
|
1964
2125
|
private fsFallback;
|
|
1965
2126
|
private fsChangeHandler;
|
|
1966
2127
|
private fsEscHandler;
|
|
@@ -2099,7 +2260,9 @@ declare class SeatPicker {
|
|
|
2099
2260
|
* unknown keys, so this collapses that to `fallback` — while still honoring a
|
|
2100
2261
|
* host `messages` override (which makes `t()` return the override, not the key).
|
|
2101
2262
|
*/
|
|
2102
|
-
|
|
2263
|
+
/** @internal The host's GA prompt takeover, if it supplied one. */
|
|
2264
|
+
get onGAPromptHook(): SeatPickerOptions['onGAPrompt'];
|
|
2265
|
+
/** @internal */ tf(key: string, fallback: string): string;
|
|
2103
2266
|
/** Sold-out overlay — an informational state with no unavailable action. */
|
|
2104
2267
|
private buildSoldoutOverlay;
|
|
2105
2268
|
/**
|
|
@@ -2140,7 +2303,7 @@ declare class SeatPicker {
|
|
|
2140
2303
|
/** Read a resolved --sl-* token value (canvas needs a real color, not var()). */
|
|
2141
2304
|
private cssVar;
|
|
2142
2305
|
/** Motion is progressive enhancement; all state remains legible when reduced. */
|
|
2143
|
-
|
|
2306
|
+
/** @internal */ reducedMotion(): boolean;
|
|
2144
2307
|
private scheduleMotion;
|
|
2145
2308
|
/** Restart one finite CSS animation without leaving a permanent state class. */
|
|
2146
2309
|
private animateOnce;
|
|
@@ -2151,14 +2314,10 @@ declare class SeatPicker {
|
|
|
2151
2314
|
/** Update only the action affordance; selection callbacks must not refire. */
|
|
2152
2315
|
private committedSelection;
|
|
2153
2316
|
private pendingSelectionCount;
|
|
2154
|
-
private heldGACounts;
|
|
2155
|
-
private pendingGACount;
|
|
2156
2317
|
private heldTicketCount;
|
|
2157
|
-
|
|
2318
|
+
/** @internal */ totalTicketCount(): number;
|
|
2158
2319
|
/** Held tickets and standing quantities consume the same order-wide cap. */
|
|
2159
2320
|
private updateSelectionCapacity;
|
|
2160
|
-
private canAddTicket;
|
|
2161
|
-
private pendingGATotal;
|
|
2162
2321
|
private syncCta;
|
|
2163
2322
|
private setCtaPhase;
|
|
2164
2323
|
/** Session-scoped capability key: isolated by API origin and event. */
|
|
@@ -2254,7 +2413,7 @@ declare class SeatPicker {
|
|
|
2254
2413
|
*/
|
|
2255
2414
|
private openSeatView;
|
|
2256
2415
|
private closeSeatView;
|
|
2257
|
-
|
|
2416
|
+
/** @internal */ money(n: number): string;
|
|
2258
2417
|
/**
|
|
2259
2418
|
* Sleep until the offer schedule's next known transition, then re-read.
|
|
2260
2419
|
*
|
|
@@ -2284,7 +2443,7 @@ declare class SeatPicker {
|
|
|
2284
2443
|
* price the widget DISPLAYS or hands off must flow through here — a map
|
|
2285
2444
|
* that shows one price while checkout charges another destroys trust.
|
|
2286
2445
|
*/
|
|
2287
|
-
|
|
2446
|
+
/** @internal */ paidPrice(categoryKey: string | undefined, tierId: string | null | undefined, fallback: number, objectLabel?: string): number;
|
|
2288
2447
|
/** The half of a legend's inputs the rail and the price list share, resolved
|
|
2289
2448
|
* once so the two renderings cannot be given different answers. */
|
|
2290
2449
|
private legendDeps;
|
|
@@ -2309,11 +2468,16 @@ declare class SeatPicker {
|
|
|
2309
2468
|
private liveTimer;
|
|
2310
2469
|
/** A live delta took one of OUR selected (not yet held) seats — evict + tell the buyer. */
|
|
2311
2470
|
private evictTakenSelections;
|
|
2312
|
-
|
|
2471
|
+
/** @internal */ syncTray(): void;
|
|
2313
2472
|
private emitSelectionValidity;
|
|
2314
2473
|
/** Paint the bottom-sheet's collapsed one-liner (pickerTray.ts builds it). */
|
|
2315
2474
|
private renderPeek;
|
|
2316
|
-
|
|
2475
|
+
/**
|
|
2476
|
+
* Release one buyer-visible held LINE. That is one label for a seat, and every
|
|
2477
|
+
* unit label behind a grouped GA line — a buyer who presses × on
|
|
2478
|
+
* "PIT · Adult ×2" means both of them, not one of two identical cards.
|
|
2479
|
+
*/
|
|
2480
|
+
private removeHeldLabels;
|
|
2317
2481
|
private handleChangeSeats;
|
|
2318
2482
|
private handleCta;
|
|
2319
2483
|
private startHoldTimer;
|
|
@@ -2366,7 +2530,10 @@ declare class SeatPicker {
|
|
|
2366
2530
|
/** Assemble the stable {@link CheckoutHandoff} from a hold's server line items. */
|
|
2367
2531
|
private buildHandoff;
|
|
2368
2532
|
private emitHoldChange;
|
|
2369
|
-
|
|
2533
|
+
/** @internal */ toast(msg: string, tone?: 'neutral' | 'success' | 'warning' | 'error', action?: {
|
|
2534
|
+
label: string;
|
|
2535
|
+
onClick: () => void;
|
|
2536
|
+
}): void;
|
|
2370
2537
|
private placeTooltip;
|
|
2371
2538
|
/**
|
|
2372
2539
|
* Row label without the redundant section prefix. Charts commonly name row
|
|
@@ -2413,6 +2580,12 @@ declare class SeatPicker {
|
|
|
2413
2580
|
* colours have not changed; safe to call on every render.
|
|
2414
2581
|
*/
|
|
2415
2582
|
setMapTheme(map: PickerMapTheme | null): void;
|
|
2583
|
+
/**
|
|
2584
|
+
* Chrome docked on the map follows the MAP's ground, not the picker's — see
|
|
2585
|
+
* resolveMapChromeTokens. The map ground resolves the way the renderer does:
|
|
2586
|
+
* host map override → chart theme → the picker's own background.
|
|
2587
|
+
*/
|
|
2588
|
+
private applyMapChromeTokens;
|
|
2416
2589
|
/**
|
|
2417
2590
|
* Let a host suppress duplicate event identity after mount without remounting
|
|
2418
2591
|
* the live picker (and therefore without disturbing a selection or hold).
|
|
@@ -2440,6 +2613,49 @@ declare class SeatPicker {
|
|
|
2440
2613
|
* A no-op when the map is unchanged, so a host may call it on every poll.
|
|
2441
2614
|
*/
|
|
2442
2615
|
setPricing(pricing: SeatPickerPricing | undefined): void;
|
|
2616
|
+
/**
|
|
2617
|
+
* The opt-in language switcher.
|
|
2618
|
+
*
|
|
2619
|
+
* Rendered only when `languages` resolves to at least two distinct locales.
|
|
2620
|
+
* Curated rather than all 37 on purpose — a German venue wants de/en/pl in
|
|
2621
|
+
* the menu, not Welsh — and absent by default, because a multilingual host
|
|
2622
|
+
* site already has its own switcher and two that can disagree is worse than
|
|
2623
|
+
* either alone.
|
|
2624
|
+
*
|
|
2625
|
+
* Each language names itself: a reader scanning for their own finds
|
|
2626
|
+
* "Deutsch", never "German". An English list is unreadable to exactly the
|
|
2627
|
+
* people who need it.
|
|
2628
|
+
*/
|
|
2629
|
+
private buildLanguageSwitcher;
|
|
2630
|
+
/**
|
|
2631
|
+
* Change the language of a mounted picker, keeping the buyer's seats.
|
|
2632
|
+
*
|
|
2633
|
+
* `locale` is otherwise read once, before the chrome is built. That is fine
|
|
2634
|
+
* for a page that knows its language up front and useless for one with a
|
|
2635
|
+
* language switcher — and the competing embed API's only answer, `rerender()`,
|
|
2636
|
+
* clears the selection. Losing someone's held seats because they changed
|
|
2637
|
+
* language is not a trade worth making, so nothing here is destroyed and
|
|
2638
|
+
* rebuilt: the copy is re-applied in place.
|
|
2639
|
+
*
|
|
2640
|
+
* Three passes, because the picker's ~195 `tf()` sites fall into three kinds:
|
|
2641
|
+
*
|
|
2642
|
+
* 1. The skeleton's static labels and aria — set once inside one `innerHTML`
|
|
2643
|
+
* template. Re-applied from the `data-sl-*` markers on those nodes.
|
|
2644
|
+
* 2. The painters (tray, prices, CTA, offer, rails, rungs, floors) — these
|
|
2645
|
+
* already rebuild their HTML from `tf()` whenever state moves, so calling
|
|
2646
|
+
* them again is all it takes.
|
|
2647
|
+
* 3. Everything transient — toasts, dialogs, screen-reader announcements,
|
|
2648
|
+
* tooltips. Those read `tf()` at the moment they fire, so they are already
|
|
2649
|
+
* correct the next time they run and must NOT be forced now.
|
|
2650
|
+
*
|
|
2651
|
+
* The map is last and goes through the controller, because its labels are
|
|
2652
|
+
* baked into Konva `Text` at build time — a repaint would faithfully redraw
|
|
2653
|
+
* the old language.
|
|
2654
|
+
*
|
|
2655
|
+
* Returns the locale that actually became active; an unsupported or
|
|
2656
|
+
* untranslated tag resolves to English rather than throwing.
|
|
2657
|
+
*/
|
|
2658
|
+
setLocale(next: string | null | undefined): Promise<string>;
|
|
2443
2659
|
/** Current colorblind-safe render state, resolved from the stored buyer
|
|
2444
2660
|
* preference at mount. Host chrome (e.g. the Designer preview) reads this to
|
|
2445
2661
|
* surface the state rather than rendering colorblind colors silently. */
|
|
@@ -2591,4 +2807,4 @@ interface AttachPickerFrameOptions {
|
|
|
2591
2807
|
*/
|
|
2592
2808
|
declare function attachPickerFrame(iframe: HTMLIFrameElement, opts?: AttachPickerFrameOptions): () => void;
|
|
2593
2809
|
|
|
2594
|
-
export { ApiError, type AttachPickerFrameOptions, type BestAvailableResult, BuyerAccessContext, type BuyerAccessExpiredEvent, type BuyerAccessRefreshReason, type BuyerAccessToken, type BuyerAccessTokenProvider, BuyerAccessUnavailableError, type BuyerAccessUnavailableEvent, type BuyerAccessUnavailableReason, BuyerRealtimeClient, type BuyerRealtimeOptions, type CheckoutHandoff, type CheckoutLineItem, type CheckoutSessionResult, EmbeddedDesigner, type EmbeddedDesignerEventType, type EmbeddedDesignerMessage, type EmbeddedDesignerOptions, type GAAreaAvailability, type HoldConflict, type HoldLineItem, type HoldResult, type OrderStatusResult, type PaymentOptionsReason, type PaymentOptionsResult, type PaymentProviderName, type Projection, type PubApiOptions, type RealtimeSink, type ResumedHoldResult, SEATING_CHART_CALLBACK_PROPS, SEATING_CHART_HANDLE_METHODS, SEATING_CHART_IDENTITY_PROPS, SEATING_CHART_VALUE_PROPS, type SaleState, SeatPicker, type SeatPickerBestAvailableOptions, type SeatPickerBuyerView, type SeatPickerBuyerViewOptions, type SeatPickerOptions, type SeatPickerPricing, type SeatPickerTheme, SeatingChart, type SeatingChartCallbackProp, type SeatingChartCallbacks, type SeatingChartHandle, type SeatingChartHandleMethod, type SeatingChartIdentityProp, type SeatingChartOptions, type SeatingChartValueProp, type SeatingChartValues, type SelectedObjectUnavailableEvent, type SelectedSeat, type StatusChange, type SubscribeTicket, type TicketOfferAvailability, type TicketOfferPrice, type TicketOfferSummary, attachPickerFrame, bindSeatingChartHandle, buildSeatingChartOptions, createBuyerAccessContext, createControllerSink, parseTicketOfferAvailability, ticketOfferPrices };
|
|
2810
|
+
export { ApiError, type AttachPickerFrameOptions, type BestAvailableResult, BuyerAccessContext, type BuyerAccessExpiredEvent, type BuyerAccessRefreshReason, type BuyerAccessToken, type BuyerAccessTokenProvider, BuyerAccessUnavailableError, type BuyerAccessUnavailableEvent, type BuyerAccessUnavailableReason, BuyerRealtimeClient, type BuyerRealtimeOptions, type CheckoutHandoff, type CheckoutLineItem, type CheckoutSessionResult, EmbeddedDesigner, type EmbeddedDesignerEventType, type EmbeddedDesignerMessage, type EmbeddedDesignerOptions, type GAAreaAvailability, type GAPromptRequest, type GaPromptTier, type HoldConflict, type HoldLineItem, type HoldResult, type OrderStatusResult, type PaymentOptionsReason, type PaymentOptionsResult, type PaymentProviderName, type Projection, type PubApiOptions, type RealtimeSink, type ResumedHoldResult, SEATING_CHART_CALLBACK_PROPS, SEATING_CHART_HANDLE_METHODS, SEATING_CHART_IDENTITY_PROPS, SEATING_CHART_VALUE_PROPS, type SaleState, SeatPicker, type SeatPickerBestAvailableOptions, type SeatPickerBuyerView, type SeatPickerBuyerViewOptions, type SeatPickerOptions, type SeatPickerPricing, type SeatPickerTheme, SeatingChart, type SeatingChartCallbackProp, type SeatingChartCallbacks, type SeatingChartHandle, type SeatingChartHandleMethod, type SeatingChartIdentityProp, type SeatingChartOptions, type SeatingChartValueProp, type SeatingChartValues, type SelectedObjectUnavailableEvent, type SelectedSeat, type StatusChange, type SubscribeTicket, type TicketOfferAvailability, type TicketOfferPrice, type TicketOfferSummary, attachPickerFrame, bindSeatingChartHandle, buildSeatingChartOptions, createBuyerAccessContext, createControllerSink, parseTicketOfferAvailability, ticketOfferPrices };
|