{"version":3,"sources":["webpack://dev-royal-society-summer/./src/vendor/vue-device-detector.ts","webpack://dev-royal-society-summer/./src/App.vue","webpack://dev-royal-society-summer/./src/components/MobileWarning.vue","webpack://dev-royal-society-summer/./src/components/MobileWarning.vue?b5a7","webpack://dev-royal-society-summer/./src/components/MobileWarning.vue?b01a","webpack://dev-royal-society-summer/./src/utils/ga.ts","webpack://dev-royal-society-summer/./src/App.vue?2315","webpack://dev-royal-society-summer/./src/App.vue?d5d2","webpack://dev-royal-society-summer/./src/constants.ts","webpack://dev-royal-society-summer/./src/views/Home/index.vue","webpack://dev-royal-society-summer/./src/components/Loader.vue","webpack://dev-royal-society-summer/./src/components/ProgressRing.vue","webpack://dev-royal-society-summer/./src/components/ProgressRing.vue?81a6","webpack://dev-royal-society-summer/./src/components/ProgressRing.vue?d3f8","webpack://dev-royal-society-summer/./src/components/Loader.vue?c61b","webpack://dev-royal-society-summer/./src/components/Loader.vue?f216","webpack://dev-royal-society-summer/./src/components/Modal/store.ts","webpack://dev-royal-society-summer/./src/views/Home/Home.vue","webpack://dev-royal-society-summer/./src/components/Menu.vue","webpack://dev-royal-society-summer/./src/svgs/introduction.svg","webpack://dev-royal-society-summer/./src/svgs/introduction.svg?d6ba","webpack://dev-royal-society-summer/./src/svgs/upcoming-workshops.svg","webpack://dev-royal-society-summer/./src/svgs/upcoming-workshops.svg?4c6b","webpack://dev-royal-society-summer/./src/components/Button.vue","webpack://dev-royal-society-summer/./src/components/Button.vue?b7cd","webpack://dev-royal-society-summer/./src/components/Button.vue?de27","webpack://dev-royal-society-summer/./src/components/Menu.vue?43ea","webpack://dev-royal-society-summer/./src/components/Menu.vue?2479","webpack://dev-royal-society-summer/./src/components/Navigation/Navigation.vue","webpack://dev-royal-society-summer/./src/svgs/compass.svg","webpack://dev-royal-society-summer/./src/svgs/compass.svg?6604","webpack://dev-royal-society-summer/./src/components/Navigation/Icon.vue","webpack://dev-royal-society-summer/./src/components/Navigation/Icon.vue?3d66","webpack://dev-royal-society-summer/./src/components/Navigation/Icon.vue?09bd","webpack://dev-royal-society-summer/./src/components/Navigation/Navigation.vue?9fab","webpack://dev-royal-society-summer/./src/components/Navigation/Navigation.vue?bdd2","webpack://dev-royal-society-summer/./src/components/Modal/Modal.vue","webpack://dev-royal-society-summer/./src/components/Video.vue","webpack://dev-royal-society-summer/./src/components/Video.vue?037e","webpack://dev-royal-society-summer/./src/components/Video.vue?3703","webpack://dev-royal-society-summer/./src/components/LiveView.vue","webpack://dev-royal-society-summer/./src/svgs/microphone.svg","webpack://dev-royal-society-summer/./src/svgs/microphone.svg?e555","webpack://dev-royal-society-summer/./src/components/LiveView.vue?27dc","webpack://dev-royal-society-summer/./src/components/LiveView.vue?4a3e","webpack://dev-royal-society-summer/./src/components/Modal/Modal.vue?7286","webpack://dev-royal-society-summer/./src/components/Modal/Modal.vue?2c93","webpack://dev-royal-society-summer/./src/components/InfoBox.vue","webpack://dev-royal-society-summer/./src/components/InfoBox.vue?b851","webpack://dev-royal-society-summer/./src/components/InfoBox.vue?f2c6","webpack://dev-royal-society-summer/./src/components/EventFeed.vue","webpack://dev-royal-society-summer/./src/components/EventFeed.vue?430f","webpack://dev-royal-society-summer/./src/components/EventFeed.vue?73f9","webpack://dev-royal-society-summer/./src/components/Hotspots/Hotspots.vue","webpack://dev-royal-society-summer/./src/utils/LottieLoader.ts","webpack://dev-royal-society-summer/./src/components/Hotspots/Hotspot.ts","webpack://dev-royal-society-summer/./src/components/Hotspots/Hotspots.vue?b258","webpack://dev-royal-society-summer/./src/components/Hotspots/Hotspots.vue?acd8","webpack://dev-royal-society-summer/./src/utils/ImageTransition.ts","webpack://dev-royal-society-summer/./src/components/Tiles.ts","webpack://dev-royal-society-summer/./src/vendor/SpriteMixer.js","webpack://dev-royal-society-summer/./src/components/Sprite.ts","webpack://dev-royal-society-summer/./src/components/EntrancePoint.vue","webpack://dev-royal-society-summer/./src/components/EntrancePoint.vue?b99c","webpack://dev-royal-society-summer/./src/components/EntrancePoint.vue?f142","webpack://dev-royal-society-summer/./src/components/ZoneInfo/ZoneInfo.vue","webpack://dev-royal-society-summer/./src/svgs/language_black_24dp.svg","webpack://dev-royal-society-summer/./src/svgs/language_black_24dp.svg?bf23","webpack://dev-royal-society-summer/./src/svgs/close_black_24dp.svg","webpack://dev-royal-society-summer/./src/svgs/close_black_24dp.svg?0b13","webpack://dev-royal-society-summer/./src/components/ZoneInfo/Text.vue","webpack://dev-royal-society-summer/./src/components/ZoneInfo/Text.vue?f0ad","webpack://dev-royal-society-summer/./src/components/ZoneInfo/Text.vue?3a7d","webpack://dev-royal-society-summer/./src/components/ZoneInfo/ZoneInfo.vue?cc46","webpack://dev-royal-society-summer/./src/components/ZoneInfo/ZoneInfo.vue?5743","webpack://dev-royal-society-summer/./src/components/Pointer.vue","webpack://dev-royal-society-summer/./src/svgs/line.svg","webpack://dev-royal-society-summer/./src/svgs/line.svg?033d","webpack://dev-royal-society-summer/./src/components/Pointer.vue?da82","webpack://dev-royal-society-summer/./src/components/Pointer.vue?58a8","webpack://dev-royal-society-summer/./src/components/Back.vue","webpack://dev-royal-society-summer/./src/svgs/back.svg","webpack://dev-royal-society-summer/./src/svgs/back.svg?462d","webpack://dev-royal-society-summer/./src/components/Back.vue?bf3c","webpack://dev-royal-society-summer/./src/components/Back.vue?614e","webpack://dev-royal-society-summer/./src/components/Guide.vue","webpack://dev-royal-society-summer/./src/svgs/guide.svg","webpack://dev-royal-society-summer/./src/svgs/guide.svg?9431","webpack://dev-royal-society-summer/./src/svgs/guide-line1.svg","webpack://dev-royal-society-summer/./src/svgs/guide-line1.svg?2a0f","webpack://dev-royal-society-summer/./src/svgs/guide-line2.svg","webpack://dev-royal-society-summer/./src/svgs/guide-line2.svg?0d13","webpack://dev-royal-society-summer/./src/svgs/guide-line4.svg","webpack://dev-royal-society-summer/./src/svgs/guide-line4.svg?0808","webpack://dev-royal-society-summer/./src/svgs/guide-line5.svg","webpack://dev-royal-society-summer/./src/svgs/guide-line5.svg?d0f3","webpack://dev-royal-society-summer/./src/svgs/guide-line6.svg","webpack://dev-royal-society-summer/./src/svgs/guide-line6.svg?c17a","webpack://dev-royal-society-summer/./src/components/Guide.vue?ed6f","webpack://dev-royal-society-summer/./src/components/Guide.vue?e93b","webpack://dev-royal-society-summer/./src/components/ExtraObject.vue","webpack://dev-royal-society-summer/./src/components/ExtraObject.vue?34e4","webpack://dev-royal-society-summer/./src/components/ExtraObject.vue?4bff","webpack://dev-royal-society-summer/./src/views/Home/Home.vue?edb7","webpack://dev-royal-society-summer/./src/views/Home/Home.vue?50d3","webpack://dev-royal-society-summer/./src/views/Home/index.vue?ad4f","webpack://dev-royal-society-summer/./src/views/Home/index.vue?7583","webpack://dev-royal-society-summer/./src/router/index.ts","webpack://dev-royal-society-summer/./src/store/index.ts","webpack://dev-royal-society-summer/./src/main.ts","webpack://dev-royal-society-summer/webpack/bootstrap","webpack://dev-royal-society-summer/webpack/runtime/chunk loaded","webpack://dev-royal-society-summer/webpack/runtime/compat get default export","webpack://dev-royal-society-summer/webpack/runtime/define property getters","webpack://dev-royal-society-summer/webpack/runtime/global","webpack://dev-royal-society-summer/webpack/runtime/hasOwnProperty shorthand","webpack://dev-royal-society-summer/webpack/runtime/make namespace object","webpack://dev-royal-society-summer/webpack/runtime/jsonp chunk loading","webpack://dev-royal-society-summer/webpack/startup"],"names":["userAgent","window","navigator","toLowerCase","devicePixelRatio","iPadOS13Up","platform","maxTouchPoints","DeviceDetector","find","needle","indexOf","this","windows","ipod","ipad","dingding","wechat","wechatMiniApp","iphone","iphoneX","screen","width","height","iPhoneXR","iPhoneXSMax","ios","android","androidPhone","mobile","instantce","app","alias","deviceDetector","config","globalProperties","hasWarning","onWarningClose","Component","enter","leave","class","close","name","props","onClose","Function","methods","localStorage","setItem","$emit","trackRouteUpdate","value","dataLayer","push","event","SS2021URLPath","location","pathname","components","MobileWarning","isDismissed","getItem","isPortrait","$device","innerHeight","innerWidth","element","done","gsap","duration","opacity","onComplete","scaleX","scaleY","watch","to","from","path","computed","render","BASE_URL","error","isTextureReady","default","fallback","ref","radius","stroke","progress","loadProgress","texts","length","currentText","viewBox","stroke-dasharray","circumference","style","strokeDashoffset","stroke-width","fill","r","normalizedRadius","cx","cy","required","type","Number","Math","PI","ProgressRing","loaderRef","textRef","clipRef","circleRef","interval","loader","text","clip","circle","baseVal","strokeDasharray","setInterval","switchText","clearInterval","scenes","forEach","scene","hotspots","map","hotspot","getRandomText","$store","state","rndInt","floor","random","percent","clipPath","scale","delay","dispatch","initState","isVisible","title","subtitle","description","debug","newValue","console","log","href","isGuideActive","resize","orbit-ctrl","position","fov","near","far","isEntrance","isTileAnimating","renderer","onEntranceClick","onPointerEnterEntrance","visible","currentScene","sprites","item","key","src","image","tile","rotation","extra","data","infoBoxActive","isInfoBoxActive","onPointerClick","onPointerOver","onPointerEnter","onPointerLeave","onMenuClick","onBackClick","camera","onZoneClick","onInfoBoxClose","show","id","infoId","closeOnClickMask","closeOnEsc","isFeedOpened","hide","onMenuClose","active","pointerName","onGuideClick","is-active","index","icon","handleClick","tooltip","tooltipDirection","xml:space","transform","d","script","x1","y1","x2","y2","click","onClick","Object","String","videoIframeId","noHead","SVGIntroduction","SVGEvent","Button","document","body","cursor","data-morph-active","isOpen","toggle","theme","$event","lottie","lottieSize","container","anim","overflow","margin","init","destroy","loadJsonData","loop","autoplay","animationData","then","response","Icon","SVGCompass","controls","isActive","navigationRef","shapeRef","listRef","maskRef","paths","reset","s","Snap","querySelector","select","addEventListener","onMaskClick","attr","getAttribute","getters","stop","animate","mina","easein","elastic","Promise","resolve","setTimeout","_event","tween","ease","className","tabindex","onEsc","mask","onClickMask","customMaskStyles","beforeEnter","dialogStyle","closeButton","videoSrc","frameborder","video","playButton","control","isHovered","isPlaying","play","onMouseEnter","onMouseLeave","removeEventListener","pause","y","round","currentTime","live","current","link","target","points","SVGMicrophone","Video","LiveView","measure","Boolean","customStyles","store","animationDuration","isShow","$nextTick","$el","focus","w","h","styleDuration","info","youtubeId","styleBackground","materialIcon","styleIcon","iconSrc","alt","information","backgroundColor","color","xmlns","preserveAspectRatio","data-morph-open","openMorphPath","initialMorphPath","hideFeed","events","upcoming","filter","onClickTab","options","article","startDateFormat","endTimeFormat","topRef","contentHeight","clientWidth","allEvents","x","inner","morph","morphAnim","dialog","$refs","isClosing","easeinout","e","slug","LottieLoader","quality","url","onLoad","onProgress","onError","texture","manager","setPath","setWithCredentials","withCredentials","load","JSON","parse","createElement","appendChild","animation","needsUpdate","display","undefined","extends","flatShading","mesh","geometry","material","createGeometry","addGeometryWatchers","dispose","stopAnimation","playAnimation","createLottie","keys","prop","refreshGeometry","oldGeo","transparent","alphaTest","depthTest","precision","renderOrder","initObject3D","set","lookAt","z","Hotspot","hotspotsRef","addIntersects","removeIntersects","children","pointer","$pointer","intersectObjects","o3d","DISP_PATH","fragment","vertex","ImageTransition","currentTexture","time","isRunning","extensions","derivatives","side","uniforms","border","intensity","transition","swipe","texture1","texture2","displacement","resolution","vertexShader","fragmentShader","textures","targetIndex","size","three","cameraCtrl","enabled","nextTexture","ENTRANCE_PATH","entrance","center","images","loadTexture","img","count","unshift","entries","targetProgress","isScaling","image1","image2","planes","imageTransition","domElement","onKeyup","currentSceneIndex","initScene","keyup","onResize","sceneIndex","onBeforeRender","getMesh","add","setMap","res","nav","keyCode","navPrevious","navNext","setTargetProgress","isInteger","ceil","isDone","progress1","pdiff","p0","p1","i","j","setImagesProgress","uStrength","SpriteMixer","actionSprites","listeners","api","update","ActionSprite","Action","eventName","callback","delta","actionSprite","paused","updateAction","currentAction","offsetTexture","offset","getColumn","tilesHoriz","tilesVert","getRow","action","milliSec","currentDisplayTime","tileDisplayDuration","callFinishedListeners","listener","currentTile","indexEnd","indexStart","mustLoop","clampWhenFinished","hideWhenFinished","playOnce","resume","playLoop","pauseNextEnd","setFrame","frameID","wrapS","wrapT","THREE","repeat","isIndexedSprite","tiles","loadTextures","sprite","spriteMixer","clock","action1","setAnimationLoop","getDelta","handlePointOver","onDoorClick","onPointOver","doorsRef","doors","onButtonClick","isScenesVisible","tag","css","itemIndex","smallSrc","data-index","onSceneClick","isAnimationDone","letters","letter","split","cachedText","querySelectorAll","reverse","stagger","el","dataset","total","SVGGlobe","SVGClose","Text","nameCached","SVGLine","data-name","SVGBack","$baseUrl","SVGGuide","SVGLine1","SVGLine2","SVGLine4","SVGLine5","SVGLine6","widthSegments","heightSegments","meshRef","yoyo","Menu","Navigation","Hotspots","Modal","EventFeed","Tiles","Sprite","InfoBox","ZoneInfo","Pointer","BackButton","Guide","EntrancePoint","ExtraObject","route","canvasRef","tilesRef","rendererRef","spritesRef","entranceRef","threeRef","controlsRef","pointerRef","params","questionSlug","findIndex","isEntranceDefault","navigation","canvas","isMouseDown","isTouchMoving","moveCache","xMove","onTouchDown","onTouchMove","onTouchEnd","onMouseDown","onMouseUp","$route","userData","over","mouse","targetTouches","pageX","pageY","intersect","onMouseMove","offsetX","abs","component","object","vector","updateWorldMatrix","getWorldPosition","project","meshes","promises","all","Home","Loader","introStatus","intro","routes","router","history","SET_HOTSPOT_INFORMATION","SET_EVENTS","SET_SCENES","SET_CURRENT_SCENE_INDEX","SET_READY_STATE","SET_TEXTURE_STATE","SET_LOAD_PROGRESS","SET_LIVE","SET_LIVE_STATE","getLiveState","date","Date","startDate","endDate","isBetween","createEventsData","ondemand","isBefore","vectorise","hotspotInformation","readyState","mutations","modifiedScenes","eventsWithDate","format","endDateFormat","condition","actions","commit","f","modules","App","use","mount","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","exports","module","__webpack_modules__","call","m","deferred","O","result","chunkIds","fn","priority","notFulfilled","Infinity","fulfilled","every","splice","n","getter","__esModule","a","definition","o","defineProperty","enumerable","get","g","globalThis","obj","prototype","hasOwnProperty","Symbol","toStringTag","installedChunks","826","chunkId","webpackJsonpCallback","parentChunkLoadingFunction","moreModules","runtime","chunkLoadingGlobal","self","bind","__webpack_exports__"],"mappings":"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","file":"js/index.786630de.js","sourcesContent":["import { App } from 'vue';\n\ninterface IDeviceDetector {\n ios: boolean;\n iphone: boolean;\n iphoneX: boolean;\n iPhoneXR: boolean;\n iPhoneXSMax: boolean;\n ipod: boolean;\n ipad: boolean;\n android: boolean;\n androidPhone: boolean;\n windows: boolean;\n mobile: boolean;\n dingding: boolean;\n wechat: boolean;\n wechatMiniApp: boolean;\n}\n\n// The client user agent string.\n// Lowercase, so we can use the more efficient indexOf(), instead of Regex\nconst userAgent = window.navigator.userAgent.toLowerCase();\nconst devicePixelRatio = window.devicePixelRatio || 1;\nconst iPadOS13Up = window.navigator.platform === 'MacIntel'\n && window.navigator.maxTouchPoints > 1;\nclass DeviceDetector {\n windows: boolean;\n\n ipod: boolean;\n\n ipad: boolean;\n\n iphone: boolean;\n\n iphoneX: boolean;\n\n iPhoneXR: boolean;\n\n iPhoneXSMax: boolean;\n\n ios: boolean;\n\n android: boolean;\n\n androidPhone: boolean;\n\n mobile: boolean;\n\n dingding: boolean;\n\n wechat: boolean;\n\n wechatMiniApp: boolean;\n\n constructor() {\n this.windows = this.find('windows');\n this.ipod = this.find('ipod');\n this.ipad = this.find('ipad') || iPadOS13Up;\n this.dingding = this.find('dingtalk');\n this.wechat = this.find('micromessenger');\n this.wechatMiniApp = this.find('miniprogram');\n this.iphone = !this.windows && this.find('iphone');\n this.iphoneX = this.iphone\n && devicePixelRatio === 3\n && window.screen.width === 375\n && window.screen.height === 812;\n\n this.iPhoneXR = this.iphone\n && devicePixelRatio === 2\n && window.screen.width === 414\n && window.screen.height === 896;\n\n this.iPhoneXSMax = this.iphone\n && devicePixelRatio === 3\n && window.screen.width === 414\n && window.screen.height === 896;\n\n this.ios = this.iphone || this.ipod || this.ipad;\n this.android = !this.windows && this.find('android');\n this.androidPhone = this.android && this.find('mobile');\n this.mobile = this.android || this.ios;\n }\n\n private find = (needle: string) => userAgent.indexOf(needle) !== -1\n}\n\ninterface IDeviceDetector {\n ios: boolean;\n iphone: boolean;\n iphoneX: boolean;\n iPhoneXR: boolean;\n iPhoneXSMax: boolean;\n ipod: boolean;\n ipad: boolean;\n android: boolean;\n androidPhone: boolean;\n windows: boolean;\n mobile: boolean;\n dingding: boolean;\n wechat: boolean;\n wechatMiniApp: boolean;\n}\nexport type deviceDetectorPlugin = {\n install(app: App, options?: any): void;\n};\nconst instantce: deviceDetectorPlugin = {\n install(app) {\n const alias = '$device';\n const deviceDetector = new DeviceDetector() as IDeviceDetector;\n // eslint-disable-next-line no-param-reassign\n app.config.globalProperties[alias] = deviceDetector;\n // Object.defineProperty(Vue, `${alias}`, {\n // get() {\n // return deviceDetector;\n // }\n // });\n }\n};\n\nexport default instantce;\nexport { IDeviceDetector };\n","\n\n\n\n\n","\n\n\n\n\n","\nimport { defineComponent, PropType } from 'vue';\n\nexport default defineComponent({\n name: 'MobileWarning',\n props: {\n onClose: Function as PropType<(payload: MouseEvent) => void>,\n },\n methods: {\n close() {\n localStorage.setItem('warningDismissed', 'true');\n this.$emit('close');\n },\n // onClick(index: number) {},\n }\n});\n","import { render } from \"./MobileWarning.vue?vue&type=template&id=7e34eaca&scoped=true\"\nimport script from \"./MobileWarning.vue?vue&type=script&lang=ts\"\nexport * from \"./MobileWarning.vue?vue&type=script&lang=ts\"\n\nimport \"./MobileWarning.vue?vue&type=style&index=0&id=7e34eaca&scoped=true&lang=postcss\"\nscript.render = render\nscript.__scopeId = \"data-v-7e34eaca\"\n\nexport default script","const trackingID = process.env.TRACKING_ID;\n\n/**\n * Initialize Google Analytics if analytics id exists and environment is\n * production\n */\nexport function initGA(): void {\n if (trackingID && window.gtag) {\n window.gtag('config', trackingID, {\n page_path: window.location.pathname,\n });\n }\n}\n\n/**\n * Trigger analytics event within google analytics through react-ga\n * @param {Object} eventData - Data associated with the event.\n */\nexport function triggerAnalyticsEvent(_eventData: any): void {\n // console.log('ga event');\n // // if (trackingID && process.env.NODE_ENV === 'production') {\n // if (trackingID) {\n // ReactGA.event(eventData);\n // } else {\n // console.debug('Analytics Event:', eventData); // eslint-disable-line no-console\n // }\n}\n\n/**\n * Set user auth data within Google Analytics\n * @param {Object} auth - Authentication data\n * @param {String} auth.uid - User's id\n */\nexport function setGAUser(auth: { uid: number, role?: string }): void {\n if (auth && window.gtag) {\n if (auth.uid || auth.role) {\n window.gtag('set', 'user_properties', {\n user_id: auth.uid,\n // delegate_id: auth.uid,\n Role: auth.role,\n });\n }\n }\n}\n\n/**\n * Track route update within Google Analytics\n */\nexport function trackRouteUpdate(value?: string): void {\n if (window.dataLayer) {\n window.dataLayer.push({\n event: 'SS2021Click',\n SS2021URLPath: value || window.location.pathname,\n });\n // console.log('path', window.location.pathname);\n // window.gtag('event', 'Summer Science 2021 microsite', {\n // category: 'link click',\n // label: window.location.pathname,\n // });\n }\n}\n\nexport default { initGA, triggerAnalyticsEvent, trackRouteUpdate };\n","\nimport { defineComponent } from 'vue';\nimport gsap from 'gsap';\nimport MobileWarning from '@/components/MobileWarning.vue';\nimport { trackRouteUpdate } from '@/utils/ga';\n\nexport default defineComponent({\n components: { MobileWarning },\n data() {\n const isDismissed = localStorage.getItem('warningDismissed') === 'true';\n const isPortrait = this.$device.mobile && window.innerHeight > window.innerWidth;\n return { hasWarning: isPortrait && !isDismissed };\n },\n methods: {\n onWarningClose() {\n this.hasWarning = false;\n },\n\n leave(element: Element, done: () => void) {\n gsap.to(element, {\n duration: 0.6,\n opacity: 0,\n onComplete: done,\n });\n },\n beforeEnter(element: Element) {\n gsap.set(element, {\n scaleX: 0.8,\n scaleY: 1.2\n });\n },\n enter(element: Element, done: () => void) {\n gsap.to(element, {\n duration: 0.4,\n opacity: 1,\n onComplete: done,\n });\n },\n },\n watch: {\n $route (to, from) {\n if (to.path !== from.path) {\n trackRouteUpdate();\n }\n },\n },\n computed: {\n isPortrait() {\n return this.$device.mobile && window.innerHeight > window.innerWidth;\n }\n }\n});\n","import { render } from \"./App.vue?vue&type=template&id=4500b8ae\"\nimport script from \"./App.vue?vue&type=script&lang=ts\"\nexport * from \"./App.vue?vue&type=script&lang=ts\"\n\nimport \"./App.vue?vue&type=style&index=0&id=4500b8ae&lang=postcss\"\nscript.render = render\n\nexport default script","const BASE_URL = '/summer-science/summer-science-2021';\n\nexport { BASE_URL };\n","\n\n\n\n\n","\n\n\n\n\n","\n\n\n\n\n","\nimport { defineComponent } from 'vue';\n\nexport default defineComponent({\n name: 'progressRing',\n props: {\n radius: { required: true, type: Number },\n progress: { required: true, type: Number },\n stroke: { required: true, type: Number }\n },\n\n data() {\n const normalizedRadius = this.radius - this.stroke * 2;\n const circumference = normalizedRadius * 2 * Math.PI;\n\n return {\n normalizedRadius,\n circumference\n };\n },\n\n computed: {\n strokeDashoffset(): number {\n return this.circumference - ((this.progress / 100) * this.circumference);\n }\n },\n});\n","import { render } from \"./ProgressRing.vue?vue&type=template&id=f088f32e\"\nimport script from \"./ProgressRing.vue?vue&type=script&lang=ts\"\nexport * from \"./ProgressRing.vue?vue&type=script&lang=ts\"\n\nimport \"./ProgressRing.vue?vue&type=style&index=0&id=f088f32e&lang=postcss\"\nscript.render = render\n\nexport default script","\nimport { defineComponent, ref } from 'vue';\nimport gsap from 'gsap';\nimport { Scene } from '@/types';\nimport ProgressRing from './ProgressRing.vue';\n\nexport default defineComponent({\n name: 'Loader',\n\n components: { ProgressRing },\n\n setup() {\n const loaderRef = ref();\n const textRef = ref();\n const clipRef = ref();\n const circleRef = ref();\n const interval = ref(null);\n\n return {\n loader: loaderRef,\n text: textRef,\n clip: clipRef,\n circle: circleRef,\n interval,\n };\n },\n\n data() {\n return {\n texts: [] as string[],\n currentText: '',\n loadProgress: 0,\n };\n },\n\n mounted() {\n if (this.circle) {\n const radius = this.circle.r.baseVal.value;\n const circumference = radius * 2 * Math.PI;\n this.circle.style.strokeDasharray = `${circumference} ${circumference}`;\n this.circle.style.strokeDashoffset = `${circumference}`;\n }\n\n this.interval = setInterval(this.switchText, 5000);\n },\n\n unmounted() {\n if (this.interval) {\n clearInterval(this.interval);\n }\n },\n\n watch: {\n scenes() {\n if (this.scenes && this.texts.length === 0) {\n this.scenes.forEach(scene => {\n this.texts.push(...scene.hotspots.map(hotspot => hotspot.name));\n });\n this.getRandomText();\n }\n },\n currentProgress() {\n this.loadProgress = this.$store.state.loadProgress;\n this.progress(this.$store.state.loadProgress * 100);\n }\n },\n\n methods: {\n async switchText() {\n if (!this.text) return;\n await gsap.to(this.text, {\n duration: 0.6,\n opacity: 0,\n });\n\n this.getRandomText();\n\n gsap.to(this.text, {\n duration: 0.6,\n opacity: 1,\n });\n },\n\n getRandomText() {\n const rndInt = Math.floor(Math.random() * this.texts.length);\n this.currentText = this.texts[rndInt];\n },\n\n async progress(percent: number) {\n if (!this.clip || !this.loader) return;\n await gsap.to(this.clip, {\n duration: 0.3,\n clipPath: `inset(0 ${101 - percent}% 0 0)`,\n });\n\n if (percent >= 100) {\n await gsap.to(this.loader, {\n duration: 0.3,\n scale: 1.2,\n opacity: 0,\n delay: 1.2,\n // ease: Back.easeIn.config(1.7),\n });\n\n this.$store.dispatch('setTextureState', true);\n }\n }\n },\n\n computed: {\n scenes(): Scene[] {\n return this.$store.state.scenes;\n },\n currentProgress(): number {\n return this.$store.state.loadProgress;\n }\n },\n});\n","import { render } from \"./Loader.vue?vue&type=template&id=015cf008&scoped=true\"\nimport script from \"./Loader.vue?vue&type=script&lang=ts\"\nexport * from \"./Loader.vue?vue&type=script&lang=ts\"\n\nimport \"./Loader.vue?vue&type=style&index=0&id=015cf008&scoped=true&lang=postcss\"\nscript.render = render\nscript.__scopeId = \"data-v-015cf008\"\n\nexport default script","import { reactive } from 'vue';\n\ntype Value = {\n title?: string;\n subtitle?:string;\n description?: string;\n width?: number;\n height?: number;\n type?: string;\n videoSrc?: string;\n videoIframeId?: string;\n noHead?: boolean;\n}\n\ntype State = Value & { isVisible: boolean };\n\nconst initState = {\n isVisible: false,\n title: '',\n subtitle: '',\n description: '',\n type: '',\n width: 400,\n height: 240,\n};\n\nexport default {\n debug: true,\n\n state: reactive({\n value: initState as State,\n }),\n\n show(newValue?: Value): void {\n if (this.debug) {\n console.log('setMessageAction triggered with', newValue);\n }\n\n this.state.value = { ...newValue, isVisible: true };\n },\n\n hide(): void {\n if (this.debug) {\n console.log('clearMessageAction triggered');\n }\n\n this.state.value = initState;\n },\n\n clear(): void {\n this.state.value = initState;\n }\n};\n","\n\n\n\n\n\n\n","\n\n\n\n\n","","import { render } from \"./introduction.svg?vue&type=template&id=06625e1a\"\nconst script = {}\nscript.render = render\n\nexport default script","","import { render } from \"./upcoming-workshops.svg?vue&type=template&id=9d6176aa\"\nconst script = {}\nscript.render = render\n\nexport default script","\n\n\n\n\n","\nimport { defineComponent, PropType } from 'vue';\nimport { trackRouteUpdate } from '@/utils/ga';\n\nexport default defineComponent({\n name: 'Button',\n props: {\n onClick: Function as PropType<((payload: MouseEvent) => void) | undefined>,\n style: Object,\n tooltip: String,\n tooltipDirection: String as () => 'left' | 'right' | undefined,\n },\n methods: {\n click() {\n trackRouteUpdate(this.tooltip);\n this.$emit('click');\n },\n },\n});\n","import { render } from \"./Button.vue?vue&type=template&id=cf724a14&scoped=true\"\nimport script from \"./Button.vue?vue&type=script&lang=ts\"\nexport * from \"./Button.vue?vue&type=script&lang=ts\"\n\nimport \"./Button.vue?vue&type=style&index=0&id=cf724a14&scoped=true&lang=postcss\"\nscript.render = render\nscript.__scopeId = \"data-v-cf724a14\"\n\nexport default script","\nimport { defineComponent } from 'vue';\nimport SVGIntroduction from '@/svgs/introduction.svg';\nimport SVGEvent from '@/svgs/upcoming-workshops.svg';\n// import LiveIcon from '@/components/LiveIcon.vue';\nimport modalStore from '@/components/Modal/store';\nimport Button from './Button.vue';\n\nconst data = [\n {\n icon: 'SVGIntroduction',\n title: 'Introduction',\n tooltip: 'Introduction video',\n videoIframeId: 'QK82KXtHAjI',\n noHead: true,\n },\n // {\n // icon: 'LiveIcon',\n // title: 'Live',\n // tooltip: 'View live session',\n // noHead: true,\n // type: 'live',\n // },\n {\n icon: 'SVGEvent',\n title: 'Event',\n tooltip: 'Talks and activities',\n type: 'feed',\n },\n];\n\nexport default defineComponent({\n name: 'Menu',\n components: {\n SVGIntroduction,\n SVGEvent,\n // LiveIcon,\n Button,\n },\n props: {\n onClick: Function,\n },\n data() {\n return { data };\n },\n methods: {\n handleClick(index: number) {\n const item = this.data[index];\n if (!item) return;\n document.body.style.cursor = '';\n\n if (item.type === 'feed' && this.onClick) {\n this.onClick();\n return;\n }\n\n modalStore.show({\n width: item.type === 'live' ? 560 : window.innerWidth * 0.925,\n height: item.type === 'live' ? 540 : window.innerHeight * 0.925,\n ...item,\n });\n },\n }\n});\n","import { render } from \"./Menu.vue?vue&type=template&id=55bc068c&scoped=true\"\nimport script from \"./Menu.vue?vue&type=script&lang=ts\"\nexport * from \"./Menu.vue?vue&type=script&lang=ts\"\n\nimport \"./Menu.vue?vue&type=style&index=0&id=55bc068c&scoped=true&lang=postcss\"\nscript.render = render\nscript.__scopeId = \"data-v-55bc068c\"\n\nexport default script","\n\n\n\n\n\n\n","","import { render } from \"./compass.svg?vue&type=template&id=7cc9c0a6\"\nconst script = {}\nscript.render = render\n\nexport default script","\n\n\n\n\n","\nimport { defineComponent, ref } from 'vue';\nimport axios from 'axios';\nimport lottie, { AnimationItem } from 'lottie-web';\n\nexport default defineComponent({\n name: 'Icon',\n\n props: {\n src: { type: String, required: true },\n width: { type: Number, required: false },\n height: { type: Number, required: false },\n },\n\n setup() {\n const container = ref();\n\n return {\n container,\n anim: null as AnimationItem | null,\n };\n },\n\n data() {\n console.log('width', this.width);\n const style = {\n width: this.width ? `${this.width}px` : '100%',\n height: this.height ? `${this.height}px` : '100%',\n overflow: 'hidden',\n margin: '0 auto'\n };\n\n if (this.$device.mobile) {\n if (this.width) {\n style.width = `${this.width * 0.8}px`;\n }\n if (this.height) {\n style.height = `${this.height * 0.8}px`;\n }\n }\n\n return { style };\n },\n\n mounted() {\n this.init();\n },\n\n unmounted() {\n if (this.anim) {\n this.anim.destroy();\n }\n },\n\n watch: {\n src() {\n this.init();\n }\n },\n\n methods: {\n async init() {\n const data = await this.loadJsonData(this.src);\n\n if (this.anim) {\n this.anim.destroy();\n }\n\n this.anim = lottie.loadAnimation({\n container: this.container as Element,\n renderer: 'svg',\n loop: true,\n autoplay: true,\n animationData: data,\n // rendererSettings: this.rendererSettings\n });\n\n this.$emit('AnimControl', this.anim);\n },\n\n loadJsonData(path: string) {\n return axios.get(path).then(response => response.data);\n },\n }\n});\n","import { render } from \"./Icon.vue?vue&type=template&id=6023a188&scoped=true\"\nimport script from \"./Icon.vue?vue&type=script&lang=ts\"\nexport * from \"./Icon.vue?vue&type=script&lang=ts\"\n\nimport \"./Icon.vue?vue&type=style&index=0&id=6023a188&lang=postcss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-6023a188\"\n\nexport default script","\nimport { defineComponent, ref } from 'vue';\nimport gsap from 'gsap';\nimport { Scene, Camera } from 'three';\nimport SVGCompass from '@/svgs/compass.svg';\nimport { Hotspot, Scene as SceneType } from '@/types';\nimport Icon from './Icon.vue';\n\nexport default defineComponent({\n name: 'Navigation',\n components: {\n Icon,\n SVGCompass,\n },\n\n props: {\n camera: Object as () => Camera,\n scene: Object as () => Scene,\n controls: Object as any,\n },\n\n data() {\n return {\n isOpen: false,\n isActive: false,\n };\n },\n\n setup() {\n const navigationRef = ref();\n const shapeRef = ref();\n const listRef = ref();\n const maskRef = ref();\n const path = ref();\n\n return {\n navigationRef,\n shapeRef,\n listRef,\n maskRef,\n path,\n paths: { active: '', reset: '' },\n };\n },\n\n mounted() {\n if (!this.shapeRef) return;\n // eslint-disable-next-line no-undef\n const s = Snap(this.shapeRef.querySelector('svg'));\n this.path = s.select('.js-animate-path');\n this.maskRef?.addEventListener('click', this.onMaskClick);\n\n this.paths = {\n reset: this.path.attr('d'),\n active: this.shapeRef.getAttribute('data-morph-active') as string,\n };\n },\n\n computed: {\n currentScene(): SceneType {\n return this.$store.getters.currentScene;\n }\n },\n\n methods: {\n toggle() {\n if (!this.navigationRef || !this.path) return;\n this.isOpen = !this.isOpen;\n // eslint-disable-next-line no-undef\n this.path.stop().animate({ path: this.paths.active }, 150, mina.easein, () => {\n // eslint-disable-next-line no-undef\n this.path.stop().animate({ path: this.paths.reset }, 800, mina.elastic);\n });\n },\n\n close() {\n return new Promise(resolve => {\n this.isOpen = false;\n setTimeout(resolve, 100);\n });\n },\n\n onMaskClick() {\n this.isOpen = false;\n },\n\n onClick(_event: MouseEvent, hotspot: Hotspot) {\n this.toggle();\n\n if (this.camera) {\n gsap.to(this.camera.position, {\n ...hotspot.tween,\n duration: 2,\n ease: 'circ.in',\n });\n }\n }\n },\n});\n","import { render } from \"./Navigation.vue?vue&type=template&id=240ef5b4&scoped=true\"\nimport script from \"./Navigation.vue?vue&type=script&lang=ts\"\nexport * from \"./Navigation.vue?vue&type=script&lang=ts\"\n\nimport \"./Navigation.vue?vue&type=style&index=0&id=240ef5b4&lang=postcss\"\nimport \"./Navigation.vue?vue&type=style&index=1&id=240ef5b4&scoped=true&lang=postcss\"\nscript.render = render\nscript.__scopeId = \"data-v-240ef5b4\"\n\nexport default script","\n\n\n\n\n","\n\n\n\n\n","\nimport { defineComponent, ref } from 'vue';\nimport gsap from 'gsap';\n\nexport default defineComponent({\n name: 'Video',\n props: {\n src: String,\n style: Object,\n },\n\n setup() {\n const container = ref();\n const video = ref();\n const playButton = ref();\n const control = ref();\n const progress = ref();\n\n return {\n container,\n video,\n playButton,\n control,\n progress,\n };\n },\n\n data() {\n return {\n isHovered: false,\n isPlaying: false,\n };\n },\n\n mounted() {\n if (this.video) {\n this.video.play();\n this.isPlaying = true;\n }\n\n if (this.container) {\n this.container.addEventListener('mouseenter', this.onMouseEnter);\n this.container.addEventListener('mouseleave', this.onMouseLeave);\n }\n },\n\n unmounted() {\n if (this.container) {\n this.container.removeEventListener('mouseenter', this.onMouseEnter);\n this.container.removeEventListener('mouseleave', this.onMouseLeave);\n }\n },\n\n methods: {\n onPlayButtonClick() {\n if (!this.playButton || !this.video) return;\n\n if (this.isPlaying) {\n this.video.pause();\n this.isPlaying = false;\n } else {\n this.video.play();\n this.isPlaying = true;\n }\n },\n onMouseEnter() {\n if (this.control) {\n gsap.to(this.control, { duration: 0.3, y: 0, opacity: 1 });\n }\n },\n onMouseLeave() {\n if (this.control) {\n gsap.to(this.control, { duration: 0.3, y: 20, opacity: 0 });\n }\n },\n onProgress() {\n if (!this.progress || !this.video) return;\n this.progress.value = Math.round((\n this.video.currentTime / this.video.duration || 0\n ) * 100);\n }\n },\n});\n","import { render } from \"./Video.vue?vue&type=template&id=5bf99554&scoped=true\"\nimport script from \"./Video.vue?vue&type=script&lang=ts\"\nexport * from \"./Video.vue?vue&type=script&lang=ts\"\n\nimport \"./Video.vue?vue&type=style&index=0&id=5bf99554&scoped=true&lang=postcss\"\nscript.render = render\nscript.__scopeId = \"data-v-5bf99554\"\n\nexport default script","\n\n\n\n\n\n\n","","import { render } from \"./microphone.svg?vue&type=template&id=aca193ce\"\nconst script = {}\nscript.render = render\n\nexport default script","\nimport { defineComponent } from 'vue';\nimport SVGMicrophone from '@/svgs/microphone.svg';\n\nexport default defineComponent({\n components: { SVGMicrophone },\n name: 'LiveView',\n});\n","import { render } from \"./LiveView.vue?vue&type=template&id=b69cf094&scoped=true\"\nimport script from \"./LiveView.vue?vue&type=script&lang=ts\"\nexport * from \"./LiveView.vue?vue&type=script&lang=ts\"\n\nimport \"./LiveView.vue?vue&type=style&index=0&id=b69cf094&lang=postcss\"\nimport \"./LiveView.vue?vue&type=style&index=1&id=b69cf094&lang=postcss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-b69cf094\"\n\nexport default script","\nimport { defineComponent } from 'vue';\nimport gsap, { Back } from 'gsap';\nimport store from './store';\nimport Video from '../Video.vue';\nimport LiveView from '../LiveView.vue';\n\ninterface DialogStyle {\n width: string;\n height: string;\n animationDuration: string;\n}\n\nexport default defineComponent({\n name: 'modal',\n components: { Video, LiveView },\n\n props: {\n duration: { type: Number, default: 300 },\n measure: { type: String, default: 'px' },\n mask: { type: Boolean, default: true },\n closeButton: { type: Boolean, default: true },\n closeOnEsc: { type: Boolean, default: false },\n closeOnClickMask: { type: Boolean, default: true },\n className: { type: String, default: '' },\n customStyles: { type: Object, default: () => ({}) },\n customMaskStyles: { type: Object, default: () => ({}) },\n },\n\n data() {\n return {\n state: store.state,\n width: store.state.value.width || 400,\n height: store.state.value.height || 240,\n };\n },\n\n created() {\n window.addEventListener('resize', this.resize);\n },\n\n unmounted() {\n window.removeEventListener('resize', this.resize);\n },\n\n computed: {\n show(): boolean {\n return this.state.value.isVisible;\n },\n style(): { animationDuration: string } {\n return {\n animationDuration: `${this.duration}ms`\n };\n },\n dialogStyle(): DialogStyle {\n return {\n width: this.state.value.width + this.measure,\n height: this.state.value.height + this.measure,\n animationDuration: `${this.duration}ms`,\n ...this.customStyles\n };\n }\n },\n\n watch: {\n show(isShow) {\n if (isShow) {\n document.body.style.cursor = '';\n\n this.$nextTick(() => {\n this.$el.focus();\n });\n }\n }\n },\n\n methods: {\n async leave(element: Element, done: () => void) {\n await gsap.to(element, {\n duration: 0.3,\n opacity: 0,\n y: 100,\n scaleX: 0.9,\n scaleY: 1.1,\n ease: Back.easeOut.config(1.7),\n });\n\n store.clear();\n done();\n },\n\n beforeEnter(element: Element) {\n gsap.set(element, {\n y: 100,\n scaleX: 0.9,\n scaleY: 1.1,\n });\n },\n enter(element: Element, done: () => void) {\n gsap.to(element, {\n duration: 0.4,\n opacity: 1,\n scale: 1.0,\n y: 0,\n onComplete: done,\n ease: Back.easeOut.config(3),\n });\n },\n\n hide() {\n store.hide();\n },\n\n resize() {\n const w = window.innerWidth;\n const h = window.innerHeight;\n\n if (w < ((this.state.value.width || 400))) {\n this.state.value.width = w * 0.925;\n } else if ((store.state.value.width || 400) < w * 0.925) {\n this.state.value.width = store.state.value.width;\n }\n\n if (h < ((this.state.value.height || 240))) {\n this.state.value.height = h * 0.925;\n } else if ((store.state.value.height || 240) < w * 0.925) {\n this.state.value.height = store.state.value.height;\n }\n },\n onEsc() {\n if (this.show && this.closeOnEsc) {\n // this.$emit('hide');\n this.hide();\n }\n },\n onClickMask() {\n this.$emit('clickMask');\n if (this.closeOnClickMask) {\n // this.$emit('hide');\n this.hide();\n }\n }\n }\n});\n","import { render } from \"./Modal.vue?vue&type=template&id=52819b28&scoped=true\"\nimport script from \"./Modal.vue?vue&type=script&lang=ts\"\nexport * from \"./Modal.vue?vue&type=script&lang=ts\"\n\nimport \"./Modal.vue?vue&type=style&index=0&id=52819b28&lang=postcss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-52819b28\"\n\nexport default script","\n\n\n\n\n","\nimport { defineComponent } from 'vue';\nimport gsap, { Back } from 'gsap';\nimport { HotspotInformation, Scene } from '@/types';\nimport Video from './Video.vue';\n\nexport default defineComponent({\n name: 'infobox',\n components: { Video },\n\n props: {\n id: { type: Number, required: true },\n show: { type: Boolean, required: true },\n width: { type: Number, default: window.innerWidth * 0.925 },\n height: { type: Number, default: window.innerHeight * 0.925 },\n duration: { type: Number, default: 300 },\n measure: { type: String, default: 'px' },\n mask: { type: Boolean, default: true },\n // hide: { type: Function as PropType<(payload: MouseEvent) => void>, required: true },\n closeButton: { type: Boolean, default: true },\n closeOnEsc: { type: Boolean, default: false },\n closeOnClickMask: { type: Boolean, default: true },\n className: { type: String, default: '' },\n customStyles: { type: Object, default: () => ({}) },\n customMaskStyles: { type: Object, default: () => ({}) },\n },\n\n created() {\n window.addEventListener('resize', this.resize);\n },\n\n unmounted() {\n window.removeEventListener('resize', this.resize);\n },\n\n computed: {\n info(): HotspotInformation {\n return this.$store.getters.information(this.id);\n },\n\n styleDuration(): { animationDuration: string } {\n return {\n animationDuration: `${this.duration}ms`\n };\n },\n\n styleBackground(): { backgroundColor: string } | undefined {\n const scene: Scene = this.$store.getters.currentScene;\n if (!scene) return undefined;\n\n return {\n backgroundColor: scene.theme,\n };\n },\n\n styleIcon(): { color: string } | undefined {\n const scene: Scene = this.$store.getters.currentScene;\n if (!scene) return undefined;\n return { color: scene.theme };\n },\n },\n\n watch: {\n show(isShow) {\n if (isShow) {\n this.$nextTick(() => {\n this.$el.focus();\n });\n }\n }\n },\n\n methods: {\n async leave(element: Element, done: () => void) {\n await gsap.to(element, {\n duration: 0.3,\n opacity: 0,\n y: 100,\n scaleX: 0.9,\n scaleY: 1.1,\n ease: Back.easeOut.config(1.7),\n });\n\n done();\n },\n\n beforeEnter(element: Element) {\n document.body.style.cursor = '';\n gsap.set(element, {\n y: 100,\n scaleX: 0.9,\n scaleY: 1.1,\n });\n },\n\n enter(element: Element, done: () => void) {\n gsap.to(element, {\n duration: 0.4,\n opacity: 1,\n scale: 1,\n y: 0,\n onComplete: done,\n ease: Back.easeOut.config(3),\n });\n },\n\n resize() {\n // const w = window.innerWidth;\n // const h = window.innerHeight;\n\n // if (w < ((this.state.value.width || 400))) {\n // this.state.value.width = w * 0.925;\n // } else if ((store.state.value.width || 400) < w * 0.925) {\n // this.state.value.width = store.state.value.width;\n // }\n\n // if (h < ((this.state.value.height || 240))) {\n // this.state.value.height = h * 0.925;\n // } else if ((store.state.value.height || 240) < w * 0.925) {\n // this.state.value.height = store.state.value.height;\n // }\n },\n\n onEsc() {\n if (this.show && this.closeOnEsc) {\n this.$emit('hide');\n }\n },\n\n onClickMask() {\n this.$emit('clickMask');\n if (this.closeOnClickMask) {\n // this.hide(event);\n this.$emit('hide');\n }\n }\n }\n});\n","import { render } from \"./InfoBox.vue?vue&type=template&id=7d3c1f20&scoped=true\"\nimport script from \"./InfoBox.vue?vue&type=script&lang=ts\"\nexport * from \"./InfoBox.vue?vue&type=script&lang=ts\"\n\nimport \"./InfoBox.vue?vue&type=style&index=0&id=7d3c1f20&lang=postcss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-7d3c1f20\"\n\nexport default script","\n\n\n\n\n\n\n","\nimport { defineComponent, ref, watch } from 'vue';\nimport { useStore } from 'vuex';\nimport gsap, { Back } from 'gsap';\nimport { Events } from '@/types';\n\nconst initialMorphPath = 'M-1,0h101c0,0-97.833,153.603-97.833,396.167C2.167,627.579,100,800,100,800H-1V0z';\nconst openMorphPath = 'M-1,0h101c0,0,0-1,0,395c0,404,0,405,0,405H-1V0z';\n\nexport default defineComponent({\n name: 'eventFeed',\n\n props: {\n show: { type: Boolean, required: true },\n hide: { type: Function, required: true },\n duration: { type: Number, default: 300 },\n measure: { type: String, default: 'px' },\n mask: { type: Boolean, default: true },\n closeButton: { type: Boolean, default: true },\n closeOnEsc: { type: Boolean, default: false },\n closeOnClickMask: { type: Boolean, default: true },\n className: { type: String, default: '' },\n customStyles: { type: Object, default: () => ({}) },\n customMaskStyles: { type: Object, default: () => ({}) },\n },\n\n async setup() {\n const topRef = ref();\n const contentHeight = ref(0);\n const store = useStore();\n const { events } = store.state;\n\n watch(topRef, () => {\n if (topRef.value) {\n const height = topRef.value.clientWidth;\n contentHeight.value = window.innerHeight - height;\n }\n });\n\n if (!events) {\n await store.dispatch('getEvents');\n }\n\n return { topRef, contentHeight };\n },\n\n data() {\n return {\n filter: 'upcoming' as 'ondemand' | 'upcoming',\n initialMorphPath,\n openMorphPath,\n };\n },\n\n created() {\n if (this.events && this.events.upcoming.length === 0) {\n this.filter = 'ondemand';\n }\n },\n\n watch: {\n show: 'open',\n },\n\n computed: {\n events(): { ondemand: Events[], upcoming: Events[] } {\n return this.$store.getters.allEvents;\n }\n },\n\n methods: {\n open(isShow: boolean) {\n if (isShow) {\n this.$nextTick(() => {\n this.$el.focus();\n });\n }\n },\n\n leave(element: Element, done: () => void) {\n gsap.to(element, {\n duration: 0.3,\n opacity: 0,\n x: window.innerWidth * 0.366,\n onComplete: done,\n ease: Back.easeOut.config(1.7),\n });\n },\n\n beforeEnter(element: Element) {\n const inner = element.querySelector('.events__inner');\n gsap.set(element, {\n x: window.innerWidth * 0.366,\n });\n gsap.set(inner, {\n x: window.innerWidth * 0.366,\n });\n },\n\n async enter(element: Element, done: () => void) {\n const morph = element.querySelector('.js-morph-shape');\n const inner = element.querySelector('.events__inner');\n\n if (morph) {\n this.morphAnim(morph as Element);\n }\n\n gsap.to(element, {\n duration: 0.46,\n opacity: 1,\n x: 0,\n // onComplete: done,\n ease: 'power2.in',\n });\n\n gsap.to(inner, {\n duration: 0.42,\n x: 0,\n delay: 0.2,\n ease: 'power2.out',\n onComplete: done,\n });\n },\n\n async hideFeed() {\n // store.clear();\n const dialog = this.$refs.dialog as HTMLDivElement;\n const morph = dialog.querySelector('.js-morph-shape');\n\n await gsap.to(dialog, {\n duration: 0.3,\n x: window.innerWidth * 0.366,\n ease: 'power2.in',\n });\n\n this.morphAnim(morph as Element, true);\n // this.$emit('hide');\n this.hide();\n },\n\n morphAnim(morph: Element, isClosing?: boolean) {\n return new Promise(resolve => {\n // eslint-disable-next-line no-undef\n const s = Snap(morph.querySelector('svg'));\n const path = s.select('path');\n\n path.animate({\n path: isClosing ? this.initialMorphPath : this.openMorphPath\n // eslint-disable-next-line no-undef\n }, 300, mina.easeinout, () => resolve(true));\n });\n },\n\n onEsc() {\n if (this.show && this.closeOnEsc) {\n // this.$emit('hide');\n this.hideFeed();\n }\n },\n\n onClickTab(e: MouseEvent, value: 'ondemand' | 'upcoming') {\n this.filter = value;\n },\n\n onClickMask() {\n this.$emit('clickMask');\n if (this.closeOnClickMask) {\n // this.$emit('hide');\n this.hideFeed();\n }\n }\n }\n});\n","import { render } from \"./EventFeed.vue?vue&type=template&id=1c1f0a47&scoped=true\"\nimport script from \"./EventFeed.vue?vue&type=script&lang=ts\"\nexport * from \"./EventFeed.vue?vue&type=script&lang=ts\"\n\nimport \"./EventFeed.vue?vue&type=style&index=0&id=1c1f0a47&lang=postcss\"\nimport \"./EventFeed.vue?vue&type=style&index=1&id=1c1f0a47&lang=postcss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-1c1f0a47\"\n\nexport default script","\n\n\n","import {\n FileLoader,\n Loader,\n CanvasTexture,\n NearestFilter,\n // AlphaFormat,\n} from 'three';\n\nimport bodymovin from 'lottie-web';\n\nclass LottieLoader extends Loader {\n quality = 1;\n\n setQuality(value: number): void {\n this.quality = value;\n }\n\n load(\n url: string,\n onLoad?: (texture: CanvasTexture) => any,\n onProgress?: () => any,\n onError?: () => any,\n ): CanvasTexture {\n // const quality = this.quality || 1;\n\n // @ts-ignore\n const texture = new CanvasTexture();\n // texture.minFilter = NearestFilter;\n\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setWithCredentials(this.withCredentials);\n\n loader.load(url, text => {\n const data = JSON.parse(text as string);\n\n // bodymoving uses container.offetWidth and offsetHeight\n // to define width/height\n\n const container = document.createElement('div');\n container.style.width = `${data.w}px`;\n container.style.height = `${data.h}px`;\n document.body.appendChild(container);\n\n // eslint-disable-next-line no-undef\n const animation = bodymovin.loadAnimation({\n container,\n renderer: 'canvas',\n loop: true,\n autoplay: true,\n animationData: data,\n // rendererSettings: { dpr: quality }\n });\n\n // @ts-ignore\n texture.animation = animation;\n // @ts-ignore\n texture.image = animation.container;\n\n animation.addEventListener('enterFrame', () => {\n texture.needsUpdate = true;\n });\n\n container.style.display = 'none';\n\n if (onLoad !== undefined) {\n onLoad(texture);\n }\n }, onProgress, onError);\n\n return texture;\n }\n}\n\nexport { LottieLoader };\n","import { defineComponent } from 'vue';\nimport gsap, { Back } from 'gsap';\n\nimport {\n MeshBasicMaterial,\n PlaneGeometry,\n Vector3,\n Mesh,\n CanvasTexture,\n TextureLoader,\n Texture,\n} from 'three';\n\nimport { Object3D } from 'troisjs';\nimport { LottieLoader } from '@/utils/LottieLoader';\n\nexport default defineComponent({\n name: 'Hotspot',\n extends: Object3D,\n props: {\n id: Number,\n slug: String,\n src: String,\n name: { type: String, default: '0404E8_0404B5_0404CB_3333FC' },\n onClick: Function,\n onPointerEnter: Function,\n onPointerLeave: Function,\n onPointerOver: Function,\n flatShading: Boolean,\n position: Object as () => Vector3,\n scale: Object as () => Vector3,\n visible: Boolean,\n infoBoxActive: Boolean,\n },\n\n data() {\n return {\n mesh: null as null | Mesh,\n geometry: null as null | PlaneGeometry,\n material: null as null | MeshBasicMaterial,\n isPlaying: true,\n };\n },\n\n created() {\n this.createGeometry();\n this.addGeometryWatchers(this.props);\n },\n\n mounted() {\n if (!this.mesh) {\n this.init();\n }\n },\n\n unmounted() {\n if (this.geometry) this.geometry.dispose();\n if (this.material) this.material.dispose();\n },\n\n watch: {\n infoBoxActive() {\n if (this.infoBoxActive) {\n this.stopAnimation();\n } else {\n this.playAnimation();\n }\n },\n },\n\n // computed: {\n // over(): boolean {\n // if (!this.mesh) return false;\n // return this.mesh.userData.over;\n // }\n // },\n\n methods: {\n init() {\n const loader = this.$device.mobile ? new TextureLoader() : new LottieLoader();\n loader.load(this.src as string, this.createLottie);\n },\n\n stopAnimation() {\n if (!this.isPlaying) return;\n\n // @ts-ignore\n if (this.material && this.material.map && this.material.map.animation) {\n // @ts-ignore\n this.material.map.animation.pause();\n this.isPlaying = false;\n }\n },\n\n playAnimation() {\n if (this.isPlaying) return;\n\n // @ts-ignore\n if (this.material && this.material.map && this.material.map.animation) {\n // @ts-ignore\n this.material.map.animation.play();\n this.isPlaying = true;\n }\n },\n\n addGeometryWatchers(props: any) {\n Object.keys(props).forEach(prop => {\n // @ts-ignore\n watch(() => this[prop], () => {\n this.refreshGeometry();\n });\n });\n },\n\n createGeometry() {\n this.geometry = new PlaneGeometry(8, 5);\n },\n\n setGeometry(geometry: PlaneGeometry) {\n this.geometry = geometry;\n if (this.mesh) this.mesh.geometry = geometry;\n },\n\n refreshGeometry() {\n const oldGeo = this.geometry;\n this.geometry = new PlaneGeometry(8, 5);\n if (this.mesh && this.geometry) this.mesh.geometry = this.geometry;\n oldGeo?.dispose();\n },\n\n createLottie(texture: CanvasTexture | Texture) {\n if (!this.geometry) return;\n\n this.material = new MeshBasicMaterial({\n map: texture,\n transparent: true,\n alphaTest: 0.1,\n depthTest: false,\n precision: 'mediump',\n color: '#fff',\n // sizeAttenuation: false,\n });\n\n if (this.mesh) this.mesh.material = this.material;\n const mesh = new Mesh(this.geometry, this.material);\n // mesh.userData.component = this;\n mesh.renderOrder = 999;\n\n // mesh has to be injected before lookAt\n this.mesh = mesh;\n this.initObject3D(mesh);\n // hide mesh for reveal animation\n mesh.scale.set(0, 0, 0);\n\n if (this.renderer && this.renderer.camera) {\n mesh.lookAt(this.renderer.camera.position);\n }\n\n // if (this.renderer && this.renderer.three) {\n // this.renderer.three.addIntersectObject(this.mesh);\n // }\n\n gsap.to(this.mesh.scale, {\n x: this.scale.x,\n y: this.scale.y,\n z: this.scale.z,\n duration: 0.6,\n delay: 0.2,\n ease: Back.easeOut.config(1.7),\n });\n },\n },\n});\n","\nimport { defineComponent, PropType, ref } from 'vue';\nimport { Group, Renderer } from 'troisjs';\nimport { Mesh } from 'three';\nimport { Scene } from '@/types';\nimport Hotspot from './Hotspot';\n\nexport default defineComponent({\n name: 'Hotspots',\n components: {\n Hotspot,\n },\n\n props: {\n renderer: Object as PropType,\n infoBoxActive: {\n required: true,\n type: Boolean,\n },\n visible: {\n required: true,\n type: Boolean,\n },\n onPointerClick: {\n required: true,\n type: Function as PropType<(e: any) => void>\n },\n onPointerOver: {\n required: true,\n type: Function as PropType<(e: any) => void>\n },\n onPointerEnter: {\n required: true,\n type: Function as PropType<(e: any) => void>\n },\n onPointerLeave: {\n required: true,\n type: Function as PropType<(e: any) => void>\n },\n },\n\n setup() {\n const hotspotsRef = ref();\n return { hotspots: hotspotsRef };\n },\n\n mounted() {\n this.addIntersects();\n },\n\n unmounted() {\n this.removeIntersects();\n },\n\n watch: {\n children() {\n this.addIntersects();\n }\n },\n\n methods: {\n addIntersects() {\n if (this.children && this.renderer) {\n const pointer = this.renderer.$pointer;\n pointer.intersectObjects = this.children;\n }\n },\n removeIntersects() {\n if (this.renderer) {\n const pointer = this.renderer.$pointer;\n pointer.intersectObjects = [];\n }\n }\n },\n\n computed: {\n currentScene(): Scene {\n return this.$store.getters.currentScene;\n },\n children(): Mesh[] | null {\n return this.hotspots ? this.hotspots.o3d.children : null;\n }\n },\n});\n","import { render } from \"./Hotspots.vue?vue&type=template&id=053ca10f\"\nimport script from \"./Hotspots.vue?vue&type=script&lang=ts\"\nexport * from \"./Hotspots.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","/* eslint-disable lines-between-class-members */\nimport * as THREE from 'three';\nimport gsap from 'gsap';\nimport { BASE_URL } from '@/constants';\n\ntype PropsType = {\n renderer: any;\n fragment?: any;\n duration?: number;\n easing?: string;\n}\n\nconst DISP_PATH = `${BASE_URL}/images/disp.jpg`;\n\nconst fragment = `\n uniform float time;\n uniform float progress;\n uniform float width;\n uniform float scaleX;\n uniform float scaleY;\n uniform float transition;\n uniform float radius;\n uniform float swipe;\n uniform sampler2D texture1;\n uniform sampler2D texture2;\n uniform sampler2D displacement;\n uniform vec4 resolution;\n\n varying vec2 vUv;\n varying vec4 vPosition;\n\n float parabola( float x, float k ) {\n return pow( 4. * x * ( 1. - x ), k );\n }\n\n void main() {\n vec2 newUV = (vUv - vec2(0.5))*resolution.zw + vec2(0.5);\n vec2 p = newUV;\n vec2 start = vec2(0.5,0.5);\n vec2 aspect = resolution.wz;\n\n vec2 uv = newUV;\n float dt = parabola(progress, 1.);\n vec4 noise = texture2D(displacement, fract(vUv+time*0.04));\n float prog = progress*0.66 + noise.g * 0.04;\n float circ = 1. - smoothstep(-width, 0.0, radius * distance(start*aspect, uv*aspect) - prog*(1.+width));\n float intpl = pow(abs(circ), 1.);\n vec4 t1 = texture2D( texture1, (uv - 0.5) * (1.0 - intpl) + 0.5 ) ;\n vec4 t2 = texture2D( texture2, (uv - 0.5) * intpl + 0.5 );\n gl_FragColor = mix( t1, t2, intpl );\n }\n`;\n\nconst vertex = `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n vec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewPosition;\n }\n`;\n\nexport default class ImageTransition {\n renderer: any = null;\n material: THREE.ShaderMaterial | null = null;\n mesh: THREE.Mesh | null = null;\n currentTexture: THREE.Texture | null = null;\n geometry = new THREE.SphereGeometry(500, 60, 40);\n time = 0;\n isRunning = false;\n vertex = vertex;\n\n constructor(props: PropsType) {\n this.renderer = props.renderer;\n this.init();\n }\n\n init(): void {\n this.geometry.scale(-1, 1, 1);\n\n this.material = new THREE.ShaderMaterial({\n extensions: { derivatives: true },\n side: THREE.FrontSide,\n uniforms: {\n time: { value: 0 },\n progress: { value: 0 },\n border: { value: 0 },\n intensity: { value: 0 },\n scaleX: { value: 40 },\n scaleY: { value: 40 },\n transition: { value: 40 },\n swipe: { value: 0 },\n radius: {\n value: 0.8,\n // min: 0.1,\n // max: 2\n },\n width: {\n value: 0.92,\n // min: 0.0,\n // max: 1\n },\n texture1: { value: null },\n texture2: { value: null },\n displacement: { value: new THREE.TextureLoader().load(DISP_PATH) },\n resolution: { value: new THREE.Vector4() },\n },\n vertexShader: this.vertex,\n fragmentShader: fragment\n });\n\n this.mesh = new THREE.Mesh(this.geometry, this.material);\n // this.mesh.position.set(0, 0, 0);\n this.mesh.lookAt(this.renderer.camera.position);\n }\n\n getMesh(): THREE.Mesh | null {\n return this.mesh;\n }\n\n getMaterial(): THREE.ShaderMaterial | null {\n return this.material;\n }\n\n setMap(textures: THREE.Texture[], targetIndex?: number): void {\n if (!this.material) return;\n const texture1 = targetIndex ? textures[targetIndex] : textures[0];\n const texture2 = (targetIndex && textures[targetIndex + 1]) ? textures[targetIndex + 1] : textures[1];\n this.material.uniforms.texture1.value = texture1;\n this.material.uniforms.texture2.value = texture2;\n this.resize();\n }\n\n dispose(): void {\n if (!this.material) return;\n this.material.uniforms.texture1.value = null;\n this.material.uniforms.texture2.value = null;\n }\n\n resize(): void {\n if (!this.material) return;\n const { width, height } = this.renderer.size;\n this.material.uniforms.resolution.value.x = width;\n this.material.uniforms.resolution.value.y = height;\n this.material.uniforms.resolution.value.z = 1;\n this.material.uniforms.resolution.value.w = 1;\n }\n\n render(): void {\n if (!this.material) return;\n this.time += 0.05;\n this.material.uniforms.time.value = this.time;\n }\n\n async animate(\n textures: THREE.Texture[],\n value: number,\n camera = { x: 0, y: 0, z: 5 },\n ): Promise {\n if (!this.material) return false;\n\n if (this.renderer.three && this.renderer.three.cameraCtrl) {\n this.renderer.three.cameraCtrl.enabled = false;\n }\n\n if (this.isRunning) {\n this.material.uniforms.texture1.value = this.currentTexture;\n this.material.uniforms.progress.value = 0;\n }\n\n this.isRunning = true;\n const nextTexture = textures[value];\n this.material.uniforms.texture2.value = nextTexture;\n this.material.uniforms.progress.value = 0;\n this.currentTexture = nextTexture;\n gsap.killTweensOf(this.material.uniforms.progress);\n\n if (this.renderer.camera) {\n gsap.to(this.renderer.camera.position, {\n ...camera,\n duration: 1.2,\n ease: 'power2.in',\n onComplete: () => {\n if (this.renderer && this.renderer.three && this.renderer.three.cameraCtrl) {\n this.renderer.three.cameraCtrl.enabled = true;\n }\n }\n });\n }\n\n await gsap.to(this.material.uniforms.progress, {\n value: 1,\n duration: 3.6,\n delay: 0.2,\n ease: 'power2.out',\n });\n\n this.material.uniforms.texture1.value = nextTexture;\n this.material.uniforms.progress.value = 0;\n this.isRunning = false;\n return true;\n }\n}\n","import { defineComponent } from 'vue';\nimport { useStore } from 'vuex';\nimport gsap from 'gsap';\nimport { Vector2 } from 'three';\nimport { Object3D, useTextures, lerp } from 'troisjs';\nimport { State } from '@/store';\nimport ImageTransition from '@/utils/ImageTransition';\nimport { BASE_URL } from '@/constants';\n\nconst ENTRANCE_PATH = `${BASE_URL}/textures/scene0.jpg`;\nconst entrance = { src: ENTRANCE_PATH };\n\nexport default defineComponent({\n name: 'Texture',\n extends: Object3D,\n props: {\n src: String,\n visible: Boolean,\n },\n\n async setup() {\n const loader = useTextures();\n const center = new Vector2();\n const store = useStore();\n const images = store.state.scenes.map(scene => scene.texture);\n images.unshift(entrance);\n loader.count = images.length;\n loader.loadProgress = 0;\n\n function loadTexture(img: { src: string }, index: number) {\n return new Promise(resolve => {\n loader.loader.load(\n img.src,\n texture => {\n loader.loadProgress += 1 / loader.count;\n loader.textures[index] = texture;\n store.dispatch('setLoadProgress', loader.loadProgress);\n resolve(texture);\n }\n );\n });\n }\n\n // eslint-disable-next-line no-restricted-syntax\n for (const [index, image] of images.entries()) {\n // eslint-disable-next-line no-await-in-loop\n await loadTexture(image, index);\n }\n\n // await Promise.all(images.map(loadTexture));\n\n // await new Promise(resolve => {\n // console.log('progress', loader.loadProgress);\n // loader.loadTextures(images, () => {\n // setTimeout(() => {\n // resolve(true);\n // store.dispatch('setLoadProgress', loader.loadProgress);\n // // store.dispatch('setTextureState', true);\n // }, 1200);\n // });\n // });\n\n return {\n loader,\n center,\n progress: 0,\n targetProgress: 0,\n isScaling: false,\n images,\n three: null as any,\n image1: null as any,\n image2: null as any,\n planes: null as any,\n events: {} as any,\n imageTransition: null as ImageTransition | null,\n };\n },\n\n mounted() {\n this.init();\n },\n\n unmounted() {\n this.loader.dispose();\n if (!this.renderer) return;\n const { domElement } = this.renderer.renderer;\n domElement.removeEventListener('click', this.handleClick);\n document.removeEventListener('keyup', this.onKeyup);\n },\n\n computed: {\n sceneIndex(): number {\n return this.$store.state.currentSceneIndex;\n },\n },\n\n methods: {\n init() {\n if (!this.renderer) return;\n this.initScene();\n const { domElement } = this.renderer.renderer;\n if (this.events.click) domElement.addEventListener('click', this.handleClick);\n if (this.events.keyup) document.addEventListener('keyup', this.onKeyup);\n this.renderer.onResize(this.onResize);\n this.show(this.sceneIndex + 1);\n if (this.renderer) {\n this.renderer.onBeforeRender(this.animate);\n }\n },\n\n initScene() {\n if (!this.scene || !this.renderer) {\n console.error('Scene doesn\\'t exist');\n return;\n }\n\n this.imageTransition = new ImageTransition({ renderer: this.renderer });\n const mesh = this.imageTransition.getMesh();\n\n if (mesh) {\n if (this.sceneIndex === -1) {\n // mesh.geometry.rotateY((3 * Math.PI) / 2);\n mesh.rotation.y = (-1 * Math.PI) / 2;\n }\n this.scene.add(mesh);\n }\n },\n\n show(targetIndex?: number) {\n this.imageTransition?.setMap(this.loader.textures, targetIndex);\n },\n\n hide() {\n // this.image1.removeMap();\n // this.image2.removeMap();\n // this.setImagesProgress(0);\n },\n\n animate() {\n if (!this.renderer || !this.visible) return;\n this.imageTransition?.render();\n },\n\n onResize() {\n this.imageTransition?.resize();\n },\n\n async handleClick(e: MouseEvent | null, index?: number) {\n if (!this.renderer) return false;\n\n if (typeof index === 'number') {\n // index + 1 to exclude the entrance\n const res = await this.nav(index + 1);\n return res;\n }\n return false;\n },\n\n onKeyup(e: KeyboardEvent) {\n if (e.keyCode === 37 || e.keyCode === 38) {\n this.navPrevious();\n } else if (e.keyCode === 39 || e.keyCode === 40) {\n this.navNext();\n }\n },\n\n nav(index: number) {\n return this.setTargetProgress(index);\n },\n\n navNext() {\n if (Number.isInteger(this.targetProgress)) {\n this.setTargetProgress(this.targetProgress + 1);\n } else {\n this.setTargetProgress(Math.ceil(this.targetProgress));\n }\n },\n\n navPrevious() {\n if (Number.isInteger(this.targetProgress)) {\n this.setTargetProgress(this.targetProgress - 1);\n } else {\n this.setTargetProgress(Math.floor(this.targetProgress));\n }\n },\n\n async setTargetProgress(value: number) {\n if (!this.renderer) return false;\n\n if (this.imageTransition) {\n const mesh = this.imageTransition.getMesh();\n\n if (mesh) {\n if (value === 0) {\n gsap.to(mesh.rotation, {\n y: (-1 * Math.PI) / 2,\n duration: 1.2,\n delay: 1,\n ease: 'power2.out',\n });\n } else {\n gsap.to(mesh.rotation, {\n y: 0,\n duration: 1.2,\n delay: 1,\n ease: 'power2.out',\n });\n }\n }\n\n const isDone = await this.imageTransition.animate(\n this.loader.textures,\n value,\n value === 2 ? { x: 100, y: 0, z: 5 } : undefined,\n );\n this.targetProgress = value;\n return isDone;\n }\n\n return false;\n },\n\n updateProgress() {\n const progress1 = lerp(this.progress, this.targetProgress, 0.1);\n const pdiff = progress1 - this.progress;\n if (pdiff === 0) return;\n const p0 = this.progress % 1;\n const p1 = progress1 % 1;\n if ((pdiff > 0 && p1 < p0) || (pdiff < 0 && p0 < p1)) {\n console.log({ 'this.loader.textures': this.loader.textures });\n const i = Math.floor(progress1) % this.images.length;\n const j = (i + 1) % this.images.length;\n this.image1.setMap(this.loader.textures[i]);\n this.image2.setMap(this.loader.textures[j]);\n }\n this.progress = progress1;\n this.setImagesProgress(this.progress % 1);\n },\n\n setImagesProgress(progress: number) {\n this.image1.uStrength.value = progress;\n this.image2.uStrength.value = -1 + progress;\n },\n },\n});\n","/* eslint-disable */\n\n// Author: Felix Mariotto\n\n// Based on Lee Stemkoski's work who coded the core texture offsetting part :\n// http://stemkoski.github.io/Three.js/Texture-Animation.html\n\nimport * as THREE from 'three';\n\nfunction SpriteMixer() {\n\n\tvar actionSprites = []; // Will store every new actionSprite.\n\tvar listeners = []; // Will store the user callbacks to call upon loop, finished, etc..\n\n\n\n\tvar api = {\n\t\tactionSprites: actionSprites,\n\t\tupdate: update,\n\t\tActionSprite: ActionSprite,\n\t\tAction: Action,\n\t\taddEventListener: addEventListener\n\t};\n\n\n\n\t// It can be used to make SpriteMixer call a callback function\n\t// when an action is finished or looping. eventName argument can\n\t// be either \"finished\" or \"loop\".\n\tfunction addEventListener( eventName, callback ) {\n\t\tif ( eventName && callback ) {\n\t\t\tlisteners.push( { eventName, callback } );\n\t\t} else {\n\t\t\tthrow 'Error : an argument is missing';\n\t\t};\n\t};\n\n\n\t// Update every stored actionSprite if needed.\n\tfunction update( delta ) {\n\t\tactionSprites.forEach( (actionSprite)=> {\n\t\t\tif ( actionSprite.paused == false ) {\n\t\t\t\tupdateAction( actionSprite.currentAction, delta * 1000 );\n\t\t\t};\n\t\t});\n\t};\n\n\n\n\t// This offsets the texture to make the next frame of the animation appear.\n\tfunction offsetTexture( actionSprite ) {\n\t\tactionSprite.material.map.offset.x = actionSprite.getColumn() / actionSprite.tilesHoriz;\n\t\tactionSprite.material.map.offset.y = (actionSprite.tilesVert - actionSprite.getRow() -1 ) / actionSprite.tilesVert;\n\t};\n\n\n\n\t// This is called during the loop, it first check if the animation must\n\t// be updated, then increment actionSprite.currentTile, then call offsetTexture().\n\t// Various operations are made depending on clampWhenFinished and hideWhenFinished\n\t// options.\n\tfunction updateAction( action, milliSec ) {\n\n\t\taction.actionSprite.currentDisplayTime += milliSec;\n\n\t\twhile (action.actionSprite.currentDisplayTime > action.tileDisplayDuration) {\n\n\t\t\taction.actionSprite.currentDisplayTime -= action.tileDisplayDuration;\n\t\t\taction.actionSprite.currentTile = (action.actionSprite.currentTile + 1) ;\n\n\t\t\t// Restarts the animation if the last frame was reached at last call.\n\t\t\tif (action.actionSprite.currentTile > action.indexEnd) {\n\n\t\t\t\taction.actionSprite.currentTile = action.indexStart ;\n\n\t\t\t\t// Call the user callbacks on the event 'loop'\n\t\t\t\tif ( action.mustLoop == true ) {\n\n\t\t\t\t\tlisteners.forEach( (listener)=> {\n\t\t\t\t\t\tif ( listener.eventName == 'loop' ) {\n\t\t\t\t\t\t\tlistener.callback({\n\t\t\t\t\t\t\t\ttype:'loop',\n\t\t\t\t\t\t\t\taction: action\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\n\t\t\t\t} else { // action must not loop\n\n\t\t\t\t\tif ( action.clampWhenFinished == true ) {\n\n\t\t\t\t\t\taction.actionSprite.paused = true ;\n\n\t\t\t\t\t\tif (action.hideWhenFinished == true) {\n\t\t\t\t\t\t\taction.actionSprite.visible = false ;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tcallFinishedListeners( action );\n\n\t\t\t\t\t} else { // must restart the animation before to stop\n\n\t\t\t\t\t\taction.actionSprite.paused = true ;\n\n\t\t\t\t\t\tif (action.hideWhenFinished == true) {\n\t\t\t\t\t\t\taction.actionSprite.visible = false ;\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\t// Call updateAction() a last time after a frame duration,\n\t\t\t\t\t\t// even if the action is actually paused before, in order to restart\n\t\t\t\t\t\t// the animation.\n\t\t\t\t\t\tsetTimeout( ()=> {\n\t\t\t\t\t\t\tupdateAction( action, action.tileDisplayDuration );\n\t\t\t\t\t\t\tcallFinishedListeners( action );\n\t\t\t\t\t\t}, action.tileDisplayDuration);\n\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\n\n\t\t\toffsetTexture( action.actionSprite );\n\n\n\t\t\t// Call the user callbacks on the event 'finished'.\n\t\t\tfunction callFinishedListeners( action ) {\n\t\t\t\tlisteners.forEach( (listener)=> {\n\t\t\t\t\tif ( listener.eventName == 'finished' ) {\n\t\t\t\t\t\tlistener.callback({\n\t\t\t\t\t\t\ttype:'finished',\n\t\t\t\t\t\t\taction: action\n\t\t\t\t\t\t});\n\t\t\t\t\t};\n\t\t\t\t}, action.tileDisplayDuration );\n\t\t\t};\n\n\n\t\t};\n\n\t};\n\n\n\n\t// reveal the sprite and play the action only once\n\tfunction playOnce() {\n\t\tthis.mustLoop = false ;\n\t\tthis.actionSprite.currentAction = this ;\n\t\tthis.actionSprite.currentTile = this.indexStart ;\n\t\toffsetTexture( this.actionSprite );\n\t\tthis.actionSprite.paused = false ;\n\t\tthis.actionSprite.visible = true ;\n\t};\n\n\t// resume the action if it was paused\n\tfunction resume() {\n\t\t// this is in case setFrame was used to set a frame outside of the\n\t\t// animation range, which would lead to bugs.\n\t\tif ( this.currentTile > this.indexStart &&\n\t\t\t this.currentTile < this.indexEnd ) {\n\t\t\tthis.currentTile = this.indexStart;\n\t\t};\n\t\tthis.actionSprite.paused = false ;\n\t\tthis.actionSprite.visible = true ;\n\t};\n\n\t// reveal the sprite and play it in a loop\n\tfunction playLoop() {\n\t\tthis.mustLoop = true ;\n\t\tthis.actionSprite.currentAction = this ;\n\t\tthis.actionSprite.currentTile = this.indexStart ;\n\t\toffsetTexture( this.actionSprite );\n\t\tthis.actionSprite.paused = false ;\n\t\tthis.actionSprite.visible = true ;\n\t};\n\n\t// pause the action when it reach the last frame\n\tfunction pauseNextEnd() {\n\t\tthis.mustLoop = false;\n\t};\n\n\t// pause the action on the current frame\n\tfunction pause() {\n\t\tthis.actionSprite.paused = true ;\n\t};\n\n\t// pause and reset the action\n\tfunction stop() {\n\t\tthis.actionSprite.currentDisplayTime = 0;\n\t\tthis.actionSprite.currentTile = this.indexStart;\n\t\tthis.actionSprite.paused = true ;\n\t\tif (this.hideWhenFinished == true) {\n\t\t\tthis.actionSprite.visible = false ;\n\t\t};\n\t\toffsetTexture( this.actionSprite );\n\t};\n\n\t// Set manually a frame of the animation. Frame indexing starts at 0.\n\tfunction setFrame( frameID ) {\n\t\tthis.paused = true ;\n\t\tthis.currentTile = frameID;\n\t\toffsetTexture( this );\n\t};\n\n\t// returns the row of the current tile.\n\tfunction getRow() {\n\t\treturn Math.floor(this.currentTile / this.tilesHoriz);\n\t};\n\n\t// returns the column of the current tile.\n\tfunction getColumn() {\n\t\treturn this.currentTile % this.tilesHoriz;\n\t};\n\n\n\n\n\n\n\t/*\n\t\tSpriteMixer.ActionSprite() returns an extended THREE.Sprite.\n\t\tAll the parameters necessary for the animation are stored inside,\n\t\tbut you can still use it as any THREE.Sprite, like scale it etc..\n\n\t\tActionSprite(texture:THREE.Texture, tilesHoriz:integer, tilesVert:integer)\n\t\t\t- texture : texture containing all the frames in a grid.\n\t\t\t- tilesHoriz : number of frames on the horizontal direction.\n\t\t\t- tilesVert : number of frames on the vertical direction.\n\t*/\n\tfunction ActionSprite( texture, tilesHoriz, tilesVert ) {\n\n\t\ttexture.wrapS = texture.wrapT = THREE.RepeatWrapping;\n\t\ttexture.repeat.set( 1/tilesHoriz, 1/tilesVert );\n\n\t// \tlet spriteMaterial = new THREE.SpriteMaterial({\n\t// \t\tmap:texture,\n // color:0xffffff,\n // transparent: true,\n // alphaTest: 0.1,\n // // sizeAttenuation: false\n // });\n\n\t// \tlet actionSprite = new THREE.Sprite(spriteMaterial);\n\n const material = new THREE.MeshBasicMaterial({\n map: texture,\n side: THREE.DoubleSide,\n transparent: true,\n });\n\n const geometry = new THREE.PlaneGeometry(2, 2, 2, 2);\n const actionSprite = new THREE.Mesh(geometry, material);\n\n actionSprite.isIndexedSprite = true ;\n\n actionSprite.tilesHoriz = tilesHoriz ;\n actionSprite.tilesVert = tilesVert ;\n actionSprite.tiles = (tilesHoriz * tilesVert) ;\n actionSprite.currentDisplayTime = 0 ;\n actionSprite.currentTile = 0 ;\n actionSprite.paused = true ;\n actionSprite.currentAction;\n\n actionSprite.setFrame = setFrame ;\n actionSprite.getRow = getRow;\n actionSprite.getColumn = getColumn;\n\n offsetTexture( actionSprite ) ;\n\n actionSprites.push( actionSprite );\n\n return actionSprite;\n };\n\n\n\n\n\n\t/*\n\t\tSpriteMixer.Action returns an object containing the informations related to a\n\t\tspecific sequence in an actionSprite. For instance, if the actionSprite\n\t\tcontains 20 tiles, an Action could start at tile 5 and finish at tile 8.\n\n\t\tAction( actionSprite:ActionSprite, indexStart:integer, indexEnd:integer, tileDisplayDuration:integer )\n\t\t\t- actionSprite is a SpriteMixer.ActionSprite, containing a loaded texture with tiles\n\t\t\t- indexStart is the starting tile of the animation, index starts at 0.\n\t\t\t- indexEnd is the ending tile of the animation\n\t\t\t- tileDisplayDuration is the duration of ONE FRAME in the animation\n\t*/\n\n\tfunction Action( actionSprite, indexStart, indexEnd, tileDisplayDuration ) {\n\n\t\tif ( !actionSprite.isIndexedSprite ) {\n\t\t\tthrow 'Error : \"texture\" argument must be an indexedTexture.' ;\n\t\t\treturn\n\t\t};\n\n\n\t\treturn {\n\t\t\ttype: \"spriteAction\",\n\t\t\tplayOnce,\n\t\t\tplayLoop,\n\t\t\tresume,\n\t\t\tpause,\n\t\t\tpauseNextEnd,\n\t\t\tstop,\n\t\t\tclampWhenFinished: true,\n\t\t\thideWhenFinished: false,\n\t\t\tmustLoop: true,\n\t\t\tindexStart,\n\t\t\tindexEnd,\n\t\t\ttileDisplayDuration,\n\t\t\tactionSprite\n\t\t};\n\n\t};\n\n\n\n\n\n\treturn api;\n\n};\n\nexport default SpriteMixer;\n","import { defineComponent } from 'vue';\nimport gsap from 'gsap';\n\nimport {\n Vector3,\n Clock,\n MeshBasicMaterial,\n PlaneGeometry,\n Mesh,\n} from 'three';\n\nimport { Object3D, useTextures } from 'troisjs';\n\n// @ts-ignore\nimport SpriteMixer from '@/vendor/SpriteMixer';\n\nexport default defineComponent({\n name: 'Sprite',\n extends: Object3D,\n props: {\n image: String,\n position: Object as () => Vector3,\n scale: Object as () => Vector3,\n rotation: Object as () => Vector3,\n tile: Object as () => { x: number, y: number },\n },\n\n async setup(props) {\n const loader = useTextures();\n const texture = { src: props.image || '' };\n\n await new Promise(resolve => {\n loader.loadTextures([texture], () => {\n resolve(true);\n });\n });\n\n return { loader };\n },\n\n data() {\n return {\n mesh: null as null | Mesh,\n sprite: null as null | Mesh,\n };\n },\n\n mounted() {\n if (this.renderer && this.tile) {\n const spriteMixer = SpriteMixer();\n const clock = new Clock();\n\n // @ts-ignore\n const actionSprite = spriteMixer.ActionSprite(this.loader.textures[0], this.tile.x, this.tile.y);\n const action1 = spriteMixer.Action(actionSprite, 0, this.tile.x * this.tile.y, this.tile.x * this.tile.y);\n action1?.playLoop();\n // actionSprite.mesh.userData.component = this;\n // mesh has to be injected before lookAt\n this.initObject3D(actionSprite);\n // hide mesh for reveal animation\n actionSprite.material.opacity = 0;\n this.mesh = actionSprite;\n\n // @ts-ignore\n gsap.to(this.mesh.material, {\n opacity: 1,\n duration: 0.6,\n delay: 2,\n });\n\n this.renderer.renderer.setAnimationLoop(() => {\n const delta = clock.getDelta();\n spriteMixer.update(delta);\n });\n }\n },\n\n unmounted() {\n if (this.renderer) {\n this.renderer.renderer.setAnimationLoop(null);\n }\n }\n});\n","\n\n\n","\nimport { defineComponent, PropType, ref } from 'vue';\nimport { Group } from 'troisjs';\n\ninterface PointerEnterEvent extends MouseEvent {\n over: boolean;\n}\n\nexport default defineComponent({\n name: 'EntrancePoint',\n\n props: {\n // hide: { type: Function, required: true },\n renderer: Object,\n onDoorClick: Function as PropType<(e: MouseEvent, index: number) => Promise>,\n onPointOver: Function as PropType<(e: PointerEnterEvent, index: number) => void>,\n },\n\n setup() {\n const doorsRef = ref();\n return { doors: doorsRef };\n },\n\n unmounted() {\n if (this.renderer) {\n const pointer = this.renderer.$pointer;\n pointer.intersectObjects = [];\n }\n },\n\n mounted() {\n if (!this.renderer || !this.doors) return;\n console.log('o3d', this.doors);\n const doors = this.doors.o3d.children;\n const pointer = this.renderer.$pointer;\n pointer.intersectObjects = doors;\n },\n\n methods: {\n handleClick(event: MouseEvent, index: number) {\n if (this.onDoorClick) {\n this.onDoorClick(event, index);\n }\n },\n handlePointOver(event: PointerEnterEvent, index: number) {\n if (this.onPointOver) {\n this.onPointOver(event, index);\n }\n }\n },\n});\n","import { render } from \"./EntrancePoint.vue?vue&type=template&id=aa507b72\"\nimport script from \"./EntrancePoint.vue?vue&type=script&lang=ts\"\nexport * from \"./EntrancePoint.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\n\n\n\n\n","","import { render } from \"./language_black_24dp.svg?vue&type=template&id=d144793e\"\nconst script = {}\nscript.render = render\n\nexport default script","","import { render } from \"./close_black_24dp.svg?vue&type=template&id=3ecd8716\"\nconst script = {}\nscript.render = render\n\nexport default script","\n\n\n\n\n","\nimport { defineComponent, ref } from 'vue';\nimport gsap from 'gsap';\n\nexport default defineComponent({\n name: 'Text',\n props: {\n text: { type: String, required: true },\n },\n\n setup() {\n const container = ref();\n return { container };\n },\n\n data() {\n const letters = this.text.split('');\n const cachedText = this.text;\n return { letters, cachedText, isAnimationDone: true };\n },\n\n watch: {\n async text() {\n if (!this.container) return;\n console.log('container', this.container);\n\n if (this.text) {\n const letters = [...this.container.querySelectorAll('.letter')];\n letters.reverse();\n await gsap.to(letters, {\n opacity: 0,\n y: 20,\n duration: 0.3,\n ease: 'circ.out',\n stagger: 0.05,\n });\n\n this.isAnimationDone = false;\n this.letters = this.text.split('');\n\n setTimeout(() => {\n this.isAnimationDone = true;\n }, 500);\n }\n },\n },\n\n computed: {\n splitedList(): string[] {\n const letters = this.text.split('');\n return letters;\n }\n },\n\n methods: {\n beforeEnter (el: Element) {\n const letters = el.querySelectorAll('.letter');\n gsap.set(letters, { opacity: 0, y: 20 });\n },\n\n enter(el: Element) {\n const letters = el.querySelectorAll('.letter');\n gsap.to(letters, {\n opacity: 1,\n y: 0,\n duration: 0.3,\n ease: 'circ.in',\n stagger: 0.05,\n delay: 0.5,\n });\n },\n\n leave(el: HTMLElement, done: () => void) {\n console.log({ el, done });\n const { index } = el.dataset;\n const total = this.letters.length;\n gsap.to(el, {\n opacity: 0,\n y: 20,\n duration: 0.3,\n ease: 'circ.out',\n delay: (total - Number(index)) * 0.05,\n onComplete: done,\n });\n },\n },\n});\n","import { render } from \"./Text.vue?vue&type=template&id=33f6a3ac&scoped=true\"\nimport script from \"./Text.vue?vue&type=script&lang=ts\"\nexport * from \"./Text.vue?vue&type=script&lang=ts\"\n\nimport \"./Text.vue?vue&type=style&index=0&id=33f6a3ac&scoped=true&lang=postcss\"\nscript.render = render\nscript.__scopeId = \"data-v-33f6a3ac\"\n\nexport default script","\nimport { defineComponent, PropType } from 'vue';\nimport gsap, { Back } from 'gsap';\nimport SVGGlobe from '@/svgs/language_black_24dp.svg';\nimport SVGClose from '@/svgs/close_black_24dp.svg';\nimport { Scene } from '@/types';\nimport Text from './Text.vue';\n\nexport default defineComponent({\n name: 'ZoneInfo',\n components: { SVGGlobe, SVGClose, Text },\n data(): { isScenesVisible: boolean } {\n return { isScenesVisible: false };\n },\n props: {\n onZoneClick: Function as PropType<(e: MouseEvent, index: number) => Promise>,\n },\n\n methods: {\n onButtonClick() {\n this.isScenesVisible = !this.isScenesVisible;\n },\n\n onSceneClick(event: MouseEvent, index: number) {\n if (this.onZoneClick) {\n this.onZoneClick(event, index);\n }\n },\n\n beforeEnter (el: Element) {\n gsap.set(el, { opacity: 0, y: 20 });\n },\n\n enter(el: Element) {\n // @ts-ignore\n const { index } = el.dataset;\n gsap.to(el, {\n opacity: 1,\n y: 0,\n duration: 0.3,\n ease: Back.easeOut.config(1.7),\n delay: Number(index) * 0.1,\n });\n },\n\n leave(el: Element, done: () => void) {\n // @ts-ignore\n const { index } = el.dataset;\n const total = this.scenes.length;\n gsap.to(el, {\n opacity: 0,\n y: 20,\n duration: 0.26,\n ease: Back.easeIn.config(1.7),\n delay: (total - Number(index)) * 0.1,\n onComplete: () => {\n setTimeout(() => {\n done();\n }, 100);\n },\n });\n },\n },\n\n computed: {\n scene(): Scene {\n return this.$store.getters.currentScene;\n },\n scenes(): Scene[] {\n return this.$store.state.scenes;\n },\n index(): number {\n return this.$store.state.currentSceneIndex;\n },\n },\n});\n","import { render } from \"./ZoneInfo.vue?vue&type=template&id=2a0e94bc&scoped=true\"\nimport script from \"./ZoneInfo.vue?vue&type=script&lang=ts\"\nexport * from \"./ZoneInfo.vue?vue&type=script&lang=ts\"\n\nimport \"./ZoneInfo.vue?vue&type=style&index=0&id=2a0e94bc&scoped=true&lang=postcss\"\nscript.render = render\nscript.__scopeId = \"data-v-2a0e94bc\"\n\nexport default script","\n\n\n\n\n\n \n","","import { render } from \"./line.svg?vue&type=template&id=7efeb171\"\nconst script = {}\nscript.render = render\n\nexport default script","\nimport { defineComponent, ref } from 'vue';\nimport SVGLine from '@/svgs/line.svg';\n\nexport default defineComponent({\n name: 'Pointer',\n\n components: { SVGLine },\n\n props: {\n active: Boolean,\n name: String,\n },\n\n setup() {\n return {\n pointer: ref(),\n };\n },\n\n data() {\n return {\n nameCached: this.name,\n isActive: this.active,\n };\n },\n\n watch: {\n name() {\n if (this.name) {\n this.nameCached = this.name;\n } else if (!this.nameCached) {\n this.nameCached = this.name;\n } else {\n setTimeout(() => {\n this.nameCached = this.name;\n }, 500);\n }\n },\n }\n});\n","import { render } from \"./Pointer.vue?vue&type=template&id=39883e6d&scoped=true\"\nimport script from \"./Pointer.vue?vue&type=script&lang=ts\"\nexport * from \"./Pointer.vue?vue&type=script&lang=ts\"\n\nimport \"./Pointer.vue?vue&type=style&index=0&id=39883e6d&lang=postcss\"\nimport \"./Pointer.vue?vue&type=style&index=1&id=39883e6d&lang=postcss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-39883e6d\"\n\nexport default script","\n\n\n\n\n","","import { render } from \"./back.svg?vue&type=template&id=d1715c36\"\nconst script = {}\nscript.render = render\n\nexport default script","\nimport { defineComponent, PropType } from 'vue';\nimport Button from '@/components/Button.vue';\nimport SVGBack from '@/svgs/back.svg';\n\nexport default defineComponent({\n name: 'Back',\n props: { onClick: Function as PropType<(payload: MouseEvent) => void> },\n components: { Button, SVGBack },\n});\n","import { render } from \"./Back.vue?vue&type=template&id=3db98c94&scoped=true\"\nimport script from \"./Back.vue?vue&type=script&lang=ts\"\nexport * from \"./Back.vue?vue&type=script&lang=ts\"\n\nimport \"./Back.vue?vue&type=style&index=0&id=3db98c94&scoped=true&lang=postcss\"\nscript.render = render\nscript.__scopeId = \"data-v-3db98c94\"\n\nexport default script","\n\n\n\n\n","","import { render } from \"./guide.svg?vue&type=template&id=6cfdc4f7\"\nconst script = {}\nscript.render = render\n\nexport default script","","import { render } from \"./guide-line1.svg?vue&type=template&id=f274aee0\"\nconst script = {}\nscript.render = render\n\nexport default script","","import { render } from \"./guide-line2.svg?vue&type=template&id=dc3b8302\"\nconst script = {}\nscript.render = render\n\nexport default script","","import { render } from \"./guide-line4.svg?vue&type=template&id=0bb5add6\"\nconst script = {}\nscript.render = render\n\nexport default script","","import { render } from \"./guide-line5.svg?vue&type=template&id=2d7b91fc\"\nconst script = {}\nscript.render = render\n\nexport default script","","import { render } from \"./guide-line6.svg?vue&type=template&id=5addb3b8\"\nconst script = {}\nscript.render = render\n\nexport default script","\nimport { defineComponent, PropType } from 'vue';\nimport SVGGuide from '@/svgs/guide.svg';\nimport SVGLine1 from '@/svgs/guide-line1.svg';\nimport SVGLine2 from '@/svgs/guide-line2.svg';\n// import SVGLine3 from '@/svgs/guide-line3.svg';\nimport SVGLine4 from '@/svgs/guide-line4.svg';\nimport SVGLine5 from '@/svgs/guide-line5.svg';\nimport SVGLine6 from '@/svgs/guide-line6.svg';\nimport Button from './Button.vue';\n\nexport default defineComponent({\n name: 'Guide',\n components: {\n SVGGuide,\n Button,\n SVGLine1,\n SVGLine2,\n // SVGLine3,\n SVGLine4,\n SVGLine5,\n SVGLine6,\n },\n props: {\n onClick: Function as PropType<(payload: MouseEvent) => void>,\n isActive: Boolean,\n },\n methods: {\n // onClick(index: number) {},\n }\n});\n","import { render } from \"./Guide.vue?vue&type=template&id=24bf2d26&scoped=true\"\nimport script from \"./Guide.vue?vue&type=script&lang=ts\"\nexport * from \"./Guide.vue?vue&type=script&lang=ts\"\n\nimport \"./Guide.vue?vue&type=style&index=0&id=24bf2d26&scoped=true&lang=postcss\"\nscript.render = render\nscript.__scopeId = \"data-v-24bf2d26\"\n\nexport default script","\n\n\n","\nimport { defineComponent, ref } from 'vue';\nimport { Renderer, Mesh } from 'troisjs';\nimport { Vector3 } from 'three';\nimport gsap from 'gsap';\nimport { Extra } from '@/types';\n\nexport default defineComponent({\n name: 'ExtraObject',\n\n props: {\n data: { required: true, type: Object as () => Extra },\n renderer: { type: Object as () => typeof Renderer },\n },\n\n setup() {\n const meshRef = ref();\n return { mesh: meshRef };\n },\n\n async mounted() {\n if (this.mesh) {\n this.mesh.mesh.renderOrder = 99;\n await gsap.to(this.mesh.mesh.material, {\n opacity: 1,\n duration: 1,\n ease: 'sine.inOut',\n delay: 2,\n });\n }\n\n this.animate();\n },\n\n methods: {\n animate() {\n if (!this.mesh) return;\n const { x, y, z } = this.mesh.position;\n switch (this.data.type) {\n case 'drift':\n gsap.to(this.mesh.mesh.position, {\n x: x + 10,\n y: y - 100,\n z: z - 10,\n repeat: -1,\n duration: this.data.duration,\n yoyo: true,\n ease: 'sine.inOut',\n });\n\n break;\n\n case 'fade':\n gsap.to(this.mesh.mesh.material, {\n opacity: 0,\n repeat: -1,\n duration: this.data.duration,\n delay: this.data.delay || 0,\n yoyo: true,\n ease: 'sine.inOut',\n });\n\n break;\n default:\n break;\n }\n },\n },\n\n computed: {\n lookAt(): Vector3 | null {\n return this.renderer ? this.renderer.camera.position : null;\n }\n },\n});\n","import { render } from \"./ExtraObject.vue?vue&type=template&id=d7702924\"\nimport script from \"./ExtraObject.vue?vue&type=script&lang=ts\"\nexport * from \"./ExtraObject.vue?vue&type=script&lang=ts\"\nscript.render = render\n\nexport default script","\nimport { defineComponent, ref } from 'vue';\nimport { useStore } from 'vuex';\nimport { useRoute } from 'vue-router';\nimport { Vector3, Mesh } from 'three';\nimport { Renderer, Group } from 'troisjs';\nimport gsap, { Bounce, Power4 } from 'gsap';\nimport Menu from '@/components/Menu.vue';\nimport Navigation from '@/components/Navigation/Navigation.vue';\nimport Modal from '@/components/Modal/Modal.vue';\nimport InfoBox from '@/components/InfoBox.vue';\nimport EventFeed from '@/components/EventFeed.vue';\nimport Hotspots from '@/components/Hotspots/Hotspots.vue';\nimport Tiles from '@/components/Tiles';\nimport Sprite from '@/components/Sprite';\nimport EntrancePoint from '@/components/EntrancePoint.vue';\nimport ZoneInfo from '@/components/ZoneInfo/ZoneInfo.vue';\nimport Pointer from '@/components/Pointer.vue';\nimport BackButton from '@/components/Back.vue';\nimport Guide from '@/components/Guide.vue';\nimport ExtraObject from '@/components/ExtraObject.vue';\nimport { Scene } from '@/types';\nimport router from '@/router';\n\ninterface PointerEnterEvent extends MouseEvent {\n over: boolean;\n}\n\nexport default defineComponent({\n name: 'Home',\n components: {\n Menu,\n Navigation,\n Hotspots,\n Modal,\n EventFeed,\n Tiles,\n Sprite,\n InfoBox,\n ZoneInfo,\n Pointer,\n BackButton,\n Guide,\n EntrancePoint,\n ExtraObject,\n },\n\n async setup() {\n const route = useRoute();\n const canvasRef = ref();\n const tilesRef = ref();\n const navigationRef = ref();\n const rendererRef = ref();\n const hotspotsRef = ref();\n const spritesRef = ref();\n const entranceRef = ref();\n const threeRef = ref();\n const controlsRef = ref();\n const pointerRef = ref();\n const store = useStore();\n const scenes: Scene[] = await store.dispatch('getScenes');\n let isEntrance = true;\n\n await store.dispatch('getHotspotInformation');\n // await store.dispatch('getLive');\n\n if (route.params.slug || route.params.questionSlug) {\n const sceneIndex = route.params.questionSlug ? scenes.findIndex(scene => (\n !!scene.hotspots.find(hotspot => hotspot.slug === route.params.questionSlug)\n )) : scenes.findIndex(scene => scene.slug === route.params.slug);\n\n if (sceneIndex > -1) {\n isEntrance = false;\n await store.dispatch('setSceneIndex', sceneIndex);\n }\n }\n\n return {\n isScaling: false,\n isEntranceDefault: isEntrance,\n tiles: tilesRef,\n navigation: navigationRef,\n pointer: pointerRef,\n renderer: rendererRef,\n canvas: canvasRef,\n hotspots: hotspotsRef,\n sprites: spritesRef,\n entrance: entranceRef,\n controls: controlsRef as any,\n three: threeRef as any,\n };\n },\n\n data() {\n return {\n isFeedOpened: false,\n isInfoBoxActive: false,\n isGuideActive: false,\n isMouseDown: false,\n isTileAnimating: false,\n isTouchMoving: false,\n isEntrance: !!this.isEntranceDefault,\n infoId: 0,\n pointerName: '',\n moveCache: { x: 0, y: 0 },\n xMove: 0,\n };\n },\n\n mounted() {\n if (this.renderer) {\n this.three = this.renderer.three;\n this.controls = this.three.cameraCtrl;\n this.canvas = this.renderer.canvas as HTMLCanvasElement;\n\n if (this.$device.mobile) {\n this.controls.domElement.addEventListener('touchstart', this.onTouchDown);\n this.controls.domElement.addEventListener('touchmove', this.onTouchMove);\n this.controls.domElement.addEventListener('touchend', this.onTouchEnd);\n } else {\n this.canvas.addEventListener('pointerdown', this.onMouseDown);\n this.canvas.addEventListener('pointerup', this.onMouseUp);\n }\n }\n },\n\n watch: {\n isTextureReady(): void {\n if (this.isTextureReady) {\n // if the url contains info slug, open the modal\n if (this.$route.params.questionSlug && this.currentScene) {\n const hotspot = this.currentScene.hotspots.find(item => (\n item.slug === this.$route.params.questionSlug\n ));\n\n if (hotspot) {\n setTimeout(() => {\n this.infoId = hotspot.id;\n this.isInfoBoxActive = true;\n }, 500);\n }\n }\n }\n },\n\n $route (to, from) {\n if (to.path !== from.path) {\n this.isTouchMoving = false;\n }\n },\n },\n\n computed: {\n currentScene(): Scene {\n return this.$store.getters.currentScene;\n },\n isTextureReady() {\n return this.$store.state.isTextureReady;\n },\n },\n\n methods: {\n onTouchMove() {\n if (!this.isTouchMoving) {\n this.isTouchMoving = true;\n }\n },\n\n onTouchEnd() {\n if (this.isTouchMoving) {\n this.isTouchMoving = false;\n }\n\n if (this.renderer) {\n this.renderer.$pointer.intersectObjects.forEach((item: any) => {\n if (item.userData.over) {\n // eslint-disable-next-line no-param-reassign\n item.userData.over = false;\n }\n });\n }\n },\n\n onTouchDown(event: TouchEvent) {\n if (!this.renderer || !this.$device.mobile) return;\n console.log('touch down', this.renderer.$pointer);\n this.isTouchMoving = false;\n const mouse = { x: 0, y: 0 };\n mouse.x = +(event.targetTouches[0].pageX / window.innerWidth) * 2 + -1;\n mouse.y = -(event.targetTouches[0].pageY / window.innerHeight) * 2 + 1;\n this.renderer.$pointer.intersect();\n },\n\n onMouseUp() {\n setTimeout(() => {\n this.isMouseDown = false;\n }, 100);\n\n if (this.canvas) {\n this.canvas.removeEventListener('pointermove', this.onMouseMove);\n this.moveCache = { x: 0, y: 0 };\n }\n },\n\n onMouseDown() {\n this.pointerName = '';\n },\n\n onMouseMove(event: MouseEvent) {\n this.xMove = event.offsetX;\n if (!this.moveCache.x) {\n this.moveCache.x = event.offsetX;\n } else if (Math.abs(this.moveCache.x - event.offsetX) > 10) {\n if (!this.isMouseDown) {\n this.isMouseDown = true;\n }\n }\n },\n\n onPointerLeave(event: any) {\n document.body.style.cursor = '';\n this.pointerName = '';\n },\n\n onPointerClick(event: any) {\n console.log('click');\n if (this.isMouseDown || this.isEntrance) return;\n const { slug, id } = event.component;\n this.infoId = id;\n this.isInfoBoxActive = true;\n this.isTouchMoving = false;\n // eslint-disable-next-line no-param-reassign\n // event.over = false;\n\n if (this.currentScene) {\n router.push(`/${this.currentScene.slug}/${slug}`);\n }\n },\n\n onPointerOver(event: any) {\n console.log('over');\n // if (this.$device.mobile) {\n // this.onPointerClick(event);\n // }\n },\n\n onPointerEnter(event: any) {\n console.log('enter', this.isTouchMoving);\n if (this.isScaling || !this.renderer || this.isEntrance) return;\n // eslint-disable-next-line no-param-reassign\n // event.over = false;\n\n if (this.$device.mobile) {\n if (!this.isTouchMoving) {\n this.onPointerClick(event);\n }\n return;\n }\n\n this.isScaling = true;\n\n const mesh = event.intersect.object;\n const { name } = event.component;\n const { scale } = mesh;\n const vector = new Vector3();\n const duration = 1;\n document.body.style.cursor = `url(\"${this.$baseUrl}/images/magnify.png\"), auto`;\n\n if (this.pointer) {\n mesh.updateWorldMatrix(true, false);\n mesh.getWorldPosition(vector);\n vector.project(this.renderer.camera);\n const x = (vector.x * 0.5 + 0.5) * this.renderer.size.width;\n const y = (vector.y * -0.5 + 0.5) * this.renderer.size.height;\n this.pointerName = name;\n gsap.set(this.pointer.pointer, { x: x + 120, y: y - 68 });\n }\n\n gsap.to(event.intersect.object.scale, {\n duration: duration / 4,\n x: scale.x * 1.2,\n y: scale.y * 1.2,\n ease: 'power2.out',\n });\n\n gsap.to(event.intersect.object.scale, {\n duration: duration / 2,\n x: scale.x,\n y: scale.y,\n ease: Bounce.easeOut,\n delay: duration / 4,\n onComplete: () => { this.isScaling = false; }\n });\n },\n\n onPointerEnterEntrance(e: PointerEnterEvent, index: number) {\n document.body.style.cursor = e.over ? `url(\"${this.$baseUrl}/images/magnify.png\"), auto` : '';\n if (this.$device.mobile && !this.isTouchMoving) {\n this.onEntranceClick(e, index);\n }\n },\n\n onGuideClick() {\n this.isGuideActive = !this.isGuideActive;\n },\n\n onInfoBoxClose() {\n this.infoId = 0;\n this.isInfoBoxActive = false;\n router.push(`/${this.currentScene.slug}`);\n },\n\n onMenuClick() {\n this.isFeedOpened = true;\n },\n\n onMenuClose() {\n this.isFeedOpened = false;\n },\n\n async onBackClick() {\n if (!this.renderer || !this.renderer.camera || !this.tiles) { return; }\n await this.$store.dispatch('setSceneIndex', -1);\n router.push('/');\n this.isEntrance = true;\n\n gsap.to(this.renderer.camera.position, {\n x: 0,\n y: 0,\n z: 5,\n duration: 2,\n ease: Power4.easeOut,\n });\n\n this.isTileAnimating = true;\n await this.tiles.handleClick(null, -1);\n this.isTileAnimating = false;\n },\n\n async onZoneClick(e: MouseEvent, index: number) {\n if (!this.tiles) { return; }\n\n if (this.navigation) {\n this.navigation.close();\n }\n\n if (this.hotspots) {\n const meshes = this.hotspots.hotspots.o3d.children as Mesh[];\n const promises: gsap.core.Tween[] = [];\n const value = { x: 0, y: 0, z: 0 };\n\n meshes.forEach(mesh => {\n promises.push(gsap.to(mesh.scale, { ...value, duration: 0.4 }));\n });\n\n await Promise.all(promises);\n }\n\n await this.$store.dispatch('setSceneIndex', index);\n\n if (this.currentScene) {\n router.push(`/${this.currentScene.slug}`);\n }\n\n this.isTileAnimating = true;\n await this.tiles.handleClick(e, index);\n this.isTileAnimating = false;\n },\n\n async onEntranceClick(e: MouseEvent, index: number) {\n if (this.isMouseDown || !this.tiles) return;\n this.isEntrance = false;\n await this.$store.dispatch('setSceneIndex', index);\n document.body.style.cursor = '';\n\n if (this.currentScene) {\n router.push(`/${this.currentScene.slug}`);\n }\n\n this.isTileAnimating = true;\n await this.tiles.handleClick(e, index);\n this.isTileAnimating = false;\n },\n }\n});\n","import { render } from \"./Home.vue?vue&type=template&id=da642466&scoped=true\"\nimport script from \"./Home.vue?vue&type=script&lang=ts\"\nexport * from \"./Home.vue?vue&type=script&lang=ts\"\n\nimport \"./Home.vue?vue&type=style&index=0&id=da642466&lang=postcss\"\nimport \"./Home.vue?vue&type=style&index=1&id=da642466&lang=postcss&scoped=true\"\nscript.render = render\nscript.__scopeId = \"data-v-da642466\"\n\nexport default script","\nimport { defineComponent, ref, onErrorCaptured } from 'vue';\nimport Loader from '@/components/Loader.vue';\nimport modalStore from '@/components/Modal/store';\nimport Home from './Home.vue';\n\nexport default defineComponent({\n name: 'Home Index',\n components: {\n Home,\n Loader,\n },\n\n setup () {\n const error = ref(null);\n onErrorCaptured(e => {\n // @ts-ignore\n error.value = e;\n return true;\n });\n return { error };\n },\n\n mounted() {\n // this.intro();\n },\n\n watch: {\n isTextureReady() {\n if (this.isTextureReady) {\n // const introStatus = readCookie.getItem('intro');\n const introStatus = localStorage.getItem('intro');\n\n if (introStatus !== 'true') {\n this.intro();\n }\n }\n }\n },\n\n methods: {\n intro() {\n localStorage.setItem('intro', 'true');\n // readCookie.setItem({\n // value: 'true',\n // key: 'intro',\n // path: '/',\n // });\n\n modalStore.show({\n width: window.innerWidth * 0.925,\n height: window.innerHeight * 0.925,\n videoIframeId: 'QK82KXtHAjI',\n noHead: true,\n });\n }\n },\n\n computed: {\n isTextureReady() {\n return this.$store.state.isTextureReady;\n },\n },\n});\n","import { render } from \"./index.vue?vue&type=template&id=53b77d98&scoped=true\"\nimport script from \"./index.vue?vue&type=script&lang=ts\"\nexport * from \"./index.vue?vue&type=script&lang=ts\"\n\nimport \"./index.vue?vue&type=style&index=0&id=53b77d98&scoped=true&lang=postcss\"\nscript.render = render\nscript.__scopeId = \"data-v-53b77d98\"\n\nexport default script","import { createRouter, createWebHistory, RouteRecordRaw } from 'vue-router';\nimport { BASE_URL } from '@/constants';\nimport Home from '../views/Home/index.vue';\n\nconst routes: Array = [\n {\n path: '/',\n component: Home,\n name: 'Home',\n children: [\n {\n path: ':slug',\n component: Home,\n children: [\n {\n path: ':questionSlug',\n component: Home,\n },\n ]\n },\n ]\n },\n];\n\nconst router = createRouter({\n history: createWebHistory(`${BASE_URL}/`),\n routes,\n});\n\nexport default router;\n","import { createStore } from 'vuex';\nimport axios from 'axios';\nimport dayjs from 'dayjs';\nimport { Vector3 } from 'three';\nimport { BASE_URL } from '@/constants';\n\nimport {\n HotspotInformation,\n Scene,\n Events,\n Live,\n LiveData,\n} from '@/types';\n\nexport type State = {\n hotspotInformation: HotspotInformation[];\n scenes: Scene[];\n live: Live | null;\n events: Events[] | null;\n currentSceneIndex: number;\n isTextureReady: boolean;\n loadProgress: number;\n readyState: { [key: string]: boolean } | Record;\n}\n\nconst SET_HOTSPOT_INFORMATION = 'SET_HOTSPOT_INFORMATION';\nconst SET_EVENTS = 'SET_EVENTS';\nconst SET_SCENES = 'SET_SCENES';\nconst SET_CURRENT_SCENE_INDEX = 'SET_CURRENT_SCENE_INDEX';\nconst SET_READY_STATE = 'SET_READY_STATE';\nconst SET_TEXTURE_STATE = 'SET_TEXTURE_STATE';\nconst SET_LOAD_PROGRESS = 'SET_LOAD_PROGRESS';\nconst SET_LIVE = 'SET_LIVE';\nconst SET_LIVE_STATE = 'SET_LIVE_STATE';\n\nconst getLiveState = (live: LiveData[]) => {\n if (!live) return null;\n let current: LiveData | null = null;\n\n live.forEach(item => {\n const date = dayjs.tz(new Date(), 'Europe/London');\n const startDate = dayjs.tz(item.startDate, 'Europe/London');\n const endDate = dayjs.tz(item.endDate, 'Europe/London');\n\n if (date.isBetween(startDate, endDate)) {\n current = item;\n }\n });\n\n return current;\n};\n\nconst createEventsData = (events: Events[]) => {\n const ondemand: Events[] = [];\n const upcoming: Events[] = [];\n events.forEach(item => {\n if (dayjs(item.endDate).isBefore(new Date())) {\n ondemand.push(item);\n } else {\n upcoming.push(item);\n }\n });\n return { ondemand, upcoming };\n};\n\nconst vectorise = (data: { x: number, y: number, z: number }) => new Vector3(\n data.x,\n data.y,\n data.z,\n);\n\nexport default createStore({\n state: {\n hotspotInformation: [],\n scenes: [],\n events: null,\n live: null,\n currentSceneIndex: -1,\n loadProgress: 0,\n isTextureReady: false,\n readyState: {},\n },\n\n mutations: {\n [SET_HOTSPOT_INFORMATION](state, information: HotspotInformation[]) {\n state.hotspotInformation = information;\n },\n\n [SET_SCENES](state, scenes: Scene[]) {\n const modifiedScenes = scenes.map(scene => ({\n ...scene,\n sprites: scene.sprites ? scene.sprites.map(sprite => {\n const position = vectorise(sprite.position);\n const scale = !sprite.scale ? new Vector3(\n ((500 * position.length()) / 2500),\n ((500 * position.length()) / 2500),\n 1,\n ) : sprite.scale;\n return { ...sprite, position, scale };\n }) : undefined,\n hotspots: scene.hotspots.map(hotspot => {\n const position = vectorise(hotspot.position);\n const scale = new Vector3(\n ((400 * position.length()) / 5000),\n ((400 * position.length()) / 5000),\n 1,\n );\n return { ...hotspot, position, scale };\n })\n }));\n state.scenes = modifiedScenes;\n },\n\n [SET_CURRENT_SCENE_INDEX](state, index) {\n state.currentSceneIndex = index;\n },\n\n [SET_EVENTS](state, events: Events[]) {\n const eventsWithDate = events.map(item => ({\n ...item,\n startDateFormat: dayjs.tz(item.startDate, 'Europe/London').format('dddd DD MMM YYYY HH:mm'),\n endDateFormat: dayjs.tz(item.endDate, 'Europe/London').format('dddd DD MMM YYYY HH:mm'),\n endTimeFormat: dayjs.tz(item.endDate, 'Europe/London').format('HH:mm'),\n }));\n state.events = eventsWithDate;\n },\n\n [SET_LIVE](state, { data, interval }) {\n const current = getLiveState(data);\n state.live = {\n data,\n current,\n interval,\n isActive: !!current,\n };\n },\n\n [SET_LIVE_STATE](state, current) {\n if (state.live) {\n state.live.current = current;\n state.live.isActive = !!current;\n }\n },\n\n [SET_LOAD_PROGRESS](state, progress) {\n state.loadProgress = progress;\n },\n\n [SET_TEXTURE_STATE](state, condition) {\n state.isTextureReady = condition;\n },\n\n [SET_READY_STATE](state, value: { key: string; condition: boolean }) {\n state.readyState[value.key] = value.condition;\n },\n },\n\n actions: {\n getHotspotInformation({ commit }) {\n return axios.get(`${BASE_URL}/data/hotspotInformation.json`).then(res => {\n commit(SET_HOTSPOT_INFORMATION, res.data);\n });\n },\n\n getScenes({ commit }) {\n return axios.get(`${BASE_URL}/data/scenes.json`).then(res => {\n commit(SET_SCENES, res.data);\n return res.data;\n });\n },\n\n getEvents({ commit }) {\n return axios.get(`${BASE_URL}/data/events.json`).then(res => {\n commit(SET_EVENTS, res.data);\n return res.data;\n });\n },\n\n getLive({ commit, dispatch }) {\n return axios.get(`${BASE_URL}/data/live.json`).then(res => {\n const f = () => dispatch('setLiveState');\n const interval = setInterval(f, 10000);\n commit(SET_LIVE, { data: res.data, interval });\n return res.data;\n });\n },\n\n setSceneIndex({ commit }, index: number) {\n commit(SET_CURRENT_SCENE_INDEX, index);\n },\n\n setLoadProgress({ commit }, value: boolean) {\n commit(SET_LOAD_PROGRESS, value);\n },\n\n setTextureState({ commit }, value: boolean) {\n commit(SET_TEXTURE_STATE, value);\n },\n\n setReadyState({ commit }, value: { key: string; condition: boolean }) {\n commit(SET_CURRENT_SCENE_INDEX, value);\n },\n\n setLiveState({ commit, getters }) {\n const current = getLiveState(getters.live);\n return commit(SET_LIVE_STATE, current);\n },\n },\n\n getters: {\n information: state => (id: number) => state.hotspotInformation.find(i => i.id === id),\n currentScene: state => state.scenes[state.currentSceneIndex],\n live: state => state.live ? state.live.data : null,\n allEvents: state => state.events ? createEventsData(state.events) : null,\n },\n modules: {\n },\n});\n","import { createApp } from 'vue';\nimport { Store } from 'vuex';\nimport { TroisJSVuePlugin } from 'troisjs';\nimport PerfectScrollbar from 'vue3-perfect-scrollbar';\nimport Fragment from 'vue-fragment';\nimport 'vue3-perfect-scrollbar/dist/vue3-perfect-scrollbar.css';\nimport dayjs from 'dayjs';\nimport utc from 'dayjs/plugin/utc';\nimport timezone from 'dayjs/plugin/timezone';\nimport isBetween from 'dayjs/plugin/isBetween';\nimport '@/css/style.css';\nimport DeviceDetector, { IDeviceDetector } from '@/vendor/vue-device-detector';\n\nimport App from './App.vue';\nimport router from './router';\nimport store, { State } from './store';\nimport { BASE_URL } from './constants';\n// import 'normalize.css';\n\ndeclare module '@vue/runtime-core' {\n interface ComponentCustomProperties {\n $store: Store;\n $device: IDeviceDetector;\n $baseUrl: string;\n }\n}\n\ndayjs.extend(utc);\ndayjs.extend(timezone);\ndayjs.extend(isBetween);\n\nconst app = createApp(App);\n\napp\n .use(store)\n .use(router)\n .use(TroisJSVuePlugin)\n .use(Fragment.Plugin)\n .use(PerfectScrollbar)\n .use(DeviceDetector)\n .mount('#app');\n\napp.config.globalProperties.$baseUrl = BASE_URL;\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n","var deferred = [];\n__webpack_require__.O = function(result, chunkIds, fn, priority) {\n\tif(chunkIds) {\n\t\tpriority = priority || 0;\n\t\tfor(var i = deferred.length; i > 0 && deferred[i - 1][2] > priority; i--) deferred[i] = deferred[i - 1];\n\t\tdeferred[i] = [chunkIds, fn, priority];\n\t\treturn;\n\t}\n\tvar notFulfilled = Infinity;\n\tfor (var i = 0; i < deferred.length; i++) {\n\t\tvar chunkIds = deferred[i][0];\n\t\tvar fn = deferred[i][1];\n\t\tvar priority = deferred[i][2];\n\t\tvar fulfilled = true;\n\t\tfor (var j = 0; j < chunkIds.length; j++) {\n\t\t\tif ((priority & 1 === 0 || notFulfilled >= priority) && Object.keys(__webpack_require__.O).every(function(key) { return __webpack_require__.O[key](chunkIds[j]); })) {\n\t\t\t\tchunkIds.splice(j--, 1);\n\t\t\t} else {\n\t\t\t\tfulfilled = false;\n\t\t\t\tif(priority < notFulfilled) notFulfilled = priority;\n\t\t\t}\n\t\t}\n\t\tif(fulfilled) {\n\t\t\tdeferred.splice(i--, 1)\n\t\t\tresult = fn();\n\t\t}\n\t}\n\treturn result;\n};","// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t826: 0\n};\n\n// no chunk on demand loading\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n__webpack_require__.O.j = function(chunkId) { return installedChunks[chunkId] === 0; };\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tfor(moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) var result = runtime(__webpack_require__);\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkIds[i]] = 0;\n\t}\n\treturn __webpack_require__.O(result);\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkdev_royal_society_summer\"] = self[\"webpackChunkdev_royal_society_summer\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));","// startup\n// Load entry module and return exports\n// This entry module depends on other loaded chunks and execution need to be delayed\n__webpack_require__.O(undefined, [998], function() { return __webpack_require__(223); })\nvar __webpack_exports__ = __webpack_require__.O(undefined, [998], function() { return __webpack_require__(895); })\n__webpack_exports__ = __webpack_require__.O(__webpack_exports__);\n"],"sourceRoot":""}