{"version":3,"sources":["webpack:///../../../src/mixins/measurable/index.ts","webpack:///./src/views/Hero.vue?caa0","webpack:///src/views/Hero.vue","webpack:///./src/views/Hero.vue?c9dc","webpack:///./src/views/Hero.vue","webpack:///../../../src/directives/intersect/index.ts","webpack:///../../../src/components/VResponsive/VResponsive.ts","webpack:///../../../src/components/VResponsive/index.ts","webpack:///../../../src/components/VImg/VImg.ts","webpack:///./src/assets/hero.png"],"names":["name","props","height","Number","maxHeight","maxWidth","minHeight","minWidth","width","String","computed","measurableStyles","styles","this","render","_vm","_h","$createElement","_c","_self","attrs","staticClass","$vuetify","breakpoint","mdAndUp","undefined","class","domProps","_s","schema","basics","label","staticRenderFns","component","VImg","VRow","inserted","modifiers","binding","value","handler","options","observer","IntersectionObserver","entries","el","isIntersecting","Boolean","entry","unbind","init","observe","Intersect","mixins","aspectRatio","computedAspectRatio","aspectStyle","paddingBottom","__cachedSizer","style","methods","genContent","$slots","h","on","$listeners","hasIntersect","window","directives","intersect","alt","contain","eager","gradient","lazySrc","type","default","root","rootMargin","threshold","position","sizes","src","srcset","transition","data","currentSrc","image","isLoading","calculatedAspectRatio","naturalWidth","normalisedSrc","aspect","__cachedImage","backgroundImage","backgroundPosition","key","mode","watch","loadImage","mounted","lazyImg","onLoad","onError","console","getSrc","err","pollForSize","timeout","poll","naturalHeight","setTimeout","content","__genPlaceholder","placeholder","appear","node","once","role","module","exports"],"mappings":"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","file":"js/chunk-29c6579a.6b4b78a2.js","sourcesContent":["// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport Vue, { PropType } from 'vue'\n\nexport type NumberOrNumberString = PropType\n\nexport default Vue.extend({\n name: 'measurable',\n\n props: {\n height: [Number, String] as NumberOrNumberString,\n maxHeight: [Number, String] as NumberOrNumberString,\n maxWidth: [Number, String] as NumberOrNumberString,\n minHeight: [Number, String] as NumberOrNumberString,\n minWidth: [Number, String] as NumberOrNumberString,\n width: [Number, String] as NumberOrNumberString,\n },\n\n computed: {\n measurableStyles (): object {\n const styles: Record = {}\n\n const height = convertToUnit(this.height)\n const minHeight = convertToUnit(this.minHeight)\n const minWidth = convertToUnit(this.minWidth)\n const maxHeight = convertToUnit(this.maxHeight)\n const maxWidth = convertToUnit(this.maxWidth)\n const width = convertToUnit(this.width)\n\n if (height) styles.height = height\n if (minHeight) styles.minHeight = minHeight\n if (minWidth) styles.minWidth = minWidth\n if (maxHeight) styles.maxHeight = maxHeight\n if (maxWidth) styles.maxWidth = maxWidth\n if (width) styles.width = width\n\n return styles\n },\n },\n})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',{attrs:{\"id\":\"hero\"}},[_c('v-img',{attrs:{\"src\":require('@/assets/hero.png'),\"height\":\"100vh\"}},[_c('v-row',{staticClass:\"fill-height text-right pa-md-5 pa-3 mx-0\",attrs:{\"justify\":_vm.$vuetify.breakpoint.mdAndUp ? 'end' : undefined,\"align\":\"end\"}},[_c('div',[_c('div',{staticClass:\"text-uppercase\",class:(\"display-\" + (_vm.$vuetify.breakpoint.mdAndUp ? '3' : '1')),domProps:{\"textContent\":_vm._s(_vm.schema.basics.name)}}),_c('h1',{staticClass:\"primary--text text-uppercase\",class:(\"display-\" + (_vm.$vuetify.breakpoint.mdAndUp ? '4' : '2')),domProps:{\"textContent\":_vm._s(_vm.schema.basics.label)}})])])],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Hero.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/vuetify-loader/lib/loader.js??ref--18-0!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Hero.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Hero.vue?vue&type=template&id=e0c8270a&\"\nimport script from \"./Hero.vue?vue&type=script&lang=js&\"\nexport * from \"./Hero.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VImg } from 'vuetify/lib/components/VImg';\nimport { VRow } from 'vuetify/lib/components/VGrid';\ninstallComponents(component, {VImg,VRow})\n","import { VNodeDirective } from 'vue/types/vnode'\n\ntype ObserveHandler = (\n entries: IntersectionObserverEntry[],\n observer: IntersectionObserver,\n isIntersecting: boolean,\n) => void\n\ninterface ObserveVNodeDirective extends Omit {\n value?: ObserveHandler | { handler: ObserveHandler, options?: IntersectionObserverInit }\n modifiers?: {\n once?: boolean\n quiet?: boolean\n }\n}\n\nfunction inserted (el: HTMLElement, binding: ObserveVNodeDirective) {\n const modifiers = binding.modifiers || {}\n const value = binding.value\n const { handler, options } = typeof value === 'object'\n ? value\n : { handler: value, options: {} }\n const observer = new IntersectionObserver((\n entries: IntersectionObserverEntry[] = [],\n observer: IntersectionObserver\n ) => {\n /* istanbul ignore if */\n if (!el._observe) return // Just in case, should never fire\n\n // If is not quiet or has already been\n // initted, invoke the user callback\n if (\n handler && (\n !modifiers.quiet ||\n el._observe.init\n )\n ) {\n const isIntersecting = Boolean(entries.find(entry => entry.isIntersecting))\n\n handler(entries, observer, isIntersecting)\n }\n\n // If has already been initted and\n // has the once modifier, unbind\n if (el._observe.init && modifiers.once) unbind(el)\n // Otherwise, mark the observer as initted\n else (el._observe.init = true)\n }, options)\n\n el._observe = { init: false, observer }\n\n observer.observe(el)\n}\n\nfunction unbind (el: HTMLElement) {\n /* istanbul ignore if */\n if (!el._observe) return\n\n el._observe.observer.unobserve(el)\n delete el._observe\n}\n\nexport const Intersect = {\n inserted,\n unbind,\n}\n\nexport default Intersect\n","import './VResponsive.sass'\n\n// Mixins\nimport Measurable, { NumberOrNumberString } from '../../mixins/measurable'\n\n// Types\nimport { VNode } from 'vue'\n\n// Utils\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(Measurable).extend({\n name: 'v-responsive',\n\n props: {\n aspectRatio: [String, Number] as NumberOrNumberString,\n },\n\n computed: {\n computedAspectRatio (): number {\n return Number(this.aspectRatio)\n },\n aspectStyle (): object | undefined {\n return this.computedAspectRatio\n ? { paddingBottom: (1 / this.computedAspectRatio) * 100 + '%' }\n : undefined\n },\n __cachedSizer (): VNode | [] {\n if (!this.aspectStyle) return []\n\n return this.$createElement('div', {\n style: this.aspectStyle,\n staticClass: 'v-responsive__sizer',\n })\n },\n },\n\n methods: {\n genContent (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-responsive__content',\n }, this.$slots.default)\n },\n },\n\n render (h): VNode {\n return h('div', {\n staticClass: 'v-responsive',\n style: this.measurableStyles,\n on: this.$listeners,\n }, [\n this.__cachedSizer,\n this.genContent(),\n ])\n },\n})\n","import VResponsive from './VResponsive'\n\nexport { VResponsive }\nexport default VResponsive\n","// Styles\nimport './VImg.sass'\n\n// Directives\nimport intersect from '../../directives/intersect'\n\n// Types\nimport { VNode } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\n// Components\nimport VResponsive from '../VResponsive'\n\n// Utils\nimport { consoleError, consoleWarn } from '../../util/console'\n\n// not intended for public use, this is passed in by vuetify-loader\nexport interface srcObject {\n src: string\n srcset?: string\n lazySrc: string\n aspect: number\n}\n\nconst hasIntersect = typeof window !== 'undefined' && 'IntersectionObserver' in window\n\n/* @vue/component */\nexport default VResponsive.extend({\n name: 'v-img',\n\n directives: { intersect },\n\n props: {\n alt: String,\n contain: Boolean,\n eager: Boolean,\n gradient: String,\n lazySrc: String,\n options: {\n type: Object,\n // For more information on types, navigate to:\n // https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API\n default: () => ({\n root: undefined,\n rootMargin: undefined,\n threshold: undefined,\n }),\n },\n position: {\n type: String,\n default: 'center center',\n },\n sizes: String,\n src: {\n type: [String, Object],\n default: '',\n } as PropValidator,\n srcset: String,\n transition: {\n type: [Boolean, String],\n default: 'fade-transition',\n },\n },\n\n data () {\n return {\n currentSrc: '', // Set from srcset\n image: null as HTMLImageElement | null,\n isLoading: true,\n calculatedAspectRatio: undefined as number | undefined,\n naturalWidth: undefined as number | undefined,\n }\n },\n\n computed: {\n computedAspectRatio (): number {\n return Number(this.normalisedSrc.aspect || this.calculatedAspectRatio)\n },\n normalisedSrc (): srcObject {\n return typeof this.src === 'string'\n ? {\n src: this.src,\n srcset: this.srcset,\n lazySrc: this.lazySrc,\n aspect: Number(this.aspectRatio || 0),\n } : {\n src: this.src.src,\n srcset: this.srcset || this.src.srcset,\n lazySrc: this.lazySrc || this.src.lazySrc,\n aspect: Number(this.aspectRatio || this.src.aspect),\n }\n },\n __cachedImage (): VNode | [] {\n if (!(this.normalisedSrc.src || this.normalisedSrc.lazySrc)) return []\n\n const backgroundImage: string[] = []\n const src = this.isLoading ? this.normalisedSrc.lazySrc : this.currentSrc\n\n if (this.gradient) backgroundImage.push(`linear-gradient(${this.gradient})`)\n if (src) backgroundImage.push(`url(\"${src}\")`)\n\n const image = this.$createElement('div', {\n staticClass: 'v-image__image',\n class: {\n 'v-image__image--preload': this.isLoading,\n 'v-image__image--contain': this.contain,\n 'v-image__image--cover': !this.contain,\n },\n style: {\n backgroundImage: backgroundImage.join(', '),\n backgroundPosition: this.position,\n },\n key: +this.isLoading,\n })\n\n /* istanbul ignore if */\n if (!this.transition) return image\n\n return this.$createElement('transition', {\n attrs: {\n name: this.transition,\n mode: 'in-out',\n },\n }, [image])\n },\n },\n\n watch: {\n src () {\n // Force re-init when src changes\n if (!this.isLoading) this.init(undefined, undefined, true)\n else this.loadImage()\n },\n '$vuetify.breakpoint.width': 'getSrc',\n },\n\n mounted () {\n this.init()\n },\n\n methods: {\n init (\n entries?: IntersectionObserverEntry[],\n observer?: IntersectionObserver,\n isIntersecting?: boolean\n ) {\n // If the current browser supports the intersection\n // observer api, the image is not observable, and\n // the eager prop isn't being used, do not load\n if (\n hasIntersect &&\n !isIntersecting &&\n !this.eager\n ) return\n\n if (this.normalisedSrc.lazySrc) {\n const lazyImg = new Image()\n lazyImg.src = this.normalisedSrc.lazySrc\n this.pollForSize(lazyImg, null)\n }\n /* istanbul ignore else */\n if (this.normalisedSrc.src) this.loadImage()\n },\n onLoad () {\n this.getSrc()\n this.isLoading = false\n this.$emit('load', this.src)\n },\n onError () {\n consoleError(\n `Image load failed\\n\\n` +\n `src: ${this.normalisedSrc.src}`,\n this\n )\n this.$emit('error', this.src)\n },\n getSrc () {\n /* istanbul ignore else */\n if (this.image) this.currentSrc = this.image.currentSrc || this.image.src\n },\n loadImage () {\n const image = new Image()\n this.image = image\n\n image.onload = () => {\n /* istanbul ignore if */\n if (image.decode) {\n image.decode().catch((err: DOMException) => {\n consoleWarn(\n `Failed to decode image, trying to render anyway\\n\\n` +\n `src: ${this.normalisedSrc.src}` +\n (err.message ? `\\nOriginal error: ${err.message}` : ''),\n this\n )\n }).then(this.onLoad)\n } else {\n this.onLoad()\n }\n }\n image.onerror = this.onError\n\n image.src = this.normalisedSrc.src\n this.sizes && (image.sizes = this.sizes)\n this.normalisedSrc.srcset && (image.srcset = this.normalisedSrc.srcset)\n\n this.aspectRatio || this.pollForSize(image)\n this.getSrc()\n },\n pollForSize (img: HTMLImageElement, timeout: number | null = 100) {\n const poll = () => {\n const { naturalHeight, naturalWidth } = img\n\n if (naturalHeight || naturalWidth) {\n this.naturalWidth = naturalWidth\n this.calculatedAspectRatio = naturalWidth / naturalHeight\n } else {\n timeout != null && setTimeout(poll, timeout)\n }\n }\n\n poll()\n },\n genContent () {\n const content: VNode = VResponsive.options.methods.genContent.call(this)\n if (this.naturalWidth) {\n this._b(content.data!, 'div', {\n style: { width: `${this.naturalWidth}px` },\n })\n }\n\n return content\n },\n __genPlaceholder (): VNode | void {\n if (this.$slots.placeholder) {\n const placeholder = this.isLoading\n ? [this.$createElement('div', {\n staticClass: 'v-image__placeholder',\n }, this.$slots.placeholder)]\n : []\n\n if (!this.transition) return placeholder[0]\n\n return this.$createElement('transition', {\n props: {\n appear: true,\n name: this.transition,\n },\n }, placeholder)\n }\n },\n },\n\n render (h): VNode {\n const node = VResponsive.options.render.call(this, h)\n\n node.data!.staticClass += ' v-image'\n\n // Only load intersect directive if it\n // will work in the current browser.\n if (hasIntersect) {\n node.data!.directives = [{\n name: 'intersect',\n modifiers: { once: true },\n value: {\n handler: this.init,\n options: this.options,\n },\n }]\n }\n\n node.data!.attrs = {\n role: this.alt ? 'img' : undefined,\n 'aria-label': this.alt,\n }\n\n node.children = [\n this.__cachedSizer,\n this.__cachedImage,\n this.__genPlaceholder(),\n this.genContent(),\n ] as VNode[]\n\n return h(node.tag, node.data, node.children)\n },\n})\n","module.exports = __webpack_public_path__ + \"img/hero.e530afc6.png\";"],"sourceRoot":""}