{"version":3,"file":"Home-Cl-J36i5.js","sources":["../../src/queries/FromTheCollectionQuery.js","../../src/assets/svgs/IconRefresh.svg?component","../../src/components/common/FromTheCollection.vue","../../src/queries/HomepageQuery.js","../../src/queries/UpcomingEventsQuery.js","../../src/components/common/UpcomingEvents.vue","../../src/components/Home.vue"],"sourcesContent":["export const fromTheCollectionQuery = `\n  query getRandomArtwork($filter: String) {\n    artworks(first: 5, where: { metaValue: $filter }) {\n      nodes {\n        artists {\n          nodes {\n            name\n          }\n        }\n        dates\n        featuredImage {\n          node {\n            altText\n            sourceUrl\n          }\n        }\n        imageSrcset\n        slug\n        title\n      }\n    }\n  }\n`;\n","import { createElementVNode as _createElementVNode, openBlock as _openBlock, createElementBlock as _createElementBlock } from \"vue\"\n\nconst _hoisted_1 = {\n  xmlns: \"http://www.w3.org/2000/svg\",\n  fill: \"none\",\n  viewBox: \"0 0 16 16\"\n}\n\nexport function render(_ctx, _cache) {\n  return (_openBlock(), _createElementBlock(\"svg\", _hoisted_1, _cache[0] || (_cache[0] = [\n    _createElementVNode(\"path\", {\n      fill: \"#111\",\n      d: \"M11.767 4.233A5.305 5.305 0 0 0 8 2.667a5.333 5.333 0 1 0 0 10.666c2.487 0 4.56-1.7 5.154-4h-1.387a3.994 3.994 0 0 1-6.595 1.495A4 4 0 0 1 8 4c1.107 0 2.094.46 2.814 1.187L8.667 7.333h4.667V2.667l-1.567 1.566Z\"\n    }, null, -1)\n  ])))\n}\nexport default { render: render }","<template>\n  <section :class=\"[$style.collection, 'unspaced']\">\n    <h2>From the Collection</h2>\n    <span :class=\"screenreaderOnly\">Random Artwork From The Guggenheim Collection</span>\n    <router-link\n      v-if=\"artwork && artwork.featuredImage\"\n      :class=\"$style.focus\"\n      :to=\"`/artwork/${artwork.slug}`\"\n      :ga4-event=\"\n        JSON.stringify({\n          click_type: 'from_the_collection',\n          component: 'FromTheCollection',\n          content_group: 'homepage',\n          gtm_tag: 'interaction',\n          link_text: `${loaded.artist} ${loaded.title}${loaded.dates}`,\n        })\n      \"\n    >\n      <picture>\n        <img\n          :alt=\"artwork.featuredImage.node.altText\"\n          :src=\"proxySource(artwork.featuredImage.node.sourceUrl, 1280)\"\n          :srcset=\"artwork.imageSrcset\"\n          aria-live=\"polite\"\n          loading=\"lazy\"\n          sizes=\"(min-width: 960px) 1280px, 100vw\"\n          @load=\"load()\"\n        />\n      </picture>\n    </router-link>\n    <h3 v-html=\"loaded.artist\"></h3>\n    <p class=\"heading-5 space-8-10-above\">\n      <span :class=\"$style.italic\" v-html=\"loaded.title\"></span>\n      <span v-html=\"loaded.dates\"></span>\n    </p>\n    <div :class=\"$style.buttons\">\n      <button\n        class=\"button-secondary\"\n        type=\"button\"\n        :disabled=\"disabled\"\n        @click.prevent=\"refresh()\"\n        @keyup.enter=\"refresh()\"\n      >\n        Load Another Artwork\n        <IconRefresh :class=\"{ [$style.loading]: disabled }\"></IconRefresh>\n      </button>\n      <router-link\n        :to=\"{\n          name: 'CollectionOnline',\n        }\"\n        class=\"button-secondary\"\n        :ga4-event=\"\n          JSON.stringify({\n            click_type: 'from_the_collection',\n            component: 'FromTheCollection',\n            content_group: 'homepage',\n            gtm_tag: 'interaction',\n            link_text: 'Browse the Collection',\n          })\n        \"\n      >\n        Browse the Collection\n      </router-link>\n    </div>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { Artwork } from '@/types/common.interface';\nimport { BootStrap } from '@/types/global.interface';\nimport { fromTheCollectionQuery } from '@/queries/FromTheCollectionQuery';\nimport gql from 'graphql-tag';\nimport IconRefresh from '@/assets/svgs/IconRefresh.svg?component';\nimport { inject, ref } from 'vue';\nimport { screenreaderOnly } from '@/styles/a11y.module.scss';\nimport { storeToRefs } from 'pinia';\nimport { useAnalytics, useHandleError, useImageProxy } from '@/composables/Common.js';\nimport { useMainStore } from '@/stores/mainStore.js';\nimport { useQuery } from 'villus';\n\nconst bootstrap = inject<BootStrap>('bootstrap');\n\nconst { ga4Event } = useAnalytics();\nconst { handleError } = useHandleError();\nconst { proxySource } = useImageProxy();\n\nconst store = useMainStore();\nconst { setValue } = store;\nconst { collectionArtworks, useBootstrap } = storeToRefs(store);\n\nconst artwork = ref<Artwork>({});\nconst disabled = ref(false);\nconst loaded = ref<{\n  artist: string;\n  dates: string;\n  slug: string;\n  title: string;\n}>({});\nconst shouldSkip = ref(true);\nconst waiting = ref(false);\n\nconst { data, error, execute } = useQuery({\n  onData: data => {\n    if (data && Object.keys(data).length) {\n      setArtworks(data.artworks.nodes);\n\n      if (waiting.value) {\n        artwork.value = getArtwork();\n      }\n    }\n\n    if (!data || Object.keys(data).length === 0) {\n      handleError('FromTheCollection', error);\n    }\n  },\n  query: gql`\n    ${fromTheCollectionQuery}\n  `,\n  skip: shouldSkip,\n  variables: { filter: 'allow_footer' },\n});\n\nif (useBootstrap.value) {\n  setArtworks(bootstrap.initial.main.posts.artworks);\n  artwork.value = getArtwork();\n}\n\nif (!useBootstrap.value) {\n  disabled.value = collectionArtworks.value.length === 0;\n  waiting.value = collectionArtworks.value.length === 0;\n\n  if (collectionArtworks.value.length > 0) {\n    artwork.value = getArtwork();\n  }\n\n  if (collectionArtworks.value.length === 0 || collectionArtworks.value.length === 2) {\n    shouldSkip.value = false;\n    execute({ cachePolicy: 'network-only' });\n  }\n}\n\nfunction getArtwork(): Artwork {\n  const artwork = collectionArtworks.value.shift();\n\n  setValue({ type: 'collectionArtworks', value: collectionArtworks.value });\n\n  return artwork;\n}\n\nfunction load(): void {\n  disabled.value = false;\n  loaded.value = {\n    artist: artwork.value.artists.nodes[0].name,\n    dates: artwork.value.dates,\n    slug: artwork.value.slug,\n    title: `${artwork.value.title}, `,\n  };\n}\n\nfunction refresh(): void {\n  disabled.value = true;\n  waiting.value = collectionArtworks.value.length === 0;\n\n  if (collectionArtworks.value.length > 0) {\n    artwork.value = getArtwork();\n\n    if (collectionArtworks.value.length === 2) {\n      shouldSkip.value = false;\n      execute({ cachePolicy: 'network-only' });\n    }\n  }\n\n  ga4Event({\n    click_type: 'from_the_collection',\n    component: 'FromTheCollection',\n    content_group: 'homepage',\n    gtm_tag: 'interaction',\n    link_text: 'Load Another Artwork',\n  });\n}\n\nfunction setArtworks(artworks: Array<Artwork>): void {\n  collectionArtworks.value.push(...artworks);\n  setValue({ type: 'collectionArtworks', value: collectionArtworks.value });\n}\n</script>\n\n<style lang=\"scss\" module>\n@keyframes spin {\n  from {\n    transform: rotate(0);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n.buttons {\n  width: fit-content;\n\n  a,\n  button {\n    display: block;\n    margin: 2rem auto 0 0;\n    width: fit-content;\n  }\n}\n\n.collection {\n  picture {\n    img {\n      @include space-24-32-above;\n    }\n  }\n\n  &:global(.unspaced) {\n    > h3:first-of-type {\n      @include space-12-16-above;\n    }\n  }\n\n  &::before {\n    @include line;\n\n    & {\n      margin-top: -2rem;\n    }\n  }\n}\n\n.focus {\n  &:focus {\n    img {\n      @include focus-outline;\n    }\n  }\n}\n\n.italic {\n  font-style: italic;\n}\n\n.loading {\n  animation: spin 0.6s linear infinite;\n}\n\n@media (min-width: $break-point) {\n  .buttons {\n    display: grid;\n    column-gap: 2rem;\n    grid-template-columns: 1fr 1fr;\n\n    a,\n    button {\n      display: inline-block;\n      margin: 2rem 0 0 0;\n    }\n  }\n\n  .collection {\n    grid-column: span 12;\n\n    picture {\n      @include aspect-container;\n\n      img {\n        @include aspect-image;\n        @include space-24-32-above;\n      }\n    }\n  }\n}\n</style>\n","export const homepageQuery = `\n  query getHomepage {\n    homepage {\n      blocks {\n        heading\n        image {\n          altText\n          imageSrcset\n          sourceUrl\n        }\n        more_link\n        more_link_behavior\n        more_link_text\n        subheading\n        text\n        type\n      }\n      events {\n        items {\n          eventSlug\n          featuredImage {\n            node {\n              altText\n              sourceUrl\n            }\n          }\n          imageSrcset\n          repeatDescription\n          start {\n            day\n            meridiem\n            month\n            time\n            timezone\n            year\n            weekday\n          }\n          title\n          venue\n        }\n        more_link\n        more_link_text\n        title\n      }\n      excerpt\n      exhibitions {\n        items {\n          dates {\n            formatted\n          }\n          featuredImage {\n            altText\n            sourceUrl\n          }\n          imageSrcset\n          title\n          url\n        }\n        more_link\n        more_link_text\n      }\n      featuredImage {\n        altText\n        sourceUrl\n      }\n      featuredImageWidth\n      imageSrcset\n      mainTitle\n      mediaBanner {\n        altText\n        carouselItems {\n          altText\n          caption\n          captionLink\n          enableDescription\n          enableLink\n          enablePlayPause\n          enableSound\n          imageFile\n          imageUrl\n          itemType\n          linksTo\n          muxLongVideoId\n          muxShortVideoId\n          muxVideoMobileId\n          videoFile\n        }\n        enabled\n        enableDescription\n        enableLink\n        enablePlayPause\n        enableSound\n        caption\n        captionLink\n        itemType\n        imageUrl\n        imageFile\n        linksTo\n        mediaType\n        muxLongVideoId\n        muxShortVideoId\n        muxVideoMobileId\n        videoFile\n      }\n      quickLinks {\n        link\n        link_behavior\n        link_text\n      }\n    }\n  }\n`;\n","export const upcomingEventsQuery = `\n  query($first: Int, $today: String) {\n    eventOccurrences(first: $first, where: { dateStart: $today }) {\n      nodes {\n        eventSlug\n        featuredImage {\n          node {\n            altText\n            sourceUrl\n          }\n        }\n        hideStartTime\n        imageSrcset\n        start {\n          day\n          meridiem\n          month\n          time\n          timezone\n          year\n          weekday\n        }\n        repeatDescription\n        title\n        timezoneAbbr\n        venue\n      }\n      pageInfo {\n        totalEventOccurrences\n      }\n    }\n  }\n`;\n","<template>\n  <section :class=\"$style.events\">\n    <h2 class=\"space-0-above\">\n      {{\n        upcomingEvents.items && upcomingEvents.items.length && upcomingEvents.title\n          ? upcomingEvents.title\n          : 'Upcoming Events'\n      }}\n    </h2>\n    <div v-if=\"events && events.length\" :class=\"$style.grid\">\n      <div\n        v-for=\"(event, key) in events\"\n        :key=\"key\"\n        :class=\"[\n          $style.event,\n          {\n            [$style.oneUp]: events.length === 1,\n            [$style.twoUp]: events.length === 2,\n            [$style.threeUp]: events.length === 3,\n          },\n        ]\"\n      >\n        <router-link\n          :ga4-event=\"\n            JSON.stringify({\n              click_type: 'image',\n              component: `${parent}`,\n              content_group: 'module',\n              gtm_tag: 'linked_image',\n              file_name: `${event.featuredImage.node.sourceUrl.split('/').pop()}`,\n              link_url: `${event.eventSlug}`,\n            })\n          \"\n          :to=\"{\n            name: 'CalendarEvent',\n            params: {\n              slug: event.eventSlug,\n            },\n          }\"\n        >\n          <picture class=\"aspect-container\">\n            <img\n              :alt=\"event.featuredImage.node.altText\"\n              :src=\"proxySource(event.featuredImage.node.sourceUrl)\"\n              :srcset=\"event.imageSrcset\"\n              class=\"aspect-image\"\n              loading=\"lazy\"\n              :sizes=\"get_sizes(events.length, key)\"\n            />\n          </picture>\n        </router-link>\n        <section>\n          <header>\n            <h3 v-if=\"event.title\" class=\"space-12-16-above\">\n              <router-link\n                :ga4-event=\"\n                  JSON.stringify({\n                    click_type: 'link',\n                    component: `${parent}`,\n                    content_group: 'module',\n                    gtm_tag: 'link',\n                    file_name: `${event.title}`,\n                    link_url: `${event.eventSlug}`,\n                  })\n                \"\n                :to=\"{\n                  name: 'CalendarEvent',\n                  params: {\n                    slug: event.eventSlug,\n                  },\n                }\"\n                v-html=\"event.title\"\n              ></router-link>\n            </h3>\n          </header>\n          <footer>\n            <p v-if=\"event.venue.toLowerCase() === 'online'\" v-html=\"`${event.venue}:&nbsp;`\"></p>\n            <p v-if=\"event.repeatDescription\">{{ event.repeatDescription }}</p>\n            <time\n              v-if=\"!event.repeatDescription\"\n              class=\"body-1\"\n              v-html=\"\n                !event.hideStartTime\n                  ? `${formatDate(event.start, true)}, ${formatTimeSpan(event)}`\n                  : `${formatDate(event.start, true)}`\n              \"\n            ></time>\n          </footer>\n        </section>\n      </div>\n    </div>\n    <div v-else>\n      <p>\n        There are currently no upcoming events. Sign up for our newsletter to be notified of new\n        events and other news about the Guggenheim.\n      </p>\n    </div>\n    <PreparedAnchor\n      v-if=\"events && events.length\"\n      class=\"more-link\"\n      :to=\"\n        upcomingEvents.items && upcomingEvents.items.length && upcomingEvents.more_link\n          ? upcomingEvents.more_link\n          : '/calendar'\n      \"\n    >\n      {{\n        upcomingEvents.items && upcomingEvents.items.length && upcomingEvents.more_link_text\n          ? upcomingEvents.more_link_text\n          : 'Explore the Calendar'\n      }}\n    </PreparedAnchor>\n    <a v-else class=\"more-link\" href=\"https://cloud.emails.guggenheim.org/newsletter\">Subscribe</a>\n  </section>\n</template>\n\n<script setup lang=\"ts\">\nimport { AppConfig } from '@/types/global.interface';\nimport gql from 'graphql-tag';\nimport { inject, ref, watch } from 'vue';\nimport PreparedAnchor from '@/components/common/PreparedAnchor.vue';\nimport { upcomingEventsQuery } from '@/queries/UpcomingEventsQuery';\nimport {\n  useDateFormat,\n  useHandleError,\n  useImageProxy,\n  useRouteParent,\n} from '@/composables/Common.js';\nimport { useQuery } from 'villus';\nimport { UpcomingEvent } from '@/types/event.interface';\n\nconst props = defineProps<{\n  upcomingEvents: {\n    items: Array<UpcomingEvent>;\n    more_link: string;\n    more_link_text: string;\n    title: string;\n  };\n}>();\n\nconst events = ref();\nconst limit = 4;\nconst shouldSkip = ref(true);\nconst total = ref();\n\nconst { formatDate, formatTimeSpan } = useDateFormat();\nconst { handleError } = useHandleError();\nconst { parent } = useRouteParent();\nconst { proxySource } = useImageProxy();\n\nconst appConfig = inject<AppConfig>('appConfig');\n\nconst { data: queryData, error } = useQuery({\n  query: gql`\n    ${upcomingEventsQuery}\n  `,\n  skip: shouldSkip,\n  variables: {\n    first: limit,\n    today: appConfig.today.isoDate,\n  },\n});\n\nif (props.upcomingEvents.items && props.upcomingEvents.items.length) {\n  events.value = props.upcomingEvents.items;\n}\n\nif (!props.upcomingEvents.items || props.upcomingEvents.items.length < 1) {\n  shouldSkip.value = false;\n}\n\nwatch(queryData, (data) => {\n  if (data && Object.keys(data).length) {\n    events.value = data.eventOccurrences.nodes;\n    total.value = data.eventOccurrences.pageInfo.totalEventOccurrences;\n  }\n\n  if (!data) {\n    handleError('UpcomingEvents', error);\n  }\n});\n\nfunction get_sizes(count, key) {\n  if (count % 2 != 0 && key == 0) {\n    return `(min-width: 960px) 1280px, 100vw`;\n  }\n\n  return `(min-width: 960px) 620px, 100vw`;\n}\n</script>\n\n<style lang=\"scss\" module>\n.event {\n  @include space-48-64-above;\n}\n\n.events {\n  &::before {\n    @include line;\n\n    & {\n      margin-top: -2rem;\n    }\n  }\n\n  :global(.more-link) {\n    @include space-48-64-above;\n  }\n\n  footer {\n    @include space-8-10-above;\n\n    > * {\n      display: inline-block;\n      margin-top: 0;\n    }\n  }\n\n  h3 {\n    a {\n      text-decoration: none;\n    }\n  }\n}\n\n@media (min-width: $break-point-small) {\n  .event {\n    grid-column: span 6;\n\n    &.oneUp {\n      grid-column: span 12;\n    }\n    &.threeUp {\n      margin-top: 2rem;\n\n      &:first-of-type {\n        grid-column: span 12;\n      }\n    }\n  }\n\n  .grid {\n    @include grid;\n  }\n}\n</style>\n","<template>\n  <article v-if=\"page && Object.keys(page).length\" :class=\"$style.home\">\n    <header>\n      <MediaBannerHandler\n        v-if=\"page.mediaBanner && page.mediaBanner.enabled\"\n        :mediaBanner=\"page.mediaBanner\"\n        :isHeaderBanner=\"true\"\n      ></MediaBannerHandler>\n      <PostFeaturedImage\n        v-else-if=\"page.featuredImage\"\n        decoding=\"async\"\n        fetchpriority=\"high\"\n        loading=\"eager\"\n        :featured-image=\"page.featuredImage\"\n        :ga4-data='`{\n          \"click_type\": \"hero\",\n          \"component\": \"PagePrimary\",\n          \"content_group\": \"page\",\n          \"gtm_tag\": \"image\",\n          \"file_name\": \"${page.featuredImage.sourceUrl.split(\"/\").pop()}\"\n        }`'\n      :srcset=\"page.imageSrcset\"\n      :is-wide=\"page.featuredImageWidth === 'wide'\"\n      ></PostFeaturedImage>\n      <h1 v-if=\"page.mainTitle\">{{ page.mainTitle }}</h1>\n    </header>\n    <div :class=\"['container', $style.grid]\">\n      <div v-if=\"page.quickLinks\">\n        <PreparedAnchor\n          v-for=\"(link, key) in page.quickLinks\"\n          :key=\"key\"\n          :class=\"$style['quick-link']\"\n          :to=\"link.link\"\n          :behavior=\"link.link_behavior\"\n          >{{ link.link_text }}</PreparedAnchor\n        >\n      </div>\n      <section v-if=\"page.exhibitions.items.length\" :class=\"$style.exhibitions\">\n        <h2 class=\"space-0-above\">Exhibitions</h2>\n        <div\n          v-for=\"(exhibition, key) in page.exhibitions.items\"\n          :key=\"key\"\n          class=\"space-48-64-above\"\n        >\n          <PreparedAnchor :to=\"exhibition.url\">\n            <picture class=\"aspect-container\">\n              <img\n                :alt=\"exhibition.featuredImage.altText\"\n                class=\"aspect-image\"\n                loading=\"lazy\"\n                :src=\"proxySource(exhibition.featuredImage.sourceUrl)\"\n                :srcset=\"exhibition.imageSrcset\"\n                sizes=\"(max-width: 960px) 100vw, 1280px\"\n              />\n            </picture>\n          </PreparedAnchor>\n          <h3 class=\"space-12-16-above\">\n            <PreparedAnchor :to=\"exhibition.url\">{{ exhibition.title }}</PreparedAnchor>\n          </h3>\n          <time :class=\"$style.time\" v-html=\"exhibition.dates.formatted\"></time>\n        </div>\n        <PreparedAnchor\n          v-if=\"page.exhibitions.more_link\"\n          class=\"button-secondary\"\n          :to=\"page.exhibitions.more_link\"\n        >\n          {{ page.exhibitions.more_link_text }}\n        </PreparedAnchor>\n      </section>\n      <UpcomingEvents\n        :class=\"[$style.narrow, 'space-48-64-above']\"\n        :upcoming-events=\"page.events\"\n      ></UpcomingEvents>\n      <FromTheCollection class=\"space-48-64-above\"></FromTheCollection>\n      <section :class=\"[$style.grid, $style.narrow]\">\n        <article\n          v-for=\"(block, key) in page.blocks\"\n          :key=\"key\"\n          :class=\"[style[block.type], $style.lined, 'space-48-64-above']\"\n        >\n          <div v-if=\"block.type !== 'text_below'\" :class=\"$style.image\">\n            <PreparedAnchor :to=\"block.more_link\" :behavior=\"block.more_link_behavior\">\n              <picture class=\"aspect-container\">\n                <img\n                  :alt=\"block.image.altText\"\n                  class=\"aspect-image\"\n                  loading=\"lazy\"\n                  :src=\"proxySource(block.image.sourceUrl)\"\n                  :srcset=\"block.image.imageSrcset\"\n                  sizes=\"(min-width: 960px) 620px, 100vw\"\n                />\n              </picture>\n            </PreparedAnchor>\n          </div>\n          <div v-if=\"block.type !== 'text_below'\" :class=\"$style.text\">\n            <h2 v-if=\"block.heading\" :class=\"$style.heading\">\n              <PreparedAnchor :to=\"block.more_link\" :behavior=\"block.more_link_behavior\">\n                {{ block.heading }}\n              </PreparedAnchor>\n            </h2>\n            <p v-if=\"block.text\" v-html=\"block.text\"></p>\n            <PreparedAnchor\n              class=\"more-link\"\n              :to=\"block.more_link\"\n              :behavior=\"block.more_link_behavior\"\n            >\n              {{ block.more_link_text }}\n            </PreparedAnchor>\n          </div>\n          <div v-if=\"block.type === 'text_below'\" :class=\"$style.frame\">\n            <h2 v-if=\"block.heading\" :class=\"$style.heading\">\n              <PreparedAnchor :to=\"block.more_link\" :behavior=\"block.more_link_behavior\">\n                {{ block.heading }}\n              </PreparedAnchor>\n            </h2>\n            <PreparedAnchor :to=\"block.more_link\" :behavior=\"block.more_link_behavior\">\n              <picture class=\"aspect-container\">\n                <img\n                  :alt=\"block.image.altText\"\n                  class=\"aspect-image\"\n                  loading=\"lazy\"\n                  :src=\"proxySource(block.image.sourceUrl)\"\n                  :srcset=\"block.image.imageSrcset\"\n                  sizes=\"(min-width: 960px) 620px, 100vw\"\n                />\n              </picture>\n            </PreparedAnchor>\n            <p v-if=\"block.subheading\" :class=\"$style.subheading\">{{ block.subheading }}</p>\n            <p v-if=\"block.text\" v-html=\"block.text\"></p>\n            <PreparedAnchor\n              class=\"more-link\"\n              :to=\"block.more_link\"\n              :behavior=\"block.more_link_behavior\"\n            >\n              {{ block.more_link_text }}\n            </PreparedAnchor>\n          </div>\n        </article>\n      </section>\n    </div>\n  </article>\n</template>\n\n<script setup lang=\"ts\">\nimport { BootStrap } from '@/types/global.interface';\nimport { dataLoaded, useHandleError, useImageProxy, useMetaData } from '@/composables/Common.js';\nimport { Image } from '@/types/common.interface';\nimport FromTheCollection from '@/components/common/FromTheCollection.vue';\nimport gql from 'graphql-tag';\nimport { homepageQuery } from '@/queries/HomepageQuery';\nimport { inject, ref, useCssModule } from 'vue';\nimport MediaBannerHandler from '@/components/mediaBanner/MediaBannerHandler.vue';\nimport PostFeaturedImage from '@/components/common/PostFeaturedImage.vue';\nimport PreparedAnchor from '@/components/common/PreparedAnchor.vue';\nimport { storeToRefs } from 'pinia';\nimport { UpcomingEvent } from '@/types/event.interface';\nimport UpcomingEvents from '@/components/common/UpcomingEvents.vue';\nimport { useMainStore } from '@/stores/mainStore.js';\nimport { useQuery } from 'villus';\n\nconst bootstrap = inject<BootStrap>('bootstrap');\n\nconst store = useMainStore();\nconst { useBootstrap } = storeToRefs(store);\n\nconst { handleError } = useHandleError();\nconst { proxySource } = useImageProxy();\nconst { setMetaDescription, setMetaTitle } = useMetaData();\nconst style = useCssModule();\n\ninterface Block {\n  image: Image;\n  heading: string;\n  more_link: string;\n  more_link_behavior: string;\n  more_link_text: string;\n  subheading: string;\n  text: string;\n  type: string;\n}\n\ninterface Exhibition {\n  dates: {\n    formatted: string;\n  };\n  featuredImage: Image;\n  imageSrcset: string;\n  title: string;\n  url: string;\n}\n\ninterface Page {\n  blocks: Array<Block>;\n  events: {\n    items: Array<UpcomingEvent>;\n    more_link: string;\n    more_link_text: string;\n    title: string;\n  };\n  excerpt: string;\n  exhibitions: {\n    items: Array<Exhibition>;\n    more_link: string;\n    more_link_text: string;\n  };\n  featuredImage: Image;\n  imageSrcset: string;\n  textPrompt: string;\n}\n\nconst page = ref<Page>();\nconst shouldSkip = ref(true);\n\nconst { data, error } = useQuery({\n  onData: (data) => {\n    if (data && Object.keys(data).length) {\n      page.value = data.homepage;\n      setMetaTitle('Home');\n      setMetaDescription(data.homepage.excerpt);\n      dataLoaded();\n    }\n\n    if (data && Object.keys(data).length === 0) {\n      handleError('Home', error);\n    }\n  },\n  query: gql`\n    ${homepageQuery}\n  `,\n  skip: shouldSkip,\n});\n\nif (useBootstrap.value) {\n  shouldSkip.value = true;\n  page.value = bootstrap.initial.main.posts.homepage;\n  setMetaTitle('Home');\n  setMetaDescription(bootstrap.initial.main.posts.homepage.excerpt);\n  dataLoaded();\n}\n\nif (!useBootstrap.value) {\n  shouldSkip.value = false;\n}\n</script>\n\n<script lang=\"ts\">\nexport default {\n  beforeRoute(params, villusClient) {\n    return new Promise<void>((resolve, reject) => {\n      villusClient\n        .executeQuery({\n          query: gql`\n            ${homepageQuery}\n          `,\n          variables: {},\n        })\n        .then(() => resolve())\n        .catch((err) => reject(err));\n    });\n  },\n};\n</script>\n\n<style lang=\"scss\">\n@use '@/styles/links.module.scss' as *;\n@use '@/styles/summary.module.scss' as *;\n</style>\n\n<style lang=\"scss\" module>\n:global(.aspect-container) {\n  background: none;\n}\n\n.exhibitions {\n  margin-top: 4rem;\n\n  &::before {\n    @include line;\n\n    & {\n      margin-top: -2rem;\n    }\n  }\n\n  :global(.button-secondary) {\n    margin-right: 0;\n    margin-top: 2rem;\n  }\n}\n\n.home {\n  h1 {\n    margin-bottom: 0;\n    padding: 0;\n\n    &::after,\n    &::before {\n      border-bottom: none;\n    }\n  }\n  h2,\n  h3 {\n    a {\n      text-decoration: none;\n\n      &:hover {\n        text-decoration: underline;\n      }\n    }\n  }\n\n  a:not(:global(.button-secondary)) {\n    &:focus {\n      color: $white;\n\n      h2,\n      h3 {\n        @include focus;\n      }\n    }\n  }\n}\n\n.lined {\n  &::before {\n    @include line;\n\n    & {\n      margin-top: -2rem;\n    }\n  }\n\n  :global(.aspect-container) {\n    @include space-0-above;\n  }\n\n  :global(.aspect-image) {\n    margin: 0 auto;\n  }\n}\n\n.quick-link {\n  @include heading-3;\n  @include space-0-above;\n\n  & {\n    display: block;\n    text-decoration: none;\n    width: fit-content;\n  }\n\n  &::before {\n    content: '\\2192\\00A0';\n  }\n\n  &:first-of-type {\n    @include space-24-32-above;\n  }\n\n  &:hover {\n    text-decoration: underline;\n  }\n}\n\n.prompt {\n  @include space-48-64-above;\n}\n\n.subheading {\n  @include heading-4;\n}\n\n.text {\n  margin-top: 1rem;\n\n  h2 + p {\n    @include space-8-10-above;\n  }\n}\n\n.text_below {\n  .heading {\n    margin: 1rem auto 0 auto;\n  }\n\n  :global(.aspect-container) {\n    margin-top: 1rem;\n  }\n}\n\n.text_below,\n.text_left,\n.text_right {\n  @include space-48-64-above;\n\n  h2 {\n    margin: 0 auto;\n  }\n}\n\n.time {\n  @include subtitle-2;\n  @include space-8-10-above;\n\n  & {\n    display: block;\n  }\n}\n\n@media (min-width: $break-point) {\n  .exhibitions {\n    grid-column: span 12;\n  }\n\n  .grid {\n    @include grid;\n  }\n\n  .narrow {\n    grid-column: span 12;\n  }\n\n  .text {\n    justify-self: center;\n    margin-top: 0;\n  }\n\n  .text_below,\n  .text_left,\n  .text_right {\n    grid-column: span 12;\n  }\n\n  .text_below {\n    grid-column: span 6;\n\n    .heading {\n      grid-row: 1;\n      margin-top: 0;\n    }\n  }\n\n  .text_left,\n  .text_right {\n    display: grid;\n    grid-column: span 12;\n    grid-column-gap: $column-gutter-large;\n    grid-template-areas: 'a b';\n    grid-template-columns: 1fr 1fr;\n\n    .image {\n      @include space-7-above;\n    }\n  }\n\n  .text_left {\n    .image {\n      grid-area: b;\n    }\n\n    .text {\n      grid-area: a;\n    }\n  }\n\n  .text_right {\n    .image {\n      grid-area: a;\n    }\n\n    .text {\n      grid-area: b;\n    }\n  }\n}\n</style>\n"],"names":["fromTheCollectionQuery","_hoisted_1","render","_ctx","_cache","_openBlock","_createElementBlock","_createElementVNode","IconRefresh","bootstrap","inject","ga4Event","useAnalytics","handleError","useHandleError","proxySource","useImageProxy","store","useMainStore","setValue","collectionArtworks","useBootstrap","storeToRefs","artwork","ref","disabled","loaded","shouldSkip","waiting","data","error","execute","useQuery","getArtwork","gql","setArtworks","load","refresh","artworks","homepageQuery","upcomingEventsQuery","limit","props","__props","events","total","formatDate","formatTimeSpan","useDateFormat","parent","useRouteParent","appConfig","queryData","watch","get_sizes","count","key","__default__","params","villusClient","resolve","reject","err","setMetaDescription","setMetaTitle","useMetaData","style","useCssModule","page","dataLoaded"],"mappings":"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"}