@seatlayer/js 0.95.1 → 0.97.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
@@ -502,6 +502,13 @@ declare function createControllerSink(controller: PickerControllerLike, options?
502
502
  * follows the card's rule: NO RUNTIME IMPORTS. Everything it needs — the ticket
503
503
  * keys, the translator, the buyer's own details — arrives as arguments.
504
504
  *
505
+ * Nothing is asked twice (docs/design/checkout-ux-2026-09-22 in the app repo):
506
+ * ticket 1 copies the buyer's own name and email and is shown as one line,
507
+ * "You · Asha", with a way to change it; a one-ticket order has no holder
508
+ * block at all; holder details that are all optional wait behind one line.
509
+ * What is SENT is unchanged — ticket 1's attendee still carries the buyer's
510
+ * name and email.
511
+ *
505
512
  * The server is the authority on every rule below (`booking_form_incomplete`).
506
513
  * These checks only exist so a buyer hears about a missing name next to the
507
514
  * field, before a round trip, in the same words the refusal would map to.
@@ -684,8 +691,8 @@ interface BestAvailableResult {
684
691
  /** See {@link HoldResult.ticketKeyDetails}. */
685
692
  ticketKeyDetails?: TicketKeyDetail[];
686
693
  }
687
- /** A gateway the organizer can be connected to. */
688
- type PaymentProviderName = 'stripe' | 'razorpay';
694
+ /** A gateway the organizer can be connected to. Provider ids are server-owned. */
695
+ type PaymentProviderName = string;
689
696
  /**
690
697
  * Why `payment-options` came back with an empty list.
691
698
  *
@@ -718,7 +725,7 @@ interface PaymentOptionsResult {
718
725
  /** What hosted checkout must ask: attendee details and active questions. */
719
726
  bookingForm?: BookingForm | null;
720
727
  }
