{"version":3,"file":"ImageComponent.84dd70d5.js","sources":["../../../../../../node_modules/@ObamaFoundation/of-design-system/dist/atoms/GridDivider.svelte","../../../../../../node_modules/@ObamaFoundation/of-design-system/dist/organisms/SplitLayout.svelte","../../../../../../node_modules/@ObamaFoundation/of-design-system/dist/utilities/components/markdown.js","../../../../../../node_modules/@ObamaFoundation/of-design-system/dist/utilities/url-helpers.js","../../../../../../node_modules/@ObamaFoundation/of-design-system/dist/utilities/dom-helpers.js","../../../../../../node_modules/@ObamaFoundation/of-design-system/dist/atoms/Markdown.svelte","../../../../../../node_modules/@ObamaFoundation/of-design-system/dist/molecules/ImageContent.svelte","../../../../../../src/lib/components/Image.svelte","../../../../../../src/lib/contentTypes/ImageComponent.svelte"],"sourcesContent":["<script>\n  import { getTheme } from \"../utilities/themes\";\n\n  // @ts-check\n\n  import Grid from \"./Grid.svelte\";\n\n  /**\n  Primarily for testing\n  @type {string} */\n  export let id = undefined;\n\n  /**\n    Number of columns to be divided\n    Mobile accepts only 1, 2 ,4 (because mobile Grid only has 4 columns)\n    And desktop accepts 1, 2, 3, 4, 6, 12\n  @type { 1 | 2 | 3 | 4 | 6 | 12} */\n  export let numberOfColumns;\n\n  /**\n  Total gridColumns for mobile, tablet and desktop\n  @type {import('./Grid.svelte').GRID_COLUMNS} */\n  export let subGridColumns;\n\n  $: colSpanMobile = Math.floor((subGridColumns?.mobile || 4) / numberOfColumns);\n  $: colSpanTablet = Math.floor((subGridColumns?.tablet || 12) / numberOfColumns);\n  $: colSpanDesktop = Math.floor((subGridColumns?.desktop || 12) / numberOfColumns);\n\n  /**\n  Used mainly for breakpoint support like `hidden md:grid`\n  @type {string} */\n  export let containerClasses = \"\";\n\n  /** \n  Class to be applied to the Grid\n  @type {string} */\n  export let gridClass = \"\";\n\n  /**\n   * The theme of the component using the Rule.\n   * @type {import('../utilities/themes').ThemeName}\n   */\n  export let theme = \"white\";\n\n  $: themeClass = getTheme(theme)?.ruleColor || \"bg-black\";\n</script>\n\n<!--\n@component\nTo have a Grid display visible column dividers,\nthis needs to be placed within a relative wrapper so it get's the correct sizing\nin case of multiple breakpoints, use multiple dividers\n- Usage:\n  ```svelte\n  <GridContainer gridInnerClasses=\"relative\"> // In the case of the container it needs to be the innerClass because it has the max-width (or you can just use a nested div with position: relative)\n    <GridDivider numberOfColumns={3} containerClasses=\"hidden lg:block\" />\n    <GridDivider numberOfColumns={2} containerClasses=\"block lg:hidden\" />\n    <Grid>\n      [...]\n    </Grid>\n  </GridContainer>\n  ```\n-->\n<div class=\"pointer-events-none absolute inset-0 h-full w-full p-[inherit] {containerClasses}\">\n  <Grid {id} gridClass=\"h-full w-full {gridClass}\" {subGridColumns}>\n    {#each Array(numberOfColumns).fill(numberOfColumns) as _, index}\n      {@const hiddenInMobile = index > 4}\n      <div\n        style=\"--col-span-mobile: {colSpanMobile}; --col-span-tablet: {colSpanTablet}; --col-span-desktop: {colSpanDesktop}\"\n        class=\"column-span relative after:absolute after:-right-grid-gutter-half after:top-0 after:block after:h-full after:w-px last-of-type:after:content-none\n      {hiddenInMobile ? 'hidden md:block' : 'md:block'} after:{themeClass}\n      \"\n      />\n    {/each}\n  </Grid>\n</div>\n\n<style>\n  .column-span {\n    grid-column: span var(--col-span-mobile);\n  }\n\n  @media (min-width: 680px) {\n    .column-span {\n      grid-column: span var(--col-span-tablet);\n    }\n  }\n\n  @media (min-width: 1200px) {\n    .column-span {\n      grid-column: span var(--col-span-desktop);\n    }\n  }\n</style>\n","<script context=\"module\">\n  export const SPLIT_LAYOUT_VARIANTS = /** @type { const } */ {\n    LAYOUT_50_50: \"50/50\",\n    LAYOUT_25_75: \"25/75\",\n    LAYOUT_75_25: \"75/25\"\n  };\n\n  export const SPLIT_LAYOUT_RIGHT_GRID_COLUMNS = /** @type {const} **/ ({\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_50_50]: { mobile: 4, tablet: 12, desktop: 6 },\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_25_75]: { mobile: 4, tablet: 7, desktop: 9 },\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_75_25]: { mobile: 4, tablet: 5, desktop: 3 }\n  });\n</script>\n\n<script>\n  import Grid from \"../atoms/Grid.svelte\";\n  import GridContainer from \"../atoms/GridContainer.svelte\";\n  import GridDivider from \"../atoms/GridDivider.svelte\";\n\n  /**\n   * Additional classes which apply to the container\n   * @type { string }\n   * */\n  let className = \"\";\n  export { className as class };\n\n  /**\n   * Primarily used for testing\n   * @type {string}\n   * */\n  export let id;\n\n  /** The class name for the sticky container height\n   * @type {string}\n   * */\n  export let stickyContainerHeightClass =\n    \"lg:h-[calc(100vh-120px)] lg:max-h-[780px] xl:max-h-[960px]\";\n\n  /**\n   * Determines whether the layout should be sticky.\n   * @type {boolean}\n   * */\n  export let isSticky;\n\n  /**\n   * The image variant of ImageGrid (all images will be the same aspect ratio)\n   * @type  { typeof SPLIT_LAYOUT_VARIANTS }\n   */\n  export let variant = SPLIT_LAYOUT_VARIANTS.LAYOUT_50_50;\n\n  const isHalf = variant === SPLIT_LAYOUT_VARIANTS.LAYOUT_50_50;\n\n  const itemsLeftClasses = {\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_50_50]: \"lg:col-span-6\",\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_25_75]: \"md:col-span-5 lg:col-span-3\",\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_75_25]: \"sm:max-md:row-start-2 md:col-span-7 lg:col-span-9\"\n  };\n  const itemsRightClasses = {\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_50_50]: \"lg:col-span-6\",\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_25_75]: \"md:col-span-7 lg:col-span-9\",\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_75_25]: \"sm:max-md:row-start-1 md:col-span-5 lg:col-span-3\"\n  };\n  const stickyClasses = {\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_50_50]: \"lg:sticky lg:top-15\",\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_25_75]: \"md:sticky md:top-15\",\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_75_25]: \"md:sticky md:top-15\"\n  };\n  const stickyHeightClasses = {\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_50_50]:\n      \"lg:h-[calc(100vh-120px)] lg:max-h-[780px] xl:max-h-[960px]\",\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_25_75]:\n      \"md:h-[calc(100vh-120px)] md:max-h-[780px] xl:max-h-[960px]\",\n    [SPLIT_LAYOUT_VARIANTS.LAYOUT_75_25]:\n      \"md:h-[calc(100vh-120px)] md:max-h-[780px] xl:max-h-[960px]\"\n  };\n\n  const stickyWrapperClasses = isSticky ? stickyClasses[variant] : \"\";\n  const stickyHeightClass = isSticky\n    ? `${stickyHeightClasses[variant]} ${stickyContainerHeightClass}`\n    : \"\";\n  const leftWrapperClasses = itemsLeftClasses[variant];\n  const rightWrapperClasses = itemsRightClasses[variant];\n\n  const overflowClasses = isSticky ? \"overflow-y-auto pl-3 -ml-3\" : \"pl-3 -ml-3\"; // We need to add \"fake\" padding to account for the bullet in the tertiary nav.\n</script>\n\n<GridContainer {id} containerClass={className}>\n  <div class=\"relative\">\n    {#if isHalf}\n      <GridDivider numberOfColumns={2} containerClasses=\"hidden lg:grid\" />\n    {/if}\n    <Grid gridClass=\"relative max-lg:gap-y-15\" id={`${id}-grid`}>\n      <div\n        class=\"col-full-width {overflowClasses} {leftWrapperClasses} {stickyWrapperClasses} {stickyHeightClass}\"\n      >\n        <slot name=\"left\" />\n      </div>\n      <div class=\"col-full-width {rightWrapperClasses}\">\n        <slot name=\"right\" />\n      </div>\n    </Grid>\n  </div>\n</GridContainer>\n","import { parseInline } from \"marked\";\nimport DOMPurify from \"isomorphic-dompurify\";\n\nexport function renderSanitizedHTML(input) {\n  if (!input) {\n    return;\n  }\n\n  const rawHtml = parseInline(input);\n  return DOMPurify.sanitize(rawHtml, { ADD_ATTR: [\"target\"] });\n}\n","export function getUrlObject(url) {\n  if (!url || url.startsWith(\"/\") || url.startsWith(\"?\")) {\n    return null;\n  }\n\n  try {\n    const urlObj = new URL(url);\n    return urlObj;\n  } catch (e) {\n    console.warn(`can't convert \"${url}\" to URL object`);\n    return null;\n  }\n}\n\nconst INTERNAL_ORIGINS = [\"https://www.obama.org\", \"http://www.obama.org\", \"https://obama.org\"];\n\nexport function isExternalUrl(url, currentOrigin) {\n  if (\n    !url ||\n    url.startsWith(\"/\") ||\n    url.startsWith(\"?\") ||\n    url.startsWith(\"#\") ||\n    url.startsWith(\"mailto:\") ||\n    url.startsWith(\"tel:\")\n  ) {\n    return false;\n  }\n\n  const urlObj = getUrlObject(url);\n  if (urlObj) {\n    const targetOrigin = urlObj.origin;\n    if (INTERNAL_ORIGINS.includes(targetOrigin)) {\n      return false;\n    }\n    return targetOrigin !== currentOrigin;\n  }\n  // Default to the link being external if we can't figure out the origin\n  return true;\n}\n\n/*\n    correctedUrl \n    a) makes internal full links relative (So www.obama.org/about becomes /about, so sveltekit will render page on static build)\n    b) adds trailing slash if not \n  */\nexport function correctedUrl(url) {\n  let isExternal = isExternalUrl(url);\n  if (!isExternal) {\n    const urlObj = getUrlObject(url);\n    if (urlObj) {\n      url = urlObj.pathname;\n    }\n  }\n  return isMissingTrailingSlash(url) ? `${url}/` : url;\n}\n\nexport function isNotStaticFile(url) {\n  const types = [\".pdf\", \".mp4\", \".html\", \".jpg\", \".jpeg\", \".png\", \".csv\", \".zip\"];\n  return !types.some((type) => url.includes(type));\n}\n\nexport function isRootRelative(url) {\n  return url.startsWith(\"/\");\n}\n\nexport function hasNoTrailingSlash(url) {\n  return !url.endsWith(\"/\") && !url.match(/(\\/)?#.*$/) && !url.match(/(\\/)?\\?.*$/);\n}\n\nexport function isMissingTrailingSlash(url) {\n  return !!url && isNotStaticFile(url) && isRootRelative(url) && hasNoTrailingSlash(url);\n}\n","/**\n * receives a string and strips its non alphanumeric characters\n *\n * @param { String } text\n * @param { String } id\n * @return a lowercase alphanumeric string\n */\nexport function textToId(text) {\n  const spaces = new RegExp(/\\s/g);\n  const anythingButSpacesAndLetters = /[^\\sA-Z0-9]/gi;\n  const punctuationToStrip = new RegExp(anythingButSpacesAndLetters);\n  const id = text?.toLowerCase().replace(punctuationToStrip, \"\").replace(spaces, \"-\");\n  return id;\n}\n","<script>\n  import { marked } from \"marked\";\n  import { renderSanitizedHTML } from \"../utilities/components/markdown\";\n  import { isExternalUrl, correctedUrl } from \"../utilities/url-helpers\";\n  import { textToId } from \"../utilities/dom-helpers\";\n\n  // eslint-disable-next-line  @ObamaFoundation/of-svelte/no-stores\n  import { page } from \"$app/stores\";\n\n  export let input;\n  export let id;\n  export let element = \"div\";\n  let clazz = \"\";\n  export { clazz as class };\n  let isExternal = false;\n\n  let externalLinks = {};\n  let origin;\n\n  $: origin = $page?.url?.origin;\n\n  marked.use({\n    extensions: [\n      {\n        name: \"strong\",\n        renderer(token) {\n          return `<span class=\"font-bold\">${token.text}</span>`;\n        }\n      },\n      {\n        name: \"link\",\n        renderer(token) {\n          let href = token.href;\n          let text = token.text;\n          isExternal = isExternalUrl(href, origin);\n          let linkToRender = correctedUrl(href);\n\n          const linkId = id ? `markdown-link-${id}` : `markdown-link-${textToId(text)}`;\n          if (isExternal) {\n            externalLinks[linkId] = text;\n\n            return `<a id=\"${linkId}\" href=\"${linkToRender}\" target=\"_blank\" rel=\"noopener noreferrer\" data-sveltekit-reload class=\"markdown-external link outline-2 outline-offset-4 focus-visible:outline-dashed cursor-pointer relative inline text-black outline-black focus-visible:border-black hover:before:w-[0px] hover:text-cobalt-blue\"><span><span class=\"\"><span class=\"underline\">${text}</span> <span class=\"inline whitespace-nowrap \"><span class=\"inline-block\"><svg xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 16 16\" aria-hidden=\"true\" class=\"xl:w-6 xl:h-6 inline\" width=\"16\" height=\"16\"><path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"m11.177 5.362.513 4.26 1.967-.2-.854-7.1-7.1-.854-.2 1.967 4.26.512-8.273 8.274 1.414 1.414z\" clip-rule=\"evenodd\"></path></svg></span></span></span></span> <span class=\"sr-only\">(Opens in a new tab)</span></a>`;\n          } else {\n            return `<a id=\"${linkId}\" href=\"${linkToRender}\" data-sveltekit-reload class=\"markdown-internal link outline-2 outline-offset-4 focus-visible:outline-dashed cursor-pointer relative inline text-black outline-black focus-visible:border-black hover:before:w-[0px] hover:text-cobalt-blue\"><span><span class=\"\"><span class=\"underline\">${text}</span></span></span></a>`;\n          }\n        }\n      }\n    ]\n  });\n\n  let htmlText = renderSanitizedHTML(input);\n</script>\n\n{#if input}\n  <svelte:element this={element} class=\"{clazz} whitespace-pre-wrap\" {id}>\n    <!-- eslint-disable-next-line svelte/no-at-html-tags -->\n    {@html htmlText}\n  </svelte:element>\n{/if}\n","<script context=\"module\">\n  // @ts-check\n\n  /**\n   * Array of valid aspect ratios for the Image component.\n   * @type {(\"portrait\" | \"landscape\" | \"square\")[]}\n   */\n  export const VALID_ASPECT_RATIOS = [\"portrait\", \"landscape\", \"square\"];\n</script>\n\n<script>\n  // @ts-check\n  import Image from \"../atoms/Image.svelte\";\n  import Markdown from \"../atoms/Markdown.svelte\";\n\n  /** @type { string } */\n  let className = \"\";\n  export { className as class };\n\n  /**\n   * Primarily used for testing\n   * @type {string}\n   */\n  export let id = null;\n\n  /**\n   * @type {import('../types/shared.js').Image}\n   */\n  export let image = null;\n\n  /**\n   * The caption for the image\n   * @type {string}\n   */\n  export let caption = null;\n\n  /**\n   * The external class for the ImageContent element.\n   * @type {string}\n   */\n  export let containerClasses = \"\";\n\n  /**\n   * The aspect ratio of the image used to generate aspect ratio classes.\n   * @type {typeof VALID_ASPECT_RATIOS[number]}\n   */\n  export let aspectRatio = \"landscape\";\n\n  /**\n   * Controls whethere the caption should have padding on the left and right\n   * @type { boolean }\n   */\n  export let isCaptionFullBleed = false;\n\n  const captionWrapperClasses = isCaptionFullBleed ? \"px-7.5 lg:px-15\" : \"\";\n\n  const imageAspectRatios = {\n    square: \"aspect-1/1\",\n    portrait: \"aspect-3/4\",\n    landscape: \"aspect-3/2\"\n  };\n</script>\n\n<figure class=\"w-full {containerClasses} {className}\" {id}>\n  <Image\n    {...image}\n    containerElement=\"div\"\n    aspectRatioClasses={imageAspectRatios[aspectRatio]\n      ? imageAspectRatios[aspectRatio]\n      : aspectRatio}\n  />\n  {#if caption || $$slots.caption}\n    <figcaption class=\"body-sm mt-3 {captionWrapperClasses}\">\n      <slot name=\"caption\">\n        <Markdown element=\"span\" input={caption} id=\"markdown-caption-${id}\" />\n      </slot>\n    </figcaption>\n  {/if}\n</figure>\n","<script>\n  import { getContext, setContext } from \"svelte\";\n  import { ImageContent, GridContainer } from \"@ObamaFoundation/of-design-system\";\n\n  import { srcSetFromWidths, sizesForBreakpoints, SRCSET_WIDTHS } from \"$lib/utilities\";\n  import { BREAK_POINTS } from \"$lib/utilities/constants\";\n\n  import {\n    buildSrc,\n    altTextToDisplay,\n    getImageAspectRatio,\n    getClosestAspectRatioClass\n  } from \"$lib/utilities/components/image-helpers\";\n  import { Markdown } from \"@ObamaFoundation/of-design-system\";\n\n  // Required\n  export let altText;\n  export let imageAsset;\n  export let mobileImageAsset;\n  export let id;\n\n  // With Defaults\n  /** @type { string } */\n  let className = \"\";\n  export { className as class };\n\n  export let caption;\n  export let isFullBleed = false;\n  export let aspectRatio;\n  export let theme;\n\n  const isContainerized = getContext(\"containerized\");\n\n  let resizeParams = {};\n\n  // Boolean used to ignore the Contentful Image API image resizing logic\n  // Introduced to remove chromatic image flakiness caused by small differences in images\n  let ignoreContentfulImgResize = getContext(\"ignoreContentfulImgResize\");\n\n  // Image sizes (widths) for available breakpoints.\n  // These can be set using any unit, but we recommend using vw (50vw, 100vw, etc.)\n  // If you don't set these, the image will be full width at all breakpoints.\n  let widthsAt = isContainerized ? { sm: \"100vw\", md: \"75vw\", lg: \"50vw\" } : { sm: \"100vw\" };\n\n  let screenWidth = 0;\n\n  $: currentlyDisplayedImage =\n    screenWidth < BREAK_POINTS.md && mobileImageAsset ? mobileImageAsset : imageAsset;\n\n  $: imageAspectRatio = getImageAspectRatio(currentlyDisplayedImage, aspectRatio);\n  let alt = altTextToDisplay(altText);\n\n  $: src = buildSrc(currentlyDisplayedImage, resizeParams, ignoreContentfulImgResize);\n  $: srcset = !ignoreContentfulImgResize\n    ? srcSetFromWidths(currentlyDisplayedImage?.fields?.file?.url, SRCSET_WIDTHS, resizeParams)\n    : undefined;\n  const sizes = sizesForBreakpoints(widthsAt);\n  const closestAspectRatioClass = getClosestAspectRatioClass(\n    currentlyDisplayedImage?.fields?.file?.details?.image?.width,\n    currentlyDisplayedImage?.fields?.file?.details?.image?.height\n  );\n\n  setContext(\"containerized\", true);\n</script>\n\n<svelte:window bind:innerWidth={screenWidth} />\n\n<GridContainer\n  {id}\n  variant={isFullBleed || isContainerized ? \"bleed\" : \"regular\"}\n  containerClass={className}\n>\n  {#if caption}\n    <ImageContent\n      aspectRatio={imageAspectRatio ? imageAspectRatio : closestAspectRatioClass}\n      isCaptionFullBleed={isFullBleed && !isContainerized}\n      image={{ src, alt, srcset, sizes, theme }}\n    >\n      <Markdown element=\"span\" input={caption} id=\"markdown-caption-${id}\" slot=\"caption\" />\n    </ImageContent>\n  {:else}\n    <ImageContent\n      aspectRatio={imageAspectRatio ? imageAspectRatio : closestAspectRatioClass}\n      isCaptionFullBleed={isFullBleed && !isContainerized}\n      image={{ src, alt, srcset, sizes, theme }}\n    />\n  {/if}\n</GridContainer>\n","<script>\n  import Image from \"$lib/components/Image.svelte\";\n\n  /** @type { string } */\n  let className = \"\";\n  export { className as class };\n\n  export let data;\n  let { altText, caption, aspectRatio, fullBleed, imageAsset, mobileImageAsset, theme } =\n    data.fields;\n</script>\n\n<Image\n  id={data.sys?.id}\n  class={className}\n  {altText}\n  {caption}\n  {imageAsset}\n  {mobileImageAsset}\n  {aspectRatio}\n  {theme}\n  isFullBleed={!!fullBleed}\n/>\n"],"names":["constants_0","child_ctx","ctx","insert_hydration","target","div","anchor","each_value","ensure_array_like","i","id","$$props","numberOfColumns","subGridColumns","containerClasses","gridClass","theme","$$invalidate","colSpanMobile","colSpanTablet","colSpanDesktop","themeClass","_a","getTheme","attr","div0","div1","create_if_block","SPLIT_LAYOUT_VARIANTS","SPLIT_LAYOUT_RIGHT_GRID_COLUMNS","className","stickyContainerHeightClass","isSticky","variant","isHalf","itemsLeftClasses","itemsRightClasses","stickyClasses","stickyHeightClasses","stickyWrapperClasses","stickyHeightClass","leftWrapperClasses","rightWrapperClasses","overflowClasses","renderSanitizedHTML","input","rawHtml","parseInline","DOMPurify","getUrlObject","url","INTERNAL_ORIGINS","isExternalUrl","currentOrigin","urlObj","targetOrigin","correctedUrl","isMissingTrailingSlash","isNotStaticFile","type","isRootRelative","hasNoTrailingSlash","textToId","text","spaces","anythingButSpacesAndLetters","punctuationToStrip","create_dynamic_element","svelte_element","svelte_element_data","get_spread_update","svelte_element_levels","svelte_element_class_value","element","clazz","isExternal","origin","marked","token","href","linkToRender","linkId","htmlText","$page","figcaption","figure","figure_class_value","current","dirty","image","caption","aspectRatio","isCaptionFullBleed","captionWrapperClasses","imageAspectRatios","imagecontent_changes","gridcontainer_changes","altText","imageAsset","mobileImageAsset","isFullBleed","isContainerized","getContext","resizeParams","ignoreContentfulImgResize","widthsAt","screenWidth","alt","altTextToDisplay","sizes","sizesForBreakpoints","closestAspectRatioClass","getClosestAspectRatioClass","_d","_c","_b","currentlyDisplayedImage","_h","_g","_f","_e","setContext","BREAK_POINTS","imageAspectRatio","getImageAspectRatio","src","buildSrc","srcset","srcSetFromWidths","SRCSET_WIDTHS","data","fullBleed"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6]}