PageSourceSearch

https://www.allensafetycoaching.com/assets/projects/user_pages/chunk-UBHLFMSE.js

js allensafetycoaching.com collected 2026-09-29 06:47:58 UTC 297,673 bytes, 6,045 lines download raw bytes

1import {
2  validateInput
3} from "./chunk-W3RKY5WP.js";
4import {
5  CFErrorWithCause,
6  CFFetcherError,
7  CFstackWithCauses,
8  Fetcher,
9  checkoutNonceParams,
10  fetchCheckoutNonce,
11  init_error_with_cause,
12  init_fetcher,
13  init_nonce
14} from "./chunk-NXH5VC2T.js";
15import {
16  getSelectedVariant,
17  init_addToCart
18} from "./chunk-Q6RFXGRD.js";
19import {
20  Cart,
21  atom,
22  batched,
23  cleanEmptyObjectKeys,
24  computed,
25  init_Cart,
26  init_general,
27  init_nanostores,
28  isElementVisibleOnViewport,
29  map,
30  onMount,
31  sleepMs
32} from "./chunk-BY72GGKB.js";
33import {
34  validateValue
35} from "./chunk-4AIF3XZW.js";
36import {
37  init_checkbox_v1,
38  init_radio_v1
39} from "./chunk-Y32E43UA.js";
40import {
41  init_input_v1
42} from "./chunk-7HBS56XK.js";
43import {
44  addPageScroll,
45  closeOnClickOutside,
46  init_cfLodash,
47  init_cf_utils,
48  isEqual,
49  isEventInside,
50  removePageScroll,
51  uuidv4
52} from "./chunk-KIZY5IRN.js";
53import {
54  init_modal_v1
55} from "./chunk-5NUE6T5P.js";
56import {
57  CF2Component,
58  init_runtime,
59  registerComponent
60} from "./chunk-NQUHJ6NR.js";
61import {
62  __privateAdd,
63  __privateGet,
64  __privateMethod,
65  __privateSet,
66  __publicField,
67  init_define_process
68} from "./chunk-RFSPGZ3L.js";
69
70// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-tos-v1.ts
71init_define_process();
72init_checkbox_v1();
73init_runtime();
74var CheckoutTosV1 = class extends CF2Component {
75  constructor(el, runtimeSel) {
76    super(el, runtimeSel);
77  }
78  onAcceptedChange(accepted) {
79  }
80  get accepted() {
81    return this.element.querySelector("input").checked;
82  }
83  mount() {
84    const input = this.element.querySelector("input");
85    input.addEventListener("change", (event) => {
86      this.onAcceptedChange(!!event?.target?.checked);
87    });
88  }
89};
90registerComponent("CheckoutTos/V1", CheckoutTosV1);
91window["CheckoutTosV1"] = CheckoutTosV1;
92
93// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-multi-step-v2.ts
94init_define_process();
95init_general();
96init_runtime();
97var CheckoutMultiStepV2 = class extends CF2Component {
98  constructor(el, runtimeSel) {
99    super(el, runtimeSel);
100  }
101  // TODO: For now we have to register it like this
102  // We can use a special syntax to register it in the future
103  // like @Handler(onStepChange) and process it in the build phase
104  onStepChange(oldStep, step) {
105  }
106  onValidateStep(step) {
107  }
108  mount() {
109    this.totalSteps = parseInt(this.totalSteps);
110    this.totalStepsArray = [...Array(this.totalSteps).keys()];
111    const body = this.element.querySelectorAll(".elMultiStepBody");
112    const headers = this.element.querySelectorAll(".elMultiStepHeader");
113    this.steps = this.totalStepsArray.map((i) => {
114      return {
115        body: body[i],
116        header: headers[i]
117      };
118    });
119    headers.forEach((header, stepNumber) => {
120      header.addEventListener("click", (evt) => {
121        evt.preventDefault();
122        this.setStep(stepNumber);
123      });
124    });
125    const buttons = this.element.querySelectorAll('[href="#!next-step"], [href="#!prev-step"], [href="#!open-step"]');
126    buttons.forEach((button) => {
127      const href = button.getAttribute("href");
128      if (href === "#!next-step") {
129        button.addEventListener("click", (evt) => {
130          evt.preventDefault();
131          if (button.dataset.disabled == "true") return;
132          this.nextStep();
133        });
134      } else if (href === "#!prev-step") {
135        button.addEventListener("click", (evt) => {
136          evt.preventDefault();
137          if (button.dataset.disabled == "true") return;
138          this.prevStep();
139        });
140      }
141    });
142    Checkout.store.state.listen((state) => {
143      if (state === Checkout.StoreStates.INITIALIZED) {
144        document.addEventListener("keydown", (evt) => {
145          if (evt.isComposing || evt.keyCode === 229) return;
146          const activeStep = this.element.querySelector(".elMultiStepBody[data-step-state='active']");
147          const checkoutElement = this.element.closest(".elCheckout");
148          const activeNextStepButton = activeStep.querySelector('[href="#!next-step"]');
149          if (evt.keyCode === 13 && activeNextStepButton && isElementVisibleOnViewport(checkoutElement, 20)) {
150            activeNextStepButton.focus();
151            this.nextStep();
152          }
153        });
154      }
155    });
156    Checkout.store.checkout.step.listen((step) => {
157      this.changeStep(step);
158    });
159  }
160  changeStep(step) {
161    const activeUiStep = this.element.querySelector(".elMultiStepBody[data-step-state='active']").dataset.stepNumber;
162    const oldStep = this.convertUiStepToData(activeUiStep);
163    if (oldStep != step) {
164      this.setStepActive(oldStep, step);
165    }
166  }
167  async validateStep(step) {
168    return (await Promise.all(this.onValidateStep(step)))?.every((result) => result);
169  }
170  setStepActive(oldStep, step) {
171    this.onStepChange(oldStep, step);
172    this.totalStepsArray.forEach((stepNumber) => {
173      const isCurrentStep = stepNumber == step;
174      const activeText = isCurrentStep ? "active" : "inactive";
175      this.steps[stepNumber].body.setAttribute("data-step-state", activeText);
176      const header = this.steps[stepNumber].header;
177      if (header) {
178        header.setAttribute("data-step-state", activeText);
179        if (header.children.length > 0) {
180          header.children[0].setAttribute("data-step-state", activeText);
181        }
182      }
183    });
184    $([document.documentElement, document.body]).animate({
185      scrollTop: $(this.element).offset().top - 50
186    }, 200);
187  }
188  setStep(step) {
189    Checkout.store.checkout.step.set(step);
190  }
191  async nextStep() {
192    const currentStep = Checkout.store.checkout.step.get();
193    if (await this.validateStep(currentStep)) {
194      this.setStep(currentStep + 1);
195    }
196  }
197  prevStep() {
198    const step = Checkout.store.checkout.step.get() - 1;
199    this.setStep(step);
200  }
201  convertUiStepToData(step) {
202    return parseInt(step) - 1;
203  }
204};
205registerComponent("CheckoutMultiStep/V2", CheckoutMultiStepV2);
206window["CheckoutMultiStepV2"] = CheckoutMultiStepV2;
207
208// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-coupon-form-v1.ts
209init_define_process();
210init_input_v1();
211init_runtime();
212var CheckoutCouponFormV1 = class extends CF2Component {
213  constructor(el, runtimeSel) {
214    super(el, runtimeSel);
215  }
216  hydrate(store) {
217    this.checkoutStore = store;
218    this.isCouponReadySubs = Checkout.computed.isCouponReady.subscribe((isCouponReady) => {
219      this.updateElementWithCanApply(isCouponReady);
220    });
221    this.currentCodeListen = this.checkoutStore.coupons.currentCode.listen((value) => {
222      if (this.checkoutStore.coupons.state.get() === Checkout.CouponStates.APPLIED) return;
223      this.setInputValue(value);
224    });
225    this.couponsStateListen = this.checkoutStore.coupons.state.listen((state) => {
226      this.updateElementWithCouponState(state);
227    });
228    this.renderElement();
229    this.setupInputListeners();
230  }
231  cleanup() {
232    this.isCouponReadySubs?.();
233    this.currentCodeListen?.();
234    this.couponsStateListen?.();
235  }
236  updateElementWithCanApply(isCouponReady) {
237    if (isCouponReady) {
238      const appliedCode = Checkout.store.coupons.appliedCode.get();
239      if (!appliedCode) {
240        this.enableCoupon();
241      }
242    } else {
243      this.disableCoupon();
244    }
245  }
246  updateElementWithCouponState(state) {
247    switch (state) {
248      case Checkout.CouponStates.READY: {
249        this.clearError();
250        this.enableCoupon();
251        this.hideAppliedChip();
252        this.updateLoader(false);
253        break;
254      }
255      case Checkout.CouponStates.ERROR: {
256        this.setError(this.checkoutStore.coupons.errorMessage.get());
257        this.enableCoupon();
258        this.hideAppliedChip();
259        this.updateLoader(false);
260        break;
261      }
262      case Checkout.CouponStates.APPLIED: {
263        this.clearError();
264        this.disableCoupon();
265        this.setInputValue("");
266        this.showAppliedChip(this.checkoutStore.coupons.appliedCode.get());
267        this.updateLoader(false);
268        break;
269      }
270      case Checkout.CouponStates.APPLYING: {
271        this.disableCoupon();
272        this.clearError();
273        this.hideAppliedChip();
274        this.updateLoader(true);
275        break;
276      }
277    }
278  }
279  renderElement() {
280    const currentCode = this.checkoutStore.coupons.currentCode.get();
281    const state = this.checkoutStore.coupons.state.get();
282    if (state !== Checkout.CouponStates.APPLIED && currentCode) {
283      this.getCouponInput().value = currentCode;
284      this.getCouponInputContainer().classList.add("hasValue");
285    }
286    this.updateElementWithCouponState(state);
287    const isCouponReady = Checkout.computed.isCouponReady.get();
288    this.updateElementWithCanApply(isCouponReady);
289  }
290  setupInputListeners() {
291    const input = this.getCouponInput();
292    if (input !== null) {
293      input.addEventListener("blur", () => {
294        this.checkoutStore.coupons.currentCode.set(input.value?.trim());
295      });
296      input.addEventListener("focus", () => {
297        if (!input.value) {
298          this.clearError();
299        }
300      });
301      input.addEventListener("change", () => {
302        this.clearError();
303      });
304      input.addEventListener("keydown", (evt) => {
305        if (evt.isComposing || evt.keyCode === 229) return;
306        if (evt.key === "Enter") {
307          evt.preventDefault();
308          evt.stopPropagation();
309          evt.stopImmediatePropagation();
310          this.applyCoupon();
311        }
312      });
313    }
314    this.getCouponApplyButton().addEventListener("click", (ev) => {
315      ev.preventDefault();
316      ev.stopPropagation();
317      this.applyCoupon();
318    });
319    this.getCouponChipRemove()?.addEventListener("click", (ev) => {
320      ev.preventDefault();
321      ev.stopPropagation();
322      this.removeCoupon();
323    });
324  }
325  applyCoupon() {
326    const code = this.getCouponInput().value?.trim();
327    this.checkoutStore.coupons.currentCode.set(code);
328    if (!code) {
329      this.checkoutStore.coupons.errorMessage.set(this.checkoutCouponFormErrorTexts.blankDiscountCodeError);
330      this.checkoutStore.coupons.state.set(Checkout.CouponStates.ERROR);
331      return;
332    }
333    window.dispatchEvent(new CustomEvent("ON_APPLY_COUPON", {
334      detail: { isCouponValidation: true }
335    }));
336  }
337  enableCoupon() {
338    this.getCouponApplyButton().setAttribute("data-disabled", false);
339    this.getCouponInput().removeAttribute("disabled");
340  }
341  disableCoupon() {
342    this.getCouponApplyButton().setAttribute("data-disabled", true);
343    this.getCouponInput().setAttribute("disabled", true);
344  }
345  updateLoader(isLoading) {
346    if (isLoading == void 0) {
347      isLoading = this.lastLoading;
348    } else {
349      this.lastLoading = isLoading;
350    }
351    this.getCouponButtonContainer().dataset.loading = isLoading;
352  }
353  setInputValue(value) {
354    const input = this.getCouponInput();
355    value = value?.trim();
356    if (value) {
357      input.value = value;
358      this.getCouponInputContainer().classList.add("hasValue");
359    } else {
360      input.value = "";
361      this.getCouponInputContainer().classList.remove("hasValue");
362    }
363  }
364  setError(message) {
365    this.getCouponErrorContainer().innerHTML = message;
366    this.getCouponInputContainer().classList.add("elInputError");
367    this.getCouponIconContainer().classList.add("elInputError");
368  }
369  clearError() {
370    this.getCouponErrorContainer().innerHTML = "";
371    this.getCouponInputContainer().classList.remove("elInputError");
372    this.getCouponIconContainer().classList.remove("elInputError");
373  }
374  getCouponInput() {
375    return this.element.querySelector("input");
376  }
377  getCouponInputContainer() {
378    return this.element.querySelector(".elCheckoutCouponCodeInput,.elCheckoutCartCouponCodeInput");
379  }
380  getCouponApplyButton() {
381    return this.element.querySelector('.elCheckoutCouponCodeButton a[href="#check-coupon-code"],.elCheckoutCartCouponCodeButton a[href="#check-coupon-code"]');
382  }
383  getCouponButtonContainer() {
384    return this.element.querySelector(".elCheckoutCouponCodeButton,.elCheckoutCartCouponCodeButton");
385  }
386  getCouponErrorContainer() {
387    return this.element.querySelector(".elCouponCodeError");
388  }
389  getCouponIconContainer() {
390    return this.element.querySelector(".elCheckoutCouponFormWrapper,.elCheckoutCartCouponFormWrapper");
391  }
392  getCouponAppliedContainer() {
393    return this.element.querySelector(".elCheckoutCouponApplied");
394  }
395  getCouponChipCode() {
396    return this.element.querySelector(".elCheckoutCouponChipCode");
397  }
398  getCouponChipRemove() {
399    return this.element.querySelector(".elCheckoutCouponChipRemove");
400  }
401  showAppliedChip(code) {
402    const container = this.getCouponAppliedContainer();
403    if (!container || !code) return;
404    this.getCouponChipCode().textContent = code;
405    container.removeAttribute("hidden");
406  }
407  hideAppliedChip() {
408    const container = this.getCouponAppliedContainer();
409    if (!container) return;
410    this.getCouponChipCode().textContent = "";
411    container.setAttribute("hidden", "");
412  }
413  removeCoupon() {
414    this.hideAppliedChip();
415    this.setInputValue("");
416    this.checkoutStore.coupons.currentCode.set("");
417    this.checkoutStore.coupons.appliedCode.set("");
418    this.enableCoupon();
419    window.dispatchEvent(new CustomEvent("ON_CLEAR_COUPON"));
420  }
421};
422registerComponent("CheckoutCouponForm/V1", CheckoutCouponFormV1);
423window["CheckoutCouponFormV1"] = CheckoutCouponFormV1;
424
425// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-order-summary-v1.ts
426init_define_process();
427init_cf_utils();
428init_Cart();
429
430// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-utils.ts
431init_define_process();
432function hasPhysicalProducts(cart) {
433  return cart.items.some(({ product_id, variant_id }) => {
434    const product = globalThis.globalResourceData.productsById[product_id];
435    const variant = globalThis.globalResourceData.variantsById[variant_id];
436    let productType = variant?.product_type;
437    productType = productType || product?.product_type;
438    return productType == "physical";
439  });
440}
441function setupOrderSummaries(component) {
442  const pageOrderSummaries = document.querySelector('[data-page-element="CheckoutOrderSummary/V1"].elCheckout');
443  if (pageOrderSummaries) {
444    component.getComponents("CheckoutOrderSummary/V1").forEach((c) => {
445      c.element.style.display = "none";
446    });
447  }
448}
449function scrollToFirstVisibleError(el) {
450  const $errorWrapper = el ? $(el) : $('[data-error-container="active"]:visible:first').closest("[data-error-wrapper]");
451  const $checkoutFormError = $(".elCheckoutFormErrors:visible:first");
452  if ($errorWrapper.length > 0) {
453    $("html, body").stop(true, true).animate(
454      {
455        scrollTop: $errorWrapper.offset().top - 100
456      },
457      500
458    );
459  } else if ($checkoutFormError.length > 0) {
460    $("html, body").stop(true, true).animate(
461      {
462        scrollTop: $checkoutFormError.offset().top - 100
463      },
464      500
465    );
466  }
467}
468var pageElementContexts = [
469  { selector: '[data-page-element="ModalContainer/V1"]', context: "Modal" },
470  { selector: '[data-page-element="ContentNode"]', context: "ContentNode" }
471];
472function getCheckoutContext(checkoutElement) {
473  let found;
474  pageElementContexts.find(({ selector }) => {
475    found = checkoutElement.closest(selector);
476    return found;
477  });
478  return found;
479}
480function checkValidCustomFields(checkoutElement) {
481  const contextElement = getCheckoutContext(checkoutElement);
482  if (!contextElement) return true;
483  contextElement.querySelectorAll(".elFormItemWrapper:not(.elCheckoutInput)").forEach((el) => {
484    el.classList.remove("elInputError", "elInputWarning", "elInputValid");
485  });
486  const formItems = $(contextElement).find(".elFormItem.required1:not(.elCheckoutInput .elFormItem.required1):visible").toArray().filter(
487    (input) => !!input.getAttribute("data-custom-type") || input.getAttribute("type") == "checkbox"
488  );
489  const results = [];
490  formItems.forEach((input) => {
491    const result = validateInput(input);
492    results.push(result);
493    let thisInput = $(input);
494    const parent = thisInput.parents(".elFormItemWrapper");
495    thisInput = parent.length && parent.find(".inputHolder, .borderHolder, .elCheckbox").length ? parent.find(".inputHolder, .borderHolder, .elCheckbox") : thisInput;
496    if (result) {
497      thisInput.css("border-color", "#4a8920");
498      thisInput.css("border-width", "3px");
499    } else {
500      thisInput.css("border-color", "#B91517");
501      thisInput.css("border-width", "3px");
502    }
503  });
504  return results.every((r) => !!r);
505}
506function buildCustomFields() {
507  const fields = {};
508  document.querySelectorAll(
509    "[type='custom_type'], select[data-custom-type], [type='custom_type'] [type='checkbox']"
510  ).forEach((input) => {
511    fields[input.name] = input.type === "checkbox" ? input.checked : input.value;
512  });
513  return fields;
514}
515function collectLeads(contactDetails) {
516  globalThis.CFDispatchEvent(globalThis.CFEvents.FORM_SUBMITTED, { contact: contactDetails });
517  fetch("/user_pages/api/contacts", {
518    headers: {
519      Accept: "application/json",
520      "Content-Type": "application/json"
521    },
522    method: "POST",
523    body: JSON.stringify(contactDetails)
524  }).then((response) => {
525    if (response.ok) {
526      globalThis.CFDispatchEvent(globalThis.CFEvents.FORM_SUBMITTED_OK, { contact: contactDetails });
527      document.getElementById("cfAR")?.setAttribute("data-leads-collected", "true");
528    }
529  });
530}
531var AVAILABLE_KLARNA_COUNTRIES = [
532  "AU",
533  "AT",
534  "BE",
535  "CA",
536  "CZ",
537  "DK",
538  "FI",
539  "FR",
540  "DE",
541  "IE",
542  "IT",
543  "MX",
544  "NL",
545  "NZ",
546  "NO",
547  "PL",
548  "PT",
549  "RO",
550  "SK",
551  "ES",
552  "SE",
553  "CH",
554  "GB",
555  "US"
556];
557var numberOfStepsInCheckout = () => {
558  const element = document.querySelector(".elCheckout[data-total-steps]");
559  return parseInt(element.dataset["totalSteps"], 10);
560};
561
562// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-order-summary-v1.ts
563init_runtime();
564var CheckoutOrderSummaryV1 = class extends CF2Component {
565  constructor(el, runtimeSel) {
566    super(el, runtimeSel);
567  }
568  initializeWithStore(store, checkoutComputed) {
569    this.checkoutStore = store;
570    [
571      checkoutComputed.checkoutCart,
572      this.checkoutStore.summary
573    ].forEach((store2) => {
574      store2.listen(() => {
575        this.renderSummaryDetails();
576      });
577    });
578    if (Checkout.store.payment) {
579      nanostores.computed([Checkout.store.payment?.type], (paymentType) => paymentType == "apple-pay").subscribe((isDigitalWalletPaymentType) => {
580        if (isDigitalWalletPaymentType && !this.couponFieldEnabled) {
581          this.hide();
582        } else {
583          this.show();
584        }
585      });
586    }
587    this.renderSummaryDetails();
588    Checkout.store.state.listen((state) => {
589      if (state === Checkout.StoreStates.FILLING_FORM) {
590        this.renderSummaryDetails();
591      }
592    });
593    if (globalResourceData.resourceName == "checkout" && this.mobileBehavior != null) {
594      closeOnClickOutside(this.element, () => {
595        addPageScroll();
596        this.element.classList.remove("elOrderSummaryMobileOpen");
597      });
598    }
599  }
600  show() {
601    this.element.classList.remove("elHide");
602  }
603  hide() {
604    this.element.classList.add("elHide");
605  }
606  renderSummaryDetails() {
607    const summary = this.checkoutStore.summary.get();
608    this.state = summary.state;
609    this.summary = !summary.data ? {} : summary.data;
610    const is_checkout_page = globalResourceData.resourceName == "checkout";
611    const cart = is_checkout_page ? Cart.stores.cartData.get() : Checkout.computed.checkoutCart.get();
612    this.hasPhysicalProducts = hasPhysicalProducts(cart);
613    const cartItems = cart.items;
614    this.items = cartItems.map(({ product_id, variant_id, price_id, quantity }) => {
615      const variant = Checkout.variantsById[variant_id];
616      const price = Checkout.pricesById[price_id];
617      const product = Checkout.productsById[product_id];
618      const variantNamesArray = variant.property_value_ids.map((property_value_id) => {
619        return product.all_properties_values[property_value_id];
620      });
621      return {
622        productName: is_checkout_page ? product.name : variant.name,
623        image_url: variant.image ?? product.image,
624        priceName: price.name,
625        imageUrl: variant.image ?? variant.images?.[0] ?? product.image ?? product.images?.[0],
626        variantNames: variantNamesArray.length > 0 ? variantNamesArray.join(", ") : void 0,
627        quantity
628      };
629    });
630    let couponForm = this.getComponent("CheckoutCouponForm/V1");
631    couponForm?.cleanup(this.checkoutStore);
632    const checkoutCouponFormErrorTexts = couponForm?.checkoutCouponFormErrorTexts;
633    this.render(true);
634    this.hydrate();
635    couponForm = this.getComponent("CheckoutCouponForm/V1");
636    if (couponForm) couponForm.checkoutCouponFormErrorTexts = checkoutCouponFormErrorTexts;
637    couponForm?.hydrate(this.checkoutStore);
638  }
639  hydrate() {
640    this.element.querySelector(".elOrderSummaryHead")?.addEventListener("click", (evt) => {
641      evt.preventDefault();
642      this.open = !this.open;
643      this.renderSummaryDetails();
644    });
645    this.element.querySelector(".elOrderSummaryCouponClear")?.addEventListener("click", (evt) => {
646      evt.preventDefault();
647      this.checkoutStore.coupons.currentCode.set("");
648      this.checkoutStore.coupons.appliedCode.set("");
649      const onClearCouponEvent = new CustomEvent("ON_CLEAR_COUPON");
650      window.dispatchEvent(onClearCouponEvent);
651    });
652    this.element.querySelector(".elOrderSummaryHeader")?.addEventListener("click", () => {
653      if (this.element.classList.contains("elOrderSummaryMobileOpen")) {
654        addPageScroll();
655        this.element.classList.remove("elOrderSummaryMobileOpen");
656      } else {
657        removePageScroll();
658        this.element.classList.add("elOrderSummaryMobileOpen");
659      }
660    });
661  }
662  remove() {
663    this.element.innerHTML = "";
664  }
665  render(initializeChildrenInstances = false) {
666    const is_server = true;
667    const couponFieldEnabled = this.couponFieldEnabled ?? null;
668    const open = this.open ?? null;
669    const state = this.state ?? "ok";
670    const items = this.items ?? [];
671    const summary = this.summary ?? {};
672    const hasPhysicalProducts2 = this.hasPhysicalProducts ?? false;
673    const billingFields = this.billingFields ?? null;
674    const shippingFields = this.shippingFields ?? null;
675    const mobileBehavior = this.mobileBehavior ?? null;
676    const summaryTexts = this.summaryTexts ?? null;
677    const linkWithCheckout = this.element.getAttribute("data-param-linkWithCheckout");
678    const linkedCheckoutId = this.element.getAttribute("data-param-linkedCheckoutId");
679    const checkoutCouponFormErrorTexts = this.element.getAttribute("data-param-checkoutCouponFormErrorTexts");
680    let html = "";
681    {
682      if (globalResourceData?.resourceName == "checkout") {
683        if (linkWithCheckout) {
684          html += `<div class="elCheckoutWrapper" ygg-render="replace">`;
685          if (linkWithCheckout == "true" || linkWithCheckout == true) {
686            html += `<div class="elCheckoutOuterFrame"></div>`;
687          }
688          const is_checkout_page = globalResourceData?.resourceName == "checkout";
689          if (is_checkout_page) {
690            html += `<div class="elOrderSummaryHeader`;
691            if (CF2Blank(mobileBehavior) || CF2Blank(true)) {
692              html += ` forceHide`;
693            }
694            html += `"><div class="elOrderSummaryHeaderClosed"><div><span>${summaryTexts?.viewOrderSummary}</span><i class="fas fa-chevron-down"></i></div>`;
695            if (state == "ok") {
696              html += `<span class="elOrderSummaryHeaderTotal">`;
697              if (summary?.interim) {
698                html += `${summary?.interim?.formatted}`;
699              } else {
700                html += `${summary?.total?.formatted}`;
701              }
702              html += `</span>`;
703            }
704            html += `</div><div class="elOrderSummaryHeaderOpenned"><span>${summaryTexts?.closeOrderSummary}</span><i class="fas fa-chevron-up"></i></div></div>`;
705            html += `<div class="elOrderSummaryBody elCheckoutSummaryResource"><div class="elCartOrderSummaryItems">`;
706            const c0 = items;
707            const fl1 = new CF2ForloopDrop(c0.length);
708            for (const item of c0) {
709              const forloop = fl1;
710              html += `<div class="elCartOrderSummaryRow"><div class="elCartOrderSummaryRowLeft">`;
711              const imageUrl = item?.imageUrl;
712              html += `<div class="elCartOrderSummaryProductImageContainer `;
713              if (CF2Blank(imageUrl)) {
714                html += `elCartOrderSummaryEmptyImageContainer`;
715              }
716              html += `">`;
717              if (imageUrl) {
718                html += `<div data-page-element="Image/V2" class="elImageWrapper de-image-block id-Image/V2`;
719                if (CF2Blank(imageUrl) && CF2Blank(null) && true) {
720                  html += ` forceHide`;
721                }
722                html += `" data-liquid-replace="item">`;
723                if (imageUrl || !CF2Blank(null)) {
724                  html += `<img class="elImage" src="${imageUrl ?? null}" data-lazy-loading="true" data-lazy-loading="true"/>`;
725                } else if (false) {
726                  html += `<div class="image-placeholder" title=""><span class="image-placeholder-header"></span></div>`;
727                }
728                html += `</div>`;
729              }
730              if (item?.quantity && item?.quantity > 0) {
731                html += `<div class="elCartOrderSummaryProductImageBadge">${item?.quantity}</div>`;
732              }
733              html += `</div><div class="elCartOrderSummaryRowLeftTextContainer"><div class="elCartOrderSummaryWithImageSubRow elOrderSummaryProductNameRow">${item?.productName}</div>`;
734              if (item?.variantNames) {
735                html += `<div class="elCartOrderSummaryWithImageSubRow elOrderSummaryProductDescriptionRow">${item?.variantNames}</div>`;
736              }
737              html += `</div></div><div class="elCartOrderSummaryRowRight"><span>${item?.priceName}</span></div></div>`;
738              forloop.next();
739            }
740            html += `</div><div class="elOrderSummaryTotals">`;
741            if (couponFieldEnabled && couponFieldEnabled != "false") {
742              html += `<hr class="elCartOrderSummaryDivider"/>`;
743              html += `<div data-page-element="CheckoutCouponForm/V1" class="elCheckoutCouponFormContainer id-CheckoutCouponForm/V1" data-liquid-replace="item">`;
744              const is_checkout_page2 = globalResourceData?.resourceName == "checkout";
745              if (is_checkout_page2) {
746                html += `<div class="elCheckoutCartCouponFormWrapper">`;
747                const inputText = summaryTexts?.coupon?.input ?? "Discount Code";
748                const buttonText = summaryTexts?.coupon?.button ?? "Add";
749                html += `<div data-page-element="Input/V1" class="elFormItemWrapper elInputWrapper de-input-block elCheckoutCartCouponCodeInput id-Input/V1 labelInside" data-content="" type="coupon_codes" data-liquid-replace="item"><input class="elFormItem elInput inputHolder " value="" type="text" name="coupon_codes" pattern="" autocomplete="" inputtype="" data-prevent-submit="" data-prevent-garlic="true" placeholder="${inputText}" maxlength=""/><div class="elLabel"><div class="borderHolder"></div><div class="borderHolder labelText"><label>${inputText}</label></div><div class="borderHolder"></div></div><div class="inputHolder" data-input-status-type="true" data-error-container="true"></div><div class="input-icon"><i class="fas fa-exclamation"></i></div></div><div class="elCheckoutCartCouponCodeButtonWrapper"><div data-page-element="Button/V1" class="elBTN elCheckoutCartCouponCodeButton id-Button/V1" data-liquid-replace="item">`;
750                const label_key = "checkcouponcode";
751                const label_key_slice = "checkc";
752                let data_content_key = "";
753                data_content_key = "checkcouponcode";
754                html += `<a target="_self" href="#check-coupon-code" class="elButton" aria-label="" data-disabled="false" data-show-button-ids="" data-hide-button-ids="" data-on-submit-go-to="" data-param-submittingText="Submitting..." data-content="" data-style-guide-button="" rel="noopener"><span class="elButtonMain"><i class="fas fa-spinner fa-spin elButtonSpinner elButtonText"></i><span class="elButtonMainText elButtonText">${buttonText}</span></span><span class="elButtonSub"></span></a></div><span class="elCheckoutCouponCodeButtonLoading"><i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span></div></div>`;
755              } else {
756                html += `<div class="elCheckoutCouponFormWrapper">`;
757                const inputText = summaryTexts?.coupon?.input ?? "Enter Coupon";
758                const buttonText = summaryTexts?.coupon?.button ?? "Apply";
759                html += `<i data-page-element="IconNode" class="fa-fw fa_icon fa_prepe
759nded elCheckoutCouponTagIcon fa fa-tag id-IconNode"></i><div data-page-element="Input/V1" class="elFormItemWrapper elInputWrapper de-input-block elCheckoutCouponCodeInput id-Input/V1 labelInside" data-content="" type="coupon_codes" data-liquid-replace="item"><input class="elFormItem elInput inputHolder " value="" type="text" name="coupon_codes" pattern="" autocomplete="" inputtype="" data-prevent-submit="" data-prevent-garlic="true" placeholder="${inputText}" maxlength=""/><div class="elLabel"><div class="borderHolder"></div><div class="borderHolder labelText"><label>${inputText}</label></div><div class="borderHolder"></div></div><div class="inputHolder" data-input-status-type="true" data-error-container="true"></div><div class="input-icon"><i class="fas fa-exclamation"></i></div></div><div class="elCheckoutCouponCodeButtonWrapper"><div data-page-element="Button/V1" class="elBTN elCheckoutCouponCodeButton id-Button/V1" data-liquid-replace="item">`;
760                const label_key = "checkcouponcode";
761                const label_key_slice = "checkc";
762                let data_content_key = "";
763                data_content_key = "checkcouponcode";
764                html += `<a target="_self" href="#check-coupon-code" class="elButton" aria-label="" data-disabled="false" data-show-button-ids="" data-hide-button-ids="" data-on-submit-go-to="" data-param-submittingText="Submitting..." data-content="" data-style-guide-button="" rel="noopener"><span class="elButtonMain"><i class="fas fa-spinner fa-spin elButtonSpinner elButtonText"></i><span class="elButtonMainText elButtonText">${buttonText}</span></span><span class="elButtonSub"></span></a></div><span class="elCheckoutCouponCodeButtonLoading"><i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span></div></div>`;
765              }
766              html += `<paragraph-v1 class="elCouponCodeError"></paragraph-v1><div class="elCheckoutCouponApplied" hidden="true"><span class="elCheckoutCouponChip"><i class="fas fa-tag elCheckoutCouponChipIcon"></i><span class="elCheckoutCouponChipCode"></span><button type="button" class="elCheckoutCouponChipRemove" aria-label="${summaryTexts?.coupon?.remove ?? "Remove c
766oupon"}"><i class="fas fa-times"></i></button></span></div></div>`;
767            }
768            html += `<hr class="elCartOrderSummaryDivider"/><div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.subtotal}</div><div class="elOrderSummaryRowRight">`;
769            if (summary?.subtotal) {
770              html += `${summary?.subtotal?.formatted}`;
771            } else {
772              html += `--`;
773            }
774            html += `</div></div>`;
775            if (summary?.discount && summary?.discount?.amount > 0 && summary?.discounts?.length > 0) {
776              const c2 = summary.discounts;
777              const fl3 = new CF2ForloopDrop(c2.length);
778              for (const discount of c2) {
779                const forloop = fl3;
780                html += `<div class="elOrderSummaryRow elOrderSummaryDiscountRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.discount} `;
781                if (discount?.code) {
782                  html += `(`;
783                  html += `${discount?.code})`;
784                }
785                html += `<span class="elOrderSummaryCouponClear">X</span></div><div class="elOrderSummaryRowRight">${summary?.discount?.formatted}</div></div>`;
786                forloop.next();
787              }
788            }
789            if (hasPhysicalProducts2) {
790              html += `<div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.shipping}</div><div class="elOrderSummaryRowRight">`;
791              if (CF2Blank(summary) || CF2Blank(summary?.shipping) || CF2Blank(summary?.shipping?.amount)) {
792                html += `${summaryTexts?.waitingForAddress}`;
793              } else if (summary?.shipping?.amount > 0) {
794                html += `${summary?.shipping?.formatted}`;
795              } else {
796                html += `${summaryTexts?.free}`;
797              }
798              html += `</div></div>`;
799            }
800            html += `<hr class="elCartOrderSummaryDivider"/><div class="elOrderSummaryRow"><div class="elCartOrderSummaryRowLeftTextContainer"><div class="elCartOrderSummarySubRow elCartOrderSummarySubRowTotalText">${summaryTexts?.total}</div>`;
801            if (summary?.tax && summary?.tax?.amount > 0) {
802              html += `<div class="elCartOrderSummarySubRow elCartOrderSummarySubRowTaxesText">${summaryTexts?.including} ${summary?.tax?.formatted} ${summaryTexts?.inTaxes}</div>`;
803            }
804            html += `</div><div class="elCartOrderSummaryRowRight"><span class="elCartOrderSummarySubRowTotalPrice">`;
805            if (summary?.interim) {
806              html += `${summary?.interim?.formatted}`;
807            } else {
808              if (summary?.total) {
809                html += `${summary?.total?.formatted}`;
810              } else {
811                html += `--`;
812              }
813            }
814            html += `</span></div></div>`;
815            if (summary?.recurring && summary?.recurring?.showThen) {
816              html += `<div class="elOrderSummaryRow elOrderSummaryRecurringRow"><div class="elCartOrderSummaryRowLeftTextContainer"><div class="elCartOrderSummarySubRow">${summaryTexts?.then}</div></div><div class="elCartOrderSummaryRowRight">`;
817              if (summary?.recurring?.discount?.amount > 0) {
818                html += `<span class="elOrderSummaryRecurringStrikethrough">${summary?.recurring?.before_formatted}</span>`;
819              }
820              html += `${summary?.recurring?.total?.formatted}${summary?.recurring?.interval}</div></div>`;
821            }
822            html += `</div></div>`;
823          } else {
824            html += `<div class="elOrderSummaryHead"><div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft"><i class="fa fa-shopping-basket"></i><span class="elOrderSummaryHeadText">${summaryTexts?.title}</span></div><div class="elOrderSummaryRowRight">`;
825            if (state == "waiting") {
826              html += `<span> ${summaryTexts?.details} <i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span>`;
827            } else if (state == "calculating") {
828              html += `<span> ${summaryTexts?.calculating} <i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span>`;
829            } else if (state == "error") {
830              html += `<span> ${summaryTexts?.error} <i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span>`;
831            }
832            if (open) {
833              html += `<i class="fas fa-chevron-up elOrderSummaryToggleable"></i>`;
834            } else {
835              if (state == "ok") {
836                html += `<span class="elOrderSummaryTotalPrice">`;
837                if (summary?.interim) {
838                  html += `${summary?.interim?.formatted}`;
839                } else {
840                  html += `${summary?.total?.formatted}`;
841                }
842                html += `</span>`;
843              }
844              html += `<i class="fas fa-chevron-down elOrderSummaryToggleable"></i>`;
845            }
846            html += `</div></div></div>`;
847            if (open) {
848              if (couponFieldEnabled && couponFieldEnabled != "false") {
849                html += `<div data-page-element="CheckoutCouponForm/V1" class="elCheckoutCouponFormContainer id-CheckoutCouponForm/V1" data-liquid-replace="item">`;
850                const is_checkout_page2 = globalResourceData?.resourceName == "checkout";
851                if (is_checkout_page2) {
852                  html += `<div class="elCheckoutCartCouponFormWrapper">`;
853                  const inputText = summaryTexts?.coupon?.input ?? "Discount Code";
854                  const buttonText = summaryTexts?.coupon?.button ?? "Add";
855                  html += `<div data-page-element="Input/V1" class="elFormItemWrapper elInputWrapper de-input-block elCheckoutCartCouponCodeInput id-Input/V1 labelInside" data-content="" type="coupon_codes" data-liquid-replace="item"><input class="elFormItem elInput inputHolder " value="" type="text" name="coupon_codes" pattern="" autocomplete="" inputtype="" data-prevent-submit="" data-prevent-garlic="true" placeholder="${inputText}" maxlength=""/><div class="elLabel"><div class="borderHolder"></div><div class="borderHolder labelText"><label>${inputText}</label></div><div class="borderHolder"></div></div><div class="inputHolder" data-input-status-type="true" data-error-container="true"></div><div class="input-icon"><i class="fas fa-exclamation"></i></div></div><div class="elCheckoutCartCouponCodeButtonWrapper"><div data-page-element="Button/V1" class="elBTN elCheckoutCartCouponCodeButton id-Button/V1" data-liquid-replace="item">`;
856                  const label_key = "checkcouponcode";
857                  const label_key_slice = "checkc";
858                  let data_content_key = "";
859                  data_content_key = "checkcouponcode";
860                  html += `<a target="_self" href="#check-coupon-code" class="elButton" aria-label="" data-disabled="false" data-show-button-ids="" data-hide-button-ids="" data-on-submit-go-to="" data-param-submittingText="Submitting..." data-content="" data-style-guide-button="" rel="noopener"><span class="elButtonMain"><i class="fas fa-spinner fa-spin elButtonSpinner elButtonText"></i><span class="elButtonMainText elButtonText">${buttonText}</span></span><span class="elButtonSub"></span></a></div><span class="elCheckoutCouponCodeButtonLoading"><i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span></div></div>`;
861                } else {
862                  html += `<div class="elCheckoutCouponFormWrapper">`;
863                  const inputText = summaryTexts?.coupon?.input ?? "Enter Coupon";
864                  const buttonText = summaryTexts?.coupon?.button ?? "Apply";
865                  html += `<i data-page-element="IconNode" class="fa-fw fa_icon fa_prepended elCheckoutCouponTagIcon fa fa-tag id-IconNode"></i><div data-page-element="Input/V1" class="elFormItemWrapper elInputWrapper de-input-block elCheckoutCouponCodeInput id-Input/V1 labelInside" data-content="" type="coupon_codes" data-liquid-replace="item"><input class="elFormItem elInput inputHolder " value="" type="text" name="coupon_codes" pattern="" autocomplete="" inputtype="" data-prevent-submit="" data-prevent-garlic="true" placeholder="${inputText}" maxlength=""/><div class="elLabel"><div class="borderHolder"></div><div class="borderHolder labelText"><label>${inputText}</label></div><div class="borderHolder"></div></div><div class="inputHolder" data-input-status-type="true" data-error-container="true"></div><div class="input-icon"><i class="fas fa-exclamation"></i></div></div><div class="elCheckoutCouponCodeButtonWrapper"><div data-page-element="Button/V1" class="elBTN elCheckoutCouponCodeButton i
865d-Button/V1" data-liquid-replace="item">`;
866                  const label_key = "checkcouponcode";
867                  const label_key_slice = "checkc";
868                  let data_content_key = "";
869                  data_content_key = "checkcouponcode";
870                  html += `<a target="_self" href="#check-coupon-code" class="elButton" aria-label="" data-disabled="false" data-show-button-ids="" data-hide-button-ids="" data-on-submit-go-to="" data-param-submittingText="Submitting..." data-content="" data-style-guide-button="" rel="noopener"><span class="elButtonMain"><i class="fas fa-spinner fa-spin elButtonSpinner elButtonText"></i><span class="elButtonMainText elButtonText">${buttonText}</span></span><span class="elButtonSub"></span></a></div><span class="elCheckoutCouponCodeButtonLoading"><i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span></div></div>`;
871                }
872                html += `<paragraph-v1 class="elCouponCodeError"></paragraph-v1><div class="elCheckoutCouponApplied" hidden="true"><span class="elCheckoutCouponChip"><i class="fas fa-tag elCheckoutCouponChipIcon"></i><span class="elCheckoutCouponChipCode"></span><button type="button" class="elCheckoutCouponChipRemove" aria-label="${summaryTexts?.coupon?.remove ?? "Remove c
872oupon"}"><i class="fas fa-times"></i></button></span></div></div>`;
873              }
874              html += `<div class="elOrderSummaryBody">`;
875              const c4 = items;
876              const fl5 = new CF2ForloopDrop(c4.length);
877              for (const item of c4) {
878                const forloop = fl5;
879                html += `<div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${item?.productName}</div><div class="elOrderSummaryRowRight">`;
880                if (item?.quantity && item?.quantity > 1) {
881                  html += `<span class="elOrderSummaryQuantity">${summaryTexts?.qty} ${item?.quantity}</span>`;
882                }
883                html += `<span>${item?.priceName}</span></div></div>`;
884                forloop.next();
885              }
886              if (state == "ok") {
887                if (summary?.upcoming_invoice && summary?.upcoming_invoice?.line_items?.length) {
888                  html += `<hr class="elOrderSummaryDivider"/>`;
889                  const c6 = summary.upcoming_invoice.line_items;
890                  const fl7 = new CF2ForloopDrop(c6.length);
891                  for (const item of c6) {
892                    const forloop = fl7;
893                    html += `<div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${item?.variant_name}</div><div class="elOrderSummaryRowRight">`;
894                    if (item?.quantity && item?.quantity > 1) {
895                      html += `<span class="elOrderSummaryQuantity">${summaryTexts?.qty} ${item?.quantity}</span>`;
896                    }
897                    html += `<span>${item?.formatted}</span></div></div>`;
898                    forloop.next();
899                  }
900                }
901                html += `<hr class="elOrderSummaryDivider"/>`;
902                html += `<div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.taxes}</div><div class="elOrderSummaryRowRight">`;
903                if (summary?.tax?.formatted && summary?.shipping?.amount >= 0) {
904                  html += `${summary?.tax?.formatted}`;
905                } else {
906                  html += ` -- `;
907                }
908                html += `</div></div>`;
909                if (summary?.discount?.amount > 0 && summary?.discounts?.length > 0) {
910                  const c8 = summary.discounts;
911                  const fl9 = new CF2ForloopDrop(c8.length);
912                  for (const discount of c8) {
913                    const forloop = fl9;
914                    html += `<div class="elOrderSummaryRow elOrderSummaryDiscountRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.discount} `;
915                    if (discount?.code) {
916                      html += `(`;
917                      html += `${discount?.code})`;
918                    }
919                    html += `<span class="elOrderSummaryCouponClear">X</span></div><div class="elOrderSummaryRowRight">${summary?.discount?.formatted}</div></div>`;
920                    forloop.next();
921                  }
922                }
923                if (hasPhysicalProducts2) {
924                  html += `<div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.shipping}</div><div class="elOrderSummaryRowRight">`;
925                  if (summary?.shipping?.amount > 0) {
926                    html += `${summary?.shipping?.formatted}`;
927                  } else if (summary?.shipping?.amount <= 0) {
928                    html += `${summaryTexts?.free}`;
929                  } else {
930                    html += ` -- `;
931                  }
932                  html += `</div></div>`;
933                }
934                html += `<hr class="elOrderSummaryDivider"/>`;
935                html += `<div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.total}`;
936                if (summary?.next_invoice_date) {
937                  html += ` - `;
938                  html += `<span class="elOrderSummaryNextInvoice"> ${summaryTexts?.dueOn} ${summary?.next_invoice_date}</span>`;
939                }
940                html += `</div><div class="elOrderSummaryRowRight"><span class="elOrderSummaryTotalPrice">`;
941                if (summary?.interim) {
942                  html += `${summary?.interim?.formatted}`;
943                } else {
944                  html += `${summary?.total?.formatted}`;
945                }
946                html += `</span></div></div>`;
947                if (summary?.recurring && summary?.recurring?.showThen) {
948                  html += `<div class="elOrderSummaryRow elOrderSummaryRecurringRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.then}</div><div class="elOrderSummaryRowRight">`;
949                  if (summary?.recurring?.discount?.amount > 0) {
950                    html += `<span class="elOrderSummaryRecurringStrikethrough">${summary?.recurring?.before_formatted}</span>`;
951                  }
952                  html += `${summary?.recurring?.total?.formatted}${summary?.recurring?.interval}</div></div>`;
953                }
954              }
955              html += `</div>`;
956            }
957          }
958          html += `</div>`;
959        }
960      } else {
961        html += `<div class="elCheckoutWrapper" ygg-render="replace">`;
962        if (linkWithCheckout == "true" || linkWithCheckout == true) {
963          html += `<div class="elCheckoutOuterFrame"></div>`;
964        }
965        const is_checkout_page = globalResourceData?.resourceName == "checkout";
966        if (is_checkout_page) {
967          html += `<div class="elOrderSummaryHeader`;
968          if (CF2Blank(mobileBehavior) || CF2Blank(true)) {
969            html += ` forceHide`;
970          }
971          html += `"><div class="elOrderSummaryHeaderClosed"><div><span>${summaryTexts?.viewOrderSummary}</span><i class="fas fa-chevron-down"></i></div>`;
972          if (state == "ok") {
973            html += `<span class="elOrderSummaryHeaderTotal">`;
974            if (summary?.interim) {
975              html += `${summary?.interim?.formatted}`;
976            } else {
977              html += `${summary?.total?.formatted}`;
978            }
979            html += `</span>`;
980          }
981          html += `</div><div class="elOrderSummaryHeaderOpenned"><span>${summaryTexts?.closeOrderSummary}</span><i class="fas fa-chevron-up"></i></div></div>`;
982          html += `<div class="elOrderSummaryBody elCheckoutSummaryResource"><div class="elCartOrderSummaryItems">`;
983          const c10 = items;
984          const fl11 = new CF2ForloopDrop(c10.length);
985          for (const item of c10) {
986            const forloop = fl11;
987            html += `<div class="elCartOrderSummaryRow"><div class="elCartOrderSummaryRowLeft">`;
988            const imageUrl = item?.imageUrl;
989            html += `<div class="elCartOrderSummaryProductImageContainer `;
990            if (CF2Blank(imageUrl)) {
991              html += `elCartOrderSummaryEmptyImageContainer`;
992            }
993            html += `">`;
994            if (imageUrl) {
995              html += `<div data-page-element="Image/V2" class="elImageWrapper de-image-block id-Image/V2`;
996              if (CF2Blank(imageUrl) && CF2Blank(null) && true) {
997                html += ` forceHide`;
998              }
999              html += `" data-liquid-replace="item">`;
1000              if (imageUrl || !CF2Blank(null)) {
1001                html += `<img class="elImage" src="${imageUrl ?? null}" data-lazy-loading="true" data-lazy-loading="true"/>`;
1002              } else if (false) {
1003                html += `<div class="image-placeholder" title=""><span class="image-placeholder-header"></span></div>`;
1004              }
1005              html += `</div>`;
1006            }
1007            if (item?.quantity && item?.quantity > 0) {
1008              html += `<div class="elCartOrderSummaryProductImageBadge">${item?.quantity}</div>`;
1009            }
1010            html += `</div><div class="elCartOrderSummaryRowLeftTextContainer"><div class="elCartOrderSummaryWithImageSubRow elOrderSummaryProductNameRow">${item?.productName}</div>`;
1011            if (item?.variantNames) {
1012              html += `<div class="elCartOrderSummaryWithImageSubRow elOrderSummaryProductDescriptionRow">${item?.variantNames}</div>`;
1013            }
1014            html += `</div></div><div class="elCartOrderSummaryRowRight"><span>${item?.priceName}</span></div></div>`;
1015            forloop.next();
1016          }
1017          html += `</div><div class="elOrderSummaryTotals">`;
1018          if (couponFieldEnabled && couponFieldEnabled != "false") {
1019            html += `<hr class="elCartOrderSummaryDivider"/>`;
1020            html += `<div data-page-element="CheckoutCouponForm/V1" class="elCheckoutCouponFormContainer id-CheckoutCouponForm/V1" data-liquid-replace="item">`;
1021            const is_checkout_page2 = globalResourceData?.resourceName == "checkout";
1022            if (is_checkout_page2) {
1023              html += `<div class="elCheckoutCartCouponFormWrapper">`;
1024              const inputText = summaryTexts?.coupon?.input ?? "Discount Code";
1025              const buttonText = summaryTexts?.coupon?.button ?? "Add";
1026              html += `<div data-page-element="Input/V1" class="elFormItemWrapper elInputWrapper de-input-block elCheckoutCartCouponCodeInput id-Input/V1 labelInside" data-content="" type="coupon_codes" data-liquid-replace="item"><input class="elFormItem elInput inputHolder " value="" type="text" name="coupon_codes" pattern="" autocomplete="" inputtype="" data-prevent-submit="" data-prevent-garlic="true" placeholder="${inputText}" maxlength=""/><div class="elLabel"><div class="borderHolder"></div><div class="borderHolder labelText"><label>${inputText}</label></div><div class="borderHolder"></div></div><div class="inputHolder" data-input-status-type="true" data-error-container="true"></div><div class="input-icon"><i class="fas fa-exclamation"></i></div></div><div class="elCheckoutCartCouponCodeButtonWrapper"><div data-page-element="Button/V1" class="elBTN elCheckoutCartCouponCodeButton i
1026d-Button/V1" data-liquid-replace="item">`;
1027              const label_key = "checkcouponcode";
1028              const label_key_slice = "checkc";
1029              let data_content_key = "";
1030              data_content_key = "checkcouponcode";
1031              html += `<a target="_self" href="#check-coupon-code" class="elButton" aria-label="" data-disabled="false" data-show-button-ids="" data-hide-button-ids="" data-on-submit-go-to="" data-param-submittingText="Submitting..." data-content="" data-style-guide-button="" rel="noopener"><span class="elButtonMain"><i class="fas fa-spinner fa-spin elButtonSpinner elButtonText"></i><span class="elButtonMainText elButtonText">${buttonText}</span></span><span class="elButtonSub"></span></a></div><span class="elCheckoutCouponCodeButtonLoading"><i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span></div></div>`;
1032            } else {
1033              html += `<div class="elCheckoutCouponFormWrapper">`;
1034              const inputText = summaryTexts?.coupon?.input ?? "Enter Coupon";
1035              const buttonText = summaryTexts?.coupon?.button ?? "Apply";
1036              html += `<i data-page-element="IconNode" class="fa-fw fa_icon fa_prepended elCheckoutCouponTagIcon fa fa-tag id-IconNode"></i><div data-page-element="Input/V1" class="elFormItemWrapper elInputWrapper de-input-block elCheckoutCouponCodeInput id-Input/V1 labelInside" data-content="" type="coupon_codes" data-liquid-replace="item"><input class="elFormItem elInput inputHolder " value="" type="text" name="coupon_codes" pattern="" autocomplete="" inputtype="" data-prevent-submit="" data-prevent-garlic="true" placeholder="${inputText}" maxlength=""/><div class="elLabel"><div class="borderHolder"></div><div class="borderHolder labelText"><label>${inputText}</label></div><div class="borderHolder"></div></div><div class="inputHolder" data-input-status-type="true" data-error-container="true"></div><div class="input-icon"><i class="fas fa-exclamation"></i></div></div><div class="elCheckoutCouponCodeButtonWrapper"><div data-page-element="Button/V1" class="elBTN elCheckoutCouponCodeButton id-Button/V1" data-liquid-replace="item">`;
1037              const label_key = "checkcouponcode";
1038              const label_key_slice = "checkc";
1039              let data_content_key = "";
1040              data_content_key = "checkcouponcode";
1041              html += `<a target="_self" href="#check-coupon-code" class="elButton" aria-label="" data-disabled="false" data-show-button-ids="" data-hide-button-ids="" data-on-submit-go-to="" data-param-submittingText="Submitting..." data-content="" data-style-guide-button="" rel="noopener"><span class="elButtonMain"><i class="fas fa-spinner fa-spin elButtonSpinner elButtonText"></i><span class="elButtonMainText elButtonText">${buttonText}</span></span><span class="elButtonSub"></span></a></div><span class="elCheckoutCouponCodeButtonLoading"><i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span></div></div>`;
1042            }
1043            html += `<paragraph-v1 class="elCouponCodeError"></paragraph-v1><div class="elCheckoutCouponApplied" hidden="true"><span class="elCheckoutCouponChip"><i class="fas fa-tag elCheckoutCouponChipIcon"></i><span class="elCheckoutCouponChipCode"></span><button type="button" class="elCheckoutCouponChipRemove" aria-label="${summaryTexts?.coupon?.remove ?? "Remove c
1043oupon"}"><i class="fas fa-times"></i></button></span></div></div>`;
1044          }
1045          html += `<hr class="elCartOrderSummaryDivider"/><div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.subtotal}</div><div class="elOrderSummaryRowRight">`;
1046          if (summary?.subtotal) {
1047            html += `${summary?.subtotal?.formatted}`;
1048          } else {
1049            html += `--`;
1050          }
1051          html += `</div></div>`;
1052          if (summary?.discount && summary?.discount?.amount > 0 && summary?.discounts?.length > 0) {
1053            const c12 = summary.discounts;
1054            const fl13 = new CF2ForloopDrop(c12.length);
1055            for (const discount of c12) {
1056              const forloop = fl13;
1057              html += `<div class="elOrderSummaryRow elOrderSummaryDiscountRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.discount} `;
1058              if (discount?.code) {
1059                html += `(`;
1060                html += `${discount?.code})`;
1061              }
1062              html += `<span class="elOrderSummaryCouponClear">X</span></div><div class="elOrderSummaryRowRight">${summary?.discount?.formatted}</div></div>`;
1063              forloop.next();
1064            }
1065          }
1066          if (hasPhysicalProducts2) {
1067            html += `<div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.shipping}</div><div class="elOrderSummaryRowRight">`;
1068            if (CF2Blank(summary) || CF2Blank(summary?.shipping) || CF2Blank(summary?.shipping?.amount)) {
1069              html += `${summaryTexts?.waitingForAddress}`;
1070            } else if (summary?.shipping?.amount > 0) {
1071              html += `${summary?.shipping?.formatted}`;
1072            } else {
1073              html += `${summaryTexts?.free}`;
1074            }
1075            html += `</div></div>`;
1076          }
1077          html += `<hr class="elCartOrderSummaryDivider"/><div class="elOrderSummaryRow"><div class="elCartOrderSummaryRowLeftTextContainer"><div class="elCartOrderSummarySubRow elCartOrderSummarySubRowTotalText">${summaryTexts?.total}</div>`;
1078          if (summary?.tax && summary?.tax?.amount > 0) {
1079            html += `<div class="elCartOrderSummarySubRow elCartOrderSummarySubRowTaxesText">${summaryTexts?.including} ${summary?.tax?.formatted} ${summaryTexts?.inTaxes}</div>`;
1080          }
1081          html += `</div><div class="elCartOrderSummaryRowRight"><span class="elCartOrderSummarySubRowTotalPrice">`;
1082          if (summary?.interim) {
1083            html += `${summary?.interim?.formatted}`;
1084          } else {
1085            if (summary?.total) {
1086              html += `${summary?.total?.formatted}`;
1087            } else {
1088              html += `--`;
1089            }
1090          }
1091          html += `</span></div></div>`;
1092          if (summary?.recurring && summary?.recurring?.showThen) {
1093            html += `<div class="elOrderSummaryRow elOrderSummaryRecurringRow"><div class="elCartOrderSummaryRowLeftTextContainer"><div class="elCartOrderSummarySubRow">${summaryTexts?.then}</div></div><div class="elCartOrderSummaryRowRight">`;
1094            if (summary?.recurring?.discount?.amount > 0) {
1095              html += `<span class="elOrderSummaryRecurringStrikethrough">${summary?.recurring?.before_formatted}</span>`;
1096            }
1097            html += `${summary?.recurring?.total?.formatted}${summary?.recurring?.interval}</div></div>`;
1098          }
1099          html += `</div></div>`;
1100        } else {
1101          html += `<div class="elOrderSummaryHead"><div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft"><i class="fa fa-shopping-basket"></i><span class="elOrderSummaryHeadText">${summaryTexts?.title}</span></div><div class="elOrderSummaryRowRight">`;
1102          if (state == "waiting") {
1103            html += `<span> ${summaryTexts?.details} <i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span>`;
1104          } else if (state == "calculating") {
1105            html += `<span> ${summaryTexts?.calculating} <i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span>`;
1106          } else if (state == "error") {
1107            html += `<span> ${summaryTexts?.error} <i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span>`;
1108          }
1109          if (open) {
1110            html += `<i class="fas fa-chevron-up elOrderSummaryToggleable"></i>`;
1111          } else {
1112            if (state == "ok") {
1113              html += `<span class="elOrderSummaryTotalPrice">`;
1114              if (summary?.interim) {
1115                html += `${summary?.interim?.formatted}`;
1116              } else {
1117                html += `${summary?.total?.formatted}`;
1118              }
1119              html += `</span>`;
1120            }
1121            html += `<i class="fas fa-chevron-down elOrderSummaryToggleable"></i>`;
1122          }
1123          html += `</div></div></div>`;
1124          if (open) {
1125            if (couponFieldEnabled && couponFieldEnabled != "false") {
1126              html += `<div data-page-element="CheckoutCouponForm/V1" class="elCheckoutCouponFormContainer id-CheckoutCouponForm/V1" data-liquid-replace="item">`;
1127              const is_checkout_page2 = globalResourceData?.resourceName == "checkout";
1128              if (is_checkout_page2) {
1129                html += `<div class="elCheckoutCartCouponFormWrapper">`;
1130                const inputText = summaryTexts?.coupon?.input ?? "Discount Code";
1131                const buttonText = summaryTexts?.coupon?.button ?? "Add";
1132                html += `<div data-page-element="Input/V1" class="elFormItemWrapper elInputWrapper de-input-block elCheckoutCartCouponCodeInput id-Input/V1 labelInside" data-content="" type="coupon_codes" data-liquid-replace="item"><input class="elFormItem elInput inputHolder " value="" type="text" name="coupon_codes" pattern="" autocomplete="" inputtype="" data-prevent-submit="" data-prevent-garlic="true" placeholder="${inputText}" maxlength=""/><div class="elLabel"><div class="borderHolder"></div><div class="borderHolder labelText"><label>${inputText}</label></div><div class="borderHolder"></div></div><div class="inputHolder" data-input-status-type="true" data-error-container="true"></div><div class="input-icon"><i class="fas fa-exclamation"></i></div></div><div class="elCheckoutCartCouponCodeButtonWrapper"><div data-page-element="Button/V1" class="elBTN elCheckoutCartCouponCodeButton id-Button/V1" data-liquid-replace="item">`;
1133                const label_key = "checkcouponcode";
1134                const label_key_slice = "checkc";
1135                let data_content_key = "";
1136                data_content_key = "checkcouponcode";
1137                html += `<a target="_self" href="#check-coupon-code" class="elButton" aria-label="" data-disabled="false" data-show-button-ids="" data-hide-button-ids="" data-on-submit-go-to="" data-param-submittingText="Submitting..." data-content="" data-style-guide-button="" rel="noopener"><span class="elButtonMain"><i class="fas fa-spinner fa-spin elButtonSpinner elButtonText"></i><span class="elButtonMainText elButtonText">${buttonText}</span></span><span class="elButtonSub"></span></a></div><span class="elCheckoutCouponCodeButtonLoading"><i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span></div></div>`;
1138              } else {
1139                html += `<div class="elCheckoutCouponFormWrapper">`;
1140                const inputText = summaryTexts?.coupon?.input ?? "Enter Coupon";
1141                const buttonText = summaryTexts?.coupon?.button ?? "Apply";
1142                html += `<i data-page-element="IconNode" class="fa-fw fa_icon fa_prepended elCheckoutCouponTagIcon fa fa-tag id-IconNode"></i><div data-page-element="Input/V1" class="elFormItemWrapper elInputWrapper de-input-block elCheckoutCouponCodeInput id-Input/V1 labelInside" data-content="" type="coupon_codes" data-liquid-replace="item"><input class="elFormItem elInput inputHolder " value="" type="text" name="coupon_codes" pattern="" autocomplete="" inputtype="" data-prevent-submit="" data-prevent-garlic="true" placeholder="${inputText}" maxlength=""/><div class="elLabel"><div class="borderHolder"></div><div class="borderHolder labelText"><label>${inputText}</label></div><div class="borderHolder"></div></div><div class="inputHolder" data-input-status-type="true" data-error-container="true"></div><div class="input-icon"><i class="fas fa-exclamation"></i></div></div><div class="elCheckoutCouponCodeButtonWrapper"><div data-page-element="Button/V1" class="elBTN elCheckoutCouponCodeButton i
1142d-Button/V1" data-liquid-replace="item">`;
1143                const label_key = "checkcouponcode";
1144                const label_key_slice = "checkc";
1145                let data_content_key = "";
1146                data_content_key = "checkcouponcode";
1147                html += `<a target="_self" href="#check-coupon-code" class="elButton" aria-label="" data-disabled="false" data-show-button-ids="" data-hide-button-ids="" data-on-submit-go-to="" data-param-submittingText="Submitting..." data-content="" data-style-guide-button="" rel="noopener"><span class="elButtonMain"><i class="fas fa-spinner fa-spin elButtonSpinner elButtonText"></i><span class="elButtonMainText elButtonText">${buttonText}</span></span><span class="elButtonSub"></span></a></div><span class="elCheckoutCouponCodeButtonLoading"><i style="margin:0px 10px;" class="fas fa-spinner fa-spin"></i></span></div></div>`;
1148              }
1149              html += `<paragraph-v1 class="elCouponCodeError"></paragraph-v1><div class="elCheckoutCouponApplied" hidden="true"><span class="elCheckoutCouponChip"><i class="fas fa-tag elCheckoutCouponChipIcon"></i><span class="elCheckoutCouponChipCode"></span><button type="button" class="elCheckoutCouponChipRemove" aria-label="${summaryTexts?.coupon?.remove ?? "Remove c
1149oupon"}"><i class="fas fa-times"></i></button></span></div></div>`;
1150            }
1151            html += `<div class="elOrderSummaryBody">`;
1152            const c14 = items;
1153            const fl15 = new CF2ForloopDrop(c14.length);
1154            for (const item of c14) {
1155              const forloop = fl15;
1156              html += `<div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${item?.productName}</div><div class="elOrderSummaryRowRight">`;
1157              if (item?.quantity && item?.quantity > 1) {
1158                html += `<span class="elOrderSummaryQuantity">${summaryTexts?.qty} ${item?.quantity}</span>`;
1159              }
1160              html += `<span>${item?.priceName}</span></div></div>`;
1161              forloop.next();
1162            }
1163            if (state == "ok") {
1164              if (summary?.upcoming_invoice && summary?.upcoming_invoice?.line_items?.length) {
1165                html += `<hr class="elOrderSummaryDivider"/>`;
1166                const c16 = summary.upcoming_invoice.line_items;
1167                const fl17 = new CF2ForloopDrop(c16.length);
1168                for (const item of c16) {
1169                  const forloop = fl17;
1170                  html += `<div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${item?.variant_name}</div><div class="elOrderSummaryRowRight">`;
1171                  if (item?.quantity && item?.quantity > 1) {
1172                    html += `<span class="elOrderSummaryQuantity">${summaryTexts?.qty} ${item?.quantity}</span>`;
1173                  }
1174                  html += `<span>${item?.formatted}</span></div></div>`;
1175                  forloop.next();
1176                }
1177              }
1178              html += `<hr class="elOrderSummaryDivider"/>`;
1179              html += `<div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.taxes}</div><div class="elOrderSummaryRowRight">`;
1180              if (summary?.tax?.formatted && summary?.shipping?.amount >= 0) {
1181                html += `${summary?.tax?.formatted}`;
1182              } else {
1183                html += ` -- `;
1184              }
1185              html += `</div></div>`;
1186              if (summary?.discount?.amount > 0 && summary?.discounts?.length > 0) {
1187                const c18 = summary.discounts;
1188                const fl19 = new CF2ForloopDrop(c18.length);
1189                for (const discount of c18) {
1190                  const forloop = fl19;
1191                  html += `<div class="elOrderSummaryRow elOrderSummaryDiscountRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.discount} `;
1192                  if (discount?.code) {
1193                    html += `(`;
1194                    html += `${discount?.code})`;
1195                  }
1196                  html += `<span class="elOrderSummaryCouponClear">X</span></div><div class="elOrderSummaryRowRight">${summary?.discount?.formatted}</div></div>`;
1197                  forloop.next();
1198                }
1199              }
1200              if (hasPhysicalProducts2) {
1201                html += `<div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.shipping}</div><div class="elOrderSummaryRowRight">`;
1202                if (summary?.shipping?.amount > 0) {
1203                  html += `${summary?.shipping?.formatted}`;
1204                } else if (summary?.shipping?.amount <= 0) {
1205                  html += `${summaryTexts?.free}`;
1206                } else {
1207                  html += ` -- `;
1208                }
1209                html += `</div></div>`;
1210              }
1211              html += `<hr class="elOrderSummaryDivider"/>`;
1212              html += `<div class="elOrderSummaryRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.total}`;
1213              if (summary?.next_invoice_date) {
1214                html += ` - `;
1215                html += `<span class="elOrderSummaryNextInvoice"> ${summaryTexts?.dueOn} ${summary?.next_invoice_date}</span>`;
1216              }
1217              html += `</div><div class="elOrderSummaryRowRight"><span class="elOrderSummaryTotalPrice">`;
1218              if (summary?.interim) {
1219                html += `${summary?.interim?.formatted}`;
1220              } else {
1221                html += `${summary?.total?.formatted}`;
1222              }
1223              html += `</span></div></div>`;
1224              if (summary?.recurring && summary?.recurring?.showThen) {
1225                html += `<div class="elOrderSummaryRow elOrderSummaryRecurringRow"><div class="elOrderSummaryRowLeft">${summaryTexts?.then}</div><div class="elOrderSummaryRowRight">`;
1226                if (summary?.recurring?.discount?.amount > 0) {
1227                  html += `<span class="elOrderSummaryRecurringStrikethrough">${summary?.recurring?.before_formatted}</span>`;
1228                }
1229                html += `${summary?.recurring?.total?.formatted}${summary?.recurring?.interval}</div></div>`;
1230              }
1231            }
1232            html += `</div>`;
1233          }
1234        }
1235        html += `</div>`;
1236      }
1237    }
1238    this.replaceContent(html);
1239    if (initializeChildrenInstances) {
1240      const scopeToYggRender = this.element.querySelectorAll("[ygg-render]").length > 0;
1241      const options = { scopeToYggRender };
1242      CF2Component.hydrateTree(this.element, options);
1243    }
1244  }
1245};
1246registerComponent("CheckoutOrderSummary/V1", CheckoutOrderSummaryV1);
1247window["CheckoutOrderSummaryV1"] = CheckoutOrderSummaryV1;
1248
1249// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-product-card-v2.ts
1250init_define_process();
1251init_radio_v1();
1252init_checkbox_v1();
1253init_runtime();
1254var CheckoutProductCardV2 = class extends CF2Component {
1255  constructor(el, runtimeSel) {
1256    super(el, runtimeSel);
1257  }
1258  mount() {
1259    this.can_purchase_again = !new URLSearchParams(window.location.search).get("manage_order_id");
1260    this.variantValues = Object.entries(this.product.property_values_variant_mapping ?? {}).reduce((acc, entries) => {
1261      const values = entries[0].split(",").map((value) => parseInt(value));
1262      acc[entries[1]] = values;
1263      return acc;
1264    }, {}) ?? {};
1265    this.valuesPositions = this.product.sorted_property_values?.reduce((acc, property) => {
1266      property.value_ids.forEach((value, index) => {
1267        acc[value] = index;
1268      });
1269      return acc;
1270    }, {}) ?? {};
1271  }
1272  remove() {
1273    this.element.innerHTML = "";
1274  }
1275  render(initializeChildrenInstances = false) {
1276    const is_server = true;
1277    const layout = this.layout ?? null;
1278    const featured = this.featured ?? null;
1279    const highlight_text = this.highlight_text ?? null;
1280    const selectType = this.selectType ?? null;
1281    const showImage = this.showImage ?? null;
1282    const showDescription = this.showDescription ?? null;
1283    const showCompareAtPrice = this.showCompareAtPrice ?? null;
1284    const isChecked = this.isChecked ?? null;
1285    const product = this.product ?? null;
1286    const variantDisplay = this.variantDisplay ?? null;
1287    const individualVariantId = this.individualVariantId ?? null;
1288    const variant = this.variant ?? null;
1289    const selected_price = this.selected_price ?? null;
1290    const quantity = this.quantity ?? null;
1291    const otherTexts = this.otherTexts ?? null;
1292    const can_purchase_again = this.can_purchase_again ?? true;
1293    const renderType = this.renderType ?? null;
1294    const selectedOrderIndex = this.selectedOrderIndex ?? null;
1295    const selectedUpdatableCartItemIndex = this.selectedUpdatableCartItemIndex ?? null;
1296    const updatableOrders = this.updatableOrders ?? null;
1297    const individualDirection = this.individualDirection ?? null;
1298    let html = "";
1299    {
1300      const is_not_server = false;
1301      let priceDisplayType = "multiple";
1302      let newOrder = selectedOrderIndex == -1;
1303      let showProductVariantSelection = true;
1304      let currentRenderType = renderType;
1305      const showUpgradeDowngrade = currentRenderType == "upgradeDowngrade";
1306      const showReactivate = currentRenderType == "reactivate";
1307      const showManageOrders = showUpgradeDowngrade || showReactivate;
1308      if (showManageOrders) {
1309        showProductVariantSelection = false;
1310        if (showUpgradeDowngrade) {
1311          priceDisplayType = "hide";
1312          if (newOrder && variant?.prices?.length == 1) {
1313            priceDisplayType = "single";
1314          }
1315        }
1316        if (showReactivate && variant?.prices?.length > 1) {
1317          priceDisplayType = "single";
1318        }
1319      }
1320      const customVariants = product?.variants.filter((value) => value["default_variant"] == false);
1321      if (layout == "modern") {
1322        html += `<div class="elProductLayoutBackground"></div>`;
1323        html += `<div class="elProductModernItem"> `;
1324        if (selectType == "quantity") {
1325          html += `<div class="elProductInputWrapper elProductCardQuantityContainer"><div class="elProductInputControls"><button class="elProductCardInput">-</button><input class="elProductCardInput elProductCardShortInput" name="product" value="${quantity ?? 0}" min="0" type="number"/><button class="elProductCardInput">+</button></div></div>`;
1326        } else if (selectType == "quantity-forced") {
1327          html += `<div class="elProductInputWrapper elSelectWrapper elForcedQuantityWrapper"><select name="product" class="elProductCardInput elProductInputControls">`;
1328          const step = product?.step ?? 2;
1329          const min = product?.min ?? 0;
1330          const max = product?.max ?? 5;
1331          const item_count_step_1 = max - min;
1332          const item_count_step_2 = item_count_step_1 / step;
1333          const item_count_step_3 = item_count_step_2 | 0;
1334          const range = Array.apply(0, Array(item_count_step_3)).map((element, index) => index + 0);
1335          ;
1336          const c0 = range;
1337          const fl1 = new CF2ForloopDrop(c0.length);
1338          for (const i of c0) {
1339            const forloop = fl1;
1340            const value = i * step + min;
1341            html += `<option value="${value}">${value}</option>`;
1342            forloop.next();
1343          }
1344          html += `</select><div class="elSelectArrow elForcedQuantitySelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
1345        }
1346        const isClassic = layout == "classic";
1347        const isQuantityType = selectType == "quantity";
1348        html += `<div class="elProductCardSelectInput`;
1349        if (isClassic == false || isQuantityType == true) {
1350          html += ` hide`;
1351        }
1352        html += `">`;
1353        if (selectType == "single") {
1354          if (isChecked) {
1355            html += `<div data-page-element="Radio/V1" class="elRadioWrapper id-Radio/V1" data-liquid-replace="item" data-checked="true" data-trigger-click-on-wrapper="false"><label class="elRadioLabel"><input type="radio" value="" name="product" checked class="elRadioInput"/><div class="elRadio"><div class="elRadioIcon"></div></div><span class="elRadioText"></span></label></div>`;
1356          } else {
1357            html += `<div data-page-element="Radio/V1" class="elRadioWrapper id-Radio/V1" data-liquid-replace="item" data-checked="" data-trigger-click-on-wrapper="false"><label class="elRadioLabel"><input type="radio" value="" name="product"  class="elRadioInput"/><div class="elRadio"><div class="elRadioIcon"></div></div><span class="elRadioText"></span></label></div>`;
1358          }
1359        } else if (selectType == "multiple" || selectType == "quantity") {
1360          if (isChecked) {
1361            html += `<div data-page-element="Checkbox/V1" type="custom_type" class="elCheckboxWrapper elFormItemWrapper de-input-block id-Checkbox/V1" data-content="" data-liquid-replace="item" data-prevent-click-on-label="false" data-trigger-click-on-wrapper="false" data-checked="true"><label class="elCheckboxLabel"><input type="checkbox" value="${product?.id}
1361" name="product" checked data-prevent-garlic="false" class="elCheckboxInput inputHolder"/><div class="elCheckbox"><div class="elCheckboxIcon"><div class="elCheckboxIconSquare hide"></div><i class="elCheckboxIconCheck fas fa-check"></i></div></div><span class="elCheckboxText"></span></label><div data-input-status-type="true" data-error-container="true"></div></div>`;
1362          } else {
1363            html += `<div data-page-element="Checkbox/V1" type="custom_type" class="elCheckboxWrapper elFormItemWrapper de-input-block id-Checkbox/V1" data-content="" data-liquid-replace="item" data-prevent-click-on-label="false" data-trigger-click-on-wrapper="false" data-checked=""><label class="elCheckboxLabel"><input type="checkbox" value="${product?.id}" name="product"  data-prevent-garlic="false" class="elCheckboxInput inputHolder"/><div class="elCheckbox"><div class="elCheckboxIcon"><div class="elCheckboxIconSquare hide"></div><i class="elCheckboxIconCheck fas fa-check"></i></div></div><span class="elCheckboxText"></span></label><div data-input-status-type="true" data-error-container="true"></div></div>`;
1364          }
1365        }
1366        html += `</div>`;
1367        if (showImage) {
1368          const imageUrl = variant?.image ?? product.image;
1369          if (imageUrl && imageUrl != "") {
1370            html += `<div class="elProductCardImage"><div data-page-element="Image/V2" class="elImageWrapper de-image-block id-Image/V2`;
1371            if (CF2Blank(imageUrl) && CF2Blank(null) && true) {
1372              html += ` forceHide`;
1373            }
1374            html += `" data-liquid-replace="item">`;
1375            if (imageUrl || !CF2Blank(null)) {
1376              html += `<img class="elImage" src="${imageUrl ?? null}" data-lazy-loading="true" data-lazy-loading="true"/>`;
1377            } else if (false) {
1378              html += `<div class="image-placeholder" title=""><span class="image-placeholder-header"></span></div>`;
1379            }
1380            html += `</div></div>`;
1381          }
1382        }
1383        html += `<div class="elProductCardNameContainer">`;
1384        if (featured && highlight_text) {
1385          html += `<div class="elProductCardHighlight">${highlight_text}</div>`;
1386        }
1387        if (variantDisplay == "individual") {
1388          html += `<span class="elProductCardInfoName">${variant?.name}</span>`;
1389        } else if (customVariants?.length > 1) {
1390          html += `<span class="elProductCardInfoName">${product?.default_variant?.name}</span>`;
1391        } else {
1392          html += `<span class="elProductCardInfoName">${variant?.name}</span>`;
1393        }
1394        if (showDescription) {
1395          html += `<span class="elProductCardInfoDescription">${(product?.description_override ?? variant.description ?? product.default_variant.description ?? "").replaceAll(`
1396`, "<br>")}</span>`;
1397        }
1398        html += `</div><div class="elProductCardPriceContainer">`;
1399        if (priceDisplayType == "multiple") {
1400          if (variant?.prices?.length == 1) {
1401            html += `<div class="elProductCardInfoPrice">`;
1402            if (showCompareAtPrice) {
1403              const compare_at_amount = selected_price?.compare_at_amount;
1404              if (compare_at_amount) {
1405                html += `<span class="elProductCardAnchorPrice">${compare_at_amount}</span>`;
1406              }
1407            }
1408            html += `<span class="elProductCardFinalPrice">
1408${selected_price?.name}</span></div>`;
1409          } else {
1410            html += `<div class="elSelectWrapper"><select name="variant_price">`;
1411            const c2 = variant.prices;
1412            const fl3 = new CF2ForloopDrop(c2.length);
1413            for (const price of c2) {
1414              const forloop = fl3;
1415              html += `<option `;
1416              if (selected_price?.id == price?.id) {
1417                html += `selected`;
1418              }
1419              html += ` value="${price?.id}">${price?.name}</option>`;
1420              forloop.next();
1421            }
1422            html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
1423          }
1424        } else if (priceDisplayType == "single") {
1425          html += `<div class="elProductCardInfoPrice">`;
1426          if (showCompareAtPrice) {
1427            const compare_at_amount = selected_price?.compare_at_amount;
1428            if (compare_at_amount) {
1429              html += `<span class="elProductCardAnchorPrice">${compare_at_amount}</span>`;
1430            }
1431          }
1432          html += `<span class="elProductCardFinalPrice">
1432${selected_price?.name}</span></div>`;
1433        }
1434        html += `</div>`;
1435        if (showProductVariantSelection && variantDisplay != "individual") {
1436          if (customVariants?.length > 1) {
1437            html += `<div class="elProductSelectSelectorsWrapper">`;
1438            const c4 = product.sorted_property_values;
1439            const fl5 = new CF2ForloopDrop(c4.length);
1440            for (const property_values of c4) {
1441              const forloop = fl5;
1442              const property_id = property_values?.property_id;
1443              const select_index = forloop?.index0;
1444              html += `    `;
1445              html += `<div class="elSelectWrapper"><select class="elVariantSelector" name="property_${property_id}">`;
1446              const c6 = property_values.value_ids;
1447              const fl7 = new CF2ForloopDrop(c6.length);
1448              for (const value_id of c6) {
1449                const forloop2 = fl7;
1450                html += `<option `;
1451                if (variant?.property_value_ids?.[select_index] == value_id) {
1452                  html += `selected`;
1453                }
1454                html += ` value="${value_id}">${product?.all_properties_values?.[value_id]}</option>`;
1455                forloop2.next();
1456              }
1457              html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
1458              forloop.next();
1459            }
1460            html += `</div>`;
1461          }
1462        }
1463        if (showManageOrders) {
1464          const amount_of_orders = updatableOrders?.length;
1465          if (amount_of_orders && amount_of_orders > 0) {
1466            if (variantDisplay == "individual") {
1467              const isCurrentPlan = individualDirection == "current";
1468              if (isCurrentPlan) {
1469                html += `<div class="elProductCardSubscriptionsBanner"><i class="fas fa-sync-alt"></i><span>Current plan</span>`;
1470                if (can_purchase_again) {
1471                  html += `<span class="elProductCardCurrentPlanSeparator">-</span>`;
1472                  html += `<div class="elProductCardNewOrder elProductCardPurchaseAgainInline"><span>Purchase Again</span></div>`;
1473                }
1474                html += `</div>`;
1475              } else {
1476                html += `<div class="elProductCardSubscriptionsBanner"><i class="fas fa-sync-alt"></i><span>${individualDirection}</span></div>`;
1477                html += `<div class="elProductCardManageOrders`;
1478                if (CF2Blank(isChecked)) {
1479                  html += ` elHide`;
1480                }
1481                html += `"><div class="elProductCardOrdersWrapper"><div class="elProductCardTitle"><span>${individualDirection} </span><div></div></div><div class="elProductCardOrders">`;
1482                const c8 = updatableOrders;
1483                const fl9 = new CF2ForloopDrop(c8.length);
1484                for (const order of c8) {
1485                  const forloop = fl9;
1486                  const orderIndex = forloop?.index0;
1487                  html += `<div class="elProductCardOrder`;
1488                  if (selectedOrderIndex == orderIndex) {
1489                    html += ` elProductCardOrderSelected`;
1490                  }
1491                  html += `" data-order-index="${orderIndex}"><div class="elProductCardOrderDetails"><div class="elProductCardOrderDetailsNumber"><i class="fas fa-receipt"></i><span>${otherTexts?.upgradesDowngradesReactivations?.order} ${order?.number}</span></div><span class="elProductCardOrderDetailsManage">${individualDirection}</span></div>`;
1492                  if (selectedOrderIndex == orderIndex) {
1493                    html += `<div class="elProductCardOrderActions"><a data-page-element="LinkNode" class="elTypographyLink elProductCardShowOrderDetailsLink id-LinkNode" href="#show-selected-order-details" target="_self" data-show-button-ids="" data-hide-button-ids="" data-selected="${false}" data-liquid-replace="item"><span>${otherTexts?.upgradesDowngradesReactivations?.viewOrderDetails}</span></a><span class="elProductCardDirectionBadge">${individualDirection}  ${variant?.name}
1493 - ${selected_price?.name}</span></div>`;
1494                  }
1495                  html += `</div>`;
1496                  forloop.next();
1497                }
1498                html += `</div></div>`;
1499                if (can_purchase_again) {
1500                  html += `<div class="elProductCardNewOrderWrapper"><div class="elProductCardTitle"><span>${otherTexts?.upgradesDowngradesReactivations?.purchaseAgain}</span><div></div></div><div class="elProductCardNewOrder`;
1501                  if (newOrder == true) {
1502                    html += ` elProductCardOrderSelected`;
1503                  }
1504                  html += `"><div class="elProductCardNewOrderTitle"><i class="fas fa-plus-circle"></i><span>${otherTexts?.upgradesDowngradesReactivations?.newOrder}</span></div>`;
1505                  if (newOrder == true) {
1506                    html += `<div class="elProductCardOrderActions">`;
1507                    if (variantDisplay != "individual") {
1508                      if (customVariants?.length > 1) {
1509                        html += `<div class="elProductSelectSelectorsWrapper">`;
1510                        const c10 = product.sorted_property_values;
1511                        const fl11 = new CF2ForloopDrop(c10.length);
1512                        for (const property_values of c10) {
1513                          const forloop = fl11;
1514                          const property_id = property_values?.property_id;
1515                          const select_index = forloop?.index0;
1516                          html += `    `;
1517                          html += `<div class="elSelectWrapper"><select class="elVariantSelector" name="property_${property_id}">`;
1518                          const c12 = property_values.value_ids;
1519                          const fl13 = new CF2ForloopDrop(c12.length);
1520                          for (const value_id of c12) {
1521                            const forloop2 = fl13;
1522                            html += `<option `;
1523                            if (variant?.property_value_ids?.[select_index] == value_id) {
1524                              html += `selected`;
1525                            }
1526                            html += ` value="${value_id}">${product?.all_properties_values?.[value_id]}</option>`;
1527                            forloop2.next();
1528                          }
1529                          html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
1530                          forloop.next();
1531                        }
1532                        html += `</div>`;
1533                      }
1534                    }
1535                    if (priceDisplayType == "single" && variant?.prices?.length > 1) {
1536                      html += `<div class="elProductSelectSelectorsWrapper"><div class="elSelectWrapper"><select name="variant_price">`;
1537                      const c14 = variant.prices;
1538                      const fl15 = new CF2ForloopDrop(c14.length);
1539                      for (const price of c14) {
1540                        const forloop = fl15;
1541                        html += `<option `;
1542                        if (selected_price?.id == price?.id) {
1543                          html += `selected`;
1544                        }
1545                        html += ` value="${price?.id}">${price?.name}</option>`;
1546                        forloop.next();
1547                      }
1548                      html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div></div>`;
1549                    }
1550                    html += `</div>`;
1551                  }
1552                  html += `</div></div>`;
1553                }
1554                html += `</div>`;
1555              }
1556            } else {
1557              let active_order = false;
1558              let canceled_order = false;
1559              const amount_of_orders2 = updatableOrders?.length;
1560              const c16 = updatableOrders;
1561              const fl17 = new CF2ForloopDrop(c16.length);
1562              for (const order of c16) {
1563                const forloop = fl17;
1564                if (order?.type == "reactivate") {
1565                  canceled_order = true;
1566                } else {
1567                  active_order = true;
1568                }
1569                forloop.next();
1570              }
1571              html += `<div class="elProductCardSubscriptionsBanner"><i class="fas fa-sync-alt"></i>`;
1572              if (active_order && canceled_order) {
1573                if (amount_of_orders2 > 1) {
1574                  html += `<span>${amount_of_orders2} ${otherTexts?.upgradesDowngradesReactivations?.multipleExistingSubscriptions}</span>`;
1575                } else {
1576                  html += `<span>${amount_of_orders2} ${otherTexts?.upgradesDowngradesReactivations?.singleExistingSubscription}</span>`;
1577                }
1578              } else if (canceled_order) {
1579                if (amount_of_orders2 > 1) {
1580                  html += `<span>${amount_of_orders2} </span>`;
1581                } else {
1582                  html += `<span>${amount_of_orders2} </span>`;
1583                }
1584              } else {
1585                if (amount_of_orders2 > 1) {
1586                  html += `<span>${amount_of_orders2} ${otherTexts?.upgradesDowngradesReactivations?.multipleActiveSubscriptions}</span>`;
1587                } else {
1588                  html += `<span>${amount_of_orders2} ${otherTexts?.upgradesDowngradesReactivations?.singleActiveSubscription}</span>`;
1589                }
1590              }
1591              html += `</div>`;
1592              html += `<div class="elProductCardManageOrders`;
1593              if (CF2Blank(isChecked)) {
1594                html += ` elHide`;
1595              }
1596              html += `"><div class="elProductCardOrdersWrapper"><div class="elProductCardTitle"><span>${otherTexts?.upgradesDowngradesReactivations?.manageSubscriptions}</span><div></div></div><div class="elProductCardOrders">`;
1597              const c18 = updatableOrders;
1598              const fl19 = new CF2ForloopDrop(c18.length);
1599              for (const order of c18) {
1600                const forloop = fl19;
1601                const orderIndex = forloop?.index0;
1602                html += `<div class="elProductCardOrder`;
1603                if (selectedOrderIndex == orderIndex) {
1604                  html += ` elProductCardOrderSelected`;
1605                }
1606                html += `" data-order-index="${orderIndex}"><div class="elProductCardOrderDetails"><div class="elProductCardOrderDetailsNumber"><i class="fas fa-receipt"></i><span>${otherTexts?.upgradesDowngradesReactivations?.order} ${order?.number}</span></div>`;
1607                if (order?.type == "reactivate") {
1608                  html += `<span class="elProductCardOrderDetailsReactivate"></span>`;
1609                } else {
1610                  html += `<span class="elProductCardOrderDetailsManage">${otherTexts?.upgradesDowngradesReactivations?.manage}</span>`;
1611                }
1612                html += `</div>`;
1613                if (selectedOrderIndex == orderIndex) {
1614                  html += `<div class="elProductCardOrderActions"><a data-page-element="LinkNode" class="elTypographyLink elProductCardShowOrderDetailsLink id-LinkNode" href="#show-selected-order-details" target="_self" data-show-button-ids="" data-hide-button-ids="" data-selected="${false}" data-liquid-replace="item"><span>${otherTexts?.upgradesDowngradesReactivations?.viewOrderDetails}</span></a>`;
1615                  if (order?.type == "upgradeDowngrade") {
1616                    const updatableItem = order?.updatableItems?.[selectedUpdatableCartItemIndex];
1617                    html += `<div class="elCustomSelect"><div class="elCustomSelectPreview"><span class="elCustomSelectPreviewText"><span class="elCustomSelectPreviewDirection" data-direction="${updatableItem?.direction}">${updatableItem?.direction} </span><span class="elCustomSelectPreviewInfo">${updatableItem?.variantName} - ${updatableItem?.priceName}</span></span><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div><select name="upgradeDowngrade">`;
1618                    const c20 = order.updatableItems;
1619                    const fl21 = new CF2ForloopDrop(c20.length);
1620                    for (const updatableItem2 of c20) {
1621                      const forloop2 = fl21;
1622                      const index = forloop2?.index0;
1623                      html += `<option `;
1624                      if (index == selectedUpdatableCartItemIndex) {
1625                        html += `selected`;
1626                      }
1627                      html += ` value="${index}">${updatableItem2?.direction}  ${updatableItem2?.variantName} - ${updatableItem2?.priceName}</option>`;
1628                      forloop2.next();
1629                    }
1630                    html += `</select></div>`;
1631                  } else {
1632                    if (customVariants?.length > 1) {
1633                      html += `<div class="elCustomSelect"><div class="elCustomSelectPreview"><span class="elCustomSelectPreviewText"><span class="elCustomSelectPreviewDirection" data-direction="Reactivate"></span><span class="elCustomSelectPreviewInfo">${variant?.name}</span></span><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div><select class="elVariantSelector">`;
1634                      const c22 = product.variants;
1635                      const fl23 = new CF2ForloopDrop(c22.length);
1636                      for (const product_variant of c22) {
1637                        const forloop2 = fl23;
1638                        let combined_variant_name = "";
1639                        const c24 = product.sorted_property_values;
1640                        const fl25 = new CF2ForloopDrop(c24.length);
1641                        for (const property_values of c24) {
1642                          const forloop3 = fl25;
1643                          const index0 = forloop3?.index0;
1644                          const property_id = property_values?.property_id;
1645                          const property_value_id = product_variant?.property_value_ids?.[index0];
1646                          if (combined_variant_name != "") {
1647                            combined_variant_name = combined_variant_name.toString().concat(", ");
1648                          }
1649                          combined_variant_name = combined_variant_name.toString().concat(product.all_properties[property_id]);
1650                          combined_variant_name = combined_variant_name.toString().concat(": ");
1651                          combined_variant_name = combined_variant_name.toString().concat(product.all_properties_values[property_value_id]);
1652                          forloop3.next();
1653                        }
1654                        html += `<option value="${product_variant?.property_value_ids}" `;
1655                        if (product_variant?.id == variant?.id) {
1656                          html += `selected`;
1657                        }
1658                        html += `>${combined_variant_name}</option>`;
1659                        forloop2.next();
1660                      }
1661                      html += `</select></div>`;
1662                    }
1663                    if (priceDisplayType == "single" && variant?.prices?.length > 1) {
1664                      html += `<div class="elProductSelectSelectorsWrapper"><div class="elSelectWrapper"><select name="variant_price">`;
1665                      const c26 = variant.prices;
1666                      const fl27 = new CF2ForloopDrop(c26.length);
1667                      for (const price of c26) {
1668                        const forloop2 = fl27;
1669                        html += `<option `;
1670                        if (selected_price?.id == price?.id) {
1671                          html += `selected`;
1672                        }
1673                        html += ` value="${price?.id}">${price?.name}</option>`;
1674                        forloop2.next();
1675                      }
1676                      html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div></div>`;
1677                    }
1678                  }
1679                  html += `</div>`;
1680                }
1681                html += `</div>`;
1682                forloop.next();
1683              }
1684              html += `</div></div>`;
1685              if (can_purchase_again) {
1686                html += `<div class="elProductCardNewOrderWrapper"><div class="elProductCardTitle"><span>${otherTexts?.upgradesDowngradesReactivations?.purchaseAgain}</span><div></div></div><div class="elProductCardNewOrder`;
1687                if (newOrder == true) {
1688                  html += ` elProductCardOrderSelected`;
1689                }
1690                html += `"><div class="elProductCardNewOrderTitle"><i class="fas fa-plus-circle"></i><span>${otherTexts?.upgradesDowngradesReactivations?.newOrder}</span></div>`;
1691                if (newOrder == true) {
1692                  html += `<div class="elProductCardOrderActions">`;
1693                  if (variantDisplay != "individual") {
1694                    if (customVariants?.length > 1) {
1695                      html += `<div class="elProductSelectSelectorsWrapper">`;
1696                      const c28 = product.sorted_property_values;
1697                      const fl29 = new CF2ForloopDrop(c28.length);
1698                      for (const property_values of c28) {
1699                        const forloop = fl29;
1700                        const property_id = property_values?.property_id;
1701                        const select_index = forloop?.index0;
1702                        html += `    `;
1703                        html += `<div class="elSelectWrapper"><select class="elVariantSelector" name="property_${property_id}">`;
1704                        const c30 = property_values.value_ids;
1705                        const fl31 = new CF2ForloopDrop(c30.length);
1706                        for (const value_id of c30) {
1707                          const forloop2 = fl31;
1708                          html += `<option `;
1709                          if (variant?.property_value_ids?.[select_index] == value_id) {
1710                            html += `selected`;
1711                          }
1712                          html += ` value="${value_id}">${product?.all_properties_values?.[value_id]}</option>`;
1713                          forloop2.next();
1714                        }
1715                        html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
1716                        forloop.next();
1717                      }
1718                      html += `</div>`;
1719                    }
1720                  }
1721                  if (priceDisplayType == "single" && variant?.prices?.length > 1) {
1722                    html += `<div class="elProductSelectSelectorsWrapper"><div class="elSelectWrapper"><select name="variant_price">`;
1723                    const c32 = variant.prices;
1724                    const fl33 = new CF2ForloopDrop(c32.length);
1725                    for (const price of c32) {
1726                      const forloop = fl33;
1727                      html += `<option `;
1728                      if (selected_price?.id == price?.id) {
1729                        html += `selected`;
1730                      }
1731                      html += ` value="${price?.id}">${price?.name}</option>`;
1732                      forloop.next();
1733                    }
1734                    html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div></div>`;
1735                  }
1736                  html += `</div>`;
1737                }
1738                html += `</div></div>`;
1739              }
1740              html += `</div>`;
1741            }
1742          }
1743        }
1744        html += `</div>`;
1745      } else if (layout == "grid") {
1746        html += `<div class="elProductLayoutBackground"></div>`;
1747        html += `<div class="elProductGridItem">`;
1748        if (selectType == "quantity") {
1749          html += `<div class="elProductInputWrapper elProductCardQuantityContainer"><div class="elProductInputControls"><button class="elProductCardInput">-</button><input class="elProductCardInput elProductCardShortInput" name="product" value="${quantity ?? 0}" min="0" type="number"/><button class="elProductCardInput">+</button></div></div>`;
1750        } else if (selectType == "quantity-forced") {
1751          html += `<div class="elProductInputWrapper elSelectWrapper elForcedQuantityWrapper"><select name="product" class="elProductCardInput elProductInputControls">`;
1752          const step = product?.step ?? 2;
1753          const min = product?.min ?? 0;
1754          const max = product?.max ?? 5;
1755          const item_count_step_1 = max - min;
1756          const item_count_step_2 = item_count_step_1 / step;
1757          const item_count_step_3 = item_count_step_2 | 0;
1758          const range = Array.apply(0, Array(item_count_step_3)).map((element, index) => index + 0);
1759          ;
1760          const c34 = range;
1761          const fl35 = new CF2ForloopDrop(c34.length);
1762          for (const i of c34) {
1763            const forloop = fl35;
1764            const value = i * step + min;
1765            html += `<option value="${value}">${value}</option>`;
1766            forloop.next();
1767          }
1768          html += `</select><div class="elSelectArrow elForcedQuantitySelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
1769        }
1770        const isClassic = layout == "classic";
1771        const isQuantityType = selectType == "quantity";
1772        html += `<div class="elProductCardSelectInput`;
1773        if (isClassic == false || isQuantityType == true) {
1774          html += ` hide`;
1775        }
1776        html += `">`;
1777        if (selectType == "single") {
1778          if (isChecked) {
1779            html += `<div data-page-element="Radio/V1" class="elRadioWrapper id-Radio/V1" data-liquid-replace="item" data-checked="true" data-trigger-click-on-wrapper="false"><label class="elRadioLabel"><input type="radio" value="" name="product" checked class="elRadioInput"/><div class="elRadio"><div class="elRadioIcon"></div></div><span class="elRadioText"></span></label></div>`;
1780          } else {
1781            html += `<div data-page-element="Radio/V1" class="elRadioWrapper id-Radio/V1" data-liquid-replace="item" data-checked="" data-trigger-click-on-wrapper="false"><label class="elRadioLabel"><input type="radio" value="" name="product"  class="elRadioInput"/><div class="elRadio"><div class="elRadioIcon"></div></div><span class="elRadioText"></span></label></div>`;
1782          }
1783        } else if (selectType == "multiple" || selectType == "quantity") {
1784          if (isChecked) {
1785            html += `<div data-page-element="Checkbox/V1" type="custom_type" class="elCheckboxWrapper elFormItemWrapper de-input-block id-Checkbox/V1" data-content="" data-liquid-replace="item" data-prevent-click-on-label="false" data-trigger-click-on-wrapper="false" data-checked="true"><label class="elCheckboxLabel"><input type="checkbox" value="${product?.id}" name="product" checked data-prevent-garlic="false" class="elCheckboxInput inputHolder"/><div class="elCheckbox"><div class="elCheckboxIcon"><div class="elCheckboxIconSquare hide"></div><i class="elCheckboxIconCheck fas fa-check"></i></div></div><span class="elCheckboxText"></span></label><div data-input-status-type="true" data-error-container="true"></div></div>`;
1786          } else {
1787            html += `<div data-page-element="Checkbox/V1" type="custom_type" class="elCheckboxWrapper elFormItemWrapper de-input-block id-Checkbox/V1" data-content="" data-liquid-replace="item" data-prevent-click-on-label="false" data-trigger-click-on-wrapper="false" data-checked=""><label class="elCheckboxLabel"><input type="checkbox" value="${product?.id}" name="product"  data-prevent-garlic="false" class="elCheckboxInput inputHolder"/><div class="elCheckbox"><div class="elCheckboxIcon"><div class="elCheckboxIconSquare hide"></div><i class="elCheckboxIconCheck fas fa-check"></i></div></div><span class="elCheckboxText"></span></label><div data-input-status-type="true" data-error-container="true"></div></div>`;
1788          }
1789        }
1790        html += `</div>`;
1791        if (showImage) {
1792          const imageUrl = variant?.image ?? product.image;
1793          if (imageUrl && imageUrl != "") {
1794            html += `<div class="elProductCardImage"><div data-page-element="Image/V2" class="elImageWrapper de-image-block id-Image/V2`;
1795            if (CF2Blank(imageUrl) && CF2Blank(null) && true) {
1796              html += ` forceHide`;
1797            }
1798            html += `" data-liquid-replace="item">`;
1799            if (imageUrl || !CF2Blank(null)) {
1800              html += `<img class="elImage" src="${imageUrl ?? null}" data-lazy-loading="true" data-lazy-loading="true"/>`;
1801            } else if (false) {
1802              html += `<div class="image-placeholder" title=""><span class="image-placeholder-header"></span></div>`;
1803            }
1804            html += `</div></div>`;
1805          }
1806        }
1807        html += `<div class="elProductCardNamePriceWrapper"><div class="elProductCardNameContainer">`;
1808        if (featured && highlight_text) {
1809          html += `<div class="elProductCardHighlight">${highlight_text}</div>`;
1810        }
1811        if (variantDisplay == "individual") {
1812          html += `<span class="elProductCardInfoName">${variant?.name}</span>`;
1813        } else if (customVariants?.length > 1) {
1814          html += `<span class="elProductCardInfoName">${product?.default_variant?.name}</span>`;
1815        } else {
1816          html += `<span class="elProductCardInfoName">${variant?.name}</span>`;
1817        }
1818        if (showDescription) {
1819          html += `<span class="elProductCardInfoDescription">${(product?.description_override ?? variant.description ?? product.default_variant.description ?? "").replaceAll(`
1820`, "<br>")}</span>`;
1821        }
1822        html += `</div><div class="elProductCardPriceContainer">`;
1823        if (priceDisplayType == "multiple") {
1824          if (variant?.prices?.length == 1) {
1825            html += `<div class="elProductCardInfoPrice">`;
1826            if (showCompareAtPrice) {
1827              const compare_at_amount = selected_price?.compare_at_amount;
1828              if (compare_at_amount) {
1829                html += `<span class="elProductCardAnchorPrice">${compare_at_amount}</span>`;
1830              }
1831            }
1832            html += `<span class="elProductCardFinalPrice">
1832${selected_price?.name}</span></div>`;
1833          } else {
1834            html += `<div class="elSelectWrapper"><select name="variant_price">`;
1835            const c36 = variant.prices;
1836            const fl37 = new CF2ForloopDrop(c36.length);
1837            for (const price of c36) {
1838              const forloop = fl37;
1839              html += `<option `;
1840              if (selected_price?.id == price?.id) {
1841                html += `selected`;
1842              }
1843              html += ` value="${price?.id}">${price?.name}</option>`;
1844              forloop.next();
1845            }
1846            html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
1847          }
1848        } else if (priceDisplayType == "single") {
1849          html += `<div class="elProductCardInfoPrice">`;
1850          if (showCompareAtPrice) {
1851            const compare_at_amount = selected_price?.compare_at_amount;
1852            if (compare_at_amount) {
1853              html += `<span class="elProductCardAnchorPrice">${compare_at_amount}</span>`;
1854            }
1855          }
1856          html += `<span class="elProductCardFinalPrice">${selected_price?.name}</span></div>`;
1857        }
1858        html += `</div></div></div>`;
1859        if (showProductVariantSelection && variantDisplay != "individual") {
1860          if (customVariants?.length > 1) {
1861            html += `<div class="elProductSelectSelectorsWrapper">`;
1862            const c38 = product.sorted_property_values;
1863            const fl39 = new CF2ForloopDrop(c38.length);
1864            for (const property_values of c38) {
1865              const forloop = fl39;
1866              const property_id = property_values?.property_id;
1867              const select_index = forloop?.index0;
1868              html += `    `;
1869              html += `<div class="elSelectWrapper"><select class="elVariantSelector" name="property_${property_id}">`;
1870              const c40 = property_values.value_ids;
1871              const fl41 = new CF2ForloopDrop(c40.length);
1872              for (const value_id of c40) {
1873                const forloop2 = fl41;
1874                html += `<option `;
1875                if (variant?.property_value_ids?.[select_index] == value_id) {
1876                  html += `selected`;
1877                }
1878                html += ` value="${value_id}">${product?.all_properties_values?.[value_id]}</option>`;
1879                forloop2.next();
1880              }
1881              html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
1882              forloop.next();
1883            }
1884            html += `</div>`;
1885          }
1886        }
1887        if (showManageOrders) {
1888          const amount_of_orders = updatableOrders?.length;
1889          if (amount_of_orders && amount_of_orders > 0) {
1890            if (variantDisplay == "individual") {
1891              const isCurrentPlan = individualDirection == "current";
1892              if (isCurrentPlan) {
1893                html += `<div class="elProductCardSubscriptionsBanner"><i class="fas fa-sync-alt"></i><span>Current plan</span>`;
1894                if (can_purchase_again) {
1895                  html += `<span class="elProductCardCurrentPlanSeparator">-</span>`;
1896                  html += `<div class="elProductCardNewOrder elProductCardPurchaseAgainInline"><span>Purchase Again</span></div>`;
1897                }
1898                html += `</div>`;
1899              } else {
1900                html += `<div class="elProductCardSubscriptionsBanner"><i class="fas fa-sync-alt"></i><span>${individualDirection}</span></div>`;
1901                html += `<div class="elProductCardManageOrders`;
1902                if (CF2Blank(isChecked)) {
1903                  html += ` elHide`;
1904                }
1905                html += `"><div class="elProductCardOrdersWrapper"><div class="elProductCardTitle"><span>${individualDirection} </span><div></div></div><div class="elProductCardOrders">`;
1906                const c42 = updatableOrders;
1907                const fl43 = new CF2ForloopDrop(c42.length);
1908                for (const order of c42) {
1909                  const forloop = fl43;
1910                  const orderIndex = forloop?.index0;
1911                  html += `<div class="elProductCardOrder`;
1912                  if (selectedOrderIndex == orderIndex) {
1913                    html += ` elProductCardOrderSelected`;
1914                  }
1915                  html += `" data-order-index="${orderIndex}"><div class="elProductCardOrderDetails"><div class="elProductCardOrderDetailsNumber"><i class="fas fa-receipt"></i><span>${otherTexts?.upgradesDowngradesReactivations?.order} ${order?.number}</span></div><span class="elProductCardOrderDetailsManage">${individualDirection}</span></div>`;
1916                  if (selectedOrderIndex == orderIndex) {
1917                    html += `<div class="elProductCardOrderActions"><a data-page-element="LinkNode" class="elTypographyLink elProductCardShowOrderDetailsLink id-LinkNode" href="#show-selected-order-details" target="_self" data-show-button-ids="" data-hide-button-ids="" data-selected="${false}" data-liquid-replace="item"><span>${otherTexts?.upgradesDowngradesReactivations?.viewOrderDetails}</span></a><span class="elProductCardDirectionBadge">${individualDirection}  ${variant?.name}
1917 - ${selected_price?.name}</span></div>`;
1918                  }
1919                  html += `</div>`;
1920                  forloop.next();
1921                }
1922                html += `</div></div>`;
1923                if (can_purchase_again) {
1924                  html += `<div class="elProductCardNewOrderWrapper"><div class="elProductCardTitle"><span>${otherTexts?.upgradesDowngradesReactivations?.purchaseAgain}</span><div></div></div><div class="elProductCardNewOrder`;
1925                  if (newOrder == true) {
1926                    html += ` elProductCardOrderSelected`;
1927                  }
1928                  html += `"><div class="elProductCardNewOrderTitle"><i class="fas fa-plus-circle"></i><span>${otherTexts?.upgradesDowngradesReactivations?.newOrder}</span></div>`;
1929                  if (newOrder == true) {
1930                    html += `<div class="elProductCardOrderActions">`;
1931                    if (variantDisplay != "individual") {
1932                      if (customVariants?.length > 1) {
1933                        html += `<div class="elProductSelectSelectorsWrapper">`;
1934                        const c44 = product.sorted_property_values;
1935                        const fl45 = new CF2ForloopDrop(c44.length);
1936                        for (const property_values of c44) {
1937                          const forloop = fl45;
1938                          const property_id = property_values?.property_id;
1939                          const select_index = forloop?.index0;
1940                          html += `    `;
1941                          html += `<div class="elSelectWrapper"><select class="elVariantSelector" name="property_${property_id}">`;
1942                          const c46 = property_values.value_ids;
1943                          const fl47 = new CF2ForloopDrop(c46.length);
1944                          for (const value_id of c46) {
1945                            const forloop2 = fl47;
1946                            html += `<option `;
1947                            if (variant?.property_value_ids?.[select_index] == value_id) {
1948                              html += `selected`;
1949                            }
1950                            html += ` value="${value_id}">${product?.all_properties_values?.[value_id]}</option>`;
1951                            forloop2.next();
1952                          }
1953                          html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
1954                          forloop.next();
1955                        }
1956                        html += `</div>`;
1957                      }
1958                    }
1959                    if (priceDisplayType == "single" && variant?.prices?.length > 1) {
1960                      html += `<div class="elProductSelectSelectorsWrapper"><div class="elSelectWrapper"><select name="variant_price">`;
1961                      const c48 = variant.prices;
1962                      const fl49 = new CF2ForloopDrop(c48.length);
1963                      for (const price of c48) {
1964                        const forloop = fl49;
1965                        html += `<option `;
1966                        if (selected_price?.id == price?.id) {
1967                          html += `selected`;
1968                        }
1969                        html += ` value="${price?.id}">${price?.name}</option>`;
1970                        forloop.next();
1971                      }
1972                      html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div></div>`;
1973                    }
1974                    html += `</div>`;
1975                  }
1976                  html += `</div></div>`;
1977                }
1978                html += `</div>`;
1979              }
1980            } else {
1981              let active_order = false;
1982              let canceled_order = false;
1983              const amount_of_orders2 = updatableOrders?.length;
1984              const c50 = updatableOrders;
1985              const fl51 = new CF2ForloopDrop(c50.length);
1986              for (const order of c50) {
1987                const forloop = fl51;
1988                if (order?.type == "reactivate") {
1989                  canceled_order = true;
1990                } else {
1991                  active_order = true;
1992                }
1993                forloop.next();
1994              }
1995              html += `<div class="elProductCardSubscriptionsBanner"><i class="fas fa-sync-alt"></i>`;
1996              if (active_order && canceled_order) {
1997                if (amount_of_orders2 > 1) {
1998                  html += `<span>${amount_of_orders2} ${otherTexts?.upgradesDowngradesReactivations?.multipleExistingSubscriptions}</span>`;
1999                } else {
2000                  html += `<span>${amount_of_orders2} ${otherTexts?.upgradesDowngradesReactivations?.singleExistingSubscription}</span>`;
2001                }
2002              } else if (canceled_order) {
2003                if (amount_of_orders2 > 1) {
2004                  html += `<span>${amount_of_orders2} </span>`;
2005                } else {
2006                  html += `<span>${amount_of_orders2} </span>`;
2007                }
2008              } else {
2009                if (amount_of_orders2 > 1) {
2010                  html += `<span>${amount_of_orders2} ${otherTexts?.upgradesDowngradesReactivations?.multipleActiveSubscriptions}</span>`;
2011                } else {
2012                  html += `<span>${amount_of_orders2} ${otherTexts?.upgradesDowngradesReactivations?.singleActiveSubscription}</span>`;
2013                }
2014              }
2015              html += `</div>`;
2016              html += `<div class="elProductCardManageOrders`;
2017              if (CF2Blank(isChecked)) {
2018                html += ` elHide`;
2019              }
2020              html += `"><div class="elProductCardOrdersWrapper"><div class="elProductCardTitle"><span>${otherTexts?.upgradesDowngradesReactivations?.manageSubscriptions}</span><div></div></div><div class="elProductCardOrders">`;
2021              const c52 = updatableOrders;
2022              const fl53 = new CF2ForloopDrop(c52.length);
2023              for (const order of c52) {
2024                const forloop = fl53;
2025                const orderIndex = forloop?.index0;
2026                html += `<div class="elProductCardOrder`;
2027                if (selectedOrderIndex == orderIndex) {
2028                  html += ` elProductCardOrderSelected`;
2029                }
2030                html += `" data-order-index="${orderIndex}"><div class="elProductCardOrderDetails"><div class="elProductCardOrderDetailsNumber"><i class="fas fa-receipt"></i><span>${otherTexts?.upgradesDowngradesReactivations?.order} ${order?.number}</span></div>`;
2031                if (order?.type == "reactivate") {
2032                  html += `<span class="elProductCardOrderDetailsReactivate"></span>`;
2033                } else {
2034                  html += `<span class="elProductCardOrderDetailsManage">${otherTexts?.upgradesDowngradesReactivations?.manage}</span>`;
2035                }
2036                html += `</div>`;
2037                if (selectedOrderIndex == orderIndex) {
2038                  html += `<div class="elProductCardOrderActions"><a data-page-element="LinkNode" class="elTypographyLink elProductCardShowOrderDetailsLink id-LinkNode" href="#show-selected-order-details" target="_self" data-show-button-ids="" data-hide-button-ids="" data-selected="${false}" data-liquid-replace="item"><span>${otherTexts?.upgradesDowngradesReactivations?.viewOrderDetails}</span></a>`;
2039                  if (order?.type == "upgradeDowngrade") {
2040                    const updatableItem = order?.updatableItems?.[selectedUpdatableCartItemIndex];
2041                    html += `<div class="elCustomSelect"><div class="elCustomSelectPreview"><span class="elCustomSelectPreviewText"><span class="elCustomSelectPreviewDirection" data-direction="${updatableItem?.direction}">${updatableItem?.direction} </span><span class="elCustomSelectPreviewInfo">${updatableItem?.variantName} - ${updatableItem?.priceName}</span></span><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div><select name="upgradeDowngrade">`;
2042                    const c54 = order.updatableItems;
2043                    const fl55 = new CF2ForloopDrop(c54.length);
2044                    for (const updatableItem2 of c54) {
2045                      const forloop2 = fl55;
2046                      const index = forloop2?.index0;
2047                      html += `<option `;
2048                      if (index == selectedUpdatableCartItemIndex) {
2049                        html += `selected`;
2050                      }
2051                      html += ` value="${index}">${updatableItem2?.direction}  ${updatableItem2?.variantName} - ${updatableItem2?.priceName}</option>`;
2052                      forloop2.next();
2053                    }
2054                    html += `</select></div>`;
2055                  } else {
2056                    if (customVariants?.length > 1) {
2057                      html += `<div class="elCustomSelect"><div class="elCustomSelectPreview"><span class="elCustomSelectPreviewText"><span class="elCustomSelectPreviewDirection" data-direction="Reactivate"></span><span class="elCustomSelectPreviewInfo">${variant?.name}</span></span><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div><select class="elVariantSelector">`;
2058                      const c56 = product.variants;
2059                      const fl57 = new CF2ForloopDrop(c56.length);
2060                      for (const product_variant of c56) {
2061                        const forloop2 = fl57;
2062                        let combined_variant_name = "";
2063                        const c58 = product.sorted_property_values;
2064                        const fl59 = new CF2ForloopDrop(c58.length);
2065                        for (const property_values of c58) {
2066                          const forloop3 = fl59;
2067                          const index0 = forloop3?.index0;
2068                          const property_id = property_values?.property_id;
2069                          const property_value_id = product_variant?.property_value_ids?.[index0];
2070                          if (combined_variant_name != "") {
2071                            combined_variant_name = combined_variant_name.toString().concat(", ");
2072                          }
2073                          combined_variant_name = combined_variant_name.toString().concat(product.all_properties[property_id]);
2074                          combined_variant_name = combined_variant_name.toString().concat(": ");
2075                          combined_variant_name = combined_variant_name.toString().concat(product.all_properties_values[property_value_id]);
2076                          forloop3.next();
2077                        }
2078                        html += `<option value="${product_variant?.property_value_ids}" `;
2079                        if (product_variant?.id == variant?.id) {
2080                          html += `selected`;
2081                        }
2082                        html += `>${combined_variant_name}</option>`;
2083                        forloop2.next();
2084                      }
2085                      html += `</select></div>`;
2086                    }
2087                    if (priceDisplayType == "single" && variant?.prices?.length > 1) {
2088                      html += `<div class="elProductSelectSelectorsWrapper"><div class="elSelectWrapper"><select name="variant_price">`;
2089                      const c60 = variant.prices;
2090                      const fl61 = new CF2ForloopDrop(c60.length);
2091                      for (const price of c60) {
2092                        const forloop2 = fl61;
2093                        html += `<option `;
2094                        if (selected_price?.id == price?.id) {
2095                          html += `selected`;
2096                        }
2097                        html += ` value="${price?.id}">${price?.name}</option>`;
2098                        forloop2.next();
2099                      }
2100                      html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div></div>`;
2101                    }
2102                  }
2103                  html += `</div>`;
2104                }
2105                html += `</div>`;
2106                forloop.next();
2107              }
2108              html += `</div></div>`;
2109              if (can_purchase_again) {
2110                html += `<div class="elProductCardNewOrderWrapper"><div class="elProductCardTitle"><span>${otherTexts?.upgradesDowngradesReactivations?.purchaseAgain}</span><div></div></div><div class="elProductCardNewOrder`;
2111                if (newOrder == true) {
2112                  html += ` elProductCardOrderSelected`;
2113                }
2114                html += `"><div class="elProductCardNewOrderTitle"><i class="fas fa-plus-circle"></i><span>${otherTexts?.upgradesDowngradesReactivations?.newOrder}</span></div>`;
2115                if (newOrder == true) {
2116                  html += `<div class="elProductCardOrderActions">`;
2117                  if (variantDisplay != "individual") {
2118                    if (customVariants?.length > 1) {
2119                      html += `<div class="elProductSelectSelectorsWrapper">`;
2120                      const c62 = product.sorted_property_values;
2121                      const fl63 = new CF2ForloopDrop(c62.length);
2122                      for (const property_values of c62) {
2123                        const forloop = fl63;
2124                        const property_id = property_values?.property_id;
2125                        const select_index = forloop?.index0;
2126                        html += `    `;
2127                        html += `<div class="elSelectWrapper"><select class="elVariantSelector" name="property_${property_id}">`;
2128                        const c64 = property_values.value_ids;
2129                        const fl65 = new CF2ForloopDrop(c64.length);
2130                        for (const value_id of c64) {
2131                          const forloop2 = fl65;
2132                          html += `<option `;
2133                          if (variant?.property_value_ids?.[select_index] == value_id) {
2134                            html += `selected`;
2135                          }
2136                          html += ` value="${value_id}">${product?.all_properties_values?.[value_id]}</option>`;
2137                          forloop2.next();
2138                        }
2139                        html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
2140                        forloop.next();
2141                      }
2142                      html += `</div>`;
2143                    }
2144                  }
2145                  if (priceDisplayType == "single" && variant?.prices?.length > 1) {
2146                    html += `<div class="elProductSelectSelectorsWrapper"><div class="elSelectWrapper"><select name="variant_price">`;
2147                    const c66 = variant.prices;
2148                    const fl67 = new CF2ForloopDrop(c66.length);
2149                    for (const price of c66) {
2150                      const forloop = fl67;
2151                      html += `<option `;
2152                      if (selected_price?.id == price?.id) {
2153                        html += `selected`;
2154                      }
2155                      html += ` value="${price?.id}">${price?.name}</option>`;
2156                      forloop.next();
2157                    }
2158                    html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div></div>`;
2159                  }
2160                  html += `</div>`;
2161                }
2162                html += `</div></div>`;
2163              }
2164              html += `</div>`;
2165            }
2166          }
2167        }
2168      } else {
2169        html += `<div class="elProductLayoutBackground"></div>`;
2170        if (selectType == "quantity") {
2171          html += `<div class="elProductInputWrapper elProductCardQuantityContainer"><div class="elProductInputControls"><button class="elProductCardInput">-</button><input class="elProductCardInput elProductCardShortInput" name="product" value="${quantity ?? 0}" min="0" type="number"/><button class="elProductCardInput">+</button></div></div>`;
2172        } else if (selectType == "quantity-forced") {
2173          html += `<div class="elProductInputWrapper elSelectWrapper elForcedQuantityWrapper"><select name="product" class="elProductCardInput elProductInputControls">`;
2174          const step = product?.step ?? 2;
2175          const min = product?.min ?? 0;
2176          const max = product?.max ?? 5;
2177          const item_count_step_1 = max - min;
2178          const item_count_step_2 = item_count_step_1 / step;
2179          const item_count_step_3 = item_count_step_2 | 0;
2180          const range = Array.apply(0, Array(item_count_step_3)).map((element, index) => index + 0);
2181          ;
2182          const c68 = range;
2183          const fl69 = new CF2ForloopDrop(c68.length);
2184          for (const i of c68) {
2185            const forloop = fl69;
2186            const value = i * step + min;
2187            html += `<option value="${value}">${value}</option>`;
2188            forloop.next();
2189          }
2190          html += `</select><div class="elSelectArrow elForcedQuantitySelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
2191        }
2192        const isClassic = layout == "classic";
2193        const isQuantityType = selectType == "quantity";
2194        html += `<div class="elProductCardSelectInput`;
2195        if (isClassic == false || isQuantityType == true) {
2196          html += ` hide`;
2197        }
2198        html += `">`;
2199        if (selectType == "single") {
2200          if (isChecked) {
2201            html += `<div data-page-element="Radio/V1" class="elRadioWrapper id-Radio/V1" data-liquid-replace="item" data-checked="true" data-trigger-click-on-wrapper="false"><label class="elRadioLabel"><input type="radio" value="" name="product" checked class="elRadioInput"/><div class="elRadio"><div class="elRadioIcon"></div></div><span class="elRadioText"></span></label></div>`;
2202          } else {
2203            html += `<div data-page-element="Radio/V1" class="elRadioWrapper id-Radio/V1" data-liquid-replace="item" data-checked="" data-trigger-click-on-wrapper="false"><label class="elRadioLabel"><input type="radio" value="" name="product"  class="elRadioInput"/><div class="elRadio"><div class="elRadioIcon"></div></div><span class="elRadioText"></span></label></div>`;
2204          }
2205        } else if (selectType == "multiple" || selectType == "quantity") {
2206          if (isChecked) {
2207            html += `<div data-page-element="Checkbox/V1" type="custom_type" class="elCheckboxWrapper elFormItemWrapper de-input-block id-Checkbox/V1" data-content="" data-liquid-replace="item" data-prevent-click-on-label="false" data-trigger-click-on-wrapper="false" data-checked="true"><label class="elCheckboxLabel"><input type="checkbox" value="${product?.id}" name="product" checked data-prevent-garlic="false" class="elCheckboxInput inputHolder"/><div class="elCheckbox"><div class="elCheckboxIcon"><div class="elCheckboxIconSquare hide"></div><i class="elCheckboxIconCheck fas fa-check"></i></div></div><span class="elCheckboxText"></span></label><div data-input-status-type="true" data-error-container="true"></div></div>`;
2208          } else {
2209            html += `<div data-page-element="Checkbox/V1" type="custom_type" class="elCheckboxWrapper elFormItemWrapper de-input-block id-Checkbox/V1" data-content="" data-liquid-replace="item" data-prevent-click-on-label="false" data-trigger-click-on-wrapper="false" data-checked=""><label class="elCheckboxLabel"><input type="checkbox" value="${product?.id}" name="product"  data-prevent-garlic="false" class="elCheckboxInput inputHolder"/><div class="elCheckbox"><div class="elCheckboxIcon"><div class="elCheckboxIconSquare hide"></div><i class="elCheckboxIconCheck fas fa-check"></i></div></div><span class="elCheckboxText"></span></label><div data-input-status-type="true" data-error-container="true"></div></div>`;
2210          }
2211        }
2212        html += `</div>`;
2213        if (showImage) {
2214          const imageUrl = variant?.image ?? product.image;
2215          if (imageUrl && imageUrl != "") {
2216            html += `<div class="elProductCardImage"><div data-page-element="Image/V2" class="elImageWrapper de-image-block id-Image/V2`;
2217            if (CF2Blank(imageUrl) && CF2Blank(null) && true) {
2218              html += ` forceHide`;
2219            }
2220            html += `" data-liquid-replace="item">`;
2221            if (imageUrl || !CF2Blank(null)) {
2222              html += `<img class="elImage" src="${imageUrl ?? null}" data-lazy-loading="true" data-lazy-loading="true"/>`;
2223            } else if (false) {
2224              html += `<div class="image-placeholder" title=""><span class="image-placeholder-header"></span></div>`;
2225            }
2226            html += `</div></div>`;
2227          }
2228        }
2229        html += `<div class="elProductCardNameContainer">`;
2230        if (featured && highlight_text) {
2231          html += `<div class="elProductCardHighlight">${highlight_text}</div>`;
2232        }
2233        if (variantDisplay == "individual") {
2234          html += `<span class="elProductCardInfoName">${variant?.name}</span>`;
2235        } else if (customVariants?.length > 1) {
2236          html += `<span class="elProductCardInfoName">${product?.default_variant?.name}</span>`;
2237        } else {
2238          html += `<span class="elProductCardInfoName">${variant?.name}</span>`;
2239        }
2240        if (showDescription) {
2241          html += `<span class="elProductCardInfoDescription">${(product?.description_override ?? variant.description ?? product.default_variant.description ?? "").replaceAll(`
2242`, "<br>")}</span>`;
2243        }
2244        html += `</div>`;
2245        html += `<div class="elProductCardPriceContainer">`;
2246        if (priceDisplayType == "multiple") {
2247          if (variant?.prices?.length == 1) {
2248            html += `<div class="elProductCardInfoPrice">`;
2249            if (showCompareAtPrice) {
2250              const compare_at_amount = selected_price?.compare_at_amount;
2251              if (compare_at_amount) {
2252                html += `<span class="elProductCardAnchorPrice">${compare_at_amount}</span>`;
2253              }
2254            }
2255            html += `<span class="elProductCardFinalPrice">
2255${selected_price?.name}</span></div>`;
2256          } else {
2257            html += `<div class="elSelectWrapper"><select name="variant_price">`;
2258            const c70 = variant.prices;
2259            const fl71 = new CF2ForloopDrop(c70.length);
2260            for (const price of c70) {
2261              const forloop = fl71;
2262              html += `<option `;
2263              if (selected_price?.id == price?.id) {
2264                html += `selected`;
2265              }
2266              html += ` value="${price?.id}">${price?.name}</option>`;
2267              forloop.next();
2268            }
2269            html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
2270          }
2271        } else if (priceDisplayType == "single") {
2272          html += `<div class="elProductCardInfoPrice">`;
2273          if (showCompareAtPrice) {
2274            const compare_at_amount = selected_price?.compare_at_amount;
2275            if (compare_at_amount) {
2276              html += `<span class="elProductCardAnchorPrice">${compare_at_amount}</span>`;
2277            }
2278          }
2279          html += `<span class="elProductCardFinalPrice">${selected_price?.name}</span></div>`;
2280        }
2281        html += `</div>`;
2282        if (showProductVariantSelection && variantDisplay != "individual") {
2283          if (customVariants?.length > 1) {
2284            html += `<div class="elProductSelectSelectorsWrapper">`;
2285            const c72 = product.sorted_property_values;
2286            const fl73 = new CF2ForloopDrop(c72.length);
2287            for (const property_values of c72) {
2288              const forloop = fl73;
2289              const property_id = property_values?.property_id;
2290              const select_index = forloop?.index0;
2291              html += `    `;
2292              html += `<div class="elSelectWrapper"><select class="elVariantSelector" name="property_${property_id}">`;
2293              const c74 = property_values.value_ids;
2294              const fl75 = new CF2ForloopDrop(c74.length);
2295              for (const value_id of c74) {
2296                const forloop2 = fl75;
2297                html += `<option `;
2298                if (variant?.property_value_ids?.[select_index] == value_id) {
2299                  html += `selected`;
2300                }
2301                html += ` value="${value_id}">${product?.all_properties_values?.[value_id]}</option>`;
2302                forloop2.next();
2303              }
2304              html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
2305              forloop.next();
2306            }
2307            html += `</div>`;
2308          }
2309        }
2310        if (showManageOrders) {
2311          const amount_of_orders = updatableOrders?.length;
2312          if (amount_of_orders && amount_of_orders > 0) {
2313            if (variantDisplay == "individual") {
2314              const isCurrentPlan = individualDirection == "current";
2315              if (isCurrentPlan) {
2316                html += `<div class="elProductCardSubscriptionsBanner"><i class="fas fa-sync-alt"></i><span>Current plan</span>`;
2317                if (can_purchase_again) {
2318                  html += `<span class="elProductCardCurrentPlanSeparator">-</span>`;
2319                  html += `<div class="elProductCardNewOrder elProductCardPurchaseAgainInline"><span>Purchase Again</span></div>`;
2320                }
2321                html += `</div>`;
2322              } else {
2323                html += `<div class="elProductCardSubscriptionsBanner"><i class="fas fa-sync-alt"></i><span>${individualDirection}</span></div>`;
2324                html += `<div class="elProductCardManageOrders`;
2325                if (CF2Blank(isChecked)) {
2326                  html += ` elHide`;
2327                }
2328                html += `"><div class="elProductCardOrdersWrapper"><div class="elProductCardTitle"><span>${individualDirection} </span><div></div></div><div class="elProductCardOrders">`;
2329                const c76 = updatableOrders;
2330                const fl77 = new CF2ForloopDrop(c76.length);
2331                for (const order of c76) {
2332                  const forloop = fl77;
2333                  const orderIndex = forloop?.index0;
2334                  html += `<div class="elProductCardOrder`;
2335                  if (selectedOrderIndex == orderIndex) {
2336                    html += ` elProductCardOrderSelected`;
2337                  }
2338                  html += `" data-order-index="${orderIndex}"><div class="elProductCardOrderDetails"><div class="elProductCardOrderDetailsNumber"><i class="fas fa-receipt"></i><span>${otherTexts?.upgradesDowngradesReactivations?.order} ${order?.number}</span></div><span class="elProductCardOrderDetailsManage">${individualDirection}</span></div>`;
2339                  if (selectedOrderIndex == orderIndex) {
2340                    html += `<div class="elProductCardOrderActions"><a data-page-element="LinkNode" class="elTypographyLink elProductCardShowOrderDetailsLink id-LinkNode" href="#show-selected-order-details" target="_self" data-show-button-ids="" data-hide-button-ids="" data-selected="${false}" data-liquid-replace="item"><span>${otherTexts?.upgradesDowngradesReactivations?.viewOrderDetails}</span></a><span class="elProductCardDirectionBadge">${individualDirection}  ${variant?.name}
2340 - ${selected_price?.name}</span></div>`;
2341                  }
2342                  html += `</div>`;
2343                  forloop.next();
2344                }
2345                html += `</div></div>`;
2346                if (can_purchase_again) {
2347                  html += `<div class="elProductCardNewOrderWrapper"><div class="elProductCardTitle"><span>${otherTexts?.upgradesDowngradesReactivations?.purchaseAgain}</span><div></div></div><div class="elProductCardNewOrder`;
2348                  if (newOrder == true) {
2349                    html += ` elProductCardOrderSelected`;
2350                  }
2351                  html += `"><div class="elProductCardNewOrderTitle"><i class="fas fa-plus-circle"></i><span>${otherTexts?.upgradesDowngradesReactivations?.newOrder}</span></div>`;
2352                  if (newOrder == true) {
2353                    html += `<div class="elProductCardOrderActions">`;
2354                    if (variantDisplay != "individual") {
2355                      if (customVariants?.length > 1) {
2356                        html += `<div class="elProductSelectSelectorsWrapper">`;
2357                        const c78 = product.sorted_property_values;
2358                        const fl79 = new CF2ForloopDrop(c78.length);
2359                        for (const property_values of c78) {
2360                          const forloop = fl79;
2361                          const property_id = property_values?.property_id;
2362                          const select_index = forloop?.index0;
2363                          html += `    `;
2364                          html += `<div class="elSelectWrapper"><select class="elVariantSelector" name="property_${property_id}">`;
2365                          const c80 = property_values.value_ids;
2366                          const fl81 = new CF2ForloopDrop(c80.length);
2367                          for (const value_id of c80) {
2368                            const forloop2 = fl81;
2369                            html += `<option `;
2370                            if (variant?.property_value_ids?.[select_index] == value_id) {
2371                              html += `selected`;
2372                            }
2373                            html += ` value="${value_id}">${product?.all_properties_values?.[value_id]}</option>`;
2374                            forloop2.next();
2375                          }
2376                          html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
2377                          forloop.next();
2378                        }
2379                        html += `</div>`;
2380                      }
2381                    }
2382                    if (priceDisplayType == "single" && variant?.prices?.length > 1) {
2383                      html += `<div class="elProductSelectSelectorsWrapper"><div class="elSelectWrapper"><select name="variant_price">`;
2384                      const c82 = variant.prices;
2385                      const fl83 = new CF2ForloopDrop(c82.length);
2386                      for (const price of c82) {
2387                        const forloop = fl83;
2388                        html += `<option `;
2389                        if (selected_price?.id == price?.id) {
2390                          html += `selected`;
2391                        }
2392                        html += ` value="${price?.id}">${price?.name}</option>`;
2393                        forloop.next();
2394                      }
2395                      html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div></div>`;
2396                    }
2397                    html += `</div>`;
2398                  }
2399                  html += `</div></div>`;
2400                }
2401                html += `</div>`;
2402              }
2403            } else {
2404              let active_order = false;
2405              let canceled_order = false;
2406              const amount_of_orders2 = updatableOrders?.length;
2407              const c84 = updatableOrders;
2408              const fl85 = new CF2ForloopDrop(c84.length);
2409              for (const order of c84) {
2410                const forloop = fl85;
2411                if (order?.type == "reactivate") {
2412                  canceled_order = true;
2413                } else {
2414                  active_order = true;
2415                }
2416                forloop.next();
2417              }
2418              html += `<div class="elProductCardSubscriptionsBanner"><i class="fas fa-sync-alt"></i>`;
2419              if (active_order && canceled_order) {
2420                if (amount_of_orders2 > 1) {
2421                  html += `<span>${amount_of_orders2} ${otherTexts?.upgradesDowngradesReactivations?.multipleExistingSubscriptions}</span>`;
2422                } else {
2423                  html += `<span>${amount_of_orders2} ${otherTexts?.upgradesDowngradesReactivations?.singleExistingSubscription}</span>`;
2424                }
2425              } else if (canceled_order) {
2426                if (amount_of_orders2 > 1) {
2427                  html += `<span>${amount_of_orders2} </span>`;
2428                } else {
2429                  html += `<span>${amount_of_orders2} </span>`;
2430                }
2431              } else {
2432                if (amount_of_orders2 > 1) {
2433                  html += `<span>${amount_of_orders2} ${otherTexts?.upgradesDowngradesReactivations?.multipleActiveSubscriptions}</span>`;
2434                } else {
2435                  html += `<span>${amount_of_orders2} ${otherTexts?.upgradesDowngradesReactivations?.singleActiveSubscription}</span>`;
2436                }
2437              }
2438              html += `</div>`;
2439              html += `<div class="elProductCardManageOrders`;
2440              if (CF2Blank(isChecked)) {
2441                html += ` elHide`;
2442              }
2443              html += `"><div class="elProductCardOrdersWrapper"><div class="elProductCardTitle"><span>${otherTexts?.upgradesDowngradesReactivations?.manageSubscriptions}</span><div></div></div><div class="elProductCardOrders">`;
2444              const c86 = updatableOrders;
2445              const fl87 = new CF2ForloopDrop(c86.length);
2446              for (const order of c86) {
2447                const forloop = fl87;
2448                const orderIndex = forloop?.index0;
2449                html += `<div class="elProductCardOrder`;
2450                if (selectedOrderIndex == orderIndex) {
2451                  html += ` elProductCardOrderSelected`;
2452                }
2453                html += `" data-order-index="${orderIndex}"><div class="elProductCardOrderDetails"><div class="elProductCardOrderDetailsNumber"><i class="fas fa-receipt"></i><span>${otherTexts?.upgradesDowngradesReactivations?.order} ${order?.number}</span></div>`;
2454                if (order?.type == "reactivate") {
2455                  html += `<span class="elProductCardOrderDetailsReactivate"></span>`;
2456                } else {
2457                  html += `<span class="elProductCardOrderDetailsManage">${otherTexts?.upgradesDowngradesReactivations?.manage}</span>`;
2458                }
2459                html += `</div>`;
2460                if (selectedOrderIndex == orderIndex) {
2461                  html += `<div class="elProductCardOrderActions"><a data-page-element="LinkNode" class="elTypographyLink elProductCardShowOrderDetailsLink id-LinkNode" href="#show-selected-order-details" target="_self" data-show-button-ids="" data-hide-button-ids="" data-selected="${false}" data-liquid-replace="item"><span>${otherTexts?.upgradesDowngradesReactivations?.viewOrderDetails}</span></a>`;
2462                  if (order?.type == "upgradeDowngrade") {
2463                    const updatableItem = order?.updatableItems?.[selectedUpdatableCartItemIndex];
2464                    html += `<div class="elCustomSelect"><div class="elCustomSelectPreview"><span class="elCustomSelectPreviewText"><span class="elCustomSelectPreviewDirection" data-direction="${updatableItem?.direction}">${updatableItem?.direction} </span><span class="elCustomSelectPreviewInfo">${updatableItem?.variantName} - ${updatableItem?.priceName}</span></span><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div><select name="upgradeDowngrade">`;
2465                    const c88 = order.updatableItems;
2466                    const fl89 = new CF2ForloopDrop(c88.length);
2467                    for (const updatableItem2 of c88) {
2468                      const forloop2 = fl89;
2469                      const index = forloop2?.index0;
2470                      html += `<option `;
2471                      if (index == selectedUpdatableCartItemIndex) {
2472                        html += `selected`;
2473                      }
2474                      html += ` value="${index}">${updatableItem2?.direction}  ${updatableItem2?.variantName} - ${updatableItem2?.priceName}</option>`;
2475                      forloop2.next();
2476                    }
2477                    html += `</select></div>`;
2478                  } else {
2479                    if (customVariants?.length > 1) {
2480                      html += `<div class="elCustomSelect"><div class="elCustomSelectPreview"><span class="elCustomSelectPreviewText"><span class="elCustomSelectPreviewDirection" data-direction="Reactivate"></span><span class="elCustomSelectPreviewInfo">${variant?.name}</span></span><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div><select class="elVariantSelector">`;
2481                      const c90 = product.variants;
2482                      const fl91 = new CF2ForloopDrop(c90.length);
2483                      for (const product_variant of c90) {
2484                        const forloop2 = fl91;
2485                        let combined_variant_name = "";
2486                        const c92 = product.sorted_property_values;
2487                        const fl93 = new CF2ForloopDrop(c92.length);
2488                        for (const property_values of c92) {
2489                          const forloop3 = fl93;
2490                          const index0 = forloop3?.index0;
2491                          const property_id = property_values?.property_id;
2492                          const property_value_id = product_variant?.property_value_ids?.[index0];
2493                          if (combined_variant_name != "") {
2494                            combined_variant_name = combined_variant_name.toString().concat(", ");
2495                          }
2496                          combined_variant_name = combined_variant_name.toString().concat(product.all_properties[property_id]);
2497                          combined_variant_name = combined_variant_name.toString().concat(": ");
2498                          combined_variant_name = combined_variant_name.toString().concat(product.all_properties_values[property_value_id]);
2499                          forloop3.next();
2500                        }
2501                        html += `<option value="${product_variant?.property_value_ids}" `;
2502                        if (product_variant?.id == variant?.id) {
2503                          html += `selected`;
2504                        }
2505                        html += `>${combined_variant_name}</option>`;
2506                        forloop2.next();
2507                      }
2508                      html += `</select></div>`;
2509                    }
2510                    if (priceDisplayType == "single" && variant?.prices?.length > 1) {
2511                      html += `<div class="elProductSelectSelectorsWrapper"><div class="elSelectWrapper"><select name="variant_price">`;
2512                      const c94 = variant.prices;
2513                      const fl95 = new CF2ForloopDrop(c94.length);
2514                      for (const price of c94) {
2515                        const forloop2 = fl95;
2516                        html += `<option `;
2517                        if (selected_price?.id == price?.id) {
2518                          html += `selected`;
2519                        }
2520                        html += ` value="${price?.id}">${price?.name}</option>`;
2521                        forloop2.next();
2522                      }
2523                      html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div></div>`;
2524                    }
2525                  }
2526                  html += `</div>`;
2527                }
2528                html += `</div>`;
2529                forloop.next();
2530              }
2531              html += `</div></div>`;
2532              if (can_purchase_again) {
2533                html += `<div class="elProductCardNewOrderWrapper"><div class="elProductCardTitle"><span>${otherTexts?.upgradesDowngradesReactivations?.purchaseAgain}</span><div></div></div><div class="elProductCardNewOrder`;
2534                if (newOrder == true) {
2535                  html += ` elProductCardOrderSelected`;
2536                }
2537                html += `"><div class="elProductCardNewOrderTitle"><i class="fas fa-plus-circle"></i><span>${otherTexts?.upgradesDowngradesReactivations?.newOrder}</span></div>`;
2538                if (newOrder == true) {
2539                  html += `<div class="elProductCardOrderActions">`;
2540                  if (variantDisplay != "individual") {
2541                    if (customVariants?.length > 1) {
2542                      html += `<div class="elProductSelectSelectorsWrapper">`;
2543                      const c96 = product.sorted_property_values;
2544                      const fl97 = new CF2ForloopDrop(c96.length);
2545                      for (const property_values of c96) {
2546                        const forloop = fl97;
2547                        const property_id = property_values?.property_id;
2548                        const select_index = forloop?.index0;
2549                        html += `    `;
2550                        html += `<div class="elSelectWrapper"><select class="elVariantSelector" name="property_${property_id}">`;
2551                        const c98 = property_values.value_ids;
2552                        const fl99 = new CF2ForloopDrop(c98.length);
2553                        for (const value_id of c98) {
2554                          const forloop2 = fl99;
2555                          html += `<option `;
2556                          if (variant?.property_value_ids?.[select_index] == value_id) {
2557                            html += `selected`;
2558                          }
2559                          html += ` value="${value_id}">${product?.all_properties_values?.[value_id]}</option>`;
2560                          forloop2.next();
2561                        }
2562                        html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
2563                        forloop.next();
2564                      }
2565                      html += `</div>`;
2566                    }
2567                  }
2568                  if (priceDisplayType == "single" && variant?.prices?.length > 1) {
2569                    html += `<div class="elProductSelectSelectorsWrapper"><div class="elSelectWrapper"><select name="variant_price">`;
2570                    const c100 = variant.prices;
2571                    const fl101 = new CF2ForloopDrop(c100.length);
2572                    for (const price of c100) {
2573                      const forloop = fl101;
2574                      html += `<option `;
2575                      if (selected_price?.id == price?.id) {
2576                        html += `selected`;
2577                      }
2578                      html += ` value="${price?.id}">${price?.name}</option>`;
2579                      forloop.next();
2580                    }
2581                    html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div></div>`;
2582                  }
2583                  html += `</div>`;
2584                }
2585                html += `</div></div>`;
2586              }
2587              html += `</div>`;
2588            }
2589          }
2590        }
2591      }
2592    }
2593    this.replaceContent(html);
2594    if (initializeChildrenInstances) {
2595      const scopeToYggRender = this.element.querySelectorAll("[ygg-render]").length > 0;
2596      const options = { scopeToYggRender };
2597      CF2Component.hydrateTree(this.element, options);
2598    }
2599  }
2600};
2601registerComponent("CheckoutProductCard/V2", CheckoutProductCardV2);
2602window["CheckoutProductCardV2"] = CheckoutProductCardV2;
2603
2604// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-product-select-v2.ts
2605init_define_process();
2606
2607// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/CheckoutProductSelect/V2/checkoutProductSelect.ts
2608init_define_process();
2609init_general();
2610init_nanostores();
2611init_addToCart();
2612
2613// projects/lib/packages/yggdrasil-liquidjs/src/shared/index.ts
2614init_define_process();
2615
2616// projects/lib/packages/yggdrasil-liquidjs/src/shared/product.ts
2617init_define_process();
2618function get_available_variant(product) {
2619  if (product?.sorted_property_values?.length) {
2620    const allOrderedVariantCombinations = product.sorted_property_values.map((p) => p.value_ids).reduce((a, b) => a.reduce((r, v) => r.concat(b.map((w) => [].concat(v, w))), []));
2621    const availableCombination = allOrderedVariantCombinations?.find((combination) => {
2622      const availableCombinationIdentifier = Array.isArray(combination) ? combination.join(",") : combination;
2623      return product.property_values_variant_mapping[availableCombinationIdentifier];
2624    });
2625    const variantId = product.property_values_variant_mapping[availableCombination];
2626    return product.variants.find((v) => v.id === String(variantId)) ?? product.variants?.[0];
2627  }
2628  return product?.variants?.[0];
2629}
2630
2631// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/CheckoutProductSelect/V2/checkoutProductSelect.ts
2632var registerProductEventListeners = (pcc) => {
2633  registerUpdatableOrders(pcc);
2634  registerVariantEventListeners(pcc);
2635};
2636var updateCardByProductIdState = (key, data) => {
2637  const oldState = productCardByProductId.get()[key];
2638  const newState = cleanEmptyObjectKeys({ ...oldState, ...data });
2639  productCardByProductId.setKey(key, newState);
2640  const productId = key.includes(":") ? key.split(":")[0] : key;
2641  updateProductCarousel(productId, newState.variantId);
2642};
2643var unselectAllProducts = () => {
2644  for (const [productId, oldState] of Object.entries(productCardByProductId.get())) {
2645    const newState = cleanEmptyObjectKeys({ ...oldState, quantity: 0 });
2646    productCardByProductId.setKey(productId, newState);
2647  }
2648};
2649var updateProductCarousel = (productId, variantId) => {
2650  document.dispatchEvent(
2651    new CustomEvent("ProductCarousel:Update", {
2652      detail: {
2653        productId,
2654        variantId
2655      }
2656    })
2657  );
2658};
2659var getCompositeKeysForProduct = (productId) => {
2660  const state = productCardByProductId.get();
2661  return Object.keys(state).filter((k) => k.startsWith(`${productId}:`));
2662};
2663var getCardStateKey = (pcc) => {
2664  if (pcc.individualVariantId) {
2665    return `${pcc.product.id}:${pcc.individualVariantId}`;
2666  }
2667  return pcc.product.id;
2668};
2669var initIndividualVariantState = () => {
2670  const currentState = productCardByProductId.get();
2671  const products = globalThis.globalResourceData.products?.filter((p) => !p.bump) ?? [];
2672  for (const product of products) {
2673    const customVariants = product.variants.filter((v) => !v.default_variant);
2674    if (customVariants.length <= 1) continue;
2675    const firstCompositeKey = `${product.id}:${customVariants[0].id}`;
2676    if (currentState[firstCompositeKey] !== void 0) continue;
2677    const existingEntry = currentState[product.id];
2678    for (const variant of customVariants) {
2679      const compositeKey = `${product.id}:${variant.id}`;
2680      const isSelected = existingEntry?.variantId == variant.id;
2681      productCardByProductId.setKey(compositeKey, {
2682        variantId: variant.id,
2683        priceId: variant.prices[0]?.id,
2684        quantity: isSelected ? existingEntry.quantity : 0
2685      });
2686    }
2687    productCardByProductId.setKey(product.id, {
2688      variantId: existingEntry?.variantId,
2689      priceId: existingEntry?.priceId,
2690      quantity: 0
2691    });
2692  }
2693};
2694var getProductCardByProductId = () => {
2695  const productCardByProductId2 = globalThis.globalResourceData.products?.reduce((acc, product) => {
2696    const variant = get_available_variant(product);
2697    const price = variant.prices[0];
2698    acc[product.id] = {
2699      variantId: variant.id,
2700      priceId: price.id,
2701      quantity: 0
2702    };
2703    return acc;
2704  }, {});
2705  const productVariantWithNoBump = globalThis.globalResourceData.productVariantWithNoBump;
2706  let selectedVariantId, selectedPriceId, selectedProductId;
2707  if (productVariantWithNoBump) {
2708    selectedProductId = productVariantWithNoBump.product_id;
2709    selectedVariantId = productVariantWithNoBump.id;
2710    selectedPriceId = productVariantWithNoBump.prices?.[0].id;
2711  }
2712  const productCardItem = productCardByProductId2[selectedProductId];
2713  if (productCardItem) {
2714    const product = globalThis.globalResourceData.products?.find((p) => p.id === selectedProductId);
2715    const variant = product?.variants?.find((variant2) => variant2.id === selectedVariantId);
2716    if (variant) {
2717      const price = variant?.prices?.find((price2) => price2.id === selectedPriceId);
2718      if (price) {
2719        productCardByProductId2[selectedProductId] = {
2720          variantId: variant.id,
2721          priceId: price.id,
2722          quantity: 1
2723        };
2724      }
2725    }
2726  }
2727  return productCardByProductId2;
2728};
2729var productCardByProductId = map(getProductCardByProductId());
2730var sameItem = (v1, v2) => v1.type == v2.type && v1.line_item_id == v2.line_item_id && v1.product_id == v2.product_id && v1.variant_id == v2.variant_id && v1.price_id == v2.price_id && v1.quantity == v2.quantity;
2731var calculateCart = (prevCart, productCardByProductId2) => {
2732  if (globalThis.globalResourceData.cart) return structuredClone(globalThis.globalResourceData.cart);
2733  let order_id;
2734  const items = Object.entries(productCardByProductId2).filter(([, v]) => v && v.quantity > 0).map(([key, v]) => {
2735    order_id = order_id ?? v.cartItemOrderId;
2736    const productId = key.includes(":") ? key.split(":")[0] : key;
2737    return {
2738      type: v.cartItemRenderType,
2739      line_item_id: v.cartItemLineItemId,
2740      product_id: productId,
2741      variant_id: v.variantId,
2742      price_id: v.priceId,
2743      quantity: v.quantity
2744    };
2745  });
2746  const nextCart = {
2747    order_id,
2748    items
2749  };
2750  const isEqual2 = prevCart.cart && prevCart.cart.order_id == nextCart.order_id && prevCart.cart.items.length == nextCart.items.length && prevCart.cart.items.every((oldItem, idx) => sameItem(oldItem, nextCart.items[idx]));
2751  if (!isEqual2) {
2752    prevCart.cart = nextCart;
2753  }
2754  return prevCart.cart;
2755};
2756var buildProductSelectComputed = () => {
2757  const prevCart = { cart: null };
2758  return computed(
2759    productCardByProductId,
2760    (productCardByProductId2) => calculateCart(prevCart, productCardByProductId2)
2761  );
2762};
2763var buildProductSelectBatched = () => {
2764  const prevCart = { cart: null };
2765  return batched(
2766    productCardByProductId,
2767    (productCardByProductId2) => calculateCart(prevCart, productCardByProductId2)
2768  );
2769};
2770var anyUpdatableOrders = () => {
2771  return Object.values(productCardByProductId.get()).some((v) => v.updatableOrders);
2772};
2773var registerOneTimeCardElementListeners = (productCardComponents, onMountCallback) => {
2774  productCardComponents.forEach((pcc) => {
2775    renderPcc(pcc, onMountCallback);
2776  });
2777  productCardByProductId.listen(() => {
2778    productCardComponents.forEach((pcc) => {
2779      renderPcc(pcc, onMountCallback);
2780    });
2781  });
2782  productCardComponents.forEach((pcc) => {
2783    const element = pcc.element;
2784    element.addEventListener("click", (evt) => {
2785      if (pcc.selectType == "quantity") return;
2786      const button = evt.target.closest("a");
2787      if (button && !button.closest(".elProductCardModernButton")) return;
2788      const cardKey = getCardStateKey(pcc);
2789      if (pcc.selectType == "single") {
2790        for (const otherPcc of productCardComponents) {
2791          if (otherPcc == pcc || !otherPcc.isChecked) continue;
2792          updateCardByProductIdState(getCardStateKey(otherPcc), { quantity: 0 });
2793        }
2794        if (pcc.id.includes("Bump")) {
2795          if (pcc.isChecked) {
2796            updateCardByProductIdState(cardKey, { quantity: 0 });
2797          } else {
2798            updateCardByProductIdState(cardKey, { quantity: 1 });
2799          }
2800        } else {
2801          updateCardByProductIdState(cardKey, { quantity: 1 });
2802        }
2803      } else if (pcc.selectType == "multiple") {
2804        if (pcc.isChecked) {
2805          updateCardByProductIdState(cardKey, { quantity: 0 });
2806        } else {
2807          updateCardByProductIdState(cardKey, { quantity: 1 });
2808        }
2809      }
2810    });
2811  });
2812};
2813var registerEventListeners = (pcc, onMountCallback) => {
2814  registerPriceEventListeners(pcc);
2815  if (onMountCallback) onMountCallback(pcc);
2816  if (pcc.selectType == "quantity") {
2817    registerQuantityEventListeners(pcc);
2818  }
2819};
2820var registerVariantEventListeners = (pcc) => {
2821  const element = pcc.element;
2822  const variantSelects = element.querySelectorAll(".elVariantSelector");
2823  variantSelects.forEach((select, index) => {
2824    select.addEventListener("click", (evt) => {
2825      evt.stopImmediatePropagation();
2826      evt.stopPropagation();
2827      evt.preventDefault();
2828    });
2829    select.addEventListener("change", (evt) => {
2830      evt.stopImmediatePropagation();
2831      evt.stopPropagation();
2832      evt.preventDefault();
2833      const newValues = [...variantSelects].map((e) => e.value);
2834      const selectedVariantId = getSelectedVariant(pcc, index, newValues);
2835      const newVariant = pcc.product.variants.find((v) => v.id == String(selectedVariantId));
2836      const newPrice = newVariant.prices[0];
2837      updateCardByProductIdState(getCardStateKey(pcc), {
2838        variantId: newVariant.id,
2839        priceId: newPrice.id
2840      });
2841    });
2842  });
2843};
2844var registerUpdatableOrders = (pcc) => {
2845  const element = pcc.element;
2846  const previousOrders = element.querySelectorAll(".elProductCardOrder");
2847  const newOrder = element.querySelector(".elProductCardNewOrder");
2848  previousOrders?.forEach((orderElement) => {
2849    const showOrderDetailsLink = orderElement.querySelector(".elProductCardShowOrderDetailsLink");
2850    const upgradeAndDowngradeSelector = orderElement.querySelector('[name="upgradeDowngrade"]');
2851    const orderIndex = Number(orderElement.getAttribute("data-order-index"));
2852    const order = pcc.updatableOrders[orderIndex];
2853    orderElement.addEventListener("click", (evt) => {
2854      evt.stopImmediatePropagation();
2855      evt.stopPropagation();
2856      evt.preventDefault();
2857      const cardKey = getCardStateKey(pcc);
2858      const renderType = order.type;
2859      const cardDetails = pcc.updatableOrders[orderIndex].updatableItems[0].cardDetails;
2860      const updateCardNewState = {
2861        selectedOrderIndex: orderIndex,
2862        selectedUpdatableCartItemIndex: 0,
2863        renderType,
2864        variantId: cardDetails.variantId,
2865        priceId: cardDetails.priceId,
2866        cartItemRenderType: renderType,
2867        cartItemOrderId: cardDetails.orderId,
2868        cartItemLineItemId: cardDetails.lineItemId
2869      };
2870      updateCardByProductIdState(cardKey, updateCardNewState);
2871    });
2872    showOrderDetailsLink?.addEventListener("click", (evt) => {
2873      evt.stopImmediatePropagation();
2874      evt.stopPropagation();
2875      evt.preventDefault();
2876      globalThis.Checkout.store.selectedOrderDetailId.set(order.id);
2877    });
2878    upgradeAndDowngradeSelector?.addEventListener("click", (evt) => {
2879      evt.preventDefault();
2880      evt.stopImmediatePropagation();
2881      evt.stopPropagation();
2882    });
2883    upgradeAndDowngradeSelector?.addEventListener("change", (evt) => {
2884      evt.stopImmediatePropagation();
2885      evt.stopPropagation();
2886      evt.preventDefault();
2887      const updatableItemIndex = Number(evt.target.value);
2888      const cardDetails = order.updatableItems[updatableItemIndex].cardDetails;
2889      const updateCardNewState = {
2890        selectedUpdatableCartItemIndex: updatableItemIndex,
2891        variantId: cardDetails.variantId,
2892        priceId: cardDetails.priceId,
2893        cartItemOrderId: cardDetails.orderId,
2894        cartItemLineItemId: cardDetails.lineItemId
2895      };
2896      updateCardByProductIdState(getCardStateKey(pcc), updateCardNewState);
2897    });
2898  });
2899  newOrder?.addEventListener("click", () => {
2900    const variant = pcc.individualVariantId ? pcc.product.variants.find((v) => v.id == pcc.individualVariantId) ?? pcc.product.variants[0] : pcc.product.variants[0];
2901    const variantId = variant.id;
2902    const priceId = variant.prices[0].id;
2903    const updateCardNewState = {
2904      variantId,
2905      priceId,
2906      selectedOrderIndex: -1,
2907      selectedUpdatableCartItemIndex: 0,
2908      cartItemRenderType: void 0,
2909      cartItemOrderId: void 0,
2910      cartItemLineItemId: void 0
2911    };
2912    updateCardByProductIdState(getCardStateKey(pcc), updateCardNewState);
2913  });
2914};
2915var registerPriceEventListeners = (pcc) => {
2916  const element = pcc.element;
2917  const variantPriceSelector = element.querySelector('[name="variant_price"]');
2918  variantPriceSelector?.addEventListener("click", (evt) => {
2919    evt.preventDefault();
2920    evt.stopImmediatePropagation();
2921    evt.stopPropagation();
2922  });
2923  variantPriceSelector?.addEventListener("change", (evt) => {
2924    evt.stopImmediatePropagation();
2925    evt.stopPropagation();
2926    evt.preventDefault();
2927    const newPriceId = Number(evt.target.value);
2928    updateCardByProductIdState(getCardStateKey(pcc), { priceId: newPriceId });
2929  });
2930};
2931var registerQuantityEventListeners = (pcc) => {
2932  const element = pcc.element;
2933  const [minusButton, plusButton] = element.querySelectorAll(".elProductInputControls button");
2934  const input = element.querySelector(".elProductInputControls input");
2935  minusButton.addEventListener("click", (evt) => {
2936    evt.preventDefault();
2937    if (pcc.quantity === 0) return;
2938    const newQuantity = pcc.quantity - 1;
2939    updateCardByProductIdState(getCardStateKey(pcc), { quantity: newQuantity });
2940  });
2941  plusButton.addEventListener("click", (evt) => {
2942    evt.preventDefault();
2943    const newQuantity = pcc.quantity + 1;
2944    updateCardByProductIdState(getCardStateKey(pcc), { quantity: newQuantity });
2945  });
2946  input.addEventListener("blur", (evt) => {
2947    const newQuantity = parseInt(evt.target.value);
2948    if (newQuantity == 0 || isNaN(newQuantity)) {
2949      updateCardByProductIdState(getCardStateKey(pcc), { quantity: 0 });
2950    } else {
2951      updateCardByProductIdState(getCardStateKey(pcc), { quantity: newQuantity });
2952    }
2953  });
2954};
2955var renderAndMount = (pcc, onMountCallback) => {
2956  if (pcc.id.includes("Bump")) {
2957    pcc.renderAndMount();
2958    registerPriceEventListeners(pcc);
2959  } else {
2960    pcc.render();
2961  }
2962  if (pcc.skipMountOnRender) return;
2963  registerEventListeners(pcc, onMountCallback);
2964};
2965var renderPcc = (pcc, onMountCallback) => {
2966  const stateKey = getCardStateKey(pcc);
2967  const updates = productCardByProductId.get()[stateKey];
2968  if (!updates) return;
2969  let newSelectType;
2970  if (anyUpdatableOrders()) {
2971    newSelectType = "single";
2972  } else if (!pcc.product.bump) {
2973    newSelectType = globalThis.globalResourceData.product_quantity_type ?? "single";
2974  } else {
2975    newSelectType = pcc.selectType;
2976  }
2977  if (pcc.renderType == updates.renderType && pcc.variant.id == updates.variantId && pcc.selected_price.id == updates.priceId && pcc.quantity == updates.quantity && pcc.selectType == newSelectType && pcc.selectedOrderIndex == updates.selectedOrderIndex && pcc.selectedUpdatableCartItemIndex == updates.selectedUpdatableCartItemIndex && pcc.updatableOrders == updates.updatableOrders && pcc.individualDirection == updates.individualDirection)
2978    return;
2979  pcc.renderType = updates.renderType;
2980  pcc.variant = globalThis.globalResourceData.variantsById[updates.variantId];
2981  pcc.selected_price = globalThis.globalResourceData.pricesById[updates.priceId];
2982  pcc.quantity = updates.quantity;
2983  pcc.selectType = newSelectType;
2984  pcc.selectedOrderIndex = updates.selectedOrderIndex;
2985  pcc.selectedUpdatableCartItemIndex = updates.selectedUpdatableCartItemIndex;
2986  pcc.updatableOrders = updates.updatableOrders;
2987  pcc.individualDirection = updates.individualDirection;
2988  pcc.isChecked = updates.quantity > 0;
2989  if (pcc.isChecked) {
2990    pcc.element.classList.add("elProductSelected");
2991  } else {
2992    pcc.element.classList.remove("elProductSelected");
2993  }
2994  renderAndMount(pcc, onMountCallback);
2995};
2996
2997// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-product-select-v2.ts
2998init_runtime();
2999var CheckoutProductSelectV2 = class extends CF2Component {
3000  constructor(el, runtimeSel) {
3001    super(el, runtimeSel);
3002  }
3003  mount() {
3004    const productCardComponents = this.getComponents("CheckoutProductCard/V2");
3005    registerOneTimeCardElementListeners(productCardComponents, (pcc) => {
3006      registerProductEventListeners(pcc);
3007    });
3008    productCardComponents.forEach((pcc) => {
3009      registerEventListeners(pcc, (pcc2) => {
3010        registerProductEventListeners(pcc2);
3011      });
3012    });
3013  }
3014};
3015registerComponent("CheckoutProductSelect/V2", CheckoutProductSelectV2);
3016window["CheckoutProductSelectV2"] = CheckoutProductSelectV2;
3017
3018// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-product-card-bump-v2.ts
3019init_define_process();
3020init_checkbox_v1();
3021init_runtime();
3022var CheckoutProductCardBumpV2 = class extends CF2Component {
3023  constructor(el, runtimeSel) {
3024    super(el, runtimeSel);
3025    __publicField(this, "skipMountOnRender", true);
3026  }
3027  mount() {
3028  }
3029  renderAndMount() {
3030    const checkBox = this.getComponent("Checkbox/V1");
3031    checkBox.setChecked(this.isChecked);
3032    const arrow = this.element.querySelector(".elProductBumpHeadlineArrow");
3033    const modernButtonText = this.element.querySelector(".elProductCardModernButton > span");
3034    if (this.isChecked) {
3035      this.element.classList.add("elProductSelected");
3036      if (arrow) arrow.classList.add("elHide");
3037      if (modernButtonText) modernButtonText.innerText = this.checkoutProductCardBumpTexts.unselect;
3038    } else {
3039      this.element.classList.remove("elProductSelected");
3040      if (arrow) arrow.classList.remove("elHide");
3041      if (modernButtonText) modernButtonText.innerText = this.checkoutProductCardBumpTexts.add;
3042    }
3043    if (this.selectType === "quantity") {
3044      const quantityInput = this.element.querySelector(".elProductCardShortInput");
3045      if (quantityInput) quantityInput.value = this.quantity;
3046    }
3047    this.render();
3048  }
3049  remove() {
3050    this.element.innerHTML = "";
3051  }
3052  render(initializeChildrenInstances = false) {
3053    const is_server = true;
3054    const selectType = this.selectType ?? null;
3055    const isChecked = this.isChecked ?? false;
3056    const showImage = this.showImage ?? null;
3057    const layout = this.layout ?? null;
3058    const product = this.product ?? null;
3059    const variant = this.variant ?? null;
3060    const selected_price = this.selected_price ?? null;
3061    const quantity = this.quantity ?? 0;
3062    const arrow = this.arrow ?? null;
3063    const checkoutProductCardBumpTexts = this.checkoutProductCardBumpTexts ?? null;
3064    const showDescription = this.element.getAttribute("data-param-showDescription");
3065    const showCompareAtPrice = this.element.getAttribute("data-param-showCompareAtPrice");
3066    let html = "";
3067    {
3068      html += `<div class="elProductLayoutBorder"></div><div class="elProductLayoutBackground"></div>`;
3069      const customVariants = product?.variants.filter((value) => value["default_variant"] == false);
3070      const product_name = "product_bump";
3071      if (layout == "classic") {
3072        html += `<div class="elProductCardImage" ygg-render="1">`;
3073        const imageUrl = variant?.image ?? product.image;
3074        if (showImage && imageUrl && imageUrl != "") {
3075          html += `<div data-page-element="Image/V2" class="elImageWrapper de-image-block id-Image/V2`;
3076          if (CF2Blank(imageUrl) && CF2Blank(null) && true) {
3077            html += ` forceHide`;
3078          }
3079          html += `" data-liquid-replace="item">`;
3080          if (imageUrl || !CF2Blank(null)) {
3081            html += `<img class="elImage" src="${imageUrl ?? null}" data-lazy-loading="true" data-lazy-loading="true"/>`;
3082          } else if (false) {
3083            html += `<div class="image-placeholder" title=""><span class="image-placeholder-header"></span></div>`;
3084          }
3085          html += `</div>`;
3086        }
3087        html += `</div>`;
3088        html += `<div class="elProductCardInfoContainer"><div class="elProductCardInputAndTitle">`;
3089        const isClassic = layout == "classic";
3090        if (arrow?.icon != "none" && isChecked != true) {
3091          if (arrow?.animation) {
3092            html += `<span data-animation-type="${arrow?.animation}" data-animation-delay="600" data-animation-loop="true" class="elProductBumpHeadlineArrow"><i class="${arrow?.icon}"></i></span>`;
3093          } else {
3094            html += `<span class="elProductBumpHeadlineArrow"><i class="${arrow?.icon}"></i></span>`;
3095          }
3096        }
3097        html += `<div class="elProductCardSelectInput`;
3098        if (isClassic == false || selectType == "quantity") {
3099          html += ` elHide`;
3100        }
3101        html += `">`;
3102        if (isChecked) {
3103          html += `<div data-page-element="Checkbox/V1" type="custom_type" class="elCheckboxWrapper elFormItemWrapper de-input-block id-Checkbox/V1" data-content="" data-liquid-replace="item" data-prevent-click-on-label="false" data-trigger-click-on-wrapper="false" data-checked="true"><label class="elCheckboxLabel"><input type="checkbox" value="${product?.id}
3103" name="product" checked data-prevent-garlic="false" class="elCheckboxInput inputHolder"/><div class="elCheckbox"><div class="elCheckboxIcon"><div class="elCheckboxIconSquare hide"></div><i class="elCheckboxIconCheck fas fa-check"></i></div></div><span class="elCheckboxText"></span></label><div data-input-status-type="true" data-error-container="true"></div></div>`;
3104        } else {
3105          html += `<div data-page-element="Checkbox/V1" type="custom_type" class="elCheckboxWrapper elFormItemWrapper de-input-block id-Checkbox/V1" data-content="" data-liquid-replace="item" data-prevent-click-on-label="false" data-trigger-click-on-wrapper="false" data-checked=""><label class="elCheckboxLabel"><input type="checkbox" value="${product?.id}" name="product"  data-prevent-garlic="false" class="elCheckboxInput inputHolder"/><div class="elCheckbox"><div class="elCheckboxIcon"><div class="elCheckboxIconSquare hide"></div><i class="elCheckboxIconCheck fas fa-check"></i></div></div><span class="elCheckboxText"></span></label><div data-input-status-type="true" data-error-container="true"></div></div>`;
3106        }
3107        html += `</div>`;
3108        const base_date = "1760652000";
3109        if (product?.headline) {
3110          html += `${product?.headline}`;
3111        } else if (customVariants?.length > 1) {
3112          if (product?.bump_preheadline && product?.updated_at_timestamp && product?.updated_at_timestamp > "1760652000") {
3113            html += `${product?.bump_preheadline}<br/>`;
3114          }
3115          html += `${product?.default_variant?.name ?? "One time offer:"}`;
3116        } else {
3117          if (product?.bump_preheadline && product?.updated_at_timestamp && product?.updated_at_timestamp > "1760652000") {
3118            html += `${product?.bump_preheadline}<br/>`;
3119          }
3120          html += `${variant?.name ?? "One time offer:"}`;
3121        }
3122        html += `</div><div class="elProductCardPriceContainer" ygg-render="2">`;
3123        if (variant?.prices?.length > 1) {
3124          html += `<div class="elSelectWrapper"><select name="variant_price">`;
3125          const c0 = variant.prices;
3126          const fl1 = new CF2ForloopDrop(c0.length);
3127          for (const price of c0) {
3128            const forloop = fl1;
3129            html += `<option `;
3130            if (selected_price?.id == price?.id) {
3131              html += `selected`;
3132            }
3133            html += ` value="${price?.id}">${price?.name}</option>`;
3134            forloop.next();
3135          }
3136          html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
3137        }
3138        if (variant?.prices?.length == 1) {
3139          html += `<div class="elProductCardInfoPrice">`;
3140          if (showCompareAtPrice) {
3141            const compare_at_amount = selected_price?.compare_at_amount;
3142            if (compare_at_amount) {
3143              html += `<span class="elProductCardAnchorPrice">${compare_at_amount}</span>`;
3144            }
3145          }
3146          html += `<span class="elProductCardFinalPrice">
3146${selected_price?.name}</span></div>`;
3147        }
3148        html += `</div>`;
3149        const desc = (product?.description_override ?? variant.description ?? product.default_variant.description ?? "").replaceAll(`
3150`, "<br>");
3151        if (desc != "") {
3152          html += `<div class="elProductCardDescription"><span class="elProductBumpText">${desc}</span></div>`;
3153        }
3154        if (customVariants?.length > 1) {
3155          html += `<div class="elProductSelectSelectorsWrapper">`;
3156          if (customVariants?.length > 1) {
3157            html += `<div class="elSelectWrapper"><select class="elBumpVariantSelector">`;
3158            const c2 = product.variants;
3159            const fl3 = new CF2ForloopDrop(c2.length);
3160            for (const product_variant of c2) {
3161              const forloop = fl3;
3162              const variant_index = forloop?.index0;
3163              let combined_variant_name = "";
3164              const c4 = product.sorted_property_values;
3165              const fl5 = new CF2ForloopDrop(c4.length);
3166              for (const property_values of c4) {
3167                const forloop2 = fl5;
3168                const index0 = forloop2?.index0;
3169                const property_id = property_values?.property_id;
3170                const property_value_id = product_variant?.property_value_ids?.[index0];
3171                if (combined_variant_name != "") {
3172                  combined_variant_name = combined_variant_name.toString().concat(", ");
3173                }
3174                combined_variant_name = combined_variant_name.toString().concat(product.all_properties[property_id]);
3175                combined_variant_name = combined_variant_name.toString().concat(": ");
3176                combined_variant_name = combined_variant_name.toString().concat(product.all_properties_values[property_value_id]);
3177                forloop2.next();
3178              }
3179              html += `<option value="${product_variant?.property_value_ids}" `;
3180              if (product_variant?.id == variant?.id) {
3181                html += `selected`;
3182              }
3183              html += `>${combined_variant_name}</option>`;
3184              forloop.next();
3185            }
3186            html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
3187          }
3188          html += `</div>`;
3189        }
3190        if (selectType == "quantity") {
3191          html += `<div class="elProductInputWrapper elProductCardQuantityContainer"><span>${checkoutProductCardBumpTexts?.quantity}</span><div class="elProductInputControls"><button class="elProductCardInput">-</button><input class="elProductCardInput elProductCardShortInput" name="product" value="${quantity ?? 0}" min="0" type="number"/><button class="elProductCardInput">+</button></div></div>`;
3192        } else if (selectType == "quantity-forced") {
3193          html += `<div class="elProductInputWrapper elSelectWrapper elForcedQuantityWrapper"><span>${checkoutProductCardBumpTexts?.quantity}</span><select name="product" class="elProductCardInput elProductInputControls">`;
3194          const step = product?.step ?? 2;
3195          const min = product?.min ?? 0;
3196          const max = product?.max ?? 5;
3197          const item_count_step_1 = max - min;
3198          const item_count_step_2 = item_count_step_1 / step;
3199          const item_count_step_3 = item_count_step_2 | 0;
3200          const range = Array.apply(0, Array(item_count_step_3)).map((element, index) => index + 0);
3201          ;
3202          const c6 = range;
3203          const fl7 = new CF2ForloopDrop(c6.length);
3204          for (const i of c6) {
3205            const forloop = fl7;
3206            const value = i * step + min;
3207            html += `<option value="${value}">${value}</option>`;
3208            forloop.next();
3209          }
3210          html += `</select><div class="elSelectArrow elForcedQuantitySelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
3211        }
3212        html += `</div>`;
3213      } else {
3214        html += `<div class="elProductCardImage" ygg-render="1">`;
3215        const imageUrl = variant?.image ?? product.image;
3216        if (showImage && imageUrl && imageUrl != "") {
3217          html += `<div data-page-element="Image/V2" class="elImageWrapper de-image-block id-Image/V2`;
3218          if (CF2Blank(imageUrl) && CF2Blank(null) && true) {
3219            html += ` forceHide`;
3220          }
3221          html += `" data-liquid-replace="item">`;
3222          if (imageUrl || !CF2Blank(null)) {
3223            html += `<img class="elImage" src="${imageUrl ?? null}" data-lazy-loading="true" data-lazy-loading="true"/>`;
3224          } else if (false) {
3225            html += `<div class="image-placeholder" title=""><span class="image-placeholder-header"></span></div>`;
3226          }
3227          html += `</div>`;
3228        }
3229        html += `</div>`;
3230        html += `<div class="elProductCardInfoContainer"><div class="elProductCardInputAndTitle">`;
3231        const isClassic = layout == "classic";
3232        if (arrow?.icon != "none" && isChecked != true) {
3233          if (arrow?.animation) {
3234            html += `<span data-animation-type="${arrow?.animation}" data-animation-delay="600" data-animation-loop="true" class="elProductBumpHeadlineArrow"><i class="${arrow?.icon}"></i></span>`;
3235          } else {
3236            html += `<span class="elProductBumpHeadlineArrow"><i class="${arrow?.icon}"></i></span>`;
3237          }
3238        }
3239        html += `<div class="elProductCardSelectInput`;
3240        if (isClassic == false || selectType == "quantity") {
3241          html += ` elHide`;
3242        }
3243        html += `">`;
3244        if (isChecked) {
3245          html += `<div data-page-element="Checkbox/V1" type="custom_type" class="elCheckboxWrapper elFormItemWrapper de-input-block id-Checkbox/V1" data-content="" data-liquid-replace="item" data-prevent-click-on-label="false" data-trigger-click-on-wrapper="false" data-checked="true"><label class="elCheckboxLabel"><input type="checkbox" value="${product?.id}" name="product" checked data-prevent-garlic="false" class="elCheckboxInput inputHolder"/><div class="elCheckbox"><div class="elCheckboxIcon"><div class="elCheckboxIconSquare hide"></div><i class="elCheckboxIconCheck fas fa-check"></i></div></div><span class="elCheckboxText"></span></label><div data-input-status-type="true" data-error-container="true"></div></div>`;
3246        } else {
3247          html += `<div data-page-element="Checkbox/V1" type="custom_type" class="elCheckboxWrapper elFormItemWrapper de-input-block id-Checkbox/V1" data-content="" data-liquid-replace="item" data-prevent-click-on-label="false" data-trigger-click-on-wrapper="false" data-checked=""><label class="elCheckboxLabel"><input type="checkbox" value="${product?.id}" name="product"  data-prevent-garlic="false" class="elCheckboxInput inputHolder"/><div class="elCheckbox"><div class="elCheckboxIcon"><div class="elCheckboxIconSquare hide"></div><i class="elCheckboxIconCheck fas fa-check"></i></div></div><span class="elCheckboxText"></span></label><div data-input-status-type="true" data-error-container="true"></div></div>`;
3248        }
3249        html += `</div>`;
3250        const base_date = "1760652000";
3251        if (product?.headline) {
3252          html += `${product?.headline}`;
3253        } else if (customVariants?.length > 1) {
3254          if (product?.bump_preheadline && product?.updated_at_timestamp && product?.updated_at_timestamp > "1760652000") {
3255            html += `${product?.bump_preheadline}<br/>`;
3256          }
3257          html += `${product?.default_variant?.name ?? "One time offer:"}`;
3258        } else {
3259          if (product?.bump_preheadline && product?.updated_at_timestamp && product?.updated_at_timestamp > "1760652000") {
3260            html += `${product?.bump_preheadline}<br/>`;
3261          }
3262          html += `${variant?.name ?? "One time offer:"}`;
3263        }
3264        html += `</div><div class="elProductCardPriceContainer" ygg-render="2">`;
3265        if (variant?.prices?.length > 1) {
3266          html += `<div class="elSelectWrapper"><select name="variant_price">`;
3267          const c8 = variant.prices;
3268          const fl9 = new CF2ForloopDrop(c8.length);
3269          for (const price of c8) {
3270            const forloop = fl9;
3271            html += `<option `;
3272            if (selected_price?.id == price?.id) {
3273              html += `selected`;
3274            }
3275            html += ` value="${price?.id}">${price?.name}</option>`;
3276            forloop.next();
3277          }
3278          html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
3279        }
3280        if (variant?.prices?.length == 1) {
3281          html += `<div class="elProductCardInfoPrice">`;
3282          if (showCompareAtPrice) {
3283            const compare_at_amount = selected_price?.compare_at_amount;
3284            if (compare_at_amount) {
3285              html += `<span class="elProductCardAnchorPrice">${compare_at_amount}</span>`;
3286            }
3287          }
3288          html += `<span class="elProductCardFinalPrice">
3288${selected_price?.name}</span></div>`;
3289        }
3290        html += `</div>`;
3291        const desc = (product?.description_override ?? variant.description ?? product.default_variant.description ?? "").replaceAll(`
3292`, "<br>");
3293        if (desc != "") {
3294          html += `<div class="elProductCardDescription"><span class="elProductBumpText">${desc}</span></div>`;
3295        }
3296        if (customVariants?.length > 1) {
3297          html += `<div class="elProductSelectSelectorsWrapper">`;
3298          if (customVariants?.length > 1) {
3299            html += `<div class="elSelectWrapper"><select class="elBumpVariantSelector">`;
3300            const c10 = product.variants;
3301            const fl11 = new CF2ForloopDrop(c10.length);
3302            for (const product_variant of c10) {
3303              const forloop = fl11;
3304              const variant_index = forloop?.index0;
3305              let combined_variant_name = "";
3306              const c12 = product.sorted_property_values;
3307              const fl13 = new CF2ForloopDrop(c12.length);
3308              for (const property_values of c12) {
3309                const forloop2 = fl13;
3310                const index0 = forloop2?.index0;
3311                const property_id = property_values?.property_id;
3312                const property_value_id = product_variant?.property_value_ids?.[index0];
3313                if (combined_variant_name != "") {
3314                  combined_variant_name = combined_variant_name.toString().concat(", ");
3315                }
3316                combined_variant_name = combined_variant_name.toString().concat(product.all_properties[property_id]);
3317                combined_variant_name = combined_variant_name.toString().concat(": ");
3318                combined_variant_name = combined_variant_name.toString().concat(product.all_properties_values[property_value_id]);
3319                forloop2.next();
3320              }
3321              html += `<option value="${product_variant?.property_value_ids}" `;
3322              if (product_variant?.id == variant?.id) {
3323                html += `selected`;
3324              }
3325              html += `>${combined_variant_name}</option>`;
3326              forloop.next();
3327            }
3328            html += `</select><div class="elSelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
3329          }
3330          html += `</div>`;
3331        }
3332        if (selectType == "quantity") {
3333          html += `<div class="elProductInputWrapper elProductCardQuantityContainer"><span>${checkoutProductCardBumpTexts?.quantity}</span><div class="elProductInputControls"><button class="elProductCardInput">-</button><input class="elProductCardInput elProductCardShortInput" name="product" value="${quantity ?? 0}" min="0" type="number"/><button class="elProductCardInput">+</button></div></div>`;
3334        } else if (selectType == "quantity-forced") {
3335          html += `<div class="elProductInputWrapper elSelectWrapper elForcedQuantityWrapper"><span>${checkoutProductCardBumpTexts?.quantity}</span><select name="product" class="elProductCardInput elProductInputControls">`;
3336          const step = product?.step ?? 2;
3337          const min = product?.min ?? 0;
3338          const max = product?.max ?? 5;
3339          const item_count_step_1 = max - min;
3340          const item_count_step_2 = item_count_step_1 / step;
3341          const item_count_step_3 = item_count_step_2 | 0;
3342          const range = Array.apply(0, Array(item_count_step_3)).map((element, index) => index + 0);
3343          ;
3344          const c14 = range;
3345          const fl15 = new CF2ForloopDrop(c14.length);
3346          for (const i of c14) {
3347            const forloop = fl15;
3348            const value = i * step + min;
3349            html += `<option value="${value}">${value}</option>`;
3350            forloop.next();
3351          }
3352          html += `</select><div class="elSelectArrow elForcedQuantitySelectArrow"><i class="fas fa-chevron-down"></i></div></div>`;
3353        }
3354        html += `</div>`;
3355        if (selectType != "quantity") {
3356          html += `<div class="elProductCardModernButton">`;
3357          if (isChecked) {
3358            html += `<span>${checkoutProductCardBumpTexts?.unselect}</span>`;
3359          } else {
3360            html += `<span>${checkoutProductCardBumpTexts?.add}</span>`;
3361          }
3362          html += `</div>`;
3363        }
3364      }
3365    }
3366    this.replaceContent(html);
3367    if (initializeChildrenInstances) {
3368      const scopeToYggRender = this.element.querySelectorAll("[ygg-render]").length > 0;
3369      const options = { scopeToYggRender };
3370      CF2Component.hydrateTree(this.element, options);
3371    }
3372  }
3373};
3374registerComponent("CheckoutProductCardBump/V2", CheckoutProductCardBumpV2);
3375window["CheckoutProductCardBumpV2"] = CheckoutProductCardBumpV2;
3376
3377// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-product-select-bump-v2.ts
3378init_define_process();
3379init_runtime();
3380var CheckoutProductSelectBumpV2 = class extends CF2Component {
3381  constructor(el, runtimeSel) {
3382    super(el, runtimeSel);
3383  }
3384  mount() {
3385    const productCardComponents = this.getComponents("CheckoutProductCardBump/V2");
3386    registerOneTimeCardElementListeners(productCardComponents);
3387    productCardComponents.forEach((pcc) => {
3388      registerEventListeners(pcc);
3389      this.registerBumpVariantEventListeners(pcc);
3390    });
3391  }
3392  registerBumpVariantEventListeners(pcc) {
3393    const element = pcc.element;
3394    const variantSelects = element.querySelectorAll(".elBumpVariantSelector");
3395    variantSelects.forEach((select, index) => {
3396      select.addEventListener("click", (evt) => {
3397        evt.stopImmediatePropagation();
3398        evt.stopPropagation();
3399        evt.preventDefault();
3400      });
3401      select.addEventListener("change", (evt) => {
3402        evt.stopImmediatePropagation();
3403        evt.stopPropagation();
3404        evt.preventDefault();
3405        const newValues = [...variantSelects].map((e) => e.value);
3406        const selectedVariantId = pcc.product.property_values_variant_mapping[newValues];
3407        const oldCartItem = { product_id: pcc.product.id, variant_id: pcc.variant.id, price_id: pcc.selected_price.id };
3408        const newVariant = pcc.product.variants.find((v) => v.id == String(selectedVariantId));
3409        const newPrice = newVariant.prices[0];
3410        const newCartItem = { product_id: pcc.product.id, variant_id: newVariant.id, price_id: newPrice.id };
3411        updateCardByProductIdState(pcc.product.id, { variantId: newVariant.id, priceId: newPrice.id });
3412        pcc.renderAndMount();
3413        registerPriceEventListeners(pcc);
3414      });
3415    });
3416  }
3417};
3418registerComponent("CheckoutProductSelectBump/V2", CheckoutProductSelectBumpV2);
3419window["CheckoutProductSelectBumpV2"] = CheckoutProductSelectBumpV2;
3420
3421// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-shipping-profile-select-v1.ts
3422init_define_process();
3423init_radio_v1();
3424init_cf_utils();
3425init_cfLodash();
3426init_runtime();
3427var CheckoutShippingProfileSelectV1 = class extends CF2Component {
3428  constructor(el, runtimeSel) {
3429    super(el, runtimeSel);
3430    __publicField(this, "loadingShipping");
3431    __publicField(this, "shippingOptions");
3432    __publicField(this, "shippingOption");
3433  }
3434  onSelectOption(option) {
3435  }
3436  mount() {
3437    this.element.addEventListener("click", (evt) => {
3438      const shippingProfileCards = this.element.querySelectorAll(".elShippingProfile");
3439      for (const card of shippingProfileCards) {
3440        if (isEventInside(evt, card)) {
3441          evt.preventDefault();
3442          const key = card.getAttribute("data-shipping-option");
3443          if (key) {
3444            const option = this.shippingOptions.find(({ description }) => description === key);
3445            this.onSelectOption(option.value);
3446          }
3447          break;
3448        }
3449      }
3450    });
3451  }
3452  show() {
3453    this.element.classList.remove("forceHide");
3454  }
3455  hide() {
3456    this.element.classList.add("forceHide");
3457  }
3458  setOption(option) {
3459    this.shippingOption = option;
3460    const radio = this.shippingOption && this.element.querySelector(`[data-shipping-option="${this.shippingOption.description}"] .elRadioInput`);
3461    if (radio) {
3462      radio.checked = true;
3463    }
3464  }
3465  isEqualState(newState) {
3466    const updatableKeys = ["hasValidShippingAddress", "loadingShipping", "summaryHasError", "shippingOption", "shippingOptions"];
3467    const currentState = updatableKeys.reduce((acc, key) => {
3468      acc[key] = this[key];
3469      return acc;
3470    }, {});
3471    return isEqual(newState, currentState);
3472  }
3473  updateState(data) {
3474    const newState = {
3475      hasValidShippingAddress: false,
3476      loadingShipping: false,
3477      summaryHasError: false,
3478      shippingOption: null,
3479      shippingOptions: [],
3480      ...data
3481    };
3482    if (this.isEqualState(newState)) return false;
3483    Object.assign(this, newState);
3484    this.render();
3485    return true;
3486  }
3487  setLoading() {
3488    this.updateState({
3489      loadingShipping: true,
3490      hasValidShippingAddress: true
3491    });
3492  }
3493  setInvalidAddress() {
3494    this.updateState({
3495      hasValidShippingAddress: false
3496    });
3497  }
3498  setSummaryError() {
3499    this.updateState({
3500      summaryHasError: true
3501    });
3502  }
3503  setShippingOptions(shippingOptions, shippingOption) {
3504    const result = this.updateState({
3505      shippingOption,
3506      shippingOptions: this.formatShippingOptions(shippingOptions),
3507      hasValidShippingAddress: true
3508    });
3509    if (result) this.setOption(this.shippingOption);
3510  }
3511  formatShippingOptions(shippingOptions) {
3512    return shippingOptions.map((option) => {
3513      const { description, amount: { amount, currency }, amount_formatted } = option;
3514      return {
3515        key: JSON.stringify(option),
3516        value: option,
3517        description,
3518        priceLabel: amount_formatted
3519      };
3520    });
3521  }
3522  update({ shippingOptions, ...state }) {
3523    Object.assign(this, state);
3524    if (shippingOptions) {
3525      this.shippingOptions = shippingOptions?.map((option) => {
3526        const { description, amount: { amount, currency }, amount_formatted } = option;
3527        return {
3528          key: JSON.stringify(option),
3529          value: option,
3530          description,
3531          priceLabel: amount_formatted
3532        };
3533      });
3534    }
3535    this.render();
3536    this.setOption(this.shippingOption);
3537  }
3538  remove() {
3539    this.element.innerHTML = "";
3540  }
3541  render(initializeChildrenInstances = false) {
3542    const is_server = true;
3543    const title = this.title ?? null;
3544    const titleEnabled = this.titleEnabled ?? null;
3545    const otherTexts = this.otherTexts ?? null;
3546    const shippingOptions = this.shippingOptions ?? [];
3547    const shippingOption = this.shippingOption ?? void 0;
3548    const hasValidShippingAddress = this.hasValidShippingAddress ?? false;
3549    const loadingShipping = this.loadingShipping ?? false;
3550    const summaryHasError = this.summaryHasError ?? false;
3551    let html = "";
3552    {
3553      if (titleEnabled) {
3554        html += `<div class="elCheckoutFormLabelContainer"><div class="elCheckoutFormLabel">${title}</div> <hr class="elCheckoutFormLabelDivider"/></div>`;
3555      }
3556      html += `<div class="elShippingProfileList" ygg-render="replace">`;
3557      if (summaryHasError) {
3558        html += `<div class="elShippingProfileCardWrapper elShippingProfilesEmpty">      <div class="elShippingProfile elShippingProfileLayout">
3558<div class="elShippingProfileLayoutBackground"></div><div><p></p></div></div></div>`;
3559      } else if (hasValidShippingAddress || false) {
3560        if (loadingShipping) {
3561          html += `<div class="elShippingProfileCardWrapper elShippingProfilesEmpty">      <div class="elShippingProfile elShippingProfileLayout"><div class="elShippingProfileLayoutBackground"></div><div><div><i class="fa fa-spinner fa-spin"></i></div></div></div></div>`;
3562        } else if (shippingOptions && shippingOptions?.length > 0) {
3563          const c0 = shippingOptions;
3564          const fl1 = new CF2ForloopDrop(c0.length);
3565          for (const shippingProfile of c0) {
3566            const forloop = fl1;
3567            const currentIndex = forloop?.index0;
3568            const isDefaultValue = currentIndex == 0;
3569            const hasValue = shippingOption;
3570            const isSelected = shippingOption == shippingProfile?.key;
3571            html += `      `;
3572            const isChecked = hasValue && isSelected || isDefaultValue;
3573            html += `      `;
3574            html += `<div class="elShippingProfileCardWrapper"><div class="elShippingProfile elShippingProfileLayout`;
3575            if (isChecked) {
3576              html += ` elShippingProfileSelected`;
3577            }
3578            html += ` elShippingProfileClickable" data-shipping-option="${shippingProfile?.description}"><div class="elShippingProfileLayoutBackground"></div><div class="elShippingProfileSelectInput">`;
3579            if (isChecked) {
3580              html += `<div data-page-element="Radio/V1" class="elRadioWrapper id-Radio/V1" data-liquid-replace="item" data-checked="true" data-trigger-click-on-wrapper="false"><label class="elRadioLabel"><input type="radio" value="" name="shipping_profile" checked class="elRadioInput"/><div class="elRadio"><div class="elRadioIcon"></div></div><span class="elRadioText"></span></label></div>`;
3581            } else {
3582              html += `<div data-page-element="Radio/V1" class="elRadioWrapper id-Radio/V1" data-liquid-replace="item" data-checked="" data-trigger-click-on-wrapper="false"><label class="elRadioLabel"><input type="radio" value="" name="shipping_profile"  class="elRadioInput"/><div class="elRadio"><div class="elRadioIcon"></div></div><span class="elRadioText"></span></label></div>`;
3583            }
3584            html += `</div>  <div class="elShippingProfileCardNameContainer"><div class="elShippingProfileCardInfoName">${shippingProfile?.description}</div></div>    <div class="elShippingProfileCardPriceContainer"><span class="elShippingProfileInfoPrice elShippingProfileFinalPrice">${shippingProfile?.priceLabel}</span></div></div></div>`;
3585            forloop.next();
3586          }
3587        } else if (shippingOptions && shippingOptions?.length == 0) {
3588          html += `<div class="elShippingProfileCardWrapper elShippingProfilesEmpty">      <div class="elShippingProfile elShippingProfileLayout"><div class="elShippingProfileLayoutBackground"></div><div><div><i class="fa fa-truck"></i></div><p></p></div></div></div>`;
3589        }
3590      } else {
3591        html += `<div class="elShippingProfileCardWrapper elShippingProfilesEmpty">      <div class="elShippingProfile elShippingProfileLayout"><div class="elShippingProfileLayoutBackground"></div><div><div><i class="fa fa-truck"></i></div><p>${otherTexts?.shippingOptionsPlaceholder}</p></div></div></div>`;
3592      }
3593      html += `</div>`;
3594    }
3595    this.replaceContent(html);
3596    if (initializeChildrenInstances) {
3597      const scopeToYggRender = this.element.querySelectorAll("[ygg-render]").length > 0;
3598      const options = { scopeToYggRender };
3599      CF2Component.hydrateTree(this.element, options);
3600    }
3601  }
3602};
3603registerComponent("CheckoutShippingProfileSelect/V1", CheckoutShippingProfileSelectV1);
3604window["CheckoutShippingProfileSelectV1"] = CheckoutShippingProfileSelectV1;
3605
3606// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-loading-v1.ts
3607init_define_process();
3608init_runtime();
3609var CheckoutLoadingV1 = class extends CF2Component {
3610  constructor(el, runtimeSel) {
3611    super(el, runtimeSel);
3612  }
3613  mount() {
3614  }
3615  show() {
3616    this.element.classList.remove("elHide");
3617  }
3618  showWaitingOnQueueText(text) {
3619    this.element.querySelector(".elCheckoutLoadingWaitingOnQueue").classList.remove("elHide");
3620    this.element.querySelector(".elCheckoutLoadingWaitingOnQueue").innerHTML = text;
3621  }
3622  hideWaitingOnQueueText() {
3623    this.element.querySelector(".elCheckoutLoadingWaitingOnQueue").classList.add("elHide");
3624  }
3625  hide() {
3626    this.element.classList.add("elHide");
3627  }
3628};
3629registerComponent("CheckoutLoading/V1", CheckoutLoadingV1);
3630window["CheckoutLoadingV1"] = CheckoutLoadingV1;
3631
3632// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-submit-notification-v1.ts
3633init_define_process();
3634init_runtime();
3635var CheckoutSubmitNotificationV1 = class extends CF2Component {
3636  constructor(el, runtimeSel) {
3637    super(el, runtimeSel);
3638  }
3639  mount() {
3640  }
3641  setStatus(text, subtext, extratext = "") {
3642    if (text) {
3643      this.element.querySelector(".mainText").classList.remove("elHide");
3644      this.element.querySelector(".mainText").innerHTML = text;
3645    } else {
3646      this.element.querySelector(".mainText").classList.add("elHide");
3647    }
3648    if (subtext) {
3649      this.element.querySelector(".subText").classList.remove("elHide");
3650      this.element.querySelector(".subText").innerHTML = subtext;
3651    } else {
3652      this.element.querySelector(".subText").classList.add("elHide");
3653    }
3654    if (extratext) {
3655      this.element.querySelector(".extraText").classList.remove("elHide");
3656      this.element.querySelector(".extraText").innerHTML = extratext;
3657    } else {
3658      this.element.querySelector(".extraText").classList.add("elHide");
3659    }
3660  }
3661};
3662registerComponent("CheckoutSubmitNotification/V1", CheckoutSubmitNotificationV1);
3663window["CheckoutSubmitNotificationV1"] = CheckoutSubmitNotificationV1;
3664
3665// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-apple-pay-button-v1.ts
3666init_define_process();
3667
3668// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-submit.ts
3669init_define_process();
3670
3671// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Utils/checkout-path.ts
3672init_define_process();
3673var renderedPath = () => {
3674  const renderedPage = document.querySelector('meta[name="rendered-page-url"]')?.getAttribute("content");
3675  return renderedPage ?? window.location.pathname;
3676};
3677var renderedHref = (extraPath) => {
3678  const url = new URL(window.location.href);
3679  url.pathname = renderedPath() + (extraPath ?? "");
3680  return url.toString();
3681};
3682
3683// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Utils/checkout-address.ts
3684init_define_process();
3685init_general();
3686var STATES_WITH_POSTAL_CODE = /* @__PURE__ */ new Set(["US", "GB", "CA", "FI", "FR", "IT", "ES"]);
3687var backfillAddressId = (address) => {
3688  if (address.id) return address;
3689  let addressId = "no-id#";
3690  addressId += [address.country, address.state, address.city, address.zip, address.address, address.address_2].filter(Boolean).join(":");
3691  return { ...address, id: addressId };
3692};
3693var backfillAddressesId = (addresses) => {
3694  return addresses.map((address) => backfillAddressId(address));
3695};
3696var isSavedAddress = (address) => {
3697  return address.id && !String(address.id).includes("no-id#");
3698};
3699var fieldsForCountry = (fields, country) => {
3700  const fieldsLength = Object.keys(fields).length;
3701  if (fieldsLength > 0 && fieldsLength <= 2) {
3702    const hasPostalCode = STATES_WITH_POSTAL_CODE.has(country);
3703    if (hasPostalCode) {
3704      return ["country", "zip"];
3705    } else {
3706      return ["country"];
3707    }
3708  }
3709  return fields;
3710};
3711var addressToString = (address) => {
3712  let str = "";
3713  if (address.address) {
3714    str = address.address;
3715    if (address.address2) {
3716      str += `, ${address.address2}`;
3717    }
3718    if (address.city) {
3719      str += `. ${address.city}`;
3720    }
3721    if (address.state) {
3722      str += `, ${address.state}`;
3723    }
3724    if (address.zip) {
3725      str += ` ${address.zip}`;
3726    }
3727    if (address.country) {
3728      str += `, ${address.country}`;
3729    }
3730  } else {
3731    if (address.zip) {
3732      str += `${address.zip}, `;
3733    }
3734    if (address.country) {
3735      str += `${address.country}`;
3736    }
3737  }
3738  return str;
3739};
3740var parseAddressByFields = (address, fields, shouldBackfill = true) => {
3741  const addressByFields = fields.reduce((acc, field) => {
3742    acc[field] = address[field] ?? (shouldBackfill ? globalThis.Checkout.contactLocale[field] : null);
3743    return acc;
3744  }, {});
3745  return cleanEmptyObjectKeys({ ...addressByFields, id: address.id });
3746};
3747
3748// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-submit.ts
3749init_general();
3750init_nonce();
3751init_cf_utils();
3752
3753// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-store.ts
3754init_define_process();
3755
3756// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-critical-errors.ts
3757init_define_process();
3758init_error_with_cause();
3759init_fetcher();
3760var CheckoutCriticalError = class extends CFErrorWithCause {
3761  constructor(message, options) {
3762    super(message, options);
3763    __publicField(this, "name");
3764    __publicField(this, "context");
3765    this.name = "CheckoutCriticalError";
3766  }
3767};
3768var ERROR_CODES = {
3769  EMPTY_PRODUCTS_ERROR: "EMPTY_PRODUCTS_ERROR",
3770  EMPTY_PAYMENT_METHODS_ERROR: "EMPTY_PAYMENT_METHODS_ERROR",
3771  UNEXPECTED_INITIALIZATION_ERROR: "UNEXPECTED_INITIALIZATION_ERROR",
3772  FETCH_FEATURE_FLAGS_ERROR: "FETCH_FEATURE_FLAGS_ERROR",
3773  FETCH_COUNTRIES_STATES_ERROR: "FETCH_COUNTRIES_STATES_ERROR",
3774  FETCH_STRIPE_ADDRESS_FIELD_COUNTRIES_ERROR: "FETCH_STRIPE_ADDRESS_FIELD_COUNTRIES_ERROR",
3775  PAI_INITIALIZATION_SCRIPT_ERROR: "PAI_INITIALIZATION_SCRIPT_ERROR",
3776  PAI_INITIALIZATION_TIMEOUT_ERROR: "PAI_INITIALIZATION_TIMEOUT_ERROR",
3777  PAI_INITIALIZATION_READY_TIMEOUT_ERROR: "PAI_INITIALIZATION_READY_TIMEOUT_ERROR",
3778  PAI_INITIALIZATION_CONFIG_ERROR: "PAI_INITIALIZATION_CONFIG_ERROR",
3779  READY_TO_PAY_UPDATE_ERROR: "READY_TO_PAY_UPDATE_ERROR",
3780  FETCH_EXISTING_ORDERS_ERROR: "FETCH_EXISTING_ORDERS_ERROR",
3781  FETCH_PHONE_UTILS_ERROR: "FETCH_PHONE_UTILS_ERROR",
3782  ORDER_RECURRING_INTERVAL_MISMATCH: "ORDER_RECURRING_INTERVAL_MISMATCH",
3783  ERROR_PROCESSING_STRIPE_PAYMENT: "ERROR_PROCESSING_STRIPE_PAYMENT",
3784  ERROR_STRIPE_3DS_DECLINED: "ERROR_STRIPE_3DS_DECLINED",
3785  ERROR_STRIPE_CARD_DECLINED: "ERROR_STRIPE_CARD_DECLINED",
3786  MULTIPLE_CHECKOUT_PRESENT: "MULTIPLE_CHECKOUT_PRESENT"
3787};
3788var displayAndLogCriticalError = (checkoutCriticalError, extraContext) => {
3789  const criticalErrors = globalThis.Checkout.store.criticalErrors.get();
3790  const originalError = checkoutCriticalError.cause;
3791  if (originalError instanceof CFFetcherError) {
3792    const fetchError = originalError;
3793    globalThis.Checkout.store.criticalErrors.set([
3794      ...criticalErrors,
3795      { code: checkoutCriticalError.message, fetchErrorType: fetchError.type }
3796    ]);
3797  } else {
3798    globalThis.Checkout.store.criticalErrors.set([...criticalErrors, { code: checkoutCriticalError.message }]);
3799  }
3800  console.error(CFstackWithCauses(checkoutCriticalError));
3801  const context = { ...checkoutCriticalError.context ?? {}, ...extraContext ?? {} };
3802  if (Object.keys(context).length > 0) {
3803    globalThis.Honeybadger?.notify(checkoutCriticalError, { context });
3804  } else {
3805    globalThis.Honeybadger?.notify(checkoutCriticalError);
3806  }
3807};
3808
3809// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-store.ts
3810init_nanostores();
3811
3812// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/RebillyCheckout/checkout-globals.ts
3813init_define_process();
3814
3815// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-data-loader.ts
3816init_define_process();
3817init_general();
3818var getSSRGlobalResourceData = () => {
3819  const productSelectType = globalThis.globalResourceData.product_quantity_type ?? "single";
3820  const { checkout_v2_state, contact } = globalThis?.sessionData ?? {};
3821  const initialContactData = checkout_v2_state === "guest" ? {} : cleanEmptyObjectKeys({
3822    first_name: contact?.first_name ?? "",
3823    last_name: contact?.last_name ?? "",
3824    email: contact?.email ?? "",
3825    phone_number: contact?.phone_number ?? ""
3826  });
3827  const { products, productsById, variantsById, pricesById } = globalThis.globalResourceData;
3828  const savedPaymentMethods = contact?.payment_methods ?? [];
3829  return {
3830    productSelectType,
3831    products,
3832    productsById,
3833    variantsById,
3834    pricesById,
3835    savedPaymentMethods,
3836    initialContactData
3837  };
3838};
3839
3840// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-states.ts
3841init_define_process();
3842var PaypalStates = {
3843  IDLE: "idle",
3844  INITIALIZED: "initialized",
3845  ERROR: "error",
3846  ADDING_PAYMENT_METHOD: "adding-payment-method",
3847  PAYMENT_METHOD_APPROVED: "payment-method-approved"
3848};
3849var ErrorTypes = {
3850  REBILLY_ERROR: "rebilly-error",
3851  SERVER_ERROR: "server-error",
3852  UNHANDLED_SERVER_RESPONSE: "unhandled-server-response",
3853  THREEDS_DECLINED_ERROR: "3ds-declined-error",
3854  THREEDS_DECLINED_CUSTOM_ERROR: "3ds-declined-custom-error",
3855  PAYPAL_DECLINED_ERROR: "paypal-declined-error",
3856  PAYPAL_CUSTOM_ERROR: "paypal-custom-error"
3857};
3858
3859// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/StripeCheckout/utils.ts
3860init_define_process();
3861function hasRecurringPrice(cart) {
3862  return cart.items.some(({ price_id }) => {
3863    const price = globalThis.globalResourceData.pricesById[price_id];
3864    return price.is_recurring;
3865  });
3866}
3867function hasPhysicalProductsWithParams(cart) {
3868  return cart.items.some(({ product_id, variant_id }) => {
3869    const product = globalThis.Checkout.productsById[product_id];
3870    const variant = globalThis.Checkout.variantsById[variant_id];
3871    let productType = variant?.product_type;
3872    productType = productType || product?.product_type;
3873    return productType == "physical";
3874  });
3875}
3876function hasUpgradeDowngradeItems(cart) {
3877  return cart.items.some((item) => item.type === "upgradeDowngrade");
3878}
3879function getStripeMode(cart, amount) {
3880  if (amount == 0) return "setup";
3881  return hasRecurringPrice(cart) ? "subscription" : "payment";
3882}
3883function getCartEstimatedTotal(cart) {
3884  const estimatedAmount = cart.items.reduce((acc, { price_id }) => {
3885    const price = globalThis.globalResourceData.pricesById[price_id];
3886    return acc + price.initial_price_cents;
3887  }, 0);
3888  return estimatedAmount;
3889}
3890function convertToStripeAddress(address) {
3891  return {
3892    line1: address.address_one,
3893    line2: address.address_two,
3894    city: address.city,
3895    state: address.state,
3896    postal_code: address.postal_code,
3897    country: address.country
3898  };
3899}
3900function convertAddressFromStripe(address) {
3901  return {
3902    address_one: address.line1,
3903    address_two: address.line2,
3904    city: address.city,
3905    state: address.state,
3906    country: address.country,
3907    postal_code: address.postal_code
3908  };
3909}
3910function convertAddressFromSession(address) {
3911  return {
3912    address_one: address.address,
3913    address_two: address.address_2,
3914    city: address.city,
3915    state: address.state,
3916    country: address.country,
3917    postal_code: address.zip
3918  };
3919}
3920function calculateStripeLineItems(lineItems, shippingOption, taxAmount, discountAmount) {
3921  const allLineItems = lineItems.map(({ priceCents, description }) => {
3922    return {
3923      name: description,
3924      amount: priceCents
3925    };
3926  });
3927  if (shippingOption) {
3928    allLineItems.push({
3929      name: shippingOption.description,
3930      amount: shippingOption.amount_cents
3931    });
3932  }
3933  if (taxAmount) {
3934    allLineItems.push({
3935      name: "Taxes",
3936      amount: taxAmount
3937    });
3938  }
3939  if (discountAmount) {
3940    allLineItems.push({
3941      name: "Discount",
3942      amount: -discountAmount
3943    });
3944  }
3945  return allLineItems;
3946}
3947var STRIPE_SKIP_SHIPPING_ID = "skip it";
3948function calculateStripeChangeResolveDetails(lineItems, quotesResponse, shippingOption, taxAmount, discountAmount) {
3949  return {
3950    lineItems: calculateStripeLineItems(lineItems, shippingOption, taxAmount, discountAmount),
3951    shippingRates: quotesResponse?.map((option) => {
3952      const { description, amount_cents } = option;
3953      return {
3954        id: JSON.stringify(option),
3955        amount: amount_cents,
3956        displayName: description
3957      };
3958    }) ?? [
3959      {
3960        id: STRIPE_SKIP_SHIPPING_ID,
3961        amount: 0,
3962        displayName: "Free"
3963      }
3964    ]
3965  };
3966}
3967function parseCssVars(element, obj) {
3968  Object.keys(obj ?? {}).forEach((key) => {
3969    const value = obj[key];
3970    if (typeof value === "object") {
3971      obj[key] = parseCssVars(element, value);
3972    } else {
3973      if (typeof value === "string" && value.includes("--")) {
3974        obj[key] = getComputedStyle(element).getPropertyValue(value);
3975      }
3976    }
3977  });
3978  return obj;
3979}
3980
3981// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/RebillyCheckout/checkout-globals.ts
3982var CheckoutStates = {
3983  OTO: "oto",
3984  GUEST: "guest",
3985  SAVED: "saved",
3986  UPGRADE_DOWNGRADE: "upgradeDowngrade",
3987  REACTIVATE: "reactivate"
3988};
3989var StoreStates = {
3990  START: "start",
3991  INITIALIZING: "initializing",
3992  INITIALIZED: "initialized",
3993  FILLING_FORM: "filling-form",
3994  SUBMITTING: "submitting",
3995  SUBMITTED: "submitted"
3996};
3997var SummaryStates = {
3998  WAITING: "waiting",
3999  CALCULATING: "calculating",
4000  ERROR: "error",
4001  OK: "ok"
4002};
4003var CouponStates = {
4004  READY: "ready",
4005  APPLYING: "applying",
4006  APPLIED: "applied",
4007  ERROR: "error"
4008};
4009var PaymentStates = {
4010  START: "start",
4011  INITIALIZING: "initializing",
4012  LOADING: "loading",
4013  INITIALIZED: "initialized"
4014};
4015var SubmittingStates = {
4016  IDLE: "idle",
4017  START: "start",
4018  WAITING_ON_QUEUE: "waiting-on-queue",
4019  ERROR: "error",
4020  DONE: "done"
4021};
4022var states = {
4023  StoreStates,
4024  SummaryStates,
4025  PaymentStates,
4026  SubmittingStates,
4027  PaypalStates,
4028  CouponStates,
4029  ErrorTypes,
4030  CheckoutStates
4031};
4032var globals = getSSRGlobalResourceData();
4033var ssrDynamicData = globalThis.getSSRDynamicStoreData(globals.products);
4034globalThis.Checkout = {
4035  ...states,
4036  ...globals,
4037  ssrDynamicData,
4038  utils: buildUtils()
4039};
4040window.addEventListener(
4041  "keydown",
4042  function(e) {
4043    if (e.key == "Enter") {
4044      if (globalThis.Checkout.store?.payment.type.get() == "apple-pay") {
4045        e.preventDefault();
4046        return false;
4047      }
4048    }
4049  },
4050  true
4051);
4052var cleanupEmptyErrors = (errors) => {
4053  if (errors.globalErrors.length == 0) delete errors.globalErrors;
4054  if (Object.keys(errors.fields).length == 0) delete errors.fields;
4055  if (Object.keys(errors).length == 0) return null;
4056  return errors;
4057};
4058function hasErrors(errors) {
4059  return (errors?.globalErrors ?? []).length != 0 || Object.keys(errors?.fields ?? {}).length != 0;
4060}
4061function productErrors(cart, showAllErrors) {
4062  const errors = {
4063    globalErrors: [],
4064    fields: {}
4065  };
4066  if (showAllErrors) {
4067    const hasProducts = cart.items.filter((p) => !globalThis.Checkout.productsById[p.product_id].bump).some((item) => item.quantity > 0);
4068    if (!hasProducts) {
4069      errors.globalErrors.push({ message: "At least one product should be selected" });
4070    }
4071  }
4072  return cleanupEmptyErrors(errors);
4073}
4074function shippingOptionErrors(loadingShipping, cart, shippingOptions, shippingOption, showAllErrors, paymentType) {
4075  const errors = {
4076    globalErrors: [],
4077    fields: {}
4078  };
4079  if (!showAllErrors || loadingShipping || !hasPhysicalProductsWithParams(cart) || paymentType == "apple-pay") {
4080    return null;
4081  }
4082  const shippingOptionIsValid = shippingOption && shippingOptions?.length > 0;
4083  if (!shippingOptionIsValid) {
4084    const error = { message: "Shipping is not available for this location" };
4085    errors.fields.shippingOption = error;
4086    errors.globalErrors.push(error);
4087  }
4088  return cleanupEmptyErrors(errors);
4089}
4090function tosErrors(accepted, present, showTosErrors) {
4091  if (present && showTosErrors && !accepted) {
4092    return { globalErrors: [{ message: "You must accept the terms of service" }] };
4093  } else {
4094    return {};
4095  }
4096}
4097function summaryErrors(summary) {
4098  const errors = {
4099    globalErrors: [],
4100    fields: {}
4101  };
4102  if (summary.state == SummaryStates.ERROR) {
4103    if (summary.error) {
4104      errors.globalErrors.push({ message: summary.error.message });
4105    } else {
4106      errors.globalErrors.push({ message: "There was an error calculating your order total" });
4107    }
4108  }
4109  return cleanupEmptyErrors(errors);
4110}
4111function addressErrors(address, showAllErrors, fields) {
4112  const errors = {
4113    globalErrors: [],
4114    fields: {}
4115  };
4116  fields.forEach((field) => {
4117    const value = address[field];
4118    if (value == void 0 && !showAllErrors) return;
4119    const { valid, message } = validateValue(field, value);
4120    if (!valid) {
4121      errors.fields[field] = { message };
4122    }
4123  });
4124  return cleanupEmptyErrors(errors);
4125}
4126function contactErrors(contact, fields, showAllErrors) {
4127  showAllErrors = showAllErrors ?? true;
4128  const errors = {
4129    globalErrors: [],
4130    fields: {}
4131  };
4132  fields.forEach((field) => {
4133    const value = contact[field];
4134    if (value == void 0 && !showAllErrors) return;
4135    const { valid, message } = validateValue(field, value);
4136    if (!valid) {
4137      errors.fields[field] = { message };
4138    }
4139  });
4140  return cleanupEmptyErrors(errors);
4141}
4142function buildUtils() {
4143  const billingErrors = (billing, billingSameAsShipping, showAllErrors, cart, mode, billingFields, billingApiErrorsByField, paymentType, paymentId) => {
4144    if (hasPhysicalProductsWithParams(cart) && billingSameAsShipping || mode == CheckoutStates.UPGRADE_DOWNGRADE || mode == CheckoutStates.OTO && !paymentId || paymentType == "apple-pay") {
4145      return null;
4146    } else if (billingApiErrorsByField) {
4147      return {
4148        fields: billingApiErrorsByField
4149      };
4150    } else if (mode == globalThis.Checkout.CheckoutStates.REACTIVATE || mode == globalThis.Checkout.CheckoutStates.SAVED) {
4151      const savedBillingAddresses = globalThis.Checkout.store.billing_addresses.get();
4152      const isActiveAddressSaved = savedBillingAddresses.find((addr) => addr.id == billing.id);
4153      if (!isActiveAddressSaved) {
4154        return addressErrors(billing, showAllErrors, billingFields);
4155      }
4156      return null;
4157    } else if (mode == CheckoutStates.OTO && paymentId) {
4158      return null;
4159    } else {
4160      return addressErrors(billing, showAllErrors, billingFields);
4161    }
4162  };
4163  const shippingErrors = (shipping, showAllErrors, cart, mode, shippingFields, paymentType) => {
4164    if (!hasPhysicalProductsWithParams(cart) || paymentType == "apple-pay") {
4165      return null;
4166    }
4167    return addressErrors(shipping, showAllErrors, shippingFields);
4168  };
4169  return {
4170    productErrors,
4171    billingErrors,
4172    shippingErrors,
4173    addressErrors,
4174    cleanupEmptyErrors,
4175    hasErrors,
4176    hasPhysicalProductsWithParams,
4177    skipBillingAddress: (store) => {
4178      const isNotDigitalWalletPayment = store.payment.type.get() != "apple-pay";
4179      return isNotDigitalWalletPayment && store.billingFields.get().length == 0;
4180    },
4181    hasPhysicalProducts: () => {
4182      const cart = globalThis.Checkout.computed.checkoutCart.get();
4183      return hasPhysicalProductsWithParams(cart);
4184    },
4185    hasValidDataForOrderPreview: (options) => {
4186      const mode = globalThis.Checkout.store.checkout.mode.get();
4187      const cart = globalThis.Checkout.computed.checkoutCart.get();
4188      const billing = globalThis.Checkout.store.billing.get();
4189      const shipping = globalThis.Checkout.store.shipping.get();
4190      const billingSameAsShipping = globalThis.Checkout.store.billingSameAsShipping.get();
4191      const billingApiErrorsByField = globalThis.Checkout.store.billingApiErrorsByField.get();
4192      const paymentType = globalThis.Checkout.store.payment.type.get();
4193      const paymentId = globalThis.Checkout.store.payment.id.get();
4194      const showAllBillingErrors = true;
4195      const showAllShippingErrors = true;
4196      const showAllProductErrors = true;
4197      const pErrors = productErrors(cart, showAllProductErrors);
4198      const bErrors = billingErrors(
4199        billing,
4200        billingSameAsShipping,
4201        showAllBillingErrors,
4202        cart,
4203        mode,
4204        options.billingFields,
4205        billingApiErrorsByField,
4206        paymentType,
4207        paymentId
4208      );
4209      const sErrors = shippingErrors(shipping, showAllShippingErrors, cart, mode, options.shippingFields, paymentType);
4210      return !hasErrors(pErrors) && !hasErrors(bErrors) && !hasErrors(sErrors);
4211    },
4212    hasValidDataForShippingOptions: (options) => {
4213      const mode = globalThis.Checkout.store.checkout.mode.get();
4214      const cart = globalThis.Checkout.computed.checkoutCart.get();
4215      const shipping = globalThis.Checkout.store.shipping.get();
4216      const paymentType = globalThis.Checkout.store.payment.type.get();
4217      const showAllShippingErrors = true;
4218      const sErrors = shippingErrors(shipping, showAllShippingErrors, cart, mode, options.shippingFields, paymentType);
4219      return !hasErrors(sErrors);
4220    },
4221    hasValidDataForTaxes: (options) => {
4222      const mode = globalThis.Checkout.store.checkout.mode.get();
4223      const cart = globalThis.Checkout.computed.checkoutCart.get();
4224      const billing = globalThis.Checkout.store.billing.get();
4225      const billingSameAsShipping = globalThis.Checkout.store.billingSameAsShipping.get();
4226      const billingApiErrorsByField = globalThis.Checkout.store.billingApiErrorsByField.get();
4227      const paymentType = globalThis.Checkout.store.payment.type.get();
4228      const paymentId = globalThis.Checkout.store.payment.id.get();
4229      const showAllBillingErrors = true;
4230      const bErrors = billingErrors(
4231        billing,
4232        billingSameAsShipping,
4233        showAllBillingErrors,
4234        cart,
4235        mode,
4236        options.billingFields,
4237        billingApiErrorsByField,
4238        paymentType,
4239        paymentId
4240      );
4241      return !hasErrors(bErrors);
4242    },
4243    canSubmit: () => {
4244      const state = globalThis.Checkout.store.state.get();
4245      const summary = globalThis.Checkout.store.summary.get();
4246      return state == globalThis.Checkout.StoreStates.FILLING_FORM && summary.state == globalThis.Checkout.SummaryStates.OK;
4247    }
4248  };
4249}
4250
4251// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-store.ts
4252var encodeVirtualInstallmentId = (duration, type) => {
4253  return `${duration}-${type}`;
4254};
4255var decodeVirtualInstallmentId = (virtualId) => {
4256  if (!virtualId) return null;
4257  const parts = virtualId.split("-");
4258  if (parts.length !== 2) return null;
4259  const duration = parseInt(parts[0], 10);
4260  const type = parts[1];
4261  if (isNaN(duration)) return null;
4262  return { duration, type };
4263};
4264var getInitialCriticalErrors = (enabledPayments, enabledExpressPayments) => {
4265  const initialCriticalErrors = [];
4266  if ((enabledPayments ?? []).length == 0 && (enabledExpressPayments ?? []).length == 0) {
4267    initialCriticalErrors.push({ code: ERROR_CODES.EMPTY_PAYMENT_METHODS_ERROR });
4268  }
4269  if (!globalThis.globalResourceData.productVariantWithNoBump?.id) {
4270    initialCriticalErrors.push({ code: ERROR_CODES.EMPTY_PRODUCTS_ERROR });
4271  }
4272  return initialCriticalErrors;
4273};
4274var create = (billingFields, shippingFields, enabledPayments, enabledExpressPayments) => {
4275  const paymentMethods = typeof globalThis.Checkout.savedPaymentMethods === "string" ? JSON.parse(globalThis.Checkout.savedPaymentMethods) : globalThis.Checkout.savedPaymentMethods;
4276  const paymentDataId = paymentMethods?.[0]?.id ?? null;
4277  const paymentDataType = paymentMethods?.[0]?.type;
4278  let initialPaymentMethod = paymentDataType ?? enabledPayments[0];
4279  initialPaymentMethod = initialPaymentMethod == "splitit" ? "payment-card" : initialPaymentMethod;
4280  const {
4281    mode,
4282    contact,
4283    shipping,
4284    billing,
4285    billingSameAsShipping,
4286    billing_addresses,
4287    shipping_addresses
4288  } = globalThis.Checkout.ssrDynamicData;
4289  return {
4290    state: atom(globalThis.Checkout.StoreStates.START),
4291    checkout: {
4292      mode: atom(mode),
4293      lastModeIndependentOfCartItems: atom(mode),
4294      step: atom(0)
4295    },
4296    contact: map(contact),
4297    contact_pending_auth: map({ authenticated: false }),
4298    shipping: map(shipping),
4299    shipping_addresses: atom(shipping_addresses ?? []),
4300    loadingShipping: atom(false),
4301    shippingOptions: atom([]),
4302    isUpdatingRebilly: atom(true),
4303    shippingOption: atom(),
4304    billingFields: atom(billingFields),
4305    shippingFields: atom(shippingFields),
4306    payment: {
4307      state: atom(globalThis.Checkout.PaymentStates.START),
4308      id: atom(paymentDataId),
4309      type: atom(initialPaymentMethod),
4310      virtualInstallmentId: atom(null),
4311      "payment-card": {
4312        events: map({}),
4313        token: atom(null)
4314      },
4315      paypal: {
4316        state: atom({ state: globalThis.Checkout.PaypalStates.IDLE }),
4317        token: atom(null)
4318      },
4319      "apple-pay": {
4320        token: atom(null)
4321      },
4322      Klarna: {
4323        token: atom(null)
4324      }
4325    },
4326    paymentMethods: atom(paymentMethods ?? []),
4327    billing: map(billing),
4328    billingApiErrorsByField: atom(null),
4329    billing_addresses: atom(billing_addresses ?? []),
4330    billingSameAsShipping: atom(billingSameAsShipping),
4331    coupons: {
4332      appliedCode: atom(""),
4333      currentCode: atom(""),
4334      errorMessage: atom(""),
4335      state: atom(globalThis.Checkout.CouponStates.READY)
4336    },
4337    summary: atom({
4338      state: globalThis.Checkout.SummaryStates.WAITING,
4339      data: {}
4340    }),
4341    tos: {
4342      accepted: atom(false),
4343      present: atom(false)
4344    },
4345    criticalErrors: atom(getInitialCriticalErrors(enabledPayments, enabledExpressPayments)),
4346    showAllErrors: {
4347      contact: atom(false),
4348      shipping: atom(false),
4349      billing: atom(false),
4350      shippingOption: atom(false),
4351      payment: atom(false),
4352      products: atom(false),
4353      tos: atom(false),
4354      summary: atom(false)
4355    },
4356    submitting: atom({
4357      state: globalThis.Checkout.SubmittingStates.IDLE
4358    }),
4359    incrScrollToFirstVisibleError: atom(0),
4360    threeds: map({
4361      show: false,
4362      approvalUrl: null
4363    }),
4364    featureFlags: {
4365      isShippingEnabled: atom(false)
4366    },
4367    selectedOrderDetailId: atom(null),
4368    phoneNumberInitialized: atom(false)
4369  };
4370};
4371var buildComputed = (store, contactFields, shippingFields, totalSteps) => {
4372  const computedModeLeaveEnterEvent = atom({});
4373  onMount(computedModeLeaveEnterEvent, () => {
4374    let previousMode;
4375    return store.checkout.mode.subscribe((mode) => {
4376      if (previousMode) {
4377        computedModeLeaveEnterEvent.set({
4378          leave: previousMode,
4379          next: mode
4380        });
4381      }
4382      computedModeLeaveEnterEvent.set({
4383        enter: mode,
4384        previous: previousMode
4385      });
4386      previousMode = mode;
4387    });
4388  });
4389  const computedContactErrors = computed(
4390    [store.checkout.mode, store.contact, store.showAllErrors.contact],
4391    (mode, contact, showAllErrors) => {
4392      if (mode != globalThis.Checkout.CheckoutStates.GUEST) return null;
4393      return contactErrors(contact, contactFields, showAllErrors);
4394    }
4395  );
4396  const computedCheckoutCart = buildProductSelectComputed();
4397  const computedBillingErrors = computed(
4398    [
4399      store.billing,
4400      store.billingSameAsShipping,
4401      store.showAllErrors.billing,
4402      computedCheckoutCart,
4403      store.checkout.mode,
4404      store.payment.type,
4405      store.payment.id,
4406      store.billingApiErrorsByField,
4407      store.billingFields
4408    ],
4409    (billing, billingSameAsShipping, showAllErrors, cart, mode, paymentType, paymentId, billingApiErrorsByField, billingFields) => {
4410      return globalThis.Checkout.utils.billingErrors(
4411        billing,
4412        billingSameAsShipping,
4413        showAllErrors,
4414        cart,
4415        mode,
4416        billingFields,
4417        billingApiErrorsByField,
4418        paymentType,
4419        paymentId
4420      );
4421    }
4422  );
4423  const computedShippingErrors = computed(
4424    [store.shipping, store.showAllErrors.shipping, computedCheckoutCart, store.checkout.mode, store.payment.type],
4425    (shipping, showAllErrors, cart, mode, paymentType) => {
4426      return globalThis.Checkout.utils.shippingErrors(shipping, showAllErrors, cart, mode, shippingFields, paymentType);
4427    }
4428  );
4429  const computedHasValidShippingAddress = computed(
4430    [computedCheckoutCart, store.shipping, store.checkout.mode],
4431    (cart, shipping, mode) => {
4432      return !globalThis.Checkout.utils.shippingErrors(shipping, true, cart, mode, shippingFields);
4433    }
4434  );
4435  const computedProductErrors = computed(
4436    [computedCheckoutCart, store.showAllErrors.products],
4437    (cart, showAllErrors) => {
4438      return globalThis.Checkout.utils.productErrors(cart, showAllErrors);
4439    }
4440  );
4441  const computedShippingOptionErrors = computed(
4442    [
4443      store.loadingShipping,
4444      computedCheckoutCart,
4445      store.shippingOptions,
4446      store.shippingOption,
4447      store.showAllErrors.shippingOption,
4448      store.payment.type
4449    ],
4450    (...args) => shippingOptionErrors(...args)
4451  );
4452  const computedPaymentErrors = computed(
4453    [
4454      store.payment.id,
4455      store.payment.type,
4456      store.payment["payment-card"].events,
4457      store.payment.paypal.state,
4458      store.payment.paypal.token,
4459      store.showAllErrors.payment,
4460      store.checkout.mode
4461    ],
4462    (id, type, cardEvents, paypalState, paypalToken, showAllErrors, mode) => {
4463      const errors = {
4464        globalErrors: [],
4465        fields: {}
4466      };
4467      if (!id && mode != globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE) {
4468        if (type == "payment-card") {
4469          let hasEvent = !!Object.keys(cardEvents).length;
4470          if (hasEvent) {
4471            Object.entries(cardEvents).forEach(([field, event]) => {
4472              if (!event) {
4473                event = { source: field };
4474              } else {
4475                hasEvent = true;
4476              }
4477              const { valid, message } = validateValue("card", event);
4478              if (!valid) {
4479                errors.fields[field] = { message };
4480              }
4481            });
4482          } else if (showAllErrors) {
4483            errors.globalErrors.push({ message: "Missing payment information" });
4484          }
4485        } else if (type == "paypal") {
4486          if (showAllErrors && !(paypalState.state == globalThis.Checkout.PaypalStates.PAYMENT_METHOD_APPROVED && paypalToken)) {
4487            errors.globalErrors.push({ message: "Missing payment information" });
4488          }
4489        }
4490      }
4491      return cleanupEmptyErrors(errors);
4492    }
4493  );
4494  const computedTosErrors = computed(
4495    [store.tos.accepted, store.tos.present, store.showAllErrors.tos],
4496    (...args) => tosErrors(...args)
4497  );
4498  const computedSummaryErrors = computed([store.summary], (summary) => summaryErrors(summary));
4499  const computedErrorsByName = {
4500    contact: computedContactErrors,
4501    billing: computedBillingErrors,
4502    shipping: computedShippingErrors,
4503    shippingOption: computedShippingOptionErrors,
4504    products: computedProductErrors,
4505    payment: computedPaymentErrors,
4506    tos: computedTosErrors,
4507    summary: computedSummaryErrors
4508  };
4509  const computedHasPhysicalProducts = computed(computedCheckoutCart, (cart) => {
4510    return globalThis.Checkout.utils.hasPhysicalProductsWithParams(cart);
4511  });
4512  const computedPossibleOtoWithFreeShipping = computed(
4513    [computedCheckoutCart, store.checkout.mode, store.shippingOptions, store.loadingShipping],
4514    (cart, mode, shippingOptions, loadingShipping) => {
4515      return mode === "oto" && globalThis.Checkout.utils.hasPhysicalProductsWithParams(cart) && // shipping options unknown / 
4515not loaded
4516      (!shippingOptions || // pending with no current shipping options
4517      loadingShipping && shippingOptions.length === 0 || // Exactly one shipping option with amount zero
4518      shippingOptions?.length === 1 && parseInt(shippingOptions[0].amount.amount) === 0);
4519    }
4520  );
4521  const computedHasShippingEnabled = computed(
4522    [computedCheckoutCart, store.featureFlags.isShippingEnabled],
4523    (cart, isShippingEnabled) => {
4524      return globalThis.Checkout.utils.hasPhysicalProductsWithParams(cart) && isShippingEnabled;
4525    }
4526  );
4527  const computedHideShipping = computed(
4528    [computedHasShippingEnabled, computedPossibleOtoWithFreeShipping],
4529    (isShippingEnabled, possibleOtoWithFreeShipping) => {
4530      return !isShippingEnabled || possibleOtoWithFreeShipping;
4531    }
4532  );
4533  const computedCurrentPaymentMethod = computed([store.payment.id], (currentPaymentId) => {
4534    return store.paymentMethods.get().find((pm) => pm.id == currentPaymentId);
4535  });
4536  const computedIsCouponReady = computed([store.state, computedCheckoutCart], (state, cart) => {
4537    const showAllProductErrors = true;
4538    const pErrors = globalThis.Checkout.utils.productErrors(cart, showAllProductErrors);
4539    return state == globalThis.Checkout.StoreStates.FILLING_FORM && !globalThis.Checkout.utils.hasErrors(pErrors);
4540  });
4541  const computedIsDigitalWalletReadyToStart = computed(
4542    [store.checkout.mode, store.state, store.summary, computedCheckoutCart],
4543    (mode, state, summary, cart) => {
4544      const showAllProductErrors = true;
4545      const pErrors = globalThis.Checkout.utils.productErrors(cart, showAllProductErrors);
4546      return state == globalThis.Checkout.StoreStates.FILLING_FORM && !globalThis.Checkout.utils.hasErrors(pErrors);
4547    }
4548  );
4549  const computedHideContactInformationForm = computed(
4550    [store.checkout.mode, store.payment.type],
4551    (mode, paymentType) => {
4552      return paymentType == "apple-pay" && mode == "guest" && totalSteps == 1;
4553    }
4554  );
4555  const computedIsOTORetrialPayment = computed(
4556    [store.checkout.mode, store.payment.id],
4557    (mode, paymentId) => mode == globalThis.Checkout.CheckoutStates.OTO && !paymentId
4558  );
4559  return {
4560    errorsByName: computedErrorsByName,
4561    modeLeaveEnterEvent: computedModeLeaveEnterEvent,
4562    hasPhysicalProducts: computedHasPhysicalProducts,
4563    hasShippingEnabled: computedHasShippingEnabled,
4564    hideShipping: computedHideShipping,
4565    hasValidShippingAddress: computedHasValidShippingAddress,
4566    isDigitalWalletReadyToStart: computedIsDigitalWalletReadyToStart,
4567    isCouponReady: computedIsCouponReady,
4568    contactErrors: computedContactErrors,
4569    productErrors: computedProductErrors,
4570    billingErrors: computedBillingErrors,
4571    shippingErrors: computedShippingErrors,
4572    shippingOptionErrors: computedShippingOptionErrors,
4573    paymentMethod: computedCurrentPaymentMethod,
4574    paymentErrors: computedPaymentErrors,
4575    tosErrors: computedTosErrors,
4576    summaryErrors: computedSummaryErrors,
4577    hideContactInformationForm: computedHideContactInformationForm,
4578    isOTORetrialPayment: computedIsOTORetrialPayment,
4579    isNewDigitalWalletPayment: computed(
4580      [store.payment.id, store.payment.type],
4581      (id, paymentType) => !id && paymentType == "apple-pay"
4582    ),
4583    checkoutCart: computedCheckoutCart
4584  };
4585};
4586var initializeUtilities = (store, computed2) => {
4587  initializeStoreUtilities(store, computed2);
4588  setupCFEnableDevTools();
4589};
4590var initializeStoreUtilities = (store, computed2) => {
4591  const proxyCache = /* @__PURE__ */ new WeakMap();
4592  const storeValueCache = /* @__PURE__ */ new WeakMap();
4593  const DEBOUNCE_INTERVAL = 50;
4594  const stores = {
4595    store,
4596    computed: computed2
4597  };
4598  function createDeepNanostoreProxy(target, onChange) {
4599    return new Proxy(target, {
4600      get(target2, property) {
4601        const item = target2[property];
4602        if (property === "__store") {
4603          return item;
4604        }
4605        if (item && typeof item === "object") {
4606          if (proxyCache.has(item)) return proxyCache.get(item);
4607          if (isStore(item)) {
4608            const __store = item;
4609            const storeValue = {
4610              __store,
4611              __value: peek(__store)
4612            };
4613            storeValueCache.set(item, storeValue);
4614            __store.listen((value) => {
4615              storeValue.__value = value;
4616              onChange();
4617            });
4618            return storeValue;
4619          } else {
4620            const proxy2 = createDeepNanostoreProxy(item, onChange);
4621            proxyCache.set(item, proxy2);
4622            return proxy2;
4623          }
4624        }
4625        return item;
4626      }
4627    });
4628  }
4629  function peek(store2) {
4630    return store2.value;
4631  }
4632  function isStore(value) {
4633    return value && value.subscribe;
4634  }
4635  let debounceTimeout;
4636  const proxy = createDeepNanostoreProxy(stores, function onChange() {
4637    clearTimeout(debounceTimeout);
4638    debounceTimeout = setTimeout(() => {
4639      window.dispatchEvent(new CustomEvent("checkout:store:change"));
4640    }, DEBOUNCE_INTERVAL);
4641  });
4642  globalThis.Checkout.utils.getStoreJson = (tab = 0) => {
4643    return JSON.stringify(
4644      proxy,
4645      function replacer(key, value) {
4646        if (["__store"].includes(key)) return;
4647        if (value && Object.prototype.hasOwnProperty.call(value, "__value")) {
4648          return value.__value;
4649        }
4650        return value;
4651      },
4652      tab
4653    );
4654  };
4655};
4656var setupCFEnableDevTools = () => {
4657  if (localStorage.getItem("cf2:devtools:enabled")) {
4658    trackUpdatesCheckoutUpdates();
4659  }
4660  globalThis.CFEnableDevTools = () => {
4661    localStorage.setItem("cf2:devtools:enabled", "true");
4662    trackUpdatesCheckoutUpdates();
4663  };
4664  function trackUpdatesCheckoutUpdates() {
4665    document.querySelectorAll('[data-page-element="Checkout/V2"]').forEach((el) => {
4666      el.insertAdjacentHTML("afterend", '<div class="checkout-store-log"><pre></pre></div>');
4667      document.querySelector(".checkout-store-log").style.cssText = `
4668          z-index: 10;
4669          top: 0;
4670          background: rgba(100,100,1005,0.1);
4671          height: 100;
4672          display: flex;
4673          flex-direction: column;
4674          justify-content: center;`;
4675      document.querySelector(".checkout-store-log pre").style.cssText = `
4676          font-size: 12px;
4677          font-weight: bold;
4678          width: fit-content;`;
4679    });
4680    const checkoutStoreLog = document.querySelector(".checkout-store-log");
4681    const renderDevToolsState = initReduxDevTools().render;
4682    render();
4683    window.addEventListener("checkout:store:change", () => {
4684      render();
4685      if (renderDevToolsState) {
4686        renderDevToolsState();
4687      }
4688    });
4689    function initReduxDevTools() {
4690      let store;
4691      const reduxUrl = "https://cdnjs.cloudflare.com/ajax/libs/redux/4.2.1/redux.min.js";
4692      const scriptEle = document.createElement("script");
4693      scriptEle.setAttribute("src", reduxUrl);
4694      document.body.appendChild(scriptEle);
4695      scriptEle.addEventListener("load", () => {
4696        store = globalThis.Redux.createStore(
4697          (state, action) => action.state || state,
4698          JSON.parse(globalThis.Checkout.utils.getStoreJson()),
4699          globalThis.__REDUX_DEVTOOLS_EXTENSION__ && globalThis.__REDUX_DEVTOOLS_EXTENSION__()
4700        );
4701      });
4702      return {
4703        render() {
4704          if (store) {
4705            store.dispatch({
4706              type: "state",
4707              state: JSON.parse(globalThis.Checkout.utils.getStoreJson())
4708            });
4709          }
4710        }
4711      };
4712    }
4713    function render() {
4714      let json;
4715      let error;
4716      try {
4717        const data = JSON.parse(globalThis.Checkout.utils.getStoreJson(4));
4718        json = JSON.stringify(data, null, 2);
4719      } catch (err) {
4720        error = err;
4721        console.log(error);
4722      }
4723      checkoutStoreLog.querySelector("pre").innerHTML = error ? error.message : ["--- State ---", json].join("\n");
4724    }
4725  }
4726};
4727
4728// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-submit.ts
4729var REBILLY_PAYMENT_METHOD_BY_TYPE_MAP = {
4730  Klarna: "klarna-payments"
4731};
4732var _redirecTo, _threedsListenerEnabled, _formSubmitPayload, _CheckoutSubmit_static, leadSourceGenerator_fn, submitRebilly_fn, buildPaymentMethodDetails_fn, buildRegistrationDetails_fn, shouldIncludeRegistration_fn, buildAddressParams_fn, submitOrderAsync_fn, handleFormSubmitRedirect_fn, add3dsListener_fn;
4733var CheckoutSubmit = class {
4734  static submitFromButtonClick(submitButton, onValidationError, redirectOverride) {
4735    __privateMethod(this, _CheckoutSubmit_static, add3dsListener_fn).call(this);
4736    const checkoutElement = submitButton.closest(".elCheckout");
4737    if (this.checkSubmitShowErrors({ skipFields: /* @__PURE__ */ new Set(["payment"]) }) && this.checkSubmitShowErrors({ onlyFields: /* @__PURE__ */ new Set(["payment"]) }) && globalThis.Checkout.utils.canSubmit() && checkValidCustomFields(checkoutElement)) {
4738      globalThis.Checkout.store.state.set(globalThis.Checkout.StoreStates.SUBMITTING);
4739      globalThis.Checkout.store.submitting.set({
4740        state: globalThis.Checkout.SubmittingStates.START
4741      });
4742      const isUpgradeDowngrade = globalThis.Checkout.store.checkout.mode.get() == globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE;
4743      const capturedPaymentMethodId = globalThis.Checkout.store.payment.id.get();
4744      const canSkipSubmitRebilly = isUpgradeDowngrade || capturedPaymentMethodId;
4745      if (canSkipSubmitRebilly) {
4746        const payload = this.buildPayloadFromStore({
4747          contact: globalThis.Checkout.store.contact.get(),
4748          turnstileToken: globalThis.Checkout.turnstileToken,
4749          shippingAddress: globalThis.Checkout.store.shipping.get(),
4750          billingAddress: globalThis.Checkout.store.billing.get(),
4751          paymentMethodDetails: __privateMethod(this, _CheckoutSubmit_static, buildPaymentMethodDetails_fn).call(this) ?? {},
4752          selectedShippingOption: globalThis.Checkout.store.shippingOption.get(),
4753          skipBillingAddress: globalThis.Checkout.utils.skipBillingAddress(globalThis.Checkout.store),
4754          redirectOverride
4755        });
4756        return this.submit(payload);
4757      } else {
4758        const paymentType = globalThis.Checkout.store.payment.type.get();
4759        if (["Klarna", "payment-card"].includes(paymentType)) {
4760          return __privateMethod(this, _CheckoutSubmit_static, submitRebilly_fn).call(this, onValidationError).then((tokenData) => {
4761            if (!tokenData && paymentType === "Klarna") {
4762              if (globalThis.Checkout.store.state.get() === globalThis.Checkout.StoreStates.SUBMITTING) {
4763                globalThis.Checkout.store.state.set(globalThis.Checkout.StoreStates.FILLING_FORM);
4764                globalThis.Checkout.store.submitting.set({
4765                  state: globalThis.Checkout.SubmittingStates.IDLE
4766                });
4767              }
4768              return;
4769            }
4770            globalThis.Checkout.store.payment[paymentType].token.set(tokenData.id);
4771            const payload = this.buildPayloadFromStore({
4772              contact: globalThis.Checkout.store.contact.get(),
4773              turnstileToken: globalThis.Checkout.turnstileToken,
4774              shippingAddress: globalThis.Checkout.store.shipping.get(),
4775              billingAddress: globalThis.Checkout.store.billing.get(),
4776              paymentMethodDetails: __privateMethod(this, _CheckoutSubmit_static, buildPaymentMethodDetails_fn).call(this) ?? {},
4777              selectedShippingOption: globalThis.Checkout.store.shippingOption.get(),
4778              skipBillingAddress: globalThis.Checkout.utils.skipBillingAddress(globalThis.Checkout.store),
4779              redirectOverride
4780            });
4781            return this.submit(payload);
4782          });
4783        } else {
4784          const payload = this.buildPayloadFromStore({
4785            contact: globalThis.Checkout.store.contact.get(),
4786            turnstileToken: globalThis.Checkout.turnstileToken,
4787            shippingAddress: globalThis.Checkout.store.shipping.get(),
4788            billingAddress: globalThis.Checkout.store.billing.get(),
4789            paymentMethodDetails: __privateMethod(this, _CheckoutSubmit_static, buildPaymentMethodDetails_fn).call(this) ?? {},
4790            selectedShippingOption: globalThis.Checkout.store.shippingOption.get(),
4791            skipBillingAddress: globalThis.Checkout.utils.skipBillingAddress(globalThis.Checkout.store),
4792            redirectOverride
4793          });
4794          return this.submit(payload);
4795        }
4796      }
4797    } else {
4798      onValidationError();
4799    }
4800  }
4801  static checkSubmitShowErrors(options) {
4802    const { onlyFields, skipFields } = options ?? {};
4803    return Object.entries(globalThis.Checkout.computed.errorsByName).map(([name, computed2]) => {
4804      if (onlyFields && !onlyFields.has(name)) return true;
4805      if (skipFields && skipFields.has(name)) return true;
4806      globalThis.Checkout.store.showAllErrors[name].set(true);
4807      return !globalThis.Checkout.utils.hasErrors(computed2.get());
4808    }).every((v) => !!v);
4809  }
4810  static buildPayloadFromStore(payload) {
4811    const addressParams = __privateMethod(this, _CheckoutSubmit_static, buildAddressParams_fn).call(this, {
4812      billingAddress: payload.billingAddress,
4813      shippingAddress: payload.shippingAddress
4814    }, {
4815      skipBillingAddress: payload.skipBillingAddress
4816    }) ?? {};
4817    const paymentDetails = payload.paymentMethodDetails;
4818    const purchaseCartDetails = this.buildPurchaseCartDetails();
4819    const customFields = buildCustomFields();
4820    const contact = payload.contact;
4821    const couponCode = globalThis.Checkout.store.coupons.appliedCode.get();
4822    const couponData = couponCode ? { coupon_codes: [couponCode] } : {};
4823    const virtualInstallmentId = globalThis.Checkout.store.payment.virtualInstallmentId.get();
4824    const installmentData = decodeVirtualInstallmentId(virtualInstallmentId);
4825    const rebillyPayload = {
4826      // NOTE: Temp fix for FHL 2023
4827      ...customFields ? customFields : {},
4828      contact: {
4829        ...contact,
4830        ...addressParams.shipping ?? {}
4831      },
4832      turnstileToken: payload.turnstileToken,
4833      ...addressParams.billing ?? {},
4834      purchase: {
4835        ...couponData,
4836        ...purchaseCartDetails,
4837        ...paymentDetails,
4838        process_new_order: true,
4839        ...paymentDetails?.payment_method_type === "payment-card" && installmentData ? {
4840          installment_duration: installmentData.duration,
4841          installment_type: installmentData.type
4842        } : {}
4843      },
4844      skip_billing_address: Boolean(payload.skipBillingAddress),
4845      skip_optin_track: document.getElementById("cfAR")?.getAttribute("data-leads-collected") === "true"
4846    };
4847    if (__privateMethod(this, _CheckoutSubmit_static, shouldIncludeRegistration_fn).call(this)) rebillyPayload["registration"] = __privateMethod(this, _CheckoutSubmit_static, buildRegistrationDetails_fn).call(this);
4848    const selected_shipping_option = payload.selectedShippingOption;
4849    if (selected_shipping_option && Object.keys(selected_shipping_option).length > 1) {
4850      rebillyPayload.purchase.selected_shipping_option = selected_shipping_option;
4851    }
4852    const redirectUrl = payload.redirectOverride || __privateGet(this, _redirecTo);
4853    if (redirectUrl) {
4854      rebillyPayload.redirect_to = redirectUrl;
4855    }
4856    return rebillyPayload;
4857  }
4858  static generateShippingOptionId(shippingOption) {
4859    return [shippingOption.description, shippingOption.amount_formatted].join("$");
4860  }
4861  static buildDigitalWalletTransactionData(summaryData, cart, shippingEnabled, shippingOptions) {
4862    const { line_items } = summaryData;
4863    const lineItems = line_items.map(({ price, description }, index) => {
4864      let label;
4865      if (line_items.length == cart.items.length) {
4866        const variantId = cart.items[index].variant_id;
4867        const variant = globalThis.Checkout.variantsById[variantId];
4868        label = variant.name;
4869      } else {
4870        label = description;
4871      }
4872      return {
4873        label,
4874        amount: price
4875      };
4876    });
4877    if (summaryData.tax?.amount > 0) {
4878      lineItems.push({
4879        label: "Taxes",
4880        amount: summaryData.tax.amount
4881      });
4882    }
4883    if (summaryData.shipping?.amount > 0) {
4884      lineItems.push({
4885        label: "Shipping",
4886        amount: summaryData.shipping.amount
4887      });
4888    }
4889    if (summaryData.discount?.amount > 0) {
4890      lineItems.push({
4891        label: "Discount",
4892        amount: -summaryData.discount?.amount
4893      });
4894    }
4895    return {
4896      amount: summaryData.total.amount,
4897      lineItems,
4898      ...shippingEnabled ? {
4899        status: shippingOptions.length ? "success" : "fail",
4900        shippingOptions: shippingOptions.map((shippingOption) => ({
4901          id: this.generateShippingOptionId(shippingOption),
4902          label: shippingOption.description,
4903          description: "",
4904          amount: Number(shippingOption.amount.amount)
4905        }))
4906      } : {}
4907    };
4908  }
4909  static buildPurchaseCartDetails() {
4910    const checkoutCart = globalThis.Checkout.computed.checkoutCart.get();
4911    const lineItems = checkoutCart.items.map(
4912      ({ variant_id, price_id, line_item_id, quantity }) => {
4913        return {
4914          id: variant_id,
4915          quantity,
4916          price_id,
4917          ...line_item_id ? { line_item_id } : {}
4918        };
4919      }
4920    );
4921    return { order_id: checkoutCart.order_id, product_variants: lineItems };
4922  }
4923  static submit(payload) {
4924    if (localStorage.getItem("cf2:devtools:enabled")) {
4925      console.log("submitted data", payload);
4926    }
4927    const requestIdempotency = uuidv4();
4928    globalThis.CFDispatchEvent(globalThis.CFEvents.FORM_SUBMITTED, payload);
4929    let timer = null;
4930    __privateMethod(this, _CheckoutSubmit_static, submitOrderAsync_fn).call(this, payload, requestIdempotency, 3, () => {
4931      clearInterval(timer);
4932      globalThis.Checkout.store.submitting.set({
4933        state: globalThis.Checkout.SubmittingStates.START
4934      });
4935    }, (sleepTime) => {
4936      let remainingSeconds = sleepTime / 1e3;
4937      clearInterval(timer);
4938      timer = setInterval(() => {
4939        remainingSeconds -= 1;
4940        globalThis.Checkout.store.submitting.set({
4941          state: globalThis.Checkout.SubmittingStates.WAITING_ON_QUEUE,
4942          remainingSeconds
4943        });
4944      }, 1e3);
4945    }).then((response) => {
4946      if (response.status == 422) {
4947        response.json().then((responseJSON) => {
4948          const errorDetails = responseJSON.error_details;
4949          let errorDetailsMessage = responseJSON.error;
4950          if (responseJSON.error_details && !!errorDetails?.length) {
4951            errorDetailsMessage = errorDetails.map((e) => e.graceful_message ?? e.message).join("</br>");
4952            const mode = globalThis.Checkout.store.checkout.mode.get();
4953            const isRetrieablePayment = mode == globalThis.Checkout.CheckoutStates.OTO && errorDetails.find((e) => e.source == "payment_gateway");
4954            if (isRetrieablePayment) {
4955              globalThis.Checkout.store.showAllErrors.payment.set(false);
4956              globalThis.Checkout.store.payment.id.set(null);
4957            }
4958          }
4959          globalThis.Checkout.store.submitting.set({
4960            state: globalThis.Checkout.SubmittingStates.ERROR,
4961            code: globalThis.Checkout.ErrorTypes.SERVER_ERROR_WITH_MESSAGE,
4962            message: errorDetailsMessage
4963          });
4964        });
4965      } else if (response.ok) {
4966        __privateSet(this, _formSubmitPayload, payload);
4967        globalThis.CFDispatchEvent(globalThis.CFEvents.FORM_SUBMITTED_OK, payload);
4968        if (response.headers.get("X-CF2-APPROVAL-URL")) {
4969          globalThis.Checkout.store.threeds.set({
4970            show: true,
4971            approvalUrl: response.headers.get("X-CF2-APPROVAL-URL")
4972          });
4973        } else {
4974          globalThis.Checkout.store.submitting.set({
4975            state: globalThis.Checkout.SubmittingStates.DONE
4976          });
4977          globalThis.Checkout.store.state.set(globalThis.Checkout.StoreStates.SUBMITTED);
4978          globalThis.CFDispatchEvent(globalThis.CFEvents.FORM_SUBMITTED_FINALIZED, payload);
4979          __privateMethod(this, _CheckoutSubmit_static, handleFormSubmitRedirect_fn).call(this, response, response.headers.get("Location"));
4980        }
4981      } else if (response.status >= 300 && response.status < 400) {
4982        globalThis.Checkout.store.submitting.set({
4983          state: globalThis.Checkout.SubmittingStates.DONE
4984        });
4985        globalThis.Checkout.store.state.set(globalThis.Checkout.StoreStates.SUBMITTED);
4986        globalThis.CFDispatchEvent(globalThis.CFEvents.FORM_SUBMITTED_FINALIZED, payload);
4987        __privateMethod(this, _CheckoutSubmit_static, handleFormSubmitRedirect_fn).call(this, response, response.headers.get("Location") ?? globalThis.location.href);
4988      } else if (response.status === 429) {
4989        clearInterval(timer);
4990        globalThis.Checkout.store.submitting.set({
4991          state: globalThis.Checkout.SubmittingStates.ERROR,
4992          code: globalThis.Checkout.ErrorTypes.EXCEEDED_MAX_RETRIES
4993        });
4994      } else {
4995        globalThis.Checkout.store.submitting.set({
4996          state: globalThis.Checkout.SubmittingStates.ERROR,
4997          code: globalThis.Checkout.ErrorTypes.UNHANDLED_SERVER_RESPONSE
4998        });
4999      }
5000    }).catch((err) => {
5001      console.error(err);
5002      clearInterval(timer);
5003      globalThis.Checkout.store.submitting.set({
5004        state: globalThis.Checkout.SubmittingStates.ERROR,
5005        code: globalThis.Checkout.ErrorTypes.SERVER_ERROR
5006      });
5007    });
5008  }
5009};
5010_redirecTo = new WeakMap();
5011_threedsListenerEnabled = new WeakMap();
5012_formSubmitPayload = new WeakMap();
5013_CheckoutSubmit_static = new WeakSet();
5014leadSourceGenerator_fn = function() {
5015  const DEFAULT_MAX_CHARS_LENGTH = 512;
5016  const leadQueryParamMapping = {
5017    utm_source: {
5018      name: "source"
5019    },
5020    utm_medium: {
5021      name: "medium"
5022    },
5023    utm_campaign: {
5024      name: "campaign"
5025    },
5026    utm_term: {
5027      name: "term"
5028    },
5029    utm_content: {
5030      name: "content"
5031    },
5032    affiliate: {},
5033    subAffiliate: {},
5034    clickId: {},
5035    salesAgent: {}
5036  };
5037  const params = new URLSearchParams(globalThis.location.search);
5038  return Array.from(params.keys()).reduce((acc, key) => {
5039    const mappedValue = leadQueryParamMapping[key];
5040    if (mappedValue) {
5041      const paramValue = params.get(key);
5042      const leadSourceName = mappedValue.name ?? key;
5043      acc[leadSourceName] = paramValue.substring(0, DEFAULT_MAX_CHARS_LENGTH);
5044    }
5045    return acc;
5046  }, {});
5047};
5048submitRebilly_fn = function(onValidationError) {
5049  const paymentType = globalThis.Checkout.store.payment.type.get();
5050  const method = REBILLY_PAYMENT_METHOD_BY_TYPE_MAP[paymentType] ?? paymentType;
5051  const Rebilly = globalThis.Rebilly;
5052  let extraData = { method };
5053  const leadSource = __privateMethod(this, _CheckoutSubmit_static, leadSourceGenerator_fn).call(this);
5054  if (Object.keys(leadSource).length) {
5055    extraData = { ...extraData, leadSource };
5056  }
5057  const form = document.querySelector("#cfAR");
5058  const rebillyDataMapping = {
5059    firstName: "first_name",
5060    lastName: "last_name",
5061    emails: "email",
5062    ...paymentType === "Klarna" ? { country: "country" } : {}
5063  };
5064  const rebillyFieldKeyMapping = {
5065    "paymentInstrument.cvv": "cvv"
5066  };
5067  Object.entries(rebillyDataMapping).forEach(([rebillyKey, dataKey]) => {
5068    const input = form.querySelector(`[data-rebilly="${rebillyKey}"]`);
5069    if (input) {
5070      let value = globalThis.Checkout.store.contact.get()[dataKey];
5071      if (dataKey === "country") {
5072        const cartHasPhysicalProducts = hasPhysicalProducts(globalThis.Checkout.computed.checkoutCart.get());
5073        const billingSameAsShipping = globalThis.Checkout.store.billingSameAsShipping.get();
5074        const key = cartHasPhysicalProducts && billingSameAsShipping ? "shipping" : "billing";
5075        value = globalThis.Checkout.store[key].get()[dataKey] ?? globalThis.Checkout.contactLocale.country;
5076      }
5077      input.value = value;
5078    }
5079  });
5080  globalThis.clearBlankInputFields();
5081  return Rebilly.createToken(form, extraData).catch((e) => {
5082    console.error(e);
5083    if (e.invalidFields && e.invalidFields.length) {
5084      e.invalidFields.forEach((error) => {
5085        const key = rebillyFieldKeyMapping[error.field];
5086        if (key) {
5087          const event = { valid: false, error: { message: error.message } };
5088          globalThis.Checkout.store.payment["payment-card"].events.setKey(key, event);
5089        }
5090      });
5091      globalThis.Checkout.store.submitting.set({
5092        state: globalThis.Checkout.SubmittingStates.ERROR,
5093        code: globalThis.Checkout.ErrorTypes.REBILLY_ERROR
5094      });
5095    } else {
5096      let message = e.message;
5097      if (e.details.length) {
5098        const details = e.details.join(" - ");
5099        message = `${message} - ${details}`;
5100      }
5101      globalThis.Checkout.store.submitting.set({
5102        state: globalThis.Checkout.SubmittingStates.ERROR,
5103        code: globalThis.Checkout.ErrorTypes.REBILLY_ERROR,
5104        message
5105      });
5106    }
5107    onValidationError(e);
5108  });
5109};
5110buildPaymentMethodDetails_fn = function() {
5111  const mode = globalThis.Checkout.store.checkout.mode.get();
5112  if (mode == globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE) return;
5113  const payment_method_type = globalThis.Checkout.store.payment.type.get();
5114  const rebilly_token = globalThis.Checkout.store.payment[payment_method_type].token.get();
5115  const payment_method_id = globalThis.Checkout.store.payment.id.get();
5116  if (payment_method_id) return { payment_method_id, rebilly_token: null };
5117  return {
5118    payment_method_id: null,
5119    payment_method_type,
5120    rebilly_token
5121  };
5122};
5123buildRegistrationDetails_fn = function() {
5124  return {
5125    calendar_event_id: document.getElementsByName("registration[calendar_event_id]")[0].value,
5126    occurs_at: document.getElementsByName("registration[occurs_at]")[0].value
5127  };
5128};
5129shouldIncludeRegistration_fn = function() {
5130  return document.getElementsByName("registration[calendar_event_id]")?.length > 0;
5131};
5132buildAddressParams_fn = function(addressParams, options) {
5133  const mode = globalThis.Checkout.store.checkout.mode.get();
5134  const billing = addressParams.billingAddress ?? {};
5135  const shipping = addressParams.shippingAddress ?? {};
5136  const checkoutCart = globalThis.Checkout.computed.checkoutCart.get();
5137  if (mode == globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE && !hasPhysicalProducts(checkoutCart)) {
5138    return;
5139  }
5140  let billing_address_attributes, physical_address_attributes;
5141  if (mode !== globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE) {
5142    if (isSavedAddress(billing)) {
5143      billing_address_attributes = {
5144        id: billing.id
5145      };
5146    } else {
5147      billing_address_attributes = {
5148        address_one: billing.address,
5149        address_two: billing.address_2,
5150        city: billing.city,
5151        region_name: billing.state,
5152        country_id: billing.country,
5153        postal_code: billing.zip
5154      };
5155    }
5156  }
5157  if (isSavedAddress(shipping)) {
5158    physical_address_attributes = {
5159      id: shipping.id
5160    };
5161  } else {
5162    physical_address_attributes = {
5163      address_one: shipping.address,
5164      address_two: shipping.address_2,
5165      city: shipping.city,
5166      region_name: shipping.state,
5167      country_id: shipping.country,
5168      postal_code: shipping.zip
5169    };
5170  }
5171  if (hasPhysicalProducts(checkoutCart)) {
5172    const billingSameAsShipping = globalThis.Checkout.store.billingSameAsShipping.get();
5173    if (options.skipBillingAddress) {
5174      return { shipping: { shipping_addresses_attributes: [{ physical_address_attributes }] } };
5175    }
5176    if (mode == globalThis.Checkout.CheckoutStates.OTO) {
5177      return {
5178        shipping: { shipping_addresses_attributes: [{ physical_address_attributes }] },
5179        billing: { billing_address_attributes, billing_same_as_shipping: false }
5180      };
5181    }
5182    if (billingSameAsShipping) {
5183      return {
5184        shipping: { shipping_addresses_attributes: [{ physical_address_attributes }] },
5185        billing: { billing_same_as_shipping: true }
5186      };
5187    } else {
5188      return {
5189        shipping: { shipping_addresses_attributes: [{ physical_address_attributes }] },
5190        billing: { billing_address_attributes, billing_same_as_shipping: false }
5191      };
5192    }
5193  } else {
5194    if (options.skipBillingAddress) return;
5195    return { billing: { billing_address_attributes } };
5196  }
5197};
5198submitOrderAsync_fn = async function(data, requestIdempotency, maxRetries = 3, onBeforeSubmit, onRetryAfter) {
5199  let response;
5200  for (let i = 0; i < maxRetries; i++) {
5201    onBeforeSubmit();
5202    const nonce = await fetchCheckoutNonce();
5203    response = await fetch(renderedHref(), {
5204      credentials: "same-origin",
5205      method: "post",
5206      body: JSON.stringify({ ...data, request_idempotency: requestIdempotency, ...checkoutNonceParams(nonce) }),
5207      headers: {
5208        "Content-Type": "application/json",
5209        "X-CF2-POST-TYPE": "submit"
5210      }
5211    }).then((res) => {
5212      if (res.status >= 500) {
5213        console.error(res);
5214        throw Error("500 error");
5215      }
5216      return res;
5217    });
5218    if (response.status === 429) {
5219      const sleepTime = parseInt(response.headers.get("Retry-After"));
5220      onRetryAfter(sleepTime);
5221      console.log(`Waiting on queue, retrying after ${sleepTime}`);
5222      await sleepMs(sleepTime);
5223    } else {
5224      break;
5225    }
5226  }
5227  return response;
5228};
5229handleFormSubmitRedirect_fn = async function(response, urlToRedirect) {
5230  globalThis.location.href = urlToRedirect;
5231};
5232add3dsListener_fn = function() {
5233  if (__privateGet(this, _threedsListenerEnabled)) return;
5234  __privateSet(this, _threedsListenerEnabled, true);
5235  globalThis.addEventListener("message", (event) => {
5236    if (event.data.sender == "CfOrderStatus") {
5237      const orderDetails = event.data.details;
5238      if (__privateGet(this, _redirecTo)) {
5239        orderDetails.redirect_to = __privateGet(this, _redirecTo);
5240      }
5241      fetch(renderedHref(), {
5242        credentials: "same-origin",
5243        method: "post",
5244        body: JSON.stringify(orderDetails),
5245        headers: {
5246          "Content-Type": "application/json",
5247          "X-CF2-POST-TYPE": "submit"
5248        }
5249      }).then((response) => {
5250        if (orderDetails["orderResult"] == "declined") {
5251          globalThis.Checkout.store.submitting.set({
5252            state: globalThis.Checkout.SubmittingStates.ERROR,
5253            code: globalThis.Checkout.ErrorTypes.THREEDS_DECLINED_ERROR
5254          });
5255        } else {
5256          if (response.ok) {
5257            globalThis.Checkout.store.state.set(globalThis.Checkout.StoreStates.SUBMITTED);
5258            globalThis.CFDispatchEvent(globalThis.CFEvents.FORM_SUBMITTED_FINALIZED, __privateGet(this, _formSubmitPayload));
5259            __privateMethod(this, _CheckoutSubmit_static, handleFormSubmitRedirect_fn).call(this, response, response.headers.get("Location"));
5260          } else {
5261            response.json().then((r) => {
5262              globalThis.Checkout.store.submitting.set({
5263                state: globalThis.Checkout.SubmittingStates.ERROR,
5264                code: globalThis.Checkout.ErrorTypes.THREEDS_DECLINED_CUSTOM_ERROR,
5265                message: r.error
5266              });
5267            });
5268          }
5269        }
5270        globalThis.Checkout.store.threeds.set({
5271          show: false,
5272          approvalUrl: null
5273        });
5274      });
5275    }
5276  });
5277};
5278__privateAdd(CheckoutSubmit, _CheckoutSubmit_static);
5279__privateAdd(CheckoutSubmit, _redirecTo, document.querySelector('[href="#submit-checkout-form"]')?.getAttribute("data-on-submit-go-to"));
5280__privateAdd(CheckoutSubmit, _threedsListenerEnabled, false);
5281__privateAdd(CheckoutSubmit, _formSubmitPayload, null);
5282
5283// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-apple-pay-button-v1.ts
5284init_runtime();
5285var CheckoutApplePayButtonV1 = class extends CF2Component {
5286  constructor(el, runtimeSel) {
5287    super(el, runtimeSel);
5288  }
5289  mount() {
5290    this.applePayMounted = nanostores.atom(false);
5291    const checkoutElement = this.element.closest(".elCheckout");
5292    if (!!this.getApplePayPreview()) {
5293      this.getApplePayPreview().addEventListener("click", (evt) => {
5294        evt.preventDefault();
5295        CheckoutSubmit.checkSubmitShowErrors({ onlyFields: /* @__PURE__ */ new Set(["products"]) });
5296        CheckoutSubmit.checkSubmit(checkoutElement);
5297      });
5298      new MutationObserver((mutations) => {
5299        for (const mutation of mutations) {
5300          for (const addedNode of mutation.addedNodes) {
5301            if (addedNode.id == "rebilly-apple-pay-button") {
5302              this.applePayMounted.set(true);
5303            }
5304          }
5305          for (const removedNode of mutation.removedNodes) {
5306            if (removedNode.id == "rebilly-apple-pay-button") {
5307              this.applePayMounted.set(false);
5308            }
5309          }
5310        }
5311      }).observe(this.element.querySelector(".apple-pay-button"), {
5312        subtree: true,
5313        childList: true
5314      });
5315      const computedState = nanostores.computed([
5316        Checkout.computed.isDigitalWalletReadyToStart,
5317        this.applePayMounted,
5318        Checkout.store.isUpdatingRebilly
5319      ], (isDigitalWalletReadyToStart, isMounted, isUpdatingRebilly) => {
5320        if (isUpdatingRebilly) {
5321          return "loading";
5322        } else if (!isMounted || !isDigitalWalletReadyToStart) {
5323          return "preview";
5324        } else {
5325          return "ready";
5326        }
5327      });
5328      computedState.subscribe((state) => {
5329        this.getApplePayWrapper() && (this.getApplePayWrapper().dataset.state = state);
5330      });
5331      const computedShowApplePay = nanostores.computed([
5332        Checkout.store.payment.id,
5333        Checkout.store.payment.type
5334      ], (paymentId, paymentType) => {
5335        return !paymentId && paymentType == "apple-pay" && this.mode != "upgradeDowngrade";
5336      });
5337      computedShowApplePay.subscribe((showApplePay) => {
5338        this.element.closest(".submit-button-wrapper")?.setAttribute("data-show-apple-pay", showApplePay);
5339      });
5340    }
5341  }
5342  getApplePayWrapper() {
5343    return this.element.querySelector(".apple-pay-button-wrapper");
5344  }
5345  getApplePayPreview() {
5346    return this.element.querySelector(".apple-pay-button-preview");
5347  }
5348};
5349registerComponent("CheckoutApplePayButton/V1", CheckoutApplePayButtonV1);
5350window["CheckoutApplePayButtonV1"] = CheckoutApplePayButtonV1;
5351
5352// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-submit-button-v1.ts
5353init_define_process();
5354init_general();
5355init_runtime();
5356var CheckoutSubmitButtonV1 = class extends CF2Component {
5357  constructor(el, runtimeSel) {
5358    super(el, runtimeSel);
5359  }
5360  onSubmit(element) {
5361  }
5362  mount() {
5363    this.storeButtonInitialHTML();
5364    this.getSubmitButton().addEventListener("click", (evt) => {
5365      evt.preventDefault();
5366      this.requestSubmit();
5367    });
5368    const checkoutElement = this.element.closest(".elCheckout");
5369    Checkout.store.state.listen((state) => {
5370      if (state === Checkout.StoreStates.INITIALIZED && !this.keydownListenerAttached) {
5371        this.keydownListenerAttached = true;
5372        document.addEventListener("keydown", (evt) => {
5373          if (evt.isComposing || evt.keyCode === 229) return;
5374          if (evt.keyCode === 13 && $(this.element).is(":visible")) {
5375            if (isElementVisibleOnViewport(checkoutElement, 20)) {
5376              this.element.focus();
5377              this.requestSubmit();
5378            }
5379          }
5380        });
5381      }
5382    });
5383  }
5384  // The single entry point for every submit trigger. The lock is taken
5385  // synchronously, before any await, so it covers the whole attempt -- the
5386  // validation, tokenization and nonce work that runs before the payment POST as
5387  // well as the POST itself. The Enter key comes through here too, since
5388  // `pointer-events: none` only stops pointer input.
5389  requestSubmit() {
5390    if (this.isSubmitLocked()) return;
5391    this.lockSubmit();
5392    Promise.all(this.onSubmit(this.element) ?? []).finally(() => {
5393      if (!this.submitClaimed) this.unlockSubmit();
5394    });
5395  }
5396  isSubmitLocked() {
5397    return this.getSubmitButton().getAttribute("data-disabled") === "true";
5398  }
5399  // aria-disabled rides along because the button is an anchor: `pointer-events: none`
5400  // takes it out of the pointer flow but says nothing to a screen reader.
5401  lockSubmit() {
5402    this.getSubmitButton().setAttribute("data-disabled", true);
5403    this.getSubmitButton().setAttribute("aria-disabled", true);
5404  }
5405  unlockSubmit() {
5406    this.getSubmitButton().setAttribute("data-disabled", false);
5407    this.getSubmitButton().removeAttribute("aria-disabled");
5408  }
5409  // Locks the button on behalf of a gateway. Also covers submits that never
5410  // touched this button -- express/wallet payments, the OTO one-click flow --
5411  // which would otherwise leave it live while a payment is running.
5412  claimSubmit() {
5413    this.submitClaimed = true;
5414    this.lockSubmit();
5415  }
5416  getSubmitButton() {
5417    return this.element.querySelector('[href="#submit-checkout-form"]');
5418  }
5419  storeButtonInitialHTML() {
5420    const buttonMainText = this.element.querySelector(".elButtonMain .elButtonMainText");
5421    const buttonSubText = this.element.querySelector(".elButtonSub");
5422    this.buttonMainTextInitialHTML = buttonMainText.innerHTML;
5423    this.buttonSubTextInitialHTML = buttonSubText.innerHTML;
5424  }
5425  // The gateways' "back to idle" call, and so also the only thing that releases
5426  // the submit lock. Callers must not use it to refresh the label while a submit
5427  // is in flight.
5428  setButtonInitialHTML() {
5429    this.submitClaimed = false;
5430    this.unlockSubmit();
5431    this.element.removeAttribute("data-loading");
5432    const buttonMain = this.element.querySelector(".elButtonMain");
5433    const buttonSub = this.element.querySelector(".elButtonSub");
5434    buttonMain.querySelector(".elButtonSpinner").style.removeProperty("display");
5435    const buttonMainText = buttonMain.querySelector(".elButtonMainText");
5436    buttonMainText.innerHTML = this.buttonMainTextInitialHTML;
5437    buttonSub.innerHTML = this.buttonSubTextInitialHTML;
5438  }
5439  setLoading() {
5440    this.element.setAttribute("data-loading", "true");
5441  }
5442  setSubmittingText() {
5443    this.claimSubmit();
5444    this.element.removeAttribute("data-loading");
5445    const buttonMain = this.element.querySelector(".elButtonMain");
5446    const buttonSub = this.element.querySelector(".elButtonSub");
5447    buttonMain.querySelector(".elButtonSpinner").style.display = "inline-block";
5448    const buttonMainText = buttonMain.querySelector(".elButtonMainText");
5449    buttonMainText.innerHTML = this.submittingText;
5450    buttonSub.innerHTML = "";
5451  }
5452  update({ text, subText }) {
5453    this.element.removeAttribute("data-loading");
5454    const buttonMain = this.element.querySelector(".elButtonMain");
5455    const buttonSub = this.element.querySelector(".elButtonSub");
5456    const buttonMainText = buttonMain.querySelector(".elButtonMainText");
5457    buttonMainText.textContent = text;
5458    buttonSub.textContent = subText;
5459  }
5460};
5461registerComponent("CheckoutSubmitButton/V1", CheckoutSubmitButtonV1);
5462window["CheckoutSubmitButtonV1"] = CheckoutSubmitButtonV1;
5463
5464// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-configuration-error-v1.ts
5465init_define_process();
5466init_runtime();
5467var CheckoutConfigurationErrorV1 = class extends CF2Component {
5468  constructor(el, runtimeSel) {
5469    super(el, runtimeSel);
5470    __publicField(this, "errorMessageMapping", {
5471      [ERROR_CODES.EMPTY_PAYMENT_METHODS_ERROR]: `<a href="https://support.myclickfunnels.com/docs/getting-started-setting-up-payments-in-clickfunnels" target="_blank">${this.checkoutConfigurationErrorsTexts.emptyPaymentMethodsError}</a>`,
5472      [ERROR_CODES.EMPTY_PRODUCTS_ERROR]: this.checkoutConfigurationErrorsTexts.emptyProductsError,
5473      [ERROR_CODES.ORDER_RECURRING_INTERVAL_MISMATCH]: this.checkoutConfigurationErrorsTexts.orderRecurringIntervalMismatchError,
5474      [ERROR_CODES.MULTIPLE_CHECKOUT_PRESENT]: this.checkoutConfigurationErrorsTexts.multipleCheckoutPresentError
5475    });
5476  }
5477  mount() {
5478    const prettifyErrorMessage = (error) => {
5479      if (this.errorMessageMapping[error.code]) return this.errorMessageMapping[error.code];
5480      if (error.fetchErrorType == CFFetcherErrorTypes.NETWORK_ERROR) {
5481        return `${this.checkoutConfigurationErrorsTexts.networkError} ${error.code}`;
5482      } else {
5483        return `${this.checkoutConfigurationErrorsTexts.criticalServerError} ${error.code}`;
5484      }
5485    };
5486    Checkout.store?.criticalErrors?.subscribe((errors) => {
5487      this.errors = errors.map(prettifyErrorMessage);
5488      this.render();
5489    });
5490  }
5491  setErrors(errors) {
5492    if (errors === null || typeof errors === "undefined") {
5493      return;
5494    }
5495    this.errors = Array.isArray(errors) ? errors : [errors];
5496    this.render();
5497  }
5498  remove() {
5499    this.element.innerHTML = "";
5500  }
5501  render(initializeChildrenInstances = false) {
5502    const is_server = true;
5503    const errors = this.errors ?? [];
5504    const checkoutConfigurationErrorsTexts = this.checkoutConfigurationErrorsTexts ?? null;
5505    let html = "";
5506    {
5507      html += `<div class="elCheckoutConfigError`;
5508      if (errors?.length == 0) {
5509        html += ` elHide`;
5510      }
5511      html += `">`;
5512      const c0 = errors;
5513      const fl1 = new CF2ForloopDrop(c0.length);
5514      for (const error of c0) {
5515        const forloop = fl1;
5516        html += `<span>${error}</span>`;
5517        forloop.next();
5518      }
5519      html += `</div>`;
5520    }
5521    this.replaceContent(html);
5522    if (initializeChildrenInstances) {
5523      const scopeToYggRender = this.element.querySelectorAll("[ygg-render]").length > 0;
5524      const options = { scopeToYggRender };
5525      CF2Component.hydrateTree(this.element, options);
5526    }
5527  }
5528};
5529registerComponent("CheckoutConfigurationError/V1", CheckoutConfigurationErrorV1);
5530window["CheckoutConfigurationErrorV1"] = CheckoutConfigurationErrorV1;
5531
5532// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-order-details-content-v1.ts
5533init_define_process();
5534init_runtime();
5535var CheckoutOrderDetailsContentV1 = class extends CF2Component {
5536  constructor(el, runtimeSel) {
5537    super(el, runtimeSel);
5538    __publicField(this, "undefined");
5539  }
5540  remove() {
5541    this.element.innerHTML = "";
5542  }
5543  render(initializeChildrenInstances = false) {
5544    const is_server = true;
5545    const order_details = this.order_details ?? { "order_number": "#12345", "shipping_address": {}, "billing_address": {}, "billing_payment_method": { "id": 1, "details": "XXXX-XXXX-XXXX-1111", "type": "payment-card", "icon": "visa" }, "line_items": [{ "variant_id": 25, "product_id": 6508, "quantity": 1, "image": "/editor/editor-demo-image-placeholder.svg" }] };
5546    let html = "";
5547    {
5548      html += `<div class="elCheckoutOrderDetailsInfoWrapper"><div class="elCheckoutOrderDetailsInfo"><h2> ${order_details?.order_number}</h2><div class="elCheckoutOrderDetailsStatus" data-order-status="${order_details?.service_status}">${order_details?.service_status.charAt(0).toUpperCase() + order_details?.service_status.slice(1).toLowerCase()}</div></div>`;
5549      if (order_details?.name) {
5550        html += `<span class="elCheckoutOrderDetailsName">${order_details?.name}</span>`;
5551      }
5552      html += `<span class="elCheckoutOrderDetailsDate">${order_details?.created_at}</span></div><div class="elCheckoutOrderDetailsItemsWrapper elCheckoutOrderDetailsWrapper"><h3></h3><div class="elCheckoutOrderDetailsItems elCheckoutOrderDetailsContainer">`;
5553      const c0 = order_details.line_items;
5554      const fl1 = new CF2ForloopDrop(c0.length);
5555      for (const line_item of c0) {
5556        const forloop = fl1;
5557        html += `<div class="elCheckoutOrderDetailsItem">`;
5558        const imageUrl = line_item?.image;
5559        if (imageUrl) {
5560          html += `<div class="elCheckoutOrderDetailsItemImage"><div data-page-element="Image/V2" class="elImageWrapper de-image-block id-Image/V2`;
5561          if (CF2Blank(imageUrl) && CF2Blank(null) && true) {
5562            html += ` forceHide`;
5563          }
5564          html += `" data-liquid-replace="item">`;
5565          if (imageUrl || !CF2Blank(null)) {
5566            html += `<img class="elImage" src="${imageUrl ?? null}" data-lazy-loading="true" data-lazy-loading="true"/>`;
5567          } else if (false) {
5568            html += `<div class="image-placeholder" title=""><span class="image-placeholder-header"></span></div>`;
5569          }
5570          html += `</div><div class="elCheckoutOrderDetailsItemQty">${line_item?.quantity}</div></div>`;
5571        }
5572        html += `<div class="elCheckoutOrderDetailsItemInfo"><span class="elCheckoutOrderDetailsItemName">${line_item?.product_name}</span>`;
5573        if (line_item?.display_price) {
5574          html += `<span class="elCheckoutOrderDetailsItemPrice">${line_item?.display_price}</span>`;
5575        }
5576        if (line_item?.variant_properties_values?.length > 0) {
5577          html += `<div class="elCheckoutOrderDetailsVariants">`;
5578          const c2 = line_item.variant_properties_values;
5579          const fl3 = new CF2ForloopDrop(c2.length);
5580          for (const variant_item of c2) {
5581            const forloop2 = fl3;
5582            html += `<span>${variant_item?.value}</span>`;
5583            forloop2.next();
5584          }
5585          html += `</div>`;
5586        }
5587        html += `</div><div class="elCheckoutOrderDetailsItemAmount"><span>${line_item?.amount}</span></div></div>`;
5588        forloop.next();
5589      }
5590      html += `</div></div>`;
5591      if (order_details?.shipping_address) {
5592        html += `<div class="elCheckoutOrderDetailsShipping elCheckoutOrderDetailsWrapper"><h3></h3><div class="elCheckoutOrderDetailsContainer"><i class="fas fa-map-marker-alt"></i><span>${order_details?.shipping_address}</span></div></div>`;
5593      }
5594      if (order_details?.billing_address) {
5595        html += `<div class="elCheckoutOrderDetailsBilling elCheckoutOrderDetailsWrapper"><h3></h3><div class="elCheckoutOrderDetailsContainer"><i class="far fa-credit-card"></i><span>${order_details?.billing_address}</span></div></div>`;
5596      }
5597      if (order_details?.billing_payment_method) {
5598        html += `<div class="elCheckoutOrderDetailsPayment elCheckoutOrderDetailsWrapper"><h3></h3>`;
5599        if (order_details?.billing_payment_method?.type == "payment-card") {
5600          html += `<div class="elCheckoutOrderDetailsPaymentType"><div class="elCheckoutOrderDetailsContainer"><i class="fab fa-cc-${order_details?.billing_payment_method?.icon}"></i><span>${order_details?.billing_payment_method?.details}</span></div></div>`;
5601        } else if (order_details?.billing_payment_method?.type == "paypal") {
5602          html += `<div class="elCheckoutOrderDetailsPaymentType"><div class="elCheckoutOrderDetailsContainer"><i class="fab fa-paypal"></i><span>${order_details?.billing_payment_method?.details}</span></div></div>`;
5603        }
5604        html += `</div>`;
5605      }
5606      html += `<div class="elCheckoutOrderDetailsSummaryWrapper elCheckoutOrderDetailsWrapper"><h3></h3>
5606<div class="elCheckoutOrderDetailsSummary elCheckoutOrderDetailsContainer">`;
5607      if (order_details?.tax_amount) {
5608        html += `<div class="elCheckoutOrderDetailsSummaryTax"><span></span><span>${order_details?.tax_amount}</span></div>`;
5609      }
5610      if (order_details?.shipping_amount) {
5611        html += `<div class="elCheckoutOrderDetailsSummaryShipping"><span></span><span>${order_details?.shipping_amount}</span></div>`;
5612      }
5613      html += `<div class="elCheckoutOrderDetailsSummaryTotal"><span></span><span>${order_details?.total_amount}</span></div></div></div>`;
5614    }
5615    this.replaceContent(html);
5616    if (initializeChildrenInstances) {
5617      const scopeToYggRender = this.element.querySelectorAll("[ygg-render]").length > 0;
5618      const options = { scopeToYggRender };
5619      CF2Component.hydrateTree(this.element, options);
5620    }
5621  }
5622};
5623registerComponent("CheckoutOrderDetailsContent/V1", CheckoutOrderDetailsContentV1);
5624window["CheckoutOrderDetailsContentV1"] = CheckoutOrderDetailsContentV1;
5625
5626// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-order-details-v1.ts
5627init_define_process();
5628init_modal_v1();
5629
5630// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-existing-orders.ts
5631init_define_process();
5632
5633// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Utils/api.ts
5634init_define_process();
5635init_fetcher();
5636function makeCurrentPageFetcher(options) {
5637  const { headers, ...requestOptions } = options ?? {};
5638  const fetcher = new Fetcher({
5639    debug: true,
5640    pathPrefix: window.location.origin + renderedPath(),
5641    headers: {
5642      Accept: "application/json",
5643      "Content-Type": "application/json",
5644      ...headers ?? {}
5645    },
5646    requestOptions: {
5647      retries: 3,
5648      timeoutMS: 3e4,
5649      timeoutAfterRetrial: 1e3,
5650      convertThrowToErrorResponse: true,
5651      onlyOneInflightRequest: true,
5652      ...requestOptions
5653    }
5654  });
5655  return fetcher;
5656}
5657
5658// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-existing-orders.ts
5659var REACTAVATABLE_SERVICE_STATUS = ["canceled", "churned"];
5660var existingOrderFetcher = makeCurrentPageFetcher({
5661  customEvent: "CF2:ExistingOrder",
5662  shouldCaptureServerError: true,
5663  convertThrowToErrorResponse: false
5664});
5665var _hasReactivatableItems, _hasUpgradeDowngradeItems, _productCardDetails, _productCardDetailsObj;
5666var CheckoutExistingOrders = class {
5667  static fetch(payload = {}) {
5668    if (globalThis.globalResourceData.resourceName == "checkout") return Promise.resolve();
5669    const manage_order_id = new URLSearchParams(window.location.search).get("manage_order_id");
5670    return existingOrderFetcher.get("/existing_orders", { manage_order_id, ...payload }).then((data) => {
5671      this.cleanUp();
5672      this.processExistingOrdersResponse(data);
5673    }).catch((e) => {
5674      throw new CheckoutCriticalError(ERROR_CODES.FETCH_EXISTING_ORDERS_ERROR, {
5675        cause: e
5676      });
5677    });
5678  }
5679  static cleanUp() {
5680    __privateSet(this, _hasReactivatableItems, false);
5681    __privateSet(this, _hasUpgradeDowngradeItems, false);
5682    this.orderDetailsByOrderId = {};
5683    __privateSet(this, _productCardDetails, {});
5684    __privateSet(this, _productCardDetailsObj, {});
5685  }
5686  static clearUpdatableOrders(selectedProductId) {
5687    if (anyUpdatableOrders()) {
5688      globalThis.globalResourceData.products?.forEach(({ id: productId }) => {
5689        const isSelected = selectedProductId == productId;
5690        updateCardByProductIdState(productId, {
5691          quantity: isSelected ? 1 : 0,
5692          renderType: void 0,
5693          selectedOrderIndex: void 0,
5694          selectedUpdatableCartItemIndex: void 0,
5695          updatableOrders: void 0,
5696          cartItemOrderId: void 0,
5697          cartItemLineItemId: void 0,
5698          cartItemRenderType: void 0
5699        });
5700      });
5701      this.cleanUp();
5702    }
5703  }
5704  static processExistingOrdersResponse(existingOrdersResponse) {
5705    existingOrdersResponse.orders.forEach((order) => {
5706      const orderId = order.id;
5707      this.orderDetailsByOrderId[orderId] = order;
5708      const orderNumber = order.order_number;
5709      order.line_items.forEach((lineItem) => {
5710        const productId = lineItem.product_id;
5711        const lineItemSubscriptionDetails = lineItem.subscription_details;
5712        if (REACTAVATABLE_SERVICE_STATUS.includes(lineItemSubscriptionDetails?.status) && lineItemSubscriptionDetails?.reactivatable) {
5713          this.processReactivation(lineItem, orderId, orderNumber, productId);
5714        } else {
5715          this.processUpgradeDowngrades(lineItem, orderId, orderNumber, productId);
5716        }
5717      });
5718    });
5719    if (__privateGet(this, _hasReactivatableItems) || __privateGet(this, _hasUpgradeDowngradeItems)) {
5720      this.processUpdatableObj();
5721      this.updateSelectedCardItem();
5722    }
5723  }
5724  static processUpdatableObj() {
5725    __privateSet(this, _productCardDetails, {});
5726    Object.keys(__privateGet(this, _productCardDetailsObj)).forEach((k) => {
5727      __privateGet(this, _productCardDetails)[k] = {
5728        updatableOrders: Object.values(__privateGet(this, _productCardDetailsObj)[k].updatableOrders).reverse()
5729      };
5730    });
5731  }
5732  static processReactivation(lineItem, orderId, orderNumber, productId) {
5733    const lineItemId = lineItem.id;
5734    const variantId = lineItem.variant_id;
5735    const priceId = lineItem.price_id;
5736    if (!globalThis.Checkout.variantsById[variantId] || !globalThis.Checkout.pricesById[priceId]) {
5737      return;
5738    }
5739    __privateSet(this, _hasReactivatableItems, true);
5740    this.storeProductCardDetails(
5741      globalThis.Checkout.CheckoutStates.REACTIVATE,
5742      orderId,
5743      orderNumber,
5744      lineItemId,
5745      productId,
5746      variantId,
5747      priceId
5748    );
5749  }
5750  static processUpgradeDowngrades(lineItem, orderId, orderNumber, productId) {
5751    const lineItemId = lineItem.id;
5752    lineItem.upgrade_downgrade_options.forEach((upgradeDowngrade) => {
5753      const variantId = upgradeDowngrade.variant_to_id;
5754      const priceId = upgradeDowngrade.price_to_id;
5755      if (!globalThis.Checkout.variantsById[variantId] || !globalThis.Checkout.pricesById[priceId]) {
5756        return;
5757      }
5758      __privateSet(this, _hasUpgradeDowngradeItems, true);
5759      this.storeProductCardDetails(
5760        globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE,
5761        orderId,
5762        orderNumber,
5763        lineItemId,
5764        productId,
5765        variantId,
5766        priceId,
5767        upgradeDowngrade.direction
5768      );
5769    });
5770  }
5771  static storeProductCardDetails(type, orderId, orderNumber, lineItemId, productId, variantId, priceId, direction) {
5772    __privateGet(this, _productCardDetailsObj)[productId] = __privateGet(this, _productCardDetailsObj)[productId] ?? {
5773      updatableOrders: {}
5774    };
5775    const updatableOrders = __privateGet(this, _productCardDetailsObj)[productId].updatableOrders;
5776    updatableOrders[orderId] = updatableOrders[orderId] ?? {
5777      type,
5778      id: orderId,
5779      number: orderNumber,
5780      updatableItems: []
5781    };
5782    const { name: variantName } = globalThis.Checkout.variantsById[variantId];
5783    const { name: priceName } = globalThis.Checkout.pricesById[priceId];
5784    const updatableItems = updatableOrders[orderId].updatableItems;
5785    updatableItems.push({
5786      variantName,
5787      priceName,
5788      direction: direction ? direction?.charAt(0).toUpperCase() + direction?.slice(1) : null,
5789      cardDetails: {
5790        variantId,
5791        priceId,
5792        // NOTE: We disable orderId and lineItemId for reactivations until we can perform reactivations
5793        // on the same order as currently we create a new order when that happens
5794        ...type == globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE ? {
5795          orderId,
5796          lineItemId
5797        } : {}
5798      }
5799    });
5800  }
5801  static updateSelectedCardItem() {
5802    let selectedCartItemDetail;
5803    globalThis.Checkout.computed.checkoutCart.get().items.find(({ product_id, variant_id, price_id }) => {
5804      const cardDetails = __privateGet(this, _productCardDetails)[product_id]?.updatableOrders[0].updatableItems[0].cardDetails;
5805      if (!globalThis.Checkout.productsById[product_id].bump && __privateGet(this, _productCardDetails)[product_id]) {
5806        selectedCartItemDetail = {};
5807        selectedCartItemDetail.variantId = cardDetails?.variantId ?? variant_id;
5808        selectedCartItemDetail.priceId = cardDetails?.priceId ?? price_id;
5809        selectedCartItemDetail.productId = product_id;
5810        return true;
5811      }
5812    });
5813    if (!selectedCartItemDetail) {
5814      selectedCartItemDetail = {};
5815      const product = globalThis.Checkout.products.filter((p) => !p.bump)[0];
5816      const cardDetails = __privateGet(this, _productCardDetails)[product.id]?.updatableOrders[0].updatableItems[0].cardDetails;
5817      const variant = product.variants[0];
5818      const price = variant.prices[0];
5819      selectedCartItemDetail.variantId = cardDetails?.variantId ?? Number(variant.id);
5820      selectedCartItemDetail.priceId = cardDetails?.priceId ?? Number(price.id);
5821      selectedCartItemDetail.productId = product.id;
5822    }
5823    globalThis.globalResourceData.products?.forEach(({ id: productId }) => {
5824      const hasUpdatablePccState = !!__privateGet(this, _productCardDetails)[productId];
5825      if (hasUpdatablePccState) {
5826        const order = __privateGet(this, _productCardDetails)[productId].updatableOrders[0];
5827        const cartItem = order.updatableItems[0].cardDetails;
5828        const updatablePccState = __privateGet(this, _productCardDetails)[productId] ?? {};
5829        updatablePccState.selectedOrderIndex = 0;
5830        updatablePccState.selectedUpdatableCartItemIndex = 0;
5831        updatablePccState.cartItemOrderId = cartItem.orderId;
5832        updatablePccState.cartItemLineItemId = cartItem.lineItemId;
5833        updatablePccState.cartItemRenderType = updatablePccState.renderType = order.type;
5834        updatablePccState.variantId = cartItem.variantId;
5835        updatablePccState.priceId = cartItem.priceId;
5836        const isProductInCart = selectedCartItemDetail.productId == productId;
5837        if (isProductInCart) {
5838          updatablePccState.variantId = selectedCartItemDetail.variantId;
5839          updatablePccState.priceId = selectedCartItemDetail.priceId;
5840          updatablePccState.quantity = 1;
5841        }
5842        const compositeKeys = getCompositeKeysForProduct(String(productId));
5843        updateCardByProductIdState(productId, {
5844          ...updatablePccState,
5845          ...compositeKeys.length > 0 ? { quantity: 0 } : {}
5846        });
5847        for (const compositeKey of compositeKeys) {
5848          const variantId = compositeKey.split(":")[1];
5849          const matchingItem = order.updatableItems.find((item) =>
5849 String(item.cardDetails.variantId) == variantId);
5850          if (matchingItem) {
5851            updateCardByProductIdState(compositeKey, {
5852              updatableOrders: updatablePccState.updatableOrders,
5853              renderType: order.type,
5854              individualDirection: matchingItem.direction,
5855              selectedOrderIndex: 0,
5856              selectedUpdatableCartItemIndex: 0,
5857              cartItemRenderType: order.type,
5858              cartItemOrderId: matchingItem.cardDetails.orderId,
5859              cartItemLineItemId: matchingItem.cardDetails.lineItemId,
5860              variantId: matchingItem.cardDetails.variantId,
5861              priceId: matchingItem.cardDetails.priceId,
5862              quantity: isProductInCart && String(selectedCartItemDetail.variantId) == variantId ? 1 : 0
5863            });
5864          } else {
5865            const fullOrder = this.orderDetailsByOrderId[order.id];
5866            const isCurrentVariant = fullOrder?.line_items?.some(
5867              (li) => String(li.variant_id) == variantId && String(li.product_id) == String(productId)
5868            );
5869            if (isCurrentVariant) {
5870              updateCardByProductIdState(compositeKey, {
5871                updatableOrders: updatablePccState.updatableOrders,
5872                renderType: order.type,
5873                individualDirection: "current",
5874                selectedOrderIndex: -1,
5875                cartItemRenderType: void 0,
5876                cartItemOrderId: void 0,
5877                cartItemLineItemId: void 0
5878              });
5879            }
5880          }
5881        }
5882      } else {
5883        updateCardByProductIdState(productId, { selectType: "single" });
5884      }
5885    });
5886  }
5887};
5888_hasReactivatableItems = new WeakMap();
5889_hasUpgradeDowngradeItems = new WeakMap();
5890_productCardDetails = new WeakMap();
5891_productCardDetailsObj = new WeakMap();
5892__privateAdd(CheckoutExistingOrders, _hasReactivatableItems, false);
5893__privateAdd(CheckoutExistingOrders, _hasUpgradeDowngradeItems, false);
5894__privateAdd(CheckoutExistingOrders, _productCardDetails, {});
5895__privateAdd(CheckoutExistingOrders, _productCardDetailsObj, {});
5896__publicField(CheckoutExistingOrders, "orderDetailsByOrderId", {});
5897
5898// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-order-details-v1.ts
5899init_runtime();
5900var CheckoutOrderDetailsV1 = class extends CF2Component {
5901  constructor(el, runtimeSel) {
5902    super(el, runtimeSel);
5903  }
5904  mount() {
5905    this.getCloseButton().addEventListener("click", (evt) => {
5906      evt.preventDefault();
5907      Checkout.store.selectedOrderDetailId.set(null);
5908    });
5909    this.getModal().onClose = () => {
5910      Checkout.store.selectedOrderDetailId.set(null);
5911    };
5912    Checkout.store.selectedOrderDetailId.listen((selectedOrderDetailId) => {
5913      if (selectedOrderDetailId) {
5914        this.showModal();
5915        this.getContent().order_details = CheckoutExistingOrders.orderDetailsByOrderId[selectedOrderDetailId];
5916        const orderDetails = this.getContent().order_details;
5917        this.formatOrderDetails(orderDetails);
5918        this.getContent().render();
5919      } else {
5920        this.hideModal();
5921      }
5922    });
5923  }
5924  addressToString(address) {
5925    let str = "";
5926    if (address.street_one) {
5927      str = address.street_one;
5928      if (address.street_two) {
5929        str += `, ${address.street_two}`;
5930      }
5931      if (address.city) {
5932        str += `. ${address.city}`;
5933      }
5934      if (address.region) {
5935        str += `, ${address.region}`;
5936      }
5937      if (address.postal_code) {
5938        str += ` ${address.postal_code}`;
5939      }
5940      if (address.country) {
5941        str += `, ${address.country}`;
5942      }
5943    } else {
5944      if (address.postal_code) {
5945        str += `${address.postal_code}, `;
5946      }
5947      if (address.country) {
5948        str += `${address.country}`;
5949      }
5950    }
5951    return str;
5952  }
5953  formatOrderDetails(orderDetails) {
5954    orderDetails.created_at = new Date(orderDetails.created_at_epoch * 1e3).toLocaleString(navigator.language);
5955    if (orderDetails.shipping_address) {
5956      orderDetails.shipping_address = this.addressToString(orderDetails.shipping_address);
5957    }
5958    if (orderDetails.billing_address) {
5959      orderDetails.billing_address = this.addressToString(orderDetails.billing_address);
5960    }
5961    if (orderDetails.line_items.length) {
5962      this.findAndAddProductsImage(orderDetails.line_items);
5963    }
5964  }
5965  getContent() {
5966    return this.getComponent("CheckoutOrderDetailsContent/V1");
5967  }
5968  getModal() {
5969    return this.getComponent("Modal/V1");
5970  }
5971  getCloseButton() {
5972    return this.getModal().element.querySelector(".elCheckoutModalFormClose");
5973  }
5974  showModal() {
5975    this.getModal().element.style.display = "flex";
5976  }
5977  hideModal() {
5978    this.getModal().element.style.display = "none";
5979  }
5980  findAndAddProductsImage(lineItems) {
5981    lineItems.forEach((lineItem) => {
5982      lineItem.image = Checkout.variantsById[lineItem.variant_id].image ?? Checkout.productsById[lineItem.product_id].image;
5983    });
5984  }
5985};
5986registerComponent("CheckoutOrderDetails/V1", CheckoutOrderDetailsV1);
5987window["CheckoutOrderDetailsV1"] = CheckoutOrderDetailsV1;
5988
5989export {
5990  CheckoutTosV1,
5991  CheckoutMultiStepV2,
5992  hasPhysicalProducts,
5993  setupOrderSummaries,
5994  scrollToFirstVisibleError,
5995  checkValidCustomFields,
5996  buildCustomFields,
5997  collectLeads,
5998  AVAILABLE_KLARNA_COUNTRIES,
5999  numberOfStepsInCheckout,
6000  updateCardByProductIdState,
6001  unselectAllProducts,
6002  initIndividualVariantState,
6003  buildProductSelectBatched,
6004  CheckoutShippingProfileSelectV1,
6005  CheckoutLoadingV1,
6006  CheckoutSubmitNotificationV1,
6007  renderedHref,
6008  backfillAddressesId,
6009  isSavedAddress,
6010  fieldsForCountry,
6011  addressToString,
6012  parseAddressByFields,
6013  CheckoutCriticalError,
6014  ERROR_CODES,
6015  displayAndLogCriticalError,
6016  PaypalStates,
6017  ErrorTypes,
6018  hasUpgradeDowngradeItems,
6019  getStripeMode,
6020  getCartEstimatedTotal,
6021  convertToStripeAddress,
6022  convertAddressFromStripe,
6023  convertAddressFromSession,
6024  calculateStripeLineItems,
6025  STRIPE_SKIP_SHIPPING_ID,
6026  calculateStripeChangeResolveDetails,
6027  parseCssVars,
6028  hasErrors,
6029  productErrors,
6030  shippingOptionErrors,
6031  tosErrors,
6032  addressErrors,
6033  contactErrors,
6034  encodeVirtualInstallmentId,
6035  decodeVirtualInstallmentId,
6036  create,
6037  buildComputed,
6038  initializeUtilities,
6039  CheckoutSubmit,
6040  CheckoutSubmitButtonV1,
6041  CheckoutConfigurationErrorV1,
6042  makeCurrentPageFetcher,
6043  CheckoutExistingOrders
6044};
6045//# sourceMappingURL=chunk-UBHLFMSE.js.map

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.