721
- /** A started payment. Exactly one of the two handoffs comes back. */
728
+ /** A started payment. Paid checkouts continue through one provider-neutral redirect. */
722
729
  interface CheckoutSessionResult {
723
730
  orderId: string;
724
731
  totalMinor: number;
@@ -726,8 +733,6 @@ interface CheckoutSessionResult {
726
733
  expiresAt: number;
727
734
  /** Hosted gateway page — navigate to it. */
728
735
  redirectUrl?: string;
729
- /** In-page modal gateway — open it without leaving the page. */
730
- clientPayload?: Record<string, unknown>;
731
736
  /**
732
737
  * `'confirmed'` when the booking needed no payment (a free event, or a hold
733
738
  * that sums to zero): the seats are already booked and the tickets issued,
@@ -836,6 +841,10 @@ interface GaPromptPicker {
836
841
  gaQty: GaQtyMap;
837
842
  maxTickets: number;
838
843
  salesClosed: boolean;
844
+ /** The closed-sales words for this event's state; absent on older hosts. */
845
+ closedWords?(): {
846
+ toast: string;
847
+ };
839
848
  gaPromptEl: HTMLDivElement | null;
840
849
  gaPromptReturnFocus: HTMLElement | null;
841
850
  gaAreasExpanded: boolean;
@@ -1013,6 +1022,13 @@ interface CheckoutLineItem {
1013
1022
  sectionLabel?: string;
1014
1023
  rowLabel?: string;
1015
1024
  seatNumber?: string;
1025
+ /**
1026
+ * Buyer-facing category name ("Standard") and ticket type ("Adult") for
1027
+ * `categoryKey` / `tierId`, so an order summary need not look them up.
1028
+ * Absent when the chart names neither (or on an older SDK).
1029
+ */
1030
+ categoryLabel?: string;
1031
+ tierLabel?: string;
1016
1032
  }
1017
1033
  interface CheckoutHandoff {
1018
1034
  /** Server hold id — pass this to YOUR book call. */
@@ -3479,6 +3495,40 @@ interface WebMcpRegistration {
3479
3495
  /** What `PickerController.render()` reports back about the loaded event. */
3480
3496
  type PickerRenderInfo = NonNullable<Awaited<ReturnType<PickerController['render']>>>;
3481
3497
 
3498
+ /**
3499
+ * pickerTray — the renderable pieces of the selection tray: the ticket-card
3500
+ * identity grid, the card's icon rail, the best-available card, the tray's
3501
+ * opening line, and the hold countdown copy.
3502
+ *
3503
+ * The mobile peek bar used to live here too — a one-liner that restated the
3504
+ * count, the total and the way forward for a collapsed bottom sheet. The
3505
+ * collapsed sheet now shows the SAME footer block the desktop panel has (owner
3506
+ * call 2026-09-05), so there is one cart summary in the widget instead of two
3507
+ * that had to be kept saying the same thing.
3508
+ *
3509
+ * These are pure: they take values and return strings. Bodies are verbatim from
3510
+ * SeatPicker.ts; the only edits are that each value the closure used to read
3511
+ * off `this` (or look up mid-body) is now a parameter, and `this.tf` is the
3512
+ * `tfStatic` it always delegated to.
3513
+ *
3514
+ * NOT moved, deliberately: `syncTray` itself. It is ~350 lines of
3515
+ * orchestration that touches about fifty-five SeatPicker members and WRITES a
3516
+ * dozen of them (`baQty`, `baCat`, `baZone`, `baPremium`,
3517
+ * `bestAvailableConfirm`, `gaQty`, `lastTrayKeys`, `lastTrayCount`,
3518
+ * `lastTrayTotal`, `sideCollapsed`), wires fifteen event
3519
+ * handlers that call back into the widget, and re-enters itself from nine of
3520
+ * them. A host interface wide enough to carry that is the class with a layer of
3521
+ * indirection bolted on — strictly worse than leaving the orchestration on the
3522
+ * object it orchestrates. So the STRINGS moved and the wiring stayed.
3523
+ */
3524
+
3525
+ /** What every closed-sales surface says for one state: the pill, the button and the toast. */
3526
+ interface SalesClosedWords {
3527
+ pill: string;
3528
+ cta: string;
3529
+ toast: string;
3530
+ }
3531
+
3482
3532
  /**
3483
3533
  * Hosted checkout — the payment step, as a module nobody downloads until a
3484
3534
  * buyer actually asks to pay.
@@ -4176,6 +4226,8 @@ declare class SeatPicker implements GaPromptPicker {
4176
4226
  */
4177
4227
  /** @internal The host's GA prompt takeover, if it supplied one. */
4178
4228
  get onGAPromptHook(): SeatPickerOptions['onGAPrompt'];
4229
+ /** @internal The closed-sales words for this event's own sales state. */
4230
+ closedWords(): SalesClosedWords;
4179
4231
  /** @internal */ tf(key: string, fallback: string): string;
4180
4232
  /** Sold-out overlay — an informational state with no unavailable action. */
4181
4233
  private buildSoldoutOverlay;
@@ -5511,8 +5563,6 @@ interface SeasonCheckoutSession {
5511
5563
  expiresAt: number;
5512
5564
  /** Hosted gateway page — navigate to it. */
5513
5565
  redirectUrl?: string;
5514
- /** In-page modal gateway — open it without leaving the page. */
5515
- clientPayload?: Record<string, unknown>;
5516
5566
  }
5517
5567
  interface SeasonCheckoutRequest {
5518
5568
  operationId: string;
package/dist/index.d.ts CHANGED
@@ -502,6 +502,13 @@ declare function createControllerSink(controller: PickerControllerLike, options?
502
502
  * follows the card's rule: NO RUNTIME IMPORTS. Everything it needs — the ticket
503
503
  * keys, the translator, the buyer's own details — arrives as arguments.
504
504
  *
505
+ * Nothing is asked twice (docs/design/checkout-ux-2026-09-22 in the app repo):
506
+ * ticket 1 copies the buyer's own name and email and is shown as one line,
507
+ * "You · Asha", with a way to change it; a one-ticket order has no holder
508
+ * block at all; holder details that are all optional wait behind one line.
509
+ * What is SENT is unchanged — ticket 1's attendee still carries the buyer's
510
+ * name and email.
511
+ *
505
512
  * The server is the authority on every rule below (`booking_form_incomplete`).
506
513
  * These checks only exist so a buyer hears about a missing name next to the
507
514
  * field, before a round trip, in the same words the refusal would map to.
@@ -684,8 +691,8 @@ interface BestAvailableResult {
684
691
  /** See {@link HoldResult.ticketKeyDetails}. */
685
692
  ticketKeyDetails?: TicketKeyDetail[];
686
693
  }
687
- /** A gateway the organizer can be connected to. */
688
- type PaymentProviderName = 'stripe' | 'razorpay';
694
+ /** A gateway the organizer can be connected to. Provider ids are server-owned. */
695
+ type PaymentProviderName = string;
689
696
  /**
690
697
  * Why `payment-options` came back with an empty list.
691
698
  *
@@ -718,7 +725,7 @@ interface PaymentOptionsResult {
718
725
  /** What hosted checkout must ask: attendee details and active questions. */
719
726
  bookingForm?: BookingForm | null;
720
727
  }
721
- /** A started payment. Exactly one of the two handoffs comes back. */
728
+ /** A started payment. Paid checkouts continue through one provider-neutral redirect. */
722
729
  interface CheckoutSessionResult {
723
730
  orderId: string;
724
731
  totalMinor: number;
@@ -726,8 +733,6 @@ interface CheckoutSessionResult {
726
733
  expiresAt: number;
727
734
  /** Hosted gateway page — navigate to it. */
728
735
  redirectUrl?: string;
729
- /** In-page modal gateway — open it without leaving the page. */
730
- clientPayload?: Record<string, unknown>;
731
736
  /**
732
737
  * `'confirmed'` when the booking needed no payment (a free event, or a hold
733
738
  * that sums to zero): the seats are already booked and the tickets issued,
@@ -836,6 +841,10 @@ interface GaPromptPicker {
836
841
  gaQty: GaQtyMap;
837
842
  maxTickets: number;
838
843
  salesClosed: boolean;
844
+ /** The closed-sales words for this event's state; absent on older hosts. */
845
+ closedWords?(): {
846
+ toast: string;
847
+ };
839
848
  gaPromptEl: HTMLDivElement | null;
840
849
  gaPromptReturnFocus: HTMLElement | null;
841
850
  gaAreasExpanded: boolean;
@@ -1013,6 +1022,13 @@ interface CheckoutLineItem {
1013
1022
  sectionLabel?: string;
1014
1023
  rowLabel?: string;
1015
1024
  seatNumber?: string;
1025
+ /**
1026
+ * Buyer-facing category name ("Standard") and ticket type ("Adult") for
1027
+ * `categoryKey` / `tierId`, so an order summary need not look them up.
1028
+ * Absent when the chart names neither (or on an older SDK).
1029
+ */
1030
+ categoryLabel?: string;
1031
+ tierLabel?: string;
1016
1032
  }
1017
1033
  interface CheckoutHandoff {
1018
1034
  /** Server hold id — pass this to YOUR book call. */
@@ -3479,6 +3495,40 @@ interface WebMcpRegistration {
3479
3495
  /** What `PickerController.render()` reports back about the loaded event. */
3480
3496
  type PickerRenderInfo = NonNullable<Awaited<ReturnType<PickerController['render']>>>;
3481
3497
 
3498
+ /**
3499
+ * pickerTray — the renderable pieces of the selection tray: the ticket-card
3500
+ * identity grid, the card's icon rail, the best-available card, the tray's
3501
+ * opening line, and the hold countdown copy.
3502
+ *
3503
+ * The mobile peek bar used to live here too — a one-liner that restated the
3504
+ * count, the total and the way forward for a collapsed bottom sheet. The
3505
+ * collapsed sheet now shows the SAME footer block the desktop panel has (owner
3506
+ * call 2026-09-05), so there is one cart summary in the widget instead of two
3507
+ * that had to be kept saying the same thing.
3508
+ *
3509
+ * These are pure: they take values and return strings. Bodies are verbatim from
3510
+ * SeatPicker.ts; the only edits are that each value the closure used to read
3511
+ * off `this` (or look up mid-body) is now a parameter, and `this.tf` is the
3512
+ * `tfStatic` it always delegated to.
3513
+ *
3514
+ * NOT moved, deliberately: `syncTray` itself. It is ~350 lines of
3515
+ * orchestration that touches about fifty-five SeatPicker members and WRITES a
3516
+ * dozen of them (`baQty`, `baCat`, `baZone`, `baPremium`,
3517
+ * `bestAvailableConfirm`, `gaQty`, `lastTrayKeys`, `lastTrayCount`,
3518
+ * `lastTrayTotal`, `sideCollapsed`), wires fifteen event
3519
+ * handlers that call back into the widget, and re-enters itself from nine of
3520
+ * them. A host interface wide enough to carry that is the class with a layer of
3521
+ * indirection bolted on — strictly worse than leaving the orchestration on the
3522
+ * object it orchestrates. So the STRINGS moved and the wiring stayed.
3523
+ */
3524
+
3525
+ /** What every closed-sales surface says for one state: the pill, the button and the toast. */
3526
+ interface SalesClosedWords {
3527
+ pill: string;
3528
+ cta: string;
3529
+ toast: string;
3530
+ }
3531
+
3482
3532
  /**
3483
3533
  * Hosted checkout — the payment step, as a module nobody downloads until a
3484
3534
  * buyer actually asks to pay.
@@ -4176,6 +4226,8 @@ declare class SeatPicker implements GaPromptPicker {
4176
4226
  */
4177
4227
  /** @internal The host's GA prompt takeover, if it supplied one. */
4178
4228
  get onGAPromptHook(): SeatPickerOptions['onGAPrompt'];
4229
+ /** @internal The closed-sales words for this event's own sales state. */
4230
+ closedWords(): SalesClosedWords;
4179
4231
  /** @internal */ tf(key: string, fallback: string): string;
4180
4232
  /** Sold-out overlay — an informational state with no unavailable action. */
4181
4233
  private buildSoldoutOverlay;
@@ -5511,8 +5563,6 @@ interface SeasonCheckoutSession {
5511
5563
  expiresAt: number;
5512
5564
  /** Hosted gateway page — navigate to it. */
5513
5565
  redirectUrl?: string;
5514
- /** In-page modal gateway — open it without leaving the page. */
5515
- clientPayload?: Record<string, unknown>;
5516
5566
  }
5517
5567
  interface SeasonCheckoutRequest {
5518
5568
  operationId: string;