{"version":3,"file":"ExhibitionsPage--aHyL1EO.js","sources":["../../src/components/exhibitions/ExhibitionItem.vue","../../src/queries/ExhibitionsQuery.js","../../src/components/exhibitions/ExhibitionsPage.vue"],"sourcesContent":["<template>\n  <figure>\n    <router-link\n      v-if=\"item.featuredImage\"\n      class=\"aspect-container\"\n      :to=\"{ name: 'ExhibitionsPost', params: { slug: item.slug } }\"\n      :ga4-event=\"\n        JSON.stringify({\n          click_type: 'image',\n          component: 'ExhibitionItem',\n          content_group: 'exhibition',\n          gtm_tag: 'linked_image',\n          file_name: `${item.featuredImage.sourceUrl.split('/').pop()}`,\n          link_url: `${item.slug}`,\n        })\n      \"\n    >\n      <picture>\n        <img\n          :alt=\"item.featuredImage.altText\"\n          :src=\"proxySource(item.featuredImage.sourceUrl)\"\n          :srcset=\"item.imageSrcset\"\n          class=\"aspect-image\"\n          loading=\"lazy\"\n          sizes=\"(min-width: 960px) 1280px, 100vw\"\n        />\n      </picture>\n    </router-link>\n    <figcaption>\n      <h3 :class=\"{ 'heading-4': !isOnView }\">\n        <router-link\n          :to=\"{ name: 'ExhibitionsPost', params: { slug: item.slug } }\"\n          :ga4-event=\"\n            JSON.stringify({\n              click_type: 'title',\n              component: 'ExhibitionItem',\n              content_group: 'exhibition',\n              gtm_tag: 'link',\n              link_text: `${item.title}`,\n              link_url: `${item.slug}`,\n            })\n          \"\n          v-html=\"item.title\"\n        ></router-link>\n      </h3>\n      <span v-if=\"item.dates && item.dates.label\" :class=\"$style.date\">\n        {{ item.dates.label }}\n      </span>\n      <ExhibitionDate\n        v-else-if=\"item.dates\"\n        :begin=\"item.dates.start\"\n        :class=\"$style.date\"\n        :end=\"item.dates.end\"\n      ></ExhibitionDate>\n      <p :class=\"$style.excerpt\" v-html=\"item.excerpt\"></p>\n    </figcaption>\n  </figure>\n</template>\n\n<script setup lang=\"ts\">\nimport ExhibitionDate from '@/components/exhibitions/ExhibitionDate.vue';\nimport { ExhibitionsItem } from '@/types/exhibition.interface';\nimport { useImageProxy } from '@/composables/Common.js';\n\nconst { proxySource } = useImageProxy();\n\ndefineProps<{\n  isOnView: boolean;\n  item: ExhibitionsItem;\n}>();\n</script>\n\n<style lang=\"scss\" module>\n.date {\n  @include subtitle-2;\n}\n\n.excerpt {\n  margin-top: 0.5rem;\n}\n</style>\n","import gql from 'graphql-tag';\n\nexport const exhibitionsQuery = gql`\n  query getExhibitions {\n    page(id: \"exhibitions\", idType: URI) {\n      excerpt\n      featuredImage {\n        node {\n          altText\n          description\n          sourceUrl\n        }\n      }\n      featuredExhibitions {\n        on_view {\n          items {\n            dates {\n              end {\n                day\n                month\n                year\n              }\n              start {\n                day\n                month\n                year\n              }\n              label\n            }\n            excerpt\n            featuredImage {\n              altText\n              sourceUrl\n            }\n            imageSrcset\n            slug\n            title\n          }\n        }\n        upcoming {\n          items {\n            dates {\n              end {\n                day\n                month\n                year\n              }\n              start {\n                day\n                month\n                year\n              }\n              label\n            }\n            excerpt\n            featuredImage {\n              altText\n              sourceUrl\n            }\n            imageSrcset\n            slug\n            title\n          }\n        }\n        past {\n          items {\n            dates {\n              end {\n                day\n                month\n                year\n              }\n              label\n              start {\n                day\n                month\n                year\n              }\n            }\n            excerpt\n            featuredImage {\n              altText\n              sourceUrl\n            }\n            imageSrcset\n            slug\n            title\n          }\n        }\n      }\n      pageNavigation {\n        label\n        url\n      }\n    }\n  }\n`;\n","<template>\n  <SecondaryNav v-if=\"page.pageNavigation\" :items=\"page.pageNavigation\"></SecondaryNav>\n  <div v-if=\"page && Object.keys(page).length\" :class=\"$style.exhibitions\">\n    <header>\n      <h1 class=\"no-border-above space-0-above\">Exhibitions</h1>\n    </header>\n    <section\n      v-if=\"page.featuredExhibitions && page.featuredExhibitions.on_view.items\"\n      id=\"exhibitions-on-view\"\n      aria-label=\"Exhibitions On View\"\n      :class=\"$style.section\"\n      role=\"region\"\n    >\n      <header>\n        <h2 class=\"space-0-above\">Exhibitions On View</h2>\n      </header>\n      <article\n        v-for=\"(exhibition, key) in page.featuredExhibitions.on_view.items\"\n        :key=\"key\"\n        :class=\"[$style.exhibition, $style.onview]\"\n      >\n        <ExhibitionItem :item=\"exhibition\" :is-on-view=\"true\"></ExhibitionItem>\n      </article>\n    </section>\n    <section\n      v-if=\"page.featuredExhibitions && page.featuredExhibitions.upcoming.items\"\n      id=\"upcoming\"\n      aria-label=\"Upcoming Exhibitions\"\n      :class=\"[$style.section, $style.twoUp]\"\n      role=\"region\"\n    >\n      <header>\n        <h2>Upcoming Exhibitions</h2>\n      </header>\n      <article\n        v-for=\"(exhibition, key) in page.featuredExhibitions.upcoming.items\"\n        :key=\"key\"\n        :class=\"$style.exhibition\"\n      >\n        <ExhibitionItem :item=\"exhibition\" :is-on-view=\"false\"></ExhibitionItem>\n      </article>\n    </section>\n    <section\n      v-if=\"page.featuredExhibitions && page.featuredExhibitions.past.items\"\n      id=\"past-exhibitions\"\n      aria-label=\"Past Exhibitions\"\n      :class=\"[$style.section, $style.twoUp]\"\n      role=\"region\"\n    >\n      <header>\n        <h2>Past Exhibitions</h2>\n      </header>\n      <article\n        v-for=\"(exhibition, key) in page.featuredExhibitions.past.items\"\n        :key=\"key\"\n        :class=\"$style.exhibition\"\n      >\n        <ExhibitionItem :item=\"exhibition\" :is-on-view=\"false\"></ExhibitionItem>\n      </article>\n      <router-link\n        :class=\"[$style.center, 'button-secondary']\"\n        :to=\"{ name: 'ExhibitionsPast', params: { past: true } }\"\n      >\n        View All\n      </router-link>\n    </section>\n  </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { BootStrap } from '@/types/global.interface';\nimport { dataLoaded, useHandleError, useMetaData } from '@/composables/Common.js';\nimport ExhibitionItem from '@/components/exhibitions/ExhibitionItem.vue';\nimport { ExhibitionsItem, PastItem } from '@/types/exhibition.interface';\nimport { exhibitionsQuery } from '@/queries/ExhibitionsQuery';\nimport { Image } from '@/types/common.interface';\nimport { inject, ref } from 'vue';\nimport { Navigation } from '@/types/page.interface';\nimport SecondaryNav from '@/components/navigation/SecondaryNav.vue';\nimport { storeToRefs } from 'pinia';\nimport { useMainStore } from '@/stores/mainStore.js';\nimport { useQuery } from 'villus';\n\ninterface FeaturedImage extends Image {\n  description: string;\n}\ninterface Page {\n  excerpt: string;\n  featuredExhibitions: {\n    on_view: {\n      items: Array<ExhibitionsItem>;\n    };\n    past: {\n      items: Array<PastItem>;\n    };\n    upcoming: {\n      items: Array<ExhibitionsItem>;\n    };\n  };\n  featuredImage: {\n    node: FeaturedImage;\n  };\n  pageNavigation: Array<Navigation>;\n}\n\nconst bootstrap = inject<BootStrap>('bootstrap');\n\nconst { handleError } = useHandleError();\nconst { setMetaDescription, setMetaTitle } = useMetaData();\n\nconst store = useMainStore();\nconst { useBootstrap } = storeToRefs(store);\n\nconst page = ref<Page>({});\nconst shouldSkip = ref(true);\n\nconst { data, error } = useQuery({\n  onData: (data) => {\n    if (data.page && Object.keys(data.page).length) {\n      page.value = data.page;\n      setMetaTitle('Exhibitions');\n      setMetaDescription(data.page.excerpt);\n      dataLoaded();\n    }\n\n    if (!data.page || Object.keys(data.page).length === 0) {\n      handleError('ExhibitionsPage', error);\n    }\n  },\n  query: exhibitionsQuery,\n  skip: shouldSkip,\n});\n\nif (useBootstrap.value) {\n  shouldSkip.value = true;\n\n  if (bootstrap.initial.main.posts) {\n    page.value = bootstrap.initial.main.posts;\n    setMetaTitle('Exhibitions');\n    setMetaDescription(page.value.excerpt);\n    dataLoaded();\n  }\n\n  if (!bootstrap.initial.main.posts) {\n    shouldSkip.value = false;\n  }\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: exhibitionsQuery,\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</style>\n\n<style lang=\"scss\" module>\n.center {\n  display: block;\n  margin: 2rem auto 0 auto;\n  width: fit-content;\n}\n\n.exhibition {\n  margin-top: 2rem;\n\n  h2,\n  h3 {\n    a {\n      text-decoration: none;\n\n      &:focus {\n        color: $white;\n      }\n\n      &:hover {\n        text-decoration: underline;\n      }\n    }\n  }\n}\n\n.two-up {\n  h1 {\n    @include heading-2;\n  }\n\n  .exhibition {\n    h2 {\n      @include heading-4;\n    }\n  }\n}\n\n.section {\n  margin-top: 0;\n\n  h1 {\n    margin-top: 0;\n  }\n}\n\n@media (min-width: $break-point) {\n  .exhibition {\n    figure {\n      > a {\n        @include space-5-above;\n      }\n    }\n    &.onview {\n      grid-column: span 12;\n\n      figure {\n        @include grid;\n\n        a {\n          grid-column: span 12;\n        }\n\n        figcaption {\n          grid-column: 1 / span 8;\n        }\n      }\n    }\n  }\n\n  .two-up {\n    .exhibition {\n      h2,\n      h3 {\n        margin-top: 0;\n      }\n\n      figure {\n        display: grid;\n        column-gap: $column-gutter-large;\n        grid-template-columns: 1fr 1fr;\n      }\n    }\n  }\n\n  .section {\n    @include grid;\n\n    > * {\n      grid-column: 1 / span 8;\n    }\n\n    .eight {\n      display: grid;\n      column-gap: $column-gutter-large;\n      grid-template-columns: repeat(8, 1fr);\n\n      > * {\n        grid-column: span 8;\n      }\n\n      p {\n        grid-column: 1 / span 6;\n      }\n    }\n  }\n}\n</style>\n"],"names":["proxySource","useImageProxy","exhibitionsQuery","gql","__default__","params","villusClient","resolve","reject","err","bootstrap","inject","handleError","useHandleError","setMetaDescription","setMetaTitle","useMetaData","store","useMainStore","useBootstrap","storeToRefs","page","ref","shouldSkip","data","error","useQuery","dataLoaded"],"mappings":"ofAgEM,KAAA,CAAE,YAAAA,CAAY,EAAIC,EAAc,s7CC9DzBC,EAAmBC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,ECwJjBC,EAAA,CACb,YAAYC,EAAQC,EAAc,CAChC,OAAO,IAAI,QAAc,CAACC,EAASC,IAAW,CAC5CF,EACG,aAAa,CACZ,MAAOJ,EACP,UAAW,CAAA,CAAC,CACb,EACA,KAAK,IAAMK,GAAS,EACpB,MAAOE,GAAQD,EAAOC,CAAG,CAAC,CAAA,CAC9B,CAAA,CAEL,8CA7DM,MAAAC,EAAYC,EAAkB,WAAW,EAEzC,CAAE,YAAAC,CAAY,EAAIC,EAAe,EACjC,CAAE,mBAAAC,EAAoB,aAAAC,CAAa,EAAIC,EAAY,EAEnDC,EAAQC,EAAa,EACrB,CAAE,aAAAC,CAAA,EAAiBC,EAAYH,CAAK,EAEpCI,EAAOC,EAAU,EAAE,EACnBC,EAAaD,EAAI,EAAI,EAErB,CAAE,KAAAE,GAAM,MAAAC,CAAM,EAAIC,EAAS,CAC/B,OAASF,GAAS,CACZA,EAAK,MAAQ,OAAO,KAAKA,EAAK,IAAI,EAAE,SACtCH,EAAK,MAAQG,EAAK,KAClBT,EAAa,aAAa,EACPS,EAAAA,EAAK,KAAK,OAAO,EACzBG,EAAA,IAGT,CAACH,EAAK,MAAQ,OAAO,KAAKA,EAAK,IAAI,EAAE,SAAW,IAClDZ,EAAY,kBAAmBa,CAAK,CAExC,EACA,MAAOvB,EACP,KAAMqB,CAAA,CACP,EAED,OAAIJ,EAAa,QACfI,EAAW,MAAQ,GAEfb,EAAU,QAAQ,KAAK,QACpBW,EAAA,MAAQX,EAAU,QAAQ,KAAK,MACpCK,EAAa,aAAa,EACPD,EAAAO,EAAK,MAAM,OAAO,EAC1BM,EAAA,GAGRjB,EAAU,QAAQ,KAAK,QAC1Ba,EAAW,MAAQ,KAIlBJ,EAAa,QAChBI,EAAW,MAAQ"}