{"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"}