@mj-biz-apps/orders-ng 5.36.1 → 5.37.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.
@@ -1,4 +1,4 @@
1
- import type { CheckoutSubmissionEvent } from './checkout-widget.component.js';
1
+ import type { CheckoutAppliedPromotion, CheckoutSubmissionEvent } from './checkout-widget.component.js';
2
2
  /**
3
3
  * Maps a widget submission onto the anonymous draft line.
4
4
  * Extension payloads are the introspected field maps from ProductType.OrderLineExtensionEntity
@@ -46,4 +46,10 @@ export declare function alreadySubscribedDetail(response: Record<string, unknown
46
46
  * A buyer with no token, or whose discount applied, never stops here.
47
47
  */
48
48
  export declare function memberDiscountNotice(draft: Record<string, unknown> | null | undefined, alreadyShown: boolean): string | null;
49
+ /**
50
+ * The member discount a draft was priced with (#919), for the widget's discount line and total, or
51
+ * null when the draft failed or the token earned nothing. The code is the one the server applied
52
+ * (empty when it named none); the discount and total are in major units, at the quantity priced.
53
+ */
54
+ export declare function memberDiscountFromDraft(draft: Record<string, unknown> | null | undefined, quantity: number): CheckoutAppliedPromotion | null;
49
55
  //# sourceMappingURL=checkout-draft-line.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkout-draft-line.d.ts","sourceRoot":"","sources":["../../../src/lib/checkout-widget/checkout-draft-line.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAE3E;;;;GAIG;AACH,wBAAgB,sBAAsB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,uBAAuB,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAG/D;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAO3I;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAExF;AAED;;;;GAIG;AACH,MAAM,WAAW,+BAA+B;IAC5C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,+BAA+B,GAAG,IAAI,CAapI;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ5H"}
