{
  "version": 3,
  "sources": ["/cdn/shop/t/40/assets/klaviyo-preference-routing.js?jbv=20260818a"],
  "sourcesContent": ["(function () {\n  \"use strict\";\n\n  const FORM_ID = \"RVCu5C\";\n  const PROPERTY_NAME = \"JB Shopping Preference\";\n  const SUCCESS_CTA_SELECTOR = \".jb-preference-shop-cta\";\n  const HEADER_SELECTOR = \".jb-preference-email-header\";\n  const COPY_SELECTOR = \".jb-preference-email-copy\";\n  const IMAGE_SELECTOR = 'img[alt=\"Janela Bay swimwear selected for you\"]';\n\n  const EXPERIENCES = Object.freeze({\n    women_modest_swim: Object.freeze({\n      kicker: \"Women\u2019s Modest Swim\",\n      destinationLabel: \"women\u2019s swim\",\n      ctaLabel: \"Shop Women\u2019s Swim\",\n      route: \"/collections/womens-swim\",\n      image:\n        \"https://d3k81ch9hvuctc.cloudfront.net/company/RALrSs/images/092531fb-a5e1-4400-bb19-66658907500e.jpeg\",\n    }),\n    mix_match_tankinis: Object.freeze({\n      kicker: \"Mix & Match Swim\",\n      destinationLabel: \"mix and match swim\",\n      ctaLabel: \"Shop Mix & Match\",\n      route: \"/pages/mix-and-match-swimwear\",\n      image:\n        \"https://d3k81ch9hvuctc.cloudfront.net/company/RALrSs/images/235982f1-acc7-49fd-9b91-192e00c461fb.jpeg\",\n    }),\n    girls_modest_swim: Object.freeze({\n      kicker: \"Girls\u2019 Modest Swim\",\n      destinationLabel: \"girls\u2019 swim\",\n      ctaLabel: \"Shop Girls\u2019 Swim\",\n      route: \"/collections/girls-swim\",\n      image:\n        \"https://d3k81ch9hvuctc.cloudfront.net/company/RALrSs/images/7165b040-8a08-4ffd-9857-964ba37529f2.jpeg\",\n    }),\n    family_swim: Object.freeze({\n      kicker: \"Family Swim\",\n      destinationLabel: \"family swim\",\n      ctaLabel: \"Shop Family Swim\",\n      route: \"/pages/family-swim\",\n      image:\n        \"https://d3k81ch9hvuctc.cloudfront.net/company/RALrSs/images/b5a6ba05-dfc3-45f6-ad26-cf04fbbd37de.jpeg\",\n    }),\n  });\n\n  let selectedPreference = \"\";\n  let formObserver = null;\n  let updateQueued = false;\n\n  function getFormId(detail) {\n    return detail?.formId || detail?.formID || \"\";\n  }\n\n  function getSubmittedPreference(detail) {\n    return (\n      [\n        detail?.metaData?.[PROPERTY_NAME],\n        detail?.metaData?.properties?.[PROPERTY_NAME],\n        detail?.metaData?.fields?.[PROPERTY_NAME],\n        detail?.profile?.[PROPERTY_NAME],\n        detail?.profile?.properties?.[PROPERTY_NAME],\n        detail?.fields?.[PROPERTY_NAME],\n      ].find(\n        (value) =>\n          typeof value === \"string\" &&\n          Object.prototype.hasOwnProperty.call(EXPERIENCES, value),\n      ) || \"\"\n    );\n  }\n\n  function setText(target, value) {\n    if (target && target.textContent !== value) {\n      target.textContent = value;\n    }\n  }\n\n  function applyExperience() {\n    updateQueued = false;\n\n    const experience = EXPERIENCES[selectedPreference];\n    if (!experience) return;\n\n    document.querySelectorAll(HEADER_SELECTOR).forEach((block) => {\n      setText(block.querySelector(\"p:first-child\"), experience.kicker);\n    });\n\n    const copy =\n      \"Enter your email and we\u2019ll send your 10% off code. \" +\n      `Then continue straight to ${experience.destinationLabel}.`;\n\n    document.querySelectorAll(COPY_SELECTOR).forEach((block) => {\n      setText(block.querySelector(\"p\") || block, copy);\n    });\n\n    document.querySelectorAll(IMAGE_SELECTOR).forEach((image) => {\n      if (image.getAttribute(\"src\") !== experience.image) {\n        image.setAttribute(\"src\", experience.image);\n      }\n      image.setAttribute(\"srcset\", experience.image);\n    });\n\n    document.querySelectorAll(SUCCESS_CTA_SELECTOR).forEach((block) => {\n      const link = block.matches(\"a\") ? block : block.querySelector(\"a\");\n      const labelTarget =\n        block.matches(\"a, button\")\n          ? block\n          : link || block.querySelector(\"button, span\") || block;\n      setText(labelTarget, experience.ctaLabel);\n      if (link) {\n        link.setAttribute(\"href\", experience.route);\n      }\n    });\n  }\n\n  function queueExperienceUpdate() {\n    if (updateQueued || !selectedPreference) return;\n    updateQueued = true;\n    window.requestAnimationFrame(applyExperience);\n  }\n\n  function stopObservingForm() {\n    if (formObserver) {\n      formObserver.disconnect();\n      formObserver = null;\n    }\n  }\n\n  function observeForm() {\n    if (!selectedPreference) return;\n\n    if (!formObserver) {\n      formObserver = new MutationObserver(queueExperienceUpdate);\n      formObserver.observe(document.body, {\n        childList: true,\n        subtree: true,\n      });\n    }\n\n    queueExperienceUpdate();\n  }\n\n  window.addEventListener(\"klaviyoForms\", function (event) {\n    const detail = event.detail || {};\n    if (getFormId(detail) !== FORM_ID) return;\n\n    if (detail.type === \"open\" || detail.type === \"close\") {\n      selectedPreference = \"\";\n      stopObservingForm();\n      return;\n    }\n\n    if (detail.type !== \"stepSubmit\" && detail.type !== \"submit\") return;\n\n    const submittedPreference = getSubmittedPreference(detail);\n    if (submittedPreference) {\n      selectedPreference = submittedPreference;\n    }\n\n    observeForm();\n  });\n\n  document.addEventListener(\n    \"click\",\n    function (event) {\n      const cta =\n        event.target instanceof Element\n          ? event.target.closest(SUCCESS_CTA_SELECTOR)\n          : null;\n\n      if (\n        event.defaultPrevented ||\n        event.button !== 0 ||\n        event.metaKey ||\n        event.ctrlKey ||\n        event.shiftKey ||\n        event.altKey ||\n        !cta\n      ) {\n        return;\n      }\n\n      const destination = EXPERIENCES[selectedPreference]?.route;\n      if (!destination) return;\n\n      event.preventDefault();\n      event.stopPropagation();\n      window.location.assign(destination);\n    },\n    true,\n  );\n})();\n\n// The email-first YAxQSQ form has an optional native preference step. Keep its\n// routing separate so the original RVCu5C experience above remains unchanged.\n(function () {\n  \"use strict\";\n\n  const FORM_ID = \"YAxQSQ\";\n  const FORM_SELECTOR = '[data-testid=\"klaviyo-form-YAxQSQ\"]';\n  const PROPERTY_NAME = \"JB Shopping Preference\";\n  const ROUTES = Object.freeze({\n    women_modest_swim: { label: \"Shop Women\u2019s Swim\", path: \"/collections/womens-swim\" },\n    mix_match_tankinis: { label: \"Shop Mix & Match\", path: \"/pages/mix-and-match-swimwear\" },\n    girls_modest_swim: { label: \"Shop Girls\u2019 Swim\", path: \"/collections/girls-swim\" },\n    family_swim: { label: \"Shop Family Swim\", path: \"/pages/family-swim\" },\n  });\n\n  let preference = \"\";\n  let observer = null;\n  let observedPopup = null;\n  let updateQueued = false;\n\n  function fromEvent(detail) {\n    return [\n      detail?.metaData?.[PROPERTY_NAME],\n      detail?.metaData?.properties?.[PROPERTY_NAME],\n      detail?.metaData?.fields?.[PROPERTY_NAME],\n      detail?.profile?.properties?.[PROPERTY_NAME],\n      detail?.fields?.[PROPERTY_NAME],\n    ].find((value) => typeof value === \"string\" && ROUTES[value]) || \"\";\n  }\n\n  function updateCta() {\n    updateQueued = false;\n    const route = ROUTES[preference];\n    const form = document.querySelector(FORM_SELECTOR);\n    if (!route || !form) return;\n\n    form.querySelectorAll(\"a, button\").forEach((control) => {\n      if (\n        control.dataset.jbPreferenceRoute !== \"true\" &&\n        !/^explore janela bay$/i.test(control.textContent.trim())\n      ) return;\n\n      const walker = document.createTreeWalker(control, NodeFilter.SHOW_TEXT);\n      let textNode;\n      while ((textNode = walker.nextNode())) {\n        if (/^explore janela bay$/i.test(textNode.nodeValue.trim()) ||\n            /^shop (women\u2019s swim|mix & match|girls\u2019 swim|family swim)$/i.test(textNode.nodeValue.trim())) {\n          textNode.nodeValue = route.label;\n          break;\n        }\n      }\n      if (control.hasAttribute(\"aria-label\")) control.setAttribute(\"aria-label\", route.label);\n      if (control.matches(\"a\")) control.setAttribute(\"href\", route.path);\n      control.dataset.jbPreferenceRoute = \"true\";\n    });\n  }\n\n  function queueUpdate() {\n    if (!preference || updateQueued) return;\n    updateQueued = true;\n    window.requestAnimationFrame(updateCta);\n  }\n\n  function stopObserving() {\n    observer?.disconnect();\n    observer = null;\n    observedPopup = null;\n  }\n\n  function observePopup() {\n    if (!preference) return;\n    const dialog = document.querySelector('[role=\"dialog\"]:has(' + FORM_SELECTOR + ')');\n    const popupRoot = dialog?.parentElement || dialog;\n    if (popupRoot && popupRoot !== observedPopup) {\n      stopObserving();\n      observer = new MutationObserver(queueUpdate);\n      observer.observe(popupRoot, { childList: true, subtree: true });\n      observedPopup = popupRoot;\n    }\n    queueUpdate();\n  }\n\n  window.addEventListener(\"klaviyoForms\", (event) => {\n    const detail = event.detail || {};\n    if ((detail.formId || detail.formID) !== FORM_ID) return;\n    if (detail.type === \"open\" || detail.type === \"close\") {\n      preference = \"\";\n      stopObserving();\n      return;\n    }\n    if (detail.type !== \"stepSubmit\" && detail.type !== \"submit\") return;\n    preference = fromEvent(detail) || preference;\n    observePopup();\n  });\n\n  document.addEventListener(\"change\", (event) => {\n    const input = event.target;\n    if (!(input instanceof HTMLInputElement) || input.type !== \"radio\" ||\n        !input.closest(FORM_SELECTOR) || !ROUTES[input.value]) return;\n    preference = input.value;\n    observePopup();\n  }, true);\n\n  document.addEventListener(\"click\", (event) => {\n    const target = event.target;\n    if (!(target instanceof Element)) return;\n    const control = target.closest(\"a, button\");\n    if (!control?.closest(FORM_SELECTOR)) return;\n\n    if (/^skip for now$/i.test(control.textContent.trim())) {\n      preference = \"\";\n      stopObserving();\n      return;\n    }\n\n    const route = ROUTES[preference];\n    if (!route || event.defaultPrevented || event.button !== 0 ||\n        event.metaKey || event.ctrlKey || event.shiftKey || event.altKey ||\n        (control.dataset.jbPreferenceRoute !== \"true\" &&\n         !/^explore janela bay$/i.test(control.textContent.trim()))) return;\n\n    event.preventDefault();\n    event.stopPropagation();\n    window.location.assign(route.path);\n  }, true);\n})();\n"],
  "mappings": "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",
  "names": []
}
