From bed9aa58e5b09893134063d37b5f6065a1697a6a Mon Sep 17 00:00:00 2001 From: "J. Casalino" Date: Wed, 13 Mar 2024 13:18:01 -0400 Subject: [PATCH 1/5] MWPW-143708 and MWPW-143712 add kodiak auto-ticketing (#2002) * MWPW-143708 and MWPW-143712 add kodiak auto-ticketing * add mauchley --- .kodiak/config.yaml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .kodiak/config.yaml diff --git a/.kodiak/config.yaml b/.kodiak/config.yaml new file mode 100644 index 0000000000..b2637e4e9c --- /dev/null +++ b/.kodiak/config.yaml @@ -0,0 +1,24 @@ +version: 1.0 + +snow: + - id: 324444 # Milo/Helix (milo.adobe.com) + +notifications: + jira: + default: + project: MWPW # Mandatory + filters: + include: + risk_rating: R5 + fields: + assignee: + name: casalino + customfield_11800: MWPW-140779 #epic link + watchers: + - casalino + - jmichnow + - mauchley + labels: + - "OriginatingProcess=Kodiak" + components: + - name: "DevOps Security" From 6414f181b3301295de3472fe91ef751a2974b0e2 Mon Sep 17 00:00:00 2001 From: Megan Thomas Date: Wed, 13 Mar 2024 15:14:01 -0700 Subject: [PATCH 2/5] MWPW-143591 Fix Contextual Search Duplicates (#1990) * MWPW-143591 Fix Contextual Search Duplicates --- libs/blocks/article-feed/article-feed.js | 11 +++-- libs/blocks/gnav/gnav-contextual-search.js | 49 +++++++++++----------- libs/blocks/gnav/gnav.js | 16 +++++-- 3 files changed, 43 insertions(+), 33 deletions(-) diff --git a/libs/blocks/article-feed/article-feed.js b/libs/blocks/article-feed/article-feed.js index 761c49aea7..58b419d27f 100644 --- a/libs/blocks/article-feed/article-feed.js +++ b/libs/blocks/article-feed/article-feed.js @@ -71,27 +71,26 @@ export function readBlockConfig(block) { * fetches blog article index. * @returns {object} index with data and path lookup */ -export async function fetchBlogArticleIndex() { +export async function fetchBlogArticleIndex(config) { + if (blogIndex.complete) return (blogIndex); const pageSize = 500; - const { feed } = blogIndex.config; + const { feed } = config || blogIndex.config; const queryParams = `?limit=${pageSize}&offset=${blogIndex.offset}`; + blogIndex.offset += pageSize; const defaultPath = updateLinkWithLangRoot(`${getConfig().locale.contentRoot}/query-index.json`); const indexPath = feed ? `${feed}${queryParams}` : `${defaultPath}${queryParams}`; - if (blogIndex.complete) return (blogIndex); - return fetch(indexPath) .then((response) => response.json()) .then((json) => { - const complete = (json.limit + json.offset) === json.total; + const complete = (json.limit + json.offset) >= json.total; json.data.forEach((post) => { blogIndex.data.push(post); blogIndex.byPath[post.path.split('.')[0]] = post; }); blogIndex.complete = complete; - blogIndex.offset = json.offset + pageSize; return blogIndex; }); diff --git a/libs/blocks/gnav/gnav-contextual-search.js b/libs/blocks/gnav/gnav-contextual-search.js index 334e0c9a9d..3b2a5da6f9 100644 --- a/libs/blocks/gnav/gnav-contextual-search.js +++ b/libs/blocks/gnav/gnav-contextual-search.js @@ -3,9 +3,10 @@ import { getArticleTaxonomy, buildArticleCard } from '../article-feed/article-he import { createTag, getConfig } from '../../utils/utils.js'; import { replaceKey } from '../../features/placeholders.js'; +const LIMIT = 12; let abortController; let articles = []; -const LIMIT = 12; +let complete = false; let lastSearch = null; function highlightTextElements(terms, elements) { @@ -52,33 +53,33 @@ function highlightTextElements(terms, elements) { }); } -async function fetchResults(signal, terms) { - let data = []; - let complete = false; - const hits = []; - if (!articles.length) { - ({ data } = await fetchBlogArticleIndex()); - articles = data; - } - while (hits.length < LIMIT && !complete && !signal.aborted) { - articles.forEach((article) => { - if (hits.length === LIMIT) { - return; - } - const { category } = getArticleTaxonomy(article); - const text = [category, article.title, article.description].join(' ').toLowerCase(); - if (terms.every((term) => text.includes(term))) { - hits.push(article); - } - }); - if (hits.length < LIMIT && !complete) { - ({ data, complete } = await fetchBlogArticleIndex()); +async function fetchResults(signal, terms, config) { + let hits = []; + + for (const article of articles) { + if (hits.length === LIMIT || signal.aborted) break; + const { category } = getArticleTaxonomy(article); + const text = [category, article.title, article.description].join(' ').toLowerCase(); + if (terms.every((term) => text.includes(term))) { + hits.push(article); } } + + const getMoreArticles = !articles.length || (hits.length !== LIMIT && !complete); + + if (!signal.aborted && getMoreArticles) { + const index = await fetchBlogArticleIndex(config); + articles = index.data; + complete = index.complete; + hits = await fetchResults(signal, terms, config); + } + return hits; } -export default async function onSearchInput({ value, resultsEl, searchInputEl, advancedSearchEl }) { +export default async function onSearchInput( + { value, resultsEl, searchInputEl, advancedSearchEl, contextualConfig: config }, +) { if (!value.length) { resultsEl.innerHTML = ''; searchInputEl.classList.remove('gnav-search-input--isPopulated'); @@ -99,7 +100,7 @@ export default async function onSearchInput({ value, resultsEl, searchInputEl, a const terms = value.toLowerCase().split(' ').filter(Boolean); if (!terms.length) return; - const hits = await fetchResults(abortController.signal, terms); + const hits = await fetchResults(abortController.signal, terms, config); if (currentSearch === lastSearch) { if (!hits.length) { diff --git a/libs/blocks/gnav/gnav.js b/libs/blocks/gnav/gnav.js index 8382194540..9822d83f69 100644 --- a/libs/blocks/gnav/gnav.js +++ b/libs/blocks/gnav/gnav.js @@ -367,15 +367,24 @@ class Gnav { this.searchType = SEARCH_TYPE_CONTEXTUAL; } - const advancedSearchEl = searchBlock.querySelector('a'); + const advancedSearchEl = searchBlock.querySelector('a:not([href$=".json"])'); let advancedSearchWrapper = null; if (advancedSearchEl) { advancedSearchWrapper = createTag('li', null, advancedSearchEl); } + const contextualConfig = {}; + [...searchBlock.children].forEach(({ children }, index) => { + if (index === 0 || children.length !== 2) return; + const key = children[0].textContent?.toLowerCase(); + const link = children[1].querySelector('a'); + const value = link ? link.href : children[1].textContent; + contextualConfig[key] = value; + }); + const label = searchBlock.querySelector('p').textContent; const searchEl = createTag('div', { class: `gnav-search ${isContextual ? SEARCH_TYPE_CONTEXTUAL : ''}` }); - const searchBar = this.decorateSearchBar(label, advancedSearchWrapper); + const searchBar = this.decorateSearchBar(label, advancedSearchWrapper, contextualConfig); const searchButton = createTag( 'button', { @@ -395,7 +404,7 @@ class Gnav { return searchEl; }; - decorateSearchBar = (label, advancedSearchEl) => { + decorateSearchBar = (label, advancedSearchEl, contextualConfig) => { const searchBar = createTag('aside', { id: 'gnav-search-bar', class: 'gnav-search-bar' }); const searchField = createTag('div', { class: 'gnav-search-field' }, SEARCH_ICON); const searchInput = createTag('input', { @@ -417,6 +426,7 @@ class Gnav { locale, searchInputEl: searchInput, advancedSearchEl, + contextualConfig, }); }); From 40670a4d79a4f556fda9086760411376a759c769 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?ilyas=20St=C3=A9phane=20T=C3=BCrkben?= Date: Wed, 13 Mar 2024 23:14:29 +0100 Subject: [PATCH 3/5] MWPW-143673: Load Milo fragment modals from co links (#1972) * MWPW-143673: Load Milo fragment modals from co links --- libs/blocks/merch/merch.css | 24 ++- libs/blocks/merch/merch.js | 70 ++++++-- libs/blocks/modal/modal.css | 4 +- libs/deps/commerce.js | 6 +- test/blocks/merch/merch.test.js | 46 ++++- test/blocks/merch/mocks/body.html | 4 + test/blocks/merch/mocks/embed-utils.js | 2 + test/blocks/merch/mocks/fetch.js | 4 +- .../merch/mocks/fragments/twp-url.plain.html | 5 + .../merch/mocks/fragments/twp.plain.html | 5 + test/blocks/merch/mocks/named-offers.json | 170 +++++++++++------- 11 files changed, 243 insertions(+), 97 deletions(-) create mode 100644 test/blocks/merch/mocks/fragments/twp-url.plain.html create mode 100644 test/blocks/merch/mocks/fragments/twp.plain.html diff --git a/libs/blocks/merch/merch.css b/libs/blocks/merch/merch.css index f0b9532ece..85ec28055a 100644 --- a/libs/blocks/merch/merch.css +++ b/libs/blocks/merch/merch.css @@ -26,10 +26,12 @@ a[is='checkout-link'] > span { content: "\00a0"; } -@media (max-width: 1200px) { +@media (max-width: 1199px) { #checkout-link-modal { height: 100vh; border-radius: 0; + margin-top: 0; + margin-bottom: 0; } } @@ -37,10 +39,30 @@ a[is='checkout-link'] > span { display: flex; } +#checkout-link-modal > .section { + width: 100%; + height: auto; +} + +@media (min-width: 1200px) { + #checkout-link-modal.twp, + #checkout-link-modal.twp .milo-iframe, + #checkout-link-modal.d2p, + #checkout-link-modal.d2p .milo-iframe { + height: 850px; + } + + #checkout-link-modal.crm, + #checkout-link-modal.crm .milo-iframe { + height: 640px; + } +} + #checkout-link-modal iframe { flex: 1; } +#checkout-link-modal iframe.twp, #checkout-link-modal iframe.d2p { max-height: 850px; } diff --git a/libs/blocks/merch/merch.js b/libs/blocks/merch/merch.js index 951ed13fd7..de6946a527 100644 --- a/libs/blocks/merch/merch.js +++ b/libs/blocks/merch/merch.js @@ -1,8 +1,10 @@ -import { createTag, getConfig, loadScript, localizeLink } from '../../utils/utils.js'; +import { + createTag, getConfig, loadArea, loadScript, loadStyle, localizeLink, +} from '../../utils/utils.js'; import { replaceKey } from '../../features/placeholders.js'; -export const priceLiteralsURL = 'https://milo.adobe.com/libs/commerce/price-literals.json'; -export const checkoutLinkConfigURL = 'https://milo.adobe.com/libs/commerce/checkout-link.json'; +export const PRICE_LITERALS_URL = 'https://milo.adobe.com/libs/commerce/price-literals.json'; +export const CHECKOUT_LINK_CONFIG_PATH = '/commerce/checkout-link.json'; // relative to libs. export const PRICE_TEMPLATE_DISCOUNT = 'discount'; export const PRICE_TEMPLATE_OPTICAL = 'optical'; @@ -47,7 +49,7 @@ const LOADING_ENTITLEMENTS = 'loading-entitlements'; let log; let upgradeOffer = null; -export function polyfills() { +export async function polyfills() { if (polyfills.promise) return polyfills.promise; let isSupported = false; document.createElement('div', { @@ -78,9 +80,9 @@ export async function fetchEntitlements() { return fetchEntitlements.promise; } -export async function fetchCheckoutLinkConfigs() { +export async function fetchCheckoutLinkConfigs(base = '') { fetchCheckoutLinkConfigs.promise = fetchCheckoutLinkConfigs.promise - ?? fetch(checkoutLinkConfigURL).catch(() => { + ?? fetch(`${base}${CHECKOUT_LINK_CONFIG_PATH}`).catch(() => { log?.error('Failed to fetch checkout link configs'); }).then((mappings) => { if (!mappings?.ok) return undefined; @@ -90,7 +92,12 @@ export async function fetchCheckoutLinkConfigs() { } export async function getCheckoutLinkConfig(productFamily) { - const checkoutLinkConfigs = await fetchCheckoutLinkConfigs(); + let { base } = getConfig(); + if (/\.page$/.test(document.location.origin)) { + /* c8 ignore next 2 */ + base = base.replace('.live', '.page'); + } + const checkoutLinkConfigs = await fetchCheckoutLinkConfigs(base); const { locale: { region } } = getConfig(); const productFamilyConfigs = checkoutLinkConfigs.data?.filter( ({ [NAME_PRODUCT_FAMILY]: mappingProductFamily }) => mappingProductFamily === productFamily, @@ -115,7 +122,7 @@ export async function getCheckoutLinkConfig(productFamily) { } export async function getDownloadAction(options, imsSignedInPromise, offerFamily) { - if (options.entitlement !== true) return null; + if (options.entitlement !== true) return undefined; const loggedIn = await imsSignedInPromise; if (!loggedIn) return undefined; const entitlements = await fetchEntitlements(); @@ -140,7 +147,7 @@ export async function getDownloadAction(options, imsSignedInPromise, offerFamily } export async function getUpgradeAction(options, imsSignedInPromise, productFamily) { - if (options.entitlement === false) return null; + if (options.entitlement === false) return undefined; const loggedIn = await imsSignedInPromise; if (!loggedIn) return undefined; const entitlements = await fetchEntitlements(); @@ -164,34 +171,59 @@ export async function getUpgradeAction(options, imsSignedInPromise, productFamil return undefined; } -async function openExternalModal(url, getModal, offerType) { - const iframe = createTag('iframe', { +async function openFragmentModal(path, getModal) { + const root = createTag('div'); + root.style.visibility = 'hidden'; + createTag('a', { href: `${path}` }, '', { parent: root }); + const modal = await getModal(null, { + id: 'checkout-link-modal', + content: root, + closeEvent: 'closeModal', + class: 'commerce-frame', + }); + await loadArea(modal); + root.style.visibility = ''; + return modal; +} + +async function openExternalModal(url, getModal) { + await loadStyle(`${getConfig().base}/blocks/iframe/iframe.css`); + const root = createTag('div', { class: 'milo-iframe' }); + createTag('iframe', { src: url, frameborder: '0', marginwidth: '0', marginheight: '0', allowfullscreen: 'true', loading: 'lazy', - class: offerType === OFFER_TYPE_TRIAL ? 'twp' : 'd2p', - }); + }, '', { parent: root }); return getModal(null, { id: 'checkout-link-modal', - content: iframe, + content: root, closeEvent: 'closeModal', - class: ['commerce-frame'], + class: 'commerce-frame', }); } export async function openModal(e, url, offerType) { e.preventDefault(); + e.stopImmediatePropagation(); const { getModal } = await import('../modal/modal.js'); - if (/^https?:/.test(url)) { - openExternalModal(url, getModal, offerType); + const offerTypeClass = offerType === OFFER_TYPE_TRIAL ? 'twp' : 'crm'; + let modal; + if (/\/fragments\//.test(url)) { + const fragmentPath = url.split(/hlx.(page|live)/).pop(); + modal = await openFragmentModal(fragmentPath, getModal); + } else if (/^https?:/.test(url)) { + modal = await openExternalModal(url, getModal); + } + if (modal) { + modal.classList.add(offerTypeClass); } } export async function getModalAction(offers, options, productFamily) { - if (options.modal !== true) return null; + if (options.modal !== true) return undefined; const checkoutLinkConfig = await getCheckoutLinkConfig(productFamily); if (!checkoutLinkConfig) return undefined; const [{ offerType }] = offers; @@ -227,7 +259,7 @@ export async function initService(force = false) { initService.promise = initService.promise ?? polyfills().then(async () => { const commerceLib = await import('../../deps/commerce.js'); const { env, commerce = {}, locale } = getConfig(); - commerce.priceLiteralsURL = priceLiteralsURL; + commerce.priceLiteralsURL = PRICE_LITERALS_URL; const service = await commerceLib.init(() => ({ env, commerce, diff --git a/libs/blocks/modal/modal.css b/libs/blocks/modal/modal.css index a5b2deed5f..54ffaf2710 100644 --- a/libs/blocks/modal/modal.css +++ b/libs/blocks/modal/modal.css @@ -25,8 +25,8 @@ z-index: 103; } -.dialog-modal.commerce-frame .fragment, -.dialog-modal.commerce-frame .section { +.dialog-modal.commerce-frame > .fragment, +.dialog-modal.commerce-frame > .section { height: 100vh; } diff --git a/libs/deps/commerce.js b/libs/deps/commerce.js index 35e8765679..d0cf8be3a8 100644 --- a/libs/deps/commerce.js +++ b/libs/deps/commerce.js @@ -1,5 +1,5 @@ -// branch: develop commit: d517a01bd0bcf745afbb138ce4f3f9d375c01a88 Tue, 27 Feb 2024 14:48:28 GMT -var Gr=Object.defineProperty;var si=(e,t,r)=>t in e?Gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var ai=(e,t)=>{for(var r in t)Gr(e,r,{get:t[r],enumerable:!0})};var ee=(e,t,r)=>(si(e,typeof t!="symbol"?t+"":t,r),r);var Ie;(function(e){e.ServerError="ServerError",e.ClientError="ClientError",e.UnexpectedError="UnexpectedError"})(Ie||(Ie={}));var Fr=(e,t,r)=>({type:(i=>i>=500?Ie.ServerError:i<400?Ie.UnexpectedError:Ie.ClientError)(e),message:t,originatingRequest:r,status:e});var ci=function(e,t,r,n){function i(o){return o instanceof r?o:new r(function(s){s(o)})}return new(r||(r=Promise))(function(o,s){function a(u){try{l(n.next(u))}catch(p){s(p)}}function c(u){try{l(n.throw(u))}catch(p){s(p)}}function l(u){u.done?o(u.value):i(u.value).then(a,c)}l((n=n.apply(e,t||[])).next())})},He;(function(e){e.AUTHORIZATION="Authorization",e.X_API_KEY="X-Api-Key"})(He||(He={}));var Ot=class{constructor(t){this.fetchOptions=t}commonHeaders(){let t={};return this.fetchOptions.apiKey&&(t[He.X_API_KEY]=this.fetchOptions.apiKey),this.fetchOptions.accessToken&&(t[He.AUTHORIZATION]=`Bearer ${this.fetchOptions.accessToken}`),t}transformData(t,r){return r?t.map(n=>r(n)):t.map(n=>this.identifyTransform(n))}transformDatum(t,r){return r?r(t):this.identifyTransform(t)}identifyTransform(t){return t}failOnBadStatusOrParseBody(t,r){return ci(this,void 0,void 0,function*(){if(t.ok)return t.json().then(i=>({headers:t.headers,status:t.status,statusText:t.statusText,data:i}));let n=yield t.text();return Promise.reject(Fr(t.status,n,r))})}buildUrl(t,r,n,i,o){var s;let a=(s=this.fetchOptions.baseUrl)!==null&&s!==void 0?s:i(this.fetchOptions.env),c=o(r,n);return this.generateUrl(a,t,c)}generateUrl(t,r,n){let i=new URL(r,t);return n&&(i.search=this.convertToSearchParams(n).toString()),i.toString()}convertToSearchParams(t){return new URLSearchParams(t)}setParams(t,r,n){n!=null&&typeof n=="boolean"?t[r]=String(n):n&&(t[r]=n)}},wt=Ot;var V;(function(e){e.STAGE="STAGE",e.PRODUCTION="PRODUCTION",e.LOCAL="LOCAL"})(V||(V={}));var Ce;(function(e){e.STAGE="STAGE",e.PRODUCTION="PROD",e.LOCAL="LOCAL"})(Ce||(Ce={}));var M;(function(e){e.DRAFT="DRAFT",e.PUBLISHED="PUBLISHED"})(M||(M={}));var le;(function(e){e.V2="UCv2",e.V3="UCv3"})(le||(le={}));var oe;(function(e){e.CHECKOUT="checkout",e.CHECKOUT_EMAIL="checkout/email",e.SEGMENTATION="segmentation",e.BUNDLE="bundle",e.COMMITMENT="commitment",e.RECOMMENDATION="recommendation",e.EMAIL="email",e.PAYMENT="payment",e.CHANGE_PLAN_TEAM_PLANS="change-plan/team-upgrade/plans",e.CHANGE_PLAN_TEAM_PAYMENT="change-plan/team-upgrade/payment"})(oe||(oe={}));var Lt=function(e){var t;return(t=ui.get(e))!==null&&t!==void 0?t:e},ui=new Map([["countrySpecific","cs"],["quantity","q"],["authCode","code"],["checkoutPromoCode","apc"],["rurl","rUrl"],["curl","cUrl"],["ctxrturl","ctxRtUrl"],["country","co"],["language","lang"],["clientId","cli"],["context","ctx"],["productArrangementCode","pa"],["offerType","ot"],["marketSegment","ms"]]);var Vr=function(e){var t=typeof Symbol=="function"&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},Wr=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],s;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(a){s={error:a}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return o};function ye(e,t,r){var n,i;try{for(var o=Vr(Object.entries(e)),s=o.next();!s.done;s=o.next()){var a=Wr(s.value,2),c=a[0],l=a[1];l!=null&&r.has(c)&&t.set(Lt(c),l)}}catch(u){n={error:u}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}}function Xe(e){switch(e){case V.PRODUCTION:return"https://commerce.adobe.com";default:return"https://commerce-stg.adobe.com"}}function Be(e,t){var r,n;for(var i in e){var o=e[i];try{for(var s=(r=void 0,Vr(Object.entries(o))),a=s.next();!a.done;a=s.next()){var c=Wr(a.value,2),l=c[0],u=c[1];if(u!=null){var p=Lt(l);t.set("items["+i+"]["+p+"]",u)}}}catch(f){r={error:f}}finally{try{a&&!a.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}}}var li=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(e);i=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};function jr(e){hi(e);var t=e.env,r=e.items,n=e.workflowStep,i=li(e,["env","items","workflowStep"]),o=new URL(Xe(t));return o.pathname=n+"/",Be(r,o.searchParams),ye(i,o.searchParams,pi),o.toString()}var pi=new Set(["clientId","country","language","context","cUrl","mv","nglwfdata","otac","promoid","rUrl","sdid","spint","trackingid","authCode","campaignid","appctxid"]),mi=["env","workflowStep","clientId","country","items"];function hi(e){var t,r;try{for(var n=fi(mi),i=n.next();!i.done;i=n.next()){var o=i.value;if(!e[o])throw new Error('Argument "checkoutData" is not valid, missing: '+o)}}catch(s){t={error:s}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return!0}var di=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(e);i=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},xi="p_draft_landscape",gi="/store/";function Nt(e){Ti(e);var t=e.env,r=e.items,n=e.workflowStep,i=e.marketSegment,o=e.offerType,s=e.productArrangementCode,a=e.landscape,c=di(e,["env","items","workflowStep","marketSegment","offerType","productArrangementCode","landscape"]),l={marketSegment:i,offerType:o,productArrangementCode:s},u=new URL(Xe(t));return u.pathname=""+gi+n,n!==oe.SEGMENTATION?Be(r,u.searchParams):ye(l,u.searchParams,Rt),ye(c,u.searchParams,Rt),a===M.DRAFT&&ye({af:xi},u.searchParams,Rt),u.toString()}var Rt=new Set(["clientId","country","language","context","ctxRtUrl","jit","productArrangementCode","marketSegment","offerType","checkoutPromoCode","svar","usid","rUrl","otac","nglwfdata","appctxid","promoid","sdid","trackingid","mv","mv2","ai","sc","csm","th","thm","scl","lo","gsp","so.su","so.ca","so.va","so.tr","context.guid","af","rf","DCWATC","dp","pcid","sid","fr","workflowid","mal"]),yi=["env","workflowStep","clientId","country"];function Ti(e){var t,r;try{for(var n=Ei(yi),i=n.next();!i.done;i=n.next()){var o=i.value;if(!e[o])throw new Error('Argument "checkoutData" is not valid, missing: '+o)}}catch(s){t={error:s}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}if(e.workflowStep!==oe.SEGMENTATION&&!e.items)throw new Error('Argument "checkoutData" is not valid, missing: items');return!0}function It(e,t){switch(e){case le.V2:return jr(t);case le.V3:return Nt(t);default:return console.warn("Unsupported CheckoutType, will use UCv3 as default. Given type: "+e),Nt(t)}}var Ct;(function(e){e.BASE="BASE",e.TRIAL="TRIAL",e.PROMOTION="PROMOTION"})(Ct||(Ct={}));var Ue;(function(e){e.MONTH="MONTH",e.YEAR="YEAR",e.TWO_YEARS="TWO_YEARS",e.THREE_YEARS="THREE_YEARS",e.PERPETUAL="PERPETUAL"})(Ue||(Ue={}));var De;(function(e){e.ANNUAL="ANNUAL",e.MONTHLY="MONTHLY",e.TWO_YEARS="TWO_YEARS",e.THREE_YEARS="THREE_YEARS"})(De||(De={}));var Ut;(function(e){e.INDIVIDUAL="INDIVIDUAL",e.TEAM="TEAM",e.ENTERPRISE="ENTERPRISE"})(Ut||(Ut={}));var Dt;(function(e){e.COM="COM",e.EDU="EDU",e.GOV="GOV"})(Dt||(Dt={}));var Mt;(function(e){e.DIRECT="DIRECT",e.INDIRECT="INDIRECT"})(Mt||(Mt={}));var kt;(function(e){e.ENTERPRISE_PRODUCT="ENTERPRISE_PRODUCT",e.ETLA="ETLA",e.RETAIL="RETAIL",e.VIP="VIP",e.VIPMP="VIPMP",e.FREE="FREE"})(kt||(kt={}));var vi=M.PUBLISHED,Hr=e=>{switch(e){case V.PRODUCTION:return"https://wcs.adobe.io";case V.STAGE:return"https://wcs-stage.adobe.io";case V.LOCAL:return"http://localhost:3002";default:return"https://wcs-stage.adobe.io"}},Xr=(e,t)=>{var r;return e.api_key=t.apiKey,e.landscape=(r=t.landscape)!==null&&r!==void 0?r:vi,e};var bi=function(e,t,r,n){function i(o){return o instanceof r?o:new r(function(s){s(o)})}return new(r||(r=Promise))(function(o,s){function a(u){try{l(n.next(u))}catch(p){s(p)}}function c(u){try{l(n.throw(u))}catch(p){s(p)}}function l(u){u.done?o(u.value):i(u.value).then(a,c)}l((n=n.apply(e,t||[])).next())})},Gt=class extends wt{constructor(t){super(t),this.apiPaths={getWebCommerceArtifact:"web_commerce_artifact"},this.getWebCommerceArtifact=(r,n,i,o)=>bi(this,void 0,void 0,function*(){let s=this.buildUrl(this.apiPaths.getWebCommerceArtifact,n,r,a=>Hr(a),(a,c)=>this.evaluateGetWebCommerceArtifactParams(a,c));return this.fetchOptions.fetch(s,{signal:o,headers:Object.assign({},this.commonHeaders()),mode:"cors"}).then(a=>this.failOnBadStatusOrParseBody(a,`GET ${s}`)).then(a=>{let l=a.data;return{data:this.transformDatum(l,i)}})})}evaluateGetWebCommerceArtifactParams(t,r){let n={};return this.setParams(n,"offer_selector_ids",r.offerSelectorIds.join(",")),this.setParams(n,"country",r.country),this.setParams(n,"language",r.language),this.setParams(n,"currency",r.currency),this.setParams(n,"locale",r.locale),this.setParams(n,"promotion_code",r.promotionCode),Xr(n,t)}},Br=Gt;var Ye=e=>new Br(e).getWebCommerceArtifact;var Yr="tacocat.js";var $e=(e,t)=>String(e??"").toLowerCase()==String(t??"").toLowerCase(),$r=e=>`${e??""}`.replace(/[&<>'"]/g,t=>({"&":"&","<":"<",">":">","'":"'",'"':"""})[t]??t)??"";function _(e,t={},{metadata:r=!0,search:n=!0,storage:i=!0}={}){let o;if(n&&o==null){let s=new URLSearchParams(window.location.search),a=Te(n)?n:e;o=s.get(a)}if(i&&o==null){let s=Te(i)?i:e;o=window.sessionStorage.getItem(s)??window.localStorage.getItem(s)}if(r&&o==null){let s=Zr(Te(r)?r:e);o=document.documentElement.querySelector(`meta[name="${s}"]`)?.content}return o??t[e]}var ve=()=>{};var qr=e=>typeof e=="boolean",se=e=>typeof e=="function",qe=e=>typeof e=="number",zr=e=>e!=null&&typeof e=="object";var Te=e=>typeof e=="string",Ft=e=>Te(e)&&e,be=e=>qe(e)&&Number.isFinite(e)&&e>0;function Se(e,t=r=>r==null||r===""){return e!=null&&Object.entries(e).forEach(([r,n])=>{t(n)&&delete e[r]}),e}function T(e,t){if(qr(e))return e;let r=String(e);return r==="1"||r==="true"?!0:r==="0"||r==="false"?!1:t}function te(e,t,r){let n=Object.values(t);return n.find(i=>$e(i,e))??r??n[0]}function Zr(e=""){return String(e).replace(/(\p{Lowercase_Letter})(\p{Uppercase_Letter})/gu,(t,r,n)=>`${r}-${n}`).replace(/\W+/gu,"-").toLowerCase()}function Ae(e,t=1){return qe(e)||(e=Number.parseInt(e,10)),!Number.isNaN(e)&&e>0&&Number.isFinite(e)?e:t}var Si=Date.now(),Vt=()=>`(+${Date.now()-Si}ms)`,ze=new Set,Ai=T(_("tacocat.debug",{},{metadata:!1}),typeof process<"u"&&process.env?.DEBUG);function Qr(e){let t=`[${Yr}/${e}]`,r=(s,a,...c)=>s?!0:(i(a,...c),!1),n=Ai?(s,...a)=>{console.debug(`${t} ${s}`,...a,Vt())}:()=>{},i=(s,...a)=>{let c=`${t} ${s}`;ze.forEach(([l])=>l(c,...a))};return{assert:r,debug:n,error:i,warn:(s,...a)=>{let c=`${t} ${s}`;ze.forEach(([,l])=>l(c,...a))}}}function Pi(e,t){let r=[e,t];return ze.add(r),()=>{ze.delete(r)}}Pi((e,...t)=>{console.error(e,...t,Vt())},(e,...t)=>{console.warn(e,...t,Vt())});var _i="no promo",Jr="promo-tag",Oi="yellow",wi="neutral",Li=(e,t,r)=>{let n=o=>o||_i,i=r?` (was "${n(t)}")`:"";return`${n(e)}${i}`},Ri="cancel-context",Me=(e,t)=>{let r=e===Ri,n=!r&&e?.length>0,i=(n||r)&&(t&&t!=e||!t&&!r),o=i&&n||!i&&!!t,s=o?e||t:void 0;return{effectivePromoCode:s,overridenPromoCode:e,className:o?Jr:`${Jr} no-promo`,text:Li(s,t,i),variant:o?Oi:wi,isOverriden:i}};var Wt=function(e,t){return Wt=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[i]=n[i])},Wt(e,t)};function ke(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Wt(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}var g=function(){return g=Object.assign||function(t){for(var r,n=1,i=arguments.length;n0}),r=[],n=0,i=t;n1)throw new RangeError("integer-width stems only accept a single optional option");i.options[0].replace(Ci,function(a,c,l,u,p,f){if(c)t.minimumIntegerDigits=l.length;else{if(u&&p)throw new Error("We currently do not support maximum integer digits");if(f)throw new Error("We currently do not support exact integer digits")}return""});continue}if(un.test(i.stem)){t.minimumIntegerDigits=i.stem.length;continue}if(nn.test(i.stem)){if(i.options.length>1)throw new RangeError("Fraction-precision stems only accept a single optional option");i.stem.replace(nn,function(a,c,l,u,p,f){return l==="*"?t.minimumFractionDigits=c.length:u&&u[0]==="#"?t.maximumFractionDigits=u.length:p&&f?(t.minimumFractionDigits=p.length,t.maximumFractionDigits=p.length+f.length):(t.minimumFractionDigits=c.length,t.maximumFractionDigits=c.length),""}),i.options.length&&(t=g(g({},t),on(i.options[0])));continue}if(cn.test(i.stem)){t=g(g({},t),on(i.stem));continue}var o=ln(i.stem);o&&(t=g(g({},t),o));var s=Ui(i.stem);s&&(t=g(g({},t),s))}return t}var Xt,Di=new RegExp("^"+Ht.source+"*"),Mi=new RegExp(Ht.source+"*$");function E(e,t){return{start:e,end:t}}var ki=!!String.prototype.startsWith,Gi=!!String.fromCodePoint,Fi=!!Object.fromEntries,Vi=!!String.prototype.codePointAt,Wi=!!String.prototype.trimStart,ji=!!String.prototype.trimEnd,Hi=!!Number.isSafeInteger,Xi=Hi?Number.isSafeInteger:function(e){return typeof e=="number"&&isFinite(e)&&Math.floor(e)===e&&Math.abs(e)<=9007199254740991},Yt=!0;try{pn=En("([^\\p{White_Space}\\p{Pattern_Syntax}]*)","yu"),Yt=((Xt=pn.exec("a"))===null||Xt===void 0?void 0:Xt[0])==="a"}catch{Yt=!1}var pn,mn=ki?function(t,r,n){return t.startsWith(r,n)}:function(t,r,n){return t.slice(n,n+r.length)===r},$t=Gi?String.fromCodePoint:function(){for(var t=[],r=0;ro;){if(s=t[o++],s>1114111)throw RangeError(s+" is not a valid code point");n+=s<65536?String.fromCharCode(s):String.fromCharCode(((s-=65536)>>10)+55296,s%1024+56320)}return n},hn=Fi?Object.fromEntries:function(t){for(var r={},n=0,i=t;n=n)){var i=t.charCodeAt(r),o;return i<55296||i>56319||r+1===n||(o=t.charCodeAt(r+1))<56320||o>57343?i:(i-55296<<10)+(o-56320)+65536}},Bi=Wi?function(t){return t.trimStart()}:function(t){return t.replace(Di,"")},Yi=ji?function(t){return t.trimEnd()}:function(t){return t.replace(Mi,"")};function En(e,t){return new RegExp(e,t)}var qt;Yt?(Bt=En("([^\\p{White_Space}\\p{Pattern_Syntax}]*)","yu"),qt=function(t,r){var n;Bt.lastIndex=r;var i=Bt.exec(t);return(n=i[1])!==null&&n!==void 0?n:""}):qt=function(t,r){for(var n=[];;){var i=dn(t,r);if(i===void 0||gn(i)||zi(i))break;n.push(i),r+=i>=65536?2:1}return $t.apply(void 0,n)};var Bt,xn=function(){function e(t,r){r===void 0&&(r={}),this.message=t,this.position={offset:0,line:1,column:1},this.ignoreTag=!!r.ignoreTag,this.requiresOtherClause=!!r.requiresOtherClause,this.shouldParseSkeletons=!!r.shouldParseSkeletons}return e.prototype.parse=function(){if(this.offset()!==0)throw Error("parser can only be used once");return this.parseMessage(0,"",!1)},e.prototype.parseMessage=function(t,r,n){for(var i=[];!this.isEOF();){var o=this.char();if(o===123){var s=this.parseArgument(t,n);if(s.err)return s;i.push(s.val)}else{if(o===125&&t>0)break;if(o===35&&(r==="plural"||r==="selectordinal")){var a=this.clonePosition();this.bump(),i.push({type:P.pound,location:E(a,this.clonePosition())})}else if(o===60&&!this.ignoreTag&&this.peek()===47){if(n)break;return this.error(d.UNMATCHED_CLOSING_TAG,E(this.clonePosition(),this.clonePosition()))}else if(o===60&&!this.ignoreTag&&zt(this.peek()||0)){var s=this.parseTag(t,r);if(s.err)return s;i.push(s.val)}else{var s=this.parseLiteral(t,r);if(s.err)return s;i.push(s.val)}}}return{val:i,err:null}},e.prototype.parseTag=function(t,r){var n=this.clonePosition();this.bump();var i=this.parseTagName();if(this.bumpSpace(),this.bumpIf("/>"))return{val:{type:P.literal,value:"<"+i+"/>",location:E(n,this.clonePosition())},err:null};if(this.bumpIf(">")){var o=this.parseMessage(t+1,r,!0);if(o.err)return o;var s=o.val,a=this.clonePosition();if(this.bumpIf("")?{val:{type:P.tag,value:i,children:s,location:E(n,this.clonePosition())},err:null}:this.error(d.INVALID_TAG,E(a,this.clonePosition())))}else return this.error(d.UNCLOSED_TAG,E(n,this.clonePosition()))}else return this.error(d.INVALID_TAG,E(n,this.clonePosition()))},e.prototype.parseTagName=function(){var t=this.offset();for(this.bump();!this.isEOF()&&qi(this.char());)this.bump();return this.message.slice(t,this.offset())},e.prototype.parseLiteral=function(t,r){for(var n=this.clonePosition(),i="";;){var o=this.tryParseQuote(r);if(o){i+=o;continue}var s=this.tryParseUnquoted(t,r);if(s){i+=s;continue}var a=this.tryParseLeftAngleBracket();if(a){i+=a;continue}break}var c=E(n,this.clonePosition());return{val:{type:P.literal,value:i,location:c},err:null}},e.prototype.tryParseLeftAngleBracket=function(){return!this.isEOF()&&this.char()===60&&(this.ignoreTag||!$i(this.peek()||0))?(this.bump(),"<"):null},e.prototype.tryParseQuote=function(t){if(this.isEOF()||this.char()!==39)return null;switch(this.peek()){case 39:return this.bump(),this.bump(),"'";case 123:case 60:case 62:case 125:break;case 35:if(t==="plural"||t==="selectordinal")break;return null;default:return null}this.bump();var r=[this.char()];for(this.bump();!this.isEOF();){var n=this.char();if(n===39)if(this.peek()===39)r.push(39),this.bump();else{this.bump();break}else r.push(n);this.bump()}return $t.apply(void 0,r)},e.prototype.tryParseUnquoted=function(t,r){if(this.isEOF())return null;var n=this.char();return n===60||n===123||n===35&&(r==="plural"||r==="selectordinal")||n===125&&t>0?null:(this.bump(),$t(n))},e.prototype.parseArgument=function(t,r){var n=this.clonePosition();if(this.bump(),this.bumpSpace(),this.isEOF())return this.error(d.EXPECT_ARGUMENT_CLOSING_BRACE,E(n,this.clonePosition()));if(this.char()===125)return this.bump(),this.error(d.EMPTY_ARGUMENT,E(n,this.clonePosition()));var i=this.parseIdentifierIfPossible().value;if(!i)return this.error(d.MALFORMED_ARGUMENT,E(n,this.clonePosition()));if(this.bumpSpace(),this.isEOF())return this.error(d.EXPECT_ARGUMENT_CLOSING_BRACE,E(n,this.clonePosition()));switch(this.char()){case 125:return this.bump(),{val:{type:P.argument,value:i,location:E(n,this.clonePosition())},err:null};case 44:return this.bump(),this.bumpSpace(),this.isEOF()?this.error(d.EXPECT_ARGUMENT_CLOSING_BRACE,E(n,this.clonePosition())):this.parseArgumentOptions(t,r,i,n);default:return this.error(d.MALFORMED_ARGUMENT,E(n,this.clonePosition()))}},e.prototype.parseIdentifierIfPossible=function(){var t=this.clonePosition(),r=this.offset(),n=qt(this.message,r),i=r+n.length;this.bumpTo(i);var o=this.clonePosition(),s=E(t,o);return{value:n,location:s}},e.prototype.parseArgumentOptions=function(t,r,n,i){var o,s=this.clonePosition(),a=this.parseIdentifierIfPossible().value,c=this.clonePosition();switch(a){case"":return this.error(d.EXPECT_ARGUMENT_TYPE,E(s,c));case"number":case"date":case"time":{this.bumpSpace();var l=null;if(this.bumpIf(",")){this.bumpSpace();var u=this.clonePosition(),p=this.parseSimpleArgStyleIfPossible();if(p.err)return p;var f=Yi(p.val);if(f.length===0)return this.error(d.EXPECT_ARGUMENT_STYLE,E(this.clonePosition(),this.clonePosition()));var m=E(u,this.clonePosition());l={style:f,styleLocation:m}}var h=this.tryParseArgumentClose(i);if(h.err)return h;var v=E(i,this.clonePosition());if(l&&mn(l?.style,"::",0)){var b=Bi(l.style.slice(2));if(a==="number"){var p=this.parseNumberSkeletonFromString(b,l.styleLocation);return p.err?p:{val:{type:P.number,value:n,location:v,style:p.val},err:null}}else{if(b.length===0)return this.error(d.EXPECT_DATE_TIME_SKELETON,v);var f={type:fe.dateTime,pattern:b,location:l.styleLocation,parsedOptions:this.shouldParseSkeletons?tn(b):{}},O=a==="date"?P.date:P.time;return{val:{type:O,value:n,location:v,style:f},err:null}}}return{val:{type:a==="number"?P.number:a==="date"?P.date:P.time,value:n,location:v,style:(o=l?.style)!==null&&o!==void 0?o:null},err:null}}case"plural":case"selectordinal":case"select":{var A=this.clonePosition();if(this.bumpSpace(),!this.bumpIf(","))return this.error(d.EXPECT_SELECT_ARGUMENT_OPTIONS,E(A,g({},A)));this.bumpSpace();var x=this.parseIdentifierIfPossible(),S=0;if(a!=="select"&&x.value==="offset"){if(!this.bumpIf(":"))return this.error(d.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,E(this.clonePosition(),this.clonePosition()));this.bumpSpace();var p=this.tryParseDecimalInteger(d.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,d.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);if(p.err)return p;this.bumpSpace(),x=this.parseIdentifierIfPossible(),S=p.val}var w=this.tryParsePluralOrSelectOptions(t,a,r,x);if(w.err)return w;var h=this.tryParseArgumentClose(i);if(h.err)return h;var I=E(i,this.clonePosition());return a==="select"?{val:{type:P.select,value:n,options:hn(w.val),location:I},err:null}:{val:{type:P.plural,value:n,options:hn(w.val),offset:S,pluralType:a==="plural"?"cardinal":"ordinal",location:I},err:null}}default:return this.error(d.INVALID_ARGUMENT_TYPE,E(s,c))}},e.prototype.tryParseArgumentClose=function(t){return this.isEOF()||this.char()!==125?this.error(d.EXPECT_ARGUMENT_CLOSING_BRACE,E(t,this.clonePosition())):(this.bump(),{val:!0,err:null})},e.prototype.parseSimpleArgStyleIfPossible=function(){for(var t=0,r=this.clonePosition();!this.isEOF();){var n=this.char();switch(n){case 39:{this.bump();var i=this.clonePosition();if(!this.bumpUntil("'"))return this.error(d.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE,E(i,this.clonePosition()));this.bump();break}case 123:{t+=1,this.bump();break}case 125:{if(t>0)t-=1;else return{val:this.message.slice(r.offset,this.offset()),err:null};break}default:this.bump();break}}return{val:this.message.slice(r.offset,this.offset()),err:null}},e.prototype.parseNumberSkeletonFromString=function(t,r){var n=[];try{n=an(t)}catch{return this.error(d.INVALID_NUMBER_SKELETON,r)}return{val:{type:fe.number,tokens:n,location:r,parsedOptions:this.shouldParseSkeletons?fn(n):{}},err:null}},e.prototype.tryParsePluralOrSelectOptions=function(t,r,n,i){for(var o,s=!1,a=[],c=new Set,l=i.value,u=i.location;;){if(l.length===0){var p=this.clonePosition();if(r!=="select"&&this.bumpIf("=")){var f=this.tryParseDecimalInteger(d.EXPECT_PLURAL_ARGUMENT_SELECTOR,d.INVALID_PLURAL_ARGUMENT_SELECTOR);if(f.err)return f;u=E(p,this.clonePosition()),l=this.message.slice(p.offset,this.offset())}else break}if(c.has(l))return this.error(r==="select"?d.DUPLICATE_SELECT_ARGUMENT_SELECTOR:d.DUPLICATE_PLURAL_ARGUMENT_SELECTOR,u);l==="other"&&(s=!0),this.bumpSpace();var m=this.clonePosition();if(!this.bumpIf("{"))return this.error(r==="select"?d.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT:d.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT,E(this.clonePosition(),this.clonePosition()));var h=this.parseMessage(t+1,r,n);if(h.err)return h;var v=this.tryParseArgumentClose(m);if(v.err)return v;a.push([l,{value:h.val,location:E(m,this.clonePosition())}]),c.add(l),this.bumpSpace(),o=this.parseIdentifierIfPossible(),l=o.value,u=o.location}return a.length===0?this.error(r==="select"?d.EXPECT_SELECT_ARGUMENT_SELECTOR:d.EXPECT_PLURAL_ARGUMENT_SELECTOR,E(this.clonePosition(),this.clonePosition())):this.requiresOtherClause&&!s?this.error(d.MISSING_OTHER_CLAUSE,E(this.clonePosition(),this.clonePosition())):{val:a,err:null}},e.prototype.tryParseDecimalInteger=function(t,r){var n=1,i=this.clonePosition();this.bumpIf("+")||this.bumpIf("-")&&(n=-1);for(var o=!1,s=0;!this.isEOF();){var a=this.char();if(a>=48&&a<=57)o=!0,s=s*10+(a-48),this.bump();else break}var c=E(i,this.clonePosition());return o?(s*=n,Xi(s)?{val:s,err:null}:this.error(r,c)):this.error(t,c)},e.prototype.offset=function(){return this.position.offset},e.prototype.isEOF=function(){return this.offset()===this.message.length},e.prototype.clonePosition=function(){return{offset:this.position.offset,line:this.position.line,column:this.position.column}},e.prototype.char=function(){var t=this.position.offset;if(t>=this.message.length)throw Error("out of bound");var r=dn(this.message,t);if(r===void 0)throw Error("Offset "+t+" is at invalid UTF-16 code unit boundary");return r},e.prototype.error=function(t,r){return{val:null,err:{kind:t,message:this.message,location:r}}},e.prototype.bump=function(){if(!this.isEOF()){var t=this.char();t===10?(this.position.line+=1,this.position.column=1,this.position.offset+=1):(this.position.column+=1,this.position.offset+=t<65536?1:2)}},e.prototype.bumpIf=function(t){if(mn(this.message,t,this.offset())){for(var r=0;r=0?(this.bumpTo(n),!0):(this.bumpTo(this.message.length),!1)},e.prototype.bumpTo=function(t){if(this.offset()>t)throw Error("targetOffset "+t+" must be greater than or equal to the current offset "+this.offset());for(t=Math.min(t,this.message.length);;){var r=this.offset();if(r===t)break;if(r>t)throw Error("targetOffset "+t+" is at invalid UTF-16 code unit boundary");if(this.bump(),this.isEOF())break}},e.prototype.bumpSpace=function(){for(;!this.isEOF()&&gn(this.char());)this.bump()},e.prototype.peek=function(){if(this.isEOF())return null;var t=this.char(),r=this.offset(),n=this.message.charCodeAt(r+(t>=65536?2:1));return n??null},e}();function zt(e){return e>=97&&e<=122||e>=65&&e<=90}function $i(e){return zt(e)||e===47}function qi(e){return e===45||e===46||e>=48&&e<=57||e===95||e>=97&&e<=122||e>=65&&e<=90||e==183||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8255&&e<=8256||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function gn(e){return e>=9&&e<=13||e===32||e===133||e>=8206&&e<=8207||e===8232||e===8233}function zi(e){return e>=33&&e<=35||e===36||e>=37&&e<=39||e===40||e===41||e===42||e===43||e===44||e===45||e>=46&&e<=47||e>=58&&e<=59||e>=60&&e<=62||e>=63&&e<=64||e===91||e===92||e===93||e===94||e===96||e===123||e===124||e===125||e===126||e===161||e>=162&&e<=165||e===166||e===167||e===169||e===171||e===172||e===174||e===176||e===177||e===182||e===187||e===191||e===215||e===247||e>=8208&&e<=8213||e>=8214&&e<=8215||e===8216||e===8217||e===8218||e>=8219&&e<=8220||e===8221||e===8222||e===8223||e>=8224&&e<=8231||e>=8240&&e<=8248||e===8249||e===8250||e>=8251&&e<=8254||e>=8257&&e<=8259||e===8260||e===8261||e===8262||e>=8263&&e<=8273||e===8274||e===8275||e>=8277&&e<=8286||e>=8592&&e<=8596||e>=8597&&e<=8601||e>=8602&&e<=8603||e>=8604&&e<=8607||e===8608||e>=8609&&e<=8610||e===8611||e>=8612&&e<=8613||e===8614||e>=8615&&e<=8621||e===8622||e>=8623&&e<=8653||e>=8654&&e<=8655||e>=8656&&e<=8657||e===8658||e===8659||e===8660||e>=8661&&e<=8691||e>=8692&&e<=8959||e>=8960&&e<=8967||e===8968||e===8969||e===8970||e===8971||e>=8972&&e<=8991||e>=8992&&e<=8993||e>=8994&&e<=9e3||e===9001||e===9002||e>=9003&&e<=9083||e===9084||e>=9085&&e<=9114||e>=9115&&e<=9139||e>=9140&&e<=9179||e>=9180&&e<=9185||e>=9186&&e<=9254||e>=9255&&e<=9279||e>=9280&&e<=9290||e>=9291&&e<=9311||e>=9472&&e<=9654||e===9655||e>=9656&&e<=9664||e===9665||e>=9666&&e<=9719||e>=9720&&e<=9727||e>=9728&&e<=9838||e===9839||e>=9840&&e<=10087||e===10088||e===10089||e===10090||e===10091||e===10092||e===10093||e===10094||e===10095||e===10096||e===10097||e===10098||e===10099||e===10100||e===10101||e>=10132&&e<=10175||e>=10176&&e<=10180||e===10181||e===10182||e>=10183&&e<=10213||e===10214||e===10215||e===10216||e===10217||e===10218||e===10219||e===10220||e===10221||e===10222||e===10223||e>=10224&&e<=10239||e>=10240&&e<=10495||e>=10496&&e<=10626||e===10627||e===10628||e===10629||e===10630||e===10631||e===10632||e===10633||e===10634||e===10635||e===10636||e===10637||e===10638||e===10639||e===10640||e===10641||e===10642||e===10643||e===10644||e===10645||e===10646||e===10647||e===10648||e>=10649&&e<=10711||e===10712||e===10713||e===10714||e===10715||e>=10716&&e<=10747||e===10748||e===10749||e>=10750&&e<=11007||e>=11008&&e<=11055||e>=11056&&e<=11076||e>=11077&&e<=11078||e>=11079&&e<=11084||e>=11085&&e<=11123||e>=11124&&e<=11125||e>=11126&&e<=11157||e===11158||e>=11159&&e<=11263||e>=11776&&e<=11777||e===11778||e===11779||e===11780||e===11781||e>=11782&&e<=11784||e===11785||e===11786||e===11787||e===11788||e===11789||e>=11790&&e<=11798||e===11799||e>=11800&&e<=11801||e===11802||e===11803||e===11804||e===11805||e>=11806&&e<=11807||e===11808||e===11809||e===11810||e===11811||e===11812||e===11813||e===11814||e===11815||e===11816||e===11817||e>=11818&&e<=11822||e===11823||e>=11824&&e<=11833||e>=11834&&e<=11835||e>=11836&&e<=11839||e===11840||e===11841||e===11842||e>=11843&&e<=11855||e>=11856&&e<=11857||e===11858||e>=11859&&e<=11903||e>=12289&&e<=12291||e===12296||e===12297||e===12298||e===12299||e===12300||e===12301||e===12302||e===12303||e===12304||e===12305||e>=12306&&e<=12307||e===12308||e===12309||e===12310||e===12311||e===12312||e===12313||e===12314||e===12315||e===12316||e===12317||e>=12318&&e<=12319||e===12320||e===12336||e===64830||e===64831||e>=65093&&e<=65094}function Zt(e){e.forEach(function(t){if(delete t.location,et(t)||tt(t))for(var r in t.options)delete t.options[r].location,Zt(t.options[r].value);else Qe(t)&&nt(t.style)||(Je(t)||Ke(t))&&Ge(t.style)?delete t.style.location:rt(t)&&Zt(t.children)})}function yn(e,t){t===void 0&&(t={}),t=g({shouldParseSkeletons:!0,requiresOtherClause:!0},t);var r=new xn(e,t).parse();if(r.err){var n=SyntaxError(d[r.err.kind]);throw n.location=r.err.location,n.originalMessage=r.err.message,n}return t?.captureLocation||Zt(r.val),r.val}function Fe(e,t){var r=t&&t.cache?t.cache:to,n=t&&t.serializer?t.serializer:eo,i=t&&t.strategy?t.strategy:Qi;return i(e,{cache:r,serializer:n})}function Zi(e){return e==null||typeof e=="number"||typeof e=="boolean"}function Tn(e,t,r,n){var i=Zi(n)?n:r(n),o=t.get(i);return typeof o>"u"&&(o=e.call(this,n),t.set(i,o)),o}function vn(e,t,r){var n=Array.prototype.slice.call(arguments,3),i=r(n),o=t.get(i);return typeof o>"u"&&(o=e.apply(this,n),t.set(i,o)),o}function Qt(e,t,r,n,i){return r.bind(t,e,n,i)}function Qi(e,t){var r=e.length===1?Tn:vn;return Qt(e,this,r,t.cache.create(),t.serializer)}function Ji(e,t){return Qt(e,this,vn,t.cache.create(),t.serializer)}function Ki(e,t){return Qt(e,this,Tn,t.cache.create(),t.serializer)}var eo=function(){return JSON.stringify(arguments)};function Jt(){this.cache=Object.create(null)}Jt.prototype.get=function(e){return this.cache[e]};Jt.prototype.set=function(e,t){this.cache[e]=t};var to={create:function(){return new Jt}},it={variadic:Ji,monadic:Ki};var pe;(function(e){e.MISSING_VALUE="MISSING_VALUE",e.INVALID_VALUE="INVALID_VALUE",e.MISSING_INTL_API="MISSING_INTL_API"})(pe||(pe={}));var Ve=function(e){ke(t,e);function t(r,n,i){var o=e.call(this,r)||this;return o.code=n,o.originalMessage=i,o}return t.prototype.toString=function(){return"[formatjs Error: "+this.code+"] "+this.message},t}(Error);var Kt=function(e){ke(t,e);function t(r,n,i,o){return e.call(this,'Invalid values for "'+r+'": "'+n+'". Options are "'+Object.keys(i).join('", "')+'"',pe.INVALID_VALUE,o)||this}return t}(Ve);var bn=function(e){ke(t,e);function t(r,n,i){return e.call(this,'Value for "'+r+'" must be of type '+n,pe.INVALID_VALUE,i)||this}return t}(Ve);var Sn=function(e){ke(t,e);function t(r,n){return e.call(this,'The intl string context variable "'+r+'" was not provided to the string "'+n+'"',pe.MISSING_VALUE,n)||this}return t}(Ve);var R;(function(e){e[e.literal=0]="literal",e[e.object=1]="object"})(R||(R={}));function ro(e){return e.length<2?e:e.reduce(function(t,r){var n=t[t.length-1];return!n||n.type!==R.literal||r.type!==R.literal?t.push(r):n.value+=r.value,t},[])}function no(e){return typeof e=="function"}function We(e,t,r,n,i,o,s){if(e.length===1&&jt(e[0]))return[{type:R.literal,value:e[0].value}];for(var a=[],c=0,l=e;ct in e?Wr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:r}):e[t]=r;var pi=(e,t)=>{for(var r in t)Wr(e,r,{get:t[r],enumerable:!0})};var ee=(e,t,r)=>(fi(e,typeof t!="symbol"?t+"":t,r),r),jr=(e,t,r)=>{if(!t.has(e))throw TypeError("Cannot "+r)};var wt=(e,t,r)=>(jr(e,t,"read from private field"),r?r.call(e):t.get(e)),Hr=(e,t,r)=>{if(t.has(e))throw TypeError("Cannot add the same private member more than once");t instanceof WeakSet?t.add(e):t.set(e,r)},Lt=(e,t,r,n)=>(jr(e,t,"write to private field"),n?n.call(e,r):t.set(e,r),r);var Ce;(function(e){e.ServerError="ServerError",e.ClientError="ClientError",e.UnexpectedError="UnexpectedError"})(Ce||(Ce={}));var Xr=(e,t,r)=>({type:(i=>i>=500?Ce.ServerError:i<400?Ce.UnexpectedError:Ce.ClientError)(e),message:t,originatingRequest:r,status:e});var mi=function(e,t,r,n){function i(o){return o instanceof r?o:new r(function(s){s(o)})}return new(r||(r=Promise))(function(o,s){function a(u){try{l(n.next(u))}catch(p){s(p)}}function c(u){try{l(n.throw(u))}catch(p){s(p)}}function l(u){u.done?o(u.value):i(u.value).then(a,c)}l((n=n.apply(e,t||[])).next())})},Xe;(function(e){e.AUTHORIZATION="Authorization",e.X_API_KEY="X-Api-Key"})(Xe||(Xe={}));var Rt=class{constructor(t){this.fetchOptions=t}commonHeaders(){let t={};return this.fetchOptions.apiKey&&(t[Xe.X_API_KEY]=this.fetchOptions.apiKey),this.fetchOptions.accessToken&&(t[Xe.AUTHORIZATION]=`Bearer ${this.fetchOptions.accessToken}`),t}transformData(t,r){return r?t.map(n=>r(n)):t.map(n=>this.identifyTransform(n))}transformDatum(t,r){return r?r(t):this.identifyTransform(t)}identifyTransform(t){return t}failOnBadStatusOrParseBody(t,r){return mi(this,void 0,void 0,function*(){if(t.ok)return t.json().then(i=>({headers:t.headers,status:t.status,statusText:t.statusText,data:i}));let n=yield t.text();return Promise.reject(Xr(t.status,n,r))})}buildUrl(t,r,n,i,o){var s;let a=(s=this.fetchOptions.baseUrl)!==null&&s!==void 0?s:i(this.fetchOptions.env),c=o(r,n);return this.generateUrl(a,t,c)}generateUrl(t,r,n){let i=new URL(r,t);return n&&(i.search=this.convertToSearchParams(n).toString()),i.toString()}convertToSearchParams(t){return new URLSearchParams(t)}setParams(t,r,n){n!=null&&typeof n=="boolean"?t[r]=String(n):n&&(t[r]=n)}},Nt=Rt;var V;(function(e){e.STAGE="STAGE",e.PRODUCTION="PRODUCTION",e.LOCAL="LOCAL"})(V||(V={}));var Ue;(function(e){e.STAGE="STAGE",e.PRODUCTION="PROD",e.LOCAL="LOCAL"})(Ue||(Ue={}));var M;(function(e){e.DRAFT="DRAFT",e.PUBLISHED="PUBLISHED"})(M||(M={}));var le;(function(e){e.V2="UCv2",e.V3="UCv3"})(le||(le={}));var oe;(function(e){e.CHECKOUT="checkout",e.CHECKOUT_EMAIL="checkout/email",e.SEGMENTATION="segmentation",e.BUNDLE="bundle",e.COMMITMENT="commitment",e.RECOMMENDATION="recommendation",e.EMAIL="email",e.PAYMENT="payment",e.CHANGE_PLAN_TEAM_PLANS="change-plan/team-upgrade/plans",e.CHANGE_PLAN_TEAM_PAYMENT="change-plan/team-upgrade/payment"})(oe||(oe={}));var It=function(e){var t;return(t=hi.get(e))!==null&&t!==void 0?t:e},hi=new Map([["countrySpecific","cs"],["quantity","q"],["authCode","code"],["checkoutPromoCode","apc"],["rurl","rUrl"],["curl","cUrl"],["ctxrturl","ctxRtUrl"],["country","co"],["language","lang"],["clientId","cli"],["context","ctx"],["productArrangementCode","pa"],["offerType","ot"],["marketSegment","ms"]]);var Br=function(e){var t=typeof Symbol=="function"&&Symbol.iterator,r=t&&e[t],n=0;if(r)return r.call(e);if(e&&typeof e.length=="number")return{next:function(){return e&&n>=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},Yr=function(e,t){var r=typeof Symbol=="function"&&e[Symbol.iterator];if(!r)return e;var n=r.call(e),i,o=[],s;try{for(;(t===void 0||t-- >0)&&!(i=n.next()).done;)o.push(i.value)}catch(a){s={error:a}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(s)throw s.error}}return o};function Te(e,t,r){var n,i;try{for(var o=Br(Object.entries(e)),s=o.next();!s.done;s=o.next()){var a=Yr(s.value,2),c=a[0],l=a[1];l!=null&&r.has(c)&&t.set(It(c),l)}}catch(u){n={error:u}}finally{try{s&&!s.done&&(i=o.return)&&i.call(o)}finally{if(n)throw n.error}}}function Be(e){switch(e){case V.PRODUCTION:return"https://commerce.adobe.com";default:return"https://commerce-stg.adobe.com"}}function Ye(e,t){var r,n;for(var i in e){var o=e[i];try{for(var s=(r=void 0,Br(Object.entries(o))),a=s.next();!a.done;a=s.next()){var c=Yr(a.value,2),l=c[0],u=c[1];if(u!=null){var p=It(l);t.set("items["+i+"]["+p+"]",u)}}}catch(f){r={error:f}}finally{try{a&&!a.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.error}}}}var di=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(e);i=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")};function $r(e){yi(e);var t=e.env,r=e.items,n=e.workflowStep,i=di(e,["env","items","workflowStep"]),o=new URL(Be(t));return o.pathname=n+"/",Ye(r,o.searchParams),Te(i,o.searchParams,xi),o.toString()}var xi=new Set(["clientId","country","language","context","cUrl","mv","nglwfdata","otac","promoid","rUrl","sdid","spint","trackingid","authCode","campaignid","appctxid"]),gi=["env","workflowStep","clientId","country","items"];function yi(e){var t,r;try{for(var n=Ei(gi),i=n.next();!i.done;i=n.next()){var o=i.value;if(!e[o])throw new Error('Argument "checkoutData" is not valid, missing: '+o)}}catch(s){t={error:s}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}return!0}var Ti=function(e,t){var r={};for(var n in e)Object.prototype.hasOwnProperty.call(e,n)&&t.indexOf(n)<0&&(r[n]=e[n]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(e);i=e.length&&(e=void 0),{value:e&&e[n++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")},bi="p_draft_landscape",Si="/store/";function Ut(e){Pi(e);var t=e.env,r=e.items,n=e.workflowStep,i=e.marketSegment,o=e.offerType,s=e.productArrangementCode,a=e.landscape,c=Ti(e,["env","items","workflowStep","marketSegment","offerType","productArrangementCode","landscape"]),l={marketSegment:i,offerType:o,productArrangementCode:s},u=new URL(Be(t));return u.pathname=""+Si+n,n!==oe.SEGMENTATION?Ye(r,u.searchParams):Te(l,u.searchParams,Ct),Te(c,u.searchParams,Ct),a===M.DRAFT&&Te({af:bi},u.searchParams,Ct),u.toString()}var Ct=new Set(["clientId","country","language","context","ctxRtUrl","jit","productArrangementCode","marketSegment","offerType","checkoutPromoCode","svar","usid","rUrl","otac","nglwfdata","appctxid","promoid","sdid","trackingid","mv","mv2","ai","sc","csm","th","thm","scl","lo","gsp","so.su","so.ca","so.va","so.tr","context.guid","af","rf","DCWATC","dp","pcid","sid","fr","workflowid","mal"]),Ai=["env","workflowStep","clientId","country"];function Pi(e){var t,r;try{for(var n=vi(Ai),i=n.next();!i.done;i=n.next()){var o=i.value;if(!e[o])throw new Error('Argument "checkoutData" is not valid, missing: '+o)}}catch(s){t={error:s}}finally{try{i&&!i.done&&(r=n.return)&&r.call(n)}finally{if(t)throw t.error}}if(e.workflowStep!==oe.SEGMENTATION&&!e.items)throw new Error('Argument "checkoutData" is not valid, missing: items');return!0}function Dt(e,t){switch(e){case le.V2:return $r(t);case le.V3:return Ut(t);default:return console.warn("Unsupported CheckoutType, will use UCv3 as default. Given type: "+e),Ut(t)}}var Mt;(function(e){e.BASE="BASE",e.TRIAL="TRIAL",e.PROMOTION="PROMOTION"})(Mt||(Mt={}));var De;(function(e){e.MONTH="MONTH",e.YEAR="YEAR",e.TWO_YEARS="TWO_YEARS",e.THREE_YEARS="THREE_YEARS",e.PERPETUAL="PERPETUAL"})(De||(De={}));var Me;(function(e){e.ANNUAL="ANNUAL",e.MONTHLY="MONTHLY",e.TWO_YEARS="TWO_YEARS",e.THREE_YEARS="THREE_YEARS"})(Me||(Me={}));var kt;(function(e){e.INDIVIDUAL="INDIVIDUAL",e.TEAM="TEAM",e.ENTERPRISE="ENTERPRISE"})(kt||(kt={}));var Gt;(function(e){e.COM="COM",e.EDU="EDU",e.GOV="GOV"})(Gt||(Gt={}));var Ft;(function(e){e.DIRECT="DIRECT",e.INDIRECT="INDIRECT"})(Ft||(Ft={}));var Vt;(function(e){e.ENTERPRISE_PRODUCT="ENTERPRISE_PRODUCT",e.ETLA="ETLA",e.RETAIL="RETAIL",e.VIP="VIP",e.VIPMP="VIPMP",e.FREE="FREE"})(Vt||(Vt={}));var _i=M.PUBLISHED,qr=e=>{switch(e){case V.PRODUCTION:return"https://wcs.adobe.io";case V.STAGE:return"https://wcs-stage.adobe.io";case V.LOCAL:return"http://localhost:3002";default:return"https://wcs-stage.adobe.io"}},zr=(e,t)=>{var r;return e.api_key=t.apiKey,e.landscape=(r=t.landscape)!==null&&r!==void 0?r:_i,e};var Oi=function(e,t,r,n){function i(o){return o instanceof r?o:new r(function(s){s(o)})}return new(r||(r=Promise))(function(o,s){function a(u){try{l(n.next(u))}catch(p){s(p)}}function c(u){try{l(n.throw(u))}catch(p){s(p)}}function l(u){u.done?o(u.value):i(u.value).then(a,c)}l((n=n.apply(e,t||[])).next())})},Wt=class extends Nt{constructor(t){super(t),this.apiPaths={getWebCommerceArtifact:"web_commerce_artifact"},this.getWebCommerceArtifact=(r,n,i,o)=>Oi(this,void 0,void 0,function*(){let s=this.buildUrl(this.apiPaths.getWebCommerceArtifact,n,r,a=>qr(a),(a,c)=>this.evaluateGetWebCommerceArtifactParams(a,c));return this.fetchOptions.fetch(s,{signal:o,headers:Object.assign({},this.commonHeaders()),mode:"cors"}).then(a=>this.failOnBadStatusOrParseBody(a,`GET ${s}`)).then(a=>{let l=a.data;return{data:this.transformDatum(l,i)}})})}evaluateGetWebCommerceArtifactParams(t,r){let n={};return this.setParams(n,"offer_selector_ids",r.offerSelectorIds.join(",")),this.setParams(n,"country",r.country),this.setParams(n,"language",r.language),this.setParams(n,"currency",r.currency),this.setParams(n,"locale",r.locale),this.setParams(n,"promotion_code",r.promotionCode),zr(n,t)}},Zr=Wt;var $e=e=>new Zr(e).getWebCommerceArtifact;var Qr="tacocat.js";var qe=(e,t)=>String(e??"").toLowerCase()==String(t??"").toLowerCase(),Jr=e=>`${e??""}`.replace(/[&<>'"]/g,t=>({"&":"&","<":"<",">":">","'":"'",'"':"""})[t]??t)??"";function _(e,t={},{metadata:r=!0,search:n=!0,storage:i=!0}={}){let o;if(n&&o==null){let s=new URLSearchParams(window.location.search),a=ve(n)?n:e;o=s.get(a)}if(i&&o==null){let s=ve(i)?i:e;o=window.sessionStorage.getItem(s)??window.localStorage.getItem(s)}if(r&&o==null){let s=tn(ve(r)?r:e);o=document.documentElement.querySelector(`meta[name="${s}"]`)?.content}return o??t[e]}var be=()=>{};var Kr=e=>typeof e=="boolean",se=e=>typeof e=="function",ze=e=>typeof e=="number",en=e=>e!=null&&typeof e=="object";var ve=e=>typeof e=="string",jt=e=>ve(e)&&e,Se=e=>ze(e)&&Number.isFinite(e)&&e>0;function Ae(e,t=r=>r==null||r===""){return e!=null&&Object.entries(e).forEach(([r,n])=>{t(n)&&delete e[r]}),e}function T(e,t){if(Kr(e))return e;let r=String(e);return r==="1"||r==="true"?!0:r==="0"||r==="false"?!1:t}function te(e,t,r){let n=Object.values(t);return n.find(i=>qe(i,e))??r??n[0]}function tn(e=""){return String(e).replace(/(\p{Lowercase_Letter})(\p{Uppercase_Letter})/gu,(t,r,n)=>`${r}-${n}`).replace(/\W+/gu,"-").toLowerCase()}function Pe(e,t=1){return ze(e)||(e=Number.parseInt(e,10)),!Number.isNaN(e)&&e>0&&Number.isFinite(e)?e:t}var wi=Date.now(),Ht=()=>`(+${Date.now()-wi}ms)`,Ze=new Set,Li=T(_("tacocat.debug",{},{metadata:!1}),typeof process<"u"&&process.env?.DEBUG);function rn(e){let t=`[${Qr}/${e}]`,r=(s,a,...c)=>s?!0:(i(a,...c),!1),n=Li?(s,...a)=>{console.debug(`${t} ${s}`,...a,Ht())}:()=>{},i=(s,...a)=>{let c=`${t} ${s}`;Ze.forEach(([l])=>l(c,...a))};return{assert:r,debug:n,error:i,warn:(s,...a)=>{let c=`${t} ${s}`;Ze.forEach(([,l])=>l(c,...a))}}}function Ri(e,t){let r=[e,t];return Ze.add(r),()=>{Ze.delete(r)}}Ri((e,...t)=>{console.error(e,...t,Ht())},(e,...t)=>{console.warn(e,...t,Ht())});var Ni="no promo",nn="promo-tag",Ii="yellow",Ci="neutral",Ui=(e,t,r)=>{let n=o=>o||Ni,i=r?` (was "${n(t)}")`:"";return`${n(e)}${i}`},Di="cancel-context",ke=(e,t)=>{let r=e===Di,n=!r&&e?.length>0,i=(n||r)&&(t&&t!=e||!t&&!r),o=i&&n||!i&&!!t,s=o?e||t:void 0;return{effectivePromoCode:s,overridenPromoCode:e,className:o?nn:`${nn} no-promo`,text:Ui(s,t,i),variant:o?Ii:Ci,isOverriden:i}};var Xt=function(e,t){return Xt=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,n){r.__proto__=n}||function(r,n){for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[i]=n[i])},Xt(e,t)};function Ge(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Xt(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}var g=function(){return g=Object.assign||function(t){for(var r,n=1,i=arguments.length;n0}),r=[],n=0,i=t;n1)throw new RangeError("integer-width stems only accept a single optional option");i.options[0].replace(Gi,function(a,c,l,u,p,f){if(c)t.minimumIntegerDigits=l.length;else{if(u&&p)throw new Error("We currently do not support maximum integer digits");if(f)throw new Error("We currently do not support exact integer digits")}return""});continue}if(hn.test(i.stem)){t.minimumIntegerDigits=i.stem.length;continue}if(un.test(i.stem)){if(i.options.length>1)throw new RangeError("Fraction-precision stems only accept a single optional option");i.stem.replace(un,function(a,c,l,u,p,f){return l==="*"?t.minimumFractionDigits=c.length:u&&u[0]==="#"?t.maximumFractionDigits=u.length:p&&f?(t.minimumFractionDigits=p.length,t.maximumFractionDigits=p.length+f.length):(t.minimumFractionDigits=c.length,t.maximumFractionDigits=c.length),""}),i.options.length&&(t=g(g({},t),ln(i.options[0])));continue}if(mn.test(i.stem)){t=g(g({},t),ln(i.stem));continue}var o=dn(i.stem);o&&(t=g(g({},t),o));var s=Fi(i.stem);s&&(t=g(g({},t),s))}return t}var $t,Vi=new RegExp("^"+Yt.source+"*"),Wi=new RegExp(Yt.source+"*$");function E(e,t){return{start:e,end:t}}var ji=!!String.prototype.startsWith,Hi=!!String.fromCodePoint,Xi=!!Object.fromEntries,Bi=!!String.prototype.codePointAt,Yi=!!String.prototype.trimStart,$i=!!String.prototype.trimEnd,qi=!!Number.isSafeInteger,zi=qi?Number.isSafeInteger:function(e){return typeof e=="number"&&isFinite(e)&&Math.floor(e)===e&&Math.abs(e)<=9007199254740991},zt=!0;try{xn=vn("([^\\p{White_Space}\\p{Pattern_Syntax}]*)","yu"),zt=(($t=xn.exec("a"))===null||$t===void 0?void 0:$t[0])==="a"}catch{zt=!1}var xn,gn=ji?function(t,r,n){return t.startsWith(r,n)}:function(t,r,n){return t.slice(n,n+r.length)===r},Zt=Hi?String.fromCodePoint:function(){for(var t=[],r=0;ro;){if(s=t[o++],s>1114111)throw RangeError(s+" is not a valid code point");n+=s<65536?String.fromCharCode(s):String.fromCharCode(((s-=65536)>>10)+55296,s%1024+56320)}return n},yn=Xi?Object.fromEntries:function(t){for(var r={},n=0,i=t;n=n)){var i=t.charCodeAt(r),o;return i<55296||i>56319||r+1===n||(o=t.charCodeAt(r+1))<56320||o>57343?i:(i-55296<<10)+(o-56320)+65536}},Zi=Yi?function(t){return t.trimStart()}:function(t){return t.replace(Vi,"")},Qi=$i?function(t){return t.trimEnd()}:function(t){return t.replace(Wi,"")};function vn(e,t){return new RegExp(e,t)}var Qt;zt?(qt=vn("([^\\p{White_Space}\\p{Pattern_Syntax}]*)","yu"),Qt=function(t,r){var n;qt.lastIndex=r;var i=qt.exec(t);return(n=i[1])!==null&&n!==void 0?n:""}):Qt=function(t,r){for(var n=[];;){var i=Tn(t,r);if(i===void 0||Sn(i)||eo(i))break;n.push(i),r+=i>=65536?2:1}return Zt.apply(void 0,n)};var qt,bn=function(){function e(t,r){r===void 0&&(r={}),this.message=t,this.position={offset:0,line:1,column:1},this.ignoreTag=!!r.ignoreTag,this.requiresOtherClause=!!r.requiresOtherClause,this.shouldParseSkeletons=!!r.shouldParseSkeletons}return e.prototype.parse=function(){if(this.offset()!==0)throw Error("parser can only be used once");return this.parseMessage(0,"",!1)},e.prototype.parseMessage=function(t,r,n){for(var i=[];!this.isEOF();){var o=this.char();if(o===123){var s=this.parseArgument(t,n);if(s.err)return s;i.push(s.val)}else{if(o===125&&t>0)break;if(o===35&&(r==="plural"||r==="selectordinal")){var a=this.clonePosition();this.bump(),i.push({type:P.pound,location:E(a,this.clonePosition())})}else if(o===60&&!this.ignoreTag&&this.peek()===47){if(n)break;return this.error(d.UNMATCHED_CLOSING_TAG,E(this.clonePosition(),this.clonePosition()))}else if(o===60&&!this.ignoreTag&&Jt(this.peek()||0)){var s=this.parseTag(t,r);if(s.err)return s;i.push(s.val)}else{var s=this.parseLiteral(t,r);if(s.err)return s;i.push(s.val)}}}return{val:i,err:null}},e.prototype.parseTag=function(t,r){var n=this.clonePosition();this.bump();var i=this.parseTagName();if(this.bumpSpace(),this.bumpIf("/>"))return{val:{type:P.literal,value:"<"+i+"/>",location:E(n,this.clonePosition())},err:null};if(this.bumpIf(">")){var o=this.parseMessage(t+1,r,!0);if(o.err)return o;var s=o.val,a=this.clonePosition();if(this.bumpIf("")?{val:{type:P.tag,value:i,children:s,location:E(n,this.clonePosition())},err:null}:this.error(d.INVALID_TAG,E(a,this.clonePosition())))}else return this.error(d.UNCLOSED_TAG,E(n,this.clonePosition()))}else return this.error(d.INVALID_TAG,E(n,this.clonePosition()))},e.prototype.parseTagName=function(){var t=this.offset();for(this.bump();!this.isEOF()&&Ki(this.char());)this.bump();return this.message.slice(t,this.offset())},e.prototype.parseLiteral=function(t,r){for(var n=this.clonePosition(),i="";;){var o=this.tryParseQuote(r);if(o){i+=o;continue}var s=this.tryParseUnquoted(t,r);if(s){i+=s;continue}var a=this.tryParseLeftAngleBracket();if(a){i+=a;continue}break}var c=E(n,this.clonePosition());return{val:{type:P.literal,value:i,location:c},err:null}},e.prototype.tryParseLeftAngleBracket=function(){return!this.isEOF()&&this.char()===60&&(this.ignoreTag||!Ji(this.peek()||0))?(this.bump(),"<"):null},e.prototype.tryParseQuote=function(t){if(this.isEOF()||this.char()!==39)return null;switch(this.peek()){case 39:return this.bump(),this.bump(),"'";case 123:case 60:case 62:case 125:break;case 35:if(t==="plural"||t==="selectordinal")break;return null;default:return null}this.bump();var r=[this.char()];for(this.bump();!this.isEOF();){var n=this.char();if(n===39)if(this.peek()===39)r.push(39),this.bump();else{this.bump();break}else r.push(n);this.bump()}return Zt.apply(void 0,r)},e.prototype.tryParseUnquoted=function(t,r){if(this.isEOF())return null;var n=this.char();return n===60||n===123||n===35&&(r==="plural"||r==="selectordinal")||n===125&&t>0?null:(this.bump(),Zt(n))},e.prototype.parseArgument=function(t,r){var n=this.clonePosition();if(this.bump(),this.bumpSpace(),this.isEOF())return this.error(d.EXPECT_ARGUMENT_CLOSING_BRACE,E(n,this.clonePosition()));if(this.char()===125)return this.bump(),this.error(d.EMPTY_ARGUMENT,E(n,this.clonePosition()));var i=this.parseIdentifierIfPossible().value;if(!i)return this.error(d.MALFORMED_ARGUMENT,E(n,this.clonePosition()));if(this.bumpSpace(),this.isEOF())return this.error(d.EXPECT_ARGUMENT_CLOSING_BRACE,E(n,this.clonePosition()));switch(this.char()){case 125:return this.bump(),{val:{type:P.argument,value:i,location:E(n,this.clonePosition())},err:null};case 44:return this.bump(),this.bumpSpace(),this.isEOF()?this.error(d.EXPECT_ARGUMENT_CLOSING_BRACE,E(n,this.clonePosition())):this.parseArgumentOptions(t,r,i,n);default:return this.error(d.MALFORMED_ARGUMENT,E(n,this.clonePosition()))}},e.prototype.parseIdentifierIfPossible=function(){var t=this.clonePosition(),r=this.offset(),n=Qt(this.message,r),i=r+n.length;this.bumpTo(i);var o=this.clonePosition(),s=E(t,o);return{value:n,location:s}},e.prototype.parseArgumentOptions=function(t,r,n,i){var o,s=this.clonePosition(),a=this.parseIdentifierIfPossible().value,c=this.clonePosition();switch(a){case"":return this.error(d.EXPECT_ARGUMENT_TYPE,E(s,c));case"number":case"date":case"time":{this.bumpSpace();var l=null;if(this.bumpIf(",")){this.bumpSpace();var u=this.clonePosition(),p=this.parseSimpleArgStyleIfPossible();if(p.err)return p;var f=Qi(p.val);if(f.length===0)return this.error(d.EXPECT_ARGUMENT_STYLE,E(this.clonePosition(),this.clonePosition()));var m=E(u,this.clonePosition());l={style:f,styleLocation:m}}var h=this.tryParseArgumentClose(i);if(h.err)return h;var v=E(i,this.clonePosition());if(l&&gn(l?.style,"::",0)){var b=Zi(l.style.slice(2));if(a==="number"){var p=this.parseNumberSkeletonFromString(b,l.styleLocation);return p.err?p:{val:{type:P.number,value:n,location:v,style:p.val},err:null}}else{if(b.length===0)return this.error(d.EXPECT_DATE_TIME_SKELETON,v);var f={type:fe.dateTime,pattern:b,location:l.styleLocation,parsedOptions:this.shouldParseSkeletons?an(b):{}},O=a==="date"?P.date:P.time;return{val:{type:O,value:n,location:v,style:f},err:null}}}return{val:{type:a==="number"?P.number:a==="date"?P.date:P.time,value:n,location:v,style:(o=l?.style)!==null&&o!==void 0?o:null},err:null}}case"plural":case"selectordinal":case"select":{var A=this.clonePosition();if(this.bumpSpace(),!this.bumpIf(","))return this.error(d.EXPECT_SELECT_ARGUMENT_OPTIONS,E(A,g({},A)));this.bumpSpace();var x=this.parseIdentifierIfPossible(),S=0;if(a!=="select"&&x.value==="offset"){if(!this.bumpIf(":"))return this.error(d.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,E(this.clonePosition(),this.clonePosition()));this.bumpSpace();var p=this.tryParseDecimalInteger(d.EXPECT_PLURAL_ARGUMENT_OFFSET_VALUE,d.INVALID_PLURAL_ARGUMENT_OFFSET_VALUE);if(p.err)return p;this.bumpSpace(),x=this.parseIdentifierIfPossible(),S=p.val}var w=this.tryParsePluralOrSelectOptions(t,a,r,x);if(w.err)return w;var h=this.tryParseArgumentClose(i);if(h.err)return h;var I=E(i,this.clonePosition());return a==="select"?{val:{type:P.select,value:n,options:yn(w.val),location:I},err:null}:{val:{type:P.plural,value:n,options:yn(w.val),offset:S,pluralType:a==="plural"?"cardinal":"ordinal",location:I},err:null}}default:return this.error(d.INVALID_ARGUMENT_TYPE,E(s,c))}},e.prototype.tryParseArgumentClose=function(t){return this.isEOF()||this.char()!==125?this.error(d.EXPECT_ARGUMENT_CLOSING_BRACE,E(t,this.clonePosition())):(this.bump(),{val:!0,err:null})},e.prototype.parseSimpleArgStyleIfPossible=function(){for(var t=0,r=this.clonePosition();!this.isEOF();){var n=this.char();switch(n){case 39:{this.bump();var i=this.clonePosition();if(!this.bumpUntil("'"))return this.error(d.UNCLOSED_QUOTE_IN_ARGUMENT_STYLE,E(i,this.clonePosition()));this.bump();break}case 123:{t+=1,this.bump();break}case 125:{if(t>0)t-=1;else return{val:this.message.slice(r.offset,this.offset()),err:null};break}default:this.bump();break}}return{val:this.message.slice(r.offset,this.offset()),err:null}},e.prototype.parseNumberSkeletonFromString=function(t,r){var n=[];try{n=pn(t)}catch{return this.error(d.INVALID_NUMBER_SKELETON,r)}return{val:{type:fe.number,tokens:n,location:r,parsedOptions:this.shouldParseSkeletons?En(n):{}},err:null}},e.prototype.tryParsePluralOrSelectOptions=function(t,r,n,i){for(var o,s=!1,a=[],c=new Set,l=i.value,u=i.location;;){if(l.length===0){var p=this.clonePosition();if(r!=="select"&&this.bumpIf("=")){var f=this.tryParseDecimalInteger(d.EXPECT_PLURAL_ARGUMENT_SELECTOR,d.INVALID_PLURAL_ARGUMENT_SELECTOR);if(f.err)return f;u=E(p,this.clonePosition()),l=this.message.slice(p.offset,this.offset())}else break}if(c.has(l))return this.error(r==="select"?d.DUPLICATE_SELECT_ARGUMENT_SELECTOR:d.DUPLICATE_PLURAL_ARGUMENT_SELECTOR,u);l==="other"&&(s=!0),this.bumpSpace();var m=this.clonePosition();if(!this.bumpIf("{"))return this.error(r==="select"?d.EXPECT_SELECT_ARGUMENT_SELECTOR_FRAGMENT:d.EXPECT_PLURAL_ARGUMENT_SELECTOR_FRAGMENT,E(this.clonePosition(),this.clonePosition()));var h=this.parseMessage(t+1,r,n);if(h.err)return h;var v=this.tryParseArgumentClose(m);if(v.err)return v;a.push([l,{value:h.val,location:E(m,this.clonePosition())}]),c.add(l),this.bumpSpace(),o=this.parseIdentifierIfPossible(),l=o.value,u=o.location}return a.length===0?this.error(r==="select"?d.EXPECT_SELECT_ARGUMENT_SELECTOR:d.EXPECT_PLURAL_ARGUMENT_SELECTOR,E(this.clonePosition(),this.clonePosition())):this.requiresOtherClause&&!s?this.error(d.MISSING_OTHER_CLAUSE,E(this.clonePosition(),this.clonePosition())):{val:a,err:null}},e.prototype.tryParseDecimalInteger=function(t,r){var n=1,i=this.clonePosition();this.bumpIf("+")||this.bumpIf("-")&&(n=-1);for(var o=!1,s=0;!this.isEOF();){var a=this.char();if(a>=48&&a<=57)o=!0,s=s*10+(a-48),this.bump();else break}var c=E(i,this.clonePosition());return o?(s*=n,zi(s)?{val:s,err:null}:this.error(r,c)):this.error(t,c)},e.prototype.offset=function(){return this.position.offset},e.prototype.isEOF=function(){return this.offset()===this.message.length},e.prototype.clonePosition=function(){return{offset:this.position.offset,line:this.position.line,column:this.position.column}},e.prototype.char=function(){var t=this.position.offset;if(t>=this.message.length)throw Error("out of bound");var r=Tn(this.message,t);if(r===void 0)throw Error("Offset "+t+" is at invalid UTF-16 code unit boundary");return r},e.prototype.error=function(t,r){return{val:null,err:{kind:t,message:this.message,location:r}}},e.prototype.bump=function(){if(!this.isEOF()){var t=this.char();t===10?(this.position.line+=1,this.position.column=1,this.position.offset+=1):(this.position.column+=1,this.position.offset+=t<65536?1:2)}},e.prototype.bumpIf=function(t){if(gn(this.message,t,this.offset())){for(var r=0;r=0?(this.bumpTo(n),!0):(this.bumpTo(this.message.length),!1)},e.prototype.bumpTo=function(t){if(this.offset()>t)throw Error("targetOffset "+t+" must be greater than or equal to the current offset "+this.offset());for(t=Math.min(t,this.message.length);;){var r=this.offset();if(r===t)break;if(r>t)throw Error("targetOffset "+t+" is at invalid UTF-16 code unit boundary");if(this.bump(),this.isEOF())break}},e.prototype.bumpSpace=function(){for(;!this.isEOF()&&Sn(this.char());)this.bump()},e.prototype.peek=function(){if(this.isEOF())return null;var t=this.char(),r=this.offset(),n=this.message.charCodeAt(r+(t>=65536?2:1));return n??null},e}();function Jt(e){return e>=97&&e<=122||e>=65&&e<=90}function Ji(e){return Jt(e)||e===47}function Ki(e){return e===45||e===46||e>=48&&e<=57||e===95||e>=97&&e<=122||e>=65&&e<=90||e==183||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8255&&e<=8256||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}function Sn(e){return e>=9&&e<=13||e===32||e===133||e>=8206&&e<=8207||e===8232||e===8233}function eo(e){return e>=33&&e<=35||e===36||e>=37&&e<=39||e===40||e===41||e===42||e===43||e===44||e===45||e>=46&&e<=47||e>=58&&e<=59||e>=60&&e<=62||e>=63&&e<=64||e===91||e===92||e===93||e===94||e===96||e===123||e===124||e===125||e===126||e===161||e>=162&&e<=165||e===166||e===167||e===169||e===171||e===172||e===174||e===176||e===177||e===182||e===187||e===191||e===215||e===247||e>=8208&&e<=8213||e>=8214&&e<=8215||e===8216||e===8217||e===8218||e>=8219&&e<=8220||e===8221||e===8222||e===8223||e>=8224&&e<=8231||e>=8240&&e<=8248||e===8249||e===8250||e>=8251&&e<=8254||e>=8257&&e<=8259||e===8260||e===8261||e===8262||e>=8263&&e<=8273||e===8274||e===8275||e>=8277&&e<=8286||e>=8592&&e<=8596||e>=8597&&e<=8601||e>=8602&&e<=8603||e>=8604&&e<=8607||e===8608||e>=8609&&e<=8610||e===8611||e>=8612&&e<=8613||e===8614||e>=8615&&e<=8621||e===8622||e>=8623&&e<=8653||e>=8654&&e<=8655||e>=8656&&e<=8657||e===8658||e===8659||e===8660||e>=8661&&e<=8691||e>=8692&&e<=8959||e>=8960&&e<=8967||e===8968||e===8969||e===8970||e===8971||e>=8972&&e<=8991||e>=8992&&e<=8993||e>=8994&&e<=9e3||e===9001||e===9002||e>=9003&&e<=9083||e===9084||e>=9085&&e<=9114||e>=9115&&e<=9139||e>=9140&&e<=9179||e>=9180&&e<=9185||e>=9186&&e<=9254||e>=9255&&e<=9279||e>=9280&&e<=9290||e>=9291&&e<=9311||e>=9472&&e<=9654||e===9655||e>=9656&&e<=9664||e===9665||e>=9666&&e<=9719||e>=9720&&e<=9727||e>=9728&&e<=9838||e===9839||e>=9840&&e<=10087||e===10088||e===10089||e===10090||e===10091||e===10092||e===10093||e===10094||e===10095||e===10096||e===10097||e===10098||e===10099||e===10100||e===10101||e>=10132&&e<=10175||e>=10176&&e<=10180||e===10181||e===10182||e>=10183&&e<=10213||e===10214||e===10215||e===10216||e===10217||e===10218||e===10219||e===10220||e===10221||e===10222||e===10223||e>=10224&&e<=10239||e>=10240&&e<=10495||e>=10496&&e<=10626||e===10627||e===10628||e===10629||e===10630||e===10631||e===10632||e===10633||e===10634||e===10635||e===10636||e===10637||e===10638||e===10639||e===10640||e===10641||e===10642||e===10643||e===10644||e===10645||e===10646||e===10647||e===10648||e>=10649&&e<=10711||e===10712||e===10713||e===10714||e===10715||e>=10716&&e<=10747||e===10748||e===10749||e>=10750&&e<=11007||e>=11008&&e<=11055||e>=11056&&e<=11076||e>=11077&&e<=11078||e>=11079&&e<=11084||e>=11085&&e<=11123||e>=11124&&e<=11125||e>=11126&&e<=11157||e===11158||e>=11159&&e<=11263||e>=11776&&e<=11777||e===11778||e===11779||e===11780||e===11781||e>=11782&&e<=11784||e===11785||e===11786||e===11787||e===11788||e===11789||e>=11790&&e<=11798||e===11799||e>=11800&&e<=11801||e===11802||e===11803||e===11804||e===11805||e>=11806&&e<=11807||e===11808||e===11809||e===11810||e===11811||e===11812||e===11813||e===11814||e===11815||e===11816||e===11817||e>=11818&&e<=11822||e===11823||e>=11824&&e<=11833||e>=11834&&e<=11835||e>=11836&&e<=11839||e===11840||e===11841||e===11842||e>=11843&&e<=11855||e>=11856&&e<=11857||e===11858||e>=11859&&e<=11903||e>=12289&&e<=12291||e===12296||e===12297||e===12298||e===12299||e===12300||e===12301||e===12302||e===12303||e===12304||e===12305||e>=12306&&e<=12307||e===12308||e===12309||e===12310||e===12311||e===12312||e===12313||e===12314||e===12315||e===12316||e===12317||e>=12318&&e<=12319||e===12320||e===12336||e===64830||e===64831||e>=65093&&e<=65094}function Kt(e){e.forEach(function(t){if(delete t.location,tt(t)||rt(t))for(var r in t.options)delete t.options[r].location,Kt(t.options[r].value);else Je(t)&&it(t.style)||(Ke(t)||et(t))&&Fe(t.style)?delete t.style.location:nt(t)&&Kt(t.children)})}function An(e,t){t===void 0&&(t={}),t=g({shouldParseSkeletons:!0,requiresOtherClause:!0},t);var r=new bn(e,t).parse();if(r.err){var n=SyntaxError(d[r.err.kind]);throw n.location=r.err.location,n.originalMessage=r.err.message,n}return t?.captureLocation||Kt(r.val),r.val}function Ve(e,t){var r=t&&t.cache?t.cache:so,n=t&&t.serializer?t.serializer:oo,i=t&&t.strategy?t.strategy:ro;return i(e,{cache:r,serializer:n})}function to(e){return e==null||typeof e=="number"||typeof e=="boolean"}function Pn(e,t,r,n){var i=to(n)?n:r(n),o=t.get(i);return typeof o>"u"&&(o=e.call(this,n),t.set(i,o)),o}function _n(e,t,r){var n=Array.prototype.slice.call(arguments,3),i=r(n),o=t.get(i);return typeof o>"u"&&(o=e.apply(this,n),t.set(i,o)),o}function er(e,t,r,n,i){return r.bind(t,e,n,i)}function ro(e,t){var r=e.length===1?Pn:_n;return er(e,this,r,t.cache.create(),t.serializer)}function no(e,t){return er(e,this,_n,t.cache.create(),t.serializer)}function io(e,t){return er(e,this,Pn,t.cache.create(),t.serializer)}var oo=function(){return JSON.stringify(arguments)};function tr(){this.cache=Object.create(null)}tr.prototype.get=function(e){return this.cache[e]};tr.prototype.set=function(e,t){this.cache[e]=t};var so={create:function(){return new tr}},ot={variadic:no,monadic:io};var pe;(function(e){e.MISSING_VALUE="MISSING_VALUE",e.INVALID_VALUE="INVALID_VALUE",e.MISSING_INTL_API="MISSING_INTL_API"})(pe||(pe={}));var We=function(e){Ge(t,e);function t(r,n,i){var o=e.call(this,r)||this;return o.code=n,o.originalMessage=i,o}return t.prototype.toString=function(){return"[formatjs Error: "+this.code+"] "+this.message},t}(Error);var rr=function(e){Ge(t,e);function t(r,n,i,o){return e.call(this,'Invalid values for "'+r+'": "'+n+'". Options are "'+Object.keys(i).join('", "')+'"',pe.INVALID_VALUE,o)||this}return t}(We);var On=function(e){Ge(t,e);function t(r,n,i){return e.call(this,'Value for "'+r+'" must be of type '+n,pe.INVALID_VALUE,i)||this}return t}(We);var wn=function(e){Ge(t,e);function t(r,n){return e.call(this,'The intl string context variable "'+r+'" was not provided to the string "'+n+'"',pe.MISSING_VALUE,n)||this}return t}(We);var R;(function(e){e[e.literal=0]="literal",e[e.object=1]="object"})(R||(R={}));function ao(e){return e.length<2?e:e.reduce(function(t,r){var n=t[t.length-1];return!n||n.type!==R.literal||r.type!==R.literal?t.push(r):n.value+=r.value,t},[])}function co(e){return typeof e=="function"}function je(e,t,r,n,i,o,s){if(e.length===1&&Bt(e[0]))return[{type:R.literal,value:e[0].value}];for(var a=[],c=0,l=e;c0?e.substring(0,n):"";let i=_n(e.split("").reverse().join("")),o=r-i,s=e.substring(o,o+1),a=o+(s==="."||s===","?1:0);t.suffix=i>0?e.substring(a,r):"",t.mask=e.substring(n,a),t.maskHasNegativeSign=t.mask.charAt(0)==="-",t.maskHasPositiveSign=t.mask.charAt(0)==="+";let c=t.mask.match(co);return t.decimal=c&&c[c.length-1]||".",t.separator=c&&c[1]&&c[0]||",",c=t.mask.split(t.decimal),t.integer=c[0],t.fraction=c[1],t}function lo(e,t,r){let n=!1,i={value:e};e<0&&(n=!0,i.value=-i.value),i.sign=n?"-":"",i.value=Number(i.value).toFixed(t.fraction&&t.fraction.length),i.value=Number(i.value).toString();let o=t.fraction&&t.fraction.lastIndexOf("0"),[s="0",a=""]=i.value.split(".");return(!a||a&&a.length<=o)&&(a=o<0?"":(+("0."+a)).toFixed(o+1).replace("0.","")),i.integer=s,i.fraction=a,fo(i,t),(i.result==="0"||i.result==="")&&(n=!1,i.sign=""),!n&&t.maskHasPositiveSign?i.sign="+":n&&t.maskHasPositiveSign?i.sign="-":n&&(i.sign=r&&r.enforceMaskSign&&!t.maskHasNegativeSign?"":"-"),i}function fo(e,t){e.result="";let r=t.integer.split(t.separator),n=r.join(""),i=n&&n.indexOf("0");if(i>-1)for(;e.integer.lengthMath.round(e*20)/20},sr=(e,t)=>({accept:e,round:t}),xo=[sr(({divisor:e,price:t})=>t%e==0,({divisor:e,price:t})=>t/e),sr(({usePrecision:e})=>e,({divisor:e,price:t})=>Math.ceil(Math.floor(t*1e4/e)/100)/100),sr(()=>!0,({divisor:e,price:t})=>Math.ceil(Math.floor(t*100/e)/100))],In={[Pe.YEAR]:{[W.MONTHLY]:ot.MONTH,[W.ANNUAL]:ot.YEAR},[Pe.MONTH]:{[W.MONTHLY]:ot.MONTH}},go=(e,t)=>e.indexOf(`'${t}'`)===0,yo=(e,t=!0)=>{let r=e.replace(/'.*?'/,"").trim(),n=Un(r);return!!n?t||(r=r.replace(/[,\.]0+/,n)):r=r.replace(/\s?(#.*0)(?!\s)?/,"$&"+vo(e)),r},To=e=>{let t=bo(e),r=go(e,t),n=e.replace(/'.*?'/,""),i=Rn.test(n)||Nn.test(n);return{currencySymbol:t,isCurrencyFirst:r,hasCurrencySpace:i}},Cn=e=>e.replace(Rn,Ln).replace(Nn,Ln),vo=e=>e.match(/#(.?)#/)?.[1]===wn?mo:wn,bo=e=>e.match(/'(.*?)'/)?.[1]??"",Un=e=>e.match(/0(.?)0/)?.[1]??"";function Dn({formatString:e,price:t,usePrecision:r,isIndianPrice:n=!1},i,o=s=>s){let{currencySymbol:s,isCurrencyFirst:a,hasCurrencySpace:c}=To(e),l=r?Un(e):"",u=yo(e,r),p=r?2:0,f=o(t,{currencySymbol:s}),m=n?f.toLocaleString("hi-IN",{minimumFractionDigits:p,maximumFractionDigits:p}):On(u,f),h=r?m.lastIndexOf(l):m.length,v=m.substring(0,h),b=m.substring(h+1);return{accessiblePrice:e.replace(/'.*?'/,"SYMBOL").replace(/#.*0/,m).replace(/SYMBOL/,s),currencySymbol:s,decimals:b,decimalsDelimiter:l,hasCurrencySpace:c,integer:v,isCurrencyFirst:a,recurrenceTerm:i}}var Mn=e=>{let{commitment:t,term:r,usePrecision:n}=e,i=ho[r]??1;return Dn(e,i>1?ot.MONTH:In[t]?.[r],(o,{currencySymbol:s})=>{let a={divisor:i,price:o,usePrecision:n},{round:c}=xo.find(({accept:u})=>u(a));if(!c)throw new Error(`Missing rounding rule for: ${JSON.stringify(a)}`);return(Eo[s]??(u=>u))(c(a))})},kn=({commitment:e,term:t,...r})=>Dn(r,In[e]?.[t]);var So={recurrenceLabel:"{recurrenceTerm, select, MONTH {/mo} YEAR {/yr} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per month} YEAR {per year} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per license} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per license} other {}}",freeLabel:"Free",freeAriaLabel:"Free",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Alternatively at {alternativePrice}",strikethroughAriaLabel:"Regularly at {strikethroughPrice}"},Ao=Qr("ConsonantTemplates/price"),Po=/<.+?>/g,F={container:"price",containerOptical:"price-optical",containerStrikethrough:"price-strikethrough",disabled:"disabled",currencySpace:"price-currency-space",currencySymbol:"price-currency-symbol",decimals:"price-decimals",decimalsDelimiter:"price-decimals-delimiter",integer:"price-integer",recurrence:"price-recurrence",taxInclusivity:"price-tax-inclusivity",unitType:"price-unit-type"},me={perUnitLabel:"perUnitLabel",perUnitAriaLabel:"perUnitAriaLabel",recurrenceLabel:"recurrenceLabel",recurrenceAriaLabel:"recurrenceAriaLabel",taxExclusiveLabel:"taxExclusiveLabel",taxInclusiveLabel:"taxInclusiveLabel",strikethroughAriaLabel:"strikethroughAriaLabel"},_o="TAX_EXCLUSIVE",Oo=e=>zr(e)?Object.entries(e).filter(([,t])=>Te(t)||qe(t)||t===!0).reduce((t,[r,n])=>t+` ${r}${n===!0?"":'="'+$r(n)+'"'}`,""):"",X=(e,t,r,n=!1)=>`${n?Cn(t):t??""}`;function wo(e,{accessibleLabel:t,currencySymbol:r,decimals:n,decimalsDelimiter:i,hasCurrencySpace:o,integer:s,isCurrencyFirst:a,recurrenceLabel:c,perUnitLabel:l,taxInclusivityLabel:u},p={}){let f=X(F.currencySymbol,r),m=X(F.currencySpace,o?" ":""),h="";return a&&(h+=f+m),h+=X(F.integer,s),h+=X(F.decimalsDelimiter,i),h+=X(F.decimals,n),a||(h+=m+f),h+=X(F.recurrence,c,null,!0),h+=X(F.unitType,l,null,!0),h+=X(F.taxInclusivity,u,!0),X(e,h,{...p,"aria-label":t})}var _e=({displayOptical:e=!1,displayStrikethrough:t=!1}={})=>({country:r,displayFormatted:n=!0,displayRecurrence:i=!0,displayPerUnit:o=!1,displayTax:s=!1,language:a,literals:c={}}={},{commitment:l,formatString:u,price:p,priceWithoutDiscount:f,taxDisplay:m,taxTerm:h,term:v,usePrecision:b}={},O={})=>{Object.entries({country:r,formatString:u,language:a,price:p}).forEach(([K,Pt])=>{if(Pt==null)throw new Error(`Argument "${K}" is missing`)});let A={...So,...c},x=`${a.toLowerCase()}-${r.toUpperCase()}`;function S(K,Pt){let _t=A[K];if(_t==null)return"";try{return new Pn(_t.replace(Po,""),x).format(Pt)}catch{return Ao.error("Failed to format literal:",_t),""}}let w=t&&f?f:p,{accessiblePrice:I,recurrenceTerm:D,...L}=(e?Mn:kn)({commitment:l,formatString:u,term:v,price:e?p:w,usePrecision:b,isIndianPrice:r==="IN"}),C=I,H="";if(T(i)&&D){let K=S(me.recurrenceAriaLabel,{recurrenceTerm:D});K&&(C+=" "+K),H=S(me.recurrenceLabel,{recurrenceTerm:D})}let ce="";if(T(o)){ce=S(me.perUnitLabel,{perUnit:"LICENSE"});let K=S(me.perUnitAriaLabel,{perUnit:"LICENSE"});K&&(C+=" "+K)}let J="";T(s)&&h&&(J=S(m===_o?me.taxExclusiveLabel:me.taxInclusiveLabel,{taxTerm:h}),J&&(C+=" "+J)),t&&(C=S(me.strikethroughAriaLabel,{strikethroughPrice:C}));let ie=F.container;if(e&&(ie+=" "+F.containerOptical),t&&(ie+=" "+F.containerStrikethrough),T(n))return wo(ie,{...L,accessibleLabel:C,recurrenceLabel:H,perUnitLabel:ce,taxInclusivityLabel:J},O);let{currencySymbol:Ee,decimals:ue,decimalsDelimiter:xe,hasCurrencySpace:Ne,integer:At,isCurrencyFirst:ii}=L,ge=[At,xe,ue];ii?(ge.unshift(Ne?"\xA0":""),ge.unshift(Ee)):(ge.push(Ne?"\xA0":""),ge.push(Ee)),ge.push(H,ce,J);let oi=ge.join("");return X(ie,oi,O)},Gn=()=>(e,t,r)=>{let i=(e.displayOldPrice===void 0||T(e.displayOldPrice))&&t.priceWithoutDiscount&&t.priceWithoutDiscount!=t.price;return`${_e()(e,t,r)}${i?" "+_e({displayStrikethrough:!0})(e,t,r):""}`};var ar=_e(),cr=Gn(),ur=_e({displayOptical:!0}),lr=_e({displayStrikethrough:!0});var Lo=(e,t)=>{if(!(!be(e)||!be(t)))return Math.floor((t-e)/t*100)},Fn=()=>(e,t,r)=>{let{price:n,priceWithoutDiscount:i}=t,o=Lo(n,i);return o===void 0?'':`${o}%`};var fr=Fn();var pr;(function(e){e.BASE="BASE",e.TRIAL="TRIAL",e.PROMOTION="PROMOTION"})(pr||(pr={}));var j;(function(e){e.MONTH="MONTH",e.YEAR="YEAR",e.TWO_YEARS="TWO_YEARS",e.THREE_YEARS="THREE_YEARS",e.PERPETUAL="PERPETUAL"})(j||(j={}));var B;(function(e){e.ANNUAL="ANNUAL",e.MONTHLY="MONTHLY",e.TWO_YEARS="TWO_YEARS",e.THREE_YEARS="THREE_YEARS"})(B||(B={}));var mr;(function(e){e.INDIVIDUAL="INDIVIDUAL",e.TEAM="TEAM",e.ENTERPRISE="ENTERPRISE"})(mr||(mr={}));var hr;(function(e){e.COM="COM",e.EDU="EDU",e.GOV="GOV"})(hr||(hr={}));var dr;(function(e){e.DIRECT="DIRECT",e.INDIRECT="INDIRECT"})(dr||(dr={}));var Er;(function(e){e.ENTERPRISE_PRODUCT="ENTERPRISE_PRODUCT",e.ETLA="ETLA",e.RETAIL="RETAIL",e.VIP="VIP",e.VIPMP="VIPMP",e.FREE="FREE"})(Er||(Er={}));var xr="ABM",gr="PUF",yr="M2M",Tr="PERPETUAL",Ro="TAX_INCLUSIVE_DETAILS",No="TAX_EXCLUSIVE",Vn={ABM:xr,PUF:gr,M2M:yr,PERPETUAL:Tr},Ja={[xr]:{commitment:j.YEAR,term:B.MONTHLY},[gr]:{commitment:j.YEAR,term:B.ANNUAL},[yr]:{commitment:j.MONTH,term:B.MONTHLY},[Tr]:{commitment:j.PERPETUAL,term:void 0}},Wn="Value is not an offer",vr=e=>{if(typeof e!="object")return Wn;let{commitment:t,term:r}=e,n=Io(t,r);return{...e,planType:n}};var Io=(e,t)=>{if(e===void 0)return Wn;if(e===""&&t==="")return"";let r="";return e===j.YEAR?t===B.MONTHLY?r=xr:t===B.ANNUAL&&(r=gr):e===j.MONTH?t===B.MONTHLY&&(r=yr):e===j.PERPETUAL&&(r=Tr),r};function br(e){let{priceDetails:t}=e,{price:r,priceWithoutDiscount:n,priceWithoutTax:i,priceWithoutDiscountAndTax:o,taxDisplay:s}=t;if(s!==Ro)return e;let a={...e,priceDetails:{...t,price:i??r,priceWithoutDiscount:o??n,taxDisplay:No}};return a.offerType==="TRIAL"&&a.priceDetails.price===0&&(a.priceDetails.price=a.priceDetails.priceWithoutDiscount),a}var{freeze:he}=Object,Y=he({...le}),$=he({...oe}),q=he({...V}),Sr=he({...Ue}),Oe=he({...Ce}),Ar=he({...Vn}),Pr=he({...De});var Rr={};ai(Rr,{CLASS_NAME_FAILED:()=>st,CLASS_NAME_PENDING:()=>at,CLASS_NAME_RESOLVED:()=>ct,ERROR_MESSAGE_BAD_REQUEST:()=>_r,ERROR_MESSAGE_MISSING_LITERALS_URL:()=>wr,ERROR_MESSAGE_OFFER_NOT_FOUND:()=>Or,EVENT_TYPE_ERROR:()=>Co,EVENT_TYPE_FAILED:()=>ut,EVENT_TYPE_PENDING:()=>lt,EVENT_TYPE_READY:()=>de,EVENT_TYPE_RESOLVED:()=>ft,LOG_NAMESPACE:()=>Lr,STATE_FAILED:()=>z,STATE_PENDING:()=>Z,STATE_RESOLVED:()=>Q,TAG_NAME_SERVICE:()=>re});var st="placeholder-failed",at="placeholder-pending",ct="placeholder-resolved",_r="Bad WCS request",Or="Commerce offer not found",wr="Literals URL not provided",Co="wcms:commerce:error",ut="wcms:placeholder:failed",lt="wcms:placeholder:pending",de="wcms:commerce:ready",ft="wcms:placeholder:resolved",Lr="wcms/commerce",z="failed",Z="pending",Q="resolved",re="wcms-commerce";var Nr={clientId:"merch-at-scale",delimiter:"\xB6",ignoredProperties:["analytics","literals"],serializableTypes:["Array","Object"],sampleRate:30,tags:"consumer=milo/commerce"},jn=new Set,Uo=e=>e instanceof Error||typeof e.originatingRequest=="string";function Hn(e){if(e==null)return;let t=typeof e;if(t==="function"){let{name:r}=e;return r?`${t} ${r}`:t}if(t==="object"){if(e instanceof Error)return e.message;if(typeof e.originatingRequest=="string"){let{message:n,originatingRequest:i,status:o}=e;return[n,o,i].filter(s=>s).join(" ")}let r=e[Symbol.toStringTag]??Object.getPrototypeOf(e).constructor.name;if(!Nr.serializableTypes.includes(r))return r}return e}function Do(e,t){if(!Nr.ignoredProperties.includes(e))return Hn(t)}var Ir={append(e){let{delimiter:t,sampleRate:r,tags:n,clientId:i}=Nr,{message:o,params:s}=e,a=[],c=o,l=[];s.forEach(f=>{f!=null&&(Uo(f)?a:l).push(f)}),a.length&&(c+=" ",c+=a.map(Hn).join(" "));let{pathname:u,search:p}=window.location;c+=`${t}page=`,c+=u+p,l.length&&(c+=`${t}facts=`,c+=JSON.stringify(l,Do)),jn.has(c)||(jn.add(c),window.lana.log(c,{sampleRate:r,tags:n,clientId:i}))}};var y=Object.freeze({checkoutClientId:"adobe_com",checkoutWorkflow:Y.V3,checkoutWorkflowStep:$.EMAIL,country:"US",displayOldPrice:!0,displayPerUnit:!1,displayRecurrence:!0,displayTax:!1,env:q.PRODUCTION,forceTaxExclusive:!1,language:"en",entitlement:!1,modal:!1,promotionCode:"",quantity:1,wcsApiKey:"wcms-commerce-ims-ro-user-milo",wcsBufferDelay:1,wcsEnv:Oe.PRODUCTION,landscape:M.PUBLISHED,wcsBufferLimit:1});function Xn(e,{once:t=!1}={}){let r=null;function n(){let i=document.querySelector(re);i!==r&&(r=i,i&&e(i))}return document.addEventListener(de,n,{once:t}),ae(n),()=>document.removeEventListener(de,n)}function pt(e,{country:t,forceTaxExclusive:r,perpetual:n}){let i;if(e.length<2)i=e;else{let o=t==="GB"||n?"EN":"MULT",[s,a]=e;i=[s.language===o?s:a]}return r&&(i=i.map(br)),i}var ae=e=>window.setTimeout(e);function we(e,t=1){if(e==null)return[t];let r=(Array.isArray(e)?e:String(e).split(",")).map(Ae).filter(be);return r.length||(r=[t]),r}function mt(e){return e==null?[]:(Array.isArray(e)?e:String(e).split(",")).filter(Ft)}function k(){return window.customElements.get(re)?.instance}var Mo="en_US",ko={ar:"AR_es",br:"BR_pt",ca:"CA_en",cl:"CL_es",co:"CO_es",la:"DO_es",mx:"MX_es",pe:"PE_es",africa:"ZA_en",dk:"DK_da",de:"DE_de",ee:"EE_et",es:"ES_es",fr:"FR_fr",ie:"IE_en",il_he:"IL_iw",it:"IT_it",lv:"LV_lv",lt:"LT_lt",hu:"HU_hu",mt:"MT_en",mena_en:"DZ_en",mena_ar:"DZ_ar",nl:"NL_nl",no:"NO_nb",pl:"PL_pl",pt:"PT_pt",ro:"RO_ro",si:"SI_sl",sk:"SK_sk",fi:"FI_fi",se:"SE_sv",tr:"TR_tr",uk:"GB_en",at:"AT_de",cz:"CZ_cs",bg:"BG_bg",ru:"RU_ru",ua:"UA_uk",au:"AU_en",in:"IN_en",id_id:"ID_in",nz:"NZ_en",sg:"SG_en",cn:"CN_zh-Hans",tw:"TW_zh-Hant",hk_zh:"HK_zh-hant",jp:"JP_ja",kr:"KR_ko",za:"ZA_en",ng:"NG_en",cr:"CR_es",ec:"EC_es",pr:"US_es",gt:"GT_es",cis_en:"AZ_en",cis_ru:"AZ_ru",sea:"SG_en",th:"TH_en"},ne=Object.freeze({LOCAL:"local",PROD:"prod",STAGE:"stage"});function Bn({locale:e={}}={}){if(!e.prefix)return{country:y.country,language:y.language,locale:Mo};let t=e.prefix.replace("/","")??"",[r=y.country,n=y.language]=(ko[t]??t).split("_",2);return r=r.toUpperCase(),n=n.toLowerCase(),{country:r,language:n,locale:`${n}_${r}`}}function Cr(e={}){let{commerce:t={},locale:r=void 0}=e,i=(e.env?.name===ne.PROD?ne.PROD:te(_("commerce.env",t,{metadata:!1}),ne,ne.PROD))===ne.PROD?q.PRODUCTION:q.STAGE,o=_("checkoutClientId",t)??y.checkoutClientId,s=te(_("checkoutWorkflow",t),Y,y.checkoutWorkflow),a=$.CHECKOUT;s===Y.V3&&(a=te(_("checkoutWorkflowStep",t),$,y.checkoutWorkflowStep));let c=T(_("displayOldPrice",t),y.displayOldPrice),l=T(_("displayPerUnit",t),y.displayPerUnit),u=T(_("displayRecurrence",t),y.displayRecurrence),p=T(_("displayTax",t),y.displayTax),f=T(_("entitlement",t),y.entitlement),m=T(_("modal",t),y.modal),h=T(_("forceTaxExclusive",t),y.forceTaxExclusive),v=_("promotionCode",t)??y.promotionCode,b=we(_("quantity",t)),O=_("wcsApiKey",t)??y.wcsApiKey,A=e.env?.name===ne.PROD?M.PUBLISHED:te(_("commerce.landscape",t),M,y.landscape),x=Ae(_("wcsBufferDelay",t),y.wcsBufferDelay),S=Ae(_("wcsBufferLimit",t),y.wcsBufferLimit);return{...Bn({locale:r}),displayOldPrice:c,checkoutClientId:o,checkoutWorkflow:s,checkoutWorkflowStep:a,displayPerUnit:l,displayRecurrence:u,displayTax:p,entitlement:f,modal:m,env:i,forceTaxExclusive:h,priceLiteralsURL:t.priceLiteralsURL,promotionCode:v,quantity:b,wcsApiKey:O,wcsBufferDelay:x,wcsBufferLimit:S,wcsEnv:i===q.STAGE?Oe.STAGE:Oe.PRODUCTION,landscape:A}}var $n="debug",Go="error",Fo="info",Vo="warn",Wo=Date.now(),Ur=new Set,Dr=new Set,Yn=new Map,je=Object.freeze({DEBUG:$n,ERROR:Go,INFO:Fo,WARN:Vo}),qn={append({level:e,message:t,params:r,timestamp:n,source:i}){console[e](`${n}ms [${i}] %c${t}`,"font-weight: bold;",...r)}},zn={filter:({level:e})=>e!==$n},jo={filter:()=>!1};function Ho(e,t,r,n,i){return{level:e,message:t,namespace:r,get params(){if(n.length===1){let[o]=n;se(o)&&(n=o(),Array.isArray(n)||(n=[n]))}return n},source:i,timestamp:Date.now()-Wo}}function Xo(e){[...Dr].every(t=>t(e))&&Ur.forEach(t=>t(e))}function Zn(e){let t=(Yn.get(e)??0)+1;Yn.set(e,t);let r=`${e} #${t}`,n=o=>(s,...a)=>Xo(Ho(o,s,e,a,r)),i=Object.seal({id:r,namespace:e,module(o){return Zn(`${i.namespace}/${o}`)},debug:n(je.DEBUG),error:n(je.ERROR),info:n(je.INFO),warn:n(je.WARN)});return i}function ht(...e){e.forEach(t=>{let{append:r,filter:n}=t;se(n)?Dr.add(n):se(r)&&Ur.add(r)})}function Bo(e={}){let{name:t}=e,r=T(_("commerce.debug",{search:!0,storage:!0}),t===ne.LOCAL);return ht(r?qn:zn),t===ne.PROD&&ht(Ir),N}function Yo(){Ur.clear(),Dr.clear()}var N={...Zn(Lr),Level:je,Plugins:{consoleAppender:qn,debugFilter:zn,quietFilter:jo,lanaAppender:Ir},init:Bo,reset:Yo,use:ht};var $o={CLASS_NAME_FAILED:st,CLASS_NAME_PENDING:at,CLASS_NAME_RESOLVED:ct,EVENT_TYPE_FAILED:ut,EVENT_TYPE_PENDING:lt,EVENT_TYPE_RESOLVED:ft,STATE_FAILED:z,STATE_PENDING:Z,STATE_RESOLVED:Q},qo={[z]:st,[Z]:at,[Q]:ct},zo={[z]:ut,[Z]:lt,[Q]:ft},xt=new WeakMap;function G(e){if(!xt.has(e)){let t=N.module(e.constructor.is);xt.set(e,{changes:new Map,connected:!1,dispose:ve,error:void 0,log:t,options:void 0,promises:[],state:Z,timer:null,value:void 0,version:0})}return xt.get(e)}function dt(e){let t=G(e),{error:r,promises:n,state:i}=t;(i===Q||i===z)&&(t.promises=[],i===Q?n.forEach(({resolve:o})=>o(e)):i===z&&n.forEach(({reject:o})=>o(r))),e.dispatchEvent(new CustomEvent(zo[i],{bubbles:!0}))}function Et(e){let t=xt.get(e);[z,Z,Q].forEach(r=>{e.classList.toggle(qo[r],r===t.state)})}var Zo={get error(){return G(this).error},get log(){return G(this).log},get options(){return G(this).options},get state(){return G(this).state},get value(){return G(this).value},attributeChangedCallback(e,t,r){G(this).changes.set(e,r),this.requestUpdate()},connectedCallback(){G(this).dispose=Xn(()=>this.requestUpdate(!0))},disconnectedCallback(){let e=G(this);e.connected&&(e.connected=!1,e.log.debug("Disconnected:",{element:this})),e.dispose(),e.dispose=ve},onceSettled(){let{error:e,promises:t,state:r}=G(this);return Q===r?Promise.resolve(this):z===r?Promise.reject(e):new Promise((n,i)=>{t.push({resolve:n,reject:i})})},toggleResolved(e,t,r){let n=G(this);return e!==n.version?!1:(r!==void 0&&(n.options=r),n.state=Q,n.value=t,Et(this),this.log.debug("Resolved:",{element:this,value:t}),ae(()=>dt(this)),!0)},toggleFailed(e,t,r){let n=G(this);return e!==n.version?!1:(r!==void 0&&(n.options=r),n.error=t,n.state=z,Et(this),n.log.error("Failed:",{element:this,error:t}),ae(()=>dt(this)),!0)},togglePending(e){let t=G(this);return t.version++,e&&(t.options=e),t.state=Z,Et(this),ae(()=>dt(this)),t.version},requestUpdate(e=!1){if(!this.isConnected||!k())return;let t=G(this);if(t.timer)return;let{error:r,options:n,state:i,value:o,version:s}=t;t.state=Z,t.timer=ae(async()=>{t.timer=null;let a=null;if(t.changes.size&&(a=Object.fromEntries(t.changes.entries()),t.changes.clear()),t.connected?t.log.debug("Updated:",{element:this,changes:a}):(t.connected=!0,t.log.debug("Connected:",{element:this,changes:a})),a||e)try{await this.render?.()===!1&&t.state===Z&&t.version===s&&(t.state=i,t.error=r,t.value=o,Et(this),dt(this))}catch(c){this.toggleFailed(t.version,c,n)}})}};function Qn(e={}){return Object.entries(e).forEach(([t,r])=>{(r==null||r===""||r?.length===0)&&delete e[t]}),e}function gt(e,t={}){let{tag:r,is:n}=e,i=document.createElement(r,{is:n});return i.setAttribute("is",n),Object.assign(i.dataset,Qn(t)),i}function yt(e){let{tag:t,is:r,prototype:n}=e,i=window.customElements.get(r);return i||(Object.defineProperties(n,Object.getOwnPropertyDescriptors(Zo)),i=Object.defineProperties(e,Object.getOwnPropertyDescriptors($o)),window.customElements.define(r,i,{extends:t})),i}function Tt(e,t=document.body){return Array.from(t?.querySelectorAll(`${e.tag}[is="${e.is}"]`)??[])}function vt(e,t={}){return e instanceof HTMLElement?(Object.assign(e.dataset,Qn(t)),e):null}var Le=class Le extends HTMLAnchorElement{static get observedAttributes(){return["data-checkout-workflow","data-checkout-workflow-step","data-ims-country","data-perpetual","data-promotion-code","data-quantity","data-template","data-wcs-osi"]}static createCheckoutLink(t={},r=""){let n=k();if(!n)return null;let{checkoutMarketSegment:i,checkoutWorkflow:o,checkoutWorkflowStep:s,entitlement:a,modal:c,perpetual:l,promotionCode:u,quantity:p,wcsOsi:f}=n.collectCheckoutOptions(t),m=gt(Le,{checkoutMarketSegment:i,checkoutWorkflow:o,checkoutWorkflowStep:s,entitlement:a,modal:c,perpetual:l,promotionCode:u,quantity:p,wcsOsi:f});return r&&(m.innerHTML=`${r}`),m}static getCheckoutLinks(t){return Tt(Le,t)}get isCheckoutLink(){return!0}get placeholder(){return this}async render(t={}){if(!this.isConnected)return!1;let r=k();if(!r)return!1;this.dataset.imsCountry||r.imsCountryPromise.then(c=>{c&&(this.dataset.imsCountry=c)},ve);let n=r.collectCheckoutOptions(t,this.placeholder);if(!n.wcsOsi.length)return!1;let i=this.placeholder.togglePending(n);this.href="";let o=r.resolveOfferSelectors(n),s=await Promise.all(o);s=s.map(c=>pt(c,n));let a=await r.buildCheckoutAction(s.flat(),n);return this.renderOffers(s.flat(),n,{},a,i)}renderOffers(t,r,n={},i=void 0,o=void 0){if(!this.isConnected)return!1;let s=k();if(!s)return!1;if(r={...r,...n},o??(o=this.placeholder.togglePending(r)),i){if(this.placeholder.toggleResolved(o,t,r)){let{url:a,text:c,handler:l}=i;return a&&(this.href=a),c&&(this.firstElementChild.innerHTML=c),l&&(this.href="#",this.addEventListener("click",l.bind(this))),!0}}else if(t.length){if(this.placeholder.toggleResolved(o,t,r)){let a=s.buildCheckoutURL(t,r);return this.href=a,!0}}else{let a=new Error(`Not provided: ${r?.wcsOsi??"-"}`);if(this.placeholder.toggleFailed(o,a,r))return this.href="",!0}return!1}updateOptions(t={}){let r=k();if(!r)return!1;let{checkoutMarketSegment:n,checkoutWorkflow:i,checkoutWorkflowStep:o,perpetual:s,promotionCode:a,quantity:c,wcsOsi:l}=r.collectCheckoutOptions(t);return vt(this,{checkoutMarketSegment:n,checkoutWorkflow:i,checkoutWorkflowStep:o,perpetual:s,promotionCode:a,quantity:c,wcsOsi:l}),!0}};ee(Le,"is","checkout-link"),ee(Le,"tag","a");var Mr=Le,bt=yt(Mr);var Re=class Re extends HTMLSpanElement{static get observedAttributes(){return["data-display-old-price","data-display-per-unit","data-display-recurrence","data-display-tax","data-perpetual","data-promotion-code","data-tax-exclusive","data-template","data-wcs-osi"]}static createInlinePrice(t){let r=k();if(!r)return null;let{displayOldPrice:n,displayPerUnit:i,displayRecurrence:o,displayTax:s,forceTaxExclusive:a,perpetual:c,promotionCode:l,quantity:u,template:p,wcsOsi:f}=r.collectPriceOptions(t);return gt(Re,{displayOldPrice:n,displayPerUnit:i,displayRecurrence:o,displayTax:s,forceTaxExclusive:a,perpetual:c,promotionCode:l,quantity:u,template:p,wcsOsi:f})}static getInlinePrices(t){return Tt(Re,t)}get isInlinePrice(){return!0}get placeholder(){return this}async render(t={}){if(!this.isConnected)return!1;let r=k();if(!r)return!1;let n=r.collectPriceOptions(t,this.placeholder);if(!n.wcsOsi.length)return!1;let i=this.placeholder.togglePending(n);this.innerHTML="";let[o]=r.resolveOfferSelectors(n);return this.renderOffers(pt(await o,n),n,i)}renderOffers(t,r={},n=void 0){if(!this.isConnected)return;let i=k();if(!i)return!1;let o=i.collectPriceOptions({...this.dataset,...r});if(n??(n=this.placeholder.togglePending(o)),t.length){if(this.placeholder.toggleResolved(n,t,o))return this.innerHTML=i.buildPriceHTML(t,o),!0}else{let s=new Error(`Not provided: ${o?.wcsOsi??"-"}`);if(this.placeholder.toggleFailed(n,s,o))return this.innerHTML="",!0}return!1}updateOptions(t){let r=k();if(!r)return!1;let{displayOldPrice:n,displayPerUnit:i,displayRecurrence:o,displayTax:s,forceTaxExclusive:a,perpetual:c,promotionCode:l,quantity:u,template:p,wcsOsi:f}=r.collectPriceOptions(t);return vt(this,{displayOldPrice:n,displayPerUnit:i,displayRecurrence:o,displayTax:s,forceTaxExclusive:a,perpetual:c,promotionCode:l,quantity:u,template:p,wcsOsi:f}),!0}};ee(Re,"is","inline-price"),ee(Re,"tag","span");var kr=Re,St=yt(kr);function Jn({providers:e,settings:t},r){let n=N.module("checkout");function i(l,u){let{checkoutClientId:p,checkoutWorkflow:f,checkoutWorkflowStep:m,country:h,language:v,promotionCode:b,quantity:O}=t,{checkoutMarketSegment:A,checkoutWorkflow:x=f,checkoutWorkflowStep:S=m,imsCountry:w,country:I=w??h,language:D=v,quantity:L=O,entitlement:C,modal:H,perpetual:ce,promotionCode:J=b,wcsOsi:ie,...Ee}=Object.assign({},u?.dataset??{},l??{}),ue=te(x,Y,y.checkoutWorkflow),xe=$.CHECKOUT;ue===Y.V3&&(xe=te(S,$,y.checkoutWorkflowStep));let Ne=Se({...Ee,checkoutClientId:p,checkoutMarketSegment:A,country:I,quantity:we(L,y.quantity),checkoutWorkflow:ue,checkoutWorkflowStep:xe,language:D,entitlement:T(C),modal:T(H),perpetual:T(ce),promotionCode:Me(J).effectivePromoCode,wcsOsi:mt(ie)});if(u)for(let At of e.checkout)At(u,Ne);return Ne}async function o(l,u){let p=k(),f=await r.getCheckoutAction?.(l,u,p.imsSignedInPromise);return f||null}function s(l,u){if(!Array.isArray(l)||!l.length||!u)return"";let{env:p,landscape:f}=t,{checkoutClientId:m,checkoutMarketSegment:h,checkoutWorkflow:v,checkoutWorkflowStep:b,country:O,promotionCode:A,quantity:x,...S}=i(u),w=window.frameElement?"if":"fp",I={checkoutPromoCode:A,clientId:m,context:w,country:O,env:p,items:[],marketSegment:h,workflowStep:b,landscape:f,...S};if(l.length===1){let[{offerId:D,offerType:L,productArrangementCode:C}]=l,{marketSegments:[H]}=l[0];Object.assign(I,{marketSegment:H,offerType:L,productArrangementCode:C}),I.items.push(x[0]===1?{id:D}:{id:D,quantity:x[0]})}else I.items.push(...l.map(({offerId:D},L)=>({id:D,quantity:x[L]??y.quantity})));return It(v,I)}let{createCheckoutLink:a,getCheckoutLinks:c}=bt;return{CheckoutLink:bt,CheckoutWorkflow:Y,CheckoutWorkflowStep:$,buildCheckoutAction:o,buildCheckoutURL:s,collectCheckoutOptions:i,createCheckoutLink:a,getCheckoutLinks:c}}function Qo({interval:e=200,maxAttempts:t=25}={}){let r=N.module("ims");return new Promise(n=>{r.debug("Waing for IMS to be ready");let i=0;function o(){window.adobeIMS?.initialized?n():++i>t?(r.debug("Timeout"),n()):setTimeout(o,e)}o()})}function Jo(e){return e.then(()=>window.adobeIMS.isSignedInUser())}function Ko(e){let t=N.module("ims");return e.then(r=>r?window.adobeIMS.getProfile().then(({countryCode:n})=>(t.debug("Got user country:",n),n),n=>{t.error("Unable to get user country:",n)}):null)}function Kn({}){let e=Qo(),t=Jo(e),r=Ko(t);return{imsReadyPromise:e,imsSignedInPromise:t,imsCountryPromise:r}}async function ei(e){if(!e.priceLiteralsURL)throw new Error(wr);let t=await window.fetch(e.priceLiteralsURL),{data:r}=await t.json();if(Array.isArray(r)){let n=o=>r.find(s=>$e(s.lang,o)),i=n(e.language)??n(y.language);if(i)return Object.freeze(i)}return{}}function ti({literals:e,providers:t,settings:r}){function n(a,c){let{country:l,displayOldPrice:u,displayPerUnit:p,displayRecurrence:f,displayTax:m,forceTaxExclusive:h,language:v,promotionCode:b,quantity:O}=r,{displayOldPrice:A=u,displayPerUnit:x=p,displayRecurrence:S=f,displayTax:w=m,forceTaxExclusive:I=h,country:D=l,language:L=v,perpetual:C,promotionCode:H=b,quantity:ce=O,template:J,wcsOsi:ie,...Ee}=Object.assign({},c?.dataset??{},a??{}),ue=Se({...Ee,country:D,displayOldPrice:T(A),displayPerUnit:T(x),displayRecurrence:T(S),displayTax:T(w),forceTaxExclusive:T(I),language:L,perpetual:T(C),promotionCode:Me(H).effectivePromoCode,quantity:we(ce,y.quantity),template:J,wcsOsi:mt(ie)});if(c)for(let xe of t.price)xe(c,ue);return ue}function i(a,c){if(!Array.isArray(a)||!a.length||!c)return"";let{template:l}=c,u;switch(l){case"discount":u=fr;break;case"strikethrough":u=lr;break;case"optical":u=ur;break;default:u=c.promotionCode?cr:ar}let p=n(c);p.literals=Object.assign({},e.price,Se(c.literals??{}));let[f]=a;return f={...f,...f.priceDetails},u(p,f)}let{createInlinePrice:o,getInlinePrices:s}=St;return{InlinePrice:St,buildPriceHTML:i,collectPriceOptions:n,createInlinePrice:o,getInlinePrices:s}}var es={[q.PRODUCTION]:"https://wcs.adobe.com",[q.STAGE]:"https://wcs.stage.adobe.com"};function ri({settings:e}){let t=N.module("wcs"),{env:r,wcsApiKey:n}=e,i={apiKey:n,baseUrl:es[r],fetch:window.fetch.bind(window)},o=Ye(i),s=new Map,a=new Map,c;async function l(f,m,h=!0){let v=Or;try{t.debug("Fetching:",f),f.offerSelectorIds=f.offerSelectorIds.sort();let{data:b}=await o(f,{apiKey:n,environment:e.wcsEnv,landscape:r===q.STAGE?"ALL":e.landscape},({resolvedOffers:A})=>({offers:A.map(vr)}));t.debug("Fetched:",f,b);let{offers:O}=b??{};m.forEach(({resolve:A},x)=>{let S=O.filter(({offerSelectorIds:w})=>w.includes(x)).flat();S.length&&(m.delete(x),A(S))})}catch(b){b.status===404&&f.offerSelectorIds.length>1?(t.debug("Multi-osi 404, fallback to fetch-by-one strategy"),await Promise.allSettled(f.offerSelectorIds.map(O=>l({...f,offerSelectorIds:[O]},m,!1)))):(t.error("Failed:",f,b),v=_r)}h&&m.size&&(t.debug("Missing:",{offerSelectorIds:[...m.keys()]}),m.forEach(b=>{b.reject(new Error(v))}))}function u(){clearTimeout(c);let f=[...a.values()];a.clear(),f.forEach(({options:m,promises:h})=>l(m,h))}function p({country:f,language:m,perpetual:h=!1,promotionCode:v="",wcsOsi:b=[]}){let O=`${m}_${f}`;f!=="GB"&&(m=h?"EN":"MULT");let A=[f,m,v].filter(x=>x).join("-").toLowerCase();return b.map(x=>{let S=`${x}-${A}`;if(!s.has(S)){let w=new Promise((I,D)=>{let L=a.get(A);if(!L){let C={country:f,locale:O,offerSelectorIds:[]};f!=="GB"&&(C.language=m),L={options:C,promises:new Map},a.set(A,L)}v&&(L.options.promotionCode=v),L.options.offerSelectorIds.push(x),L.promises.set(x,{resolve:I,reject:D}),L.options.offerSelectorIds.length>=e.wcsBufferLimit?u():(t.debug("Queued:",L.options),c||(c=setTimeout(u,e.wcsBufferDelay)))});s.set(S,w)}return s.get(S)})}return{WcsCommitment:Sr,WcsPlanType:Ar,WcsTerm:Pr,resolveOfferSelectors:p}}var U=class extends HTMLElement{get isWcmsCommerce(){return!0}};ee(U,"instance"),ee(U,"promise",null);window.customElements.define(re,U);async function ts(e,t){let r=N.init(e.env).module("service");r.debug("Activating:",e);let n={price:{}},i=Object.freeze(Cr(e));try{n.price=await ei(i)}catch(c){r.warn("Price literals were not fetched:",c)}let o={checkout:new Set,price:new Set},s=document.createElement(re),a={literals:n,providers:o,settings:i};return U.instance=Object.defineProperties(s,Object.getOwnPropertyDescriptors({...Jn(a,t),...Kn(a),...ti(a),...ri(a),...Rr,Log:N,get defaults(){return y},get literals(){return n},get log(){return N},get providers(){return{checkout(c){return o.checkout.add(c),()=>o.checkout.delete(c)},price(c){return o.price.add(c),()=>o.price.delete(c)}}},get settings(){return i}})),r.debug("Activated:",{literals:n,settings:i,element:s}),document.head.append(s),ae(()=>{let c=new CustomEvent(de,{bubbles:!0,cancelable:!1,detail:U.instance});U.instance.dispatchEvent(c)}),U.instance}function ni(){document.head.querySelector(re)?.remove(),U.promise=null,N.reset()}function rs(e,t){if(se(e)){let r=se(t)?t():{};return r.force&&ni(),U.promise??(U.promise=ts(e(),r))}return U.promise?U.promise:new Promise(r=>{let n=i=>{r(i.detail)};document.head.addEventListener(de,n,{once:!0})})}export{bt as CheckoutLink,Y as CheckoutWorkflow,$ as CheckoutWorkflowStep,y as Defaults,St as InlinePrice,M as Landscape,N as Log,re as TAG_NAME_SERVICE,Sr as WcsCommitment,Oe as WcsEnv,Ar as WcsPlanType,Pr as WcsTerm,Bn as getLocaleSettings,Cr as getSettings,rs as init,ni as reset}; +`,pe.MISSING_INTL_API,s);var S=r.getPluralRules(t,{type:u.pluralType}).select(f-(u.offset||0));x=u.options[S]||u.options.other}if(!x)throw new rr(u.value,f,Object.keys(u.options),s);a.push.apply(a,je(x.value,t,r,n,i,f-(u.offset||0)));continue}}return ao(a)}function uo(e,t){return t?g(g(g({},e||{}),t||{}),Object.keys(e).reduce(function(r,n){return r[n]=g(g({},e[n]),t[n]||{}),r},{})):e}function lo(e,t){return t?Object.keys(e).reduce(function(r,n){return r[n]=uo(e[n],t[n]),r},g({},e)):e}function nr(e){return{create:function(){return{get:function(t){return e[t]},set:function(t,r){e[t]=r}}}}}function fo(e){return e===void 0&&(e={number:{},dateTime:{},pluralRules:{}}),{getNumberFormat:Ve(function(){for(var t,r=[],n=0;n0?e.substring(0,n):"";let i=Nn(e.split("").reverse().join("")),o=r-i,s=e.substring(o,o+1),a=o+(s==="."||s===","?1:0);t.suffix=i>0?e.substring(a,r):"",t.mask=e.substring(n,a),t.maskHasNegativeSign=t.mask.charAt(0)==="-",t.maskHasPositiveSign=t.mask.charAt(0)==="+";let c=t.mask.match(mo);return t.decimal=c&&c[c.length-1]||".",t.separator=c&&c[1]&&c[0]||",",c=t.mask.split(t.decimal),t.integer=c[0],t.fraction=c[1],t}function Eo(e,t,r){let n=!1,i={value:e};e<0&&(n=!0,i.value=-i.value),i.sign=n?"-":"",i.value=Number(i.value).toFixed(t.fraction&&t.fraction.length),i.value=Number(i.value).toString();let o=t.fraction&&t.fraction.lastIndexOf("0"),[s="0",a=""]=i.value.split(".");return(!a||a&&a.length<=o)&&(a=o<0?"":(+("0."+a)).toFixed(o+1).replace("0.","")),i.integer=s,i.fraction=a,xo(i,t),(i.result==="0"||i.result==="")&&(n=!1,i.sign=""),!n&&t.maskHasPositiveSign?i.sign="+":n&&t.maskHasPositiveSign?i.sign="-":n&&(i.sign=r&&r.enforceMaskSign&&!t.maskHasNegativeSign?"":"-"),i}function xo(e,t){e.result="";let r=t.integer.split(t.separator),n=r.join(""),i=n&&n.indexOf("0");if(i>-1)for(;e.integer.lengthMath.round(e*20)/20},ur=(e,t)=>({accept:e,round:t}),bo=[ur(({divisor:e,price:t})=>t%e==0,({divisor:e,price:t})=>t/e),ur(({usePrecision:e})=>e,({divisor:e,price:t})=>Math.ceil(Math.floor(t*1e4/e)/100)/100),ur(()=>!0,({divisor:e,price:t})=>Math.ceil(Math.floor(t*100/e)/100))],kn={[_e.YEAR]:{[W.MONTHLY]:st.MONTH,[W.ANNUAL]:st.YEAR},[_e.MONTH]:{[W.MONTHLY]:st.MONTH}},So=(e,t)=>e.indexOf(`'${t}'`)===0,Ao=(e,t=!0)=>{let r=e.replace(/'.*?'/,"").trim(),n=Fn(r);return!!n?t||(r=r.replace(/[,\.]0+/,n)):r=r.replace(/\s?(#.*0)(?!\s)?/,"$&"+_o(e)),r},Po=e=>{let t=Oo(e),r=So(e,t),n=e.replace(/'.*?'/,""),i=Dn.test(n)||Mn.test(n);return{currencySymbol:t,isCurrencyFirst:r,hasCurrencySpace:i}},Gn=e=>e.replace(Dn,Un).replace(Mn,Un),_o=e=>e.match(/#(.?)#/)?.[1]===Cn?yo:Cn,Oo=e=>e.match(/'(.*?)'/)?.[1]??"",Fn=e=>e.match(/0(.?)0/)?.[1]??"";function Vn({formatString:e,price:t,usePrecision:r,isIndianPrice:n=!1},i,o=s=>s){let{currencySymbol:s,isCurrencyFirst:a,hasCurrencySpace:c}=Po(e),l=r?Fn(e):"",u=Ao(e,r),p=r?2:0,f=o(t,{currencySymbol:s}),m=n?f.toLocaleString("hi-IN",{minimumFractionDigits:p,maximumFractionDigits:p}):In(u,f),h=r?m.lastIndexOf(l):m.length,v=m.substring(0,h),b=m.substring(h+1);return{accessiblePrice:e.replace(/'.*?'/,"SYMBOL").replace(/#.*0/,m).replace(/SYMBOL/,s),currencySymbol:s,decimals:b,decimalsDelimiter:l,hasCurrencySpace:c,integer:v,isCurrencyFirst:a,recurrenceTerm:i}}var Wn=e=>{let{commitment:t,term:r,usePrecision:n}=e,i=To[r]??1;return Vn(e,i>1?st.MONTH:kn[t]?.[r],(o,{currencySymbol:s})=>{let a={divisor:i,price:o,usePrecision:n},{round:c}=bo.find(({accept:u})=>u(a));if(!c)throw new Error(`Missing rounding rule for: ${JSON.stringify(a)}`);return(vo[s]??(u=>u))(c(a))})},jn=({commitment:e,term:t,...r})=>Vn(r,kn[e]?.[t]);var wo={recurrenceLabel:"{recurrenceTerm, select, MONTH {/mo} YEAR {/yr} other {}}",recurrenceAriaLabel:"{recurrenceTerm, select, MONTH {per month} YEAR {per year} other {}}",perUnitLabel:"{perUnit, select, LICENSE {per license} other {}}",perUnitAriaLabel:"{perUnit, select, LICENSE {per license} other {}}",freeLabel:"Free",freeAriaLabel:"Free",taxExclusiveLabel:"{taxTerm, select, GST {excl. GST} VAT {excl. VAT} TAX {excl. tax} IVA {excl. IVA} SST {excl. SST} KDV {excl. KDV} other {}}",taxInclusiveLabel:"{taxTerm, select, GST {incl. GST} VAT {incl. VAT} TAX {incl. tax} IVA {incl. IVA} SST {incl. SST} KDV {incl. KDV} other {}}",alternativePriceAriaLabel:"Alternatively at {alternativePrice}",strikethroughAriaLabel:"Regularly at {strikethroughPrice}"},Lo=rn("ConsonantTemplates/price"),Ro=/<.+?>/g,F={container:"price",containerOptical:"price-optical",containerStrikethrough:"price-strikethrough",disabled:"disabled",currencySpace:"price-currency-space",currencySymbol:"price-currency-symbol",decimals:"price-decimals",decimalsDelimiter:"price-decimals-delimiter",integer:"price-integer",recurrence:"price-recurrence",taxInclusivity:"price-tax-inclusivity",unitType:"price-unit-type"},me={perUnitLabel:"perUnitLabel",perUnitAriaLabel:"perUnitAriaLabel",recurrenceLabel:"recurrenceLabel",recurrenceAriaLabel:"recurrenceAriaLabel",taxExclusiveLabel:"taxExclusiveLabel",taxInclusiveLabel:"taxInclusiveLabel",strikethroughAriaLabel:"strikethroughAriaLabel"},No="TAX_EXCLUSIVE",Io=e=>en(e)?Object.entries(e).filter(([,t])=>ve(t)||ze(t)||t===!0).reduce((t,[r,n])=>t+` ${r}${n===!0?"":'="'+Jr(n)+'"'}`,""):"",X=(e,t,r,n=!1)=>`${n?Gn(t):t??""}`;function Co(e,{accessibleLabel:t,currencySymbol:r,decimals:n,decimalsDelimiter:i,hasCurrencySpace:o,integer:s,isCurrencyFirst:a,recurrenceLabel:c,perUnitLabel:l,taxInclusivityLabel:u},p={}){let f=X(F.currencySymbol,r),m=X(F.currencySpace,o?" ":""),h="";return a&&(h+=f+m),h+=X(F.integer,s),h+=X(F.decimalsDelimiter,i),h+=X(F.decimals,n),a||(h+=m+f),h+=X(F.recurrence,c,null,!0),h+=X(F.unitType,l,null,!0),h+=X(F.taxInclusivity,u,!0),X(e,h,{...p,"aria-label":t})}var Oe=({displayOptical:e=!1,displayStrikethrough:t=!1}={})=>({country:r,displayFormatted:n=!0,displayRecurrence:i=!0,displayPerUnit:o=!1,displayTax:s=!1,language:a,literals:c={}}={},{commitment:l,formatString:u,price:p,priceWithoutDiscount:f,taxDisplay:m,taxTerm:h,term:v,usePrecision:b}={},O={})=>{Object.entries({country:r,formatString:u,language:a,price:p}).forEach(([K,_t])=>{if(_t==null)throw new Error(`Argument "${K}" is missing`)});let A={...wo,...c},x=`${a.toLowerCase()}-${r.toUpperCase()}`;function S(K,_t){let Ot=A[K];if(Ot==null)return"";try{return new Rn(Ot.replace(Ro,""),x).format(_t)}catch{return Lo.error("Failed to format literal:",Ot),""}}let w=t&&f?f:p,{accessiblePrice:I,recurrenceTerm:D,...L}=(e?Wn:jn)({commitment:l,formatString:u,term:v,price:e?p:w,usePrecision:b,isIndianPrice:r==="IN"}),C=I,H="";if(T(i)&&D){let K=S(me.recurrenceAriaLabel,{recurrenceTerm:D});K&&(C+=" "+K),H=S(me.recurrenceLabel,{recurrenceTerm:D})}let ce="";if(T(o)){ce=S(me.perUnitLabel,{perUnit:"LICENSE"});let K=S(me.perUnitAriaLabel,{perUnit:"LICENSE"});K&&(C+=" "+K)}let J="";T(s)&&h&&(J=S(m===No?me.taxExclusiveLabel:me.taxInclusiveLabel,{taxTerm:h}),J&&(C+=" "+J)),t&&(C=S(me.strikethroughAriaLabel,{strikethroughPrice:C}));let ie=F.container;if(e&&(ie+=" "+F.containerOptical),t&&(ie+=" "+F.containerStrikethrough),T(n))return Co(ie,{...L,accessibleLabel:C,recurrenceLabel:H,perUnitLabel:ce,taxInclusivityLabel:J},O);let{currencySymbol:xe,decimals:ue,decimalsDelimiter:ge,hasCurrencySpace:Ie,integer:Pt,isCurrencyFirst:ui}=L,ye=[Pt,ge,ue];ui?(ye.unshift(Ie?"\xA0":""),ye.unshift(xe)):(ye.push(Ie?"\xA0":""),ye.push(xe)),ye.push(H,ce,J);let li=ye.join("");return X(ie,li,O)},Hn=()=>(e,t,r)=>{let i=(e.displayOldPrice===void 0||T(e.displayOldPrice))&&t.priceWithoutDiscount&&t.priceWithoutDiscount!=t.price;return`${Oe()(e,t,r)}${i?" "+Oe({displayStrikethrough:!0})(e,t,r):""}`};var lr=Oe(),fr=Hn(),pr=Oe({displayOptical:!0}),mr=Oe({displayStrikethrough:!0});var Uo=(e,t)=>{if(!(!Se(e)||!Se(t)))return Math.floor((t-e)/t*100)},Xn=()=>(e,t,r)=>{let{price:n,priceWithoutDiscount:i}=t,o=Uo(n,i);return o===void 0?'':`${o}%`};var hr=Xn();var dr;(function(e){e.BASE="BASE",e.TRIAL="TRIAL",e.PROMOTION="PROMOTION"})(dr||(dr={}));var j;(function(e){e.MONTH="MONTH",e.YEAR="YEAR",e.TWO_YEARS="TWO_YEARS",e.THREE_YEARS="THREE_YEARS",e.PERPETUAL="PERPETUAL"})(j||(j={}));var B;(function(e){e.ANNUAL="ANNUAL",e.MONTHLY="MONTHLY",e.TWO_YEARS="TWO_YEARS",e.THREE_YEARS="THREE_YEARS"})(B||(B={}));var Er;(function(e){e.INDIVIDUAL="INDIVIDUAL",e.TEAM="TEAM",e.ENTERPRISE="ENTERPRISE"})(Er||(Er={}));var xr;(function(e){e.COM="COM",e.EDU="EDU",e.GOV="GOV"})(xr||(xr={}));var gr;(function(e){e.DIRECT="DIRECT",e.INDIRECT="INDIRECT"})(gr||(gr={}));var yr;(function(e){e.ENTERPRISE_PRODUCT="ENTERPRISE_PRODUCT",e.ETLA="ETLA",e.RETAIL="RETAIL",e.VIP="VIP",e.VIPMP="VIPMP",e.FREE="FREE"})(yr||(yr={}));var Tr="ABM",vr="PUF",br="M2M",Sr="PERPETUAL",Do="TAX_INCLUSIVE_DETAILS",Mo="TAX_EXCLUSIVE",Bn={ABM:Tr,PUF:vr,M2M:br,PERPETUAL:Sr},nc={[Tr]:{commitment:j.YEAR,term:B.MONTHLY},[vr]:{commitment:j.YEAR,term:B.ANNUAL},[br]:{commitment:j.MONTH,term:B.MONTHLY},[Sr]:{commitment:j.PERPETUAL,term:void 0}},Yn="Value is not an offer",Ar=e=>{if(typeof e!="object")return Yn;let{commitment:t,term:r}=e,n=ko(t,r);return{...e,planType:n}};var ko=(e,t)=>{if(e===void 0)return Yn;if(e===""&&t==="")return"";let r="";return e===j.YEAR?t===B.MONTHLY?r=Tr:t===B.ANNUAL&&(r=vr):e===j.MONTH?t===B.MONTHLY&&(r=br):e===j.PERPETUAL&&(r=Sr),r};function Pr(e){let{priceDetails:t}=e,{price:r,priceWithoutDiscount:n,priceWithoutTax:i,priceWithoutDiscountAndTax:o,taxDisplay:s}=t;if(s!==Do)return e;let a={...e,priceDetails:{...t,price:i??r,priceWithoutDiscount:o??n,taxDisplay:Mo}};return a.offerType==="TRIAL"&&a.priceDetails.price===0&&(a.priceDetails.price=a.priceDetails.priceWithoutDiscount),a}var{freeze:he}=Object,Y=he({...le}),$=he({...oe}),q=he({...V}),_r=he({...De}),we=he({...Ue}),Or=he({...Bn}),wr=he({...Me});var Cr={};pi(Cr,{CLASS_NAME_FAILED:()=>at,CLASS_NAME_PENDING:()=>ct,CLASS_NAME_RESOLVED:()=>ut,ERROR_MESSAGE_BAD_REQUEST:()=>Lr,ERROR_MESSAGE_MISSING_LITERALS_URL:()=>Nr,ERROR_MESSAGE_OFFER_NOT_FOUND:()=>Rr,EVENT_TYPE_ERROR:()=>Go,EVENT_TYPE_FAILED:()=>lt,EVENT_TYPE_PENDING:()=>ft,EVENT_TYPE_READY:()=>de,EVENT_TYPE_RESOLVED:()=>pt,LOG_NAMESPACE:()=>Ir,STATE_FAILED:()=>z,STATE_PENDING:()=>Z,STATE_RESOLVED:()=>Q,TAG_NAME_SERVICE:()=>re});var at="placeholder-failed",ct="placeholder-pending",ut="placeholder-resolved",Lr="Bad WCS request",Rr="Commerce offer not found",Nr="Literals URL not provided",Go="wcms:commerce:error",lt="wcms:placeholder:failed",ft="wcms:placeholder:pending",de="wcms:commerce:ready",pt="wcms:placeholder:resolved",Ir="wcms/commerce",z="failed",Z="pending",Q="resolved",re="wcms-commerce";var Ur={clientId:"merch-at-scale",delimiter:"\xB6",ignoredProperties:["analytics","literals"],serializableTypes:["Array","Object"],sampleRate:30,tags:"consumer=milo/commerce"},$n=new Set,Fo=e=>e instanceof Error||typeof e.originatingRequest=="string";function qn(e){if(e==null)return;let t=typeof e;if(t==="function"){let{name:r}=e;return r?`${t} ${r}`:t}if(t==="object"){if(e instanceof Error)return e.message;if(typeof e.originatingRequest=="string"){let{message:n,originatingRequest:i,status:o}=e;return[n,o,i].filter(s=>s).join(" ")}let r=e[Symbol.toStringTag]??Object.getPrototypeOf(e).constructor.name;if(!Ur.serializableTypes.includes(r))return r}return e}function Vo(e,t){if(!Ur.ignoredProperties.includes(e))return qn(t)}var Dr={append(e){let{delimiter:t,sampleRate:r,tags:n,clientId:i}=Ur,{message:o,params:s}=e,a=[],c=o,l=[];s.forEach(f=>{f!=null&&(Fo(f)?a:l).push(f)}),a.length&&(c+=" ",c+=a.map(qn).join(" "));let{pathname:u,search:p}=window.location;c+=`${t}page=`,c+=u+p,l.length&&(c+=`${t}facts=`,c+=JSON.stringify(l,Vo)),$n.has(c)||($n.add(c),window.lana.log(c,{sampleRate:r,tags:n,clientId:i}))}};var y=Object.freeze({checkoutClientId:"adobe_com",checkoutWorkflow:Y.V3,checkoutWorkflowStep:$.EMAIL,country:"US",displayOldPrice:!0,displayPerUnit:!1,displayRecurrence:!0,displayTax:!1,env:q.PRODUCTION,forceTaxExclusive:!1,language:"en",entitlement:!1,modal:!1,promotionCode:"",quantity:1,wcsApiKey:"wcms-commerce-ims-ro-user-milo",wcsBufferDelay:1,wcsEnv:we.PRODUCTION,landscape:M.PUBLISHED,wcsBufferLimit:1});function zn(e,{once:t=!1}={}){let r=null;function n(){let i=document.querySelector(re);i!==r&&(r=i,i&&e(i))}return document.addEventListener(de,n,{once:t}),ae(n),()=>document.removeEventListener(de,n)}function mt(e,{country:t,forceTaxExclusive:r,perpetual:n}){let i;if(e.length<2)i=e;else{let o=t==="GB"||n?"EN":"MULT",[s,a]=e;i=[s.language===o?s:a]}return r&&(i=i.map(Pr)),i}var ae=e=>window.setTimeout(e);function Le(e,t=1){if(e==null)return[t];let r=(Array.isArray(e)?e:String(e).split(",")).map(Pe).filter(Se);return r.length||(r=[t]),r}function ht(e){return e==null?[]:(Array.isArray(e)?e:String(e).split(",")).filter(jt)}function k(){return window.customElements.get(re)?.instance}var Wo="en_US",jo={ar:"AR_es",br:"BR_pt",ca:"CA_en",cl:"CL_es",co:"CO_es",la:"DO_es",mx:"MX_es",pe:"PE_es",africa:"ZA_en",dk:"DK_da",de:"DE_de",ee:"EE_et",es:"ES_es",fr:"FR_fr",ie:"IE_en",il_he:"IL_iw",it:"IT_it",lv:"LV_lv",lt:"LT_lt",hu:"HU_hu",mt:"MT_en",mena_en:"DZ_en",mena_ar:"DZ_ar",nl:"NL_nl",no:"NO_nb",pl:"PL_pl",pt:"PT_pt",ro:"RO_ro",si:"SI_sl",sk:"SK_sk",fi:"FI_fi",se:"SE_sv",tr:"TR_tr",uk:"GB_en",at:"AT_de",cz:"CZ_cs",bg:"BG_bg",ru:"RU_ru",ua:"UA_uk",au:"AU_en",in:"IN_en",id_id:"ID_in",nz:"NZ_en",sg:"SG_en",cn:"CN_zh-Hans",tw:"TW_zh-Hant",hk_zh:"HK_zh-hant",jp:"JP_ja",kr:"KR_ko",za:"ZA_en",ng:"NG_en",cr:"CR_es",ec:"EC_es",pr:"US_es",gt:"GT_es",cis_en:"AZ_en",cis_ru:"AZ_ru",sea:"SG_en",th:"TH_en"},ne=Object.freeze({LOCAL:"local",PROD:"prod",STAGE:"stage"});function Zn({locale:e={}}={}){if(!e.prefix)return{country:y.country,language:y.language,locale:Wo};let t=e.prefix.replace("/","")??"",[r=y.country,n=y.language]=(jo[t]??t).split("_",2);return r=r.toUpperCase(),n=n.toLowerCase(),{country:r,language:n,locale:`${n}_${r}`}}function Mr(e={}){let{commerce:t={},locale:r=void 0}=e,i=(e.env?.name===ne.PROD?ne.PROD:te(_("commerce.env",t,{metadata:!1}),ne,ne.PROD))===ne.PROD?q.PRODUCTION:q.STAGE,o=_("checkoutClientId",t)??y.checkoutClientId,s=te(_("checkoutWorkflow",t),Y,y.checkoutWorkflow),a=$.CHECKOUT;s===Y.V3&&(a=te(_("checkoutWorkflowStep",t),$,y.checkoutWorkflowStep));let c=T(_("displayOldPrice",t),y.displayOldPrice),l=T(_("displayPerUnit",t),y.displayPerUnit),u=T(_("displayRecurrence",t),y.displayRecurrence),p=T(_("displayTax",t),y.displayTax),f=T(_("entitlement",t),y.entitlement),m=T(_("modal",t),y.modal),h=T(_("forceTaxExclusive",t),y.forceTaxExclusive),v=_("promotionCode",t)??y.promotionCode,b=Le(_("quantity",t)),O=_("wcsApiKey",t)??y.wcsApiKey,A=e.env?.name===ne.PROD?M.PUBLISHED:te(_("commerce.landscape",t),M,y.landscape),x=Pe(_("wcsBufferDelay",t),y.wcsBufferDelay),S=Pe(_("wcsBufferLimit",t),y.wcsBufferLimit);return{...Zn({locale:r}),displayOldPrice:c,checkoutClientId:o,checkoutWorkflow:s,checkoutWorkflowStep:a,displayPerUnit:l,displayRecurrence:u,displayTax:p,entitlement:f,modal:m,env:i,forceTaxExclusive:h,priceLiteralsURL:t.priceLiteralsURL,promotionCode:v,quantity:b,wcsApiKey:O,wcsBufferDelay:x,wcsBufferLimit:S,wcsEnv:i===q.STAGE?we.STAGE:we.PRODUCTION,landscape:A}}var Jn="debug",Ho="error",Xo="info",Bo="warn",Yo=Date.now(),kr=new Set,Gr=new Set,Qn=new Map,He=Object.freeze({DEBUG:Jn,ERROR:Ho,INFO:Xo,WARN:Bo}),Kn={append({level:e,message:t,params:r,timestamp:n,source:i}){console[e](`${n}ms [${i}] %c${t}`,"font-weight: bold;",...r)}},ei={filter:({level:e})=>e!==Jn},$o={filter:()=>!1};function qo(e,t,r,n,i){return{level:e,message:t,namespace:r,get params(){if(n.length===1){let[o]=n;se(o)&&(n=o(),Array.isArray(n)||(n=[n]))}return n},source:i,timestamp:Date.now()-Yo}}function zo(e){[...Gr].every(t=>t(e))&&kr.forEach(t=>t(e))}function ti(e){let t=(Qn.get(e)??0)+1;Qn.set(e,t);let r=`${e} #${t}`,n=o=>(s,...a)=>zo(qo(o,s,e,a,r)),i=Object.seal({id:r,namespace:e,module(o){return ti(`${i.namespace}/${o}`)},debug:n(He.DEBUG),error:n(He.ERROR),info:n(He.INFO),warn:n(He.WARN)});return i}function dt(...e){e.forEach(t=>{let{append:r,filter:n}=t;se(n)?Gr.add(n):se(r)&&kr.add(r)})}function Zo(e={}){let{name:t}=e,r=T(_("commerce.debug",{search:!0,storage:!0}),t===ne.LOCAL);return dt(r?Kn:ei),t===ne.PROD&&dt(Dr),N}function Qo(){kr.clear(),Gr.clear()}var N={...ti(Ir),Level:He,Plugins:{consoleAppender:Kn,debugFilter:ei,quietFilter:$o,lanaAppender:Dr},init:Zo,reset:Qo,use:dt};var Jo={CLASS_NAME_FAILED:at,CLASS_NAME_PENDING:ct,CLASS_NAME_RESOLVED:ut,EVENT_TYPE_FAILED:lt,EVENT_TYPE_PENDING:ft,EVENT_TYPE_RESOLVED:pt,STATE_FAILED:z,STATE_PENDING:Z,STATE_RESOLVED:Q},Ko={[z]:at,[Z]:ct,[Q]:ut},es={[z]:lt,[Z]:ft,[Q]:pt},gt=new WeakMap;function G(e){if(!gt.has(e)){let t=N.module(e.constructor.is);gt.set(e,{changes:new Map,connected:!1,dispose:be,error:void 0,log:t,options:void 0,promises:[],state:Z,timer:null,value:void 0,version:0})}return gt.get(e)}function Et(e){let t=G(e),{error:r,promises:n,state:i}=t;(i===Q||i===z)&&(t.promises=[],i===Q?n.forEach(({resolve:o})=>o(e)):i===z&&n.forEach(({reject:o})=>o(r))),e.dispatchEvent(new CustomEvent(es[i],{bubbles:!0}))}function xt(e){let t=gt.get(e);[z,Z,Q].forEach(r=>{e.classList.toggle(Ko[r],r===t.state)})}var ts={get error(){return G(this).error},get log(){return G(this).log},get options(){return G(this).options},get state(){return G(this).state},get value(){return G(this).value},attributeChangedCallback(e,t,r){G(this).changes.set(e,r),this.requestUpdate()},connectedCallback(){G(this).dispose=zn(()=>this.requestUpdate(!0))},disconnectedCallback(){let e=G(this);e.connected&&(e.connected=!1,e.log.debug("Disconnected:",{element:this})),e.dispose(),e.dispose=be},onceSettled(){let{error:e,promises:t,state:r}=G(this);return Q===r?Promise.resolve(this):z===r?Promise.reject(e):new Promise((n,i)=>{t.push({resolve:n,reject:i})})},toggleResolved(e,t,r){let n=G(this);return e!==n.version?!1:(r!==void 0&&(n.options=r),n.state=Q,n.value=t,xt(this),this.log.debug("Resolved:",{element:this,value:t}),ae(()=>Et(this)),!0)},toggleFailed(e,t,r){let n=G(this);return e!==n.version?!1:(r!==void 0&&(n.options=r),n.error=t,n.state=z,xt(this),n.log.error("Failed:",{element:this,error:t}),ae(()=>Et(this)),!0)},togglePending(e){let t=G(this);return t.version++,e&&(t.options=e),t.state=Z,xt(this),ae(()=>Et(this)),t.version},requestUpdate(e=!1){if(!this.isConnected||!k())return;let t=G(this);if(t.timer)return;let{error:r,options:n,state:i,value:o,version:s}=t;t.state=Z,t.timer=ae(async()=>{t.timer=null;let a=null;if(t.changes.size&&(a=Object.fromEntries(t.changes.entries()),t.changes.clear()),t.connected?t.log.debug("Updated:",{element:this,changes:a}):(t.connected=!0,t.log.debug("Connected:",{element:this,changes:a})),a||e)try{await this.render?.()===!1&&t.state===Z&&t.version===s&&(t.state=i,t.error=r,t.value=o,xt(this),Et(this))}catch(c){this.toggleFailed(t.version,c,n)}})}};function ri(e={}){return Object.entries(e).forEach(([t,r])=>{(r==null||r===""||r?.length===0)&&delete e[t]}),e}function yt(e,t={}){let{tag:r,is:n}=e,i=document.createElement(r,{is:n});return i.setAttribute("is",n),Object.assign(i.dataset,ri(t)),i}function Tt(e){let{tag:t,is:r,prototype:n}=e,i=window.customElements.get(r);return i||(Object.defineProperties(n,Object.getOwnPropertyDescriptors(ts)),i=Object.defineProperties(e,Object.getOwnPropertyDescriptors(Jo)),window.customElements.define(r,i,{extends:t})),i}function vt(e,t=document.body){return Array.from(t?.querySelectorAll(`${e.tag}[is="${e.is}"]`)??[])}function bt(e,t={}){return e instanceof HTMLElement?(Object.assign(e.dataset,ri(t)),e):null}var Ee,Re=class Re extends HTMLAnchorElement{constructor(){super();Hr(this,Ee,void 0);this.addEventListener("click",this.clickHandler)}static get observedAttributes(){return["data-checkout-workflow","data-checkout-workflow-step","data-ims-country","data-perpetual","data-promotion-code","data-quantity","data-template","data-wcs-osi"]}static createCheckoutLink(r={},n=""){let i=k();if(!i)return null;let{checkoutMarketSegment:o,checkoutWorkflow:s,checkoutWorkflowStep:a,entitlement:c,modal:l,perpetual:u,promotionCode:p,quantity:f,wcsOsi:m}=i.collectCheckoutOptions(r),h=yt(Re,{checkoutMarketSegment:o,checkoutWorkflow:s,checkoutWorkflowStep:a,entitlement:c,modal:l,perpetual:u,promotionCode:p,quantity:f,wcsOsi:m});return n&&(h.innerHTML=`${n}`),h}static getCheckoutLinks(r){return vt(Re,r)}get isCheckoutLink(){return!0}get placeholder(){return this}clickHandler(r){var n;(n=wt(this,Ee))==null||n.call(this,r)}async render(r={}){if(!this.isConnected)return!1;let n=k();if(!n)return!1;this.dataset.imsCountry||n.imsCountryPromise.then(l=>{l&&(this.dataset.imsCountry=l)},be);let i=n.collectCheckoutOptions(r,this.placeholder);if(!i.wcsOsi.length)return!1;let o=this.placeholder.togglePending(i);this.href="";let s=n.resolveOfferSelectors(i),a=await Promise.all(s);a=a.map(l=>mt(l,i));let c=await n.buildCheckoutAction(a.flat(),i);return this.renderOffers(a.flat(),i,{},c,o)}renderOffers(r,n,i={},o=void 0,s=void 0){if(!this.isConnected)return!1;let a=k();if(!a)return!1;if(n={...n,...i},s??(s=this.placeholder.togglePending(n)),wt(this,Ee)&&Lt(this,Ee,void 0),o){this.placeholder.toggleResolved(s,r,n);let{url:c,text:l,handler:u}=o;return c&&(this.href=c),l&&(this.firstElementChild.innerHTML=l),u&&(this.href="#",Lt(this,Ee,u.bind(this))),!0}else if(r.length){if(this.placeholder.toggleResolved(s,r,n)){let c=a.buildCheckoutURL(r,n);return this.href=c,!0}}else{let c=new Error(`Not provided: ${n?.wcsOsi??"-"}`);if(this.placeholder.toggleFailed(s,c,n))return this.href="",!0}return!1}updateOptions(r={}){let n=k();if(!n)return!1;let{checkoutMarketSegment:i,checkoutWorkflow:o,checkoutWorkflowStep:s,perpetual:a,promotionCode:c,quantity:l,wcsOsi:u}=n.collectCheckoutOptions(r);return bt(this,{checkoutMarketSegment:i,checkoutWorkflow:o,checkoutWorkflowStep:s,perpetual:a,promotionCode:c,quantity:l,wcsOsi:u}),!0}};Ee=new WeakMap,ee(Re,"is","checkout-link"),ee(Re,"tag","a");var Fr=Re,St=Tt(Fr);var Ne=class Ne extends HTMLSpanElement{static get observedAttributes(){return["data-display-old-price","data-display-per-unit","data-display-recurrence","data-display-tax","data-perpetual","data-promotion-code","data-tax-exclusive","data-template","data-wcs-osi"]}static createInlinePrice(t){let r=k();if(!r)return null;let{displayOldPrice:n,displayPerUnit:i,displayRecurrence:o,displayTax:s,forceTaxExclusive:a,perpetual:c,promotionCode:l,quantity:u,template:p,wcsOsi:f}=r.collectPriceOptions(t);return yt(Ne,{displayOldPrice:n,displayPerUnit:i,displayRecurrence:o,displayTax:s,forceTaxExclusive:a,perpetual:c,promotionCode:l,quantity:u,template:p,wcsOsi:f})}static getInlinePrices(t){return vt(Ne,t)}get isInlinePrice(){return!0}get placeholder(){return this}async render(t={}){if(!this.isConnected)return!1;let r=k();if(!r)return!1;let n=r.collectPriceOptions(t,this.placeholder);if(!n.wcsOsi.length)return!1;let i=this.placeholder.togglePending(n);this.innerHTML="";let[o]=r.resolveOfferSelectors(n);return this.renderOffers(mt(await o,n),n,i)}renderOffers(t,r={},n=void 0){if(!this.isConnected)return;let i=k();if(!i)return!1;let o=i.collectPriceOptions({...this.dataset,...r});if(n??(n=this.placeholder.togglePending(o)),t.length){if(this.placeholder.toggleResolved(n,t,o))return this.innerHTML=i.buildPriceHTML(t,o),!0}else{let s=new Error(`Not provided: ${o?.wcsOsi??"-"}`);if(this.placeholder.toggleFailed(n,s,o))return this.innerHTML="",!0}return!1}updateOptions(t){let r=k();if(!r)return!1;let{displayOldPrice:n,displayPerUnit:i,displayRecurrence:o,displayTax:s,forceTaxExclusive:a,perpetual:c,promotionCode:l,quantity:u,template:p,wcsOsi:f}=r.collectPriceOptions(t);return bt(this,{displayOldPrice:n,displayPerUnit:i,displayRecurrence:o,displayTax:s,forceTaxExclusive:a,perpetual:c,promotionCode:l,quantity:u,template:p,wcsOsi:f}),!0}};ee(Ne,"is","inline-price"),ee(Ne,"tag","span");var Vr=Ne,At=Tt(Vr);function ni({providers:e,settings:t},r){let n=N.module("checkout");function i(l,u){let{checkoutClientId:p,checkoutWorkflow:f,checkoutWorkflowStep:m,country:h,language:v,promotionCode:b,quantity:O}=t,{checkoutMarketSegment:A,checkoutWorkflow:x=f,checkoutWorkflowStep:S=m,imsCountry:w,country:I=w??h,language:D=v,quantity:L=O,entitlement:C,modal:H,perpetual:ce,promotionCode:J=b,wcsOsi:ie,...xe}=Object.assign({},u?.dataset??{},l??{}),ue=te(x,Y,y.checkoutWorkflow),ge=$.CHECKOUT;ue===Y.V3&&(ge=te(S,$,y.checkoutWorkflowStep));let Ie=Ae({...xe,checkoutClientId:p,checkoutMarketSegment:A,country:I,quantity:Le(L,y.quantity),checkoutWorkflow:ue,checkoutWorkflowStep:ge,language:D,entitlement:T(C),modal:T(H),perpetual:T(ce),promotionCode:ke(J).effectivePromoCode,wcsOsi:ht(ie)});if(u)for(let Pt of e.checkout)Pt(u,Ie);return Ie}async function o(l,u){let p=k(),f=await r.getCheckoutAction?.(l,u,p.imsSignedInPromise);return f||null}function s(l,u){if(!Array.isArray(l)||!l.length||!u)return"";let{env:p,landscape:f}=t,{checkoutClientId:m,checkoutMarketSegment:h,checkoutWorkflow:v,checkoutWorkflowStep:b,country:O,promotionCode:A,quantity:x,...S}=i(u),w=window.frameElement?"if":"fp",I={checkoutPromoCode:A,clientId:m,context:w,country:O,env:p,items:[],marketSegment:h,workflowStep:b,landscape:f,...S};if(l.length===1){let[{offerId:D,offerType:L,productArrangementCode:C}]=l,{marketSegments:[H]}=l[0];Object.assign(I,{marketSegment:H,offerType:L,productArrangementCode:C}),I.items.push(x[0]===1?{id:D}:{id:D,quantity:x[0]})}else I.items.push(...l.map(({offerId:D},L)=>({id:D,quantity:x[L]??y.quantity})));return Dt(v,I)}let{createCheckoutLink:a,getCheckoutLinks:c}=St;return{CheckoutLink:St,CheckoutWorkflow:Y,CheckoutWorkflowStep:$,buildCheckoutAction:o,buildCheckoutURL:s,collectCheckoutOptions:i,createCheckoutLink:a,getCheckoutLinks:c}}function rs({interval:e=200,maxAttempts:t=25}={}){let r=N.module("ims");return new Promise(n=>{r.debug("Waing for IMS to be ready");let i=0;function o(){window.adobeIMS?.initialized?n():++i>t?(r.debug("Timeout"),n()):setTimeout(o,e)}o()})}function ns(e){return e.then(()=>window.adobeIMS.isSignedInUser())}function is(e){let t=N.module("ims");return e.then(r=>r?window.adobeIMS.getProfile().then(({countryCode:n})=>(t.debug("Got user country:",n),n),n=>{t.error("Unable to get user country:",n)}):null)}function ii({}){let e=rs(),t=ns(e),r=is(t);return{imsReadyPromise:e,imsSignedInPromise:t,imsCountryPromise:r}}async function oi(e){if(!e.priceLiteralsURL)throw new Error(Nr);let t=await window.fetch(e.priceLiteralsURL),{data:r}=await t.json();if(Array.isArray(r)){let n=o=>r.find(s=>qe(s.lang,o)),i=n(e.language)??n(y.language);if(i)return Object.freeze(i)}return{}}function si({literals:e,providers:t,settings:r}){function n(a,c){let{country:l,displayOldPrice:u,displayPerUnit:p,displayRecurrence:f,displayTax:m,forceTaxExclusive:h,language:v,promotionCode:b,quantity:O}=r,{displayOldPrice:A=u,displayPerUnit:x=p,displayRecurrence:S=f,displayTax:w=m,forceTaxExclusive:I=h,country:D=l,language:L=v,perpetual:C,promotionCode:H=b,quantity:ce=O,template:J,wcsOsi:ie,...xe}=Object.assign({},c?.dataset??{},a??{}),ue=Ae({...xe,country:D,displayOldPrice:T(A),displayPerUnit:T(x),displayRecurrence:T(S),displayTax:T(w),forceTaxExclusive:T(I),language:L,perpetual:T(C),promotionCode:ke(H).effectivePromoCode,quantity:Le(ce,y.quantity),template:J,wcsOsi:ht(ie)});if(c)for(let ge of t.price)ge(c,ue);return ue}function i(a,c){if(!Array.isArray(a)||!a.length||!c)return"";let{template:l}=c,u;switch(l){case"discount":u=hr;break;case"strikethrough":u=mr;break;case"optical":u=pr;break;default:u=c.promotionCode?fr:lr}let p=n(c);p.literals=Object.assign({},e.price,Ae(c.literals??{}));let[f]=a;return f={...f,...f.priceDetails},u(p,f)}let{createInlinePrice:o,getInlinePrices:s}=At;return{InlinePrice:At,buildPriceHTML:i,collectPriceOptions:n,createInlinePrice:o,getInlinePrices:s}}var os={[q.PRODUCTION]:"https://wcs.adobe.com",[q.STAGE]:"https://wcs.stage.adobe.com"};function ai({settings:e}){let t=N.module("wcs"),{env:r,wcsApiKey:n}=e,i={apiKey:n,baseUrl:os[r],fetch:window.fetch.bind(window)},o=$e(i),s=new Map,a=new Map,c;async function l(f,m,h=!0){let v=Rr;try{t.debug("Fetching:",f),f.offerSelectorIds=f.offerSelectorIds.sort();let{data:b}=await o(f,{apiKey:n,environment:e.wcsEnv,landscape:r===q.STAGE?"ALL":e.landscape},({resolvedOffers:A})=>({offers:A.map(Ar)}));t.debug("Fetched:",f,b);let{offers:O}=b??{};m.forEach(({resolve:A},x)=>{let S=O.filter(({offerSelectorIds:w})=>w.includes(x)).flat();S.length&&(m.delete(x),A(S))})}catch(b){b.status===404&&f.offerSelectorIds.length>1?(t.debug("Multi-osi 404, fallback to fetch-by-one strategy"),await Promise.allSettled(f.offerSelectorIds.map(O=>l({...f,offerSelectorIds:[O]},m,!1)))):(t.error("Failed:",f,b),v=Lr)}h&&m.size&&(t.debug("Missing:",{offerSelectorIds:[...m.keys()]}),m.forEach(b=>{b.reject(new Error(v))}))}function u(){clearTimeout(c);let f=[...a.values()];a.clear(),f.forEach(({options:m,promises:h})=>l(m,h))}function p({country:f,language:m,perpetual:h=!1,promotionCode:v="",wcsOsi:b=[]}){let O=`${m}_${f}`;f!=="GB"&&(m=h?"EN":"MULT");let A=[f,m,v].filter(x=>x).join("-").toLowerCase();return b.map(x=>{let S=`${x}-${A}`;if(!s.has(S)){let w=new Promise((I,D)=>{let L=a.get(A);if(!L){let C={country:f,locale:O,offerSelectorIds:[]};f!=="GB"&&(C.language=m),L={options:C,promises:new Map},a.set(A,L)}v&&(L.options.promotionCode=v),L.options.offerSelectorIds.push(x),L.promises.set(x,{resolve:I,reject:D}),L.options.offerSelectorIds.length>=e.wcsBufferLimit?u():(t.debug("Queued:",L.options),c||(c=setTimeout(u,e.wcsBufferDelay)))});s.set(S,w)}return s.get(S)})}return{WcsCommitment:_r,WcsPlanType:Or,WcsTerm:wr,resolveOfferSelectors:p}}var U=class extends HTMLElement{get isWcmsCommerce(){return!0}};ee(U,"instance"),ee(U,"promise",null);window.customElements.define(re,U);async function ss(e,t){let r=N.init(e.env).module("service");r.debug("Activating:",e);let n={price:{}},i=Object.freeze(Mr(e));try{n.price=await oi(i)}catch(c){r.warn("Price literals were not fetched:",c)}let o={checkout:new Set,price:new Set},s=document.createElement(re),a={literals:n,providers:o,settings:i};return U.instance=Object.defineProperties(s,Object.getOwnPropertyDescriptors({...ni(a,t),...ii(a),...si(a),...ai(a),...Cr,Log:N,get defaults(){return y},get literals(){return n},get log(){return N},get providers(){return{checkout(c){return o.checkout.add(c),()=>o.checkout.delete(c)},price(c){return o.price.add(c),()=>o.price.delete(c)}}},get settings(){return i}})),r.debug("Activated:",{literals:n,settings:i,element:s}),document.head.append(s),ae(()=>{let c=new CustomEvent(de,{bubbles:!0,cancelable:!1,detail:U.instance});U.instance.dispatchEvent(c)}),U.instance}function ci(){document.head.querySelector(re)?.remove(),U.promise=null,N.reset()}function as(e,t){if(se(e)){let r=se(t)?t():{};return r.force&&ci(),U.promise??(U.promise=ss(e(),r))}return U.promise?U.promise:new Promise(r=>{let n=i=>{r(i.detail)};document.head.addEventListener(de,n,{once:!0})})}export{St as CheckoutLink,Y as CheckoutWorkflow,$ as CheckoutWorkflowStep,y as Defaults,At as InlinePrice,M as Landscape,N as Log,re as TAG_NAME_SERVICE,_r as WcsCommitment,we as WcsEnv,Or as WcsPlanType,wr as WcsTerm,Zn as getLocaleSettings,Mr as getSettings,as as init,ci as reset}; //# sourceMappingURL=commerce.js.map diff --git a/test/blocks/merch/merch.test.js b/test/blocks/merch/merch.test.js index 2abfd42998..d3ec7516d6 100644 --- a/test/blocks/merch/merch.test.js +++ b/test/blocks/merch/merch.test.js @@ -11,7 +11,7 @@ import merch, { buildCta, getCheckoutContext, initService, - priceLiteralsURL, + PRICE_LITERALS_URL, fetchCheckoutLinkConfigs, getCheckoutLinkConfig, getDownloadAction, @@ -50,12 +50,21 @@ const CHECKOUT_LINK_CONFIGS = { BUY_NOW_PATH: 'X', LOCALE: 'fr', }, - { PRODUCT_FAMILY: 'CC_ALL_APPS', DOWNLOAD_URL: 'https://creativecloud.adobe.com/apps/download', LOCALE: '' }], + { PRODUCT_FAMILY: 'CC_ALL_APPS', DOWNLOAD_URL: 'https://creativecloud.adobe.com/apps/download', LOCALE: '' }, + { + PRODUCT_FAMILY: 'PREMIERE', + DOWNLOAD_TEXT: 'Download', + DOWNLOAD_URL: 'https://creativecloud.adobe.com/apps/download/premiere', + FREE_TRIAL_PATH: '/test/blocks/merch/mocks/fragments/twp', + BUY_NOW_PATH: '', + LOCALE: '', + }, + ], }; const config = { codeRoot: '/libs', - commerce: { priceLiteralsURL }, + commerce: { priceLiteralsURL: PRICE_LITERALS_URL }, env: { name: 'prod' }, imsClientId: 'test_client_id', placeholders: { 'upgrade-now': 'Upgrade Now', download: 'Download' }, @@ -129,6 +138,8 @@ describe('Merch Block', () => { await initService(true); Log.reset(); Log.use(Log.Plugins.quietFilter); + fetchCheckoutLinkConfigs.promise = undefined; + await fetchCheckoutLinkConfigs('http://localhost:3000/libs'); }); afterEach(() => { @@ -456,7 +467,7 @@ describe('Merch Block', () => { it('fetchCheckoutLinkConfigs: returns null if mapping cannot be fetched', async () => { fetchCheckoutLinkConfigs.promise = undefined; setCheckoutLinkConfigs(null); - const mappings = await fetchCheckoutLinkConfigs(); + const mappings = await fetchCheckoutLinkConfigs('http://localhost:2000/libs'); expect(mappings).to.be.undefined; setCheckoutLinkConfigs(CHECKOUT_LINK_CONFIGS); fetchCheckoutLinkConfigs.promise = undefined; @@ -549,6 +560,33 @@ describe('Merch Block', () => { document.querySelector('.modal-curtain').click(); }); + it('renders Milo TWP modal', async () => { + mockIms(); + const el = document.querySelector('.merch.cta.milo.twp'); + const cta = await merch(el); + const { nodeName, textContent } = await cta.onceSettled(); + expect(nodeName).to.equal('A'); + expect(textContent).to.equal('Free Trial'); + expect(cta.getAttribute('href')).to.equal('#'); + cta.click(); + await delay(100); + let modal = document.getElementById('checkout-link-modal'); + expect(modal.querySelector('[data-path]').dataset.path).to.equal('/test/blocks/merch/mocks/fragments/twp'); + expect(modal.querySelector('h1').innerText).to.equal('twp modal'); + document.querySelector('.modal-curtain').click(); + await delay(100); + const [,,,, checkoutLinkConfig] = CHECKOUT_LINK_CONFIGS.data; + checkoutLinkConfig.FREE_TRIAL_PATH = 'http://main--milo--adobecom.hlx.page/test/blocks/merch/mocks/fragments/twp-url'; + await cta.render(); + cta.click(); + await delay(100); + modal = document.getElementById('checkout-link-modal'); + expect(modal.querySelector('h1').innerText).to.equal('twp modal #2'); + expect(modal.querySelector('[data-path]').dataset.path).to.equal('/test/blocks/merch/mocks/fragments/twp-url'); + document.querySelector('.modal-curtain').click(); + await delay(100); + }); + it('renders D2P modal', async () => { mockIms(); const el = document.querySelector('.merch.cta.d2p'); diff --git a/test/blocks/merch/mocks/body.html b/test/blocks/merch/mocks/body.html index 355633f530..25e18f1851 100644 --- a/test/blocks/merch/mocks/body.html +++ b/test/blocks/merch/mocks/body.html @@ -110,6 +110,10 @@

CTAs

TWP modal: CTA Free Trial

+ +

Milo TWP modal: CTA Free Trial +

D2P modal: CTA Buy Now

diff --git a/test/blocks/merch/mocks/embed-utils.js b/test/blocks/merch/mocks/embed-utils.js index a619a3beb3..d5a171656a 100644 --- a/test/blocks/merch/mocks/embed-utils.js +++ b/test/blocks/merch/mocks/embed-utils.js @@ -27,6 +27,8 @@ export const getConfig = () => config; export const setConfig = (c) => { config = c; }; +export const loadArea = stub(); + export const loadScript = stub(); export const loadStyle = stub(); diff --git a/test/blocks/merch/mocks/fetch.js b/test/blocks/merch/mocks/fetch.js index 48269275c9..16bdb5f419 100644 --- a/test/blocks/merch/mocks/fetch.js +++ b/test/blocks/merch/mocks/fetch.js @@ -1,7 +1,7 @@ import { readFile } from '@web/test-runner-commands'; import sinon from 'sinon'; -import { priceLiteralsURL } from '../../../../libs/blocks/merch/merch.js'; +import { PRICE_LITERALS_URL } from '../../../../libs/blocks/merch/merch.js'; export async function mockFetch() { // this path allows to import this mock from tests for other blocks (e.g. commerce) @@ -24,7 +24,7 @@ export async function mockFetch() { sinon.stub(window, 'fetch').callsFake((...args) => { const { href, pathname, searchParams } = new URL(String(args[0])); // literals mock - if (href === priceLiteralsURL) { + if (href === PRICE_LITERALS_URL) { return Promise.resolve({ ok: true, json: () => Promise.resolve(literals), diff --git a/test/blocks/merch/mocks/fragments/twp-url.plain.html b/test/blocks/merch/mocks/fragments/twp-url.plain.html new file mode 100644 index 0000000000..ad92340940 --- /dev/null +++ b/test/blocks/merch/mocks/fragments/twp-url.plain.html @@ -0,0 +1,5 @@ + +
+

twp modal #2

+
+ diff --git a/test/blocks/merch/mocks/fragments/twp.plain.html b/test/blocks/merch/mocks/fragments/twp.plain.html new file mode 100644 index 0000000000..2d2445b77a --- /dev/null +++ b/test/blocks/merch/mocks/fragments/twp.plain.html @@ -0,0 +1,5 @@ + +
+

twp modal

+
+ diff --git a/test/blocks/merch/mocks/named-offers.json b/test/blocks/merch/mocks/named-offers.json index 27dc05c4fd..02e792f95e 100644 --- a/test/blocks/merch/mocks/named-offers.json +++ b/test/blocks/merch/mocks/named-offers.json @@ -69,73 +69,111 @@ }, "illustrator-trial": { "resolvedOffers": [ - { - "offerSelectorIds": [ - "illustrator-trial" - ], - "offerId": "C1C12BA6D34A45AB9C1F7836C88DD4F8", - "priceDetails": { - "price": 22.99, - "priceWithoutTax": 0.0, - "priceWithoutDiscountAndTax": 22.99, - "usePrecision": true, - "formatString": "'US$'#,##0.00", - "taxDisplay": "TAX_EXCLUSIVE", - "taxTerm": "TAX" - }, - "analytics": "{\"offerId\":\"C1C12BA6D34A45AB9C1F7836C88DD4F8\",\"label\":\"ilst_direct_individual\",\"price\":\"22.99\",\"amountWithoutTax\":\"0.0\",\"commitmentType\":\"YEAR\",\"billingFrequency\":\"MONTHLY\",\"currencyCode\":\"USD\"}", - "productArrangementCode": "ilst_direct_individual", - "productArrangement": { - "productFamily": "ILLUSTRATOR" - }, - "buyingProgram": "RETAIL", - "commitment": "YEAR", - "term": "MONTHLY", - "customerSegment": "INDIVIDUAL", - "marketSegments": [ - "COM" - ], - "salesChannel": "DIRECT", - "offerType": "TRIAL", - "pricePoint": "TRIAL_TWP3060_60_DAY_TRIAL_FOR_CCI_SINGLE_APPS_WINBACK", - "language": "MULT", - "merchant": "ADOBE" - } + { + "offerSelectorIds": [ + "illustrator-trial" + ], + "offerId": "C1C12BA6D34A45AB9C1F7836C88DD4F8", + "priceDetails": { + "price": 22.99, + "priceWithoutTax": 0.0, + "priceWithoutDiscountAndTax": 22.99, + "usePrecision": true, + "formatString": "'US$'#,##0.00", + "taxDisplay": "TAX_EXCLUSIVE", + "taxTerm": "TAX" + }, + "analytics": "{\"offerId\":\"C1C12BA6D34A45AB9C1F7836C88DD4F8\",\"label\":\"ilst_direct_individual\",\"price\":\"22.99\",\"amountWithoutTax\":\"0.0\",\"commitmentType\":\"YEAR\",\"billingFrequency\":\"MONTHLY\",\"currencyCode\":\"USD\"}", + "productArrangementCode": "ilst_direct_individual", + "productArrangement": { + "productFamily": "ILLUSTRATOR" + }, + "buyingProgram": "RETAIL", + "commitment": "YEAR", + "term": "MONTHLY", + "customerSegment": "INDIVIDUAL", + "marketSegments": [ + "COM" + ], + "salesChannel": "DIRECT", + "offerType": "TRIAL", + "pricePoint": "TRIAL_TWP3060_60_DAY_TRIAL_FOR_CCI_SINGLE_APPS_WINBACK", + "language": "MULT", + "merchant": "ADOBE" + } + ] + }, + "premiere-trial": { + "resolvedOffers": [ + { + "offerSelectorIds": [ + "premiere-trial" + ], + "offerId": "A3E81CB2F000EA56DB1E25A35C53C15F", + "startDate": "2020-04-20T07:01:00.000Z", + "endDate": "2050-04-08T19:59:00.000Z", + "priceDetails": { + "price": 22.99, + "priceWithoutTax": 0.0, + "priceWithoutDiscountAndTax": 22.99, + "usePrecision": true, + "formatString": "'US$'#,##0.00", + "taxDisplay": "TAX_EXCLUSIVE", + "taxTerm": "TAX" + }, + "analytics": "{\"offerId\":\"A3E81CB2F000EA56DB1E25A35C53C15F\",\"label\":\"ppro_direct_individual\",\"price\":\"22.99\",\"amountWithoutTax\":\"0.0\",\"commitmentType\":\"YEAR\",\"billingFrequency\":\"MONTHLY\",\"currencyCode\":\"USD\"}", + "productArrangementCode": "ppro_direct_individual", + "productArrangement": { + "productFamily": "PREMIERE" + }, + "buyingProgram": "RETAIL", + "commitment": "YEAR", + "term": "MONTHLY", + "customerSegment": "INDIVIDUAL", + "marketSegments": [ + "COM" + ], + "salesChannel": "DIRECT", + "offerType": "TRIAL", + "pricePoint": "TRIAL_TWP3060_60_DAY_TRIAL_FOR_CCI_SINGLE_APPS_WINBACK", + "language": "MULT", + "merchant": "ADOBE" + } ] - }, - "illustrator": { - "resolvedOffers": [ + }, + "illustrator": { + "resolvedOffers": [ { - "offerSelectorIds": [ - "illustrator" - ], - "offerId": "43538F47236C326E137A08307BFA70F2", - "priceDetails": { - "price": 22.99, - "priceWithoutTax": 22.99, - "usePrecision": true, - "formatString": "'US$'#,##0.00", - "taxDisplay": "TAX_EXCLUSIVE", - "taxTerm": "TAX" - }, - "analytics": "{\"offerId\":\"43538F47236C326E137A08307BFA70F2\",\"label\":\"ilst_direct_individual\",\"price\":\"22.99\",\"amountWithoutTax\":\"22.99\",\"commitmentType\":\"YEAR\",\"billingFrequency\":\"MONTHLY\",\"currencyCode\":\"USD\"}", - "productArrangementCode": "ilst_direct_individual", - "productArrangement": { - "productFamily": "ILLUSTRATOR" - }, - "buyingProgram": "RETAIL", - "commitment": "YEAR", - "term": "MONTHLY", - "customerSegment": "INDIVIDUAL", - "marketSegments": [ - "COM" - ], - "salesChannel": "DIRECT", - "offerType": "BASE", - "pricePoint": "REGULAR", - "language": "MULT", - "merchant": "ADOBE" + "offerSelectorIds": [ + "illustrator" + ], + "offerId": "43538F47236C326E137A08307BFA70F2", + "priceDetails": { + "price": 22.99, + "priceWithoutTax": 22.99, + "usePrecision": true, + "formatString": "'US$'#,##0.00", + "taxDisplay": "TAX_EXCLUSIVE", + "taxTerm": "TAX" + }, + "analytics": "{\"offerId\":\"43538F47236C326E137A08307BFA70F2\",\"label\":\"ilst_direct_individual\",\"price\":\"22.99\",\"amountWithoutTax\":\"22.99\",\"commitmentType\":\"YEAR\",\"billingFrequency\":\"MONTHLY\",\"currencyCode\":\"USD\"}", + "productArrangementCode": "ilst_direct_individual", + "productArrangement": { + "productFamily": "ILLUSTRATOR" + }, + "buyingProgram": "RETAIL", + "commitment": "YEAR", + "term": "MONTHLY", + "customerSegment": "INDIVIDUAL", + "marketSegments": [ + "COM" + ], + "salesChannel": "DIRECT", + "offerType": "BASE", + "pricePoint": "REGULAR", + "language": "MULT", + "merchant": "ADOBE" } - ] -} + ] + } } From 9df680e1658ae7ba8928aaa6d0f11ed9f4cdce9e Mon Sep 17 00:00:00 2001 From: Robert Bogos <146744221+robert-bogos@users.noreply.github.com> Date: Thu, 14 Mar 2024 00:14:57 +0200 Subject: [PATCH 4/5] MWPW-142894: fragments can lead to invalid html (#1937) MWPW-142894: fragments can lead to invalid html --- libs/blocks/fragment/fragment.js | 8 ++++++++ .../global-navigation/utilities/utilities.js | 8 -------- test/blocks/fragment/fragment.test.js | 19 +++++++++++++++++++ test/blocks/fragment/mocks/body.html | 3 +++ .../mocks/fragments/frag-p.plain.html | 7 +++++++ test/utils/utils.test.js | 4 ++-- 6 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 test/blocks/fragment/mocks/fragments/frag-p.plain.html diff --git a/libs/blocks/fragment/fragment.js b/libs/blocks/fragment/fragment.js index bfe471c763..a839e438aa 100644 --- a/libs/blocks/fragment/fragment.js +++ b/libs/blocks/fragment/fragment.js @@ -63,6 +63,14 @@ export default async function init(a) { let relHref = localizeLink(a.href); let inline = false; + if (a.parentElement?.nodeName === 'P') { + const children = a.parentElement.childNodes; + const div = createTag('div'); + for (const attr of a.parentElement.attributes) div.setAttribute(attr.name, attr.value); + a.parentElement.replaceWith(div); + div.append(...children); + } + if (a.href.includes('#_inline')) { inline = true; a.href = a.href.replace('#_inline', ''); diff --git a/libs/blocks/global-navigation/utilities/utilities.js b/libs/blocks/global-navigation/utilities/utilities.js index 63dbbfb34b..47bb9815f7 100644 --- a/libs/blocks/global-navigation/utilities/utilities.js +++ b/libs/blocks/global-navigation/utilities/utilities.js @@ -315,15 +315,7 @@ export async function fetchAndProcessPlainHtml({ url, shouldDecorateLinks = true const inlineFrags = [...body.querySelectorAll('a[href*="#_inline"]')]; if (inlineFrags.length) { const { default: loadInlineFrags } = await import('../../fragment/fragment.js'); - const fragPromises = inlineFrags.map((link) => { - // Replacing paragraphs should happen in the fragment module - // https://jira.corp.adobe.com/browse/MWPW-141039 - if (link.parentElement && link.parentElement.nodeName === 'P') { - const div = document.createElement('div'); - link.parentElement.replaceWith(div); - div.appendChild(link); - } link.href = getFederatedUrl(link.href); return loadInlineFrags(link); }); diff --git a/test/blocks/fragment/fragment.test.js b/test/blocks/fragment/fragment.test.js index df387803e5..2e1a7ef8a5 100644 --- a/test/blocks/fragment/fragment.test.js +++ b/test/blocks/fragment/fragment.test.js @@ -95,4 +95,23 @@ describe('Fragments', () => { const pic = document.querySelector('picture.frag-image'); expect(pic.classList.contains('decorated')).to.be.true; }); + + it('only valid HTML should exist after resolving the fragments', async () => { + const { body } = new DOMParser().parseFromString(await readFile({ path: './mocks/body.html' }), 'text/html'); + for (const a of body.querySelectorAll('a[href*="/fragment"]')) await getFragment(a); + const innerHtml = body.innerHTML; + // eslint-disable-next-line + body.innerHTML = body.innerHTML; // after reassignment, the parser guarantees the presence of only valid HTML + expect(innerHtml).to.equal(body.innerHTML); + }); + + it('should transfer all attributes when replacing a paragraph parent with a div parent', async () => { + const a = document.querySelector('a.frag-p'); + const { attributes } = a.parentElement; + await getFragment(a); + const wrapper = document.querySelector('.frag-p-wrapper'); + for (const attr of attributes) { + expect(wrapper.getAttribute(attr.name)).to.equal(attr.value); + } + }); }); diff --git a/test/blocks/fragment/mocks/body.html b/test/blocks/fragment/mocks/body.html index 4cfbfd6618..df6bcce448 100644 --- a/test/blocks/fragment/mocks/body.html +++ b/test/blocks/fragment/mocks/body.html @@ -6,6 +6,9 @@ Fragment Fragment Fragment +

+ Fragment +

diff --git a/test/blocks/fragment/mocks/fragments/frag-p.plain.html b/test/blocks/fragment/mocks/fragments/frag-p.plain.html new file mode 100644 index 0000000000..6afc3df3e4 --- /dev/null +++ b/test/blocks/fragment/mocks/fragments/frag-p.plain.html @@ -0,0 +1,7 @@ +
+
    +
  • List item
  • +
  • List item
  • +
  • List item
  • +
+
diff --git a/test/utils/utils.test.js b/test/utils/utils.test.js index 548adc0066..84588323a6 100644 --- a/test/utils/utils.test.js +++ b/test/utils/utils.test.js @@ -97,14 +97,14 @@ describe('Utils', () => { it('Does not unwrap when sibling content present', () => { const fragments = document.querySelectorAll('.link-block.fragment'); utils.decorateAutoBlock(fragments[1]); - expect(fragments[1].parentElement.nodeName).to.equal('P'); + expect(fragments[1].parentElement.nodeName).to.equal('DIV'); expect(fragments[1].parentElement.textContent).to.contain('My sibling'); }); it('Does not unwrap when not in paragraph tag', () => { const fragments = document.querySelectorAll('.link-block.fragment'); utils.decorateAutoBlock(fragments[1]); - expect(fragments[1].parentElement.nodeName).to.equal('P'); + expect(fragments[1].parentElement.nodeName).to.equal('DIV'); expect(fragments[1].parentElement.textContent).to.contain('My sibling'); }); }); From 1e9a2bbdc9d37f29afb32fd5216e9a3babac0776 Mon Sep 17 00:00:00 2001 From: cmiqueo <64917520+cmiqueo@users.noreply.github.com> Date: Wed, 13 Mar 2024 15:15:05 -0700 Subject: [PATCH 5/5] Caas-Marquee: Fixes integration with martech.js issues (#2003) --- libs/blocks/caas-marquee/caas-marquee.js | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/libs/blocks/caas-marquee/caas-marquee.js b/libs/blocks/caas-marquee/caas-marquee.js index 21f686781d..feeec67d65 100644 --- a/libs/blocks/caas-marquee/caas-marquee.js +++ b/libs/blocks/caas-marquee/caas-marquee.js @@ -807,7 +807,17 @@ export default async function init(el) { const marqueesPromise = getAllMarquees(promoId, origin); await Promise.all([martechPromise, marqueesPromise]); marquees = await marqueesPromise; - const event = await waitForEventOrTimeout('alloy_sendEvent', ALLOY_TIMEOUT, new Event('')); + + let event; + if (window.alloy_pageView) { + // eslint-disable-next-line camelcase, no-undef + const sent = await alloy_pageView.sent; + if (sent.destinations[0].segments) { + event = { detail: { type: 'pageView', result: { destinations: sent.destinations } } }; + } + } else { + event = await waitForEventOrTimeout('alloy_sendEvent', ALLOY_TIMEOUT, new Event('')); + } if (authorPreview()) { return renderMarquee(marquee, marquees, urlParams.get('marqueeId'), metadata);