{"version":3,"sources":["webpack:///../../../src/components/VSheet/index.ts","webpack:///../../../src/directives/ripple/index.ts","webpack:///../../../src/mixins/routable/index.ts","webpack:///../../../src/components/VGrid/VCol.ts","webpack:///./node_modules/core-js/modules/es.string.ends-with.js","webpack:///../../../src/directives/intersect/index.ts","webpack:///./node_modules/core-js/modules/es.string.link.js","webpack:///../../../src/components/VResponsive/VResponsive.ts","webpack:///../../../src/components/VResponsive/index.ts","webpack:///../../../src/components/VImg/VImg.ts","webpack:///./src/components/FeaturesView.vue","webpack:///src/components/FeaturesView.vue","webpack:///./src/components/FeaturesView.vue?d4c4","webpack:///./src/components/FeaturesView.vue?3a4c"],"names":["VSheet","DELAY_RIPPLE","transform","el","value","style","webkitTransform","isTouchEvent","e","constructor","name","isKeyboardEvent","calculate","arguments","length","undefined","localX","localY","offset","getBoundingClientRect","target","touches","clientX","left","clientY","top","radius","scale","_ripple","circle","clientWidth","center","Math","sqrt","pow","clientHeight","centerX","concat","centerY","x","y","ripples","show","enabled","container","document","createElement","animation","appendChild","className","class","_calculate","size","width","height","computed","window","getComputedStyle","position","dataset","previousPosition","classList","add","activated","String","performance","now","setTimeout","remove","hide","getElementsByClassName","isHiding","diff","Number","delay","max","_a","parentNode","removeChild","isRippleEnabled","rippleShow","element","currentTarget","touched","rippleStop","isTouch","centered","showTimerCommit","showTimer","rippleHide","clearTimeout","type","rippleCancelShow","keyboardRipple","keyboardRippleShow","keyCode","keyCodes","enter","space","keyboardRippleHide","focusRippleHide","updateRipple","binding","wasEnabled","addEventListener","passive","removeListeners","removeEventListener","directive","node","unbind","update","oldValue","Ripple","bind","Vue","extend","directives","props","activeClass","append","Boolean","disabled","exact","default","exactPath","exactActiveClass","link","href","Object","to","nuxt","replace","ripple","tag","data","isActive","proxyClass","classes","this","computedRipple","isClickable","isLink","$listeners","click","$attrs","tabindex","styles","watch","$route","mounted","onRouteChange","methods","generateRouteLink","_data","attrs","_defineProperty","_objectSpread","path","trim","assign","_this","$refs","$nextTick","getObjectValueByPath","toggle","breakpoints","breakpointProps","reduce","val","offsetProps","upperFirst","orderProps","propMap","col","keys","order","breakpointClass","prop","breakpoint","toLowerCase","cache","Map","functional","cols","alignSelf","validator","str","includes","render","h","_ref","children","cacheKey","parent","get","_classList$push","forEach","push","hasColClasses","some","startsWith","set","mergeData","$","uncurryThis","getOwnPropertyDescriptor","f","toLength","toString","notARegExp","requireObjectCoercible","correctIsRegExpLogic","IS_PURE","nativeEndsWith","endsWith","slice","min","CORRECT_IS_REGEXP_LOGIC","MDN_POLYFILL_BUG","descriptor","prototype","writable","proto","forced","searchString","that","endPosition","len","end","search","inserted","vnode","modifiers","_typeof","handler","options","observer","IntersectionObserver","entries","_observe","context","_uid","isIntersecting","entry","quiet","init","once","observe","unobserve","Intersect","createHTML","forcedStringHTMLMethod","url","mixins","Measurable","aspectRatio","contentClass","computedAspectRatio","aspectStyle","paddingBottom","__cachedSizer","$createElement","staticClass","genContent","getSlot","measurableStyles","on","VResponsive","hasIntersect","Themeable","intersect","alt","contain","eager","gradient","lazySrc","root","rootMargin","threshold","sizes","src","srcset","transition","currentSrc","image","isLoading","calculatedAspectRatio","naturalWidth","hasError","normalisedSrc","aspect","__cachedImage","backgroundImage","join","backgroundPosition","key","mode","loadImage","lazyImg","Image","pollForSize","onLoad","getSrc","$emit","naturalHeight","onError","onload","decode","catch","err","consoleWarn","message","then","onerror","img","_this2","timeout","poll","complete","content","call","_b","__genPlaceholder","slot","placeholder","appear","role","themeClasses","_c","feature","staticStyle","domProps","_vm","staticRenderFns","features","title","text","component"],"mappings":"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","file":"js/chunk-a2637bb0.1bd88b85.js","sourcesContent":["import VSheet from './VSheet'\n\nexport { VSheet }\nexport default VSheet\n","// Styles\nimport './VRipple.sass'\n\n// Utilities\nimport { consoleWarn } from '../../util/console'\nimport { keyCodes } from '../../util/helpers'\n\n// Types\nimport { VNode, VNodeDirective } from 'vue'\n\ntype VuetifyRippleEvent = (MouseEvent | TouchEvent | KeyboardEvent) & { rippleStop?: boolean }\n\nconst DELAY_RIPPLE = 80\n\nfunction transform (el: HTMLElement, value: string) {\n el.style.transform = value\n el.style.webkitTransform = value\n}\n\nexport interface RippleOptions {\n class?: string\n center?: boolean\n circle?: boolean\n}\n\nfunction isTouchEvent (e: VuetifyRippleEvent): e is TouchEvent {\n return e.constructor.name === 'TouchEvent'\n}\n\nfunction isKeyboardEvent (e: VuetifyRippleEvent): e is KeyboardEvent {\n return e.constructor.name === 'KeyboardEvent'\n}\n\nconst calculate = (\n e: VuetifyRippleEvent,\n el: HTMLElement,\n value: RippleOptions = {}\n) => {\n let localX = 0\n let localY = 0\n\n if (!isKeyboardEvent(e)) {\n const offset = el.getBoundingClientRect()\n const target = isTouchEvent(e) ? e.touches[e.touches.length - 1] : e\n\n localX = target.clientX - offset.left\n localY = target.clientY - offset.top\n }\n\n let radius = 0\n let scale = 0.3\n if (el._ripple && el._ripple.circle) {\n scale = 0.15\n radius = el.clientWidth / 2\n radius = value.center ? radius : radius + Math.sqrt((localX - radius) ** 2 + (localY - radius) ** 2) / 4\n } else {\n radius = Math.sqrt(el.clientWidth ** 2 + el.clientHeight ** 2) / 2\n }\n\n const centerX = `${(el.clientWidth - (radius * 2)) / 2}px`\n const centerY = `${(el.clientHeight - (radius * 2)) / 2}px`\n\n const x = value.center ? centerX : `${localX - radius}px`\n const y = value.center ? centerY : `${localY - radius}px`\n\n return { radius, scale, x, y, centerX, centerY }\n}\n\nconst ripples = {\n /* eslint-disable max-statements */\n show (\n e: VuetifyRippleEvent,\n el: HTMLElement,\n value: RippleOptions = {}\n ) {\n if (!el._ripple || !el._ripple.enabled) {\n return\n }\n\n const container = document.createElement('span')\n const animation = document.createElement('span')\n\n container.appendChild(animation)\n container.className = 'v-ripple__container'\n\n if (value.class) {\n container.className += ` ${value.class}`\n }\n\n const { radius, scale, x, y, centerX, centerY } = calculate(e, el, value)\n\n const size = `${radius * 2}px`\n animation.className = 'v-ripple__animation'\n animation.style.width = size\n animation.style.height = size\n\n el.appendChild(container)\n\n const computed = window.getComputedStyle(el)\n if (computed && computed.position === 'static') {\n el.style.position = 'relative'\n el.dataset.previousPosition = 'static'\n }\n\n animation.classList.add('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--visible')\n transform(animation, `translate(${x}, ${y}) scale3d(${scale},${scale},${scale})`)\n animation.dataset.activated = String(performance.now())\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--enter')\n animation.classList.add('v-ripple__animation--in')\n transform(animation, `translate(${centerX}, ${centerY}) scale3d(1,1,1)`)\n }, 0)\n },\n\n hide (el: HTMLElement | null) {\n if (!el || !el._ripple || !el._ripple.enabled) return\n\n const ripples = el.getElementsByClassName('v-ripple__animation')\n\n if (ripples.length === 0) return\n const animation = ripples[ripples.length - 1]\n\n if (animation.dataset.isHiding) return\n else animation.dataset.isHiding = 'true'\n\n const diff = performance.now() - Number(animation.dataset.activated)\n const delay = Math.max(250 - diff, 0)\n\n setTimeout(() => {\n animation.classList.remove('v-ripple__animation--in')\n animation.classList.add('v-ripple__animation--out')\n\n setTimeout(() => {\n const ripples = el.getElementsByClassName('v-ripple__animation')\n if (ripples.length === 1 && el.dataset.previousPosition) {\n el.style.position = el.dataset.previousPosition\n delete el.dataset.previousPosition\n }\n\n if (animation.parentNode?.parentNode === el) el.removeChild(animation.parentNode)\n }, 300)\n }, delay)\n },\n}\n\nfunction isRippleEnabled (value: any): value is true {\n return typeof value === 'undefined' || !!value\n}\n\nfunction rippleShow (e: VuetifyRippleEvent) {\n const value: RippleOptions = {}\n const element = e.currentTarget as HTMLElement\n\n if (!element || !element._ripple || element._ripple.touched || e.rippleStop) return\n\n // Don't allow the event to trigger ripples on any other elements\n e.rippleStop = true\n\n if (isTouchEvent(e)) {\n element._ripple.touched = true\n element._ripple.isTouch = true\n } else {\n // It's possible for touch events to fire\n // as mouse events on Android/iOS, this\n // will skip the event call if it has\n // already been registered as touch\n if (element._ripple.isTouch) return\n }\n value.center = element._ripple.centered || isKeyboardEvent(e)\n if (element._ripple.class) {\n value.class = element._ripple.class\n }\n\n if (isTouchEvent(e)) {\n // already queued that shows or hides the ripple\n if (element._ripple.showTimerCommit) return\n\n element._ripple.showTimerCommit = () => {\n ripples.show(e, element, value)\n }\n element._ripple.showTimer = window.setTimeout(() => {\n if (element && element._ripple && element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit()\n element._ripple.showTimerCommit = null\n }\n }, DELAY_RIPPLE)\n } else {\n ripples.show(e, element, value)\n }\n}\n\nfunction rippleHide (e: Event) {\n const element = e.currentTarget as HTMLElement | null\n if (!element || !element._ripple) return\n\n window.clearTimeout(element._ripple.showTimer)\n\n // The touch interaction occurs before the show timer is triggered.\n // We still want to show ripple effect.\n if (e.type === 'touchend' && element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit()\n element._ripple.showTimerCommit = null\n\n // re-queue ripple hiding\n element._ripple.showTimer = setTimeout(() => {\n rippleHide(e)\n })\n return\n }\n\n window.setTimeout(() => {\n if (element._ripple) {\n element._ripple.touched = false\n }\n })\n ripples.hide(element)\n}\n\nfunction rippleCancelShow (e: MouseEvent | TouchEvent) {\n const element = e.currentTarget as HTMLElement | undefined\n\n if (!element || !element._ripple) return\n\n if (element._ripple.showTimerCommit) {\n element._ripple.showTimerCommit = null\n }\n\n window.clearTimeout(element._ripple.showTimer)\n}\n\nlet keyboardRipple = false\n\nfunction keyboardRippleShow (e: KeyboardEvent) {\n if (!keyboardRipple && (e.keyCode === keyCodes.enter || e.keyCode === keyCodes.space)) {\n keyboardRipple = true\n rippleShow(e)\n }\n}\n\nfunction keyboardRippleHide (e: KeyboardEvent) {\n keyboardRipple = false\n rippleHide(e)\n}\n\nfunction focusRippleHide (e: FocusEvent) {\n if (keyboardRipple === true) {\n keyboardRipple = false\n rippleHide(e)\n }\n}\n\nfunction updateRipple (el: HTMLElement, binding: VNodeDirective, wasEnabled: boolean) {\n const enabled = isRippleEnabled(binding.value)\n if (!enabled) {\n ripples.hide(el)\n }\n el._ripple = el._ripple || {}\n el._ripple.enabled = enabled\n const value = binding.value || {}\n if (value.center) {\n el._ripple.centered = true\n }\n if (value.class) {\n el._ripple.class = binding.value.class\n }\n if (value.circle) {\n el._ripple.circle = value.circle\n }\n if (enabled && !wasEnabled) {\n el.addEventListener('touchstart', rippleShow, { passive: true })\n el.addEventListener('touchend', rippleHide, { passive: true })\n el.addEventListener('touchmove', rippleCancelShow, { passive: true })\n el.addEventListener('touchcancel', rippleHide)\n\n el.addEventListener('mousedown', rippleShow)\n el.addEventListener('mouseup', rippleHide)\n el.addEventListener('mouseleave', rippleHide)\n\n el.addEventListener('keydown', keyboardRippleShow)\n el.addEventListener('keyup', keyboardRippleHide)\n\n el.addEventListener('blur', focusRippleHide)\n\n // Anchor tags can be dragged, causes other hides to fail - #1537\n el.addEventListener('dragstart', rippleHide, { passive: true })\n } else if (!enabled && wasEnabled) {\n removeListeners(el)\n }\n}\n\nfunction removeListeners (el: HTMLElement) {\n el.removeEventListener('mousedown', rippleShow)\n el.removeEventListener('touchstart', rippleShow)\n el.removeEventListener('touchend', rippleHide)\n el.removeEventListener('touchmove', rippleCancelShow)\n el.removeEventListener('touchcancel', rippleHide)\n el.removeEventListener('mouseup', rippleHide)\n el.removeEventListener('mouseleave', rippleHide)\n el.removeEventListener('keydown', keyboardRippleShow)\n el.removeEventListener('keyup', keyboardRippleHide)\n el.removeEventListener('dragstart', rippleHide)\n el.removeEventListener('blur', focusRippleHide)\n}\n\nfunction directive (el: HTMLElement, binding: VNodeDirective, node: VNode) {\n updateRipple(el, binding, false)\n\n if (process.env.NODE_ENV === 'development') {\n // warn if an inline element is used, waiting for el to be in the DOM first\n node.context && node.context.$nextTick(() => {\n const computed = window.getComputedStyle(el)\n if (computed && computed.display === 'inline') {\n const context = (node as any).fnOptions ? [(node as any).fnOptions, node.context] : [node.componentInstance]\n consoleWarn('v-ripple can only be used on block-level elements', ...context)\n }\n })\n }\n}\n\nfunction unbind (el: HTMLElement) {\n delete el._ripple\n removeListeners(el)\n}\n\nfunction update (el: HTMLElement, binding: VNodeDirective) {\n if (binding.value === binding.oldValue) {\n return\n }\n\n const wasEnabled = isRippleEnabled(binding.oldValue)\n updateRipple(el, binding, wasEnabled)\n}\n\nexport const Ripple = {\n bind: directive,\n unbind,\n update,\n}\n\nexport default Ripple\n","import Vue, { VNodeData, PropType } from 'vue'\n\n// Directives\nimport Ripple, { RippleOptions } from '../../directives/ripple'\n\n// Utilities\nimport { getObjectValueByPath } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'routable',\n\n directives: {\n Ripple,\n },\n\n props: {\n activeClass: String,\n append: Boolean,\n disabled: Boolean,\n exact: {\n type: Boolean as PropType,\n default: undefined,\n },\n exactPath: Boolean,\n exactActiveClass: String,\n link: Boolean,\n href: [String, Object],\n to: [String, Object],\n nuxt: Boolean,\n replace: Boolean,\n ripple: {\n type: [Boolean, Object],\n default: null,\n },\n tag: String,\n target: String,\n },\n\n data: () => ({\n isActive: false,\n proxyClass: '',\n }),\n\n computed: {\n classes (): object {\n const classes: Record = {}\n\n if (this.to) return classes\n\n if (this.activeClass) classes[this.activeClass] = this.isActive\n if (this.proxyClass) classes[this.proxyClass] = this.isActive\n\n return classes\n },\n computedRipple (): RippleOptions | boolean {\n return this.ripple ?? (!this.disabled && this.isClickable)\n },\n isClickable (): boolean {\n if (this.disabled) return false\n\n return Boolean(\n this.isLink ||\n this.$listeners.click ||\n this.$listeners['!click'] ||\n this.$attrs.tabindex\n )\n },\n isLink (): boolean {\n return this.to || this.href || this.link\n },\n styles: () => ({}),\n },\n\n watch: {\n $route: 'onRouteChange',\n },\n\n mounted () {\n this.onRouteChange()\n },\n\n methods: {\n generateRouteLink () {\n let exact = this.exact\n let tag\n\n const data: VNodeData = {\n attrs: {\n tabindex: 'tabindex' in this.$attrs ? this.$attrs.tabindex : undefined,\n },\n class: this.classes,\n style: this.styles,\n props: {},\n directives: [{\n name: 'ripple',\n value: this.computedRipple,\n }],\n [this.to ? 'nativeOn' : 'on']: {\n ...this.$listeners,\n ...('click' in this ? { click: (this as any).click } : undefined), // #14447\n },\n ref: 'link',\n }\n\n if (typeof this.exact === 'undefined') {\n exact = this.to === '/' ||\n (this.to === Object(this.to) && this.to.path === '/')\n }\n\n if (this.to) {\n // Add a special activeClass hook\n // for component level styles\n let activeClass = this.activeClass\n let exactActiveClass = this.exactActiveClass || activeClass\n\n if (this.proxyClass) {\n activeClass = `${activeClass} ${this.proxyClass}`.trim()\n exactActiveClass = `${exactActiveClass} ${this.proxyClass}`.trim()\n }\n\n tag = this.nuxt ? 'nuxt-link' : 'router-link'\n Object.assign(data.props, {\n to: this.to,\n exact,\n exactPath: this.exactPath,\n activeClass,\n exactActiveClass,\n append: this.append,\n replace: this.replace,\n })\n } else {\n tag = (this.href && 'a') || this.tag || 'div'\n\n if (tag === 'a' && this.href) data.attrs!.href = this.href\n }\n\n if (this.target) data.attrs!.target = this.target\n\n return { tag, data }\n },\n onRouteChange () {\n if (!this.to || !this.$refs.link || !this.$route) return\n const activeClass = `${this.activeClass || ''} ${this.proxyClass || ''}`.trim()\n const exactActiveClass = `${this.exactActiveClass || ''} ${this.proxyClass || ''}`.trim() || activeClass\n\n const path = '_vnode.data.class.' + (this.exact ? exactActiveClass : activeClass)\n\n this.$nextTick(() => {\n /* istanbul ignore else */\n if (!getObjectValueByPath(this.$refs.link, path) === this.isActive) {\n this.toggle()\n }\n })\n },\n toggle () {\n this.isActive = !this.isActive\n },\n },\n})\n","import './VGrid.sass'\n\nimport Vue, { VNode, PropOptions } from 'vue'\nimport mergeData from '../../util/mergeData'\nimport { upperFirst } from '../../util/helpers'\n\n// no xs\nconst breakpoints = ['sm', 'md', 'lg', 'xl']\n\nconst breakpointProps = (() => {\n return breakpoints.reduce((props, val) => {\n props[val] = {\n type: [Boolean, String, Number],\n default: false,\n }\n return props\n }, {} as Dictionary)\n})()\n\nconst offsetProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['offset' + upperFirst(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Dictionary)\n})()\n\nconst orderProps = (() => {\n return breakpoints.reduce((props, val) => {\n props['order' + upperFirst(val)] = {\n type: [String, Number],\n default: null,\n }\n return props\n }, {} as Dictionary)\n})()\n\nconst propMap = {\n col: Object.keys(breakpointProps),\n offset: Object.keys(offsetProps),\n order: Object.keys(orderProps),\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: boolean | string | number) {\n let className = type\n if (val == null || val === false) {\n return undefined\n }\n if (prop) {\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // Handling the boolean style prop when accepting [Boolean, String, Number]\n // means Vue will not convert to sm: true for us.\n // Since the default is false, an empty string indicates the prop's presence.\n if (type === 'col' && (val === '' || val === true)) {\n // .col-md\n return className.toLowerCase()\n }\n // .order-md-6\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst cache = new Map()\n\nexport default Vue.extend({\n name: 'v-col',\n functional: true,\n props: {\n cols: {\n type: [Boolean, String, Number],\n default: false,\n },\n ...breakpointProps,\n offset: {\n type: [String, Number],\n default: null,\n },\n ...offsetProps,\n order: {\n type: [String, Number],\n default: null,\n },\n ...orderProps,\n alignSelf: {\n type: String,\n default: null,\n validator: (str: any) => ['auto', 'start', 'end', 'center', 'baseline', 'stretch'].includes(str),\n },\n tag: {\n type: String,\n default: 'div',\n },\n },\n render (h, { props, data, children, parent }): VNode {\n // Super-fast memoization based on props, 5x faster than JSON.stringify\n let cacheKey = ''\n for (const prop in props) {\n cacheKey += String((props as any)[prop])\n }\n let classList = cache.get(cacheKey)\n\n if (!classList) {\n classList = []\n // Loop through `col`, `offset`, `order` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string | number | boolean = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n const hasColClasses = classList.some(className => className.startsWith('col-'))\n\n classList.push({\n // Default to .col if no other col-{bp}-* classes generated nor `cols` specified.\n col: !hasColClasses || !props.cols,\n [`col-${props.cols}`]: props.cols,\n [`offset-${props.offset}`]: props.offset,\n [`order-${props.order}`]: props.order,\n [`align-self-${props.alignSelf}`]: props.alignSelf,\n })\n\n cache.set(cacheKey, classList)\n }\n\n return h(props.tag, mergeData(data, { class: classList }), children)\n },\n})\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this-clause');\nvar getOwnPropertyDescriptor = require('../internals/object-get-own-property-descriptor').f;\nvar toLength = require('../internals/to-length');\nvar toString = require('../internals/to-string');\nvar notARegExp = require('../internals/not-a-regexp');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\nvar correctIsRegExpLogic = require('../internals/correct-is-regexp-logic');\nvar IS_PURE = require('../internals/is-pure');\n\n// eslint-disable-next-line es/no-string-prototype-endswith -- safe\nvar nativeEndsWith = uncurryThis(''.endsWith);\nvar slice = uncurryThis(''.slice);\nvar min = Math.min;\n\nvar CORRECT_IS_REGEXP_LOGIC = correctIsRegExpLogic('endsWith');\n// https://github.com/zloirock/core-js/pull/702\nvar MDN_POLYFILL_BUG = !IS_PURE && !CORRECT_IS_REGEXP_LOGIC && !!function () {\n var descriptor = getOwnPropertyDescriptor(String.prototype, 'endsWith');\n return descriptor && !descriptor.writable;\n}();\n\n// `String.prototype.endsWith` method\n// https://tc39.es/ecma262/#sec-string.prototype.endswith\n$({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {\n endsWith: function endsWith(searchString /* , endPosition = @length */) {\n var that = toString(requireObjectCoercible(this));\n notARegExp(searchString);\n var endPosition = arguments.length > 1 ? arguments[1] : undefined;\n var len = that.length;\n var end = endPosition === undefined ? len : min(toLength(endPosition), len);\n var search = toString(searchString);\n return nativeEndsWith\n ? nativeEndsWith(that, search, end)\n : slice(that, end - search.length, end) === search;\n }\n});\n","import { VNodeDirective } from 'vue/types/vnode'\nimport { VNode } from 'vue'\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, vnode: VNode) {\n if (typeof window === 'undefined' || !('IntersectionObserver' in window)) return\n\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 const _observe = el._observe?.[vnode.context!._uid]\n if (!_observe) return // Just in case, should never fire\n\n const isIntersecting = entries.some(entry => entry.isIntersecting)\n\n // If is not quiet or has already been\n // initted, invoke the user callback\n if (\n handler && (\n !modifiers.quiet ||\n _observe.init\n ) && (\n !modifiers.once ||\n isIntersecting ||\n _observe.init\n )\n ) {\n handler(entries, observer, isIntersecting)\n }\n\n if (isIntersecting && modifiers.once) unbind(el, binding, vnode)\n else _observe.init = true\n }, options)\n\n el._observe = Object(el._observe)\n el._observe![vnode.context!._uid] = { init: false, observer }\n\n observer.observe(el)\n}\n\nfunction unbind (el: HTMLElement, binding: ObserveVNodeDirective, vnode: VNode) {\n const observe = el._observe?.[vnode.context!._uid]\n if (!observe) return\n\n observe.observer.unobserve(el)\n delete el._observe![vnode.context!._uid]\n}\n\nexport const Intersect = {\n inserted,\n unbind,\n}\n\nexport default Intersect\n","'use strict';\nvar $ = require('../internals/export');\nvar createHTML = require('../internals/create-html');\nvar forcedStringHTMLMethod = require('../internals/string-html-forced');\n\n// `String.prototype.link` method\n// https://tc39.es/ecma262/#sec-string.prototype.link\n$({ target: 'String', proto: true, forced: forcedStringHTMLMethod('link') }, {\n link: function link(url) {\n return createHTML(this, 'a', 'href', url);\n }\n});\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'\nimport { getSlot } from '../../util/helpers'\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 }, getSlot(this))\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// Mixins\nimport Themeable from '../../mixins/themeable'\n\n// Utils\nimport mixins from '../../util/mixins'\nimport mergeData from '../../util/mergeData'\nimport { consoleWarn } from '../../util/console'\nimport { getSlot } from '../../util/helpers'\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 const slot = getSlot(this, 'placeholder')\n if (slot) {\n const placeholder = this.isLoading\n ? [this.$createElement('div', {\n staticClass: 'v-image__placeholder',\n }, slot)]\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","var render = function render(){var _vm=this,_c=_vm._self._c;return _c('section',{staticClass:\"grey lighten-3 px-3\",attrs:{\"id\":\"features\"}},[_c('v-container',{staticClass:\"py-5\",attrs:{\"id\":\"goals\",\"tag\":\"section\"}},[_c('v-row',_vm._l((_vm.features),function(feature,i){return _c('v-col',{key:i,staticClass:\"d-flex\",attrs:{\"cols\":\"12\",\"sm\":\"6\",\"md\":\"4\"}},[_c('v-card',{attrs:{\"outlined\":\"\",\"max-width\":\"100%\"}},[_c('v-img',{attrs:{\"width\":\"100%\",\"height\":\"200\",\"color\":\"grey\",\"src\":feature.src}}),_c('v-card-title',{staticClass:\"align-start\",staticStyle:{\"min-height\":\"88px\"},domProps:{\"textContent\":_vm._s(feature.title)}}),_c('v-card-text',{domProps:{\"textContent\":_vm._s(feature.text)}})],1)],1)}),1)],1)],1)\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FeaturesView.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--13-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./FeaturesView.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./FeaturesView.vue?vue&type=template&id=b1b66560\"\nimport script from \"./FeaturesView.vue?vue&type=script&lang=js\"\nexport * from \"./FeaturesView.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"],"sourceRoot":""}