{"version":3,"sources":["webpack:///../../../src/mixins/applicationable/index.ts","webpack:///../../../src/directives/scroll/index.ts","webpack:///../../../src/mixins/scrollable/index.ts","webpack:///../../../src/components/VAppBar/VAppBar.ts","webpack:///../../../src/components/VToolbar/VToolbar.ts","webpack:///../../../src/components/VResponsive/index.ts","webpack:///../../../src/components/VResponsive/VResponsive.ts","webpack:///../../../src/components/VImg/VImg.ts"],"names":["i","applicationable","value","events","mixins","PositionableFactory","extend","name","props","app","Boolean","computed","applicationProperty","watch","x","prev","this","removeApplication","callUpdate","newVal","oldVal","$vuetify","application","unregister","_uid","activated","created","length","$watch","mounted","deactivated","destroyed","methods","register","updateApplication","force","Scroll","inserted","el","binding","vnode","modifiers","self","options","passive","handler","target","arg","document","querySelector","window","addEventListener","_onScroll","Object","context","unbind","_el$_onScroll","removeEventListener","Vue","directives","scrollTarget","String","scrollThreshold","Number","data","currentScroll","currentThreshold","isActive","isScrollingUp","previousScroll","savedScroll","canScroll","computedScrollThreshold","consoleWarn","onScroll","scrollTop","pageYOffset","Math","abs","$nextTick","t","thresholdMet","baseMixins","VToolbar","Scrollable","SSRBootable","Toggleable","Applicationable","provide","VAppBar","clippedLeft","clippedRight","collapseOnScroll","elevateOnScroll","fadeImgOnScroll","hideOnScroll","invertedScroll","scrollOffScreen","shrinkOnScroll","type","default","bottom","call","isBooted","classes","collapse","absolute","fixed","hideShadow","scrollRatio","threshold","max","computedContentHeight","min","dense","computedOriginalHeight","computedFontSize","isProminent","computedLeft","left","computedMarginTop","bar","computedOpacity","height","isExtended","parseInt","extensionHeight","computedRight","right","computedTransform","computedHeight","isCollapsed","styles","fontSize","convertToUnit","marginTop","transform","val","genBackground","render","_b","tag","style","opacity","h","push","VSheet","extended","flat","floating","prominent","short","src","isNaN","breakpoint","smAndDown","measurableStyles","forEach","original","replacement","$attrs","hasOwnProperty","breaking","image","$scopedSlots","img","$createElement","VImg","staticClass","genContent","getSlot","genExtension","extension","children","setBackgroundColor","color","class","on","$listeners","unshift","VResponsive","Measurable","aspectRatio","contentClass","computedAspectRatio","aspectStyle","paddingBottom","__cachedSizer","$slots","hasIntersect","Themeable","intersect","alt","contain","eager","gradient","lazySrc","root","rootMargin","position","sizes","srcset","transition","currentSrc","isLoading","calculatedAspectRatio","naturalWidth","hasError","normalisedSrc","aspect","__cachedImage","backgroundImage","join","backgroundPosition","key","attrs","mode","loadImage","init","undefined","entries","observer","isIntersecting","lazyImg","Image","pollForSize","onLoad","getSrc","$emit","endsWith","startsWith","naturalHeight","onError","onload","decode","err","message","then","onerror","timeout","poll","complete","setTimeout","content","width","__genPlaceholder","placeholder","appear","node","mergeData","role","themeClasses","once"],"mappings":"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","file":"chunk-5a56f0f1.325be0ad975c180463c2.js","sourcesContent":["import { factory as PositionableFactory } from '../positionable'\nimport { TargetProp } from 'vuetify/types/services/application'\n\n// Util\nimport mixins from '../../util/mixins'\n\nexport default function applicationable (value: TargetProp, events: string[] = []) {\n /* @vue/component */\n return mixins(PositionableFactory(['absolute', 'fixed'])).extend({\n name: 'applicationable',\n\n props: {\n app: Boolean,\n },\n\n computed: {\n applicationProperty (): TargetProp {\n return value\n },\n },\n\n watch: {\n // If previous value was app\n // reset the provided prop\n app (x: boolean, prev: boolean) {\n prev\n ? this.removeApplication(true)\n : this.callUpdate()\n },\n applicationProperty (newVal, oldVal) {\n this.$vuetify.application.unregister(this._uid, oldVal)\n },\n },\n\n activated () {\n this.callUpdate()\n },\n\n created () {\n for (let i = 0, length = events.length; i < length; i++) {\n this.$watch(events[i], this.callUpdate)\n }\n this.callUpdate()\n },\n\n mounted () {\n this.callUpdate()\n },\n\n deactivated () {\n this.removeApplication()\n },\n\n destroyed () {\n this.removeApplication()\n },\n\n methods: {\n callUpdate () {\n if (!this.app) return\n\n this.$vuetify.application.register(\n this._uid,\n this.applicationProperty,\n this.updateApplication()\n )\n },\n removeApplication (force = false) {\n if (!force && !this.app) return\n\n this.$vuetify.application.unregister(\n this._uid,\n this.applicationProperty\n )\n },\n updateApplication: () => 0,\n },\n })\n}\n","import { VNodeDirective } from 'vue/types/vnode'\nimport { DirectiveOptions, VNode } from 'vue'\n\ninterface ScrollVNodeDirective extends Omit {\n value: EventListener | {\n handler: EventListener\n options?: boolean | AddEventListenerOptions\n } | EventListenerObject & { options?: boolean | AddEventListenerOptions }\n modifiers?: {\n self?: boolean\n }\n}\n\nfunction inserted (el: HTMLElement, binding: ScrollVNodeDirective, vnode: VNode) {\n const { self = false } = binding.modifiers || {}\n const value = binding.value\n const options = (typeof value === 'object' && value.options) || { passive: true }\n const handler = typeof value === 'function' || 'handleEvent' in value ? value : value.handler\n\n const target = self\n ? el\n : binding.arg\n ? document.querySelector(binding.arg)\n : window\n\n if (!target) return\n\n target.addEventListener('scroll', handler, options)\n\n el._onScroll = Object(el._onScroll)\n el._onScroll![vnode.context!._uid] = {\n handler,\n options,\n // Don't reference self\n target: self ? undefined : target,\n }\n}\n\nfunction unbind (el: HTMLElement, binding: ScrollVNodeDirective, vnode: VNode) {\n if (!el._onScroll?.[vnode.context!._uid]) return\n\n const { handler, options, target = el } = el._onScroll[vnode.context!._uid]!\n\n target.removeEventListener('scroll', handler, options)\n delete el._onScroll[vnode.context!._uid]\n}\n\nexport const Scroll = {\n inserted,\n unbind,\n} as DirectiveOptions\n\nexport default Scroll\n","// Directives\nimport { Scroll } from '../../directives'\n\n// Utilities\nimport { consoleWarn } from '../../util/console'\n\n// Types\nimport Vue from 'vue'\n\n/**\n * Scrollable\n *\n * Used for monitoring scrolling and\n * invoking functions based upon\n * scrolling thresholds being\n * met.\n */\n/* @vue/component */\nexport default Vue.extend({\n name: 'scrollable',\n\n directives: { Scroll },\n\n props: {\n scrollTarget: String,\n scrollThreshold: [String, Number],\n },\n\n data: () => ({\n currentScroll: 0,\n currentThreshold: 0,\n isActive: false,\n isScrollingUp: false,\n previousScroll: 0,\n savedScroll: 0,\n target: null as Element | null,\n }),\n\n computed: {\n /**\n * A computed property that returns\n * whether scrolling features are\n * enabled or disabled\n */\n canScroll (): boolean {\n return typeof window !== 'undefined'\n },\n /**\n * The threshold that must be met before\n * thresholdMet function is invoked\n */\n computedScrollThreshold (): number {\n return this.scrollThreshold\n ? Number(this.scrollThreshold)\n : 300\n },\n },\n\n watch: {\n isScrollingUp () {\n this.savedScroll = this.savedScroll || this.currentScroll\n },\n isActive () {\n this.savedScroll = 0\n },\n },\n\n mounted () {\n if (this.scrollTarget) {\n this.target = document.querySelector(this.scrollTarget)\n\n if (!this.target) {\n consoleWarn(`Unable to locate element with identifier ${this.scrollTarget}`, this)\n }\n }\n },\n\n methods: {\n onScroll () {\n if (!this.canScroll) return\n\n this.previousScroll = this.currentScroll\n this.currentScroll = this.target\n ? this.target.scrollTop\n : window.pageYOffset\n\n this.isScrollingUp = this.currentScroll < this.previousScroll\n this.currentThreshold = Math.abs(this.currentScroll - this.computedScrollThreshold)\n\n this.$nextTick(() => {\n if (\n Math.abs(this.currentScroll - this.savedScroll) >\n this.computedScrollThreshold\n ) this.thresholdMet()\n })\n },\n /**\n * The method invoked when\n * scrolling in any direction\n * has exceeded the threshold\n */\n thresholdMet () { /* noop */ },\n },\n})\n","// Styles\nimport './VAppBar.sass'\n\n// Extensions\nimport VToolbar from '../VToolbar/VToolbar'\n\n// Directives\nimport Scroll from '../../directives/scroll'\n\n// Mixins\nimport Applicationable from '../../mixins/applicationable'\nimport Scrollable from '../../mixins/scrollable'\nimport SSRBootable from '../../mixins/ssr-bootable'\nimport Toggleable from '../../mixins/toggleable'\n\n// Utilities\nimport { convertToUnit } from '../../util/helpers'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nconst baseMixins = mixins(\n VToolbar,\n Scrollable,\n SSRBootable,\n Toggleable,\n Applicationable('top', [\n 'clippedLeft',\n 'clippedRight',\n 'computedHeight',\n 'invertedScroll',\n 'isExtended',\n 'isProminent',\n 'value',\n ])\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-app-bar',\n\n directives: { Scroll },\n\n provide (): object {\n return { VAppBar: this }\n },\n\n props: {\n clippedLeft: Boolean,\n clippedRight: Boolean,\n collapseOnScroll: Boolean,\n elevateOnScroll: Boolean,\n fadeImgOnScroll: Boolean,\n hideOnScroll: Boolean,\n invertedScroll: Boolean,\n scrollOffScreen: Boolean,\n shrinkOnScroll: Boolean,\n value: {\n type: Boolean,\n default: true,\n },\n },\n\n data () {\n return {\n isActive: this.value,\n }\n },\n\n computed: {\n applicationProperty (): string {\n return !this.bottom ? 'top' : 'bottom'\n },\n canScroll (): boolean {\n return (\n Scrollable.options.computed.canScroll.call(this) &&\n (\n this.invertedScroll ||\n this.elevateOnScroll ||\n this.hideOnScroll ||\n this.collapseOnScroll ||\n this.isBooted ||\n // If falsy, user has provided an\n // explicit value which should\n // overwrite anything we do\n !this.value\n )\n )\n },\n classes (): object {\n return {\n ...VToolbar.options.computed.classes.call(this),\n 'v-toolbar--collapse': this.collapse || this.collapseOnScroll,\n 'v-app-bar': true,\n 'v-app-bar--clipped': this.clippedLeft || this.clippedRight,\n 'v-app-bar--fade-img-on-scroll': this.fadeImgOnScroll,\n 'v-app-bar--elevate-on-scroll': this.elevateOnScroll,\n 'v-app-bar--fixed': !this.absolute && (this.app || this.fixed),\n 'v-app-bar--hide-shadow': this.hideShadow,\n 'v-app-bar--is-scrolled': this.currentScroll > 0,\n 'v-app-bar--shrink-on-scroll': this.shrinkOnScroll,\n }\n },\n scrollRatio (): number {\n const threshold = this.computedScrollThreshold\n return Math.max((threshold - this.currentScroll) / threshold, 0)\n },\n computedContentHeight (): number {\n if (!this.shrinkOnScroll) return VToolbar.options.computed.computedContentHeight.call(this)\n\n const min = this.dense ? 48 : 56\n const max = this.computedOriginalHeight\n\n return min + (max - min) * this.scrollRatio\n },\n computedFontSize (): number | undefined {\n if (!this.isProminent) return undefined\n\n const min = 1.25\n const max = 1.5\n\n return min + (max - min) * this.scrollRatio\n },\n computedLeft (): number {\n if (!this.app || this.clippedLeft) return 0\n\n return this.$vuetify.application.left\n },\n computedMarginTop (): number {\n if (!this.app) return 0\n\n return this.$vuetify.application.bar\n },\n computedOpacity (): number | undefined {\n if (!this.fadeImgOnScroll) return undefined\n\n return this.scrollRatio\n },\n computedOriginalHeight (): number {\n let height = VToolbar.options.computed.computedContentHeight.call(this)\n if (this.isExtended) height += parseInt(this.extensionHeight)\n return height\n },\n computedRight (): number {\n if (!this.app || this.clippedRight) return 0\n\n return this.$vuetify.application.right\n },\n computedScrollThreshold (): number {\n if (this.scrollThreshold) return Number(this.scrollThreshold)\n\n return this.computedOriginalHeight - (this.dense ? 48 : 56)\n },\n computedTransform (): number {\n if (\n !this.canScroll ||\n (this.elevateOnScroll && this.currentScroll === 0 && this.isActive)\n ) return 0\n\n if (this.isActive) return 0\n\n const scrollOffScreen = this.scrollOffScreen\n ? this.computedHeight\n : this.computedContentHeight\n\n return this.bottom ? scrollOffScreen : -scrollOffScreen\n },\n hideShadow (): boolean {\n if (this.elevateOnScroll && this.isExtended) {\n return this.currentScroll < this.computedScrollThreshold\n }\n\n if (this.elevateOnScroll) {\n return this.currentScroll === 0 ||\n this.computedTransform < 0\n }\n\n return (\n !this.isExtended ||\n this.scrollOffScreen\n ) && this.computedTransform !== 0\n },\n isCollapsed (): boolean {\n if (!this.collapseOnScroll) {\n return VToolbar.options.computed.isCollapsed.call(this)\n }\n\n return this.currentScroll > 0\n },\n isProminent (): boolean {\n return (\n VToolbar.options.computed.isProminent.call(this) ||\n this.shrinkOnScroll\n )\n },\n styles (): object {\n return {\n ...VToolbar.options.computed.styles.call(this),\n fontSize: convertToUnit(this.computedFontSize, 'rem'),\n marginTop: convertToUnit(this.computedMarginTop),\n transform: `translateY(${convertToUnit(this.computedTransform)})`,\n left: convertToUnit(this.computedLeft),\n right: convertToUnit(this.computedRight),\n }\n },\n },\n\n watch: {\n canScroll: 'onScroll',\n computedTransform () {\n // Normally we do not want the v-app-bar\n // to update the application top value\n // to avoid screen jump. However, in\n // this situation, we must so that\n // the clipped drawer can update\n // its top value when scrolled\n if (\n !this.canScroll ||\n (!this.clippedLeft && !this.clippedRight)\n ) return\n\n this.callUpdate()\n },\n invertedScroll (val: boolean) {\n this.isActive = !val || this.currentScroll !== 0\n },\n hideOnScroll (val: boolean) {\n this.isActive = !val || this.currentScroll < this.computedScrollThreshold\n },\n },\n\n created () {\n if (this.invertedScroll) this.isActive = false\n },\n\n methods: {\n genBackground () {\n const render = VToolbar.options.methods.genBackground.call(this)\n\n render.data = this._b(render.data || {}, render.tag!, {\n style: { opacity: this.computedOpacity },\n })\n\n return render\n },\n updateApplication (): number {\n return this.invertedScroll\n ? 0\n : this.computedHeight + this.computedTransform\n },\n thresholdMet () {\n if (this.invertedScroll) {\n this.isActive = this.currentScroll > this.computedScrollThreshold\n return\n }\n\n if (this.hideOnScroll) {\n this.isActive = this.isScrollingUp ||\n this.currentScroll < this.computedScrollThreshold\n }\n\n if (this.currentThreshold < this.computedScrollThreshold) return\n\n this.savedScroll = this.currentScroll\n },\n },\n\n render (h): VNode {\n const render = VToolbar.options.render.call(this, h)\n\n render.data = render.data || {}\n\n if (this.canScroll) {\n render.data.directives = render.data.directives || []\n render.data.directives.push({\n arg: this.scrollTarget,\n name: 'scroll',\n value: this.onScroll,\n })\n }\n\n return render\n },\n})\n","// Styles\nimport './VToolbar.sass'\n\n// Extensions\nimport VSheet from '../VSheet/VSheet'\n\n// Components\nimport VImg, { srcObject } from '../VImg/VImg'\n\n// Utilities\nimport { convertToUnit, getSlot } from '../../util/helpers'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNode, PropType } from 'vue'\n\n/* @vue/component */\nexport default VSheet.extend({\n name: 'v-toolbar',\n\n props: {\n absolute: Boolean,\n bottom: Boolean,\n collapse: Boolean,\n dense: Boolean,\n extended: Boolean,\n extensionHeight: {\n default: 48,\n type: [Number, String],\n },\n flat: Boolean,\n floating: Boolean,\n prominent: Boolean,\n short: Boolean,\n src: {\n type: [String, Object] as PropType,\n default: '',\n },\n tag: {\n type: String,\n default: 'header',\n },\n },\n\n data: () => ({\n isExtended: false,\n }),\n\n computed: {\n computedHeight (): number {\n const height = this.computedContentHeight\n\n if (!this.isExtended) return height\n\n const extensionHeight = parseInt(this.extensionHeight)\n\n return this.isCollapsed\n ? height\n : height + (!isNaN(extensionHeight) ? extensionHeight : 0)\n },\n computedContentHeight (): number {\n if (this.height) return parseInt(this.height)\n if (this.isProminent && this.dense) return 96\n if (this.isProminent && this.short) return 112\n if (this.isProminent) return 128\n if (this.dense) return 48\n if (this.short || this.$vuetify.breakpoint.smAndDown) return 56\n return 64\n },\n classes (): object {\n return {\n ...VSheet.options.computed.classes.call(this),\n 'v-toolbar': true,\n 'v-toolbar--absolute': this.absolute,\n 'v-toolbar--bottom': this.bottom,\n 'v-toolbar--collapse': this.collapse,\n 'v-toolbar--collapsed': this.isCollapsed,\n 'v-toolbar--dense': this.dense,\n 'v-toolbar--extended': this.isExtended,\n 'v-toolbar--flat': this.flat,\n 'v-toolbar--floating': this.floating,\n 'v-toolbar--prominent': this.isProminent,\n }\n },\n isCollapsed (): boolean {\n return this.collapse\n },\n isProminent (): boolean {\n return this.prominent\n },\n styles (): object {\n return {\n ...this.measurableStyles,\n height: convertToUnit(this.computedHeight),\n }\n },\n },\n\n created () {\n const breakingProps = [\n ['app', ''],\n ['manual-scroll', ''],\n ['clipped-left', ''],\n ['clipped-right', ''],\n ['inverted-scroll', ''],\n ['scroll-off-screen', ''],\n ['scroll-target', ''],\n ['scroll-threshold', ''],\n ['card', ''],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n methods: {\n genBackground () {\n const props = {\n height: convertToUnit(this.computedHeight),\n src: this.src,\n }\n\n const image = this.$scopedSlots.img\n ? this.$scopedSlots.img({ props })\n : this.$createElement(VImg, { props })\n\n return this.$createElement('div', {\n staticClass: 'v-toolbar__image',\n }, [image])\n },\n genContent () {\n return this.$createElement('div', {\n staticClass: 'v-toolbar__content',\n style: {\n height: convertToUnit(this.computedContentHeight),\n },\n }, getSlot(this))\n },\n genExtension () {\n return this.$createElement('div', {\n staticClass: 'v-toolbar__extension',\n style: {\n height: convertToUnit(this.extensionHeight),\n },\n }, getSlot(this, 'extension'))\n },\n },\n\n render (h): VNode {\n this.isExtended = this.extended || !!this.$scopedSlots.extension\n\n const children = [this.genContent()]\n const data = this.setBackgroundColor(this.color, {\n class: this.classes,\n style: this.styles,\n on: this.$listeners,\n })\n\n if (this.isExtended) children.push(this.genExtension())\n if (this.src || this.$scopedSlots.img) children.unshift(this.genBackground())\n\n return h(this.tag, data, children)\n },\n})\n","import VResponsive from './VResponsive'\n\nexport { VResponsive }\nexport default VResponsive\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 contentClass: String,\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 class: this.contentClass,\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","// 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// Mixins\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport mixins from '../../util/mixins'\nimport mergeData from '../../util/mergeData'\nimport { 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 mixins(\n VResponsive,\n Themeable,\n).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 } as PropValidator,\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 hasError: false,\n }\n },\n\n computed: {\n computedAspectRatio (): number {\n return Number(this.normalisedSrc.aspect || this.calculatedAspectRatio)\n },\n normalisedSrc (): srcObject {\n return this.src && typeof this.src === 'object'\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 src: this.src,\n srcset: this.srcset,\n lazySrc: this.lazySrc,\n aspect: Number(this.aspectRatio || 0),\n }\n },\n __cachedImage (): VNode | [] {\n if (!(this.normalisedSrc.src || this.normalisedSrc.lazySrc || this.gradient)) 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 if (\n this.image &&\n (this.normalisedSrc.src.endsWith('.svg') || this.normalisedSrc.src.startsWith('data:image/svg+xml'))\n ) {\n if (this.image.naturalHeight && this.image.naturalWidth) {\n this.naturalWidth = this.image.naturalWidth\n this.calculatedAspectRatio = this.image.naturalWidth / this.image.naturalHeight\n } else {\n this.calculatedAspectRatio = 1\n }\n }\n },\n onError () {\n this.hasError = true\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 this.hasError = false\n this.sizes && (image.sizes = this.sizes)\n this.normalisedSrc.srcset && (image.srcset = this.normalisedSrc.srcset)\n image.src = this.normalisedSrc.src\n this.$emit('loadstart', this.normalisedSrc.src)\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 if (!img.complete && this.isLoading && !this.hasError && timeout != null) {\n 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 const data = mergeData(node.data!, {\n staticClass: 'v-image',\n attrs: {\n 'aria-label': this.alt,\n role: this.alt ? 'img' : undefined,\n },\n class: this.themeClasses,\n // Only load intersect directive if it\n // will work in the current browser.\n directives: hasIntersect\n ? [{\n name: 'intersect',\n modifiers: { once: true },\n value: {\n handler: this.init,\n options: this.options,\n },\n }]\n : undefined,\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, data, node.children)\n },\n})\n"],"sourceRoot":""}