{"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}: `\"></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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"}