{"version":3,"file":"client.payment-terms_BsulUKG0.en.esm.js","sources":["../../src/__deprecated__/components/paymentTerms/utils/metadataValidation.ts","../../src/__deprecated__/components/paymentTerms/shopify-payment-terms.ts","../../src/__deprecated__/components/paymentTerms/constants.ts","../../src/__deprecated__/components/paymentTerms/FocusLock.ts","../../src/__deprecated__/components/paymentTerms/utils.ts","../../src/__deprecated__/components/paymentTerms/modal-contents.ts","../../src/__deprecated__/components/paymentTerms/utils/termsModal.ts","../../src/__deprecated__/components/paymentTerms/components/MonorailTrackerPaymentTerms.ts","../../src/__deprecated__/components/paymentTerms/components/shop-pay-banner.ts","../../src/__deprecated__/components/paymentTerms/sample-plans-modal-contents.ts","../../src/__deprecated__/components/paymentTerms/prequal-modal-contents.ts","../../src/__deprecated__/components/paymentTerms/components/prequalOverlay/utilities.ts","../../src/__deprecated__/components/paymentTerms/components/shop-pay-installments-banner.ts","../../src/__deprecated__/components/paymentTerms/components/prequalOverlay/constants.ts","../../src/__deprecated__/components/paymentTerms/components/prequalOverlay/installments-prequal-overlay-modal.ts","../../src/__deprecated__/components/paymentTerms/prequal-amount.ts","../../src/__deprecated__/components/paymentTerms/init.ts"],"sourcesContent":["import {\n ShopifyMetadata,\n InstallmentsBannerType,\n LegacyShopifyMetadata,\n} from '../../../types';\n\ntype OnWarning = (\n origin: InstallmentsBannerType,\n metadata: string,\n) => Promise;\n\nconst doExpectedFieldsExist = (obj: any, expectedFields: string[]) => {\n return expectedFields.every((field) => field in obj);\n};\n\n/**\n * @param {any} input object parsed from the `shopify-metadata` attribute.\n * @param {OnWarning} onWarning callback to be called when a warning is encountered.\n * @returns {boolean} whether the object validates.\n */\nexport function isLegacyShopifyMetadata(\n input: any,\n onWarning: OnWarning,\n): input is LegacyShopifyMetadata {\n if (input == null) {\n return false;\n }\n\n // If the incoming metadata does not match expected types, but it's not null,\n // it's likely using a hardcoded implementation that is not scalable with banner changes long term.\n if (input?.type === 'cart') {\n validateLegacyCartMetadata(input, onWarning);\n } else {\n validateLegacyProductMetadata(input, onWarning);\n }\n\n return doExpectedFieldsExist(input, [\n 'min_price',\n 'max_price',\n // We should validate this attribute once it's provided by the liquid filter. See shop-js/issues/167\n // 'number_of_payment_terms' in input,\n ]);\n}\n\n/**\n * @param {any} input object parsed from the `shopify-metadata` attribute.\n * @param {OnWarning} onWarning callback to be called when a warning is encountered.\n */\nfunction validateLegacyCartMetadata(input: any, onWarning: OnWarning) {\n const hasAllRequiredCartMetadata = doExpectedFieldsExist(input, [\n 'min_price',\n 'max_price',\n 'price',\n 'eligible',\n 'number_of_payment_terms',\n 'available_loan_types',\n ]);\n\n if (!hasAllRequiredCartMetadata) {\n onWarning(InstallmentsBannerType.Cart, JSON.stringify(input));\n }\n}\n\n/**\n * @param {any} input object parsed from the `shopify-metadata` attribute.\n * @param {OnWarning} onWarning callback to be called when a warning is encountered.\n */\nfunction validateLegacyProductMetadata(input: any, onWarning: OnWarning) {\n const hasAllRequiredProductMetadata = doExpectedFieldsExist(input, [\n 'variants',\n 'max_price',\n 'min_price',\n 'number_of_payment_terms',\n ]);\n\n // Should have at least one variant, and that variant should have all required metadata\n const hasValidVariant =\n input.variants?.length > 0\n ? doExpectedFieldsExist(input.variants[0], [\n 'id',\n 'price',\n 'eligible',\n 'available_loan_types',\n 'available',\n ])\n : false;\n\n if (!hasAllRequiredProductMetadata || !hasValidVariant) {\n onWarning(InstallmentsBannerType.Product, JSON.stringify(input));\n }\n}\n\n/**\n * @param {any} input object parsed from the `shopify-metadata` attribute.\n * @param {OnWarning} onWarning callback to be called when a warning is encountered.\n * @returns {boolean} whether the object validates.\n */\nexport function isShopifyMetadata(\n input: any,\n onWarning?: OnWarning,\n): input is ShopifyMetadata {\n if (input == null) {\n return false;\n }\n\n if (input.type === InstallmentsBannerType.Cart) {\n return validateCartMetadata(input, onWarning);\n } else if (input.type === InstallmentsBannerType.Checkout) {\n return validateCheckoutMetadata(input, onWarning);\n } else {\n return validateProductMetadata(input, onWarning);\n }\n}\n\n/**\n * @param {any} input object parsed from the `shopify-metadata` attribute.\n * @param {OnWarning} onWarning callback to be called when a warning is encountered.\n * @returns {boolean} whether the input has all expected metadata\n */\nfunction validateCartMetadata(input: any, onWarning?: OnWarning) {\n const hasAllRequiredCartMetadata = doExpectedFieldsExist(input, [\n 'min_price',\n 'max_price',\n 'price_per_term',\n 'eligible',\n 'number_of_payment_terms',\n 'full_price',\n 'financing_plans',\n ]);\n\n if (!hasAllRequiredCartMetadata) {\n onWarning?.(InstallmentsBannerType.Cart, JSON.stringify(input));\n return false;\n }\n\n return true;\n}\n\n/**\n * @param {any} input object parsed from the `shopify-metadata` attribute.\n * @param {OnWarning} onWarning callback to be called when a warning is encountered.\n * @returns {boolean} whether the input has all expected metadata\n */\nfunction validateCheckoutMetadata(input: any, onWarning?: OnWarning) {\n const hasAllRequiredCheckoutMetadata = doExpectedFieldsExist(input, [\n 'min_price',\n 'max_price',\n 'price_per_term',\n 'eligible',\n 'number_of_payment_terms',\n 'full_price',\n 'financing_plans',\n ]);\n\n if (!hasAllRequiredCheckoutMetadata) {\n onWarning?.(InstallmentsBannerType.Checkout, JSON.stringify(input));\n return false;\n }\n\n return true;\n}\n\n/**\n * @param {any} input object parsed from the `shopify-metadata` attribute.\n * @param {OnWarning} onWarning callback to be called when a warning is encountered.\n * @returns {boolean} whether the input has all expected metadata\n */\nfunction validateProductMetadata(input: any, onWarning?: OnWarning) {\n const hasAllRequiredProductMetadata = doExpectedFieldsExist(input, [\n 'variants',\n 'max_price',\n 'min_price',\n 'financing_plans',\n ]);\n\n // Should have at least one variant, and that variant should have all required metadata\n const hasValidVariant =\n input.variants?.length > 0\n ? doExpectedFieldsExist(input.variants[0], [\n 'id',\n 'price_per_term',\n 'eligible',\n 'full_price',\n 'available',\n ])\n : false;\n\n if (!hasAllRequiredProductMetadata || !hasValidVariant) {\n onWarning?.(InstallmentsBannerType.Product, JSON.stringify(input));\n return false;\n }\n\n return true;\n}\n","import {defineCustomElement} from '../../common/init';\nimport Bugsnag from '../../common/bugsnag';\n\nimport {isShopifyMetadata} from './utils/metadataValidation';\n\nexport default class ShopifyPaymentTerms extends HTMLElement {\n static get observedAttributes() {\n return ['variant-id', 'shopify-meta'];\n }\n\n private _didMount = false;\n private _currentBanner: HTMLElement = document.createElement('div');\n\n constructor() {\n super();\n\n this.attachShadow({mode: 'open'});\n }\n\n connectedCallback() {\n const newBanner = this._getNewBannerNode();\n\n if (!this.shadowRoot) {\n Bugsnag.notify(new Error('ShopifyPaymentTerms: shadowRoot is null.'));\n }\n this.shadowRoot?.appendChild(newBanner);\n this._currentBanner = newBanner;\n this._didMount = true;\n }\n\n attributeChangedCallback() {\n if (this._didMount) {\n const installmentsBanner = this._getNewBannerNode();\n this.shadowRoot?.replaceChild(installmentsBanner, this._currentBanner);\n this._currentBanner = installmentsBanner;\n }\n }\n\n disconnectedCallback() {\n if (this.shadowRoot?.contains(this._currentBanner)) {\n this.shadowRoot?.removeChild(this._currentBanner);\n }\n }\n\n private _getNewBannerNode() {\n const shopifyMeta = this.getAttribute('shopify-meta');\n const variantId = this.getAttribute('variant-id');\n const isShopifyMetadataValid = Boolean(\n shopifyMeta && isShopifyMetadata(JSON.parse(shopifyMeta)),\n );\n const installmentsBanner = document.createElement(\n isShopifyMetadataValid\n ? 'shop-pay-installments-banner'\n : 'shop-pay-banner',\n );\n if (variantId) {\n installmentsBanner.setAttribute('variant-id', variantId);\n }\n if (shopifyMeta) {\n installmentsBanner.setAttribute('shopify-meta', shopifyMeta);\n }\n\n return installmentsBanner;\n }\n}\n\n/**\n * Define the shopify-payment-terms custom element.\n */\nexport function defineElement() {\n defineCustomElement('shopify-payment-terms', ShopifyPaymentTerms);\n}\n","export const PAYMENT_TERMS_TEMPLATE = `\n \n

\n \n \n \n \n \n \n \n \n \n

\n`;\n\nexport const SHOP_PAY_LOGO = (backgroundColor: string) =>\n ``;\n\nexport const SPLIT_PAY_ELIGIBLE = (price: string, backgroundColor: string) => `\nPay in 4 interest-free installments of ${price} with \n`;\n\nexport const INTEREST_ONLY_ELIGIBLE = (backgroundColor: string) => `\nSplit your purchase into monthly installments with \n`;\n\nexport const DYNAMIC_INTEREST_ONLY_ELIGIBLE = (\n price: string,\n backgroundColor: string,\n) => `\nFrom ${price}/mo with \n`;\n\nexport const PAY_IN_4_OR_AS_LOW_AS_ELIGIBLE = (\n price: string,\n backgroundColor: string,\n) => `4 interest-free installments, or from ${price}/mo with \n`;\n\nexport const ZERO_INTEREST_ELIGIBLE = (\n price: string,\n backgroundColor: string,\n isFinancingTermApr0: boolean,\n) => `\nFrom ${price}/mo ${\n isFinancingTermApr0 ? 'at' : 'or'\n} 0% APR with \n`;\n\nexport const NON_ELIGIBLE_MIN = (minPrice: string, backgroundColor: string) => `\nPay in 4 interest-free installments for orders over ${minPrice} with \n`;\n\nexport const NON_ELIGIBLE_MONTHLY_PAYMENTS_MIN = (\n minPrice: string,\n backgroundColor: string,\n) => `\nSplit your purchase into monthly installments for orders over ${minPrice} with \n`;\n\nexport const NON_ELIGIBLE_MAX = (maxPrice: string, backgroundColor: string) => `\nSplit your purchase into installments for orders up to ${maxPrice} with \n`;\n\nconst CA_RESIDENTS_NOTICE =\n 'CA Residents: Loans by Affirm Loan Services, LLC are made or arranged pursuant to a California Finance Lender license.';\n\nconst RATES_FROM_APR =\n 'Rates from 0-36% APR. Payment options through Affirm are subject to an eligibility check, may not be available in all states, and are provided by these lending partners: affirm.com/lenders. Options depend on your purchase amount, and a down payment may be required.';\n\nexport const LEGAL_COPY = {\n INTEREST_AND_SPLIT_PAY: `The estimated payment amount excludes taxes and shipping. ${RATES_FROM_APR} ${CA_RESIDENTS_NOTICE}`,\n INTEREST_ONLY: `${RATES_FROM_APR} ${CA_RESIDENTS_NOTICE}`,\n SPLIT_PAY_ONLY: `The estimated payment amount excludes taxes and shipping. Payment options are offered by Affirm and are subject to an eligibility check and might not be available in all states. ${CA_RESIDENTS_NOTICE}`,\n INELIGIBLE: `Payment options are offered by Affirm and are subject to an eligibility check and might not be available in all states. ${CA_RESIDENTS_NOTICE}`,\n DYNAMIC_PDP: `The estimated payment amount excludes taxes and shipping. Rates range from 0-36% APR. Payment options through Shop Pay Installments are subject to an eligibility check and are provided by these lending partners: affirm.com/lenders. Options depend on your purchase amount, and a down payment may be required. More options may be available upon approval. State notices to consumers: affirm.com/licenses.`,\n};\n\nexport const MODAL_SUBTITLE = {\n INTEREST_AND_SPLIT_PAY: (splitPayLoanRepayment: string) =>\n `Choose your payment schedule at checkout – starting at 4 interest-free payments of ${splitPayLoanRepayment} every 2 weeks.`,\n INTEREST_ONLY: () =>\n `Choose your payment schedule at checkout to split your purchase into monthly installments.`,\n SPLIT_PAY_ONLY: (splitPayLoanRepayment: string) =>\n `Select installments at checkout to split your purchase into 4 interest-free payments of ${splitPayLoanRepayment} every 2 weeks.`,\n INELIGIBLE_MIN: (minPrice: string) =>\n `For orders over ${minPrice}, select installments at checkout to split your purchase into 4 interest-free payments.`,\n INELIGIBLE_MONTHLY_PAYMENTS_MIN: (minPrice: string) =>\n `For orders over ${minPrice}, select installments at checkout to split your purchase into monthly payments.`,\n INELIGIBLE_MAX: (maxPrice: string) =>\n `For orders up to ${maxPrice}, select installments at checkout to split your purchase into multiple payments.`,\n DYNAMIC_PDP: (numberOfPlans: number, priceWithoutInterest: string) =>\n `Sample ${\n numberOfPlans === 1 ? 'plan' : 'plans'\n } for ${priceWithoutInterest} purchase`,\n};\n\nexport const AFFIRM = 'Affirm';\n\nexport const SHARED_MODAL_STYLES = `\n#shopify-payment-terms-modal .visually-hidden {\n border: 0;\n clip: rect(0, 0, 0, 0);\n height: 1px;\n margin: -1px;\n overflow: hidden;\n padding: 0;\n position: absolute;\n white-space: nowrap;\n width: 1px;\n}\n\n#shopify-payment-terms-modal .modal-wrapper {\n max-width: 432px;\n}\n\n#shopify-payment-terms-modal p {\n font-size: 18px;\n line-height: 150%;\n}\n\n#shopify-payment-terms-modal section {\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica,\n Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';\n}\n\n#shopify-payment-terms-modal .price {\n color: rgb(90, 49, 244);\n font-weight: 600;\n display: inline-flex;\n flex-direction: column;\n line-height: 1;\n align-items: center;\n}\n\n#shopify-payment-terms-modal .price__icon {\n width: 43px;\n height: 10px;\n}\n\n#shopify-payment-terms-modal .list {\n list-style: none;\n padding: 0;\n margin: 0;\n}\n\n#shopify-payment-terms-modal .list-item__subheading {\n font-size: 14px;\n line-height: 140%;\n color: rgba(0, 0, 0, 0.7);\n}\n\n#shopify-payment-terms-modal .btn__close--icon {\n display: inline-flex;\n flex-shrink: 0;\n padding: 16px;\n border-radius: 6px;\n}\n\n#shopify-payment-terms-modal .btn__close--icon:hover,\n#shopify-payment-terms-modal .btn__close--icon:active,\n#shopify-payment-terms-modal .btn__close--icon:focus {\n background-color: rgb(244, 241, 254);\n color: rgb(63, 34, 171);\n}\n\n#shopify-payment-terms-modal .help_text {\n margin-bottom: 19px;\n margin-top: 16px;\n font-size: 11px;\n line-height: 14px;\n color: rgba(0, 0, 0, 0.6);\n}\n\n#shopify-payment-terms-modal .help_text small {\n color: inherit;\n letter-spacing: 0.04rem;\n font-weight: 300;\n font-size: 11px;\n}\n\n#shopify-payment-terms-modal .help_text__link {\n color: rgba(0, 0, 0, 0.6);\n text-decoration: underline;\n}\n\n#shopify-payment-terms-modal .help_text__link:hover,\n#shopify-payment-terms-modal .help_text__link:active,\n#shopify-payment-terms-modal .help_text__link:focus {\n color: rgb(63, 34, 171);\n}\n\n#shopify-payment-terms-modal .tagline__bold {\n font-weight: 700;\n}\n\n#shopify-payment-terms-modal footer, #shopify-payment-terms-cover footer {\n text-align: center;\n}\n\n#shopify-payment-terms-modal .shop-pay-logo-wrapper,\n#shopify-payment-terms-cover .shop-pay-logo-wrapper {\n margin-bottom: 12px;\n}\n\n#shopify-payment-terms-modal .close__icon {\n width: 13px;\n height: 13px;\n}\n\n.affirm-logo,\n#shopify-payment-terms-modal .affirm-logo,\n#shopify-payment-terms-cover .affirm-logo {\n width: 39px;\n height: 21px;\n padding-left: 4px;\n box-sizing: content-box;\n}\n\n.affirm-logo-inline,\n#shopify-payment-terms-modal .affirm-logo-inline,\n#shopify-payment-terms-cover .affirm-logo-inline {\n margin-bottom: -6px;\n padding-left: 0px;\n}\n\n.affirm-text,\n#shopify-payment-terms-modal .affirm-text,\n#shopify-payment-terms-cover .affirm-text {\n display: flex;\n font-size: 12px;\n font-weight: 300;\n line-height: 150%;\n color: rgba(0, 0, 0, 0.6);\n justify-content: center;\n align-items: center;\n}\n\n.affirm-text small,\n#shopify-payment-terms-modal .affirm-text small,\n#shopify-payment-terms-cover .affirm-text small {\n font-size: 11px;\n letter-spacing: 0.04rem;\n line-height: 14px;\n}\n`;\n\nexport const FAILED_TO_LOAD_HTML_ERROR_MESSAGE =\n \"Failed to construct 'HTMLElement': This instance is already constructed\";\n\nexport const BANNER_UNSUPPORTED_FOR_THEME_MESSAGE =\n '[Shop Pay Installments] Cart price updates may not be handled automatically for this theme. To ensure the price shown in the Shop Pay Installments banner is updated correctly, follow the instructions found here: https://shopify.dev/themes/pricing-payments/installments#updating-the-banner-with-cart-total-changes';\n\nexport const TRY_PREQUAL_AMOUNT = 50;\nexport const PREQUAL_ALWAYS_ENABLED_AMOUNT = 150;\n","type FocusableElement = HTMLButtonElement | HTMLAnchorElement;\n\nexport default class FocusLock {\n private _htmlElement: HTMLElement;\n private _firstFocusable: FocusableElement | undefined;\n private _lastFocusable: FocusableElement | undefined;\n private _phantomElement: HTMLButtonElement | undefined;\n\n constructor(htmlElement: HTMLElement) {\n this._htmlElement = htmlElement;\n }\n\n lock() {\n const focusable = this._htmlElement.querySelectorAll(\n 'a[href], button:not([disabled]):not([tabindex=\"-1\"]',\n ) as NodeListOf;\n\n this._firstFocusable = focusable[0];\n this._lastFocusable = focusable[focusable.length - 1];\n\n this._phantomElement = this._createPhantomElement();\n this._htmlElement.appendChild(this._phantomElement);\n\n // Each Web Component has a shadow root that can only pick up events triggered within\n // the shadow root itself. This is fine when we want to detect whether there is a focus\n // on an element within the modal. When our focus leave the modal our shadow root has\n // no way of picking up the event, so we need to rely on the document itself. So:\n //\n // 1. Shadow Root listen for changes in focus for elements within itself\n // 2. Document listen for changes in focus for elements outside of the shadow root\n this._htmlElement.addEventListener(\n 'focus',\n this._shadowRootFocusHandler,\n true,\n );\n document.addEventListener('focus', this._documentFocusHandler, true);\n }\n\n release(nodeToFocus = {}) {\n this._htmlElement.removeEventListener(\n 'focus',\n this._shadowRootFocusHandler,\n true,\n );\n document.removeEventListener('focus', this._documentFocusHandler, true);\n\n this._removePhantomElement();\n\n if (nodeToFocus instanceof HTMLElement) {\n nodeToFocus.focus();\n }\n }\n\n private _createPhantomElement() {\n const phantomElement = document.createElement('button');\n phantomElement.setAttribute('aria-hidden', 'true');\n phantomElement.className = 'visually-hidden';\n\n return phantomElement;\n }\n\n private _removePhantomElement() {\n if (this._phantomElement) {\n this._htmlElement.removeChild(this._phantomElement);\n }\n }\n\n /**\n * Returns `true` if the event came from an element with aria-modal=\"true\". Prevents this focus lock function from\n * fighting with other potential focus lock functions on 3P modals (i.e. the Privy newsletter popup).\n * @param {FocusEvent} evt received\n * @returns {boolean} whether the focus event came from a modal type.\n * @private\n */\n private _isEventFromModal(evt: FocusEvent) {\n const modalTarget = evt.composedPath().find((element) => {\n return element instanceof Element && element.ariaModal;\n });\n return Boolean(modalTarget);\n }\n\n private _getShadowRootHost() {\n const rootNode = this._htmlElement.getRootNode();\n\n if (rootNode instanceof ShadowRoot) {\n return rootNode.host;\n } else {\n return null;\n }\n }\n\n private _documentFocusHandler = (evt: FocusEvent) => {\n if (\n this._lastFocusable &&\n evt.target !== this._getShadowRootHost() &&\n !this._isEventFromModal(evt)\n ) {\n evt.preventDefault();\n evt.stopPropagation();\n this._lastFocusable.focus();\n }\n };\n\n private _shadowRootFocusHandler = (evt: Event) => {\n if (this._firstFocusable && evt.target === this._phantomElement) {\n this._firstFocusable.focus();\n }\n };\n}\n","import {I18n} from '__deprecated__/common/translator/i18n';\nimport {FontFaceDto} from '__deprecated__/types/paymentTerms';\n\nimport {Cart} from '../payButton/types';\nimport {\n AvailableLoanType,\n ProductFormElement,\n MinIneligibleMessageType,\n VariantModalDetails,\n InstallmentPlan,\n SamplePlan,\n ModalText,\n} from '../../types';\n\nimport {\n BANNER_UNSUPPORTED_FOR_THEME_MESSAGE,\n SHARED_MODAL_STYLES,\n} from './constants';\n\ninterface VariantInputElement extends HTMLInputElement {}\n\nexport interface InstallmentsModal {\n rootContainer: Node;\n focusLockTarget: HTMLElement;\n}\n\n/**\n * @returns {number} The variant ID, if we could extract it from the URL.\n */\nexport function extractVariantIdFromURL(): number | undefined {\n const params = new URL(document.location.href).searchParams;\n const variantParam = params.get('variant');\n return variantParam ? Number(variantParam) : undefined;\n}\n\n/**\n * @param {number} price of the item.\n * @returns {string} formatted price according to en-US locale.\n */\nexport function formatPrice(price: number) {\n const options = {\n style: 'currency',\n currency: 'USD',\n minimumFractionDigits: 2,\n };\n\n return new Intl.NumberFormat('en-US', options).format(price);\n}\n\n/**\n * @returns {string?} element selector for the subtotal of a given theme, or null.\n */\nexport function cartSubtotalSelectorsForTheme() {\n switch ((window as any).Shopify?.theme?.name?.toLowerCase()) {\n case 'boundless':\n return '.cart__subtotal';\n case 'brooklyn':\n return '.cart__subtotal';\n case 'dawn':\n return '.totals__subtotal-value, .sections.cart.new_subtotal';\n case 'debut':\n return '.cart-subtotal__price';\n case 'express':\n return '.cart__subtotal, .cart-drawer__subtotal-value';\n case 'minimal':\n return '.h5.cart__subtotal-price';\n case 'narrative':\n return '.cart-subtotal__price, .cart-drawer__subtotal-number';\n case 'simple':\n return '.cart__subtotal.h3';\n case 'supply':\n return '.h1.cart-subtotal--price';\n case 'venture':\n return '.CartSubtotal';\n }\n return null;\n}\n\n/**\n * Prints a warning if banner is not supported for the current theme.\n */\nexport function confirmCartSubtotalAttribute() {\n const elementWithCartSubtotalAttribute = document.querySelector(\n '[data-cart-subtotal]',\n );\n\n if (!elementWithCartSubtotalAttribute) {\n // eslint-disable-next-line no-console\n console.warn(BANNER_UNSUPPORTED_FOR_THEME_MESSAGE);\n }\n}\n\n/**\n * @param {ShadowRoot?} shadowRoot Shadow DOM of the current element.\n * @returns {string} hex string for the background color.\n */\nexport function inferBackgroundColor(shadowRoot: ShadowRoot | null) {\n const whiteBackgroundColor = '#FFF';\n\n if (!shadowRoot) {\n return whiteBackgroundColor;\n }\n\n const paymentTermsSectionColor =\n shadowRoot.host.parentElement &&\n getComputedStyle(shadowRoot.host.parentElement)\n .getPropertyValue('--payment-terms-background-color')\n ?.trim();\n\n const paymentTermsBodyColor = getComputedStyle(document.documentElement)\n .getPropertyValue('--payment-terms-background-color')\n ?.trim();\n\n // Ideally we would like to have a single CSS variable to represent the background color,\n // but we have partners and merchants already using the --color-body variable on their\n // document root so we shouldn't remove it.\n const shopBackgroundColor = getComputedStyle(document.documentElement)\n .getPropertyValue('--color-body')\n ?.trim();\n\n // The current priority order is:\n // 1. Check the parent element of our banner for --payment-terms-background-color\n // 2. Check the document root for --payment-terms-background-color\n // 3. Check the document root for --color-body\n const backgroundColor =\n paymentTermsSectionColor || paymentTermsBodyColor || shopBackgroundColor;\n\n // Assume our background is white if we couldn't infer a background color or CSS\n // doesn't support this background color.\n if (!backgroundColor || !CSS.supports('color', backgroundColor)) {\n return whiteBackgroundColor;\n }\n\n return backgroundColor;\n}\n\n/**\n * @param {string} price A price with currency symbol.\n * @returns {number} The same price returned as a number.\n */\nexport function convertPriceToNumber(price: string) {\n return parseFloat(price.replace(/[^0-9.]/g, ''));\n}\n\n/**\n * @param {HTMLFormElement | null} productForm The overarching product form element found on the page\n * @returns {number} The product quantity selected by the user\n */\nexport function getProductQuantityFromDOM(\n productForm?: HTMLFormElement | null,\n): number {\n // If no productForm exists at all, default to 1\n if (!productForm) {\n return 1;\n }\n // Handles most existing stores\n const elements = productForm.elements as ProductFormElement;\n const quantityElement = elements.quantity;\n if (quantityElement) {\n return Number(quantityElement.value);\n }\n\n // For Dawn and other free themes, installments form and product form are separate\n // Need to getAttribute('id'), as there is a hidden input with name=\"id\"\n const productFormId = productForm.getAttribute('id');\n const sectionId = productFormId?.replace('product-form-installment-', '');\n const quantityElementById = document.getElementById(`Quantity-${sectionId}`);\n\n if (quantityElementById) {\n return Number((quantityElementById as HTMLInputElement).value);\n }\n\n // If not able to find quantityInput, default to 1\n return 1;\n}\n\n/**\n * Try to extract the new variant ID from the form or the page URL.\n * @param {HTMLFormElement} productForm The overarching product form element found on the page\n * @returns {number} The product variant ID selected by the user\n */\nexport function getNewProductVariantId(\n productForm: HTMLFormElement,\n): number | undefined {\n const variantIdElement = (productForm.querySelector('select[name^=\"id\"]') ||\n productForm.querySelector('[name^=\"id\"]')) as VariantInputElement | null;\n\n if (variantIdElement) {\n return Number(variantIdElement.value);\n } else {\n return extractVariantIdFromURL();\n }\n}\n\n/**\n * @param {AvailableLoanType} loanTypes the available loan types\n * @returns {MinIneligibleMessageType} the ineligible message type when the minimum price is not met\n */\nexport function getMinIneligibleMessageType(\n loanTypes?: AvailableLoanType[],\n): MinIneligibleMessageType {\n if (!loanTypes) {\n return MinIneligibleMessageType.SplitPay;\n }\n\n if (\n (loanTypes.includes(AvailableLoanType.Interest) &&\n !loanTypes.includes(AvailableLoanType.SplitPay)) ||\n loanTypes.includes(AvailableLoanType.ZeroPercent)\n ) {\n return MinIneligibleMessageType.Monthly;\n }\n\n return MinIneligibleMessageType.SplitPay;\n}\n\n/**\n *\n * @param {I18n} i18n instance of the i18n class.\n * @returns {string} partnership disclaimer HTML with translated copy\n */\nexport function getPartnershipDisclaimer(i18n: I18n): string {\n const affirmLogo =\n '';\n\n const partnership = i18n.isEnglish()\n ? i18n.translate('modal.partnership', {\n affirmLogo,\n })\n : i18n.translate('modal.partnership_disclaimer', {\n affirmLogo,\n });\n\n return partnership;\n}\n\n/**\n * @param {I18n} i18n instance of the i18n class.\n * @param {number} numberOfPlans number of plans to show in the modal\n * @param {string} priceWithoutInterest Total price of the cart or product, without interest.\n * @returns {ModalText} contains two keys, one with legal copy and one with a subtitle for the modal contents\n */\nexport function getDynamicPDPText(\n i18n: I18n,\n numberOfPlans: number,\n priceWithoutInterest: string,\n): ModalText {\n const subTitle = i18n.translate('modal.subtitle.dynamic_pdp', {\n count: numberOfPlans,\n priceWithoutInterest,\n });\n const legalCopy = i18n.translate('modal.legal.dynamic_pdp');\n\n return {\n subTitle,\n legalCopy,\n };\n}\n\n/**\n * @param {InstallmentPlan[]} installmentPlans array of installment plans to be displayed as a list in the modal.\n * @param {string} priceWithoutInterest Total price of the cart or product, without interest.\n * @returns {SamplePlan[]} plans formatted to include data relevant per term that needs to be displayed.\n */\nexport function getFormattedSamplePlans(\n installmentPlans: InstallmentPlan[],\n priceWithoutInterest: string,\n): SamplePlan[] {\n return installmentPlans.map(\n ({pricePerTerm, apr, numberOfPaymentTerms, loanType}) => {\n const totalPriceWithInterestNumber =\n convertPriceToNumber(pricePerTerm) * numberOfPaymentTerms;\n const priceWithoutInterestNumber =\n convertPriceToNumber(priceWithoutInterest);\n\n // Otherwise rounding being done throughout flow results in very small +ve/-ve interest values when apr is 0\n const interest = formatPrice(\n apr === 0\n ? 0\n : totalPriceWithInterestNumber - priceWithoutInterestNumber,\n );\n const totalPriceWithInterest = formatPrice(\n apr === 0 ? priceWithoutInterestNumber : totalPriceWithInterestNumber,\n );\n\n return {\n pricePerTerm,\n apr,\n numberOfPaymentTerms,\n interest,\n totalPriceWithInterest,\n loanType,\n };\n },\n );\n}\n\n/**\n * @param {I18n} i18n instance of the i18n class.\n * @param {string} subTitle shown after the header in the modal.\n * @param {string} legalCopy shown at the bottom of the modal.\n * @param {SamplePlan[]} samplePlans array of plans formatted to include data relevant per\n * term that needs to be displayed.\n * @returns {string} full HTML content.\n */\nexport function getDynamicPDPTemplateContents(\n i18n: I18n,\n subTitle: string,\n legalCopy: string,\n samplePlans: SamplePlan[],\n): string {\n const title = i18n.translate('modal.title');\n\n const eligibilityLabel = i18n.translate(\n 'modal.sample_plan_contents.check_eligibility',\n );\n const interestLabel = i18n.translate('modal.sample_plan_contents.interest');\n const totalLabel = i18n.translate('modal.sample_plan_contents.total');\n const processingLabel = i18n.translate(\n 'modal.sample_plan_contents.processing',\n );\n const processingTimeLabel = i18n.translate(\n 'modal.sample_plan_contents.processing_time',\n );\n\n const partnership = getPartnershipDisclaimer(i18n);\n const newWindowLabel = i18n.translate('modal.new_window');\n const closeLabel = i18n.translate('modal.close');\n\n return `\n \n
\n
\n
\n

${processingLabel}

\n

${processingTimeLabel}

\n
\n
\n
\n ${logoElements(partnership)}\n ${logoSvgs()}\n
\n
\n
\n
\n \n
\n
\n
\n

${title}

\n \n
\n
\n \n

${subTitle}

\n
    \n ${samplePlans\n .map(\n ({\n pricePerTerm,\n apr,\n numberOfPaymentTerms,\n interest,\n totalPriceWithInterest,\n loanType,\n }) => {\n // const aprLabel = i18n.translate('modal.sample_plan_contents.apr');\n\n const aprLabel = i18n.translate(\n 'modal.sample_plan_contents.apr',\n {\n aprAmount: apr,\n },\n );\n const paymentFrequency =\n loanType === AvailableLoanType.SplitPay\n ? i18n.translate(\n 'modal.sample_plan_contents.split_pay_frequency',\n {pricePerTerm},\n )\n : i18n.translate(\n 'modal.sample_plan_contents.other_frequency',\n {pricePerTerm},\n );\n\n const numberOfTerms =\n loanType === AvailableLoanType.SplitPay\n ? i18n.translate(\n 'modal.sample_plan_contents.split_pay_number_of_terms',\n {numberOfTerms: numberOfPaymentTerms * 2},\n )\n : i18n.translate(\n 'modal.sample_plan_contents.other_number_of_terms',\n {numberOfTerms: numberOfPaymentTerms},\n );\n return `\n
  • \n
    \n \n ${paymentFrequency}\n ${numberOfTerms}\n \n
    \n
    \n
    \n ${interestLabel} (${apr}% ${aprLabel})\n ${interest}\n
    \n
    \n ${totalLabel}\n ${totalPriceWithInterest}\n
    \n
    \n
  • \n `;\n },\n )\n .join('')}\n
\n
\n

${eligibilityLabel}

\n

\n \n ${legalCopy}\n \n

\n
\n ${logoElements(partnership)}\n
\n ${logoSvgs()}\n
\n `;\n}\n\n/**\n * @param {string} storeUrl The URL of the store\n * @param {string} modalToken A token generated by the modal to uniquely identify the modal and actions taken by the user.\n * @param {string} buttonText The text to display on the button\n * @param {string} variantInfo Variant information in the shape of `variantId:quantity`, is undefined when opened on the cart page\n * @param {Cart} cart Details related to the cart that the modal is opened from (undefined on product page)\n * @returns {string} The navigation buttons and associated styling formatted as a string\n */\nexport function getNavigationButtons(\n storeUrl: string,\n modalToken: string,\n buttonText: string,\n variantInfo?: VariantModalDetails,\n cart?: Cart,\n): string {\n const variantsAttribute =\n variantInfo === undefined\n ? ''\n : `variants=\"${variantInfo.idQuantityMapping}\" ${\n variantInfo.available === false ? 'disabled' : ''\n }`;\n\n const cartAttribute =\n cart === undefined\n ? ''\n : `cart=${encodeURIComponent(\n JSON.stringify({\n currency: cart.currency,\n items: cart.items,\n token: cart.token,\n }),\n )}`;\n\n return `\n \n `;\n}\n\n/**\n * @param {string} partnership Affirm disclaimer HTML\n * @returns {string} HTML to display the Shop Pay logo followed by the Affirm logo\n */\nexport function logoElements(partnership: string): string {\n return `\n
\n \n
\n
\n \n ${partnership}\n \n
`;\n}\n/**\n * @returns {string} SVG elements to display Shop Pay and Affirm logo\n */\nexport function logoSvgs(): string {\n return `\n \n \n \n \n \n \n \n \n \n \n \n Affirm\n \n \n \n \n \n \n \n \n \n`;\n}\n\n/**\n *\n * @param {string} storeUrl The URL of the store\n * @param {string} modalToken A token generated by the modal to uniquely identify the modal and actions taken by the user.\n * @param {string} variantInfo Variant information in the shape of `variantId:quantity`, is undefined when opened on the cart page\n * @param {Cart} cart Details related to the cart that the modal is opened from (undefined on product page)\n * @returns {string} HTML to display a Shop Pay Button with the text Continue to Checkout\n */\nexport function getContinueToCheckoutButtonHtml(\n storeUrl: string,\n modalToken: string,\n variantInfo?: VariantModalDetails,\n cart?: Cart,\n): string {\n const variantsAttribute =\n variantInfo === undefined\n ? ''\n : `variants=\"${variantInfo.idQuantityMapping}\" ${\n variantInfo.available === false ? 'disabled' : ''\n }`;\n\n const cartAttribute =\n cart === undefined\n ? ''\n : `cart=${encodeURIComponent(\n JSON.stringify({\n currency: cart.currency,\n items: cart.items,\n token: cart.token,\n }),\n )}`;\n\n return `\n \n`;\n}\n\n/**\n * Extracts a fontFace declaration object for the specified fontFamily\n * @param {string} fontFamily string\n * @returns {FontFaceDto[] | null} FontFaceDescriptors object\n */\nexport function extractFontFaceDeclarationForFontFamily(fontFamily: string) {\n if (!fontFamily || fontFamily.trim() === '') {\n return [];\n }\n\n const isFontFaceRule = (rule: CSSRule) => {\n // in Jest there is no CSSFontFaceRule class, so we should rely on another way to check the type\n return rule.constructor.name === 'CSSFontFaceRule';\n };\n\n try {\n const fontFaceList = [...document.styleSheets]\n /**\n * Some stylesheets are not accessible due to CORS policy, so probing each for availability\n */\n .filter((stylesheet) => {\n try {\n return Boolean(stylesheet.cssRules);\n } catch {\n return false;\n }\n })\n /**\n * We are looking only into font-face at-rule\n */\n .flatMap(\n (stylesheet) =>\n [...stylesheet.cssRules].filter(isFontFaceRule) as CSSFontFaceRule[],\n )\n /**\n * Looking for specific font-face only\n */\n .filter((font) =>\n fontFamily.includes(font.style.getPropertyValue('font-family')),\n )\n /**\n * Reducing CSSFontFaceRule to correspond to the FontFaceDescriptors\n */\n .map((font: CSSFontFaceRule) => {\n const obj: Record = {};\n for (let i = font.style.length; i--; ) {\n const key = font.style[i];\n obj[key] = font.style.getPropertyValue(key);\n }\n\n // normalize URL\n const src = font.style.getPropertyValue('src');\n if (src) {\n obj.src = src.replace(\n /url\\(([\"']?)([^\"')]+)\\1\\)/gm,\n (_match: string, _quote: string, url: string) => {\n if (url.match(/^(https?:)?\\/\\//)) {\n return _match;\n } else {\n const baseURL = font.parentStyleSheet?.href ?? location.href;\n const parsedURL = new URL(url, baseURL);\n\n return `url(\"${parsedURL.toString()}\")`;\n }\n },\n );\n }\n\n return obj;\n });\n\n /**\n * Builds FontFaceDescriptors object from the CSSFontFaceRule object\n * @param fontFace\n * @returns {FontFaceDescriptors} - FontFace Descriptors\n */\n const buildFontFaceDescriptor = (fontFace: Record) => {\n if (!fontFace) {\n return {};\n }\n\n const fontFaceRuleDeclarationMap = new Map<\n string,\n keyof FontFaceDescriptors\n >([\n ['font-weight', 'weight'],\n ['font-display', 'display'],\n ['font-style', 'style'],\n ['font-stretch', 'stretch'],\n ['ascent-override', 'ascentOverride'],\n ['descent-override', 'descentOverride'],\n ['font-feature-settings', 'featureSettings'],\n ['line-gap-override', 'lineGapOverride'],\n ['unicode-range', 'unicodeRange'],\n ]);\n\n const fontFaceDescriptors = {} as Record;\n fontFaceRuleDeclarationMap.forEach((value, key) => {\n if (fontFace[key]) {\n fontFaceDescriptors[value] = fontFace[key];\n }\n });\n\n return fontFaceDescriptors as FontFaceDescriptors;\n };\n\n return (fontFaceList ?? []).map(\n (fontFace) =>\n ({\n src: fontFace.src,\n fontFamily: fontFace['font-family'].replace(/[\"']/g, ''),\n fontFaceDescriptors: buildFontFaceDescriptor(fontFace),\n }) as FontFaceDto,\n );\n } catch (error) {\n // inform error\n return [];\n }\n}\n","import {I18n} from '__deprecated__/common/translator/i18n';\nimport Bugsnag from '__deprecated__/common/bugsnag';\n\nimport {\n AvailableLoanType,\n MinIneligibleMessageType,\n ModalText,\n ModalType,\n ModalUserAction,\n PriceRange,\n} from '../../types';\n\nimport {AFFIRM, SHARED_MODAL_STYLES} from './constants';\nimport {\n InstallmentsModal,\n convertPriceToNumber,\n getPartnershipDisclaimer,\n} from './utils';\nimport {MonorailTrackerPaymentTerms} from './components/MonorailTrackerPaymentTerms';\n\nexport class ShopifyInstallmentsModal\n extends HTMLElement\n implements InstallmentsModal\n{\n private _i18n: I18n | null = null;\n private _closeButtons?: NodeListOf;\n private _loanTypes: AvailableLoanType[];\n private _eligible: boolean;\n private _modalToken: string;\n private _monorailTracker: MonorailTrackerPaymentTerms;\n private _trackContinueToCheckout = true;\n private _pricePerTerm: string;\n private _priceRange: PriceRange;\n private _priceWithoutInterest?: string;\n private _minIneligibleMessageType?: MinIneligibleMessageType;\n private _initialized = false;\n private _numberOfPaymentTerms?: number;\n\n constructor(\n pricePerTerm: string,\n eligible: boolean,\n priceRange: PriceRange,\n loanTypes: AvailableLoanType[],\n modalToken: string,\n monorailTracker: MonorailTrackerPaymentTerms,\n priceWithoutInterest?: string,\n minIneligibleMessageType?: MinIneligibleMessageType,\n numberOfPaymentTerms?: number,\n ) {\n super();\n\n this._loanTypes = loanTypes;\n this._eligible = eligible;\n this._modalToken = modalToken;\n this._monorailTracker = monorailTracker;\n this._pricePerTerm = pricePerTerm;\n this._priceRange = priceRange;\n this._priceWithoutInterest = priceWithoutInterest;\n this._minIneligibleMessageType = minIneligibleMessageType;\n this._numberOfPaymentTerms = numberOfPaymentTerms;\n\n this.attachShadow({\n mode: 'open',\n delegatesFocus: true,\n });\n }\n\n get focusLockTarget() {\n return this.rootContainer.querySelector(\n '#shopify-payment-terms-modal',\n )! as HTMLElement;\n }\n\n get rootContainer() {\n return this.shadowRoot!;\n }\n\n handleClose = () => {\n this._monorailTracker.trackModalAction(\n this._modalToken,\n ModalUserAction.Close,\n );\n const event = new Event('shopify_modal_close');\n this.dispatchEvent(event);\n };\n\n handleEscKey = (evt: KeyboardEvent) => {\n if (evt.key === 'Escape' || evt.key === 'Esc') {\n this.handleClose();\n }\n };\n\n handleContinueToCheckout = () => {\n if (!this._trackContinueToCheckout) return;\n\n this._monorailTracker.trackModalAction(\n this._modalToken,\n ModalUserAction.ContinueToCheckout,\n );\n };\n\n async connectedCallback() {\n if (this._initialized) return;\n await this._initTranslations();\n await this._initContent();\n\n this._closeButtons = this.rootContainer.querySelectorAll('.btn__close');\n if (!this._closeButtons || this._closeButtons.length === 0) return;\n\n this._closeButtons.forEach((btn) =>\n btn.addEventListener('click', this.handleClose),\n );\n // Autofocus on the first element inside modal\n (this._closeButtons[0] as HTMLButtonElement).focus();\n\n window.addEventListener('keydown', this.handleEscKey);\n this._initialized = true;\n }\n\n disconnectedCallback() {\n if (!this._closeButtons) return;\n\n this._closeButtons.forEach((btn) =>\n btn.removeEventListener('click', this.handleClose),\n );\n\n window.removeEventListener('keydown', this.handleEscKey);\n }\n\n get price(): string {\n return this.getAttribute('price') || '';\n }\n\n set price(value: string) {\n this.setAttribute('price', value);\n }\n\n getModalToken(): string {\n return this._modalToken;\n }\n\n getModalType() {\n if (!this._loanTypes?.length || !this._eligible) {\n return ModalType.Ineligible;\n }\n\n if (\n this._loanTypes.includes(AvailableLoanType.Interest) &&\n this._loanTypes.includes(AvailableLoanType.SplitPay)\n ) {\n return ModalType.Adaptive;\n }\n\n if (this._loanTypes.includes(AvailableLoanType.SplitPay)) {\n return ModalType.SplitPay;\n }\n\n return ModalType.InterestOnly;\n }\n\n /**\n * @param {AvailableLoanType[]} loanTypes examine loan types to understand what list items should be shown\n * @returns {[string, string]} contains two list items\n */\n determineListItemsByLoanTypes(loanTypes: AvailableLoanType[]) {\n if (!this._i18n) return ['', ''];\n\n if (loanTypes && loanTypes.includes(AvailableLoanType.Interest)) {\n return [\n this._i18n.translate('modal.split_pay_contents.interest_fees'),\n this._i18n.translate('modal.split_pay_contents.interest_credit'),\n ];\n }\n\n return [\n this._i18n.translate('modal.split_pay_contents.no_interest_fees'),\n this._i18n.translate('modal.split_pay_contents.no_interest_credit'),\n ];\n }\n\n /**\n * @param {AvailableLoanType[]} loanTypes examine loan types to understand what content should be shown\n * @param {string} splitPayLoanRepayment price of a single repayment for split pay loans\n * @param {PriceRange} priceRange price range of the cart or product with min and max prices\n * @param {boolean} eligible whether the current item is eligible for installments\n * @param {minIneligibleMessageType} minIneligibleMessageType the type of message when the value is below the minimum price for installments\n * @param {string} price price of the cart or product\n * @returns {ModalText} contains two keys, one with legal copy and one with a subtitle for the modal contents\n */\n determineTextByLoanTypes(\n loanTypes: AvailableLoanType[],\n splitPayLoanRepayment: string,\n priceRange: PriceRange,\n eligible: boolean,\n minIneligibleMessageType?: MinIneligibleMessageType,\n price?: string,\n ): ModalText {\n if (!this._i18n) return {subTitle: '', legalCopy: ''};\n\n if (!loanTypes || !eligible) {\n return this.getIneligibleMessage(\n priceRange,\n price,\n minIneligibleMessageType,\n );\n }\n if (\n loanTypes.includes(AvailableLoanType.Interest) &&\n loanTypes.includes(AvailableLoanType.SplitPay)\n ) {\n const legalCopy = [\n this._i18n.translate('modal.legal.interest_and_split_pay'),\n this._i18n.translate('modal.legal.rates_from_apr'),\n this._i18n.translate('modal.legal.ca_residents_notice'),\n ]\n .filter(Boolean)\n .join(' ');\n\n const subTitle = this._i18n.translate(\n 'modal.subtitle.interest_and_split_pay',\n {\n splitPayLoanRepayment,\n },\n );\n\n return {\n subTitle,\n legalCopy,\n };\n } else if (loanTypes.includes(AvailableLoanType.SplitPay)) {\n const legalCopy = [\n this._i18n.translate('modal.legal.split_pay_only'),\n this._i18n.translate('modal.legal.ca_residents_notice'),\n ]\n .filter(Boolean)\n .join(' ');\n\n let translationKey = 'modal.subtitle.split_pay_only';\n\n if (this._numberOfPaymentTerms === 2) {\n translationKey = 'modal.subtitle.split_pay_only_2';\n } else if (this._numberOfPaymentTerms === 1) {\n translationKey = 'modal.subtitle.split_pay_only_30';\n }\n\n const subTitle = this._i18n.translate(translationKey, {\n price,\n splitPayLoanRepayment,\n });\n\n return {\n subTitle,\n legalCopy,\n };\n } else if (loanTypes.includes(AvailableLoanType.Interest)) {\n const legalCopy = [\n this._i18n.translate('modal.legal.rates_from_apr'),\n this._i18n.translate('modal.legal.ca_residents_notice'),\n ]\n .filter(Boolean)\n .join(' ');\n\n const subTitle = this._i18n.translate('modal.subtitle.interest_only');\n\n return {\n subTitle,\n legalCopy,\n };\n } else {\n return this.getIneligibleMessage(\n priceRange,\n price,\n minIneligibleMessageType,\n );\n }\n }\n\n /**\n * @param {PriceRange} priceRange price range of the cart or product with min and max prices\n * @param {string} price the price of the current item or cart\n * @param {minIneligibleMessageType} minIneligibleMessageType the type of message when the value is below the minimum price for installments\n * @returns {ModalText} contains two keys, one with legal copy and one with a subtitle for the modal contents\n */\n getIneligibleMessage(\n priceRange: PriceRange,\n price?: string,\n minIneligibleMessageType?: MinIneligibleMessageType,\n ): ModalText {\n if (!this._i18n) return {subTitle: '', legalCopy: ''};\n\n const minPrice = priceRange?.minPrice;\n const maxPrice = priceRange?.maxPrice;\n\n const minPriceNumber = minPrice ? convertPriceToNumber(minPrice) : null;\n const priceNumber = price ? convertPriceToNumber(price) : null;\n\n const legalCopy = [\n this._i18n.translate('modal.legal.ineligible'),\n this._i18n.translate('modal.legal.ca_residents_notice'),\n ]\n .filter(Boolean)\n .join(' ');\n\n if (!minPriceNumber || !maxPrice) {\n return {\n subTitle: '',\n legalCopy,\n };\n }\n\n if (!priceNumber || priceNumber < minPriceNumber) {\n let translationKey = 'modal.subtitle.ineligible_min';\n\n if (\n this._numberOfPaymentTerms === 2 ||\n this._numberOfPaymentTerms === 1\n ) {\n translationKey = 'modal.subtitle.ineligible_min_over_time';\n }\n\n const ineligibleSubtitle = this._i18n.translate(translationKey, {\n minPrice,\n });\n\n const ineligibleMonthlySubtitle = this._i18n.translate(\n 'modal.subtitle.ineligible_monthly_payments_min',\n {minPrice},\n );\n\n return {\n subTitle:\n minIneligibleMessageType === MinIneligibleMessageType.Monthly\n ? ineligibleMonthlySubtitle\n : ineligibleSubtitle,\n legalCopy,\n };\n }\n\n const subTitle = this._i18n.translate('modal.subtitle.ineligible_max', {\n maxPrice,\n });\n\n return {\n subTitle,\n legalCopy,\n };\n }\n\n private async _initTranslations(): Promise {\n if (this._i18n) return;\n try {\n const locale = I18n.getDefaultLanguage();\n const dictionary = await import(`./translations/${locale}.json`);\n this._i18n = new I18n({[locale]: dictionary});\n } catch (error) {\n if (error instanceof Error) {\n Bugsnag.notify(error);\n }\n }\n }\n\n private async _initContent(): Promise {\n if (!this._i18n) return;\n const template = document.createElement('template');\n const listItems = this.determineListItemsByLoanTypes(this._loanTypes);\n const {subTitle, legalCopy} = this.determineTextByLoanTypes(\n this._loanTypes,\n this._pricePerTerm,\n this._priceRange,\n this._eligible,\n this._minIneligibleMessageType,\n this._priceWithoutInterest,\n );\n\n template.innerHTML = getTemplateContents(\n this._i18n,\n subTitle,\n legalCopy,\n listItems,\n );\n this.rootContainer.appendChild(template.content.cloneNode(true));\n }\n}\n\n/**\n * @param {I18n} i18n i18n instance to translate strings.\n * @param {string} subTitle shown after the header in the modal.\n * @param {string} legalCopy shown at the bottom of the modal.\n * @param {string[]} listItems array of content to be displayed as a list in the modal.\n * @returns {string} full HTML content.\n */\nfunction getTemplateContents(\n i18n: I18n,\n subTitle: string,\n legalCopy: string,\n listItems: string[],\n): string {\n const title = i18n.translate('modal.title');\n const close = i18n.translate('modal.close');\n const newWindow = i18n.translate('modal.new_window');\n const partnership = getPartnershipDisclaimer(i18n);\n\n return `\n \n \n
\n
\n \n

${title}

\n
\n \n

${subTitle}

\n
    \n
  • \n \n ${listItems[0]}\n
  • \n
  • \n \n ${listItems[1]}\n
  • \n
\n

\n \n ${legalCopy}\n \n

\n
\n
\n \n
\n
\n ${partnership}\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n ${AFFIRM}\n \n \n \n \n \n \n \n \n \n \n
\n `;\n}\n","import {ShopifyInstallmentsModal} from '../modal-contents';\nimport {ShopifyInstallmentsSamplePlansModal} from '../sample-plans-modal-contents';\nimport {ShopifyInstallmentsPrequalModal} from '../prequal-modal-contents';\nimport {\n SET_MODAL_HEIGHT_EVENT,\n SetModalHeightEventParams,\n} from '../../../types/paymentTerms';\n\n/**\n * @param {ShopifyInstallmentsModal|ShopifyInstallmentsSamplePlansModal} contents custom component with the contents\n * of the modal.\n */\nexport const openPaymentTermsModal = (\n contents:\n | ShopifyInstallmentsModal\n | ShopifyInstallmentsSamplePlansModal\n | ShopifyInstallmentsPrequalModal,\n) => {\n const defaultModalMaxHeight = '95%';\n const modalZIndex = 999999;\n const cover = document.createElement('div');\n const modal = document.createElement('div');\n cover.setAttribute('id', 'shopify-payment-terms-cover');\n\n Object.assign(cover.style, {\n position: 'fixed',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n zIndex: modalZIndex,\n background: 'rgba(0,0,0,.3)',\n });\n\n Object.assign(modal.style, {\n position: 'fixed',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n zIndex: modalZIndex,\n background: 'white',\n height: 'max-content',\n width: '432px',\n maxWidth: '95%',\n maxHeight: defaultModalMaxHeight,\n margin: 'auto',\n borderRadius: '7px',\n padding: '32px',\n boxSizing: 'border-box',\n overflow: 'auto',\n transition: 'max-height ease-in 300ms',\n });\n // Mobile styles\n if (window.innerWidth < 448) {\n Object.assign(modal.style, {\n borderRadius: '0px',\n height: 'auto',\n width: 'auto',\n maxHeight: '100%',\n maxWidth: '100%',\n });\n }\n\n modal.appendChild(contents);\n\n modal.addEventListener(SET_MODAL_HEIGHT_EVENT, ((\n evt: CustomEvent,\n ) => {\n if (evt.detail.height === '') {\n modal.style.maxHeight = defaultModalMaxHeight;\n modal.style.overflow = 'auto';\n return;\n }\n\n modal.style.maxHeight = evt.detail.height;\n modal.style.overflow = evt.detail.lockScroll ? 'hidden' : 'auto';\n }) as EventListener);\n\n if ('animate' in modal) {\n const coverAnimation = [{opacity: 0}, {opacity: 1}];\n\n const modalAnimation = [\n {transform: 'translateY(-15%)', opacity: 0},\n {transform: 'translateY(0)', opacity: 1},\n ];\n\n modal.animate(modalAnimation, {\n fill: 'forwards',\n duration: 150,\n });\n\n cover.animate(coverAnimation, {\n fill: 'forwards',\n duration: 150,\n });\n }\n\n cover.appendChild(modal);\n document.body.appendChild(cover);\n\n // Cache potential existing styles before we modify it in order to\n // provide a good experience for the modal.\n document.body.dataset.paymentTermsInitialStyles = JSON.stringify({\n overflow: document.body.style.overflow,\n });\n\n // Lock scrolling on the main page\n document.body.style.overflow = 'hidden';\n\n cover.addEventListener('click', (event: MouseEvent) => {\n if (event.target === cover) {\n contents.handleClose();\n }\n });\n};\n\n/**\n * Closes the modal.\n */\nexport const closePaymentTermsModal = () => {\n const modal = document.querySelector('#shopify-payment-terms-cover');\n if (modal) {\n document.body.removeChild(modal);\n\n // Restore styles to their original values before the modal got loaded.\n if (document.body.dataset.paymentTermsInitialStyles) {\n const initialStyles = JSON.parse(\n document.body.dataset.paymentTermsInitialStyles,\n );\n\n document.body.style.overflow = initialStyles.overflow;\n document.body.style.position = initialStyles.position;\n delete document.body.dataset.initialStyles;\n }\n }\n};\n","import MonorailTracker, {\n produceMonorailEvent,\n} from '__deprecated__/common/analytics/MonorailTracker';\nimport {getTrekkieAttributes} from '__deprecated__/common/analytics/trekkie';\nimport {APP_VERSION} from '__deprecated__/common/constants';\nimport {MonorailSchema} from '__deprecated__/common/analytics/types';\nimport {\n BannerTemplateCodeSignature,\n InstallmentsBannerType,\n InstallmentsBannerContent,\n ModalUserAction,\n ModalType,\n} from '__deprecated__/types';\nimport {InstallmentsPrequalPageType} from '__deprecated__/types/paymentTerms';\n\nexport class MonorailTrackerPaymentTerms extends MonorailTracker {\n private _modalActionTracker: Record = {};\n private _bannerImpressionTracked: Record = {};\n private _prequalPopupPageImpressionTracked: Record = {};\n private _bannerPrequalInteractionTracked = false;\n private _invalidBannerMetadataTracked = false;\n\n /**\n * @param {object} params The parameters object.\n * @param {string} params.elementName The name of the element (e.g. `shop-pay-button`, `shop-login-button`, `shopify-payment-terms`).\n * @param {string} params.analyticsTraceId A UUID that can correlate all analytics events fired for the same user flow. I.e. Could be\n * @param {string} params.flow The SDK flow, eg. ('discount' or 'follow').\n * used to correlate events between Shop JS and Pay for the Shop Login flow.\n * @param {string} params.flowVersion The version of the Sign in with Shop flow (eg. \"sign_in\" or \"sign_up\")\n * @param {number} [params.shopId] The numeric id of the shop.\n * @param {string} [params.checkoutVersion] A checkout version such as \"classic\" or \"shop_pay_external\"\n */\n constructor({\n elementName,\n analyticsTraceId,\n flow = '',\n flowVersion = 'unspecified',\n shopId,\n checkoutVersion,\n }: {\n elementName: string;\n analyticsTraceId?: string;\n flow?: string;\n flowVersion?: string;\n shopId?: number;\n checkoutVersion?: string;\n }) {\n super({\n elementName,\n analyticsTraceId,\n flow,\n flowVersion,\n shopId,\n checkoutVersion,\n });\n }\n\n /**\n * Fired when the shopify-installments-modal component from shop-js has opened for the Cart or\n * a Product Variant.\n * @param {InstallmentsBannerType} origin The origin page type of this modal.\n * @param {string} modalToken A token generated by the modal to uniquely identify the modal and actions taken by the user.\n * @param {ModalType} eligibleSpiPlanType The type of modal that emitted the event.\n * @param {string} spiPlanDetails A stringified JSON array with details about sample installments plans shown on the modal.\n * @param {number} variantId A Unique identifier for a product variant. Is supported for Product Variant pages.\n * @param {string} price The price that is shown on the installments modal. Represents the total price of all\n * items in the cart if the impression is from the `cart` page and the price of the product variant if the impression\n * is from a `product` page.\n * @param {string} cartPermalink The permalink used to create the cart if the modal has a 'Continue to Checkout' button available.\n */\n async trackModalOpened(\n origin: InstallmentsBannerType,\n modalToken: string,\n eligibleSpiPlanType: ModalType,\n spiPlanDetails: string,\n variantId?: number,\n price?: string,\n cartPermalink?: string,\n ): Promise {\n let modalActionIdentifier: string;\n\n if (origin === InstallmentsBannerType.Cart) {\n modalActionIdentifier = `${origin}-open`;\n } else {\n modalActionIdentifier = `${modalToken}-open`;\n }\n\n if (this._modalActionTracker[modalActionIdentifier]) {\n return;\n }\n this._modalActionTracker[modalActionIdentifier] = true;\n\n const trekkieAttributes = await getTrekkieAttributes(\n 'uniqToken',\n 'visitToken',\n 'microSessionId',\n 'microSessionCount',\n 'shopId',\n 'currency',\n );\n\n const payload = {\n ...trekkieAttributes,\n origin,\n modalToken,\n eligibleSpiPlanType,\n price,\n cartPermalink,\n spiPlanDetails,\n variantId,\n shopJsVersion: APP_VERSION,\n };\n\n produceMonorailEvent(\n {\n schemaId: MonorailSchema.InstallmentsModalOpened,\n payload,\n },\n trekkieAttributes,\n () => {\n this._modalActionTracker[modalActionIdentifier] = false;\n },\n );\n }\n\n /**\n * Fired when a user makes a meaningful action on the shopify-installments-modal.\n * @param {string} modalToken A token generated by the modal to uniquely identify the modal and actions taken by the user.\n * @param {ModalUserAction} action The action taken by the user.\n * @param {string} cartPermalink The permalink used to create the cart if the modal has a 'Continue to Checkout' button available.\n */\n async trackModalAction(\n modalToken: string,\n action: ModalUserAction,\n cartPermalink?: string,\n ): Promise {\n const modalActionIdentifier = `${modalToken}-${action}`;\n if (this._modalActionTracker[modalActionIdentifier]) {\n return;\n }\n this._modalActionTracker[modalActionIdentifier] = true;\n\n const trekkieAttributes = await getTrekkieAttributes(\n 'uniqToken',\n 'visitToken',\n 'microSessionId',\n 'microSessionCount',\n 'shopId',\n );\n\n const payload = {\n ...trekkieAttributes,\n modalToken,\n action,\n cartPermalink,\n shopJsVersion: APP_VERSION,\n };\n\n produceMonorailEvent(\n {\n schemaId: MonorailSchema.InstallmentsModalUserAction,\n payload,\n },\n trekkieAttributes,\n () => {\n this._modalActionTracker[modalActionIdentifier] = false;\n },\n );\n }\n\n /**\n * Fired when the installment banner component is mounted on the page.\n * @param {InstallmentsBannerType} origin The origin page type of this banner.\n * @param {InstallmentsBannerContent} bannerContent The content of the banner that was shown to the user.\n * @param {boolean} eligible Whether the user's product or cart is currently eligible for installments based on price.\n * @param {BannerTemplateCodeSignature} bannerTemplateCodeSignature The banner implementation being used on the page.\n * @param {boolean} hasPrequalLink Whether the banner includes prequal flow. True if banner includes CTA link\n to start prequal flow\n * @param {string} price The price that is shown on the installments modal. Represents the total price of all\n * items in the cart if the impression is from the `cart` page and the price of the product variant if the impression\n * is from a `product` page.\n * @param {number} variantId A Unique identifier for a product variant. Is supported for Product Variant pages exclusively.\n */\n async trackInstallmentsBannerImpression(\n origin: InstallmentsBannerType,\n bannerContent: InstallmentsBannerContent,\n eligible: boolean,\n bannerTemplateCodeSignature: BannerTemplateCodeSignature,\n hasPrequalLink: boolean,\n price?: string,\n variantId?: number,\n ): Promise {\n const identifier = variantId ? String(variantId) : 'cart';\n if (this._bannerImpressionTracked[identifier]) {\n return;\n }\n this._bannerImpressionTracked[identifier] = true;\n\n const trekkieAttributes = await getTrekkieAttributes(\n 'uniqToken',\n 'visitToken',\n 'shopId',\n 'microSessionId',\n 'contentLanguage',\n 'currency',\n );\n\n const payload = {\n ...trekkieAttributes,\n origin,\n bannerContent,\n eligible,\n bannerTemplateCodeSignature,\n price,\n shopJsVersion: APP_VERSION,\n hasPrequalLink,\n // The event triggered in ShopPayBanner won't contain an analyticsTraceId.\n // Because this ID is only relevant in the prequalification flow,\n // to ensure schema validation, we assign it an empty string in this context.\"\n analyticsTraceId: this.analyticsTraceId! || '',\n };\n\n produceMonorailEvent(\n {\n schemaId: MonorailSchema.InstallmentsBannerImpression,\n payload,\n },\n trekkieAttributes,\n () => {\n this._bannerImpressionTracked[identifier] = false;\n },\n );\n }\n\n /**\n * Fired whenever the buyer clicks the prequal link in the banner on the page, To track click of the prequal link in the banner on the product page\n * @param {number} sellerId the Installments identifier for the shop\n * @param {string} pageType The page that the buyer reached.\n */\n async trackInstallmentsPrequalPopupPageImpression(\n sellerId: number | undefined,\n pageType: InstallmentsPrequalPageType,\n ): Promise {\n if (this._prequalPopupPageImpressionTracked[pageType]) {\n return;\n }\n this._prequalPopupPageImpressionTracked[pageType] = true;\n\n const payload = {\n analyticsTraceId: this.analyticsTraceId!,\n sellerId,\n pageType,\n };\n\n produceMonorailEvent(\n {\n schemaId: MonorailSchema.InstallmentsPrequalPopupPageImpression,\n payload,\n },\n undefined,\n () => {\n this._prequalPopupPageImpressionTracked[pageType] = false;\n },\n );\n }\n\n /**\n * Fired when the installment banner component is mounted on the page and the metadata being supplied is missing a required attribute.\n * @param {InstallmentsBannerType} origin The type element that emitted the event.\n * @param {string} metadata The data currently passed into the installment banner as the shopify-meta attribute.\n */\n async trackInvalidInstallmentBannerMetadata(\n origin: InstallmentsBannerType,\n metadata: string,\n ): Promise {\n if (this._invalidBannerMetadataTracked) {\n return;\n }\n this._invalidBannerMetadataTracked = true;\n\n const trekkieAttributes = await getTrekkieAttributes(\n 'uniqToken',\n 'visitToken',\n 'microSessionId',\n 'microSessionCount',\n 'shopId',\n );\n\n const payload = {\n ...trekkieAttributes,\n origin,\n metadata,\n shopJsVersion: APP_VERSION,\n };\n\n produceMonorailEvent(\n {\n schemaId: MonorailSchema.InstallmentsInvalidMetadata,\n payload,\n },\n trekkieAttributes,\n () => {\n this._invalidBannerMetadataTracked = false;\n },\n );\n }\n\n /**\n * Fired whenever the buyer clicks the prequal link in the banner on the page, To track click of the prequal link in the banner on the product page\n * @param {InstallmentsBannerType} origin The type element that emitted the event.\n * @param {InstallmentsBannerContent} bannerContent The content of the banner that was shown to the user.\n * @param {boolean} eligible Whether the user's product or cart is currently eligible for installments based on price.\n * @param {string} price The price that is shown on the installments modal. Represents the total price of all\n * @param {boolean} prequalLinkClicked True if the user clicked the prequal link\n */\n async trackInstallmentsBannerPrequalInteraction(\n origin: InstallmentsBannerType,\n bannerContent: InstallmentsBannerContent,\n eligible: boolean,\n price: string,\n prequalLinkClicked: boolean,\n ): Promise {\n if (this._bannerPrequalInteractionTracked) {\n return;\n }\n this._bannerPrequalInteractionTracked = true;\n\n const trekkieAttributes = await getTrekkieAttributes(\n 'uniqToken',\n 'visitToken',\n 'shopId',\n 'microSessionId',\n 'contentLanguage',\n 'currency',\n );\n\n const payload = {\n ...trekkieAttributes,\n origin,\n bannerContent,\n eligible,\n price,\n shopJsVersion: APP_VERSION,\n prequalLinkClicked,\n analyticsTraceId: this.analyticsTraceId!,\n };\n\n produceMonorailEvent(\n {\n schemaId: MonorailSchema.InstallmentsBannerPrequalInteraction,\n payload,\n },\n trekkieAttributes,\n () => {\n this._bannerPrequalInteractionTracked = false;\n },\n );\n }\n}\n","import {v4 as uuidv4} from 'uuid';\nimport {I18n} from '__deprecated__/common/translator/i18n';\n\nimport {defineCustomElement} from '../../../common/init';\nimport Bugsnag from '../../../common/bugsnag';\nimport {ShopPayLogo} from '../../../common/shop-pay-logo';\nimport {\n PAYMENT_TERMS_TEMPLATE,\n FAILED_TO_LOAD_HTML_ERROR_MESSAGE,\n SHOP_PAY_LOGO,\n} from '../constants';\nimport FocusLock from '../FocusLock';\nimport {ShopifyInstallmentsModal} from '../modal-contents';\nimport {\n AvailableLoanType,\n BannerTemplateCodeSignature,\n Term,\n MinIneligibleMessageType,\n InstallmentsBannerType,\n InstallmentsBannerContent,\n LegacyCartShopifyMetadata,\n LegacyProductShopifyMetadata,\n LegacyVariant,\n} from '../../../types';\nimport {\n formatPrice,\n inferBackgroundColor,\n cartSubtotalSelectorsForTheme,\n convertPriceToNumber,\n confirmCartSubtotalAttribute,\n getNewProductVariantId,\n} from '../utils';\nimport {\n closePaymentTermsModal,\n openPaymentTermsModal,\n} from '../utils/termsModal';\nimport {isLegacyShopifyMetadata} from '../utils/metadataValidation';\n\nimport {MonorailTrackerPaymentTerms} from './MonorailTrackerPaymentTerms';\n\ninterface ComponentMetadata {\n name: string;\n shopifyMeta: any;\n variantId: string | null;\n}\n\nexport class ShopPayBanner extends HTMLElement {\n static get observedAttributes() {\n return ['variant-id', 'shopify-meta'];\n }\n\n private _variants?: LegacyVariant[];\n private _currentVariantId?: number;\n private _pricePerTerm?: string;\n private _minPrice = '$50';\n private _minPriceNumber?: number;\n private _maxPrice = '$3000';\n private _maxPriceNumber?: number;\n private _open = false;\n private _eligible = false;\n private _numberOfPaymentTerms = 4;\n private _hasChangeEventListener = false;\n private _loanTypes: AvailableLoanType[] = [];\n private _monorailTracker: MonorailTrackerPaymentTerms;\n private _modalMonorailTracker: MonorailTrackerPaymentTerms;\n private _lastLearnMoreEventListener?: () => void;\n private _metaType: InstallmentsBannerType = InstallmentsBannerType.Product;\n private _backgroundColor = '';\n private _didMount = false;\n private _i18n: I18n | null = null;\n\n constructor() {\n super();\n\n this._monorailTracker = new MonorailTrackerPaymentTerms({\n elementName: 'shop-pay-banner',\n });\n this._modalMonorailTracker = new MonorailTrackerPaymentTerms({\n elementName: 'shopify-installments-modal',\n });\n\n if (!customElements.get('shopify-installments-modal')) {\n customElements.define(\n 'shopify-installments-modal',\n ShopifyInstallmentsModal,\n );\n }\n\n if (!customElements.get('shop-pay-logo')) {\n customElements.define('shop-pay-logo', ShopPayLogo);\n }\n\n this.attachShadow({mode: 'open'}).innerHTML = PAYMENT_TERMS_TEMPLATE;\n }\n\n async initTranslations() {\n if (this._i18n) return;\n try {\n const locale = I18n.getDefaultLanguage();\n const dictionary = await import(`../translations/${locale}.json`);\n this._i18n = new I18n({[locale]: dictionary});\n } catch (error) {\n if (error instanceof Error) {\n Bugsnag.notify(error);\n }\n }\n }\n\n attributeChangedCallback() {\n if (this._didMount) {\n this.updateBanner();\n }\n }\n\n async connectedCallback() {\n await this.initTranslations();\n this.updateBanner();\n this._didMount = true;\n }\n\n updateBanner() {\n try {\n const shopifyMeta = this.getAttribute('shopify-meta');\n if (shopifyMeta) {\n const parsedShopifyMeta = JSON.parse(shopifyMeta);\n this._backgroundColor = inferBackgroundColor(this.shadowRoot);\n\n if (\n isLegacyShopifyMetadata(\n parsedShopifyMeta,\n this._monorailTracker.trackInvalidInstallmentBannerMetadata.bind(\n this._monorailTracker,\n ),\n )\n ) {\n if (parsedShopifyMeta.type === InstallmentsBannerType.Cart) {\n this._monorailTracker.trackElementImpression(\n InstallmentsBannerType.Cart,\n );\n this._metaType = InstallmentsBannerType.Cart;\n this.handleCartMeta(parsedShopifyMeta);\n } else {\n // Some shops are breaking if we require the product type.\n // If no type is provided, assume it's legacy => product\n this._monorailTracker.trackElementImpression(\n InstallmentsBannerType.Product,\n );\n this._metaType = InstallmentsBannerType.Product;\n this.handleProductMeta(parsedShopifyMeta);\n }\n }\n this.updateLearnMoreButtonAndModal();\n }\n } catch (error: any) {\n // This error is being reported often in Bugsnag. It is produced\n // by an unkown operation system using old Chromium versions.\n // Because it is causing too many noise on bugsnag we are\n // silencing it for now.\n if (\n error instanceof TypeError &&\n error.message.match(FAILED_TO_LOAD_HTML_ERROR_MESSAGE)\n ) {\n // eslint-disable-next-line no-console\n console.error(error);\n } else {\n Bugsnag.notify(error, {\n metadata: {component: this._componentMetadata()} as any,\n });\n }\n this._clearShadowRoot();\n }\n }\n\n async updateLearnMoreButtonAndModal() {\n if (!this._i18n) return;\n\n // Open modal on 'Learn more' click\n const learnMoreBtn = this.shadowRoot?.querySelector(\n '.shopify-installments__learn-more',\n );\n const modalToken = uuidv4();\n if (learnMoreBtn) {\n learnMoreBtn.innerHTML = this._i18n.translate('banner.learn_more');\n\n this._monorailTracker.trackInstallmentsBannerImpression(\n this._metaType,\n InstallmentsBannerContent.PayInFour,\n this._eligible,\n BannerTemplateCodeSignature.CustomizedByMerchant,\n false,\n undefined,\n this._currentVariantId,\n );\n\n const learnMoreEventListener = async () => {\n // this should always be set by either handleCartMeta or\n // handleProductMeta, but if the `shopify-meta` attribute, or the\n // payload are not valid then we won't have a price, in which case we\n // don't want to continue any further.\n if (!this._pricePerTerm) {\n return;\n }\n\n if (!this._open) {\n this._open = true;\n this._modalMonorailTracker.trackElementImpression(this._metaType);\n const priceRange = {\n minPrice: this._minPrice,\n maxPrice: this._maxPrice,\n };\n\n const terms = new ShopifyInstallmentsModal(\n this._pricePerTerm,\n this._eligible,\n priceRange,\n this._loanTypes,\n modalToken,\n this._modalMonorailTracker,\n undefined,\n MinIneligibleMessageType.SplitPay,\n );\n\n await terms.connectedCallback();\n const focusLock = new FocusLock(terms.focusLockTarget);\n terms.addEventListener('shopify_modal_close', () => {\n this._open = false;\n closePaymentTermsModal();\n // Release lock on modal for a11y purposes\n focusLock.release(learnMoreBtn);\n });\n\n openPaymentTermsModal(terms);\n this._instrumentMonorailModalOpenEvent(terms, this._metaType);\n // Lock focus on modal for a11y purposes\n focusLock.lock();\n }\n };\n\n // Remove current event listener from learnMore button, as appending new listeners leads to some odd behaviour\n if (this._lastLearnMoreEventListener) {\n learnMoreBtn.removeEventListener(\n 'click',\n this._lastLearnMoreEventListener,\n );\n }\n this._lastLearnMoreEventListener = learnMoreEventListener;\n learnMoreBtn.addEventListener('click', learnMoreEventListener);\n }\n }\n\n handleProductMeta(productMeta: LegacyProductShopifyMetadata) {\n this._variants = productMeta.variants;\n this._minPrice = productMeta.min_price;\n this._minPriceNumber = convertPriceToNumber(this._minPrice);\n this._maxPrice = productMeta.max_price;\n this._maxPriceNumber = convertPriceToNumber(this._maxPrice);\n this._currentVariantId = Number(this.getAttribute('variant-id'));\n this._pricePerTerm = this.updateVariant(this._currentVariantId);\n this._numberOfPaymentTerms = productMeta.number_of_payment_terms;\n\n // Update price on variant change, need to navigate up 2 shadow roots to get to form\n const productForm = this._getProductForm();\n if (productForm) {\n const onProductFormChange = (attempts = 0) => {\n // The value of the element updates after an unknown amount of time based on how much\n // work a theme's custom JS is handling. We are putting some limitations by checking every 100ms\n // for up to 500ms.\n if (attempts > 4) {\n return;\n }\n\n const newVariantId = getNewProductVariantId(productForm);\n // Out of options as to find the new variant ID.\n if (!newVariantId) return;\n\n if (this._currentVariantId === newVariantId) {\n setTimeout(() => {\n onProductFormChange(attempts + 1);\n }, 100);\n } else {\n this._numberOfPaymentTerms =\n this._getNumberOfPaymentTermsForPDPVariant(newVariantId);\n this._pricePerTerm = this.updatePDPVariant(\n newVariantId,\n productMeta.financing_plans,\n );\n this._fullPrice = this._getVariantFullPrice(newVariantId);\n this._buildInstallmentPlans(\n productMeta.financing_plans,\n this._fullPrice,\n );\n\n this._currentVariantId = newVariantId;\n this.updateLearnMoreButtonAndModal();\n }\n };\n // We don't add the event listener if it's been added before.\n if (!this._hasChangeEventListener) {\n this._hasChangeEventListener = true;\n productForm.addEventListener('change', () => {\n onProductFormChange();\n });\n }\n }\n }\n\n handleCartOrCheckoutMeta(\n cartOrCheckoutMeta: CartShopifyMetadata | CheckoutShopifyMetadata,\n ) {\n const extraCartSubtotalSelectors: string | null =\n cartSubtotalSelectorsForTheme();\n this._minPrice = cartOrCheckoutMeta.min_price;\n this._minPriceNumber = convertPriceToNumber(this._minPrice);\n this._maxPrice = cartOrCheckoutMeta.max_price;\n this._maxPriceNumber = convertPriceToNumber(this._maxPrice);\n this._fullPrice = cartOrCheckoutMeta.full_price;\n this._loanTypes = this._getAvailableLoanTypes(\n this._fullPrice,\n cartOrCheckoutMeta.financing_plans,\n );\n this._eligible = cartOrCheckoutMeta.eligible;\n this._financingTermForBanner = this.getFinancingTermForCart(\n this._fullPrice,\n cartOrCheckoutMeta.financing_plans,\n );\n this._sellerId = cartOrCheckoutMeta.seller_id;\n this._installmentsBuyerPrequalificationEnabled =\n cartOrCheckoutMeta.installments_buyer_prequalification_enabled;\n this._pricePerTerm = this._financingTermForBanner\n ? this.getCartPricePerTerm(this._fullPrice, this._financingTermForBanner)\n : cartOrCheckoutMeta.price_per_term;\n this._numberOfPaymentTerms = this._financingTermForBanner\n ? this._financingTermForBanner.installments_count\n : cartOrCheckoutMeta.number_of_payment_terms;\n this.updateBannerPrice(this._pricePerTerm);\n\n if (this._loanTypes.length) {\n this._buildInstallmentPlans(\n cartOrCheckoutMeta.financing_plans,\n cartOrCheckoutMeta.full_price,\n );\n }\n\n if (!extraCartSubtotalSelectors) {\n confirmCartSubtotalAttribute();\n }\n\n // Update on cart change\n const mutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n if (mutation.target.nodeType !== Node.ELEMENT_NODE) {\n return;\n }\n const mutationTarget = mutation.target as Element;\n if (\n (mutationTarget.matches('[data-cart-subtotal]') ||\n (extraCartSubtotalSelectors &&\n mutationTarget.matches(extraCartSubtotalSelectors))) &&\n mutationTarget.textContent\n ) {\n const paymentFullPrice = convertPriceToNumber(\n mutationTarget.textContent,\n );\n if (paymentFullPrice) {\n this._fullPrice = mutationTarget.textContent;\n this._eligible = this._priceEligible(paymentFullPrice);\n const termPrice = this._splitCartPrice(paymentFullPrice);\n if (termPrice) {\n const formattedPrice = formatPrice(termPrice);\n this._pricePerTerm = formattedPrice;\n this.updateBannerPrice(formattedPrice);\n }\n }\n }\n });\n });\n\n mutationObserver.observe(document, {\n attributes: true,\n childList: true,\n subtree: true,\n });\n }\n\n buildVariantInfo(productQuantity: number): VariantModalDetails {\n return {\n idQuantityMapping: `${this._currentVariantId}:${productQuantity}`,\n available: this._variantAvailable,\n };\n }\n\n getCartPricePerTerm(price: string, financingTerm: Term) {\n const totalCartPrice = convertPriceToNumber(price);\n return this.calculatePricePerTerm(totalCartPrice, financingTerm);\n }\n\n getFinancingTermForCart(price: string, financingPlans: FinancingPlan[]) {\n const totalCartPrice = convertPriceToNumber(price);\n\n const financingPlanForPrice = this._getFinancingPlanForPrice(\n totalCartPrice,\n financingPlans,\n );\n\n if (!financingPlanForPrice) {\n return undefined;\n }\n\n return this._getFinancingTermForBanner(financingPlanForPrice);\n }\n\n getContent = (price: string) => {\n if (!this._i18n) return '';\n\n // Checkout only wants a link to open the modal, no \"banner\" so to speak\n if (this._metaType === InstallmentsBannerType.Checkout) return '';\n\n const shopPayLogo = SHOP_PAY_LOGO(this._backgroundColor);\n\n if (!this._loanTypes.length) {\n return this.getIneligibleContent();\n }\n\n if (this._financingTermForBanner && this._hasZeroInterestLoanType()) {\n const isZeroApr = this._financingTermForBanner.apr === 0;\n return isZeroApr\n ? this._i18n.translate('banner.zero_interest_eligible_zero_apr', {\n price,\n shopPayLogo,\n })\n : this._i18n.translate('banner.zero_interest_eligible', {\n price,\n shopPayLogo,\n });\n }\n\n if (\n this._financingTermForBanner &&\n this.isInAdaptiveRangeWithoutZeroInterest()\n ) {\n return this._i18n.translate('banner.pay_in_4_or_as_low_as_eligible', {\n price,\n shopPayLogo,\n });\n }\n\n if (this._loanTypes.includes(AvailableLoanType.SplitPay)) {\n let translationKey = 'banner.split_pay_eligible';\n\n if (this._numberOfPaymentTerms === 2) {\n translationKey = 'banner.split_pay_eligible_2';\n } else if (this._numberOfPaymentTerms === 1) {\n translationKey = 'banner.split_pay_eligible_30';\n }\n\n return this._i18n.translate(translationKey, {\n price,\n shopPayLogo,\n });\n }\n const onlyInterest = this._loanTypes.includes(AvailableLoanType.Interest);\n\n if (onlyInterest) {\n return this._i18n.translate('banner.dynamic_interest_only_eligible', {\n price,\n shopPayLogo,\n });\n }\n\n return this.getIneligibleContent();\n };\n\n getIneligibleContent = () => {\n if (!this._i18n) return '';\n\n const shopPayLogo = SHOP_PAY_LOGO(this._backgroundColor);\n\n let translationKey = 'banner.non_eligible_min';\n\n if (this._minIneligibleMessageType === MinIneligibleMessageType.Monthly) {\n translationKey = 'banner.non_eligible_monthly_payments_min';\n } else if (this._numberOfPaymentTerms === 2) {\n translationKey = 'banner.non_eligible_min_over_time';\n } else if (this._numberOfPaymentTerms === 1) {\n translationKey = 'banner.non_eligible_min_over_time_30';\n }\n\n const minIneligibleMessage = this._i18n.translate(translationKey, {\n minPrice: this._minPrice,\n shopPayLogo,\n });\n\n if (!this._fullPrice) {\n return minIneligibleMessage;\n }\n\n const fullPriceNumber = convertPriceToNumber(this._fullPrice);\n const maxPriceNumber = convertPriceToNumber(this._maxPrice);\n if (fullPriceNumber > maxPriceNumber) {\n return this._i18n.translate('banner.non_eligible_max', {\n maxPrice: this._maxPrice,\n shopPayLogo,\n });\n }\n return minIneligibleMessage;\n };\n\n updatePDPVariant = (variantId: number, financingPlans: FinancingPlan[]) => {\n const variant = this._variants?.find(\n (variant) => Number(variant.id) === variantId,\n );\n\n if (!variant || !variant.full_price) {\n this._eligible = false;\n this._loanTypes = [];\n this.updateBannerPrice();\n return '';\n }\n\n this._eligible = variant.eligible;\n this._loanTypes = this._getAvailableLoanTypes(\n variant.full_price,\n financingPlans,\n );\n this._variantAvailable = variant.available;\n\n const variantPrice = variant.full_price;\n const variantPriceNumber = convertPriceToNumber(variantPrice);\n const financingPlanForPrice = this._getFinancingPlanForPrice(\n variantPriceNumber,\n financingPlans,\n );\n\n if (!financingPlanForPrice) {\n this.updateBannerPrice(variant.price_per_term);\n return variant.price_per_term;\n }\n\n this._financingTermForBanner = this._getFinancingTermForBanner(\n financingPlanForPrice,\n );\n\n if (this._financingTermForBanner.loan_type === AvailableLoanType.SplitPay) {\n this.updateBannerPrice(variant.price_per_term);\n return variant.price_per_term;\n }\n\n const variantPricePerTerm = this.calculatePricePerTerm(\n variantPriceNumber,\n this._financingTermForBanner,\n );\n this.updateBannerPrice(variantPricePerTerm);\n\n return variantPricePerTerm;\n };\n\n calculatePricePerTerm = (price: number, term: Term) => {\n // Divided by 100 for percentage and 12 to get per month rate\n const interestRatePerMonth = term.apr / 1200;\n const numberOfPayments = term.installments_count;\n\n if (interestRatePerMonth === 0) {\n return formatPrice(price / numberOfPayments);\n }\n\n const numerator =\n price *\n interestRatePerMonth *\n (1 + interestRatePerMonth) ** numberOfPayments;\n const denominator = (1 + interestRatePerMonth) ** numberOfPayments - 1;\n\n return formatPrice(numerator / denominator);\n };\n\n updateBannerPrice = (termPrice?: string) => {\n let content;\n if (this._eligible && termPrice) {\n content = this.getContent(termPrice);\n } else {\n content = this.getIneligibleContent();\n }\n\n if (this._metaType === InstallmentsBannerType.Checkout) {\n const container = this.shadowRoot?.querySelector('#shopify-installments');\n container?.classList.add('shopify-installments__inline');\n }\n\n const installmentsContent = this.shadowRoot?.querySelector(\n '#shopify-installments-content',\n );\n if (installmentsContent) {\n installmentsContent.innerHTML = content;\n }\n };\n\n private _getVariantFullPrice(variantId: number) {\n const variant = this._variants?.find(\n (variant) => Number(variant.id) === variantId,\n );\n\n return variant?.full_price;\n }\n\n private _getNumberOfPaymentTermsForPDPVariant(variantId: number) {\n const variant = this._variants?.find(\n (variant) => Number(variant.id) === variantId,\n );\n\n return variant?.number_of_payment_terms || DEFAULT_NUMBER_OF_PAYMENT_TERMS;\n }\n\n private async _generateCartDetails() {\n const extractedHostname = getHostName(window.location.origin);\n\n if (extractedHostname) {\n return getCart(extractedHostname);\n }\n\n return undefined;\n }\n\n private _getLowestLoanTypes(financingPlans?: FinancingPlan[]) {\n const lowestFinacingPlan = financingPlans ? financingPlans[0] : null;\n\n if (!lowestFinacingPlan) {\n return [];\n }\n\n const loanTypes = lowestFinacingPlan.terms.map((term) => {\n if (term.loan_type === AvailableLoanType.SplitPay) {\n return AvailableLoanType.SplitPay;\n }\n // if not split_pay available loan type is interest\n if (term.apr === 0) {\n return AvailableLoanType.ZeroPercent;\n } else {\n return AvailableLoanType.Interest;\n }\n });\n\n return loanTypes;\n }\n\n private _getFinancingPlanForPrice(\n price: number,\n financingPlans: FinancingPlan[],\n ): FinancingPlan | undefined {\n return financingPlans.find((financingPlan) => {\n const minPrice = convertPriceToNumber(financingPlan.min_price);\n const maxPrice = convertPriceToNumber(financingPlan.max_price);\n return price >= minPrice && price <= maxPrice;\n });\n }\n\n private _getFinancingTermForBanner(financingPlan: FinancingPlan): Term {\n const longestTerm = financingPlan.terms.reduce(\n (returnedTerm, currentTerm) =>\n currentTerm.installments_count > returnedTerm.installments_count\n ? currentTerm\n : returnedTerm,\n );\n\n if (this._hasZeroInterestLoanType()) {\n return longestTerm;\n }\n\n const termWithSplitPayLoanType = financingPlan.terms.find(\n (term) => term.loan_type === AvailableLoanType.SplitPay,\n );\n\n // If product/cart is in the adaptive range, we still want to use the longest term in the banner\n if (\n termWithSplitPayLoanType &&\n !this.isInAdaptiveRangeWithoutZeroInterest()\n ) {\n return termWithSplitPayLoanType;\n }\n\n return longestTerm;\n }\n\n private _buildInstallmentPlans(\n financingPlans: FinancingPlan[],\n totalPrice?: string,\n ) {\n if (!totalPrice) return;\n\n const priceNumber = convertPriceToNumber(totalPrice);\n\n const financingPlanForPrice = this._getFinancingPlanForPrice(\n priceNumber,\n financingPlans,\n );\n\n if (!financingPlanForPrice) return;\n\n this._installmentPlans = this._getSampleDisplayedTerms(\n financingPlanForPrice.terms,\n ).map((term) => ({\n pricePerTerm: this.calculatePricePerTerm(priceNumber, term),\n apr: term.apr,\n numberOfPaymentTerms: term.installments_count,\n loanType: term.loan_type,\n }));\n }\n\n private _getSampleDisplayedTerms(terms: Term[]) {\n if (terms.length < 3) return terms;\n\n // Show split pay option and longest interest term\n if (this.isInAdaptiveRangeWithoutZeroInterest()) {\n return [terms[0], terms[terms.length - 1]];\n }\n\n const termsWithoutSplitPay = terms.filter(\n (term) => term.loan_type !== AvailableLoanType.SplitPay,\n );\n if (termsWithoutSplitPay.length < 3) return termsWithoutSplitPay;\n\n return [\n termsWithoutSplitPay[0],\n termsWithoutSplitPay[termsWithoutSplitPay.length - 1],\n ];\n }\n\n private _splitCartPrice(price: number) {\n if (isNaN(price)) {\n return undefined;\n }\n return Math.floor((price / this._numberOfPaymentTerms) * 100) / 100;\n }\n\n private _priceEligible(price: number) {\n return (\n this._minPriceNumber != null &&\n this._maxPriceNumber != null &&\n price >= this._minPriceNumber &&\n price <= this._maxPriceNumber\n );\n }\n\n private _instrumentMonorailModalOpenEvent(\n modal:\n | ShopifyInstallmentsModal\n | ShopifyInstallmentsSamplePlansModal\n | ShopifyInstallmentsPrequalModal,\n elementType: InstallmentsBannerType,\n ) {\n if (modal instanceof ShopifyInstallmentsModal) {\n this._modalMonorailTracker.trackModalOpened(\n elementType,\n modal.getModalToken(),\n modal.getModalType(),\n JSON.stringify([]),\n this._currentVariantId,\n this._fullPrice,\n );\n } else {\n this._modalMonorailTracker.trackModalOpened(\n elementType,\n modal.getModalToken(),\n modal.getModalType(),\n JSON.stringify(modal.getModalSamplePlans()),\n this._currentVariantId,\n this._fullPrice,\n modal.getPermalink(),\n );\n }\n }\n\n private _getInstallmentBannerContentType(\n showSamplePlanModalContent: boolean,\n ) {\n if (!showSamplePlanModalContent) {\n return InstallmentsBannerContent.PayInFour;\n }\n\n if (this.isInAdaptiveRangeWithoutZeroInterest()) {\n return InstallmentsBannerContent.PayInFourAsLowAs;\n }\n\n return InstallmentsBannerContent.AsLowAs;\n }\n\n private _hasZeroInterestLoanType() {\n return this._loanTypes.includes(AvailableLoanType.ZeroPercent);\n }\n\n private _getAvailableLoanTypes(\n fullPrice: string,\n financingPlans?: FinancingPlan[],\n ): AvailableLoanType[] {\n if (!financingPlans || financingPlans.length === 0 || !fullPrice) {\n return [];\n }\n\n const fullPriceNumber = convertPriceToNumber(fullPrice);\n const financingPlanForPrice = this._getFinancingPlanForPrice(\n fullPriceNumber,\n financingPlans,\n );\n\n if (!financingPlanForPrice) {\n return [];\n }\n\n const loanTypes = new Set();\n financingPlanForPrice.terms.forEach((term) => {\n if (term.loan_type === AvailableLoanType.SplitPay) {\n loanTypes.add(AvailableLoanType.SplitPay);\n }\n // if not split_pay available loan type is interest\n else if (term.apr === 0) {\n loanTypes.add(AvailableLoanType.ZeroPercent);\n } else {\n loanTypes.add(AvailableLoanType.Interest);\n }\n });\n\n return Array.from(loanTypes);\n }\n\n private _getProductForm() {\n return (\n this.shadowRoot?.host.parentNode as ShadowRoot | null\n )?.host?.closest('form');\n }\n\n private _clearShadowRoot() {\n if (this.shadowRoot) {\n this.shadowRoot.innerHTML = '';\n }\n }\n\n private _componentMetadata(): ComponentMetadata {\n return {\n name: 'shop-pay-installments-banner',\n shopifyMeta: this.getAttribute('shopify-meta'),\n variantId: this.getAttribute('variant-id'),\n };\n }\n}\n\n/**\n * Define the shop-pay-installments-banner custom element.\n */\nexport function defineElement() {\n defineCustomElement(\n 'shop-pay-installments-banner',\n ShopPayInstallmentsBanner,\n );\n}\n","import {MAX_Z_INDEX} from '__deprecated__/common/constants';\n\nexport const OVERLAY_HTML = `\n\n
\n \n

We need a bit more information.
\n Click continue and a new tab will open so you can provide your information securely.

\n Continue\n
\n`;\n","import WebComponent from '../../../../common/WebComponent';\nimport {ShopPayLogo} from '../../../../common/shop-pay-logo';\nimport {openPopupWindow} from '../../../../common/utils';\nimport {defineCustomElement} from '../../../../common/init';\nimport MessageListener from '../../../../common/MessageListener';\nimport {PrequalMessageEventData as MessageEventData} from '../../../../types';\nimport {WindowEventSource} from '../../../../common/MessageEventSource';\nimport {PAY_AUTH_DOMAIN} from '../../../../common/utils/urls';\n\nimport {OVERLAY_HTML} from './constants';\nimport {buildOverlayUrl} from './utilities';\n\nconst OVERLAY_ACTION_CLOSE = 'close';\nconst OVERLAY_ACTION_SUCCESS = 'prequal_buyer_upsert_successful';\nconst OVERLAY_ACTION_ERROR = 'error';\n\nexport class InstallmentsPrequalOverlayModal extends WebComponent {\n #window?: Window | null;\n _popupListener?: MessageListener;\n\n constructor() {\n super();\n\n if (!customElements.get('shop-pay-logo')) {\n customElements.define('shop-pay-logo', ShopPayLogo);\n }\n }\n\n connectedCallback() {\n const template = document.createElement('template');\n template.innerHTML = OVERLAY_HTML;\n this.attachShadow({mode: 'open'}).append(template.content.cloneNode(true));\n this.#buildOnClick();\n }\n\n disconnectedCallback(): void {\n this._popupListener?.destroy();\n this._popupListener = undefined;\n }\n\n attributeChangedCallback() {}\n\n handlePostMessage(event: MessageEventData) {\n // User has chosen to close the window\n if (event.type === OVERLAY_ACTION_CLOSE) {\n this.#window?.close();\n this.dispatchCustomEvent('overlayClose');\n }\n // User has successfully completed the Buyer Onboarding Form\n if (event.type === OVERLAY_ACTION_SUCCESS) {\n this.#window?.close();\n this.dispatchCustomEvent('buyerOnboardingSuccess');\n }\n // User cannot onboard onto installments\n // Close overlay and modal\n if (event.type === OVERLAY_ACTION_ERROR) {\n this.#window?.close();\n this.dispatchCustomEvent('closeOverlayAndModal');\n }\n }\n\n handleContinueButtonClick() {\n if (this.#window && !this.#window.closed) {\n this.#window.focus();\n this.addPostMessageEventListener();\n } else {\n const overlayUrl = buildOverlayUrl();\n this.#window = openPopupWindow({\n url: overlayUrl,\n width: 500,\n height: 750,\n });\n\n if (this.#window) {\n this.#window.focus();\n this.addPostMessageEventListener();\n }\n }\n }\n\n addPostMessageEventListener() {\n if (this.#window) {\n this._popupListener = new MessageListener(\n new WindowEventSource(this.#window),\n [PAY_AUTH_DOMAIN],\n this.handlePostMessage.bind(this),\n );\n }\n }\n\n #buildOnClick() {\n const continueLink = this.shadowRoot?.querySelector(\n '#installments-prequal-overlay-continue',\n );\n\n if (continueLink) {\n (continueLink as HTMLAnchorElement).onclick = () => {\n this.handleContinueButtonClick();\n };\n }\n }\n}\n\n/**\n * Define the installments-prequal-overlay-modal custom element.\n */\nexport function defineElement() {\n defineCustomElement(\n 'installments-prequal-overlay-modal',\n InstallmentsPrequalOverlayModal,\n );\n}\n","import {defineCustomElement} from '__deprecated__/common/init';\nimport {\n AuthorizeErrorEvent,\n AuthorizeLoadedEvent,\n CustomFlowSideEffectEvent,\n ResizeIframeEvent,\n ShopActionType,\n} from '__deprecated__/types/loginButton';\nimport {getAnalyticsTraceId} from '__deprecated__/common/utils';\nimport {\n PAY_AUTH_DOMAIN,\n PAY_AUTH_DOMAIN_ALT,\n} from '__deprecated__/common/utils/urls';\nimport MessageListener from '__deprecated__/common/MessageListener';\nimport MessageSender from '__deprecated__/common/MessageSender';\nimport {I18n} from '__deprecated__/common/translator/i18n';\nimport Bugsnag from '__deprecated__/common/bugsnag';\nimport {TextStyleDto} from '__deprecated__/types/paymentTerms';\n\nimport {buildAuthorizeUrl} from '../loginButton/authorize';\nimport {DefaultComponentAnalyticsContext} from '../../constants/loginDefault';\nimport {ATTRIBUTE_ANALYTICS_TRACE_ID} from '../../constants/loginButton';\nimport {IFrameEventSource} from '../../common/MessageEventSource';\nimport WebComponent from '../../common/WebComponent';\n\nexport const PREQUAL_LOADING_TIMEOUT = 15000;\n\nexport enum PrequalFlowVersion {\n Unspecified = 'unspecified',\n PrequalAmount = 'prequalAmount',\n}\n\nexport const ELEMENT_CLASS_NAME = 'shop-prequal-amount';\n\nexport const ATTRIBUTE_STYLES = 'styles';\nexport const ATTRIBUTE_ON_READY = 'onready';\nexport const ATTRIBUTE_ON_LOADED = 'onloaded';\n\nexport type PrequalAmountEvents =\n | AuthorizeLoadedEvent\n | AuthorizeErrorEvent\n | CustomFlowSideEffectEvent\n | ResizeIframeEvent;\n\ninterface PrequalAmountAttributes {\n [ATTRIBUTE_STYLES]?: () => TextStyleDto | undefined;\n [ATTRIBUTE_ON_READY]?: (prequalified: boolean, fontLoaded: boolean) => void;\n [ATTRIBUTE_ON_LOADED]?: () => void;\n}\n\ninterface SetComponentStyleEvent {\n type: 'setcomponentstyle';\n style: TextStyleDto;\n}\n\nclass PrequalAmountMessageSender extends MessageSender {\n constructor(eventDestination: HTMLIFrameElement | Window) {\n super(eventDestination, [PAY_AUTH_DOMAIN, PAY_AUTH_DOMAIN_ALT]);\n }\n}\n\n/**\n * Enclosing shadow root instances in the private variable will make it\n * inaccessible from the outside for `closed` ShadowRoot.\n */\nconst shadowRoots = new WeakMap();\n\nexport class PrequalAmount extends WebComponent {\n #i18n: I18n | null = null;\n #analyticsTraceId: string;\n #state: 'loading' | 'loaded' | 'confirmed' | 'ready' | 'error' = 'loading';\n #styles: PrequalAmountAttributes[typeof ATTRIBUTE_STYLES];\n #onready: PrequalAmountAttributes[typeof ATTRIBUTE_ON_READY];\n #onloaded: PrequalAmountAttributes[typeof ATTRIBUTE_ON_LOADED];\n #iframe?: HTMLIFrameElement;\n #iframeMessageListener?: MessageListener;\n #iframeMessenger?: PrequalAmountMessageSender;\n #timeoutTrackingId?: ReturnType;\n #confirmedState: {\n shopPayInstallmentsOnboarded: boolean;\n fontLoaded: boolean;\n } = {\n shopPayInstallmentsOnboarded: false,\n fontLoaded: false,\n };\n\n constructor() {\n super();\n this.#analyticsTraceId =\n this.getAttribute(ATTRIBUTE_ANALYTICS_TRACE_ID) || getAnalyticsTraceId();\n\n const template = document.createElement('template');\n template.innerHTML = getStyle();\n\n shadowRoots.set(this, this.attachShadow({mode: 'open'}));\n shadowRoots.get(this)?.appendChild(template.content.cloneNode(true));\n }\n\n set styles(value: PrequalAmountAttributes[typeof ATTRIBUTE_STYLES]) {\n this.#styles = value;\n this.#syncStyles();\n }\n\n get styles(): PrequalAmountAttributes[typeof ATTRIBUTE_STYLES] {\n return this.#styles;\n }\n\n set onready(value: PrequalAmountAttributes[typeof ATTRIBUTE_ON_READY]) {\n this.#onready = value;\n }\n\n get onready() {\n return this.#onready;\n }\n\n set onloaded(value: PrequalAmountAttributes[typeof ATTRIBUTE_ON_LOADED]) {\n this.#onloaded = value;\n }\n\n get onloaded() {\n return this.#onloaded;\n }\n\n async connectedCallback() {\n this.#hideContent();\n await this.#initTranslations();\n this.#insertTextContent();\n this.#initIframe();\n }\n\n attributeChangedCallback(\n name: keyof PrequalAmountAttributes,\n _oldValue: string,\n newValue: string | null,\n ): void {\n this.updateAttribute(name, newValue || undefined);\n }\n\n disconnectedCallback(): void {\n this.#destroyIframe();\n this.#hideContent();\n }\n\n #syncStyles() {\n if (this.#state === 'loaded' && this.#styles) {\n const stylesDto = this.#styles();\n if (stylesDto) {\n this.#iframeMessenger?.postMessage({\n type: 'setcomponentstyle',\n style: stylesDto,\n });\n }\n }\n }\n\n handlePostMessage(event: PrequalAmountEvents) {\n this.#clearWaitingTimeout();\n\n /**\n * This component reacts on events as a State Machine\n */\n switch (event.type) {\n case 'custom_flow_side_effect':\n this.#state = 'confirmed';\n this.#confirmedState = {\n shopPayInstallmentsOnboarded: Boolean(\n event.shopPayInstallmentsOnboarded,\n ),\n fontLoaded: Boolean(event.fontAssetLoaded),\n };\n this.#showContent();\n break;\n case 'error':\n this.#reportErrorState();\n break;\n case 'loaded':\n if (this.#state === 'loading') {\n this.#state = 'loaded';\n this.#onloaded?.();\n this.#syncStyles();\n }\n break;\n case 'resize_iframe':\n this.#iframe!.style.height = `${event.height}px`;\n this.#iframe!.style.width = `${event.width}px`;\n if (this.#state === 'confirmed') {\n this.#reportReadyState(\n this.#confirmedState.shopPayInstallmentsOnboarded,\n this.#confirmedState.fontLoaded,\n );\n }\n break;\n }\n }\n\n #clearWaitingTimeout() {\n if (this.#timeoutTrackingId) {\n clearTimeout(this.#timeoutTrackingId);\n this.#timeoutTrackingId = undefined;\n }\n }\n\n #reportErrorState() {\n this.#state = 'error';\n this.#hideContent();\n this.#onready?.(false, false);\n }\n\n #reportReadyState(\n shopPayInstallmentsOnboarded: boolean,\n fontLoaded?: boolean,\n ) {\n if (this.#state === 'error') {\n return;\n }\n\n this.#state = 'ready';\n if (shopPayInstallmentsOnboarded) {\n this.#showContent();\n } else {\n this.#hideContent();\n }\n\n this.#onready?.(shopPayInstallmentsOnboarded, Boolean(fontLoaded));\n }\n\n async #initTranslations() {\n if (this.#i18n) return;\n try {\n const locale = I18n.getDefaultLanguage();\n const dictionary = await import(`./translations/${locale}.json`);\n this.#i18n = new I18n({[locale]: dictionary});\n } catch (error) {\n if (error instanceof Error) {\n Bugsnag.notify(error);\n }\n }\n }\n\n #showContent() {\n this.style.display = '';\n }\n\n #hideContent() {\n this.style.display = 'none';\n }\n\n #insertTextContent() {\n if (!this.#i18n) {\n // error?\n return;\n }\n\n const container = shadowRoots\n .get(this)\n ?.querySelector('.container') as HTMLSpanElement;\n\n const text = this.#i18n.translate(\n 'banner.prequal_contents.purchasing_power_a',\n );\n\n const textContent = document.createTextNode(text);\n const span = document.createElement('span');\n span.appendChild(textContent);\n\n container.innerHTML = '';\n container.appendChild(span);\n }\n\n #buildIframeSrc() {\n return buildAuthorizeUrl({\n version: '2',\n analyticsTraceId: this.#analyticsTraceId,\n analyticsContext: DefaultComponentAnalyticsContext.Prequal,\n isCompactLayout: false,\n flow: ShopActionType.Prequal,\n flowVersion: PrequalFlowVersion.PrequalAmount,\n signUpEnabled: false,\n avoidPayAltDomain: false,\n avoidSdkSession: false,\n hideCopy: true,\n requireVerification: false,\n });\n }\n\n #initIframe() {\n this.#iframe = document.createElement('iframe');\n\n this.#timeoutTrackingId = setTimeout(() => {\n this.#reportErrorState();\n }, PREQUAL_LOADING_TIMEOUT);\n\n this.#iframe.src = this.#buildIframeSrc();\n\n this.shadowRoot?.querySelector('.container')?.appendChild(this.#iframe);\n\n if (!this.#iframeMessageListener) {\n this.#iframeMessageListener = new MessageListener(\n new IFrameEventSource(this.#iframe),\n [PAY_AUTH_DOMAIN, PAY_AUTH_DOMAIN_ALT, window.location.origin],\n this.handlePostMessage.bind(this),\n this.ownerDocument?.defaultView || undefined,\n );\n }\n\n if (!this.#iframeMessenger) {\n this.#iframeMessenger = new PrequalAmountMessageSender(this.#iframe);\n }\n }\n\n #destroyIframe() {\n this.#iframeMessageListener?.destroy();\n }\n}\n/**\n * function which returns the component's style\n * @returns {string} the style\n */\nfunction getStyle(): string {\n return `\n \n\n
\n
\n `;\n}\n\n/**\n *\n */\nexport function defineElement() {\n defineCustomElement('shop-prequal-amount', PrequalAmount);\n}\n","import {startBugsnag, isBrowserSupported} from '../../common/init';\nimport {defineElement as defineShopPayButton} from '../payButton/shop-pay-button';\n\nimport {defineElement as definePaymentTerms} from './shopify-payment-terms';\nimport {defineElement as defineShopPayBanner} from './components/shop-pay-banner';\nimport {defineElement as defineShopPayInstallmentsBanner} from './components/shop-pay-installments-banner';\nimport {defineElement as defineShopPayInstallmentsPrequalOverlayModal} from './components/prequalOverlay/installments-prequal-overlay-modal';\n\nimport {definePrequalAmountElement} from '.';\n\n/**\n * Initialize the payment terms web components.\n * This is the entry point that will be used for code-splitting.\n */\nfunction init() {\n if (!isBrowserSupported()) return;\n startBugsnag({\n bundle: 'paymentTerms',\n // eslint-disable-next-line no-process-env\n bundleLocale: process.env.BUILD_LOCALE,\n });\n\n defineShopPayButton();\n definePaymentTerms();\n defineShopPayBanner();\n definePrequalAmountElement();\n defineShopPayInstallmentsBanner();\n defineShopPayInstallmentsPrequalOverlayModal();\n}\n\ninit();\n"],"names":["doExpectedFieldsExist","obj","expectedFields","every","field","isLegacyShopifyMetadata","input","onWarning","type","hasAllRequiredCartMetadata","InstallmentsBannerType","Cart","JSON","stringify","validateLegacyCartMetadata","hasAllRequiredProductMetadata","hasValidVariant","_a","variants","length","Product","validateLegacyProductMetadata","isShopifyMetadata","validateCartMetadata","Checkout","hasAllRequiredCheckoutMetadata","validateCheckoutMetadata","validateProductMetadata","ShopifyPaymentTerms","HTMLElement","observedAttributes","constructor","super","this","_didMount","_currentBanner","document","createElement","attachShadow","mode","connectedCallback","newBanner","_getNewBannerNode","shadowRoot","Bugsnag","notify","Error","appendChild","attributeChangedCallback","installmentsBanner","replaceChild","disconnectedCallback","contains","_b","removeChild","shopifyMeta","getAttribute","variantId","isShopifyMetadataValid","Boolean","parse","setAttribute","PAYMENT_TERMS_TEMPLATE","SHOP_PAY_LOGO","backgroundColor","AFFIRM","SHARED_MODAL_STYLES","FAILED_TO_LOAD_HTML_ERROR_MESSAGE","FocusLock","htmlElement","_documentFocusHandler","evt","_lastFocusable","target","_getShadowRootHost","_isEventFromModal","preventDefault","stopPropagation","focus","_shadowRootFocusHandler","_firstFocusable","_phantomElement","_htmlElement","lock","focusable","querySelectorAll","_createPhantomElement","addEventListener","release","nodeToFocus","removeEventListener","_removePhantomElement","phantomElement","className","modalTarget","composedPath","find","element","Element","ariaModal","rootNode","getRootNode","ShadowRoot","host","formatPrice","price","Intl","NumberFormat","style","currency","minimumFractionDigits","format","cartSubtotalSelectorsForTheme","_c","window","Shopify","theme","name","toLowerCase","confirmCartSubtotalAttribute","querySelector","console","warn","inferBackgroundColor","whiteBackgroundColor","paymentTermsSectionColor","parentElement","getComputedStyle","getPropertyValue","trim","paymentTermsBodyColor","documentElement","shopBackgroundColor","CSS","supports","convertPriceToNumber","parseFloat","replace","getNewProductVariantId","productForm","variantIdElement","Number","value","variantParam","URL","location","href","searchParams","get","undefined","extractVariantIdFromURL","getPartnershipDisclaimer","i18n","affirmLogo","isEnglish","translate","getDynamicPDPText","numberOfPlans","priceWithoutInterest","subTitle","count","legalCopy","getFormattedSamplePlans","installmentPlans","map","pricePerTerm","apr","numberOfPaymentTerms","loanType","totalPriceWithInterestNumber","priceWithoutInterestNumber","interest","totalPriceWithInterest","getDynamicPDPTemplateContents","samplePlans","title","eligibilityLabel","interestLabel","totalLabel","processingLabel","processingTimeLabel","partnership","newWindowLabel","closeLabel","logoElements","logoSvgs","aprLabel","aprAmount","AvailableLoanType","SplitPay","numberOfTerms","join","getNavigationButtons","storeUrl","modalToken","buttonText","variantInfo","cart","idQuantityMapping","available","encodeURIComponent","items","token","extractFontFaceDeclarationForFontFamily","fontFamily","isFontFaceRule","rule","fontFaceList","styleSheets","filter","stylesheet","cssRules","flatMap","font","includes","i","key","src","_match","_quote","url","match","baseURL","parentStyleSheet","toString","buildFontFaceDescriptor","fontFace","fontFaceRuleDeclarationMap","Map","fontFaceDescriptors","forEach","error","ShopifyInstallmentsModal","eligible","priceRange","loanTypes","monorailTracker","minIneligibleMessageType","_i18n","_trackContinueToCheckout","_initialized","handleClose","_monorailTracker","trackModalAction","_modalToken","ModalUserAction","Close","event","Event","dispatchEvent","handleEscKey","handleContinueToCheckout","ContinueToCheckout","_loanTypes","_eligible","_pricePerTerm","_priceRange","_priceWithoutInterest","_minIneligibleMessageType","_numberOfPaymentTerms","delegatesFocus","focusLockTarget","rootContainer","_initTranslations","_initContent","_closeButtons","btn","getModalToken","getModalType","Interest","ModalType","Adaptive","InterestOnly","Ineligible","determineListItemsByLoanTypes","determineTextByLoanTypes","splitPayLoanRepayment","getIneligibleMessage","translationKey","minPrice","maxPrice","minPriceNumber","priceNumber","ineligibleSubtitle","ineligibleMonthlySubtitle","MinIneligibleMessageType","Monthly","locale","I18n","getDefaultLanguage","dictionary","template","listItems","innerHTML","close","newWindow","getTemplateContents","content","cloneNode","openPaymentTermsModal","contents","modalZIndex","cover","modal","Object","assign","position","left","right","top","bottom","zIndex","background","height","width","maxWidth","maxHeight","margin","borderRadius","padding","boxSizing","overflow","transition","innerWidth","SET_MODAL_HEIGHT_EVENT","detail","lockScroll","coverAnimation","opacity","modalAnimation","transform","animate","fill","duration","body","dataset","paymentTermsInitialStyles","closePaymentTermsModal","initialStyles","MonorailTrackerPaymentTerms","MonorailTracker","elementName","analyticsTraceId","flow","flowVersion","shopId","checkoutVersion","_modalActionTracker","_bannerImpressionTracked","_prequalPopupPageImpressionTracked","_bannerPrequalInteractionTracked","_invalidBannerMetadataTracked","trackModalOpened","origin","eligibleSpiPlanType","spiPlanDetails","cartPermalink","modalActionIdentifier","trekkieAttributes","getTrekkieAttributes","payload","shopJsVersion","APP_VERSION","produceMonorailEvent","schemaId","MonorailSchema","InstallmentsModalOpened","action","InstallmentsModalUserAction","trackInstallmentsBannerImpression","bannerContent","bannerTemplateCodeSignature","hasPrequalLink","identifier","String","InstallmentsBannerImpression","trackInstallmentsPrequalPopupPageImpression","sellerId","pageType","InstallmentsPrequalPopupPageImpression","trackInvalidInstallmentBannerMetadata","metadata","InstallmentsInvalidMetadata","trackInstallmentsBannerPrequalInteraction","prequalLinkClicked","InstallmentsBannerPrequalInteraction","ShopPayBanner","_minPrice","_maxPrice","_open","_hasChangeEventListener","_metaType","_backgroundColor","getContent","shopPayLogo","getIneligibleContent","updateVariant","variant","_variants","id","available_loan_types","updateBannerPrice","calculatePricePerTerm","term","interestRatePerMonth","numberOfPayments","installments_count","Math","pow","installmentsContent","_modalMonorailTracker","customElements","define","ShopPayLogo","initTranslations","updateBanner","parsedShopifyMeta","bind","trackElementImpression","handleCartMeta","handleProductMeta","updateLearnMoreButtonAndModal","TypeError","message","component","_componentMetadata","_clearShadowRoot","learnMoreBtn","uuidv4","InstallmentsBannerContent","PayInFour","BannerTemplateCodeSignature","CustomizedByMerchant","_currentVariantId","learnMoreEventListener","__awaiter","terms","focusLock","_instrumentMonorailModalOpenEvent","_lastLearnMoreEventListener","productMeta","min_price","_minPriceNumber","max_price","_maxPriceNumber","number_of_payment_terms","_getProductForm","onProductFormChange","attempts","newVariantId","setTimeout","cartMeta","extraCartSubtotalSelectors","MutationObserver","mutations","mutation","nodeType","Node","ELEMENT_NODE","mutationTarget","matches","textContent","paymentFullPrice","_priceEligible","termPrice","_splitCartPrice","formattedPrice","observe","attributes","childList","subtree","isNaN","floor","elementType","parentNode","closest","ShopifyInstallmentsSamplePlansModal","metaType","_samplePlans","_permalink","_installmentPlans","_variantInfo","_cart","_continueToCheckoutButton","getModalSamplePlans","getPermalink","some","plan","ZeroInterestOnly","ZeroInterest","_d","getButtonText","navigationButtons","getElementsByClassName","eligibility","classList","add","constructLink","getVariantsFromAttributeString","paymentOption","PaymentOption","ShopPayInstallments","source","sourceToken","ShopifyInstallmentsPrequalModal","_authorizeModalOpened","_nextState","InstallmentsPrequalPageType","AuthorizeLoaded","shopLoginButton","_closePrequalBuyerFormOverlay","_closeAuthorizeModal","handleOverlayClose","remove","handleBuyerOnboardingSuccess","_openFeatureIframe","handlePrequalFlowSideEffect","_prequalSideEffectEventReceived","shopPayInstallmentsOnboarded","ResultsPageLoaded","BuyerFormOverlayLoaded","_completedEventReceived","removeCheckIfYouQualifyButtonLoading","handleLoginCompleted","_openPrequalBuyerFormOverlay","addCheckIfYouQualifyButtonLoading","handleLoginModalOpened","_contentStatusIndicator","createStatusIndicator","StatusIndicatorLoader","Branded","_navigationButtons","setStatus","status","_analyticsTraceId","ATTRIBUTE_ANALYTICS_TRACE_ID","getAnalyticsTraceId","_productAmount","_sellerId","_installmentsPlans","destroyIframe","_iframeMessageListener","destroy","__classPrivateFieldGet","_ShopifyInstallmentsPrequalModal_instances","_ShopifyInstallmentsPrequalModal_openHiddenLoginIframe","call","addOverlayEventListeners","handlePostMessage","_iframeMessenger","postMessage","amount","_showFeatureIframe","_showMainContent","_continueToCheckout","_iframe","getContentModalHeight","innerHeight","modalHeight","_e","Large","container","_contentProcessingWrapper","insertBefore","firstChild","payDomain","PAY_AUTH_DOMAIN","hostname","buildPrequalResultUrl","border","_featureIframeWrapper","_showLoadingState","createListener","IFrameEventSource","PayMessageSender","eventSource","eventDestination","ownerDocument","defaultView","MessageListener","PAY_AUTH_DOMAIN_ALT","_getSellerIdInNumber","parseInt","shopPayButton","buttonBase","buttonLink","MouseEvent","ContinueToCheckoutClicked","prequalBuyerFormOverlay","_openAuthorizeModal","requestShow","_ShopifyInstallmentsPrequalModal_changeHeight","_contentModalWrapper","ResultsPageLoading","_continueToCheckoutContainer","setHeightEvent","CustomEvent","bubbles","checkIfYouQualifyButton","qualifyShadowRoot","ShopActionType","Prequal","DefaultComponentAnalyticsContext","ShopPayInstallmentsBanner","WeakMap","_variantAvailable","_financingTermForBanner","_hasZeroInterestLoanType","isInAdaptiveRangeWithoutZeroInterest","minIneligibleMessage","_fullPrice","updatePDPVariant","financingPlans","full_price","_getAvailableLoanTypes","variantPriceNumber","financingPlanForPrice","_getFinancingPlanForPrice","price_per_term","_getFinancingTermForBanner","loan_type","variantPricePerTerm","lowestLoanTypes","_getLowestLoanTypes","financing_plans","ZeroPercent","handleCartOrCheckoutMeta","showSamplePlanModalContent","_ShopPayInstallmentsBanner_instances","_ShopPayInstallmentsBanner_isEligibleForPrequalification_get","_getInstallmentBannerContentType","Standard","_cartDetails","_generateCartDetails","_ShopPayInstallmentsBanner_assignOpenPlansModalCTAClickEvent","_ShopPayInstallmentsBanner_isEligibleForPrequalificationAmount_get","_ShopPayInstallmentsBanner_initializePrequalificationAmountFlowComponents","_getVariantFullPrice","_getNumberOfPaymentTermsForPDPVariant","seller_id","_installmentsBuyerPrequalificationEnabled","installments_buyer_prequalification_enabled","_buildInstallmentPlans","cartOrCheckoutMeta","getFinancingTermForCart","getCartPricePerTerm","buildVariantInfo","productQuantity","financingTerm","totalCartPrice","extractedHostname","getHostName","getCart","lowestFinacingPlan","financingPlan","longestTerm","reduce","returnedTerm","currentTerm","termWithSplitPayLoanType","totalPrice","_getSampleDisplayedTerms","termsWithoutSplitPay","PayInFourAsLowAs","AsLowAs","fullPrice","fullPriceNumber","Set","Array","from","button","quantityElement","elements","quantity","productFormId","sectionId","quantityElementById","getElementById","getProductQuantityFromDOM","_ShopPayInstallmentsBanner_canShowSamplePlanModalContent_get","IntroPageLoaded","has","set","onlyHasInterestLoanType","_ShopPayInstallmentsBanner_useLearnMoreCtaWithPrequalificationAmount_get","_ShopPayInstallmentsBanner_inferFontStyles","containerElement","styles","color","fontSize","letterSpacing","learnMoreButtonCTA","shopifyPrequalifiedCTA","prequalAmountWrapper","prequalAmount","onloaded","onready","prequlified","fontLoaded","tabIndex","requestAnimationFrame","OVERLAY_HTML","MAX_Z_INDEX","InstallmentsPrequalOverlayModal","WebComponent","_InstallmentsPrequalOverlayModal_window","append","_InstallmentsPrequalOverlayModal_instances","_InstallmentsPrequalOverlayModal_buildOnClick","_popupListener","dispatchCustomEvent","handleContinueButtonClick","closed","addPostMessageEventListener","overlayUrl","getCoreAuthDomain","__classPrivateFieldSet","openPopupWindow","WindowEventSource","continueLink","onclick","PrequalFlowVersion","PrequalAmountMessageSender","MessageSender","shadowRoots","PrequalAmount","_PrequalAmount_i18n","_PrequalAmount_analyticsTraceId","_PrequalAmount_state","_PrequalAmount_styles","_PrequalAmount_onready","_PrequalAmount_onloaded","_PrequalAmount_iframe","_PrequalAmount_iframeMessageListener","_PrequalAmount_iframeMessenger","_PrequalAmount_timeoutTrackingId","_PrequalAmount_confirmedState","_PrequalAmount_instances","_PrequalAmount_syncStyles","_PrequalAmount_hideContent","_PrequalAmount_initTranslations","_PrequalAmount_insertTextContent","_PrequalAmount_initIframe","_oldValue","newValue","updateAttribute","_PrequalAmount_destroyIframe","_PrequalAmount_clearWaitingTimeout","fontAssetLoaded","_PrequalAmount_showContent","_PrequalAmount_reportErrorState","_PrequalAmount_reportReadyState","stylesDto","clearTimeout","display","text","createTextNode","span","_PrequalAmount_buildIframeSrc","buildAuthorizeUrl","version","analyticsContext","isCompactLayout","signUpEnabled","avoidPayAltDomain","avoidSdkSession","hideCopy","requireVerification","isBrowserSupported","startBugsnag","bundle","bundleLocale","defineShopPayButton","defineCustomElement"],"mappings":"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"}