PageSourceSearch

https://www.doodly.com/assets/projects/user_pages/chunk-5JJNRIKL.js

js doodly.com collected 2026-09-24 10:09:07 UTC 300,257 bytes, 6,099 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-YSVSPNWW.js";
15import {
16  getSelectedVariant,
17  init_addToCart
18} from "./chunk-372FPXG6.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").textContent = 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").textContent = 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").textContent = 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-error-classification.ts
3754init_define_process();
3755function isServerCheckoutErrorEnvelope(payload) {
3756  return typeof payload?.error === "string" || payload?.error_details != null;
3757}
3758function normalizeServerCheckoutError(body) {
3759  const payload = body ?? {};
3760  const raw = payload.error_details;
3761  const details = Array.isArray(raw) ? raw : raw ? [{ source: "payment_gateway", ...raw }] : [];
3762  return {
3763    code: details[0]?.code,
3764    // `?? message` makes this a fixpoint: normalising an already-normalised object must not lose
3765    // the text, or a second defensive pass would strip the decline that mounts the card field.
3766    message: payload.error ?? payload.message,
3767    error_details: isServerCheckoutErrorEnvelope(payload) ? details : void 0
3768  };
3769}
3770function serverCheckoutErrorMessage(body) {
3771  if (!body || typeof body !== "object") return null;
3772  const payload = body;
3773  if (!isServerCheckoutErrorEnvelope(payload)) return null;
3774  const details = normalizeServerCheckoutError(payload).error_details ?? [];
3775  if (details.length) {
3776    const joined = details.map((detail) => detail?.graceful_message ?? detail?.message).filter(Boolean).join(" ");
3777    if (joined) return joined;
3778  }
3779  return payload.error || payload.message || null;
3780}
3781function isActionableCheckoutError(body) {
3782  const payload = body;
3783  const details = normalizeServerCheckoutError(payload).error_details ?? [];
3784  if (details.some((detail) => detail?.source === "payment_gateway")) {
3785    return true;
3786  }
3787  return !isServerCheckoutErrorEnvelope(payload);
3788}
3789
3790// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-store.ts
3791init_define_process();
3792
3793// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-critical-errors.ts
3794init_define_process();
3795init_error_with_cause();
3796init_fetcher();
3797var CheckoutCriticalError = class extends CFErrorWithCause {
3798  constructor(message, options) {
3799    super(message, options);
3800    __publicField(this, "name");
3801    __publicField(this, "context");
3802    this.name = "CheckoutCriticalError";
3803  }
3804};
3805var ERROR_CODES = {
3806  EMPTY_PRODUCTS_ERROR: "EMPTY_PRODUCTS_ERROR",
3807  EMPTY_PAYMENT_METHODS_ERROR: "EMPTY_PAYMENT_METHODS_ERROR",
3808  UNEXPECTED_INITIALIZATION_ERROR: "UNEXPECTED_INITIALIZATION_ERROR",
3809  FETCH_FEATURE_FLAGS_ERROR: "FETCH_FEATURE_FLAGS_ERROR",
3810  FETCH_COUNTRIES_STATES_ERROR: "FETCH_COUNTRIES_STATES_ERROR",
3811  FETCH_STRIPE_ADDRESS_FIELD_COUNTRIES_ERROR: "FETCH_STRIPE_ADDRESS_FIELD_COUNTRIES_ERROR",
3812  PAI_INITIALIZATION_SCRIPT_ERROR: "PAI_INITIALIZATION_SCRIPT_ERROR",
3813  PAI_INITIALIZATION_TIMEOUT_ERROR: "PAI_INITIALIZATION_TIMEOUT_ERROR",
3814  PAI_INITIALIZATION_READY_TIMEOUT_ERROR: "PAI_INITIALIZATION_READY_TIMEOUT_ERROR",
3815  PAI_INITIALIZATION_CONFIG_ERROR: "PAI_INITIALIZATION_CONFIG_ERROR",
3816  READY_TO_PAY_UPDATE_ERROR: "READY_TO_PAY_UPDATE_ERROR",
3817  FETCH_EXISTING_ORDERS_ERROR: "FETCH_EXISTING_ORDERS_ERROR",
3818  FETCH_PHONE_UTILS_ERROR: "FETCH_PHONE_UTILS_ERROR",
3819  ORDER_RECURRING_INTERVAL_MISMATCH: "ORDER_RECURRING_INTERVAL_MISMATCH",
3820  ERROR_PROCESSING_STRIPE_PAYMENT: "ERROR_PROCESSING_STRIPE_PAYMENT",
3821  ERROR_STRIPE_3DS_DECLINED: "ERROR_STRIPE_3DS_DECLINED",
3822  ERROR_STRIPE_CARD_DECLINED: "ERROR_STRIPE_CARD_DECLINED",
3823  MULTIPLE_CHECKOUT_PRESENT: "MULTIPLE_CHECKOUT_PRESENT"
3824};
3825var displayAndLogCriticalError = (checkoutCriticalError, extraContext) => {
3826  const criticalErrors = globalThis.Checkout.store.criticalErrors.get();
3827  const originalError = checkoutCriticalError.cause;
3828  if (originalError instanceof CFFetcherError) {
3829    const fetchError = originalError;
3830    globalThis.Checkout.store.criticalErrors.set([
3831      ...criticalErrors,
3832      { code: checkoutCriticalError.message, fetchErrorType: fetchError.type }
3833    ]);
3834  } else {
3835    globalThis.Checkout.store.criticalErrors.set([...criticalErrors, { code: checkoutCriticalError.message }]);
3836  }
3837  console.error(CFstackWithCauses(checkoutCriticalError));
3838  const context = { ...checkoutCriticalError.context ?? {}, ...extraContext ?? {} };
3839  if (Object.keys(context).length > 0) {
3840    globalThis.Honeybadger?.notify(checkoutCriticalError, { context });
3841  } else {
3842    globalThis.Honeybadger?.notify(checkoutCriticalError);
3843  }
3844};
3845
3846// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-store.ts
3847init_nanostores();
3848
3849// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-payment-types.ts
3850init_define_process();
3851var STORE_PAYMENT_TYPES = ["payment-card", "paypal", "apple-pay", "Klarna"];
3852var SPLITIT = "splitit";
3853var toStoreType = (type) => type === SPLITIT ? "payment-card" : type;
3854var hasStoreBucket = (type) => STORE_PAYMENT_TYPES.includes(type);
3855var resolveInitialPaymentType = (savedPaymentType, enabledPayments) => {
3856  const collectable = (enabledPayments ?? []).map(toStoreType).filter(hasStoreBucket);
3857  const saved = toStoreType(savedPaymentType);
3858  if (collectable.length) return collectable.find((type) => type === saved) ?? collectable[0];
3859  return hasStoreBucket(saved) ? saved : "payment-card";
3860};
3861
3862// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/RebillyCheckout/checkout-globals.ts
3863init_define_process();
3864
3865// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-data-loader.ts
3866init_define_process();
3867init_general();
3868var getSSRGlobalResourceData = () => {
3869  const productSelectType = globalThis.globalResourceData.product_quantity_type ?? "single";
3870  const { checkout_v2_state, contact } = globalThis?.sessionData ?? {};
3871  const initialContactData = checkout_v2_state === "guest" ? {} : cleanEmptyObjectKeys({
3872    first_name: contact?.first_name ?? "",
3873    last_name: contact?.last_name ?? "",
3874    email: contact?.email ?? "",
3875    phone_number: contact?.phone_number ?? ""
3876  });
3877  const { products, productsById, variantsById, pricesById } = globalThis.globalResourceData;
3878  const savedPaymentMethods = contact?.payment_methods ?? [];
3879  return {
3880    productSelectType,
3881    products,
3882    productsById,
3883    variantsById,
3884    pricesById,
3885    savedPaymentMethods,
3886    initialContactData
3887  };
3888};
3889
3890// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-states.ts
3891init_define_process();
3892var PaypalStates = {
3893  IDLE: "idle",
3894  INITIALIZED: "initialized",
3895  ERROR: "error",
3896  ADDING_PAYMENT_METHOD: "adding-payment-method",
3897  PAYMENT_METHOD_APPROVED: "payment-method-approved"
3898};
3899var ErrorTypes = {
3900  REBILLY_ERROR: "rebilly-error",
3901  SERVER_ERROR: "server-error",
3902  UNHANDLED_SERVER_RESPONSE: "unhandled-server-response",
3903  THREEDS_DECLINED_ERROR: "3ds-declined-error",
3904  THREEDS_DECLINED_CUSTOM_ERROR: "3ds-declined-custom-error",
3905  PAYPAL_DECLINED_ERROR: "paypal-declined-error",
3906  PAYPAL_CUSTOM_ERROR: "paypal-custom-error"
3907};
3908
3909// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/StripeCheckout/utils.ts
3910init_define_process();
3911function hasRecurringPrice(cart) {
3912  return cart.items.some(({ price_id }) => {
3913    const price = globalThis.globalResourceData.pricesById[price_id];
3914    return price.is_recurring;
3915  });
3916}
3917function hasPhysicalProductsWithParams(cart) {
3918  return cart.items.some(({ product_id, variant_id }) => {
3919    const product = globalThis.Checkout.productsById[product_id];
3920    const variant = globalThis.Checkout.variantsById[variant_id];
3921    let productType = variant?.product_type;
3922    productType = productType || product?.product_type;
3923    return productType == "physical";
3924  });
3925}
3926function hasUpgradeDowngradeItems(cart) {
3927  return cart.items.some((item) => item.type === "upgradeDowngrade");
3928}
3929function getStripeMode(cart, amount) {
3930  if (amount == 0) return "setup";
3931  return hasRecurringPrice(cart) ? "subscription" : "payment";
3932}
3933function getCartEstimatedTotal(cart) {
3934  const estimatedAmount = cart.items.reduce((acc, { price_id }) => {
3935    const price = globalThis.globalResourceData.pricesById[price_id];
3936    return acc + price.initial_price_cents;
3937  }, 0);
3938  return estimatedAmount;
3939}
3940function convertToStripeAddress(address) {
3941  return {
3942    line1: address.address_one,
3943    line2: address.address_two,
3944    city: address.city,
3945    state: address.state,
3946    postal_code: address.postal_code,
3947    country: address.country
3948  };
3949}
3950function convertAddressFromStripe(address) {
3951  return {
3952    address_one: address.line1,
3953    address_two: address.line2,
3954    city: address.city,
3955    state: address.state,
3956    country: address.country,
3957    postal_code: address.postal_code
3958  };
3959}
3960function convertAddressFromSession(address) {
3961  return {
3962    address_one: address.address,
3963    address_two: address.address_2,
3964    city: address.city,
3965    state: address.state,
3966    country: address.country,
3967    postal_code: address.zip
3968  };
3969}
3970function calculateStripeLineItems(lineItems, shippingOption, taxAmount, discountAmount) {
3971  const allLineItems = lineItems.map(({ priceCents, description }) => {
3972    return {
3973      name: description,
3974      amount: priceCents
3975    };
3976  });
3977  if (shippingOption) {
3978    allLineItems.push({
3979      name: shippingOption.description,
3980      amount: shippingOption.amount_cents
3981    });
3982  }
3983  if (taxAmount) {
3984    allLineItems.push({
3985      name: "Taxes",
3986      amount: taxAmount
3987    });
3988  }
3989  if (discountAmount) {
3990    allLineItems.push({
3991      name: "Discount",
3992      amount: -discountAmount
3993    });
3994  }
3995  return allLineItems;
3996}
3997var STRIPE_SKIP_SHIPPING_ID = "skip it";
3998function calculateStripeChangeResolveDetails(lineItems, quotesResponse, shippingOption, taxAmount, discountAmount) {
3999  return {
4000    lineItems: calculateStripeLineItems(lineItems, shippingOption, taxAmount, discountAmount),
4001    shippingRates: quotesResponse?.map((option) => {
4002      const { description, amount_cents } = option;
4003      return {
4004        id: JSON.stringify(option),
4005        amount: amount_cents,
4006        displayName: description
4007      };
4008    }) ?? [
4009      {
4010        id: STRIPE_SKIP_SHIPPING_ID,
4011        amount: 0,
4012        displayName: "Free"
4013      }
4014    ]
4015  };
4016}
4017function parseCssVars(element, obj) {
4018  Object.keys(obj ?? {}).forEach((key) => {
4019    const value = obj[key];
4020    if (typeof value === "object") {
4021      obj[key] = parseCssVars(element, value);
4022    } else {
4023      if (typeof value === "string" && value.includes("--")) {
4024        obj[key] = getComputedStyle(element).getPropertyValue(value);
4025      }
4026    }
4027  });
4028  return obj;
4029}
4030
4031// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/RebillyCheckout/checkout-globals.ts
4032var CheckoutStates = {
4033  OTO: "oto",
4034  GUEST: "guest",
4035  SAVED: "saved",
4036  UPGRADE_DOWNGRADE: "upgradeDowngrade",
4037  REACTIVATE: "reactivate"
4038};
4039var StoreStates = {
4040  START: "start",
4041  INITIALIZING: "initializing",
4042  INITIALIZED: "initialized",
4043  FILLING_FORM: "filling-form",
4044  SUBMITTING: "submitting",
4045  SUBMITTED: "submitted"
4046};
4047var SummaryStates = {
4048  WAITING: "waiting",
4049  CALCULATING: "calculating",
4050  ERROR: "error",
4051  OK: "ok"
4052};
4053var CouponStates = {
4054  READY: "ready",
4055  APPLYING: "applying",
4056  APPLIED: "applied",
4057  ERROR: "error"
4058};
4059var PaymentStates = {
4060  START: "start",
4061  INITIALIZING: "initializing",
4062  LOADING: "loading",
4063  INITIALIZED: "initialized"
4064};
4065var SubmittingStates = {
4066  IDLE: "idle",
4067  START: "start",
4068  WAITING_ON_QUEUE: "waiting-on-queue",
4069  ERROR: "error",
4070  DONE: "done"
4071};
4072var states = {
4073  StoreStates,
4074  SummaryStates,
4075  PaymentStates,
4076  SubmittingStates,
4077  PaypalStates,
4078  CouponStates,
4079  ErrorTypes,
4080  CheckoutStates
4081};
4082var globals = getSSRGlobalResourceData();
4083var ssrDynamicData = globalThis.getSSRDynamicStoreData(globals.products);
4084globalThis.Checkout = {
4085  ...states,
4086  ...globals,
4087  ssrDynamicData,
4088  utils: buildUtils()
4089};
4090window.addEventListener(
4091  "keydown",
4092  function(e) {
4093    if (e.key == "Enter") {
4094      if (globalThis.Checkout.store?.payment.type.get() == "apple-pay") {
4095        e.preventDefault();
4096        return false;
4097      }
4098    }
4099  },
4100  true
4101);
4102var cleanupEmptyErrors = (errors) => {
4103  if (errors.globalErrors.length == 0) delete errors.globalErrors;
4104  if (Object.keys(errors.fields).length == 0) delete errors.fields;
4105  if (Object.keys(errors).length == 0) return null;
4106  return errors;
4107};
4108function hasErrors(errors) {
4109  return (errors?.globalErrors ?? []).length != 0 || Object.keys(errors?.fields ?? {}).length != 0;
4110}
4111function productErrors(cart, showAllErrors) {
4112  const errors = {
4113    globalErrors: [],
4114    fields: {}
4115  };
4116  if (showAllErrors) {
4117    const hasProducts = cart.items.filter((p) => !globalThis.Checkout.productsById[p.product_id].bump).some((item) => item.quantity > 0);
4118    if (!hasProducts) {
4119      errors.globalErrors.push({ message: "At least one product should be selected" });
4120    }
4121  }
4122  return cleanupEmptyErrors(errors);
4123}
4124function shippingOptionErrors(loadingShipping, cart, shippingOptions, shippingOption, showAllErrors, paymentType) {
4125  const errors = {
4126    globalErrors: [],
4127    fields: {}
4128  };
4129  if (!showAllErrors || loadingShipping || !hasPhysicalProductsWithParams(cart) || paymentType == "apple-pay") {
4130    return null;
4131  }
4132  const shippingOptionIsValid = shippingOption && shippingOptions?.length > 0;
4133  if (!shippingOptionIsValid) {
4134    const error = { message: "Shipping is not available for this location" };
4135    errors.fields.shippingOption = error;
4136    errors.globalErrors.push(error);
4137  }
4138  return cleanupEmptyErrors(errors);
4139}
4140function tosErrors(accepted, present, showTosErrors) {
4141  if (present && showTosErrors && !accepted) {
4142    return { globalErrors: [{ message: "You must accept the terms of service" }] };
4143  } else {
4144    return {};
4145  }
4146}
4147function summaryErrors(summary) {
4148  const errors = {
4149    globalErrors: [],
4150    fields: {}
4151  };
4152  if (summary.state == SummaryStates.ERROR) {
4153    if (summary.error) {
4154      errors.globalErrors.push({ message: summary.error.message });
4155    } else {
4156      errors.globalErrors.push({ message: "There was an error calculating your order total" });
4157    }
4158  }
4159  return cleanupEmptyErrors(errors);
4160}
4161function addressErrors(address, showAllErrors, fields) {
4162  const errors = {
4163    globalErrors: [],
4164    fields: {}
4165  };
4166  fields.forEach((field) => {
4167    const value = address[field];
4168    if (value == void 0 && !showAllErrors) return;
4169    const { valid, message } = validateValue(field, value);
4170    if (!valid) {
4171      errors.fields[field] = { message };
4172    }
4173  });
4174  return cleanupEmptyErrors(errors);
4175}
4176function contactErrors(contact, fields, showAllErrors) {
4177  showAllErrors = showAllErrors ?? true;
4178  const errors = {
4179    globalErrors: [],
4180    fields: {}
4181  };
4182  fields.forEach((field) => {
4183    const value = contact[field];
4184    if (value == void 0 && !showAllErrors) return;
4185    const { valid, message } = validateValue(field, value);
4186    if (!valid) {
4187      errors.fields[field] = { message };
4188    }
4189  });
4190  return cleanupEmptyErrors(errors);
4191}
4192function buildUtils() {
4193  const billingErrors = (billing, billingSameAsShipping, showAllErrors, cart, mode, billingFields, billingApiErrorsByField, paymentType, paymentId) => {
4194    if (hasPhysicalProductsWithParams(cart) && billingSameAsShipping || mode == CheckoutStates.UPGRADE_DOWNGRADE || mode == CheckoutStates.OTO && !paymentId || paymentType == "apple-pay") {
4195      return null;
4196    } else if (billingApiErrorsByField) {
4197      return {
4198        fields: billingApiErrorsByField
4199      };
4200    } else if (mode == globalThis.Checkout.CheckoutStates.REACTIVATE || mode == globalThis.Checkout.CheckoutStates.SAVED) {
4201      const savedBillingAddresses = globalThis.Checkout.store.billing_addresses.get();
4202      const isActiveAddressSaved = savedBillingAddresses.find((addr) => addr.id == billing.id);
4203      if (!isActiveAddressSaved) {
4204        return addressErrors(billing, showAllErrors, billingFields);
4205      }
4206      return null;
4207    } else if (mode == CheckoutStates.OTO && paymentId) {
4208      return null;
4209    } else {
4210      return addressErrors(billing, showAllErrors, billingFields);
4211    }
4212  };
4213  const shippingErrors = (shipping, showAllErrors, cart, mode, shippingFields, paymentType) => {
4214    if (!hasPhysicalProductsWithParams(cart) || paymentType == "apple-pay") {
4215      return null;
4216    }
4217    return addressErrors(shipping, showAllErrors, shippingFields);
4218  };
4219  return {
4220    productErrors,
4221    billingErrors,
4222    shippingErrors,
4223    addressErrors,
4224    cleanupEmptyErrors,
4225    hasErrors,
4226    hasPhysicalProductsWithParams,
4227    skipBillingAddress: (store) => {
4228      const isNotDigitalWalletPayment = store.payment.type.get() != "apple-pay";
4229      return isNotDigitalWalletPayment && store.billingFields.get().length == 0;
4230    },
4231    hasPhysicalProducts: () => {
4232      const cart = globalThis.Checkout.computed.checkoutCart.get();
4233      return hasPhysicalProductsWithParams(cart);
4234    },
4235    hasValidDataForOrderPreview: (options) => {
4236      const mode = globalThis.Checkout.store.checkout.mode.get();
4237      const cart = globalThis.Checkout.computed.checkoutCart.get();
4238      const billing = globalThis.Checkout.store.billing.get();
4239      const shipping = globalThis.Checkout.store.shipping.get();
4240      const billingSameAsShipping = globalThis.Checkout.store.billingSameAsShipping.get();
4241      const billingApiErrorsByField = globalThis.Checkout.store.billingApiErrorsByField.get();
4242      const paymentType = globalThis.Checkout.store.payment.type.get();
4243      const paymentId = globalThis.Checkout.store.payment.id.get();
4244      const showAllBillingErrors = true;
4245      const showAllShippingErrors = true;
4246      const showAllProductErrors = true;
4247      const pErrors = productErrors(cart, showAllProductErrors);
4248      const bErrors = billingErrors(
4249        billing,
4250        billingSameAsShipping,
4251        showAllBillingErrors,
4252        cart,
4253        mode,
4254        options.billingFields,
4255        billingApiErrorsByField,
4256        paymentType,
4257        paymentId
4258      );
4259      const sErrors = shippingErrors(shipping, showAllShippingErrors, cart, mode, options.shippingFields, paymentType);
4260      return !hasErrors(pErrors) && !hasErrors(bErrors) && !hasErrors(sErrors);
4261    },
4262    hasValidDataForShippingOptions: (options) => {
4263      const mode = globalThis.Checkout.store.checkout.mode.get();
4264      const cart = globalThis.Checkout.computed.checkoutCart.get();
4265      const shipping = globalThis.Checkout.store.shipping.get();
4266      const paymentType = globalThis.Checkout.store.payment.type.get();
4267      const showAllShippingErrors = true;
4268      const sErrors = shippingErrors(shipping, showAllShippingErrors, cart, mode, options.shippingFields, paymentType);
4269      return !hasErrors(sErrors);
4270    },
4271    hasValidDataForTaxes: (options) => {
4272      const mode = globalThis.Checkout.store.checkout.mode.get();
4273      const cart = globalThis.Checkout.computed.checkoutCart.get();
4274      const billing = globalThis.Checkout.store.billing.get();
4275      const billingSameAsShipping = globalThis.Checkout.store.billingSameAsShipping.get();
4276      const billingApiErrorsByField = globalThis.Checkout.store.billingApiErrorsByField.get();
4277      const paymentType = globalThis.Checkout.store.payment.type.get();
4278      const paymentId = globalThis.Checkout.store.payment.id.get();
4279      const showAllBillingErrors = true;
4280      const bErrors = billingErrors(
4281        billing,
4282        billingSameAsShipping,
4283        showAllBillingErrors,
4284        cart,
4285        mode,
4286        options.billingFields,
4287        billingApiErrorsByField,
4288        paymentType,
4289        paymentId
4290      );
4291      return !hasErrors(bErrors);
4292    },
4293    canSubmit: () => {
4294      const state = globalThis.Checkout.store.state.get();
4295      const summary = globalThis.Checkout.store.summary.get();
4296      return state == globalThis.Checkout.StoreStates.FILLING_FORM && summary.state == globalThis.Checkout.SummaryStates.OK;
4297    }
4298  };
4299}
4300
4301// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-store.ts
4302var encodeVirtualInstallmentId = (duration, type) => {
4303  return `${duration}-${type}`;
4304};
4305var decodeVirtualInstallmentId = (virtualId) => {
4306  if (!virtualId) return null;
4307  const parts = virtualId.split("-");
4308  if (parts.length !== 2) return null;
4309  const duration = parseInt(parts[0], 10);
4310  const type = parts[1];
4311  if (isNaN(duration)) return null;
4312  return { duration, type };
4313};
4314var getInitialCriticalErrors = (enabledPayments, enabledExpressPayments) => {
4315  const initialCriticalErrors = [];
4316  if ((enabledPayments ?? []).length == 0 && (enabledExpressPayments ?? []).length == 0) {
4317    initialCriticalErrors.push({ code: ERROR_CODES.EMPTY_PAYMENT_METHODS_ERROR });
4318  }
4319  if (!globalThis.globalResourceData.productVariantWithNoBump?.id) {
4320    initialCriticalErrors.push({ code: ERROR_CODES.EMPTY_PRODUCTS_ERROR });
4321  }
4322  return initialCriticalErrors;
4323};
4324var buildPaymentBucket = (type) => {
4325  switch (type) {
4326    case "payment-card":
4327      return { events: map({}), token: atom(null) };
4328    case "paypal":
4329      return { state: atom({ state: globalThis.Checkout.PaypalStates.IDLE }), token: atom(null) };
4330    default:
4331      return { token: atom(null) };
4332  }
4333};
4334var buildPaymentBuckets = () => STORE_PAYMENT_TYPES.reduce(
4335  (buckets, type) => ({ ...buckets, [type]: buildPaymentBucket(type) }),
4336  {}
4337);
4338var create = (billingFields, shippingFields, enabledPayments, enabledExpressPayments) => {
4339  const paymentMethods = typeof globalThis.Checkout.savedPaymentMethods === "string" ? JSON.parse(globalThis.Checkout.savedPaymentMethods) : globalThis.Checkout.savedPaymentMethods;
4340  const paymentDataId = paymentMethods?.[0]?.id ?? null;
4341  const initialPaymentMethod = resolveInitialPaymentType(paymentMethods?.[0]?.type, enabledPayments);
4342  const {
4343    mode,
4344    contact,
4345    shipping,
4346    billing,
4347    billingSameAsShipping,
4348    billing_addresses,
4349    shipping_addresses
4350  } = globalThis.Checkout.ssrDynamicData;
4351  return {
4352    state: atom(globalThis.Checkout.StoreStates.START),
4353    checkout: {
4354      mode: atom(mode),
4355      lastModeIndependentOfCartItems: atom(mode),
4356      step: atom(0)
4357    },
4358    contact: map(contact),
4359    contact_pending_auth: map({ authenticated: false }),
4360    shipping: map(shipping),
4361    shipping_addresses: atom(shipping_addresses ?? []),
4362    loadingShipping: atom(false),
4363    shippingOptions: atom([]),
4364    isUpdatingRebilly: atom(true),
4365    shippingOption: atom(),
4366    billingFields: atom(billingFields),
4367    shippingFields: atom(shippingFields),
4368    payment: {
4369      state: atom(globalThis.Checkout.PaymentStates.START),
4370      id: atom(paymentDataId),
4371      type: atom(initialPaymentMethod),
4372      virtualInstallmentId: atom(null),
4373      ...buildPaymentBuckets()
4374    },
4375    paymentMethods: atom(paymentMethods ?? []),
4376    billing: map(billing),
4377    billingApiErrorsByField: atom(null),
4378    billing_addresses: atom(billing_addresses ?? []),
4379    billingSameAsShipping: atom(billingSameAsShipping),
4380    coupons: {
4381      appliedCode: atom(""),
4382      currentCode: atom(""),
4383      errorMessage: atom(""),
4384      state: atom(globalThis.Checkout.CouponStates.READY)
4385    },
4386    summary: atom({
4387      state: globalThis.Checkout.SummaryStates.WAITING,
4388      data: {}
4389    }),
4390    tos: {
4391      accepted: atom(false),
4392      present: atom(false)
4393    },
4394    criticalErrors: atom(getInitialCriticalErrors(enabledPayments, enabledExpressPayments)),
4395    showAllErrors: {
4396      contact: atom(false),
4397      shipping: atom(false),
4398      billing: atom(false),
4399      shippingOption: atom(false),
4400      payment: atom(false),
4401      products: atom(false),
4402      tos: atom(false),
4403      summary: atom(false)
4404    },
4405    submitting: atom({
4406      state: globalThis.Checkout.SubmittingStates.IDLE
4407    }),
4408    incrScrollToFirstVisibleError: atom(0),
4409    threeds: map({
4410      show: false,
4411      approvalUrl: null
4412    }),
4413    featureFlags: {
4414      isShippingEnabled: atom(false)
4415    },
4416    selectedOrderDetailId: atom(null),
4417    phoneNumberInitialized: atom(false)
4418  };
4419};
4420var buildComputed = (store, contactFields, shippingFields, totalSteps) => {
4421  const computedModeLeaveEnterEvent = atom({});
4422  onMount(computedModeLeaveEnterEvent, () => {
4423    let previousMode;
4424    return store.checkout.mode.subscribe((mode) => {
4425      if (previousMode) {
4426        computedModeLeaveEnterEvent.set({
4427          leave: previousMode,
4428          next: mode
4429        });
4430      }
4431      computedModeLeaveEnterEvent.set({
4432        enter: mode,
4433        previous: previousMode
4434      });
4435      previousMode = mode;
4436    });
4437  });
4438  const computedContactErrors = computed(
4439    [store.checkout.mode, store.contact, store.showAllErrors.contact],
4440    (mode, contact, showAllErrors) => {
4441      if (mode != globalThis.Checkout.CheckoutStates.GUEST) return null;
4442      return contactErrors(contact, contactFields, showAllErrors);
4443    }
4444  );
4445  const computedCheckoutCart = buildProductSelectComputed();
4446  const computedBillingErrors = computed(
4447    [
4448      store.billing,
4449      store.billingSameAsShipping,
4450      store.showAllErrors.billing,
4451      computedCheckoutCart,
4452      store.checkout.mode,
4453      store.payment.type,
4454      store.payment.id,
4455      store.billingApiErrorsByField,
4456      store.billingFields
4457    ],
4458    (billing, billingSameAsShipping, showAllErrors, cart, mode, paymentType, paymentId, billingApiErrorsByField, billingFields) => {
4459      return globalThis.Checkout.utils.billingErrors(
4460        billing,
4461        billingSameAsShipping,
4462        showAllErrors,
4463        cart,
4464        mode,
4465        billingFields,
4466        billingApiErrorsByField,
4467        paymentType,
4468        paymentId
4469      );
4470    }
4471  );
4472  const computedShippingErrors = computed(
4473    [store.shipping, store.showAllErrors.shipping, computedCheckoutCart, store.checkout.mode, store.payment.type],
4474    (shipping, showAllErrors, cart, mode, paymentType) => {
4475      return globalThis.Checkout.utils.shippingErrors(shipping, showAllErrors, cart, mode, shippingFields, paymentType);
4476    }
4477  );
4478  const computedHasValidShippingAddress = computed(
4479    [computedCheckoutCart, store.shipping, store.checkout.mode],
4480    (cart, shipping, mode) => {
4481      return !globalThis.Checkout.utils.shippingErrors(shipping, true, cart, mode, shippingFields);
4482    }
4483  );
4484  const computedProductErrors = computed(
4485    [computedCheckoutCart, store.showAllErrors.products],
4486    (cart, showAllErrors) => {
4487      return globalThis.Checkout.utils.productErrors(cart, showAllErrors);
4488    }
4489  );
4490  const computedShippingOptionErrors = computed(
4491    [
4492      store.loadingShipping,
4493      computedCheckoutCart,
4494      store.shippingOptions,
4495      store.shippingOption,
4496      store.showAllErrors.shippingOption,
4497      store.payment.type
4498    ],
4499    (...args) => shippingOptionErrors(...args)
4500  );
4501  const computedPaymentErrors = computed(
4502    [
4503      store.payment.id,
4504      store.payment.type,
4505      store.payment["payment-card"].events,
4506      store.payment.paypal.state,
4507      store.payment.paypal.token,
4508      store.showAllErrors.payment,
4509      store.checkout.mode
4510    ],
4511    (id, type, cardEvents, paypalState, paypalToken, showAllErrors, mode) => {
4512      const errors = {
4513        globalErrors: [],
4514        fields: {}
4515      };
4516      if (!id && mode != globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE) {
4517        if (type == "payment-card") {
4518          let hasEvent = !!Object.keys(cardEvents).length;
4519          if (hasEvent) {
4520            Object.entries(cardEvents).forEach(([field, event]) => {
4521              if (!event) {
4522                event = { source: field };
4523              } else {
4524                hasEvent = true;
4525              }
4526              const { valid, message } = validateValue("card", event);
4527              if (!valid) {
4528                errors.fields[field] = { message };
4529              }
4530            });
4531          } else if (showAllErrors) {
4532            errors.globalErrors.push({ message: "Missing payment information" });
4533          }
4534        } else if (type == "paypal") {
4535          if (showAllErrors && !(paypalState.state == globalThis.Checkout.PaypalStates.PAYMENT_METHOD_APPROVED && paypalToken)) {
4536            errors.globalErrors.push({ message: "Missing payment information" });
4537          }
4538        }
4539      }
4540      return cleanupEmptyErrors(errors);
4541    }
4542  );
4543  const computedTosErrors = computed(
4544    [store.tos.accepted, store.tos.present, store.showAllErrors.tos],
4545    (...args) => tosErrors(...args)
4546  );
4547  const computedSummaryErrors = computed([store.summary], (summary) => summaryErrors(summary));
4548  const computedErrorsByName = {
4549    contact: computedContactErrors,
4550    billing: computedBillingErrors,
4551    shipping: computedShippingErrors,
4552    shippingOption: computedShippingOptionErrors,
4553    products: computedProductErrors,
4554    payment: computedPaymentErrors,
4555    tos: computedTosErrors,
4556    summary: computedSummaryErrors
4557  };
4558  const computedHasPhysicalProducts = computed(computedCheckoutCart, (cart) => {
4559    return globalThis.Checkout.utils.hasPhysicalProductsWithParams(cart);
4560  });
4561  const computedPossibleOtoWithFreeShipping = computed(
4562    [computedCheckoutCart, store.checkout.mode, store.shippingOptions, store.loadingShipping],
4563    (cart, mode, shippingOptions, loadingShipping) => {
4564      return mode === "oto" && globalThis.Checkout.utils.hasPhysicalProductsWithParams(cart) && // shipping options unknown / 
4564not loaded
4565      (!shippingOptions || // pending with no current shipping options
4566      loadingShipping && shippingOptions.length === 0 || // Exactly one shipping option with amount zero
4567      shippingOptions?.length === 1 && parseInt(shippingOptions[0].amount.amount) === 0);
4568    }
4569  );
4570  const computedHasShippingEnabled = computed(
4571    [computedCheckoutCart, store.featureFlags.isShippingEnabled],
4572    (cart, isShippingEnabled) => {
4573      return globalThis.Checkout.utils.hasPhysicalProductsWithParams(cart) && isShippingEnabled;
4574    }
4575  );
4576  const computedHideShipping = computed(
4577    [computedHasShippingEnabled, computedPossibleOtoWithFreeShipping],
4578    (isShippingEnabled, possibleOtoWithFreeShipping) => {
4579      return !isShippingEnabled || possibleOtoWithFreeShipping;
4580    }
4581  );
4582  const computedCurrentPaymentMethod = computed([store.payment.id], (currentPaymentId) => {
4583    return store.paymentMethods.get().find((pm) => pm.id == currentPaymentId);
4584  });
4585  const computedIsCouponReady = computed([store.state, computedCheckoutCart], (state, cart) => {
4586    const showAllProductErrors = true;
4587    const pErrors = globalThis.Checkout.utils.productErrors(cart, showAllProductErrors);
4588    return state == globalThis.Checkout.StoreStates.FILLING_FORM && !globalThis.Checkout.utils.hasErrors(pErrors);
4589  });
4590  const computedIsDigitalWalletReadyToStart = computed(
4591    [store.checkout.mode, store.state, store.summary, computedCheckoutCart],
4592    (mode, state, summary, cart) => {
4593      const showAllProductErrors = true;
4594      const pErrors = globalThis.Checkout.utils.productErrors(cart, showAllProductErrors);
4595      return state == globalThis.Checkout.StoreStates.FILLING_FORM && !globalThis.Checkout.utils.hasErrors(pErrors);
4596    }
4597  );
4598  const computedHideContactInformationForm = computed(
4599    [store.checkout.mode, store.payment.type],
4600    (mode, paymentType) => {
4601      return paymentType == "apple-pay" && mode == "guest" && totalSteps == 1;
4602    }
4603  );
4604  const computedIsOTORetrialPayment = computed(
4605    [store.checkout.mode, store.payment.id],
4606    (mode, paymentId) => mode == globalThis.Checkout.CheckoutStates.OTO && !paymentId
4607  );
4608  return {
4609    errorsByName: computedErrorsByName,
4610    modeLeaveEnterEvent: computedModeLeaveEnterEvent,
4611    hasPhysicalProducts: computedHasPhysicalProducts,
4612    hasShippingEnabled: computedHasShippingEnabled,
4613    hideShipping: computedHideShipping,
4614    hasValidShippingAddress: computedHasValidShippingAddress,
4615    isDigitalWalletReadyToStart: computedIsDigitalWalletReadyToStart,
4616    isCouponReady: computedIsCouponReady,
4617    contactErrors: computedContactErrors,
4618    productErrors: computedProductErrors,
4619    billingErrors: computedBillingErrors,
4620    shippingErrors: computedShippingErrors,
4621    shippingOptionErrors: computedShippingOptionErrors,
4622    paymentMethod: computedCurrentPaymentMethod,
4623    paymentErrors: computedPaymentErrors,
4624    tosErrors: computedTosErrors,
4625    summaryErrors: computedSummaryErrors,
4626    hideContactInformationForm: computedHideContactInformationForm,
4627    isOTORetrialPayment: computedIsOTORetrialPayment,
4628    isNewDigitalWalletPayment: computed(
4629      [store.payment.id, store.payment.type],
4630      (id, paymentType) => !id && paymentType == "apple-pay"
4631    ),
4632    checkoutCart: computedCheckoutCart
4633  };
4634};
4635var initializeUtilities = (store, computed2) => {
4636  initializeStoreUtilities(store, computed2);
4637  setupCFEnableDevTools();
4638};
4639var initializeStoreUtilities = (store, computed2) => {
4640  const proxyCache = /* @__PURE__ */ new WeakMap();
4641  const storeValueCache = /* @__PURE__ */ new WeakMap();
4642  const DEBOUNCE_INTERVAL = 50;
4643  const stores = {
4644    store,
4645    computed: computed2
4646  };
4647  function createDeepNanostoreProxy(target, onChange) {
4648    return new Proxy(target, {
4649      get(target2, property) {
4650        const item = target2[property];
4651        if (property === "__store") {
4652          return item;
4653        }
4654        if (item && typeof item === "object") {
4655          if (proxyCache.has(item)) return proxyCache.get(item);
4656          if (isStore(item)) {
4657            const __store = item;
4658            const storeValue = {
4659              __store,
4660              __value: peek(__store)
4661            };
4662            storeValueCache.set(item, storeValue);
4663            __store.listen((value) => {
4664              storeValue.__value = value;
4665              onChange();
4666            });
4667            return storeValue;
4668          } else {
4669            const proxy2 = createDeepNanostoreProxy(item, onChange);
4670            proxyCache.set(item, proxy2);
4671            return proxy2;
4672          }
4673        }
4674        return item;
4675      }
4676    });
4677  }
4678  function peek(store2) {
4679    return store2.value;
4680  }
4681  function isStore(value) {
4682    return value && value.subscribe;
4683  }
4684  let debounceTimeout;
4685  const proxy = createDeepNanostoreProxy(stores, function onChange() {
4686    clearTimeout(debounceTimeout);
4687    debounceTimeout = setTimeout(() => {
4688      window.dispatchEvent(new CustomEvent("checkout:store:change"));
4689    }, DEBOUNCE_INTERVAL);
4690  });
4691  globalThis.Checkout.utils.getStoreJson = (tab = 0) => {
4692    return JSON.stringify(
4693      proxy,
4694      function replacer(key, value) {
4695        if (["__store"].includes(key)) return;
4696        if (value && Object.prototype.hasOwnProperty.call(value, "__value")) {
4697          return value.__value;
4698        }
4699        return value;
4700      },
4701      tab
4702    );
4703  };
4704};
4705var setupCFEnableDevTools = () => {
4706  if (localStorage.getItem("cf2:devtools:enabled")) {
4707    trackUpdatesCheckoutUpdates();
4708  }
4709  globalThis.CFEnableDevTools = () => {
4710    localStorage.setItem("cf2:devtools:enabled", "true");
4711    trackUpdatesCheckoutUpdates();
4712  };
4713  function trackUpdatesCheckoutUpdates() {
4714    document.querySelectorAll('[data-page-element="Checkout/V2"]').forEach((el) => {
4715      el.insertAdjacentHTML("afterend", '<div class="checkout-store-log"><pre></pre></div>');
4716      document.querySelector(".checkout-store-log").style.cssText = `
4717          z-index: 10;
4718          top: 0;
4719          background: rgba(100,100,1005,0.1);
4720          height: 100;
4721          display: flex;
4722          flex-direction: column;
4723          justify-content: center;`;
4724      document.querySelector(".checkout-store-log pre").style.cssText = `
4725          font-size: 12px;
4726          font-weight: bold;
4727          width: fit-content;`;
4728    });
4729    const checkoutStoreLog = document.querySelector(".checkout-store-log");
4730    const renderDevToolsState = initReduxDevTools().render;
4731    render();
4732    window.addEventListener("checkout:store:change", () => {
4733      render();
4734      if (renderDevToolsState) {
4735        renderDevToolsState();
4736      }
4737    });
4738    function initReduxDevTools() {
4739      let store;
4740      const reduxUrl = "https://cdnjs.cloudflare.com/ajax/libs/redux/4.2.1/redux.min.js";
4741      const scriptEle = document.createElement("script");
4742      scriptEle.setAttribute("src", reduxUrl);
4743      document.body.appendChild(scriptEle);
4744      scriptEle.addEventListener("load", () => {
4745        store = globalThis.Redux.createStore(
4746          (state, action) => action.state || state,
4747          JSON.parse(globalThis.Checkout.utils.getStoreJson()),
4748          globalThis.__REDUX_DEVTOOLS_EXTENSION__ && globalThis.__REDUX_DEVTOOLS_EXTENSION__()
4749        );
4750      });
4751      return {
4752        render() {
4753          if (store) {
4754            store.dispatch({
4755              type: "state",
4756              state: JSON.parse(globalThis.Checkout.utils.getStoreJson())
4757            });
4758          }
4759        }
4760      };
4761    }
4762    function render() {
4763      let json;
4764      let error;
4765      try {
4766        const data = JSON.parse(globalThis.Checkout.utils.getStoreJson(4));
4767        json = JSON.stringify(data, null, 2);
4768      } catch (err) {
4769        error = err;
4770        console.log(error);
4771      }
4772      checkoutStoreLog.querySelector("pre").innerHTML = error ? error.message : ["--- State ---", json].join("\n");
4773    }
4774  }
4775};
4776
4777// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-submit.ts
4778var REBILLY_PAYMENT_METHOD_BY_TYPE_MAP = {
4779  Klarna: "klarna-payments"
4780};
4781var _redirecTo, _threedsListenerEnabled, _formSubmitPayload, _CheckoutSubmit_static, leadSourceGenerator_fn, submitRebilly_fn, buildPaymentMethodDetails_fn, buildRegistrationDetails_fn, shouldIncludeRegistration_fn, buildAddressParams_fn, submitOrderAsync_fn, handleFormSubmitRedirect_fn, add3dsListener_fn;
4782var CheckoutSubmit = class {
4783  static submitFromButtonClick(submitButton, onValidationError, redirectOverride) {
4784    __privateMethod(this, _CheckoutSubmit_static, add3dsListener_fn).call(this);
4785    const checkoutElement = submitButton.closest(".elCheckout");
4786    if (this.checkSubmitShowErrors({ skipFields: /* @__PURE__ */ new Set(["payment"]) }) && this.checkSubmitShowErrors({ onlyFields: /* @__PURE__ */ new Set(["payment"]) }) && globalThis.Checkout.utils.canSubmit() && checkValidCustomFields(checkoutElement)) {
4787      globalThis.Checkout.store.state.set(globalThis.Checkout.StoreStates.SUBMITTING);
4788      globalThis.Checkout.store.submitting.set({
4789        state: globalThis.Checkout.SubmittingStates.START
4790      });
4791      const isUpgradeDowngrade = globalThis.Checkout.store.checkout.mode.get() == globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE;
4792      const capturedPaymentMethodId = globalThis.Checkout.store.payment.id.get();
4793      const canSkipSubmitRebilly = isUpgradeDowngrade || capturedPaymentMethodId;
4794      if (canSkipSubmitRebilly) {
4795        const payload = this.buildPayloadFromStore({
4796          contact: globalThis.Checkout.store.contact.get(),
4797          turnstileToken: globalThis.Checkout.turnstileToken,
4798          shippingAddress: globalThis.Checkout.store.shipping.get(),
4799          billingAddress: globalThis.Checkout.store.billing.get(),
4800          paymentMethodDetails: __privateMethod(this, _CheckoutSubmit_static, buildPaymentMethodDetails_fn).call(this) ?? {},
4801          selectedShippingOption: globalThis.Checkout.store.shippingOption.get(),
4802          skipBillingAddress: globalThis.Checkout.utils.skipBillingAddress(globalThis.Checkout.store),
4803          redirectOverride
4804        });
4805        return this.submit(payload);
4806      } else {
4807        const paymentType = globalThis.Checkout.store.payment.type.get();
4808        if (["Klarna", "payment-card"].includes(paymentType)) {
4809          return __privateMethod(this, _CheckoutSubmit_static, submitRebilly_fn).call(this, onValidationError).then((tokenData) => {
4810            if (!tokenData && paymentType === "Klarna") {
4811              if (globalThis.Checkout.store.state.get() === globalThis.Checkout.StoreStates.SUBMITTING) {
4812                globalThis.Checkout.store.state.set(globalThis.Checkout.StoreStates.FILLING_FORM);
4813                globalThis.Checkout.store.submitting.set({
4814                  state: globalThis.Checkout.SubmittingStates.IDLE
4815                });
4816              }
4817              return;
4818            }
4819            globalThis.Checkout.store.payment[paymentType].token.set(tokenData.id);
4820            const payload = this.buildPayloadFromStore({
4821              contact: globalThis.Checkout.store.contact.get(),
4822              turnstileToken: globalThis.Checkout.turnstileToken,
4823              shippingAddress: globalThis.Checkout.store.shipping.get(),
4824              billingAddress: globalThis.Checkout.store.billing.get(),
4825              paymentMethodDetails: __privateMethod(this, _CheckoutSubmit_static, buildPaymentMethodDetails_fn).call(this) ?? {},
4826              selectedShippingOption: globalThis.Checkout.store.shippingOption.get(),
4827              skipBillingAddress: globalThis.Checkout.utils.skipBillingAddress(globalThis.Checkout.store),
4828              redirectOverride
4829            });
4830            return this.submit(payload);
4831          });
4832        } else {
4833          const payload = this.buildPayloadFromStore({
4834            contact: globalThis.Checkout.store.contact.get(),
4835            turnstileToken: globalThis.Checkout.turnstileToken,
4836            shippingAddress: globalThis.Checkout.store.shipping.get(),
4837            billingAddress: globalThis.Checkout.store.billing.get(),
4838            paymentMethodDetails: __privateMethod(this, _CheckoutSubmit_static, buildPaymentMethodDetails_fn).call(this) ?? {},
4839            selectedShippingOption: globalThis.Checkout.store.shippingOption.get(),
4840            skipBillingAddress: globalThis.Checkout.utils.skipBillingAddress(globalThis.Checkout.store),
4841            redirectOverride
4842          });
4843          return this.submit(payload);
4844        }
4845      }
4846    } else {
4847      onValidationError();
4848    }
4849  }
4850  static checkSubmitShowErrors(options) {
4851    const { onlyFields, skipFields } = options ?? {};
4852    return Object.entries(globalThis.Checkout.computed.errorsByName).map(([name, computed2]) => {
4853      if (onlyFields && !onlyFields.has(name)) return true;
4854      if (skipFields && skipFields.has(name)) return true;
4855      globalThis.Checkout.store.showAllErrors[name].set(true);
4856      return !globalThis.Checkout.utils.hasErrors(computed2.get());
4857    }).every((v) => !!v);
4858  }
4859  static buildPayloadFromStore(payload) {
4860    const addressParams = __privateMethod(this, _CheckoutSubmit_static, buildAddressParams_fn).call(this, {
4861      billingAddress: payload.billingAddress,
4862      shippingAddress: payload.shippingAddress
4863    }, {
4864      skipBillingAddress: payload.skipBillingAddress
4865    }) ?? {};
4866    const paymentDetails = payload.paymentMethodDetails;
4867    const purchaseCartDetails = this.buildPurchaseCartDetails();
4868    const customFields = buildCustomFields();
4869    const contact = payload.contact;
4870    const couponCode = globalThis.Checkout.store.coupons.appliedCode.get();
4871    const couponData = couponCode ? { coupon_codes: [couponCode] } : {};
4872    const virtualInstallmentId = globalThis.Checkout.store.payment.virtualInstallmentId.get();
4873    const installmentData = decodeVirtualInstallmentId(virtualInstallmentId);
4874    const rebillyPayload = {
4875      // NOTE: Temp fix for FHL 2023
4876      ...customFields ? customFields : {},
4877      contact: {
4878        ...contact,
4879        ...addressParams.shipping ?? {}
4880      },
4881      turnstileToken: payload.turnstileToken,
4882      ...addressParams.billing ?? {},
4883      purchase: {
4884        ...couponData,
4885        ...purchaseCartDetails,
4886        ...paymentDetails,
4887        process_new_order: true,
4888        ...paymentDetails?.payment_method_type === "payment-card" && installmentData ? {
4889          installment_duration: installmentData.duration,
4890          installment_type: installmentData.type
4891        } : {}
4892      },
4893      skip_billing_address: Boolean(payload.skipBillingAddress),
4894      skip_optin_track: document.getElementById("cfAR")?.getAttribute("data-leads-collected") === "true"
4895    };
4896    if (__privateMethod(this, _CheckoutSubmit_static, shouldIncludeRegistration_fn).call(this)) rebillyPayload["registration"] = __privateMethod(this, _CheckoutSubmit_static, buildRegistrationDetails_fn).call(this);
4897    const selected_shipping_option = payload.selectedShippingOption;
4898    if (selected_shipping_option && Object.keys(selected_shipping_option).length > 1) {
4899      rebillyPayload.purchase.selected_shipping_option = selected_shipping_option;
4900    }
4901    const redirectUrl = payload.redirectOverride || __privateGet(this, _redirecTo);
4902    if (redirectUrl) {
4903      rebillyPayload.redirect_to = redirectUrl;
4904    }
4905    return rebillyPayload;
4906  }
4907  static generateShippingOptionId(shippingOption) {
4908    return [shippingOption.description, shippingOption.amount_formatted].join("$");
4909  }
4910  static buildDigitalWalletTransactionData(summaryData, cart, shippingEnabled, shippingOptions) {
4911    const { line_items } = summaryData;
4912    const lineItems = line_items.map(({ price, description }, index) => {
4913      let label;
4914      if (line_items.length == cart.items.length) {
4915        const variantId = cart.items[index].variant_id;
4916        const variant = globalThis.Checkout.variantsById[variantId];
4917        label = variant.name;
4918      } else {
4919        label = description;
4920      }
4921      return {
4922        label,
4923        amount: price
4924      };
4925    });
4926    if (summaryData.tax?.amount > 0) {
4927      lineItems.push({
4928        label: "Taxes",
4929        amount: summaryData.tax.amount
4930      });
4931    }
4932    if (summaryData.shipping?.amount > 0) {
4933      lineItems.push({
4934        label: "Shipping",
4935        amount: summaryData.shipping.amount
4936      });
4937    }
4938    if (summaryData.discount?.amount > 0) {
4939      lineItems.push({
4940        label: "Discount",
4941        amount: -summaryData.discount?.amount
4942      });
4943    }
4944    return {
4945      amount: summaryData.total.amount,
4946      lineItems,
4947      ...shippingEnabled ? {
4948        status: shippingOptions.length ? "success" : "fail",
4949        shippingOptions: shippingOptions.map((shippingOption) => ({
4950          id: this.generateShippingOptionId(shippingOption),
4951          label: shippingOption.description,
4952          description: "",
4953          amount: Number(shippingOption.amount.amount)
4954        }))
4955      } : {}
4956    };
4957  }
4958  static buildPurchaseCartDetails() {
4959    const checkoutCart = globalThis.Checkout.computed.checkoutCart.get();
4960    const lineItems = checkoutCart.items.map(
4961      ({ variant_id, price_id, line_item_id, quantity }) => {
4962        return {
4963          id: variant_id,
4964          quantity,
4965          price_id,
4966          ...line_item_id ? { line_item_id } : {}
4967        };
4968      }
4969    );
4970    return { order_id: checkoutCart.order_id, product_variants: lineItems };
4971  }
4972  static submit(payload) {
4973    if (localStorage.getItem("cf2:devtools:enabled")) {
4974      console.log("submitted data", payload);
4975    }
4976    const requestIdempotency = uuidv4();
4977    globalThis.CFDispatchEvent(globalThis.CFEvents.FORM_SUBMITTED, payload);
4978    let timer = null;
4979    __privateMethod(this, _CheckoutSubmit_static, submitOrderAsync_fn).call(this, payload, requestIdempotency, 3, () => {
4980      clearInterval(timer);
4981      globalThis.Checkout.store.submitting.set({
4982        state: globalThis.Checkout.SubmittingStates.START
4983      });
4984    }, (sleepTime) => {
4985      let remainingSeconds = sleepTime / 1e3;
4986      clearInterval(timer);
4987      timer = setInterval(() => {
4988        remainingSeconds -= 1;
4989        globalThis.Checkout.store.submitting.set({
4990          state: globalThis.Checkout.SubmittingStates.WAITING_ON_QUEUE,
4991          remainingSeconds
4992        });
4993      }, 1e3);
4994    }).then((response) => {
4995      if (response.status == 422) {
4996        response.json().then((responseJSON) => {
4997          const errorDetails = responseJSON.error_details;
4998          let errorDetailsMessage = responseJSON.error;
4999          if (responseJSON.error_details && !!errorDetails?.length) {
5000            errorDetailsMessage = errorDetails.map((e) => e.graceful_message ?? e.message).join("\n");
5001            const mode = globalThis.Checkout.store.checkout.mode.get();
5002            const isRetrieablePayment = mode == globalThis.Checkout.CheckoutStates.OTO && errorDetails.find((e) => e.source == "payment_gateway");
5003            if (isRetrieablePayment) {
5004              globalThis.Checkout.store.showAllErrors.payment.set(false);
5005              globalThis.Checkout.store.payment.id.set(null);
5006            }
5007          }
5008          globalThis.Checkout.store.submitting.set({
5009            state: globalThis.Checkout.SubmittingStates.ERROR,
5010            code: globalThis.Checkout.ErrorTypes.SERVER_ERROR_WITH_MESSAGE,
5011            message: errorDetailsMessage,
5012            actionable: isActionableCheckoutError(responseJSON)
5013          });
5014        });
5015      } else if (response.ok) {
5016        __privateSet(this, _formSubmitPayload, payload);
5017        globalThis.CFDispatchEvent(globalThis.CFEvents.FORM_SUBMITTED_OK, payload);
5018        if (response.headers.get("X-CF2-APPROVAL-URL")) {
5019          globalThis.Checkout.store.threeds.set({
5020            show: true,
5021            approvalUrl: response.headers.get("X-CF2-APPROVAL-URL")
5022          });
5023        } else {
5024          globalThis.Checkout.store.submitting.set({
5025            state: globalThis.Checkout.SubmittingStates.DONE
5026          });
5027          globalThis.Checkout.store.state.set(globalThis.Checkout.StoreStates.SUBMITTED);
5028          globalThis.CFDispatchEvent(globalThis.CFEvents.FORM_SUBMITTED_FINALIZED, payload);
5029          __privateMethod(this, _CheckoutSubmit_static, handleFormSubmitRedirect_fn).call(this, response, response.headers.get("Location"));
5030        }
5031      } else if (response.status >= 300 && response.status < 400) {
5032        globalThis.Checkout.store.submitting.set({
5033          state: globalThis.Checkout.SubmittingStates.DONE
5034        });
5035        globalThis.Checkout.store.state.set(globalThis.Checkout.StoreStates.SUBMITTED);
5036        globalThis.CFDispatchEvent(globalThis.CFEvents.FORM_SUBMITTED_FINALIZED, payload);
5037        __privateMethod(this, _CheckoutSubmit_static, handleFormSubmitRedirect_fn).call(this, response, response.headers.get("Location") ?? globalThis.location.href);
5038      } else if (response.status === 429) {
5039        clearInterval(timer);
5040        globalThis.Checkout.store.submitting.set({
5041          state: globalThis.Checkout.SubmittingStates.ERROR,
5042          code: globalThis.Checkout.ErrorTypes.EXCEEDED_MAX_RETRIES
5043        });
5044      } else {
5045        globalThis.Checkout.store.submitting.set({
5046          state: globalThis.Checkout.SubmittingStates.ERROR,
5047          code: globalThis.Checkout.ErrorTypes.UNHANDLED_SERVER_RESPONSE
5048        });
5049      }
5050    }).catch((err) => {
5051      console.error(err);
5052      clearInterval(timer);
5053      globalThis.Checkout.store.submitting.set({
5054        state: globalThis.Checkout.SubmittingStates.ERROR,
5055        code: globalThis.Checkout.ErrorTypes.SERVER_ERROR
5056      });
5057    });
5058  }
5059};
5060_redirecTo = new WeakMap();
5061_threedsListenerEnabled = new WeakMap();
5062_formSubmitPayload = new WeakMap();
5063_CheckoutSubmit_static = new WeakSet();
5064leadSourceGenerator_fn = function() {
5065  const DEFAULT_MAX_CHARS_LENGTH = 512;
5066  const leadQueryParamMapping = {
5067    utm_source: {
5068      name: "source"
5069    },
5070    utm_medium: {
5071      name: "medium"
5072    },
5073    utm_campaign: {
5074      name: "campaign"
5075    },
5076    utm_term: {
5077      name: "term"
5078    },
5079    utm_content: {
5080      name: "content"
5081    },
5082    affiliate: {},
5083    subAffiliate: {},
5084    clickId: {},
5085    salesAgent: {}
5086  };
5087  const params = new URLSearchParams(globalThis.location.search);
5088  return Array.from(params.keys()).reduce((acc, key) => {
5089    const mappedValue = leadQueryParamMapping[key];
5090    if (mappedValue) {
5091      const paramValue = params.get(key);
5092      const leadSourceName = mappedValue.name ?? key;
5093      acc[leadSourceName] = paramValue.substring(0, DEFAULT_MAX_CHARS_LENGTH);
5094    }
5095    return acc;
5096  }, {});
5097};
5098submitRebilly_fn = function(onValidationError) {
5099  const paymentType = globalThis.Checkout.store.payment.type.get();
5100  const method = REBILLY_PAYMENT_METHOD_BY_TYPE_MAP[paymentType] ?? paymentType;
5101  const Rebilly = globalThis.Rebilly;
5102  let extraData = { method };
5103  const leadSource = __privateMethod(this, _CheckoutSubmit_static, leadSourceGenerator_fn).call(this);
5104  if (Object.keys(leadSource).length) {
5105    extraData = { ...extraData, leadSource };
5106  }
5107  const form = document.querySelector("#cfAR");
5108  const rebillyDataMapping = {
5109    firstName: "first_name",
5110    lastName: "last_name",
5111    emails: "email",
5112    ...paymentType === "Klarna" ? { country: "country" } : {}
5113  };
5114  const rebillyFieldKeyMapping = {
5115    "paymentInstrument.cvv": "cvv"
5116  };
5117  Object.entries(rebillyDataMapping).forEach(([rebillyKey, dataKey]) => {
5118    const input = form.querySelector(`[data-rebilly="${rebillyKey}"]`);
5119    if (input) {
5120      let value = globalThis.Checkout.store.contact.get()[dataKey];
5121      if (dataKey === "country") {
5122        const cartHasPhysicalProducts = hasPhysicalProducts(globalThis.Checkout.computed.checkoutCart.get());
5123        const billingSameAsShipping = globalThis.Checkout.store.billingSameAsShipping.get();
5124        const key = cartHasPhysicalProducts && billingSameAsShipping ? "shipping" : "billing";
5125        value = globalThis.Checkout.store[key].get()[dataKey] ?? globalThis.Checkout.contactLocale.country;
5126      }
5127      input.value = value;
5128    }
5129  });
5130  globalThis.clearBlankInputFields();
5131  return Rebilly.createToken(form, extraData).catch((e) => {
5132    console.error(e);
5133    if (e.invalidFields && e.invalidFields.length) {
5134      e.invalidFields.forEach((error) => {
5135        const key = rebillyFieldKeyMapping[error.field];
5136        if (key) {
5137          const event = { valid: false, error: { message: error.message } };
5138          globalThis.Checkout.store.payment["payment-card"].events.setKey(key, event);
5139        }
5140      });
5141      globalThis.Checkout.store.submitting.set({
5142        state: globalThis.Checkout.SubmittingStates.ERROR,
5143        code: globalThis.Checkout.ErrorTypes.REBILLY_ERROR
5144      });
5145    } else {
5146      let message = e.message;
5147      if (e.details.length) {
5148        const details = e.details.join(" - ");
5149        message = `${message} - ${details}`;
5150      }
5151      globalThis.Checkout.store.submitting.set({
5152        state: globalThis.Checkout.SubmittingStates.ERROR,
5153        code: globalThis.Checkout.ErrorTypes.REBILLY_ERROR,
5154        message
5155      });
5156    }
5157    onValidationError(e);
5158  });
5159};
5160buildPaymentMethodDetails_fn = function() {
5161  const mode = globalThis.Checkout.store.checkout.mode.get();
5162  if (mode == globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE) return;
5163  const payment_method_type = globalThis.Checkout.store.payment.type.get();
5164  const rebilly_token = globalThis.Checkout.store.payment[payment_method_type].token.get();
5165  const payment_method_id = globalThis.Checkout.store.payment.id.get();
5166  if (payment_method_id) return { payment_method_id, rebilly_token: null };
5167  return {
5168    payment_method_id: null,
5169    payment_method_type,
5170    rebilly_token
5171  };
5172};
5173buildRegistrationDetails_fn = function() {
5174  return {
5175    calendar_event_id: document.getElementsByName("registration[calendar_event_id]")[0].value,
5176    occurs_at: document.getElementsByName("registration[occurs_at]")[0].value
5177  };
5178};
5179shouldIncludeRegistration_fn = function() {
5180  return document.getElementsByName("registration[calendar_event_id]")?.length > 0;
5181};
5182buildAddressParams_fn = function(addressParams, options) {
5183  const mode = globalThis.Checkout.store.checkout.mode.get();
5184  const billing = addressParams.billingAddress ?? {};
5185  const shipping = addressParams.shippingAddress ?? {};
5186  const checkoutCart = globalThis.Checkout.computed.checkoutCart.get();
5187  if (mode == globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE && !hasPhysicalProducts(checkoutCart)) {
5188    return;
5189  }
5190  let billing_address_attributes, physical_address_attributes;
5191  if (mode !== globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE) {
5192    if (isSavedAddress(billing)) {
5193      billing_address_attributes = {
5194        id: billing.id
5195      };
5196    } else {
5197      billing_address_attributes = {
5198        address_one: billing.address,
5199        address_two: billing.address_2,
5200        city: billing.city,
5201        region_name: billing.state,
5202        country_id: billing.country,
5203        postal_code: billing.zip
5204      };
5205    }
5206  }
5207  if (isSavedAddress(shipping)) {
5208    physical_address_attributes = {
5209      id: shipping.id
5210    };
5211  } else {
5212    physical_address_attributes = {
5213      address_one: shipping.address,
5214      address_two: shipping.address_2,
5215      city: shipping.city,
5216      region_name: shipping.state,
5217      country_id: shipping.country,
5218      postal_code: shipping.zip
5219    };
5220  }
5221  if (hasPhysicalProducts(checkoutCart)) {
5222    const billingSameAsShipping = globalThis.Checkout.store.billingSameAsShipping.get();
5223    if (options.skipBillingAddress) {
5224      return { shipping: { shipping_addresses_attributes: [{ physical_address_attributes }] } };
5225    }
5226    if (mode == globalThis.Checkout.CheckoutStates.OTO) {
5227      return {
5228        shipping: { shipping_addresses_attributes: [{ physical_address_attributes }] },
5229        billing: { billing_address_attributes, billing_same_as_shipping: false }
5230      };
5231    }
5232    if (billingSameAsShipping) {
5233      return {
5234        shipping: { shipping_addresses_attributes: [{ physical_address_attributes }] },
5235        billing: { billing_same_as_shipping: true }
5236      };
5237    } else {
5238      return {
5239        shipping: { shipping_addresses_attributes: [{ physical_address_attributes }] },
5240        billing: { billing_address_attributes, billing_same_as_shipping: false }
5241      };
5242    }
5243  } else {
5244    if (options.skipBillingAddress) return;
5245    return { billing: { billing_address_attributes } };
5246  }
5247};
5248submitOrderAsync_fn = async function(data, requestIdempotency, maxRetries = 3, onBeforeSubmit, onRetryAfter) {
5249  let response;
5250  for (let i = 0; i < maxRetries; i++) {
5251    onBeforeSubmit();
5252    const nonce = await fetchCheckoutNonce();
5253    response = await fetch(renderedHref(), {
5254      credentials: "same-origin",
5255      method: "post",
5256      body: JSON.stringify({ ...data, request_idempotency: requestIdempotency, ...checkoutNonceParams(nonce) }),
5257      headers: {
5258        "Content-Type": "application/json",
5259        "X-CF2-POST-TYPE": "submit"
5260      }
5261    }).then((res) => {
5262      if (res.status >= 500) {
5263        console.error(res);
5264        throw Error("500 error");
5265      }
5266      return res;
5267    });
5268    if (response.status === 429) {
5269      const sleepTime = parseInt(response.headers.get("Retry-After"));
5270      onRetryAfter(sleepTime);
5271      console.log(`Waiting on queue, retrying after ${sleepTime}`);
5272      await sleepMs(sleepTime);
5273    } else {
5274      break;
5275    }
5276  }
5277  return response;
5278};
5279handleFormSubmitRedirect_fn = async function(response, urlToRedirect) {
5280  globalThis.location.href = urlToRedirect;
5281};
5282add3dsListener_fn = function() {
5283  if (__privateGet(this, _threedsListenerEnabled)) return;
5284  __privateSet(this, _threedsListenerEnabled, true);
5285  globalThis.addEventListener("message", (event) => {
5286    if (event.data.sender == "CfOrderStatus") {
5287      const orderDetails = event.data.details;
5288      if (__privateGet(this, _redirecTo)) {
5289        orderDetails.redirect_to = __privateGet(this, _redirecTo);
5290      }
5291      fetch(renderedHref(), {
5292        credentials: "same-origin",
5293        method: "post",
5294        body: JSON.stringify(orderDetails),
5295        headers: {
5296          "Content-Type": "application/json",
5297          "X-CF2-POST-TYPE": "submit"
5298        }
5299      }).then((response) => {
5300        if (orderDetails["orderResult"] == "declined") {
5301          globalThis.Checkout.store.submitting.set({
5302            state: globalThis.Checkout.SubmittingStates.ERROR,
5303            code: globalThis.Checkout.ErrorTypes.THREEDS_DECLINED_ERROR
5304          });
5305        } else {
5306          if (response.ok) {
5307            globalThis.Checkout.store.state.set(globalThis.Checkout.StoreStates.SUBMITTED);
5308            globalThis.CFDispatchEvent(globalThis.CFEvents.FORM_SUBMITTED_FINALIZED, __privateGet(this, _formSubmitPayload));
5309            __privateMethod(this, _CheckoutSubmit_static, handleFormSubmitRedirect_fn).call(this, response, response.headers.get("Location"));
5310          } else {
5311            response.json().then((r) => {
5312              globalThis.Checkout.store.submitting.set({
5313                state: globalThis.Checkout.SubmittingStates.ERROR,
5314                code: globalThis.Checkout.ErrorTypes.THREEDS_DECLINED_CUSTOM_ERROR,
5315                message: r.error
5316              });
5317            });
5318          }
5319        }
5320        globalThis.Checkout.store.threeds.set({
5321          show: false,
5322          approvalUrl: null
5323        });
5324      });
5325    }
5326  });
5327};
5328__privateAdd(CheckoutSubmit, _CheckoutSubmit_static);
5329__privateAdd(CheckoutSubmit, _redirecTo, document.querySelector('[href="#submit-checkout-form"]')?.getAttribute("data-on-submit-go-to"));
5330__privateAdd(CheckoutSubmit, _threedsListenerEnabled, false);
5331__privateAdd(CheckoutSubmit, _formSubmitPayload, null);
5332
5333// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-apple-pay-button-v1.ts
5334init_runtime();
5335var CheckoutApplePayButtonV1 = class extends CF2Component {
5336  constructor(el, runtimeSel) {
5337    super(el, runtimeSel);
5338  }
5339  mount() {
5340    this.applePayMounted = nanostores.atom(false);
5341    const checkoutElement = this.element.closest(".elCheckout");
5342    if (!!this.getApplePayPreview()) {
5343      this.getApplePayPreview().addEventListener("click", (evt) => {
5344        evt.preventDefault();
5345        CheckoutSubmit.checkSubmitShowErrors({ onlyFields: /* @__PURE__ */ new Set(["products"]) });
5346        CheckoutSubmit.checkSubmit(checkoutElement);
5347      });
5348      new MutationObserver((mutations) => {
5349        for (const mutation of mutations) {
5350          for (const addedNode of mutation.addedNodes) {
5351            if (addedNode.id == "rebilly-apple-pay-button") {
5352              this.applePayMounted.set(true);
5353            }
5354          }
5355          for (const removedNode of mutation.removedNodes) {
5356            if (removedNode.id == "rebilly-apple-pay-button") {
5357              this.applePayMounted.set(false);
5358            }
5359          }
5360        }
5361      }).observe(this.element.querySelector(".apple-pay-button"), {
5362        subtree: true,
5363        childList: true
5364      });
5365      const computedState = nanostores.computed([
5366        Checkout.computed.isDigitalWalletReadyToStart,
5367        this.applePayMounted,
5368        Checkout.store.isUpdatingRebilly
5369      ], (isDigitalWalletReadyToStart, isMounted, isUpdatingRebilly) => {
5370        if (isUpdatingRebilly) {
5371          return "loading";
5372        } else if (!isMounted || !isDigitalWalletReadyToStart) {
5373          return "preview";
5374        } else {
5375          return "ready";
5376        }
5377      });
5378      computedState.subscribe((state) => {
5379        this.getApplePayWrapper() && (this.getApplePayWrapper().dataset.state = state);
5380      });
5381      const computedShowApplePay = nanostores.computed([
5382        Checkout.store.payment.id,
5383        Checkout.store.payment.type
5384      ], (paymentId, paymentType) => {
5385        return !paymentId && paymentType == "apple-pay" && this.mode != "upgradeDowngrade";
5386      });
5387      computedShowApplePay.subscribe((showApplePay) => {
5388        this.element.closest(".submit-button-wrapper")?.setAttribute("data-show-apple-pay", showApplePay);
5389      });
5390    }
5391  }
5392  getApplePayWrapper() {
5393    return this.element.querySelector(".apple-pay-button-wrapper");
5394  }
5395  getApplePayPreview() {
5396    return this.element.querySelector(".apple-pay-button-preview");
5397  }
5398};
5399registerComponent("CheckoutApplePayButton/V1", CheckoutApplePayButtonV1);
5400window["CheckoutApplePayButtonV1"] = CheckoutApplePayButtonV1;
5401
5402// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-submit-button-v1.ts
5403init_define_process();
5404init_general();
5405init_runtime();
5406var CheckoutSubmitButtonV1 = class extends CF2Component {
5407  constructor(el, runtimeSel) {
5408    super(el, runtimeSel);
5409  }
5410  onSubmit(element) {
5411  }
5412  mount() {
5413    this.storeButtonInitialHTML();
5414    this.getSubmitButton().addEventListener("click", (evt) => {
5415      evt.preventDefault();
5416      this.requestSubmit();
5417    });
5418    const checkoutElement = this.element.closest(".elCheckout");
5419    Checkout.store.state.listen((state) => {
5420      if (state === Checkout.StoreStates.INITIALIZED && !this.keydownListenerAttached) {
5421        this.keydownListenerAttached = true;
5422        document.addEventListener("keydown", (evt) => {
5423          if (evt.isComposing || evt.keyCode === 229) return;
5424          if (evt.keyCode === 13 && $(this.element).is(":visible")) {
5425            if (isElementVisibleOnViewport(checkoutElement, 20)) {
5426              this.element.focus();
5427              this.requestSubmit();
5428            }
5429          }
5430        });
5431      }
5432    });
5433  }
5434  // The single entry point for every submit trigger. The lock is taken
5435  // synchronously, before any await, so it covers the whole attempt -- the
5436  // validation, tokenization and nonce work that runs before the payment POST as
5437  // well as the POST itself. The Enter key comes through here too, since
5438  // `pointer-events: none` only stops pointer input.
5439  requestSubmit() {
5440    if (this.isSubmitLocked()) return;
5441    this.lockSubmit();
5442    Promise.all(this.onSubmit(this.element) ?? []).finally(() => {
5443      if (!this.submitClaimed) this.unlockSubmit();
5444    });
5445  }
5446  isSubmitLocked() {
5447    return this.getSubmitButton().getAttribute("data-disabled") === "true";
5448  }
5449  // aria-disabled rides along because the button is an anchor: `pointer-events: none`
5450  // takes it out of the pointer flow but says nothing to a screen reader.
5451  lockSubmit() {
5452    this.getSubmitButton().setAttribute("data-disabled", true);
5453    this.getSubmitButton().setAttribute("aria-disabled", true);
5454  }
5455  unlockSubmit() {
5456    this.getSubmitButton().setAttribute("data-disabled", false);
5457    this.getSubmitButton().removeAttribute("aria-disabled");
5458  }
5459  // Locks the button on behalf of a gateway. Also covers submits that never
5460  // touched this button -- express/wallet payments, the OTO one-click flow --
5461  // which would otherwise leave it live while a payment is running.
5462  claimSubmit() {
5463    this.submitClaimed = true;
5464    this.lockSubmit();
5465  }
5466  getSubmitButton() {
5467    return this.element.querySelector('[href="#submit-checkout-form"]');
5468  }
5469  storeButtonInitialHTML() {
5470    const buttonMainText = this.element.querySelector(".elButtonMain .elButtonMainText");
5471    const buttonSubText = this.element.querySelector(".elButtonSub");
5472    this.buttonMainTextInitialHTML = buttonMainText.innerHTML;
5473    this.buttonSubTextInitialHTML = buttonSubText.innerHTML;
5474  }
5475  // The gateways' "back to idle" call, and so also the only thing that releases
5476  // the submit lock. Callers must not use it to refresh the label while a submit
5477  // is in flight.
5478  setButtonInitialHTML() {
5479    this.submitClaimed = false;
5480    this.unlockSubmit();
5481    this.element.removeAttribute("data-loading");
5482    const buttonMain = this.element.querySelector(".elButtonMain");
5483    const buttonSub = this.element.querySelector(".elButtonSub");
5484    buttonMain.querySelector(".elButtonSpinner").style.removeProperty("display");
5485    const buttonMainText = buttonMain.querySelector(".elButtonMainText");
5486    buttonMainText.innerHTML = this.buttonMainTextInitialHTML;
5487    buttonSub.innerHTML = this.buttonSubTextInitialHTML;
5488  }
5489  setLoading() {
5490    this.element.setAttribute("data-loading", "true");
5491  }
5492  setSubmittingText() {
5493    this.claimSubmit();
5494    this.element.removeAttribute("data-loading");
5495    const buttonMain = this.element.querySelector(".elButtonMain");
5496    const buttonSub = this.element.querySelector(".elButtonSub");
5497    buttonMain.querySelector(".elButtonSpinner").style.display = "inline-block";
5498    const buttonMainText = buttonMain.querySelector(".elButtonMainText");
5499    buttonMainText.innerHTML = this.submittingText;
5500    buttonSub.innerHTML = "";
5501  }
5502  update({ text, subText }) {
5503    this.element.removeAttribute("data-loading");
5504    const buttonMain = this.element.querySelector(".elButtonMain");
5505    const buttonSub = this.element.querySelector(".elButtonSub");
5506    const buttonMainText = buttonMain.querySelector(".elButtonMainText");
5507    buttonMainText.textContent = text;
5508    buttonSub.textContent = subText;
5509  }
5510};
5511registerComponent("CheckoutSubmitButton/V1", CheckoutSubmitButtonV1);
5512window["CheckoutSubmitButtonV1"] = CheckoutSubmitButtonV1;
5513
5514// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-configuration-error-v1.ts
5515init_define_process();
5516init_runtime();
5517var CheckoutConfigurationErrorV1 = class extends CF2Component {
5518  constructor(el, runtimeSel) {
5519    super(el, runtimeSel);
5520    __publicField(this, "errorMessageMapping", {
5521      [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>`,
5522      [ERROR_CODES.EMPTY_PRODUCTS_ERROR]: this.checkoutConfigurationErrorsTexts.emptyProductsError,
5523      [ERROR_CODES.ORDER_RECURRING_INTERVAL_MISMATCH]: this.checkoutConfigurationErrorsTexts.orderRecurringIntervalMismatchError,
5524      [ERROR_CODES.MULTIPLE_CHECKOUT_PRESENT]: this.checkoutConfigurationErrorsTexts.multipleCheckoutPresentError
5525    });
5526  }
5527  mount() {
5528    const prettifyErrorMessage = (error) => {
5529      if (this.errorMessageMapping[error.code]) return this.errorMessageMapping[error.code];
5530      if (error.fetchErrorType == CFFetcherErrorTypes.NETWORK_ERROR) {
5531        return `${this.checkoutConfigurationErrorsTexts.networkError} ${error.code}`;
5532      } else {
5533        return `${this.checkoutConfigurationErrorsTexts.criticalServerError} ${error.code}`;
5534      }
5535    };
5536    Checkout.store?.criticalErrors?.subscribe((errors) => {
5537      this.errors = errors.map(prettifyErrorMessage);
5538      this.render();
5539    });
5540  }
5541  setErrors(errors) {
5542    if (errors === null || typeof errors === "undefined") {
5543      return;
5544    }
5545    this.errors = Array.isArray(errors) ? errors : [errors];
5546    this.render();
5547  }
5548  remove() {
5549    this.element.innerHTML = "";
5550  }
5551  render(initializeChildrenInstances = false) {
5552    const is_server = true;
5553    const errors = this.errors ?? [];
5554    const checkoutConfigurationErrorsTexts = this.checkoutConfigurationErrorsTexts ?? null;
5555    let html = "";
5556    {
5557      html += `<div class="elCheckoutConfigError`;
5558      if (errors?.length == 0) {
5559        html += ` elHide`;
5560      }
5561      html += `">`;
5562      const c0 = errors;
5563      const fl1 = new CF2ForloopDrop(c0.length);
5564      for (const error of c0) {
5565        const forloop = fl1;
5566        html += `<span>${error}</span>`;
5567        forloop.next();
5568      }
5569      html += `</div>`;
5570    }
5571    this.replaceContent(html);
5572    if (initializeChildrenInstances) {
5573      const scopeToYggRender = this.element.querySelectorAll("[ygg-render]").length > 0;
5574      const options = { scopeToYggRender };
5575      CF2Component.hydrateTree(this.element, options);
5576    }
5577  }
5578};
5579registerComponent("CheckoutConfigurationError/V1", CheckoutConfigurationErrorV1);
5580window["CheckoutConfigurationErrorV1"] = CheckoutConfigurationErrorV1;
5581
5582// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-order-details-content-v1.ts
5583init_define_process();
5584init_runtime();
5585var CheckoutOrderDetailsContentV1 = class extends CF2Component {
5586  constructor(el, runtimeSel) {
5587    super(el, runtimeSel);
5588    __publicField(this, "undefined");
5589  }
5590  remove() {
5591    this.element.innerHTML = "";
5592  }
5593  render(initializeChildrenInstances = false) {
5594    const is_server = true;
5595    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" }] };
5596    let html = "";
5597    {
5598      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>`;
5599      if (order_details?.name) {
5600        html += `<span class="elCheckoutOrderDetailsName">${order_details?.name}</span>`;
5601      }
5602      html += `<span class="elCheckoutOrderDetailsDate">${order_details?.created_at}</span></div><div class="elCheckoutOrderDetailsItemsWrapper elCheckoutOrderDetailsWrapper"><h3></h3><div class="elCheckoutOrderDetailsItems elCheckoutOrderDetailsContainer">`;
5603      const c0 = order_details.line_items;
5604      const fl1 = new CF2ForloopDrop(c0.length);
5605      for (const line_item of c0) {
5606        const forloop = fl1;
5607        html += `<div class="elCheckoutOrderDetailsItem">`;
5608        const imageUrl = line_item?.image;
5609        if (imageUrl) {
5610          html += `<div class="elCheckoutOrderDetailsItemImage"><div data-page-element="Image/V2" class="elImageWrapper de-image-block id-Image/V2`;
5611          if (CF2Blank(imageUrl) && CF2Blank(null) && true) {
5612            html += ` forceHide`;
5613          }
5614          html += `" data-liquid-replace="item">`;
5615          if (imageUrl || !CF2Blank(null)) {
5616            html += `<img class="elImage" src="${imageUrl ?? null}" data-lazy-loading="true" data-lazy-loading="true"/>`;
5617          } else if (false) {
5618            html += `<div class="image-placeholder" title=""><span class="image-placeholder-header"></span></div>`;
5619          }
5620          html += `</div><div class="elCheckoutOrderDetailsItemQty">${line_item?.quantity}</div></div>`;
5621        }
5622        html += `<div class="elCheckoutOrderDetailsItemInfo"><span class="elCheckoutOrderDetailsItemName">${line_item?.product_name}</span>`;
5623        if (line_item?.display_price) {
5624          html += `<span class="elCheckoutOrderDetailsItemPrice">${line_item?.display_price}</span>`;
5625        }
5626        if (line_item?.variant_properties_values?.length > 0) {
5627          html += `<div class="elCheckoutOrderDetailsVariants">`;
5628          const c2 = line_item.variant_properties_values;
5629          const fl3 = new CF2ForloopDrop(c2.length);
5630          for (const variant_item of c2) {
5631            const forloop2 = fl3;
5632            html += `<span>${variant_item?.value}</span>`;
5633            forloop2.next();
5634          }
5635          html += `</div>`;
5636        }
5637        html += `</div><div class="elCheckoutOrderDetailsItemAmount"><span>${line_item?.amount}</span></div></div>`;
5638        forloop.next();
5639      }
5640      html += `</div></div>`;
5641      if (order_details?.shipping_address) {
5642        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>`;
5643      }
5644      if (order_details?.billing_address) {
5645        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>`;
5646      }
5647      if (order_details?.billing_payment_method) {
5648        html += `<div class="elCheckoutOrderDetailsPayment elCheckoutOrderDetailsWrapper"><h3></h3>`;
5649        if (order_details?.billing_payment_method?.type == "payment-card") {
5650          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>`;
5651        } else if (order_details?.billing_payment_method?.type == "paypal") {
5652          html += `<div class="elCheckoutOrderDetailsPaymentType"><div class="elCheckoutOrderDetailsContainer"><i class="fab fa-paypal"></i><span>${order_details?.billing_payment_method?.details}</span></div></div>`;
5653        }
5654        html += `</div>`;
5655      }
5656      html += `<div class="elCheckoutOrderDetailsSummaryWrapper elCheckoutOrderDetailsWrapper"><h3></h3>
5656<div class="elCheckoutOrderDetailsSummary elCheckoutOrderDetailsContainer">`;
5657      if (order_details?.tax_amount) {
5658        html += `<div class="elCheckoutOrderDetailsSummaryTax"><span></span><span>${order_details?.tax_amount}</span></div>`;
5659      }
5660      if (order_details?.shipping_amount) {
5661        html += `<div class="elCheckoutOrderDetailsSummaryShipping"><span></span><span>${order_details?.shipping_amount}</span></div>`;
5662      }
5663      html += `<div class="elCheckoutOrderDetailsSummaryTotal"><span></span><span>${order_details?.total_amount}</span></div></div></div>`;
5664    }
5665    this.replaceContent(html);
5666    if (initializeChildrenInstances) {
5667      const scopeToYggRender = this.element.querySelectorAll("[ygg-render]").length > 0;
5668      const options = { scopeToYggRender };
5669      CF2Component.hydrateTree(this.element, options);
5670    }
5671  }
5672};
5673registerComponent("CheckoutOrderDetailsContent/V1", CheckoutOrderDetailsContentV1);
5674window["CheckoutOrderDetailsContentV1"] = CheckoutOrderDetailsContentV1;
5675
5676// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-order-details-v1.ts
5677init_define_process();
5678init_modal_v1();
5679
5680// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-existing-orders.ts
5681init_define_process();
5682
5683// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Utils/api.ts
5684init_define_process();
5685init_fetcher();
5686function makeCurrentPageFetcher(options) {
5687  const { headers, ...requestOptions } = options ?? {};
5688  const fetcher = new Fetcher({
5689    debug: true,
5690    pathPrefix: window.location.origin + renderedPath(),
5691    headers: {
5692      Accept: "application/json",
5693      "Content-Type": "application/json",
5694      ...headers ?? {}
5695    },
5696    requestOptions: {
5697      retries: 3,
5698      timeoutMS: 3e4,
5699      timeoutAfterRetrial: 1e3,
5700      convertThrowToErrorResponse: true,
5701      onlyOneInflightRequest: true,
5702      ...requestOptions
5703    }
5704  });
5705  return fetcher;
5706}
5707
5708// projects/lib/packages/yggdrasil-blueprints/src/Elements/Checkout/V2/Services/checkout-existing-orders.ts
5709var REACTAVATABLE_SERVICE_STATUS = ["canceled", "churned"];
5710var existingOrderFetcher = makeCurrentPageFetcher({
5711  customEvent: "CF2:ExistingOrder",
5712  shouldCaptureServerError: true,
5713  convertThrowToErrorResponse: false
5714});
5715var _hasReactivatableItems, _hasUpgradeDowngradeItems, _productCardDetails, _productCardDetailsObj;
5716var CheckoutExistingOrders = class {
5717  static fetch(payload = {}) {
5718    if (globalThis.globalResourceData.resourceName == "checkout") return Promise.resolve();
5719    const manage_order_id = new URLSearchParams(window.location.search).get("manage_order_id");
5720    return existingOrderFetcher.get("/existing_orders", { manage_order_id, ...payload }).then((data) => {
5721      this.cleanUp();
5722      this.processExistingOrdersResponse(data);
5723    }).catch((e) => {
5724      throw new CheckoutCriticalError(ERROR_CODES.FETCH_EXISTING_ORDERS_ERROR, {
5725        cause: e
5726      });
5727    });
5728  }
5729  static cleanUp() {
5730    __privateSet(this, _hasReactivatableItems, false);
5731    __privateSet(this, _hasUpgradeDowngradeItems, false);
5732    this.orderDetailsByOrderId = {};
5733    __privateSet(this, _productCardDetails, {});
5734    __privateSet(this, _productCardDetailsObj, {});
5735  }
5736  static clearUpdatableOrders(selectedProductId) {
5737    if (anyUpdatableOrders()) {
5738      globalThis.globalResourceData.products?.forEach(({ id: productId }) => {
5739        const isSelected = selectedProductId == productId;
5740        updateCardByProductIdState(productId, {
5741          quantity: isSelected ? 1 : 0,
5742          renderType: void 0,
5743          selectedOrderIndex: void 0,
5744          selectedUpdatableCartItemIndex: void 0,
5745          updatableOrders: void 0,
5746          cartItemOrderId: void 0,
5747          cartItemLineItemId: void 0,
5748          cartItemRenderType: void 0
5749        });
5750      });
5751      this.cleanUp();
5752    }
5753  }
5754  static processExistingOrdersResponse(existingOrdersResponse) {
5755    existingOrdersResponse.orders.forEach((order) => {
5756      const orderId = order.id;
5757      this.orderDetailsByOrderId[orderId] = order;
5758      const orderNumber = order.order_number;
5759      order.line_items.forEach((lineItem) => {
5760        const productId = lineItem.product_id;
5761        const lineItemSubscriptionDetails = lineItem.subscription_details;
5762        if (REACTAVATABLE_SERVICE_STATUS.includes(lineItemSubscriptionDetails?.status) && lineItemSubscriptionDetails?.reactivatable) {
5763          this.processReactivation(lineItem, orderId, orderNumber, productId);
5764        } else {
5765          this.processUpgradeDowngrades(lineItem, orderId, orderNumber, productId);
5766        }
5767      });
5768    });
5769    if (__privateGet(this, _hasReactivatableItems) || __privateGet(this, _hasUpgradeDowngradeItems)) {
5770      this.processUpdatableObj();
5771      this.updateSelectedCardItem();
5772    }
5773  }
5774  static processUpdatableObj() {
5775    __privateSet(this, _productCardDetails, {});
5776    Object.keys(__privateGet(this, _productCardDetailsObj)).forEach((k) => {
5777      __privateGet(this, _productCardDetails)[k] = {
5778        updatableOrders: Object.values(__privateGet(this, _productCardDetailsObj)[k].updatableOrders).reverse()
5779      };
5780    });
5781  }
5782  static processReactivation(lineItem, orderId, orderNumber, productId) {
5783    const lineItemId = lineItem.id;
5784    const variantId = lineItem.variant_id;
5785    const priceId = lineItem.price_id;
5786    if (!globalThis.Checkout.variantsById[variantId] || !globalThis.Checkout.pricesById[priceId]) {
5787      return;
5788    }
5789    __privateSet(this, _hasReactivatableItems, true);
5790    this.storeProductCardDetails(
5791      globalThis.Checkout.CheckoutStates.REACTIVATE,
5792      orderId,
5793      orderNumber,
5794      lineItemId,
5795      productId,
5796      variantId,
5797      priceId
5798    );
5799  }
5800  static processUpgradeDowngrades(lineItem, orderId, orderNumber, productId) {
5801    const lineItemId = lineItem.id;
5802    lineItem.upgrade_downgrade_options.forEach((upgradeDowngrade) => {
5803      const variantId = upgradeDowngrade.variant_to_id;
5804      const priceId = upgradeDowngrade.price_to_id;
5805      if (!globalThis.Checkout.variantsById[variantId] || !globalThis.Checkout.pricesById[priceId]) {
5806        return;
5807      }
5808      __privateSet(this, _hasUpgradeDowngradeItems, true);
5809      this.storeProductCardDetails(
5810        globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE,
5811        orderId,
5812        orderNumber,
5813        lineItemId,
5814        productId,
5815        variantId,
5816        priceId,
5817        upgradeDowngrade.direction
5818      );
5819    });
5820  }
5821  static storeProductCardDetails(type, orderId, orderNumber, lineItemId, productId, variantId, priceId, direction) {
5822    __privateGet(this, _productCardDetailsObj)[productId] = __privateGet(this, _productCardDetailsObj)[productId] ?? {
5823      updatableOrders: {}
5824    };
5825    const updatableOrders = __privateGet(this, _productCardDetailsObj)[productId].updatableOrders;
5826    updatableOrders[orderId] = updatableOrders[orderId] ?? {
5827      type,
5828      id: orderId,
5829      number: orderNumber,
5830      updatableItems: []
5831    };
5832    const { name: variantName } = globalThis.Checkout.variantsById[variantId];
5833    const { name: priceName } = globalThis.Checkout.pricesById[priceId];
5834    const updatableItems = updatableOrders[orderId].updatableItems;
5835    updatableItems.push({
5836      variantName,
5837      priceName,
5838      direction: direction ? direction?.charAt(0).toUpperCase() + direction?.slice(1) : null,
5839      cardDetails: {
5840        variantId,
5841        priceId,
5842        // NOTE: We disable orderId and lineItemId for reactivations until we can perform reactivations
5843        // on the same order as currently we create a new order when that happens
5844        ...type == globalThis.Checkout.CheckoutStates.UPGRADE_DOWNGRADE ? {
5845          orderId,
5846          lineItemId
5847        } : {}
5848      }
5849    });
5850  }
5851  static updateSelectedCardItem() {
5852    let selectedCartItemDetail;
5853    globalThis.Checkout.computed.checkoutCart.get().items.find(({ product_id, variant_id, price_id }) => {
5854      const cardDetails = __privateGet(this, _productCardDetails)[product_id]?.updatableOrders[0].updatableItems[0].cardDetails;
5855      if (!globalThis.Checkout.productsById[product_id].bump && __privateGet(this, _productCardDetails)[product_id]) {
5856        selectedCartItemDetail = {};
5857        selectedCartItemDetail.variantId = cardDetails?.variantId ?? variant_id;
5858        selectedCartItemDetail.priceId = cardDetails?.priceId ?? price_id;
5859        selectedCartItemDetail.productId = product_id;
5860        return true;
5861      }
5862    });
5863    if (!selectedCartItemDetail) {
5864      selectedCartItemDetail = {};
5865      const product = globalThis.Checkout.products.filter((p) => !p.bump)[0];
5866      const cardDetails = __privateGet(this, _productCardDetails)[product.id]?.updatableOrders[0].updatableItems[0].cardDetails;
5867      const variant = product.variants[0];
5868      const price = variant.prices[0];
5869      selectedCartItemDetail.variantId = cardDetails?.variantId ?? Number(variant.id);
5870      selectedCartItemDetail.priceId = cardDetails?.priceId ?? Number(price.id);
5871      selectedCartItemDetail.productId = product.id;
5872    }
5873    globalThis.globalResourceData.products?.forEach(({ id: productId }) => {
5874      const hasUpdatablePccState = !!__privateGet(this, _productCardDetails)[productId];
5875      if (hasUpdatablePccState) {
5876        const order = __privateGet(this, _productCardDetails)[productId].updatableOrders[0];
5877        const cartItem = order.updatableItems[0].cardDetails;
5878        const updatablePccState = __privateGet(this, _productCardDetails)[productId] ?? {};
5879        updatablePccState.selectedOrderIndex = 0;
5880        updatablePccState.selectedUpdatableCartItemIndex = 0;
5881        updatablePccState.cartItemOrderId = cartItem.orderId;
5882        updatablePccState.cartItemLineItemId = cartItem.lineItemId;
5883        updatablePccState.cartItemRenderType = updatablePccState.renderType = order.type;
5884        updatablePccState.variantId = cartItem.variantId;
5885        updatablePccState.priceId = cartItem.priceId;
5886        const isProductInCart = selectedCartItemDetail.productId == productId;
5887        if (isProductInCart) {
5888          updatablePccState.variantId = selectedCartItemDetail.variantId;
5889          updatablePccState.priceId = selectedCartItemDetail.priceId;
5890          updatablePccState.quantity = 1;
5891        }
5892        const compositeKeys = getCompositeKeysForProduct(String(productId));
5893        updateCardByProductIdState(productId, {
5894          ...updatablePccState,
5895          ...compositeKeys.length > 0 ? { quantity: 0 } : {}
5896        });
5897        for (const compositeKey of compositeKeys) {
5898          const variantId = compositeKey.split(":")[1];
5899          const matchingItem = order.updatableItems.find((item) =>
5899 String(item.cardDetails.variantId) == variantId);
5900          if (matchingItem) {
5901            updateCardByProductIdState(compositeKey, {
5902              updatableOrders: updatablePccState.updatableOrders,
5903              renderType: order.type,
5904              individualDirection: matchingItem.direction,
5905              selectedOrderIndex: 0,
5906              selectedUpdatableCartItemIndex: 0,
5907              cartItemRenderType: order.type,
5908              cartItemOrderId: matchingItem.cardDetails.orderId,
5909              cartItemLineItemId: matchingItem.cardDetails.lineItemId,
5910              variantId: matchingItem.cardDetails.variantId,
5911              priceId: matchingItem.cardDetails.priceId,
5912              quantity: isProductInCart && String(selectedCartItemDetail.variantId) == variantId ? 1 : 0
5913            });
5914          } else {
5915            const fullOrder = this.orderDetailsByOrderId[order.id];
5916            const isCurrentVariant = fullOrder?.line_items?.some(
5917              (li) => String(li.variant_id) == variantId && String(li.product_id) == String(productId)
5918            );
5919            if (isCurrentVariant) {
5920              updateCardByProductIdState(compositeKey, {
5921                updatableOrders: updatablePccState.updatableOrders,
5922                renderType: order.type,
5923                individualDirection: "current",
5924                selectedOrderIndex: -1,
5925                cartItemRenderType: void 0,
5926                cartItemOrderId: void 0,
5927                cartItemLineItemId: void 0
5928              });
5929            }
5930          }
5931        }
5932      } else {
5933        updateCardByProductIdState(productId, { selectType: "single" });
5934      }
5935    });
5936  }
5937};
5938_hasReactivatableItems = new WeakMap();
5939_hasUpgradeDowngradeItems = new WeakMap();
5940_productCardDetails = new WeakMap();
5941_productCardDetailsObj = new WeakMap();
5942__privateAdd(CheckoutExistingOrders, _hasReactivatableItems, false);
5943__privateAdd(CheckoutExistingOrders, _hasUpgradeDowngradeItems, false);
5944__privateAdd(CheckoutExistingOrders, _productCardDetails, {});
5945__privateAdd(CheckoutExistingOrders, _productCardDetailsObj, {});
5946__publicField(CheckoutExistingOrders, "orderDetailsByOrderId", {});
5947
5948// projects/lib/packages/yggdrasil-blueprints/__generated__/blueprints/checkout-order-details-v1.ts
5949init_runtime();
5950var CheckoutOrderDetailsV1 = class extends CF2Component {
5951  constructor(el, runtimeSel) {
5952    super(el, runtimeSel);
5953  }
5954  mount() {
5955    this.getCloseButton().addEventListener("click", (evt) => {
5956      evt.preventDefault();
5957      Checkout.store.selectedOrderDetailId.set(null);
5958    });
5959    this.getModal().onClose = () => {
5960      Checkout.store.selectedOrderDetailId.set(null);
5961    };
5962    Checkout.store.selectedOrderDetailId.listen((selectedOrderDetailId) => {
5963      if (selectedOrderDetailId) {
5964        this.showModal();
5965        this.getContent().order_details = CheckoutExistingOrders.orderDetailsByOrderId[selectedOrderDetailId];
5966        const orderDetails = this.getContent().order_details;
5967        this.formatOrderDetails(orderDetails);
5968        this.getContent().render();
5969      } else {
5970        this.hideModal();
5971      }
5972    });
5973  }
5974  addressToString(address) {
5975    let str = "";
5976    if (address.street_one) {
5977      str = address.street_one;
5978      if (address.street_two) {
5979        str += `, ${address.street_two}`;
5980      }
5981      if (address.city) {
5982        str += `. ${address.city}`;
5983      }
5984      if (address.region) {
5985        str += `, ${address.region}`;
5986      }
5987      if (address.postal_code) {
5988        str += ` ${address.postal_code}`;
5989      }
5990      if (address.country) {
5991        str += `, ${address.country}`;
5992      }
5993    } else {
5994      if (address.postal_code) {
5995        str += `${address.postal_code}, `;
5996      }
5997      if (address.country) {
5998        str += `${address.country}`;
5999      }
6000    }
6001    return str;
6002  }
6003  formatOrderDetails(orderDetails) {
6004    orderDetails.created_at = new Date(orderDetails.created_at_epoch * 1e3).toLocaleString(navigator.language);
6005    if (orderDetails.shipping_address) {
6006      orderDetails.shipping_address = this.addressToString(orderDetails.shipping_address);
6007    }
6008    if (orderDetails.billing_address) {
6009      orderDetails.billing_address = this.addressToString(orderDetails.billing_address);
6010    }
6011    if (orderDetails.line_items.length) {
6012      this.findAndAddProductsImage(orderDetails.line_items);
6013    }
6014  }
6015  getContent() {
6016    return this.getComponent("CheckoutOrderDetailsContent/V1");
6017  }
6018  getModal() {
6019    return this.getComponent("Modal/V1");
6020  }
6021  getCloseButton() {
6022    return this.getModal().element.querySelector(".elCheckoutModalFormClose");
6023  }
6024  showModal() {
6025    this.getModal().element.style.display = "flex";
6026  }
6027  hideModal() {
6028    this.getModal().element.style.display = "none";
6029  }
6030  findAndAddProductsImage(lineItems) {
6031    lineItems.forEach((lineItem) => {
6032      lineItem.image = Checkout.variantsById[lineItem.variant_id].image ?? Checkout.productsById[lineItem.product_id].image;
6033    });
6034  }
6035};
6036registerComponent("CheckoutOrderDetails/V1", CheckoutOrderDetailsV1);
6037window["CheckoutOrderDetailsV1"] = CheckoutOrderDetailsV1;
6038
6039export {
6040  CheckoutTosV1,
6041  CheckoutMultiStepV2,
6042  hasPhysicalProducts,
6043  setupOrderSummaries,
6044  scrollToFirstVisibleError,
6045  checkValidCustomFields,
6046  buildCustomFields,
6047  collectLeads,
6048  AVAILABLE_KLARNA_COUNTRIES,
6049  numberOfStepsInCheckout,
6050  updateCardByProductIdState,
6051  unselectAllProducts,
6052  initIndividualVariantState,
6053  buildProductSelectBatched,
6054  CheckoutShippingProfileSelectV1,
6055  CheckoutLoadingV1,
6056  CheckoutSubmitNotificationV1,
6057  renderedHref,
6058  backfillAddressesId,
6059  isSavedAddress,
6060  fieldsForCountry,
6061  addressToString,
6062  parseAddressByFields,
6063  normalizeServerCheckoutError,
6064  serverCheckoutErrorMessage,
6065  isActionableCheckoutError,
6066  CheckoutCriticalError,
6067  ERROR_CODES,
6068  displayAndLogCriticalError,
6069  resolveInitialPaymentType,
6070  PaypalStates,
6071  ErrorTypes,
6072  hasUpgradeDowngradeItems,
6073  getStripeMode,
6074  getCartEstimatedTotal,
6075  convertToStripeAddress,
6076  convertAddressFromStripe,
6077  convertAddressFromSession,
6078  calculateStripeLineItems,
6079  STRIPE_SKIP_SHIPPING_ID,
6080  calculateStripeChangeResolveDetails,
6081  parseCssVars,
6082  hasErrors,
6083  productErrors,
6084  shippingOptionErrors,
6085  tosErrors,
6086  addressErrors,
6087  contactErrors,
6088  encodeVirtualInstallmentId,
6089  decodeVirtualInstallmentId,
6090  create,
6091  buildComputed,
6092  initializeUtilities,
6093  CheckoutSubmit,
6094  CheckoutSubmitButtonV1,
6095  CheckoutConfigurationErrorV1,
6096  makeCurrentPageFetcher,
6097  CheckoutExistingOrders
6098};
6099//# sourceMappingURL=chunk-5JJNRIKL.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.