1
+ {"version":3,"file":"checkout-draft-line.d.ts","sourceRoot":"","sources":["../../../src/lib/checkout-widget/checkout-draft-line.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAErG;;;;GAIG;AACH,wBAAgB,sBAAsB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,uBAAuB,GAC/B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAezB;AAED,sFAAsF;AACtF,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAG/D;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAO3I;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAExF;AAED;;;;GAIG;AACH,MAAM,WAAW,+BAA+B;IAC5C,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,MAAM,EAAE,UAAU,GAAG,MAAM,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GAAG,+BAA+B,GAAG,IAAI,CAapI;AAED;;;;;GAKG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EAAE,YAAY,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAQ5H;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACnC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,EACjD,QAAQ,EAAE,MAAM,GACjB,wBAAwB,GAAG,IAAI,CAYjC"}
@@ -78,4 +78,22 @@ export function memberDiscountNotice(draft, alreadyShown) {
78
78
  const typedCodePriced = Array.isArray(applied) && applied.length > 0;
79
79
  return typedCodePriced ? `${message} Submit again to continue.` : `${message} Submit again to continue at the standard rate.`;
80
80
  }
81
+ /**
82
+ * The member discount a draft was priced with (#919), for the widget's discount line and total, or
83
+ * null when the draft failed or the token earned nothing. The code is the one the server applied
84
+ * (empty when it named none); the discount and total are in major units, at the quantity priced.
85
+ */
86
+ export function memberDiscountFromDraft(draft, quantity) {
87
+ if (!draft?.['Success'] || draft['MemberDiscountApplied'] !== true) {
88
+ return null;
89
+ }
90
+ const applied = draft['AppliedPromotionCodes'];
91
+ const code = Array.isArray(applied) && typeof applied[0] === 'string' ? applied[0] : '';
92
+ return {
93
+ code,
94
+ discount: Number(draft['Discount'] ?? 0),
95
+ total: Number(draft['TotalGross'] ?? 0),
96
+ quantity,
97
+ };
98
+ }
81
99
  //# sourceMappingURL=checkout-draft-line.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checkout-draft-line.js","sourceRoot":"","sources":["../../../src/lib/checkout-widget/checkout-draft-line.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkout-draft-line.js","sourceRoot":"","sources":["../../../src/lib/checkout-widget/checkout-draft-line.ts"],"names":[],"mappings":"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"}
@@ -92,6 +92,24 @@ export declare class CheckoutPublicHostComponent implements OnInit, AfterViewChe
92
92
  /** The server's total and tax for the details last drafted — shown before the buyer is charged. */
93
93
  quotedTotal: number | null;
94
94
  quotedTax: number | null;
95
+ /** The verified member's discount the server last priced, shown before Pay (#919). */
96
+ memberDiscount: CheckoutAppliedPromotion | null;
97
+ /** How long the form must be still before a member's price is asked for. A field so a test can shorten it. */
98
+ quoteDebounceMs: number;
99
+ private quoteTimer;
100
+ /** Bumped by every price change; a background answer for an older generation is dropped. */
101
+ private quoteGeneration;
102
+ /**
103
+ * Every background draft still in flight. Pay and Apply wait for all of them, not only the latest: an older
104
+ * one that lands after Pay's own draft would replace it on the session, and `/payment-intent` charges the
105
+ * total the session's last draft saved.
106
+ */
107
+ private readonly backgroundQuotes;
108
+ /**
109
+ * The e-mail is locked while a member token is attached and the host supplied the address (#919):
110
+ * the discount is bound to it. Without a prefilled address the buyer must still be able to type one.
111
+ */
112
+ get emailLocked(): boolean;
95
113
  /** The post-payment account step, when the host registered one (#292). */
96
114
  account: CheckoutAccountView | null;
97
115
  password: string;
@@ -176,6 +194,29 @@ export declare class CheckoutPublicHostComponent implements OnInit, AfterViewChe
176
194
  private resetForm;
177
195
  /** A price input changed: every total the server priced for the old inputs is stale, tax included. */
178
196
  onQuoteInvalidated(): void;
197
+ /**
198
+ * The widget's e-mail and billing location are complete and a price input changed (#919). With a
199
+ * member token, the form is drafted in the background once it has been still for
200
+ * `quoteDebounceMs`, so a verified member sees the discount, the total and the Pay button at the
201
+ * member price before pressing Pay, and one press pays. Without a token nothing is sent.
202
+ */
203
+ onQuoteRequested(event: CheckoutSubmissionEvent): void;
204
+ /**
205
+ * Drafts the form with the member token and no typed code. Never blocks the form and never
206
+ * reports an error: on any failure the price stays as it is, and Pay drafts it again. An answer
207
+ * for an older generation, or one that arrives while Pay is being processed, is dropped. A token
208
+ * that earned nothing changes nothing here; Pay shows its notice as before.
209
+ */
210
+ private priceInBackground;
211
+ /** Drops a pending background draft and makes any answer already on its way stale. */
212
+ private cancelBackgroundQuote;
213
+ /**
214
+ * Before Pay or Apply drafts: no background draft may start after it, and every one already sent is
215
+ * waited for, so the server's session holds the buyer's draft rather than a background one.
216
+ */
217
+ private settleBackgroundQuote;
218
+ /** The `/draft` body for a widget submission, priced with the given typed codes. */
219
+ private draftBody;
179
220
  onSubmitted(event: CheckoutSubmissionEvent): Promise<void>;
180
221
  /**
181
222
  * Pay the open renewal order (#289): an intent for its balance, confirmed with the card entered
@@ -1 +1 @@
1
- {"version":3,"file":"checkout-public-host.component.d.ts","sourceRoot":"","sources":["../../../src/lib/checkout-widget/checkout-public-host.component.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"checkout-public-host.component.d.ts","sourceRoot":"","sources":["../../../src/lib/checkout-widget/checkout-public-host.component.ts"],"names":[],"mappings":"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"}
@@ -13,7 +13,7 @@ import { ACCOUNT_STEP_FAILED, AccountMessage, CheckPasswordEntry, IsAccountSettl
13
13
  import { BuildCheckoutCompleteDetail, CHECKOUT_CANCEL_EVENT, CHECKOUT_CLOSE_EVENT, CHECKOUT_RESET_REFUSED_EVENT, CHECKOUT_RESET_REQUEST_EVENT, CHECKOUT_COMPLETE_EVENT, CHECKOUT_ERROR_EVENT, CHECKOUT_STATE_CHANGE_EVENT, CheckoutElementEvent, } from './checkout-events.js';
14
14
  import { ACCESS_POLL_INTERVAL_MS, ACCESS_POLL_TIMEOUT_MS, AccessMessage, CHECKOUT_ACCESS_STATE_EVENT, IsFinalAccessState, ReadAccessState, } from './checkout-access.js';
15
15
  import { MJCheckoutWidgetComponent, } from './checkout-widget.component.js';
16
- import { alreadySubscribedDetail, buildCheckoutDraftLine, formatStripeError, intentAlreadyCollected, memberDiscountNotice, stripeConfirmAlreadyCollected, } from './checkout-draft-line.js';
16
+ import { alreadySubscribedDetail, buildCheckoutDraftLine, formatStripeError, intentAlreadyCollected, memberDiscountFromDraft, memberDiscountNotice, stripeConfirmAlreadyCollected, } from './checkout-draft-line.js';
17
17
  import { PostWithTurnstile, TurnstileError, TurnstileWidget } from './checkout-turnstile.js';
18
18
  import { CheckoutTransportError, COMPLETE_DELAYED_MESSAGE, COMPLETE_FINISHING_MESSAGE, COMPLETE_RETRY_INTERVAL_MS, COMPLETE_RETRY_TIMEOUT_MS, CompleteWithRetry, ReadCheckoutReply, } from './checkout-complete.js';
19
19
  import { FormatRenewalAmount, ReadRenewalPayment, RenewalPaidMessage } from './checkout-renewal.js';
@@ -295,14 +295,14 @@ function CheckoutPublicHostComponent_Conditional_5_Template(rf, ctx) { if (rf &
295
295
  function CheckoutPublicHostComponent_Conditional_6_For_1_Template(rf, ctx) { if (rf & 1) {
296
296
  const _r6 = i0.ɵɵgetCurrentView();
297
297
  i0.ɵɵelementStart(0, "mj-checkout-widget", 40);
298
- i0.ɵɵlistener("promotionCodeApplied", function CheckoutPublicHostComponent_Conditional_6_For_1_Template_mj_checkout_widget_promotionCodeApplied_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onPromotionCodeApplied($event)); })("submitted", function CheckoutPublicHostComponent_Conditional_6_For_1_Template_mj_checkout_widget_submitted_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSubmitted($event)); })("cancelled", function CheckoutPublicHostComponent_Conditional_6_For_1_Template_mj_checkout_widget_cancelled_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onCancelled()); })("quoteInvalidated", function CheckoutPublicHostComponent_Conditional_6_For_1_Template_mj_checkout_widget_quoteInvalidated_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onQuoteInvalidated()); });
298
+ i0.ɵɵlistener("promotionCodeApplied", function CheckoutPublicHostComponent_Conditional_6_For_1_Template_mj_checkout_widget_promotionCodeApplied_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onPromotionCodeApplied($event)); })("submitted", function CheckoutPublicHostComponent_Conditional_6_For_1_Template_mj_checkout_widget_submitted_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onSubmitted($event)); })("cancelled", function CheckoutPublicHostComponent_Conditional_6_For_1_Template_mj_checkout_widget_cancelled_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onCancelled()); })("quoteInvalidated", function CheckoutPublicHostComponent_Conditional_6_For_1_Template_mj_checkout_widget_quoteInvalidated_0_listener() { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onQuoteInvalidated()); })("quoteRequested", function CheckoutPublicHostComponent_Conditional_6_For_1_Template_mj_checkout_widget_quoteRequested_0_listener($event) { i0.ɵɵrestoreView(_r6); const ctx_r0 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r0.onQuoteRequested($event)); });
299
299
  i0.ɵɵelementEnd();
300
300
  } if (rf & 2) {
301
301
  const ctx_r0 = i0.ɵɵnextContext(2);
302
- i0.ɵɵproperty("config", ctx_r0.config)("distributionSlug", ctx_r0.slug)("sessionKey", ctx_r0.sessionKey)("isProcessing", ctx_r0.processing)("isPaymentReady", ctx_r0.isPaymentReady)("stripePaymentMethodId", ctx_r0.stripePaymentMethodId)("prefillEmail", ctx_r0.prefillEmail)("errorMessage", ctx_r0.errorMessage)("appliedPromotion", ctx_r0.appliedPromotion)("serverPricedTotal", ctx_r0.serverPricedTotal)("promotionError", ctx_r0.promotionError)("quotedTotal", ctx_r0.quotedTotal)("quotedTax", ctx_r0.quotedTax);
302
+ i0.ɵɵproperty("config", ctx_r0.config)("distributionSlug", ctx_r0.slug)("sessionKey", ctx_r0.sessionKey)("isProcessing", ctx_r0.processing)("isPaymentReady", ctx_r0.isPaymentReady)("stripePaymentMethodId", ctx_r0.stripePaymentMethodId)("prefillEmail", ctx_r0.prefillEmail)("errorMessage", ctx_r0.errorMessage)("appliedPromotion", ctx_r0.appliedPromotion)("serverPricedTotal", ctx_r0.serverPricedTotal)("memberDiscount", ctx_r0.memberDiscount)("lockEmail", ctx_r0.emailLocked)("promotionError", ctx_r0.promotionError)("quotedTotal", ctx_r0.quotedTotal)("quotedTax", ctx_r0.quotedTax);
303
303
  } }
304
304
  function CheckoutPublicHostComponent_Conditional_6_Template(rf, ctx) { if (rf & 1) {
305
- i0.ɵɵrepeaterCreate(0, CheckoutPublicHostComponent_Conditional_6_For_1_Template, 1, 13, "mj-checkout-widget", 39, i0.ɵɵrepeaterTrackByIdentity);
305
+ i0.ɵɵrepeaterCreate(0, CheckoutPublicHostComponent_Conditional_6_For_1_Template, 1, 15, "mj-checkout-widget", 39, i0.ɵɵrepeaterTrackByIdentity);
306
306
  } if (rf & 2) {
307
307
  const ctx_r0 = i0.ɵɵnextContext();
308
308
  i0.ɵɵrepeater(i0.ɵɵpureFunction1(0, _c0, ctx_r0.formGeneration));
@@ -350,6 +350,26 @@ export class CheckoutPublicHostComponent {
350
350
  /** The server's total and tax for the details last drafted — shown before the buyer is charged. */
351
351
  quotedTotal = null;
352
352
  quotedTax = null;
353
+ /** The verified member's discount the server last priced, shown before Pay (#919). */
354
+ memberDiscount = null;
355
+ /** How long the form must be still before a member's price is asked for. A field so a test can shorten it. */
356
+ quoteDebounceMs = 400;
357
+ quoteTimer = null;
358
+ /** Bumped by every price change; a background answer for an older generation is dropped. */
359
+ quoteGeneration = 0;
360
+ /**
361
+ * Every background draft still in flight. Pay and Apply wait for all of them, not only the latest: an older
362
+ * one that lands after Pay's own draft would replace it on the session, and `/payment-intent` charges the
363
+ * total the session's last draft saved.
364
+ */
365
+ backgroundQuotes = new Set();
366
+ /**
367
+ * The e-mail is locked while a member token is attached and the host supplied the address (#919):
368
+ * the discount is bound to it. Without a prefilled address the buyer must still be able to type one.
369
+ */
370
+ get emailLocked() {
371
+ return !!this.memberToken && !!this.prefillEmail?.trim();
372
+ }
353
373
  /** The post-payment account step, when the host registered one (#292). */
354
374
  account = null;
355
375
  password = '';
@@ -477,6 +497,7 @@ export class CheckoutPublicHostComponent {
477
497
  }
478
498
  ngOnDestroy() {
479
499
  this.destroyed = true;
500
+ this.cancelBackgroundQuote();
480
501
  this.turnstile.Destroy();
481
502
  this.hostEl?.nativeElement?.removeEventListener?.(CHECKOUT_RESET_REQUEST_EVENT, this.onResetRequested);
482
503
  try {
@@ -494,20 +515,8 @@ export class CheckoutPublicHostComponent {
494
515
  this.processing = true;
495
516
  this.promotionError = null;
496
517
  try {
497
- const draft = await this.post('/draft', {
498
- sessionId: this.sessionId,
499
- clientSessionKey: this.sessionKey,
500
- email: event.email,
501
- lines: [buildCheckoutDraftLine(this.config.productId, event)],
502
- billingAddress: event.billingAddress,
503
- answers: event.answers,
504
- choices: event.choices,
505
- ...(this.attributionSource
506
- ? { attribution: { source: this.attributionSource, reference: this.attributionReference } }
507
- : {}),
508
- ...(this.memberToken ? { memberToken: this.memberToken } : {}),
509
- promotionCodes: [event.promotionCode],
510
- });
518
+ await this.settleBackgroundQuote();
519
+ const draft = await this.post('/draft', this.draftBody(this.config.productId, event, [event.promotionCode]));
511
520
  this.applyPromotionOutcome(draft, event);
512
521
  }
513
522
  catch {
@@ -608,6 +617,8 @@ export class CheckoutPublicHostComponent {
608
617
  this.errorMessage = null;
609
618
  this.stripePaymentMethodId = null;
610
619
  this.serverPricedTotal = null;
620
+ this.memberDiscount = null;
621
+ this.cancelBackgroundQuote();
611
622
  try {
612
623
  this.card?.destroy?.();
613
624
  }
@@ -625,6 +636,90 @@ export class CheckoutPublicHostComponent {
625
636
  this.quotedTax = null;
626
637
  this.serverPricedTotal = null;
627
638
  this.appliedPromotion = null;
639
+ this.memberDiscount = null;
640
+ this.cancelBackgroundQuote();
641
+ }
642
+ /**
643
+ * The widget's e-mail and billing location are complete and a price input changed (#919). With a
644
+ * member token, the form is drafted in the background once it has been still for
645
+ * `quoteDebounceMs`, so a verified member sees the discount, the total and the Pay button at the
646
+ * member price before pressing Pay, and one press pays. Without a token nothing is sent.
647
+ */
648
+ onQuoteRequested(event) {
649
+ if (!this.memberToken || this.renewalToken || !this.config?.productId) {
650
+ return;
651
+ }
652
+ this.cancelBackgroundQuote();
653
+ const generation = this.quoteGeneration;
654
+ this.quoteTimer = setTimeout(() => {
655
+ this.quoteTimer = null;
656
+ const run = this.priceInBackground(event, generation);
657
+ this.backgroundQuotes.add(run);
658
+ void run.finally(() => this.backgroundQuotes.delete(run));
659
+ }, this.quoteDebounceMs);
660
+ }
661
+ /**
662
+ * Drafts the form with the member token and no typed code. Never blocks the form and never
663
+ * reports an error: on any failure the price stays as it is, and Pay drafts it again. An answer
664
+ * for an older generation, or one that arrives while Pay is being processed, is dropped. A token
665
+ * that earned nothing changes nothing here; Pay shows its notice as before.
666
+ */
667
+ async priceInBackground(event, generation) {
668
+ const productId = this.config?.productId;
669
+ if (!productId || this.processing || this.destroyed) {
670
+ return;
671
+ }
672
+ let draft;
673
+ try {
674
+ draft = await this.post('/draft', this.draftBody(productId, event, []));
675
+ }
676
+ catch {
677
+ return;
678
+ }
679
+ if (generation !== this.quoteGeneration || this.processing || this.destroyed) {
680
+ return;
681
+ }
682
+ this.memberDiscount = memberDiscountFromDraft(draft, event.quantity);
683
+ if (this.memberDiscount) {
684
+ const tax = typeof draft.Tax === 'number' ? draft.Tax : 0;
685
+ this.serverPricedTotal = { total: this.memberDiscount.total, quantity: event.quantity };
686
+ this.quotedTotal = this.memberDiscount.total;
687
+ this.quotedTax = tax > 0 ? tax : null;
688
+ }
689
+ this.cdr.detectChanges();
690
+ }
691
+ /** Drops a pending background draft and makes any answer already on its way stale. */
692
+ cancelBackgroundQuote() {
693
+ if (this.quoteTimer) {
694
+ clearTimeout(this.quoteTimer);
695
+ this.quoteTimer = null;
696
+ }
697
+ this.quoteGeneration++;
698
+ }
699
+ /**
700
+ * Before Pay or Apply drafts: no background draft may start after it, and every one already sent is
701
+ * waited for, so the server's session holds the buyer's draft rather than a background one.
702
+ */
703
+ async settleBackgroundQuote() {
704
+ this.cancelBackgroundQuote();
705
+ await Promise.all([...this.backgroundQuotes]);
706
+ }
707
+ /** The `/draft` body for a widget submission, priced with the given typed codes. */
708
+ draftBody(productId, event, promotionCodes) {
709
+ return {
710
+ sessionId: this.sessionId,
711
+ clientSessionKey: this.sessionKey,
712
+ email: event.email,
713
+ lines: [buildCheckoutDraftLine(productId, event)],
714
+ billingAddress: event.billingAddress,
715
+ answers: event.answers,
716
+ ...(this.attributionSource
717
+ ? { attribution: { source: this.attributionSource, reference: this.attributionReference } }
718
+ : {}),
719
+ choices: event.choices,
720
+ ...(this.memberToken ? { memberToken: this.memberToken } : {}),
721
+ promotionCodes,
722
+ };
628
723
  }
629
724
  async onSubmitted(event) {
630
725
  if (this.processing || !this.config?.productId) {
@@ -634,21 +729,8 @@ export class CheckoutPublicHostComponent {
634
729
  this.errorMessage = null;
635
730
  this.setState('PROCESSING');
636
731
  try {
637
- const line = buildCheckoutDraftLine(this.config.productId, event);
638
- const draft = await this.post('/draft', {
639
- sessionId: this.sessionId,
640
- clientSessionKey: this.sessionKey,
641
- email: event.email,
642
- lines: [line],
643
- billingAddress: event.billingAddress,
644
- answers: event.answers,
645
- ...(this.attributionSource
646
- ? { attribution: { source: this.attributionSource, reference: this.attributionReference } }
647
- : {}),
648
- choices: event.choices,
649
- ...(this.memberToken ? { memberToken: this.memberToken } : {}),
650
- promotionCodes: event.promotionCode ? [event.promotionCode] : [],
651
- });
732
+ await this.settleBackgroundQuote();
733
+ const draft = await this.post('/draft', this.draftBody(this.config.productId, event, event.promotionCode ? [event.promotionCode] : []));
652
734
  if (!this.applyPromotionOutcome(draft, event)) {
653
735
  // The code was refused: say why and stop before any payment, so the buyer can remove
654
736
  // it or try another rather than pay a price they did not expect.
@@ -658,9 +740,13 @@ export class CheckoutPublicHostComponent {
658
740
  this.emitIfAlreadySubscribed(draft);
659
741
  throw new Error(this.str(draft?.ErrorMessage, 'Could not price this checkout.'));
660
742
  }
661
- // The widget cannot price a member discount itself, so it is told the server's total; a
662
- // second press of Pay then carries that total and passes the check below.
743
+ // The widget cannot price a member discount itself, so it is told the server's total. The
744
+ // background draft (#919) usually did this already, so the total shown is the one charged;
745
+ // otherwise a second press of Pay carries that total and passes the check below.
663
746
  this.serverPricedTotal = { total: Number(draft.TotalGross ?? 0), quantity: event.quantity };
747
+ if (this.memberToken) {
748
+ this.memberDiscount = memberDiscountFromDraft(draft, event.quantity);
749
+ }
664
750
  const notice = memberDiscountNotice(draft, this.memberNoticeShown);
665
751
  if (notice) {
666
752
  this.memberNoticeShown = true;
@@ -1258,7 +1344,7 @@ export class CheckoutPublicHostComponent {
1258
1344
  return typeof value === 'string' && value ? value : fallback;
1259
1345
  }
1260
1346
  static ɵfac = function CheckoutPublicHostComponent_Factory(__ngFactoryType__) { return new (__ngFactoryType__ || CheckoutPublicHostComponent)(); };
1261
- static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CheckoutPublicHostComponent, selectors: [["mj-orders-checkout"]], inputs: { slug: "slug", apiRoot: "apiRoot", memberToken: "memberToken", renewalToken: "renewalToken" }, outputs: { alreadySubscribed: "checkout-already-subscribed" }, decls: 8, vars: 1, consts: [[1, "mj-checkout-public"], ["role", "alert", 1, "mj-widget-error-banner"], ["role", "status", 1, "mj-checkout-success"], ["role", "status", "aria-live", "polite", 1, "mj-checkout-success"], ["role", "status", 1, "mj-checkout-public__status"], [1, "mj-checkout-renewal"], [1, "mj-checkout-public__turnstile"], ["aria-hidden", "true", 1, "mj-checkout-success__icon"], [1, "mj-checkout-success__title"], [1, "mj-checkout-success__msg"], [1, "mj-checkout-success__order"], ["role", "status", 1, "mj-checkout-success__access", 3, "is-failed"], ["role", "status", 1, "mj-checkout-account__msg"], [1, "mj-checkout-account"], ["role", "status", 1, "mj-checkout-success__access"], [1, "mj-checkout-account", 3, "submit"], [1, "mj-checkout-account__title"], [1, "mj-checkout-account__note"], ["for", "mj-checkout-password", 1, "mj-checkout-account__label"], ["id", "mj-checkout-password", "type", "password", "autocomplete", "new-password", 1, "mj-checkout-account__input", 3, "input", "value"], ["for", "mj-checkout-password-confirm", 1, "mj-checkout-account__label"], ["id", "mj-checkout-password-confirm", "type", "password", "autocomplete", "new-password", 1, "mj-checkout-account__input", 3, "input", "value"], ["role", "alert", 1, "mj-checkout-account__error"], ["type", "submit", 1, "mj-checkout-account__submit", 3, "disabled"], ["type", "button", 1, "mj-checkout-account__skip", 3, "click", "disabled"], [1, "mj-checkout-account", "mj-checkout-account--actions"], ["type", "button", 1, "mj-checkout-account__submit", 3, "click"], ["type", "button", 1, "mj-checkout-account__skip"], ["type", "button", 1, "mj-checkout-account__skip", 3, "click"], [1, "mj-checkout-renewal", 3, "submit"], [1, "mj-checkout-renewal__title"], [1, "mj-checkout-renewal__lead"], [1, "mj-checkout-renewal__summary"], [1, "mj-checkout-renewal__row"], [1, "mj-checkout-renewal__row", "mj-checkout-renewal__row--total"], [1, "mj-checkout-renewal__note"], ["type", "submit", 1, "mj-checkout-renewal__pay", 3, "disabled"], ["for", "stripe-card-element", 1, "mj-checkout-renewal__label"], ["id", "stripe-card-element", 1, "mj-checkout-renewal__card"], [3, "config", "distributionSlug", "sessionKey", "isProcessing", "isPaymentReady", "stripePaymentMethodId", "prefillEmail", "errorMessage", "appliedPromotion", "serverPricedTotal", "promotionError", "quotedTotal", "quotedTax"], [3, "promotionCodeApplied", "submitted", "cancelled", "quoteInvalidated", "config", "distributionSlug", "sessionKey", "isProcessing", "isPaymentReady", "stripePaymentMethodId", "prefillEmail", "errorMessage", "appliedPromotion", "serverPricedTotal", "promotionError", "quotedTotal", "quotedTax"]], template: function CheckoutPublicHostComponent_Template(rf, ctx) { if (rf & 1) {
1347
+ static ɵcmp = /*@__PURE__*/ i0.ɵɵdefineComponent({ type: CheckoutPublicHostComponent, selectors: [["mj-orders-checkout"]], inputs: { slug: "slug", apiRoot: "apiRoot", memberToken: "memberToken", renewalToken: "renewalToken" }, outputs: { alreadySubscribed: "checkout-already-subscribed" }, decls: 8, vars: 1, consts: [[1, "mj-checkout-public"], ["role", "alert", 1, "mj-widget-error-banner"], ["role", "status", 1, "mj-checkout-success"], ["role", "status", "aria-live", "polite", 1, "mj-checkout-success"], ["role", "status", 1, "mj-checkout-public__status"], [1, "mj-checkout-renewal"], [1, "mj-checkout-public__turnstile"], ["aria-hidden", "true", 1, "mj-checkout-success__icon"], [1, "mj-checkout-success__title"], [1, "mj-checkout-success__msg"], [1, "mj-checkout-success__order"], ["role", "status", 1, "mj-checkout-success__access", 3, "is-failed"], ["role", "status", 1, "mj-checkout-account__msg"], [1, "mj-checkout-account"], ["role", "status", 1, "mj-checkout-success__access"], [1, "mj-checkout-account", 3, "submit"], [1, "mj-checkout-account__title"], [1, "mj-checkout-account__note"], ["for", "mj-checkout-password", 1, "mj-checkout-account__label"], ["id", "mj-checkout-password", "type", "password", "autocomplete", "new-password", 1, "mj-checkout-account__input", 3, "input", "value"], ["for", "mj-checkout-password-confirm", 1, "mj-checkout-account__label"], ["id", "mj-checkout-password-confirm", "type", "password", "autocomplete", "new-password", 1, "mj-checkout-account__input", 3, "input", "value"], ["role", "alert", 1, "mj-checkout-account__error"], ["type", "submit", 1, "mj-checkout-account__submit", 3, "disabled"], ["type", "button", 1, "mj-checkout-account__skip", 3, "click", "disabled"], [1, "mj-checkout-account", "mj-checkout-account--actions"], ["type", "button", 1, "mj-checkout-account__submit", 3, "click"], ["type", "button", 1, "mj-checkout-account__skip"], ["type", "button", 1, "mj-checkout-account__skip", 3, "click"], [1, "mj-checkout-renewal", 3, "submit"], [1, "mj-checkout-renewal__title"], [1, "mj-checkout-renewal__lead"], [1, "mj-checkout-renewal__summary"], [1, "mj-checkout-renewal__row"], [1, "mj-checkout-renewal__row", "mj-checkout-renewal__row--total"], [1, "mj-checkout-renewal__note"], ["type", "submit", 1, "mj-checkout-renewal__pay", 3, "disabled"], ["for", "stripe-card-element", 1, "mj-checkout-renewal__label"], ["id", "stripe-card-element", 1, "mj-checkout-renewal__card"], [3, "config", "distributionSlug", "sessionKey", "isProcessing", "isPaymentReady", "stripePaymentMethodId", "prefillEmail", "errorMessage", "appliedPromotion", "serverPricedTotal", "memberDiscount", "lockEmail", "promotionError", "quotedTotal", "quotedTax"], [3, "promotionCodeApplied", "submitted", "cancelled", "quoteInvalidated", "quoteRequested", "config", "distributionSlug", "sessionKey", "isProcessing", "isPaymentReady", "stripePaymentMethodId", "prefillEmail", "errorMessage", "appliedPromotion", "serverPricedTotal", "memberDiscount", "lockEmail", "promotionError", "quotedTotal", "quotedTax"]], template: function CheckoutPublicHostComponent_Template(rf, ctx) { if (rf & 1) {
1262
1348
  i0.ɵɵelementStart(0, "div", 0);
1263
1349
  i0.ɵɵconditionalCreate(1, CheckoutPublicHostComponent_Conditional_1_Template, 2, 1, "div", 1)(2, CheckoutPublicHostComponent_Conditional_2_Template, 12, 4, "div", 2)(3, CheckoutPublicHostComponent_Conditional_3_Template, 3, 1, "div", 3)(4, CheckoutPublicHostComponent_Conditional_4_Template, 2, 0, "p", 4)(5, CheckoutPublicHostComponent_Conditional_5_Template, 25, 9, "form", 5)(6, CheckoutPublicHostComponent_Conditional_6_Template, 2, 2);
1264
1350
  i0.ɵɵelement(7, "div", 6);
@@ -1270,7 +1356,7 @@ export class CheckoutPublicHostComponent {
1270
1356
  }
1271
1357
  (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(CheckoutPublicHostComponent, [{
1272
1358
  type: Component,
1273
- args: [{ selector: 'mj-orders-checkout', standalone: true, imports: [CommonModule, MJCheckoutWidgetComponent], template: "<div class=\"mj-checkout-public\">\n @if (loadError) {\n <div class=\"mj-widget-error-banner\" role=\"alert\">{{ loadError }}</div>\n } @else if (successMessage) {\n <div class=\"mj-checkout-success\" role=\"status\">\n <div class=\"mj-checkout-success__icon\" aria-hidden=\"true\">\u2713</div>\n <h1 class=\"mj-checkout-success__title\">You're all set</h1>\n <p class=\"mj-checkout-success__msg\">{{ successMessage }}</p>\n @if (orderNumber) {\n <p class=\"mj-checkout-success__order\">Order {{ orderNumber }}</p>\n }\n @if (accessMessage) {\n <p class=\"mj-checkout-success__access\" [class.is-failed]=\"accessState === 'Failed'\" role=\"status\">{{ accessMessage }}</p>\n }\n @if (accountLoading) {\n <p class=\"mj-checkout-account__msg\" role=\"status\">Setting up your account\u2026</p>\n } @else if (account?.CanSetPassword) {\n <form class=\"mj-checkout-account\" (submit)=\"$event.preventDefault(); submitPassword()\">\n <h2 class=\"mj-checkout-account__title\">Set a password for your account</h2>\n @if (verificationNote) {\n <p class=\"mj-checkout-account__note\">{{ verificationNote }}</p>\n }\n <label class=\"mj-checkout-account__label\" for=\"mj-checkout-password\">Password</label>\n <input\n id=\"mj-checkout-password\"\n class=\"mj-checkout-account__input\"\n type=\"password\"\n autocomplete=\"new-password\"\n [value]=\"password\"\n (input)=\"password = $any($event.target).value\" />\n <label class=\"mj-checkout-account__label\" for=\"mj-checkout-password-confirm\">Confirm password</label>\n <input\n id=\"mj-checkout-password-confirm\"\n class=\"mj-checkout-account__input\"\n type=\"password\"\n autocomplete=\"new-password\"\n [value]=\"passwordConfirmation\"\n (input)=\"passwordConfirmation = $any($event.target).value\" />\n @if (passwordError) {\n <p class=\"mj-checkout-account__error\" role=\"alert\">{{ passwordError }}</p>\n }\n <button class=\"mj-checkout-account__submit\" type=\"submit\" [disabled]=\"passwordBusy\">\n {{ passwordBusy ? 'Saving\u2026' : 'Set password' }}\n </button>\n <button class=\"mj-checkout-account__skip\" type=\"button\" (click)=\"skipPassword()\" [disabled]=\"passwordBusy\">\n Not now\n </button>\n </form>\n } @else if (accountMessage) {\n <p class=\"mj-checkout-account__msg\" role=\"status\">{{ accountMessage }}</p>\n @if (account?.Outcome === 'Failed') {\n <div class=\"mj-checkout-account mj-checkout-account--actions\">\n <button class=\"mj-checkout-account__submit\" type=\"button\" (click)=\"retryAccount()\">Try again</button>\n @if (config?.redirectUrl) {\n <button class=\"mj-checkout-account__skip\" type=\"button\" (click)=\"dismissAccount()\">Not now</button>\n }\n </div>\n }\n }\n </div>\n } @else if (finishingMessage) {\n <div class=\"mj-checkout-success\" role=\"status\" aria-live=\"polite\">\n <p class=\"mj-checkout-success__msg\">{{ finishingMessage }}</p>\n </div>\n } @else if (!config) {\n <p class=\"mj-checkout-public__status\" role=\"status\">Loading checkout\u2026</p>\n } @else if (renewal) {\n <form class=\"mj-checkout-renewal\" (submit)=\"$event.preventDefault(); payRenewal()\">\n <h1 class=\"mj-checkout-renewal__title\">Renew your subscription</h1>\n <p class=\"mj-checkout-renewal__lead\">Your saved card could not be charged. Pay with a new card to keep your subscription active.</p>\n <dl class=\"mj-checkout-renewal__summary\">\n @if (renewal.Description) {\n <div class=\"mj-checkout-renewal__row\">\n <dt>Renewal of</dt>\n <dd>{{ renewal.Description }}</dd>\n </div>\n }\n @if (renewal.SubscriptionNumber) {\n <div class=\"mj-checkout-renewal__row\">\n <dt>Subscription</dt>\n <dd>{{ renewal.SubscriptionNumber }}</dd>\n </div>\n }\n <div class=\"mj-checkout-renewal__row\">\n <dt>Renewal order</dt>\n <dd>{{ renewal.OrderNumber }}</dd>\n </div>\n @if (renewal.DueDate) {\n <div class=\"mj-checkout-renewal__row\">\n <dt>Due</dt>\n <dd>{{ renewal.DueDate }}</dd>\n </div>\n }\n <div class=\"mj-checkout-renewal__row mj-checkout-renewal__row--total\">\n <dt>Amount due</dt>\n <dd>{{ renewalAmount }}</dd>\n </div>\n </dl>\n @if (config.stripePublishableKey) {\n <label class=\"mj-checkout-renewal__label\" for=\"stripe-card-element\">Card</label>\n <div id=\"stripe-card-element\" class=\"mj-checkout-renewal__card\"></div>\n }\n <p class=\"mj-checkout-renewal__note\">The card you pay with will be charged for future renewals.</p>\n @if (errorMessage) {\n <div class=\"mj-widget-error-banner\" role=\"alert\">{{ errorMessage }}</div>\n }\n <button class=\"mj-checkout-renewal__pay\" type=\"submit\" [disabled]=\"processing || !isPaymentReady\">\n {{ processing ? 'Processing\u2026' : 'Pay ' + renewalAmount }}\n </button>\n </form>\n } @else {\n @for (generation of [formGeneration]; track generation) {\n <mj-checkout-widget\n [config]=\"config\"\n [distributionSlug]=\"slug\"\n [sessionKey]=\"sessionKey\"\n [isProcessing]=\"processing\"\n [isPaymentReady]=\"isPaymentReady\"\n [stripePaymentMethodId]=\"stripePaymentMethodId\"\n [prefillEmail]=\"prefillEmail\"\n [errorMessage]=\"errorMessage\"\n [appliedPromotion]=\"appliedPromotion\"\n [serverPricedTotal]=\"serverPricedTotal\"\n [promotionError]=\"promotionError\"\n (promotionCodeApplied)=\"onPromotionCodeApplied($event)\"\n [quotedTotal]=\"quotedTotal\"\n [quotedTax]=\"quotedTax\"\n (submitted)=\"onSubmitted($event)\"\n (cancelled)=\"onCancelled()\"\n (quoteInvalidated)=\"onQuoteInvalidated()\">\n </mj-checkout-widget>\n }\n }\n <div class=\"mj-checkout-public__turnstile\"></div>\n</div>\n", styles: [":host {\n display: block;\n}\n\n.mj-checkout-public {\n max-width: 580px;\n margin: 0 auto;\n}\n\n.mj-checkout-public__status {\n text-align: center;\n color: #64748b;\n font-size: 0.95rem;\n padding: 2rem 0;\n}\n\n.mj-widget-error-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #fef2f2;\n border: 1px solid #f87171;\n color: #991b1b;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 0.875rem;\n}\n\n.mj-checkout-success {\n text-align: center;\n background: #ffffff;\n border: 1px solid #e2e8f0;\n border-radius: 10px;\n padding: 2rem 1.5rem;\n box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);\n}\n\n.mj-checkout-success__icon {\n width: 3rem;\n height: 3rem;\n margin: 0 auto 1rem;\n border-radius: 50%;\n background: #dcfce7;\n color: #16a34a;\n font-size: 1.5rem;\n font-weight: 700;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.mj-checkout-success__title {\n margin: 0 0 0.5rem;\n font-size: 1.5rem;\n font-weight: 800;\n color: #0f172a;\n}\n\n.mj-checkout-success__msg,\n.mj-checkout-success__order {\n margin: 0;\n color: #64748b;\n font-size: 0.95rem;\n line-height: 1.5;\n}\n\n.mj-checkout-success__order {\n margin-top: 0.75rem;\n font-weight: 600;\n color: #334155;\n}\n\n/* Whether the buyer's access is ready yet (#325). */\n.mj-checkout-success__access {\n margin: 0.75rem 0 0;\n color: #334155;\n font-size: 0.95rem;\n}\n\n.mj-checkout-success__access.is-failed {\n color: #991b1b;\n}\n\n/* Post-payment account step: set a password for the account the host created (#292). */\n.mj-checkout-account {\n margin: 1.5rem auto 0;\n max-width: 320px;\n text-align: left;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.mj-checkout-account__title {\n margin: 0 0 0.5rem;\n font-size: 1.05rem;\n font-weight: 700;\n color: #0f172a;\n text-align: center;\n}\n\n.mj-checkout-account__label {\n font-size: 0.85rem;\n font-weight: 600;\n color: #334155;\n}\n\n.mj-checkout-account__input {\n padding: 8px 10px;\n border: 1px solid #cbd5e1;\n border-radius: 6px;\n font-size: 0.95rem;\n font-family: inherit;\n}\n\n.mj-checkout-account__input:focus {\n outline: none;\n border-color: var(--mj-primary-color, #2563eb);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.15);\n}\n\n.mj-checkout-account__error {\n margin: 4px 0 0;\n color: #991b1b;\n font-size: 0.85rem;\n}\n\n.mj-checkout-account__submit {\n margin-top: 10px;\n padding: 10px;\n border: 0;\n border-radius: 6px;\n background: var(--mj-primary-color, #2563eb);\n color: #ffffff;\n font-weight: 600;\n cursor: pointer;\n}\n\n.mj-checkout-account__skip {\n padding: 6px;\n border: 0;\n background: none;\n color: #64748b;\n font-size: 0.85rem;\n cursor: pointer;\n}\n\n.mj-checkout-account__submit:disabled,\n.mj-checkout-account__skip:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.mj-checkout-account__msg {\n margin: 1rem 0 0;\n color: #334155;\n font-size: 0.95rem;\n line-height: 1.5;\n}\n\n.mj-checkout-account__note {\n margin: 0 0 0.5rem;\n color: #475569;\n font-size: 0.85rem;\n line-height: 1.45;\n text-align: center;\n}\n\n.mj-checkout-account--actions {\n margin-top: 0.75rem;\n}\n\n/* Cloudflare Turnstile renders here only when it needs the buyer to interact (#592). */\n.mj-checkout-public__turnstile {\n display: flex;\n justify-content: center;\n margin-top: 0.75rem;\n}\n\n/* \u2500\u2500\u2500 Pay-renewal mode (#289) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-checkout-renewal {\n background: #ffffff;\n border: 1px solid #e2e8f0;\n border-radius: 10px;\n padding: 1.75rem 1.5rem;\n box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);\n display: flex;\n flex-direction: column;\n gap: 0.85rem;\n}\n\n.mj-checkout-renewal__title {\n margin: 0;\n font-size: 1.4rem;\n font-weight: 800;\n color: #0f172a;\n}\n\n.mj-checkout-renewal__lead,\n.mj-checkout-renewal__note {\n margin: 0;\n color: #475569;\n font-size: 0.95rem;\n line-height: 1.5;\n}\n\n.mj-checkout-renewal__note {\n font-size: 0.85rem;\n}\n\n.mj-checkout-renewal__summary {\n margin: 0.25rem 0;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n padding: 0.25rem 0.9rem;\n}\n\n.mj-checkout-renewal__row {\n display: flex;\n justify-content: space-between;\n gap: 1rem;\n padding: 0.55rem 0;\n border-bottom: 1px solid #f1f5f9;\n font-size: 0.92rem;\n}\n\n.mj-checkout-renewal__row:last-child {\n border-bottom: none;\n}\n\n.mj-checkout-renewal__row dt {\n color: #64748b;\n}\n\n.mj-checkout-renewal__row dd {\n margin: 0;\n color: #0f172a;\n text-align: right;\n}\n\n.mj-checkout-renewal__row--total dt,\n.mj-checkout-renewal__row--total dd {\n font-weight: 700;\n color: #0f172a;\n}\n\n.mj-checkout-renewal__label {\n font-size: 0.85rem;\n font-weight: 600;\n color: #334155;\n}\n\n.mj-checkout-renewal__card {\n border: 1px solid #cbd5e1;\n border-radius: 6px;\n padding: 0.75rem;\n background: #ffffff;\n}\n\n.mj-checkout-renewal__pay {\n margin-top: 0.25rem;\n padding: 0.8rem 1rem;\n border: none;\n border-radius: 6px;\n background: var(--mj-checkout-primary, #2563eb);\n color: #ffffff;\n font-size: 1rem;\n font-weight: 700;\n cursor: pointer;\n}\n\n.mj-checkout-renewal__pay:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n"] }]
1359
+ args: [{ selector: 'mj-orders-checkout', standalone: true, imports: [CommonModule, MJCheckoutWidgetComponent], template: "<div class=\"mj-checkout-public\">\n @if (loadError) {\n <div class=\"mj-widget-error-banner\" role=\"alert\">{{ loadError }}</div>\n } @else if (successMessage) {\n <div class=\"mj-checkout-success\" role=\"status\">\n <div class=\"mj-checkout-success__icon\" aria-hidden=\"true\">\u2713</div>\n <h1 class=\"mj-checkout-success__title\">You're all set</h1>\n <p class=\"mj-checkout-success__msg\">{{ successMessage }}</p>\n @if (orderNumber) {\n <p class=\"mj-checkout-success__order\">Order {{ orderNumber }}</p>\n }\n @if (accessMessage) {\n <p class=\"mj-checkout-success__access\" [class.is-failed]=\"accessState === 'Failed'\" role=\"status\">{{ accessMessage }}</p>\n }\n @if (accountLoading) {\n <p class=\"mj-checkout-account__msg\" role=\"status\">Setting up your account\u2026</p>\n } @else if (account?.CanSetPassword) {\n <form class=\"mj-checkout-account\" (submit)=\"$event.preventDefault(); submitPassword()\">\n <h2 class=\"mj-checkout-account__title\">Set a password for your account</h2>\n @if (verificationNote) {\n <p class=\"mj-checkout-account__note\">{{ verificationNote }}</p>\n }\n <label class=\"mj-checkout-account__label\" for=\"mj-checkout-password\">Password</label>\n <input\n id=\"mj-checkout-password\"\n class=\"mj-checkout-account__input\"\n type=\"password\"\n autocomplete=\"new-password\"\n [value]=\"password\"\n (input)=\"password = $any($event.target).value\" />\n <label class=\"mj-checkout-account__label\" for=\"mj-checkout-password-confirm\">Confirm password</label>\n <input\n id=\"mj-checkout-password-confirm\"\n class=\"mj-checkout-account__input\"\n type=\"password\"\n autocomplete=\"new-password\"\n [value]=\"passwordConfirmation\"\n (input)=\"passwordConfirmation = $any($event.target).value\" />\n @if (passwordError) {\n <p class=\"mj-checkout-account__error\" role=\"alert\">{{ passwordError }}</p>\n }\n <button class=\"mj-checkout-account__submit\" type=\"submit\" [disabled]=\"passwordBusy\">\n {{ passwordBusy ? 'Saving\u2026' : 'Set password' }}\n </button>\n <button class=\"mj-checkout-account__skip\" type=\"button\" (click)=\"skipPassword()\" [disabled]=\"passwordBusy\">\n Not now\n </button>\n </form>\n } @else if (accountMessage) {\n <p class=\"mj-checkout-account__msg\" role=\"status\">{{ accountMessage }}</p>\n @if (account?.Outcome === 'Failed') {\n <div class=\"mj-checkout-account mj-checkout-account--actions\">\n <button class=\"mj-checkout-account__submit\" type=\"button\" (click)=\"retryAccount()\">Try again</button>\n @if (config?.redirectUrl) {\n <button class=\"mj-checkout-account__skip\" type=\"button\" (click)=\"dismissAccount()\">Not now</button>\n }\n </div>\n }\n }\n </div>\n } @else if (finishingMessage) {\n <div class=\"mj-checkout-success\" role=\"status\" aria-live=\"polite\">\n <p class=\"mj-checkout-success__msg\">{{ finishingMessage }}</p>\n </div>\n } @else if (!config) {\n <p class=\"mj-checkout-public__status\" role=\"status\">Loading checkout\u2026</p>\n } @else if (renewal) {\n <form class=\"mj-checkout-renewal\" (submit)=\"$event.preventDefault(); payRenewal()\">\n <h1 class=\"mj-checkout-renewal__title\">Renew your subscription</h1>\n <p class=\"mj-checkout-renewal__lead\">Your saved card could not be charged. Pay with a new card to keep your subscription active.</p>\n <dl class=\"mj-checkout-renewal__summary\">\n @if (renewal.Description) {\n <div class=\"mj-checkout-renewal__row\">\n <dt>Renewal of</dt>\n <dd>{{ renewal.Description }}</dd>\n </div>\n }\n @if (renewal.SubscriptionNumber) {\n <div class=\"mj-checkout-renewal__row\">\n <dt>Subscription</dt>\n <dd>{{ renewal.SubscriptionNumber }}</dd>\n </div>\n }\n <div class=\"mj-checkout-renewal__row\">\n <dt>Renewal order</dt>\n <dd>{{ renewal.OrderNumber }}</dd>\n </div>\n @if (renewal.DueDate) {\n <div class=\"mj-checkout-renewal__row\">\n <dt>Due</dt>\n <dd>{{ renewal.DueDate }}</dd>\n </div>\n }\n <div class=\"mj-checkout-renewal__row mj-checkout-renewal__row--total\">\n <dt>Amount due</dt>\n <dd>{{ renewalAmount }}</dd>\n </div>\n </dl>\n @if (config.stripePublishableKey) {\n <label class=\"mj-checkout-renewal__label\" for=\"stripe-card-element\">Card</label>\n <div id=\"stripe-card-element\" class=\"mj-checkout-renewal__card\"></div>\n }\n <p class=\"mj-checkout-renewal__note\">The card you pay with will be charged for future renewals.</p>\n @if (errorMessage) {\n <div class=\"mj-widget-error-banner\" role=\"alert\">{{ errorMessage }}</div>\n }\n <button class=\"mj-checkout-renewal__pay\" type=\"submit\" [disabled]=\"processing || !isPaymentReady\">\n {{ processing ? 'Processing\u2026' : 'Pay ' + renewalAmount }}\n </button>\n </form>\n } @else {\n @for (generation of [formGeneration]; track generation) {\n <mj-checkout-widget\n [config]=\"config\"\n [distributionSlug]=\"slug\"\n [sessionKey]=\"sessionKey\"\n [isProcessing]=\"processing\"\n [isPaymentReady]=\"isPaymentReady\"\n [stripePaymentMethodId]=\"stripePaymentMethodId\"\n [prefillEmail]=\"prefillEmail\"\n [errorMessage]=\"errorMessage\"\n [appliedPromotion]=\"appliedPromotion\"\n [serverPricedTotal]=\"serverPricedTotal\"\n [memberDiscount]=\"memberDiscount\"\n [lockEmail]=\"emailLocked\"\n [promotionError]=\"promotionError\"\n (promotionCodeApplied)=\"onPromotionCodeApplied($event)\"\n [quotedTotal]=\"quotedTotal\"\n [quotedTax]=\"quotedTax\"\n (submitted)=\"onSubmitted($event)\"\n (cancelled)=\"onCancelled()\"\n (quoteInvalidated)=\"onQuoteInvalidated()\"\n (quoteRequested)=\"onQuoteRequested($event)\">\n </mj-checkout-widget>\n }\n }\n <div class=\"mj-checkout-public__turnstile\"></div>\n</div>\n", styles: [":host {\n display: block;\n}\n\n.mj-checkout-public {\n max-width: 580px;\n margin: 0 auto;\n}\n\n.mj-checkout-public__status {\n text-align: center;\n color: #64748b;\n font-size: 0.95rem;\n padding: 2rem 0;\n}\n\n.mj-widget-error-banner {\n display: flex;\n align-items: center;\n gap: 8px;\n background: #fef2f2;\n border: 1px solid #f87171;\n color: #991b1b;\n padding: 10px 14px;\n border-radius: 6px;\n font-size: 0.875rem;\n}\n\n.mj-checkout-success {\n text-align: center;\n background: #ffffff;\n border: 1px solid #e2e8f0;\n border-radius: 10px;\n padding: 2rem 1.5rem;\n box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);\n}\n\n.mj-checkout-success__icon {\n width: 3rem;\n height: 3rem;\n margin: 0 auto 1rem;\n border-radius: 50%;\n background: #dcfce7;\n color: #16a34a;\n font-size: 1.5rem;\n font-weight: 700;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n\n.mj-checkout-success__title {\n margin: 0 0 0.5rem;\n font-size: 1.5rem;\n font-weight: 800;\n color: #0f172a;\n}\n\n.mj-checkout-success__msg,\n.mj-checkout-success__order {\n margin: 0;\n color: #64748b;\n font-size: 0.95rem;\n line-height: 1.5;\n}\n\n.mj-checkout-success__order {\n margin-top: 0.75rem;\n font-weight: 600;\n color: #334155;\n}\n\n/* Whether the buyer's access is ready yet (#325). */\n.mj-checkout-success__access {\n margin: 0.75rem 0 0;\n color: #334155;\n font-size: 0.95rem;\n}\n\n.mj-checkout-success__access.is-failed {\n color: #991b1b;\n}\n\n/* Post-payment account step: set a password for the account the host created (#292). */\n.mj-checkout-account {\n margin: 1.5rem auto 0;\n max-width: 320px;\n text-align: left;\n display: flex;\n flex-direction: column;\n gap: 6px;\n}\n\n.mj-checkout-account__title {\n margin: 0 0 0.5rem;\n font-size: 1.05rem;\n font-weight: 700;\n color: #0f172a;\n text-align: center;\n}\n\n.mj-checkout-account__label {\n font-size: 0.85rem;\n font-weight: 600;\n color: #334155;\n}\n\n.mj-checkout-account__input {\n padding: 8px 10px;\n border: 1px solid #cbd5e1;\n border-radius: 6px;\n font-size: 0.95rem;\n font-family: inherit;\n}\n\n.mj-checkout-account__input:focus {\n outline: none;\n border-color: var(--mj-primary-color, #2563eb);\n box-shadow: 0 0 0 2px rgba(37, 99, 235, 0.15);\n}\n\n.mj-checkout-account__error {\n margin: 4px 0 0;\n color: #991b1b;\n font-size: 0.85rem;\n}\n\n.mj-checkout-account__submit {\n margin-top: 10px;\n padding: 10px;\n border: 0;\n border-radius: 6px;\n background: var(--mj-primary-color, #2563eb);\n color: #ffffff;\n font-weight: 600;\n cursor: pointer;\n}\n\n.mj-checkout-account__skip {\n padding: 6px;\n border: 0;\n background: none;\n color: #64748b;\n font-size: 0.85rem;\n cursor: pointer;\n}\n\n.mj-checkout-account__submit:disabled,\n.mj-checkout-account__skip:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n\n.mj-checkout-account__msg {\n margin: 1rem 0 0;\n color: #334155;\n font-size: 0.95rem;\n line-height: 1.5;\n}\n\n.mj-checkout-account__note {\n margin: 0 0 0.5rem;\n color: #475569;\n font-size: 0.85rem;\n line-height: 1.45;\n text-align: center;\n}\n\n.mj-checkout-account--actions {\n margin-top: 0.75rem;\n}\n\n/* Cloudflare Turnstile renders here only when it needs the buyer to interact (#592). */\n.mj-checkout-public__turnstile {\n display: flex;\n justify-content: center;\n margin-top: 0.75rem;\n}\n\n/* \u2500\u2500\u2500 Pay-renewal mode (#289) \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500 */\n\n.mj-checkout-renewal {\n background: #ffffff;\n border: 1px solid #e2e8f0;\n border-radius: 10px;\n padding: 1.75rem 1.5rem;\n box-shadow: 0 10px 25px -5px rgba(0, 0, 0, 0.05);\n display: flex;\n flex-direction: column;\n gap: 0.85rem;\n}\n\n.mj-checkout-renewal__title {\n margin: 0;\n font-size: 1.4rem;\n font-weight: 800;\n color: #0f172a;\n}\n\n.mj-checkout-renewal__lead,\n.mj-checkout-renewal__note {\n margin: 0;\n color: #475569;\n font-size: 0.95rem;\n line-height: 1.5;\n}\n\n.mj-checkout-renewal__note {\n font-size: 0.85rem;\n}\n\n.mj-checkout-renewal__summary {\n margin: 0.25rem 0;\n border: 1px solid #e2e8f0;\n border-radius: 8px;\n padding: 0.25rem 0.9rem;\n}\n\n.mj-checkout-renewal__row {\n display: flex;\n justify-content: space-between;\n gap: 1rem;\n padding: 0.55rem 0;\n border-bottom: 1px solid #f1f5f9;\n font-size: 0.92rem;\n}\n\n.mj-checkout-renewal__row:last-child {\n border-bottom: none;\n}\n\n.mj-checkout-renewal__row dt {\n color: #64748b;\n}\n\n.mj-checkout-renewal__row dd {\n margin: 0;\n color: #0f172a;\n text-align: right;\n}\n\n.mj-checkout-renewal__row--total dt,\n.mj-checkout-renewal__row--total dd {\n font-weight: 700;\n color: #0f172a;\n}\n\n.mj-checkout-renewal__label {\n font-size: 0.85rem;\n font-weight: 600;\n color: #334155;\n}\n\n.mj-checkout-renewal__card {\n border: 1px solid #cbd5e1;\n border-radius: 6px;\n padding: 0.75rem;\n background: #ffffff;\n}\n\n.mj-checkout-renewal__pay {\n margin-top: 0.25rem;\n padding: 0.8rem 1rem;\n border: none;\n border-radius: 6px;\n background: var(--mj-checkout-primary, #2563eb);\n color: #ffffff;\n font-size: 1rem;\n font-weight: 700;\n cursor: pointer;\n}\n\n.mj-checkout-renewal__pay:disabled {\n opacity: 0.6;\n cursor: not-allowed;\n}\n"] }]
1274
1360
  }], null, { slug: [{
1275
1361
  type: Input
1276
1362
  }], apiRoot: [{
@@ -1283,5 +1369,5 @@ export class CheckoutPublicHostComponent {
1283
1369
  type: Output,
1284
1370
  args: ['checkout-already-subscribed']
1285
1371
  }] }); })();
1286
- (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CheckoutPublicHostComponent, { className: "CheckoutPublicHostComponent", filePath: "lib/checkout-widget/checkout-public-host.component.ts", lineNumber: 121 }); })();
1372
+ (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassDebugInfo(CheckoutPublicHostComponent, { className: "CheckoutPublicHostComponent", filePath: "lib/checkout-widget/checkout-public-host.component.ts", lineNumber: 122 }); })();
1287
1373
  //# sourceMappingURL=checkout-public-host.component.js.map