{"version":3,"sources":["webpack:///./src/components/About/AboutApplication.vue?f499","webpack:///./src/components/About/AboutResults.vue?b232","webpack:///../../../src/components/VCard/index.ts","webpack:///./src/components/About/AboutApplication.vue?e3f3","webpack:///../../../src/components/VBtn/index.ts","webpack:///./src/views/About.vue?34fb","webpack:///./src/components/About/AboutApplication.vue?d8be","webpack:///./src/components/About/AboutResults.vue?c889","webpack:///src/components/About/AboutResults.vue","webpack:///./src/components/About/AboutResults.vue?468e","webpack:///./src/components/About/AboutResults.vue?640e","webpack:///src/components/About/AboutApplication.vue","webpack:///./src/components/About/AboutApplication.vue?19b0","webpack:///../../../src/directives/touch/index.ts","webpack:///../../../src/components/VWindow/VWindow.ts","webpack:///../../../src/mixins/button-group/index.ts","webpack:///../../../src/components/VCarousel/VCarousel.ts","webpack:///../../../src/components/VWindow/VWindowItem.ts","webpack:///../../../src/components/VCarousel/VCarouselItem.ts","webpack:///../../../src/mixins/mobile/index.ts","webpack:///../../../src/components/VSlideGroup/VSlideGroup.ts","webpack:///../../../src/components/VChipGroup/VChipGroup.ts","webpack:///./src/components/About/AboutApplication.vue?d2f9","webpack:///./src/components/About/AboutAuthor.vue?0748","webpack:///src/components/About/AboutAuthor.vue","webpack:///./src/components/About/AboutAuthor.vue?ee11","webpack:///./src/components/About/AboutAuthor.vue","webpack:///src/views/About.vue","webpack:///./src/views/About.vue?1f49","webpack:///../../../src/components/VTabs/VTab.ts","webpack:///../../../src/components/VTabs/VTabItem.ts","webpack:///../../../src/components/VTabs/VTabsBar.ts","webpack:///../../../src/components/VTabs/VTabsItems.ts","webpack:///../../../src/components/VTabs/VTabsSlider.ts","webpack:///../../../src/components/VTabs/VTabs.ts","webpack:///./src/views/About.vue"],"names":["VCardActions","VCardSubtitle","VCardText","VCardTitle","_vm","this","_h","$createElement","_c","_self","staticClass","model","value","callback","$$v","tab","expression","_v","staticRenderFns","attrs","themeImage","_l","result","i","key","_s","title","text","image","component","handleGesture","wrapper","touchendY","dirRatio","minDistance","touchendX","Math","touchstartX","touchstartY","touch","event","Object","createHandlers","touchmoveX","touchmoveY","offsetX","offsetY","left","right","up","down","start","move","end","touchstart","e","touchend","touchmove","inserted","binding","target","el","options","passive","handlers","vnode","eventName","unbind","Touch","name","directives","provide","windowGroup","props","activeClass","type","default","continuous","mandatory","nextIcon","Boolean","prevIcon","reverse","showArrows","showArrowsOnHover","touchless","required","vertical","data","internalHeight","transitionHeight","transitionCount","isBooted","isReverse","computed","isActive","classes","computedTransition","axis","internalReverse","direction","hasActiveItems","items","find","item","hasNext","internalIndex","length","hasPrev","findIndex","$vuetify","rtl","watch","updateReverse","val","mounted","window","methods","genContainer","children","$slots","class","style","height","genIcon","VBtn","icon","lang","t","on","click","VIcon","large","genControlIcons","icons","getNextIndex","nextIndex","index","getPrevIndex","prevIndex","next","getValue","prev","lastIndex","itemsLength","oldVal","render","h","btnToggle","genData","cycle","delimiterIcon","Number","hideDelimiters","hideDelimiterBackground","interval","validator","progress","progressColor","verticalDelimiters","undefined","slideTimeout","isVertical","isDark","dark","internalValue","clearTimeout","created","$attrs","hasOwnProperty","genDelimiters","genItems","child","small","size","change","genProgress","VProgressLinear","color","restartTimeout","startTimeout","baseMixins","mixins","disabled","reverseTransition","transition","inTransition","genDefaultSlot","genWindowItem","$listeners","onAfterTransition","onBeforeTransition","$el","onTransitionCancelled","onEnter","beforeEnter","afterEnter","enterCancelled","beforeLeave","afterLeave","leaveCancelled","enter","showLazyContent","inheritAttrs","VImg","scopedSlots","placeholder","$scopedSlots","tag","mobileBreakpoint","breakpoint","v","isNaN","includes","String","isMobile","mobile","mobileWidth","parseInt","isNumber","width","BaseSlideGroup","Resize","centerActive","internalItemsLength","isOverflowing","resizeTimeout","startX","scrollOffset","widths","content","__cachedNext","genTransition","__cachedPrev","hasAffixes","beforeUpdate","$children","updated","genNext","slot","genContent","ref","onResize","location","upperLocation","hasAffix","genPrev","genWrapper","calculateNewOffset","sign","newAbosluteOffset","onAffixClick","onTouchStart","onTouchMove","onTouchEnd","maxScrollOffset","overflowCheck","fn","scrollIntoView","selectedIndex","calculateCenteredOffset","selectedItem","calculateUpdatedOffset","clientWidth","selectedElement","offsetLeft","currentScrollOffset","totalWidth","itemOffset","additionalOffset","offsetCentered","scrollTo","$refs","setWidths","slideGroup","chipGroup","column","setTextColor","VCard","VCarousel","VCarouselItem","VChip","VChipGroup","$event","goToLinkedin","goToGithub","VList","VListItem","VListItemAvatar","VListItemIcon","VListItemTitle","components","AboutApplication","AboutAuthor","ripple","proxyClass","groupClasses","to","$router","resolve","href","indexOf","blur","role","tabindex","keydown","VWindowItem","id","tabsBar","themeClasses","$route","callSlider","onRouteChange","newPath","oldPath","hasNew","hasOld","setBackgroundColor","alignWithTitle","backgroundColor","centered","fixedTabs","grow","hideSlider","iconsAndText","optional","sliderColor","sliderSize","slider","top","transitionTime","isReversed","sliderStyles","computedColor","selectedItems","activeTab","scrollWidth","genBar","light","VTabsBar","genSlider","VTabsItems","VTabsSlider","parseNodes","modifiers","quiet","VTab","VTabItem","VTabs"],"mappings":"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","file":"js/about.f6e5cdcc.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AboutApplication.vue?vue&type=style&index=1&lang=scss&\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AboutResults.vue?vue&type=style&index=0&id=60920116&lang=scss&scoped=true&\"","import VCard from './VCard'\nimport { createSimpleFunctional } from '../../util/helpers'\n\nconst VCardActions = createSimpleFunctional('v-card__actions')\nconst VCardSubtitle = createSimpleFunctional('v-card__subtitle')\nconst VCardText = createSimpleFunctional('v-card__text')\nconst VCardTitle = createSimpleFunctional('v-card__title')\n\nexport {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n}\n\nexport default {\n $_vuetify_subcomponents: {\n VCard,\n VCardActions,\n VCardSubtitle,\n VCardText,\n VCardTitle,\n },\n}\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--8-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--8-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--8-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--8-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AboutApplication.vue?vue&type=style&index=0&id=0dc61d02&lang=scss&scoped=true&\"","import VBtn from './VBtn'\n\nexport { VBtn }\nexport default VBtn\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('section',[_c('v-tabs',{staticClass:\"d-flex justify-start flex-wrap\",model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},[_c('v-tab',[_vm._v(\"About the Application\")]),_c('v-tab',[_vm._v(\"About the Author\")])],1),_c('v-tabs-items',{model:{value:(_vm.tab),callback:function ($$v) {_vm.tab=$$v},expression:\"tab\"}},[_c('v-tab-item',[_c('about-application')],1),_c('v-tab-item',[_c('about-author')],1)],1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:\"about-container\"},[_c('v-card-text',[_vm._v(\" This application offers a memory game where the user can find card matches through the randomly displayed cards. What it is interesting about it, is that it also offers WAI-ARIA accessibility that reads to the user the progress of the game. \"),_c('br'),_c('br'),_vm._v(\" It was originally cloned from \"),_c('a',{attrs:{\"href\":\"https://github.com/mlama007/Vue-Memory-Game\",\"target\":\"_blank\"}},[_vm._v(\" this\")]),_vm._v(\" application presented on the Amsterdam Vue conference 2019. At that talk I was really impressed with the speaker's approach towars accessibility and vue. How that issue was(is) extremely important and how we can approach it within Vue applications. So I cloned the code and I checked it out. After playing with it for a while, I made several improvements to it and this application is the result of that. \")]),_c('v-card-title',[_vm._v(\"Theme extension\")]),_c('v-card-text',[_vm._v(\" With this application you can still play the original memory game, where the user attempts to find matches between two cards. Furthermore, this application was expanded so not only can the user play with the default icon game, but also there are several themes defined, kind of like card decks. There are currently 5: \"),_c('ul',[_c('li',[_c('b',[_vm._v(\"Default theme\")]),_vm._v(\" (with font awesome icons)\")]),_c('li',[_c('b',[_vm._v(\"Animals theme\")]),_vm._v(\" (with font awesome animal icons)\")]),_c('li',[_c('b',[_vm._v(\"House theme\")]),_vm._v(\" (with font awesome household icons)\")]),_c('li',[_c('b',[_vm._v(\"Vehicles theme\")]),_vm._v(\" (with font awesome vehicle icons)\")]),_c('li',[_c('b',[_vm._v(\"Disney theme\")]),_vm._v(\" (with Disney images)\")]),_c('li',[_c('b',[_vm._v(\"Harry Potter theme\")]),_vm._v(\" (with Harry Potter images)\")]),_c('li',[_c('b',[_vm._v(\"Alphabet\")]),_vm._v(\" (the system generates 3 sets of different cuts of the alphabet ramdomically)\")]),_c('li',[_c('b',[_vm._v(\"Star Wars theme\")]),_vm._v(\" (with Star Wars images)\")])]),_vm._v(\" This for once, made it more interesting (at least for my kids to play). \")]),_c('v-card-title',[_vm._v(\"Accessibility\")]),_c('v-card-text',[_vm._v(\" First of all, in order to make use the applications's accessibility feature, the user needs to have a screen reader. It can be simply a Chrome (or any navigator) pluggin. I used ChromeVox or the ScreenReader pluggin, and it worked like a charme. By using this, the user can hear the results of his/her actions on the screen. I also made several improvements in terms of how the accessibility information was being handled. \")]),_c('v-card-title',[_vm._v(\"Winning\")]),_c('v-card-text',[_vm._v(\" I added some confetti animations and details to be displayed when the user wins. \")]),_c('v-card-title',[_vm._v(\"Other improvements\")]),_c('v-card-text',[_vm._v(\" I really enjoyed working on this application so I changed a lot of things. Here are a few of them: \"),_c('ul',[_c('li',[_c('b',[_vm._v(\"State:\")]),_vm._v(\" added Vuex to handle the state of the game, the decks, the score, etc. Particularly, I made a better use of the state management by redefining the state into: the accessibility properties, the game fields properties and the new template properties. This allows for a clearer overview and should the application grow, it will also simplify the process of separating these properties into different Vuex modules. \")]),_c('li',[_c('b',[_vm._v(\"Separation of concerns:\")]),_vm._v(\" shipped the logic to the actions and make a bit more explicit use of the the Vuex commits. This also cleans the components code, and provides future resusability of the functions defined as action. I also added the GameBoard component that allowed me to clean up the Home and separate what was Card and the Winning component, from the rest. \")]),_c('li',[_c('b',[_vm._v(\"Modules:\")]),_vm._v(\" organized code into modules. For instance, I converted the \\\"Card\\\" into a new component, including it's logic, it's scss, it's state and it's actions. \")]),_c('li',[_c('b',[_vm._v(\"Vuetify:\")]),_vm._v(\" added Vuetify to make it more visually nice and cleaned up the styles. I also made it fully responsive. \")]),_c('li',[_c('b',[_vm._v(\"About:\")]),_vm._v(\" added this About section, with some insights both into the application as well as some details about myself. \")])])]),_c('v-card-title',[_vm._v(\"Tools & technologies\")]),_c('v-card-text',[_c('v-chip-group',{attrs:{\"column\":\"\"}},[_c('v-chip',[_vm._v(\"Vue\")]),_c('v-chip',[_vm._v(\"Vuex\")]),_c('v-chip',[_vm._v(\"Vue Router\")]),_c('v-chip',[_vm._v(\"Vuetify\")]),_c('v-chip',[_vm._v(\"Accessibility (ARIA)\")])],1)],1),_c('v-card-title',[_vm._v(\"This game in action \")]),_c('v-card-text',{attrs:{\"pb-0\":\"\"}},[_vm._v(\" Here I leave some images of how the game actually looks like (in case you don't want to play to see it through). \")]),_c('v-card-subtitle',{attrs:{\"mt-0\":\"\",\"ml-0\":\"\"}},[_vm._v(\"Theme Selection\")]),_c('v-card-text',[_vm._v(\" First of all, the application offers a dropdown list where the user user can choose the theme you want to play with. This selection list shows the name of the theme but also an icon. This was done thinking of the user experience. Particularly, my 5 year old son loves to play with it, and the icon helps him select the theme by himself. \"),_c('div',{staticClass:\"theme-container\"},[_c('img',{staticClass:\"theme-image\",attrs:{\"src\":_vm.themeImage}})])]),_c('v-carousel',{staticClass:\"carousel-container\",attrs:{\"height\":\"100%\"}},_vm._l((_vm.resultsContent),function(result,i){return _c('v-carousel-item',{key:i,attrs:{\"reverse-transition\":\"fade-transition\",\"transition\":\"fade-transition\"}},[_c('about-results',{attrs:{\"result\":result}})],1)}),1)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"results-container\"},[_c('div',{staticClass:\"result-title\"},[_vm._v(_vm._s(_vm.result.title))]),_c('div',{staticClass:\"result-text\"},[_vm._v(_vm._s(_vm.result.text))]),_c('div',{staticClass:\"result-image\"},[_c('img',{attrs:{\"src\":_vm.result.image}})])])}\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/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AboutResults.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/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AboutResults.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AboutResults.vue?vue&type=template&id=60920116&scoped=true&\"\nimport script from \"./AboutResults.vue?vue&type=script&lang=js&\"\nexport * from \"./AboutResults.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AboutResults.vue?vue&type=style&index=0&id=60920116&lang=scss&scoped=true&\"\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 \"60920116\",\n null\n \n)\n\nexport default component.exports","\n\n\n\n\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/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AboutApplication.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/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AboutApplication.vue?vue&type=script&lang=js&\"","import { VNodeDirective, VNode } from 'vue/types/vnode'\nimport { keys } from '../../util/helpers'\nimport { TouchHandlers, TouchValue, TouchWrapper } from 'vuetify/types'\n\nexport interface TouchStoredHandlers {\n touchstart: (e: TouchEvent) => void\n touchend: (e: TouchEvent) => void\n touchmove: (e: TouchEvent) => void\n}\n\ninterface TouchVNodeDirective extends VNodeDirective {\n value?: TouchValue\n}\n\nconst handleGesture = (wrapper: TouchWrapper) => {\n const { touchstartX, touchendX, touchstartY, touchendY } = wrapper\n const dirRatio = 0.5\n const minDistance = 16\n wrapper.offsetX = touchendX - touchstartX\n wrapper.offsetY = touchendY - touchstartY\n\n if (Math.abs(wrapper.offsetY) < dirRatio * Math.abs(wrapper.offsetX)) {\n wrapper.left && (touchendX < touchstartX - minDistance) && wrapper.left(wrapper)\n wrapper.right && (touchendX > touchstartX + minDistance) && wrapper.right(wrapper)\n }\n\n if (Math.abs(wrapper.offsetX) < dirRatio * Math.abs(wrapper.offsetY)) {\n wrapper.up && (touchendY < touchstartY - minDistance) && wrapper.up(wrapper)\n wrapper.down && (touchendY > touchstartY + minDistance) && wrapper.down(wrapper)\n }\n}\n\nfunction touchstart (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchstartX = touch.clientX\n wrapper.touchstartY = touch.clientY\n\n wrapper.start &&\n wrapper.start(Object.assign(event, wrapper))\n}\n\nfunction touchend (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchendX = touch.clientX\n wrapper.touchendY = touch.clientY\n\n wrapper.end &&\n wrapper.end(Object.assign(event, wrapper))\n\n handleGesture(wrapper)\n}\n\nfunction touchmove (event: TouchEvent, wrapper: TouchWrapper) {\n const touch = event.changedTouches[0]\n wrapper.touchmoveX = touch.clientX\n wrapper.touchmoveY = touch.clientY\n\n wrapper.move && wrapper.move(Object.assign(event, wrapper))\n}\n\nfunction createHandlers (value: TouchHandlers): TouchStoredHandlers {\n const wrapper = {\n touchstartX: 0,\n touchstartY: 0,\n touchendX: 0,\n touchendY: 0,\n touchmoveX: 0,\n touchmoveY: 0,\n offsetX: 0,\n offsetY: 0,\n left: value.left,\n right: value.right,\n up: value.up,\n down: value.down,\n start: value.start,\n move: value.move,\n end: value.end,\n }\n\n return {\n touchstart: (e: TouchEvent) => touchstart(e, wrapper),\n touchend: (e: TouchEvent) => touchend(e, wrapper),\n touchmove: (e: TouchEvent) => touchmove(e, wrapper),\n }\n}\n\nfunction inserted (el: HTMLElement, binding: TouchVNodeDirective, vnode: VNode) {\n const value = binding.value!\n const target = value.parent ? el.parentElement : el\n const options = value.options || { passive: true }\n\n // Needed to pass unit tests\n if (!target) return\n\n const handlers = createHandlers(binding.value!)\n target._touchHandlers = Object(target._touchHandlers)\n target._touchHandlers![vnode.context!._uid] = handlers\n\n keys(handlers).forEach(eventName => {\n target.addEventListener(eventName, handlers[eventName] as EventListener, options)\n })\n}\n\nfunction unbind (el: HTMLElement, binding: TouchVNodeDirective, vnode: VNode) {\n const target = binding.value!.parent ? el.parentElement : el\n if (!target || !target._touchHandlers) return\n\n const handlers = target._touchHandlers[vnode.context!._uid]\n keys(handlers).forEach(eventName => {\n target.removeEventListener(eventName, handlers[eventName])\n })\n delete target._touchHandlers[vnode.context!._uid]\n}\n\nexport const Touch = {\n inserted,\n unbind,\n}\n\nexport default Touch\n","// Styles\nimport './VWindow.sass'\n\n// Types\nimport { VNode, VNodeDirective } from 'vue/types/vnode'\nimport { PropType } from 'vue'\nimport { TouchHandlers } from 'vuetify/types'\n\n// Directives\nimport Touch from '../../directives/touch'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\nimport { BaseItemGroup } from '../VItemGroup/VItemGroup'\n\n/* @vue/component */\nexport default BaseItemGroup.extend({\n name: 'v-window',\n\n directives: { Touch },\n\n provide (): object {\n return {\n windowGroup: this,\n }\n },\n\n props: {\n activeClass: {\n type: String,\n default: 'v-window-item--active',\n },\n continuous: Boolean,\n mandatory: {\n type: Boolean,\n default: true,\n },\n nextIcon: {\n type: [Boolean, String],\n default: '$next',\n },\n prevIcon: {\n type: [Boolean, String],\n default: '$prev',\n },\n reverse: Boolean,\n showArrows: Boolean,\n showArrowsOnHover: Boolean,\n touch: Object as PropType,\n touchless: Boolean,\n value: {\n required: false,\n },\n vertical: Boolean,\n },\n\n data () {\n return {\n internalHeight: undefined as undefined | string, // This can be fixed by child class.\n transitionHeight: undefined as undefined | string, // Intermediate height during transition.\n transitionCount: 0, // Number of windows in transition state.\n isBooted: false,\n isReverse: false,\n }\n },\n\n computed: {\n isActive (): boolean {\n return this.transitionCount > 0\n },\n classes (): object {\n return {\n ...BaseItemGroup.options.computed.classes.call(this),\n 'v-window--show-arrows-on-hover': this.showArrowsOnHover,\n }\n },\n computedTransition (): string {\n if (!this.isBooted) return ''\n\n const axis = this.vertical ? 'y' : 'x'\n const reverse = this.internalReverse ? !this.isReverse : this.isReverse\n const direction = reverse ? '-reverse' : ''\n\n return `v-window-${axis}${direction}-transition`\n },\n hasActiveItems (): boolean {\n return Boolean(\n this.items.find(item => !item.disabled)\n )\n },\n hasNext (): boolean {\n return this.continuous || this.internalIndex < this.items.length - 1\n },\n hasPrev (): boolean {\n return this.continuous || this.internalIndex > 0\n },\n internalIndex (): number {\n return this.items.findIndex((item, i) => {\n return this.internalValue === this.getValue(item, i)\n })\n },\n internalReverse (): boolean {\n return this.$vuetify.rtl ? !this.reverse : this.reverse\n },\n },\n\n watch: {\n internalIndex (val, oldVal) {\n this.isReverse = this.updateReverse(val, oldVal)\n },\n },\n\n mounted () {\n window.requestAnimationFrame(() => (this.isBooted = true))\n },\n\n methods: {\n genContainer (): VNode {\n const children = [this.$slots.default]\n\n if (this.showArrows) {\n children.push(this.genControlIcons())\n }\n\n return this.$createElement('div', {\n staticClass: 'v-window__container',\n class: {\n 'v-window__container--is-active': this.isActive,\n },\n style: {\n height: this.internalHeight || this.transitionHeight,\n },\n }, children)\n },\n genIcon (\n direction: 'prev' | 'next',\n icon: string,\n click: () => void\n ) {\n return this.$createElement('div', {\n staticClass: `v-window__${direction}`,\n }, [\n this.$createElement(VBtn, {\n props: { icon: true },\n attrs: {\n 'aria-label': this.$vuetify.lang.t(`$vuetify.carousel.${direction}`),\n },\n on: {\n click: (e: Event) => {\n e.stopPropagation()\n click()\n },\n },\n }, [\n this.$createElement(VIcon, {\n props: { large: true },\n }, icon),\n ]),\n ])\n },\n genControlIcons () {\n const icons = []\n\n const prevIcon = this.$vuetify.rtl\n ? this.nextIcon\n : this.prevIcon\n\n /* istanbul ignore else */\n if (\n this.hasPrev &&\n prevIcon &&\n typeof prevIcon === 'string'\n ) {\n const icon = this.genIcon('prev', prevIcon, this.prev)\n icon && icons.push(icon)\n }\n\n const nextIcon = this.$vuetify.rtl\n ? this.prevIcon\n : this.nextIcon\n\n /* istanbul ignore else */\n if (\n this.hasNext &&\n nextIcon &&\n typeof nextIcon === 'string'\n ) {\n const icon = this.genIcon('next', nextIcon, this.next)\n icon && icons.push(icon)\n }\n\n return icons\n },\n getNextIndex (index: number): number {\n const nextIndex = (index + 1) % this.items.length\n const item = this.items[nextIndex]\n\n if (item.disabled) return this.getNextIndex(nextIndex)\n\n return nextIndex\n },\n getPrevIndex (index: number): number {\n const prevIndex = (index + this.items.length - 1) % this.items.length\n const item = this.items[prevIndex]\n\n if (item.disabled) return this.getPrevIndex(prevIndex)\n\n return prevIndex\n },\n next () {\n /* istanbul ignore if */\n if (!this.hasActiveItems || !this.hasNext) return\n\n const nextIndex = this.getNextIndex(this.internalIndex)\n const item = this.items[nextIndex]\n\n this.internalValue = this.getValue(item, nextIndex)\n },\n prev () {\n /* istanbul ignore if */\n if (!this.hasActiveItems || !this.hasPrev) return\n\n const lastIndex = this.getPrevIndex(this.internalIndex)\n const item = this.items[lastIndex]\n\n this.internalValue = this.getValue(item, lastIndex)\n },\n updateReverse (val: number, oldVal: number) {\n const itemsLength = this.items.length\n const lastIndex = itemsLength - 1\n\n if (itemsLength <= 2) return val < oldVal\n\n if (val === lastIndex && oldVal === 0) {\n return true\n } else if (val === 0 && oldVal === lastIndex) {\n return false\n } else {\n return val < oldVal\n }\n },\n },\n\n render (h): VNode {\n const data = {\n staticClass: 'v-window',\n class: this.classes,\n directives: [] as VNodeDirective[],\n }\n\n if (!this.touchless) {\n const value = this.touch || {\n left: () => {\n this.$vuetify.rtl ? this.prev() : this.next()\n },\n right: () => {\n this.$vuetify.rtl ? this.next() : this.prev()\n },\n end: (e: TouchEvent) => {\n e.stopPropagation()\n },\n start: (e: TouchEvent) => {\n e.stopPropagation()\n },\n }\n\n data.directives.push({\n name: 'touch',\n value,\n })\n }\n\n return h('div', data, [this.genContainer()])\n },\n})\n","// Extensions\nimport { BaseItemGroup } from '../../components/VItemGroup/VItemGroup'\n\n/* @vue/component */\nexport default BaseItemGroup.extend({\n name: 'button-group',\n\n provide (): object {\n return {\n btnToggle: this,\n }\n },\n\n computed: {\n classes (): object {\n return BaseItemGroup.options.computed.classes.call(this)\n },\n },\n\n methods: {\n // Isn't being passed down through types\n genData: BaseItemGroup.options.methods.genData,\n },\n})\n","// Styles\nimport './VCarousel.sass'\n\n// Extensions\nimport VWindow from '../VWindow/VWindow'\n\n// Components\nimport VBtn from '../VBtn'\nimport VIcon from '../VIcon'\nimport VProgressLinear from '../VProgressLinear'\n\n// Mixins\n// TODO: Move this into core components v2.0\nimport ButtonGroup from '../../mixins/button-group'\n\n// Utilities\nimport { convertToUnit } from '../../util/helpers'\nimport { breaking } from '../../util/console'\n\n// Types\nimport { VNode, PropType } from 'vue'\n\nexport default VWindow.extend({\n name: 'v-carousel',\n\n props: {\n continuous: {\n type: Boolean,\n default: true,\n },\n cycle: Boolean,\n delimiterIcon: {\n type: String,\n default: '$delimiter',\n },\n height: {\n type: [Number, String],\n default: 500,\n },\n hideDelimiters: Boolean,\n hideDelimiterBackground: Boolean,\n interval: {\n type: [Number, String],\n default: 6000,\n validator: (value: string | number) => value > 0,\n },\n mandatory: {\n type: Boolean,\n default: true,\n },\n progress: Boolean,\n progressColor: String,\n showArrows: {\n type: Boolean,\n default: true,\n },\n verticalDelimiters: {\n type: String as PropType<'' | 'left' | 'right'>,\n default: undefined,\n },\n },\n\n data () {\n return {\n internalHeight: this.height,\n slideTimeout: undefined as number | undefined,\n }\n },\n\n computed: {\n classes (): object {\n return {\n ...VWindow.options.computed.classes.call(this),\n 'v-carousel': true,\n 'v-carousel--hide-delimiter-background': this.hideDelimiterBackground,\n 'v-carousel--vertical-delimiters': this.isVertical,\n }\n },\n isDark (): boolean {\n return this.dark || !this.light\n },\n isVertical (): boolean {\n return this.verticalDelimiters != null\n },\n },\n\n watch: {\n internalValue: 'restartTimeout',\n interval: 'restartTimeout',\n height (val, oldVal) {\n if (val === oldVal || !val) return\n this.internalHeight = val\n },\n cycle (val) {\n if (val) {\n this.restartTimeout()\n } else {\n clearTimeout(this.slideTimeout)\n this.slideTimeout = undefined\n }\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('hide-controls')) {\n breaking('hide-controls', ':show-arrows=\"false\"', this)\n }\n },\n\n mounted () {\n this.startTimeout()\n },\n\n methods: {\n genControlIcons () {\n if (this.isVertical) return null\n\n return VWindow.options.methods.genControlIcons.call(this)\n },\n genDelimiters (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-carousel__controls',\n style: {\n left: this.verticalDelimiters === 'left' && this.isVertical ? 0 : 'auto',\n right: this.verticalDelimiters === 'right' ? 0 : 'auto',\n },\n }, [this.genItems()])\n },\n genItems (): VNode {\n const length = this.items.length\n const children = []\n\n for (let i = 0; i < length; i++) {\n const child = this.$createElement(VBtn, {\n staticClass: 'v-carousel__controls__item',\n attrs: {\n 'aria-label': this.$vuetify.lang.t('$vuetify.carousel.ariaLabel.delimiter', i + 1, length),\n },\n props: {\n icon: true,\n small: true,\n value: this.getValue(this.items[i], i),\n },\n }, [\n this.$createElement(VIcon, {\n props: { size: 18 },\n }, this.delimiterIcon),\n ])\n\n children.push(child)\n }\n\n return this.$createElement(ButtonGroup, {\n props: {\n value: this.internalValue,\n mandatory: this.mandatory,\n },\n on: {\n change: (val: unknown) => {\n this.internalValue = val\n },\n },\n }, children)\n },\n genProgress () {\n return this.$createElement(VProgressLinear, {\n staticClass: 'v-carousel__progress',\n props: {\n color: this.progressColor,\n value: (this.internalIndex + 1) / this.items.length * 100,\n },\n })\n },\n restartTimeout () {\n this.slideTimeout && clearTimeout(this.slideTimeout)\n this.slideTimeout = undefined\n\n window.requestAnimationFrame(this.startTimeout)\n },\n startTimeout () {\n if (!this.cycle) return\n\n this.slideTimeout = window.setTimeout(this.next, +this.interval > 0 ? +this.interval : 6000)\n },\n },\n\n render (h): VNode {\n const render = VWindow.options.render.call(this, h)\n\n render.data!.style = `height: ${convertToUnit(this.height)};`\n\n /* istanbul ignore else */\n if (!this.hideDelimiters) {\n render.children!.push(this.genDelimiters())\n }\n\n /* istanbul ignore else */\n if (this.progress || this.progressColor) {\n render.children!.push(this.genProgress())\n }\n\n return render\n },\n})\n","// Components\nimport VWindow from './VWindow'\n\n// Mixins\nimport Bootable from '../../mixins/bootable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\n\n// Directives\nimport Touch from '../../directives/touch'\n\n// Utilities\nimport { convertToUnit } from '../../util/helpers'\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue'\n\nconst baseMixins = mixins(\n Bootable,\n GroupableFactory('windowGroup', 'v-window-item', 'v-window')\n)\n\ninterface options extends ExtractVue {\n $el: HTMLElement\n windowGroup: InstanceType\n}\n\nexport default baseMixins.extend().extend(\n /* @vue/component */\n).extend({\n name: 'v-window-item',\n\n directives: {\n Touch,\n },\n\n props: {\n disabled: Boolean,\n reverseTransition: {\n type: [Boolean, String],\n default: undefined,\n },\n transition: {\n type: [Boolean, String],\n default: undefined,\n },\n value: {\n required: false,\n },\n },\n\n data () {\n return {\n isActive: false,\n inTransition: false,\n }\n },\n\n computed: {\n classes (): object {\n return this.groupClasses\n },\n computedTransition (): string | boolean {\n if (!this.windowGroup.internalReverse) {\n return typeof this.transition !== 'undefined'\n ? this.transition || ''\n : this.windowGroup.computedTransition\n }\n\n return typeof this.reverseTransition !== 'undefined'\n ? this.reverseTransition || ''\n : this.windowGroup.computedTransition\n },\n },\n\n methods: {\n genDefaultSlot () {\n return this.$slots.default\n },\n genWindowItem () {\n return this.$createElement('div', {\n staticClass: 'v-window-item',\n class: this.classes,\n directives: [{\n name: 'show',\n value: this.isActive,\n }],\n on: this.$listeners,\n }, this.genDefaultSlot())\n },\n onAfterTransition () {\n if (!this.inTransition) {\n return\n }\n\n // Finalize transition state.\n this.inTransition = false\n if (this.windowGroup.transitionCount > 0) {\n this.windowGroup.transitionCount--\n\n // Remove container height if we are out of transition.\n if (this.windowGroup.transitionCount === 0) {\n this.windowGroup.transitionHeight = undefined\n }\n }\n },\n onBeforeTransition () {\n if (this.inTransition) {\n return\n }\n\n // Initialize transition state here.\n this.inTransition = true\n if (this.windowGroup.transitionCount === 0) {\n // Set initial height for height transition.\n this.windowGroup.transitionHeight = convertToUnit(this.windowGroup.$el.clientHeight)\n }\n this.windowGroup.transitionCount++\n },\n onTransitionCancelled () {\n this.onAfterTransition() // This should have the same path as normal transition end.\n },\n onEnter (el: HTMLElement) {\n if (!this.inTransition) {\n return\n }\n\n this.$nextTick(() => {\n // Do not set height if no transition or cancelled.\n if (!this.computedTransition || !this.inTransition) {\n return\n }\n\n // Set transition target height.\n this.windowGroup.transitionHeight = convertToUnit(el.clientHeight)\n })\n },\n },\n\n render (h): VNode {\n return h('transition', {\n props: {\n name: this.computedTransition,\n },\n on: {\n // Handlers for enter windows.\n beforeEnter: this.onBeforeTransition,\n afterEnter: this.onAfterTransition,\n enterCancelled: this.onTransitionCancelled,\n\n // Handlers for leave windows.\n beforeLeave: this.onBeforeTransition,\n afterLeave: this.onAfterTransition,\n leaveCancelled: this.onTransitionCancelled,\n\n // Enter handler for height transition.\n enter: this.onEnter,\n },\n }, this.showLazyContent(() => [this.genWindowItem()]))\n },\n})\n","// Extensions\nimport VWindowItem from '../VWindow/VWindowItem'\n\n// Components\nimport { VImg } from '../VImg'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { getSlot } from '../../util/helpers'\nimport Routable from '../../mixins/routable'\n\n// Types\nconst baseMixins = mixins(\n VWindowItem,\n Routable\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-carousel-item',\n\n inheritAttrs: false,\n\n methods: {\n genDefaultSlot () {\n return [\n this.$createElement(VImg, {\n staticClass: 'v-carousel__item',\n props: {\n ...this.$attrs,\n height: this.windowGroup.internalHeight,\n },\n on: this.$listeners,\n scopedSlots: {\n placeholder: this.$scopedSlots.placeholder,\n },\n }, getSlot(this)),\n ]\n },\n genWindowItem () {\n const { tag, data } = this.generateRouteLink()\n\n data.staticClass = 'v-window-item'\n data.directives!.push({\n name: 'show',\n value: this.isActive,\n })\n\n return this.$createElement(tag, data, this.genDefaultSlot())\n },\n },\n})\n","// Types\nimport { BreakpointName } from 'vuetify/types/services/breakpoint'\nimport { deprecate } from '../../util/console'\nimport Vue, { PropType } from 'vue'\n\n/* @vue/component */\nexport default Vue.extend({\n name: 'mobile',\n\n props: {\n mobileBreakpoint: {\n type: [Number, String] as PropType,\n default (): number | BreakpointName | undefined {\n // Avoid destroying unit\n // tests for users\n return this.$vuetify\n ? this.$vuetify.breakpoint.mobileBreakpoint\n : undefined\n },\n validator: v => (\n !isNaN(Number(v)) ||\n ['xs', 'sm', 'md', 'lg', 'xl'].includes(String(v))\n ),\n },\n },\n\n computed: {\n isMobile (): boolean {\n const {\n mobile,\n width,\n name,\n mobileBreakpoint,\n } = this.$vuetify.breakpoint\n\n // Check if local mobileBreakpoint matches\n // the application's mobileBreakpoint\n if (mobileBreakpoint === this.mobileBreakpoint) return mobile\n\n const mobileWidth = parseInt(this.mobileBreakpoint, 10)\n const isNumber = !isNaN(mobileWidth)\n\n return isNumber\n ? width < mobileWidth\n : name === this.mobileBreakpoint\n },\n },\n\n created () {\n /* istanbul ignore next */\n if (this.$attrs.hasOwnProperty('mobile-break-point')) {\n deprecate('mobile-break-point', 'mobile-breakpoint', this)\n }\n },\n})\n","// Styles\nimport './VSlideGroup.sass'\n\n// Components\nimport VIcon from '../VIcon'\nimport { VFadeTransition } from '../transitions'\n\n// Extensions\nimport { BaseItemGroup } from '../VItemGroup/VItemGroup'\n\n// Mixins\nimport Mobile from '../../mixins/mobile'\n\n// Directives\nimport Resize from '../../directives/resize'\nimport Touch from '../../directives/touch'\n\n// Utilities\nimport mixins, { ExtractVue } from '../../util/mixins'\n\n// Types\nimport Vue, { VNode } from 'vue'\n\ninterface TouchEvent {\n touchstartX: number\n touchmoveX: number\n stopPropagation: Function\n}\n\ninterface Widths {\n content: number\n wrapper: number\n}\n\ninterface options extends Vue {\n $refs: {\n content: HTMLElement\n wrapper: HTMLElement\n }\n}\n\nexport const BaseSlideGroup = mixins\n/* eslint-enable indent */\n>(\n BaseItemGroup,\n Mobile,\n /* @vue/component */\n).extend({\n name: 'base-slide-group',\n\n directives: {\n Resize,\n Touch,\n },\n\n props: {\n activeClass: {\n type: String,\n default: 'v-slide-item--active',\n },\n centerActive: Boolean,\n nextIcon: {\n type: String,\n default: '$next',\n },\n prevIcon: {\n type: String,\n default: '$prev',\n },\n showArrows: {\n type: [Boolean, String],\n validator: v => (\n typeof v === 'boolean' || [\n 'always',\n 'desktop',\n 'mobile',\n ].includes(v)\n ),\n },\n },\n\n data: () => ({\n internalItemsLength: 0,\n isOverflowing: false,\n resizeTimeout: 0,\n startX: 0,\n scrollOffset: 0,\n widths: {\n content: 0,\n wrapper: 0,\n },\n }),\n\n computed: {\n __cachedNext (): VNode {\n return this.genTransition('next')\n },\n __cachedPrev (): VNode {\n return this.genTransition('prev')\n },\n classes (): object {\n return {\n ...BaseItemGroup.options.computed.classes.call(this),\n 'v-slide-group': true,\n 'v-slide-group--has-affixes': this.hasAffixes,\n 'v-slide-group--is-overflowing': this.isOverflowing,\n }\n },\n hasAffixes (): Boolean {\n switch (this.showArrows) {\n // Always show arrows on desktop & mobile\n case 'always': return true\n\n // Always show arrows on desktop\n case 'desktop': return !this.isMobile\n\n // Show arrows on mobile when overflowing.\n // This matches the default 2.2 behavior\n case true: return this.isOverflowing\n\n // Always show on mobile\n case 'mobile': return (\n this.isMobile ||\n this.isOverflowing\n )\n\n // https://material.io/components/tabs#scrollable-tabs\n // Always show arrows when\n // overflowed on desktop\n default: return (\n !this.isMobile &&\n this.isOverflowing\n )\n }\n },\n hasNext (): boolean {\n if (!this.hasAffixes) return false\n\n const { content, wrapper } = this.widths\n\n // Check one scroll ahead to know the width of right-most item\n return content > Math.abs(this.scrollOffset) + wrapper\n },\n hasPrev (): boolean {\n return this.hasAffixes && this.scrollOffset !== 0\n },\n },\n\n watch: {\n internalValue: 'setWidths',\n // When overflow changes, the arrows alter\n // the widths of the content and wrapper\n // and need to be recalculated\n isOverflowing: 'setWidths',\n scrollOffset (val) {\n this.$refs.content.style.transform = `translateX(${-val}px)`\n },\n },\n\n beforeUpdate () {\n this.internalItemsLength = (this.$children || []).length\n },\n\n updated () {\n if (this.internalItemsLength === (this.$children || []).length) return\n this.setWidths()\n },\n\n methods: {\n // Always generate next for scrollable hint\n genNext (): VNode | null {\n const slot = this.$scopedSlots.next\n ? this.$scopedSlots.next({})\n : this.$slots.next || this.__cachedNext\n\n return this.$createElement('div', {\n staticClass: 'v-slide-group__next',\n class: {\n 'v-slide-group__next--disabled': !this.hasNext,\n },\n on: {\n click: () => this.onAffixClick('next'),\n },\n key: 'next',\n }, [slot])\n },\n genContent (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-slide-group__content',\n ref: 'content',\n }, this.$slots.default)\n },\n genData (): object {\n return {\n class: this.classes,\n directives: [{\n name: 'resize',\n value: this.onResize,\n }],\n }\n },\n genIcon (location: 'prev' | 'next'): VNode | null {\n let icon = location\n\n if (this.$vuetify.rtl && location === 'prev') {\n icon = 'next'\n } else if (this.$vuetify.rtl && location === 'next') {\n icon = 'prev'\n }\n\n const upperLocation = `${location[0].toUpperCase()}${location.slice(1)}`\n const hasAffix = (this as any)[`has${upperLocation}`]\n\n if (\n !this.showArrows &&\n !hasAffix\n ) return null\n\n return this.$createElement(VIcon, {\n props: {\n disabled: !hasAffix,\n },\n }, (this as any)[`${icon}Icon`])\n },\n // Always generate prev for scrollable hint\n genPrev (): VNode | null {\n const slot = this.$scopedSlots.prev\n ? this.$scopedSlots.prev({})\n : this.$slots.prev || this.__cachedPrev\n\n return this.$createElement('div', {\n staticClass: 'v-slide-group__prev',\n class: {\n 'v-slide-group__prev--disabled': !this.hasPrev,\n },\n on: {\n click: () => this.onAffixClick('prev'),\n },\n key: 'prev',\n }, [slot])\n },\n genTransition (location: 'prev' | 'next') {\n return this.$createElement(VFadeTransition, [this.genIcon(location)])\n },\n genWrapper (): VNode {\n return this.$createElement('div', {\n staticClass: 'v-slide-group__wrapper',\n directives: [{\n name: 'touch',\n value: {\n start: (e: TouchEvent) => this.overflowCheck(e, this.onTouchStart),\n move: (e: TouchEvent) => this.overflowCheck(e, this.onTouchMove),\n end: (e: TouchEvent) => this.overflowCheck(e, this.onTouchEnd),\n },\n }],\n ref: 'wrapper',\n }, [this.genContent()])\n },\n calculateNewOffset (direction: 'prev' | 'next', widths: Widths, rtl: boolean, currentScrollOffset: number) {\n const sign = rtl ? -1 : 1\n const newAbosluteOffset = sign * currentScrollOffset +\n (direction === 'prev' ? -1 : 1) * widths.wrapper\n\n return sign * Math.max(Math.min(newAbosluteOffset, widths.content - widths.wrapper), 0)\n },\n onAffixClick (location: 'prev' | 'next') {\n this.$emit(`click:${location}`)\n this.scrollTo(location)\n },\n onResize () {\n /* istanbul ignore next */\n if (this._isDestroyed) return\n\n this.setWidths()\n },\n onTouchStart (e: TouchEvent) {\n const { content } = this.$refs\n\n this.startX = this.scrollOffset + e.touchstartX as number\n\n content.style.setProperty('transition', 'none')\n content.style.setProperty('willChange', 'transform')\n },\n onTouchMove (e: TouchEvent) {\n this.scrollOffset = this.startX - e.touchmoveX\n },\n onTouchEnd () {\n const { content, wrapper } = this.$refs\n const maxScrollOffset = content.clientWidth - wrapper.clientWidth\n\n content.style.setProperty('transition', null)\n content.style.setProperty('willChange', null)\n\n if (this.$vuetify.rtl) {\n /* istanbul ignore else */\n if (this.scrollOffset > 0 || !this.isOverflowing) {\n this.scrollOffset = 0\n } else if (this.scrollOffset <= -maxScrollOffset) {\n this.scrollOffset = -maxScrollOffset\n }\n } else {\n /* istanbul ignore else */\n if (this.scrollOffset < 0 || !this.isOverflowing) {\n this.scrollOffset = 0\n } else if (this.scrollOffset >= maxScrollOffset) {\n this.scrollOffset = maxScrollOffset\n }\n }\n },\n overflowCheck (e: TouchEvent, fn: (e: TouchEvent) => void) {\n e.stopPropagation()\n this.isOverflowing && fn(e)\n },\n scrollIntoView /* istanbul ignore next */ () {\n if (!this.selectedItem) {\n return\n }\n\n if (\n this.selectedIndex === 0 ||\n (!this.centerActive && !this.isOverflowing)\n ) {\n this.scrollOffset = 0\n } else if (this.centerActive) {\n this.scrollOffset = this.calculateCenteredOffset(\n this.selectedItem.$el as HTMLElement,\n this.widths,\n this.$vuetify.rtl\n )\n } else if (this.isOverflowing) {\n this.scrollOffset = this.calculateUpdatedOffset(\n this.selectedItem.$el as HTMLElement,\n this.widths,\n this.$vuetify.rtl,\n this.scrollOffset\n )\n }\n },\n calculateUpdatedOffset (selectedElement: HTMLElement, widths: Widths, rtl: boolean, currentScrollOffset: number): number {\n const clientWidth = selectedElement.clientWidth\n const offsetLeft = rtl\n ? (widths.content - selectedElement.offsetLeft - clientWidth)\n : selectedElement.offsetLeft\n\n if (rtl) {\n currentScrollOffset = -currentScrollOffset\n }\n\n const totalWidth = widths.wrapper + currentScrollOffset\n const itemOffset = clientWidth + offsetLeft\n const additionalOffset = clientWidth * 0.4\n\n if (offsetLeft <= currentScrollOffset) {\n currentScrollOffset = Math.max(offsetLeft - additionalOffset, 0)\n } else if (totalWidth <= itemOffset) {\n currentScrollOffset = Math.min(currentScrollOffset - (totalWidth - itemOffset - additionalOffset), widths.content - widths.wrapper)\n }\n\n return rtl ? -currentScrollOffset : currentScrollOffset\n },\n calculateCenteredOffset (selectedElement: HTMLElement, widths: Widths, rtl: boolean): number {\n const { offsetLeft, clientWidth } = selectedElement\n\n if (rtl) {\n const offsetCentered = widths.content - offsetLeft - clientWidth / 2 - widths.wrapper / 2\n return -Math.min(widths.content - widths.wrapper, Math.max(0, offsetCentered))\n } else {\n const offsetCentered = offsetLeft + clientWidth / 2 - widths.wrapper / 2\n return Math.min(widths.content - widths.wrapper, Math.max(0, offsetCentered))\n }\n },\n scrollTo /* istanbul ignore next */ (location: 'prev' | 'next') {\n this.scrollOffset = this.calculateNewOffset(location, {\n // Force reflow\n content: this.$refs.content ? this.$refs.content.clientWidth : 0,\n wrapper: this.$refs.wrapper ? this.$refs.wrapper.clientWidth : 0,\n }, this.$vuetify.rtl, this.scrollOffset)\n },\n setWidths /* istanbul ignore next */ () {\n window.requestAnimationFrame(() => {\n const { content, wrapper } = this.$refs\n\n this.widths = {\n content: content ? content.clientWidth : 0,\n wrapper: wrapper ? wrapper.clientWidth : 0,\n }\n\n this.isOverflowing = this.widths.wrapper < this.widths.content\n\n this.scrollIntoView()\n })\n },\n },\n\n render (h): VNode {\n return h('div', this.genData(), [\n this.genPrev(),\n this.genWrapper(),\n this.genNext(),\n ])\n },\n})\n\nexport default BaseSlideGroup.extend({\n name: 'v-slide-group',\n\n provide (): object {\n return {\n slideGroup: this,\n }\n },\n})\n","// Styles\nimport './VChipGroup.sass'\n\n// Extensions\nimport { BaseSlideGroup } from '../VSlideGroup/VSlideGroup'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n/* @vue/component */\nexport default mixins(\n BaseSlideGroup,\n Colorable\n).extend({\n name: 'v-chip-group',\n\n provide () {\n return {\n chipGroup: this,\n }\n },\n\n props: {\n column: Boolean,\n },\n\n computed: {\n classes () {\n return {\n ...BaseSlideGroup.options.computed.classes.call(this),\n 'v-chip-group': true,\n 'v-chip-group--column': this.column,\n }\n },\n },\n\n watch: {\n column (val) {\n if (val) this.scrollOffset = 0\n\n this.$nextTick(this.onResize)\n },\n },\n\n methods: {\n genData () {\n return this.setTextColor(this.color, {\n ...BaseSlideGroup.options.methods.genData.call(this),\n })\n },\n },\n})\n","import { render, staticRenderFns } from \"./AboutApplication.vue?vue&type=template&id=0dc61d02&scoped=true&\"\nimport script from \"./AboutApplication.vue?vue&type=script&lang=js&\"\nexport * from \"./AboutApplication.vue?vue&type=script&lang=js&\"\nimport style0 from \"./AboutApplication.vue?vue&type=style&index=0&id=0dc61d02&lang=scss&scoped=true&\"\nimport style1 from \"./AboutApplication.vue?vue&type=style&index=1&lang=scss&\"\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 \"0dc61d02\",\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 { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardSubtitle } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCardTitle } from 'vuetify/lib/components/VCard';\nimport { VCarousel } from 'vuetify/lib/components/VCarousel';\nimport { VCarouselItem } from 'vuetify/lib/components/VCarousel';\nimport { VChip } from 'vuetify/lib/components/VChip';\nimport { VChipGroup } from 'vuetify/lib/components/VChipGroup';\ninstallComponents(component, {VCard,VCardSubtitle,VCardText,VCardTitle,VCarousel,VCarouselItem,VChip,VChipGroup})\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{attrs:{\"flat\":\"\"}},[_c('v-card-text',[_c('p',[_vm._v(\" My name is Diana Sormani and I am a Software Engineer with 15 years of experience developing software. I am originally from Uruguay! Love my country. Although I'm living in the Netherlands. \")]),_c('p',[_vm._v(\" Currently I am focusing on Front-End development and I am loving it. I have been working a lot with \"),_c('a',{attrs:{\"href\":\"(https://vuejs.org/\"}},[_vm._v(\"Vue\")]),_vm._v(\", a lot of CSS and ES6. I also worked with \"),_c('a',{attrs:{\"href\":\"https://graphql.org/\"}},[_vm._v(\"GraphQL\")]),_vm._v(\" as well as REST services. I like researching new techonolgies and checking out what is out there and what other people is doing. \")]),_c('p',[_vm._v(\" I also have a lot of experience with automated testing for Front-End. Particularly with \"),_c('a',{attrs:{\"href\":\"https://jestjs.io/\"}},[_vm._v(\"Jest\")]),_vm._v(\" and \"),_c('a',{attrs:{\"href\":\"https://vue-test-utils.vuejs.org/\"}},[_vm._v(\"Vue Test Utils\")]),_vm._v(\". I've played around with Cypress and WebdriverIO. \"),_c('br'),_vm._v(\" In my humble opinion, automated testing is super useful and should be a MUST. But is not yet able to replace manual testing... So that still needs to be done. \")]),_c('p',[_vm._v(\" I normally work on Agile environments, so I am familiar with the process. I normally follow and promote GitFlow. \"),_c('br'),_vm._v(\" I also have experience setting up CI/CD pipelines on GitLab, though to be honest is not my favorite part ;) \")]),_c('p',[_vm._v(\"Anyhow, if you are interested on my work, check out my Linkedin page.\")])]),_c('v-list',{staticClass:\"pt-0 pr-0\"},[_c('v-list-item',{staticClass:\"pt-0 pr-0\"},[_c('v-list-item-avatar',{attrs:{\"color\":\"primary\",\"size\":\"40\"}},[_c('img',{attrs:{\"max-width\":\"40\",\"src\":require(\"../../assets/diana-avatar.png\"),\"alt\":\"Diana Sormani\"}})]),_c('v-list-item-icon',[_c('v-icon',{attrs:{\"large\":\"\",\"color\":\"blue\"},on:{\"click\":function($event){return _vm.goToLinkedin()}}},[_vm._v(\"mdi-linkedin\")])],1),_c('v-list-item-icon',[_c('v-icon',{attrs:{\"large\":\"\",\"color\":\"dark\"},on:{\"click\":function($event){return _vm.goToGithub()}}},[_vm._v(\"mdi-github\")])],1)],1),_c('v-list-item',{staticClass:\"mt-0 pt-0\"},[_c('v-list-item-title',{staticClass:\"mt-0 pt-0\"},[_c('strong',[_vm._v(\"Diana Sormani\")])])],1)],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/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AboutAuthor.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/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./AboutAuthor.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./AboutAuthor.vue?vue&type=template&id=42642310&\"\nimport script from \"./AboutAuthor.vue?vue&type=script&lang=js&\"\nexport * from \"./AboutAuthor.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 { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\nimport { VListItemAvatar } from 'vuetify/lib/components/VList';\nimport { VListItemIcon } from 'vuetify/lib/components/VList';\nimport { VListItemTitle } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VCard,VCardText,VIcon,VList,VListItem,VListItemAvatar,VListItemIcon,VListItemTitle})\n","\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/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./About.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/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./About.vue?vue&type=script&lang=js&\"","// Mixins\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Routable from '../../mixins/routable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport { keyCodes } from './../../util/helpers'\nimport mixins from '../../util/mixins'\nimport { ExtractVue } from './../../util/mixins'\n\n// Types\nimport { VNode } from 'vue/types'\n\nconst baseMixins = mixins(\n Routable,\n // Must be after routable\n // to overwrite activeClass\n GroupableFactory('tabsBar'),\n Themeable\n)\n\ninterface options extends ExtractVue {\n $el: HTMLElement\n}\n\nexport default baseMixins.extend().extend(\n /* @vue/component */\n).extend({\n name: 'v-tab',\n\n props: {\n ripple: {\n type: [Boolean, Object],\n default: true,\n },\n },\n\n data: () => ({\n proxyClass: 'v-tab--active',\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-tab': true,\n ...Routable.options.computed.classes.call(this),\n 'v-tab--disabled': this.disabled,\n ...this.groupClasses,\n }\n },\n value (): any {\n let to = this.to || this.href || ''\n\n if (this.$router &&\n this.to === Object(this.to)\n ) {\n const resolve = this.$router.resolve(\n this.to,\n this.$route,\n this.append\n )\n\n to = resolve.href\n }\n\n return to.replace('#', '')\n },\n },\n\n mounted () {\n this.onRouteChange()\n },\n\n methods: {\n click (e: KeyboardEvent | MouseEvent): void {\n // If user provides an\n // actual link, do not\n // prevent default\n if (this.href &&\n this.href.indexOf('#') > -1\n ) e.preventDefault()\n\n if (e.detail) this.$el.blur()\n\n this.$emit('click', e)\n\n this.to || this.toggle()\n },\n },\n\n render (h): VNode {\n const { tag, data } = this.generateRouteLink()\n\n data.attrs = {\n ...data.attrs,\n 'aria-selected': String(this.isActive),\n role: 'tab',\n tabindex: 0,\n }\n data.on = {\n ...data.on,\n keydown: (e: KeyboardEvent) => {\n if (e.keyCode === keyCodes.enter) this.click(e)\n\n this.$emit('keydown', e)\n },\n }\n\n return h(tag, data, this.$slots.default)\n },\n})\n","// Extensions\nimport VWindowItem from '../VWindow/VWindowItem'\n\n/* @vue/component */\nexport default VWindowItem.extend({\n name: 'v-tab-item',\n\n props: {\n id: String,\n },\n\n methods: {\n genWindowItem () {\n const item = VWindowItem.options.methods.genWindowItem.call(this)\n\n item.data!.domProps = item.data!.domProps || {}\n item.data!.domProps.id = this.id || this.value\n\n return item\n },\n },\n})\n","// Extensions\nimport { BaseSlideGroup } from '../VSlideGroup/VSlideGroup'\n\n// Components\nimport VTab from './VTab'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\nimport SSRBootable from '../../mixins/ssr-bootable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport { Route } from 'vue-router'\nimport { VNode } from 'vue'\n\ntype VTabInstance = InstanceType\n\nexport default mixins(\n BaseSlideGroup,\n SSRBootable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-tabs-bar',\n\n provide () {\n return {\n tabsBar: this,\n }\n },\n\n computed: {\n classes () {\n return {\n ...BaseSlideGroup.options.computed.classes.call(this),\n 'v-tabs-bar': true,\n 'v-tabs-bar--is-mobile': this.isMobile,\n // TODO: Remove this and move to v-slide-group\n 'v-tabs-bar--show-arrows': this.showArrows,\n ...this.themeClasses,\n }\n },\n },\n\n watch: {\n items: 'callSlider',\n internalValue: 'callSlider',\n $route: 'onRouteChange',\n },\n\n methods: {\n callSlider () {\n if (!this.isBooted) return\n\n this.$emit('call:slider')\n },\n genContent () {\n const render = BaseSlideGroup.options.methods.genContent.call(this)\n\n render.data = render.data || {}\n render.data.staticClass += ' v-tabs-bar__content'\n\n return render\n },\n onRouteChange (val: Route, oldVal: Route) {\n /* istanbul ignore next */\n if (this.mandatory) return\n\n const items = this.items as unknown as VTabInstance[]\n const newPath = val.path\n const oldPath = oldVal.path\n\n let hasNew = false\n let hasOld = false\n\n for (const item of items) {\n if (item.to === newPath) hasNew = true\n else if (item.to === oldPath) hasOld = true\n\n if (hasNew && hasOld) break\n }\n\n // If we have an old item and not a new one\n // it's assumed that the user navigated to\n // a path that is not present in the items\n if (!hasNew && hasOld) this.internalValue = undefined\n },\n },\n\n render (h): VNode {\n const render = BaseSlideGroup.options.render.call(this, h)\n\n render.data!.attrs = {\n role: 'tablist',\n }\n\n return render\n },\n})\n","// Extensions\nimport VWindow from '../VWindow/VWindow'\n\n// Types & Components\nimport { BaseItemGroup, GroupableInstance } from './../VItemGroup/VItemGroup'\n\n/* @vue/component */\nexport default VWindow.extend({\n name: 'v-tabs-items',\n\n props: {\n mandatory: {\n type: Boolean,\n default: false,\n },\n },\n\n computed: {\n classes (): object {\n return {\n ...VWindow.options.computed.classes.call(this),\n 'v-tabs-items': true,\n }\n },\n isDark (): boolean {\n return this.rootIsDark\n },\n },\n\n methods: {\n getValue (item: GroupableInstance, i: number) {\n return item.id || BaseItemGroup.options.methods.getValue.call(this, item, i)\n },\n },\n})\n","// Mixins\nimport Colorable from '../../mixins/colorable'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue/types'\n\n/* @vue/component */\nexport default mixins(Colorable).extend({\n name: 'v-tabs-slider',\n\n render (h): VNode {\n return h('div', this.setBackgroundColor(this.color, {\n staticClass: 'v-tabs-slider',\n }))\n },\n})\n","// Styles\nimport './VTabs.sass'\n\n// Components\nimport VTabsBar from './VTabsBar'\nimport VTabsItems from './VTabsItems'\nimport VTabsSlider from './VTabsSlider'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Directives\nimport Resize from '../../directives/resize'\n\n// Utilities\nimport { convertToUnit } from '../../util/helpers'\nimport { ExtractVue } from './../../util/mixins'\nimport mixins from '../../util/mixins'\n\n// Types\nimport { VNode } from 'vue/types'\n\nconst baseMixins = mixins(\n Colorable,\n Proxyable,\n Themeable\n)\n\ninterface options extends ExtractVue {\n $refs: {\n items: InstanceType\n }\n}\n\nexport default baseMixins.extend().extend({\n name: 'v-tabs',\n\n directives: {\n Resize,\n },\n\n props: {\n activeClass: {\n type: String,\n default: '',\n },\n alignWithTitle: Boolean,\n backgroundColor: String,\n centerActive: Boolean,\n centered: Boolean,\n fixedTabs: Boolean,\n grow: Boolean,\n height: {\n type: [Number, String],\n default: undefined,\n },\n hideSlider: Boolean,\n iconsAndText: Boolean,\n mobileBreakpoint: [String, Number],\n nextIcon: {\n type: String,\n default: '$next',\n },\n optional: Boolean,\n prevIcon: {\n type: String,\n default: '$prev',\n },\n right: Boolean,\n showArrows: [Boolean, String],\n sliderColor: String,\n sliderSize: {\n type: [Number, String],\n default: 2,\n },\n vertical: Boolean,\n },\n\n data () {\n return {\n resizeTimeout: 0,\n slider: {\n height: null as null | number,\n left: null as null | number,\n right: null as null | number,\n top: null as null | number,\n width: null as null | number,\n },\n transitionTime: 300,\n }\n },\n\n computed: {\n classes (): object {\n return {\n 'v-tabs--align-with-title': this.alignWithTitle,\n 'v-tabs--centered': this.centered,\n 'v-tabs--fixed-tabs': this.fixedTabs,\n 'v-tabs--grow': this.grow,\n 'v-tabs--icons-and-text': this.iconsAndText,\n 'v-tabs--right': this.right,\n 'v-tabs--vertical': this.vertical,\n ...this.themeClasses,\n }\n },\n isReversed (): boolean {\n return this.$vuetify.rtl && this.vertical\n },\n sliderStyles (): object {\n return {\n height: convertToUnit(this.slider.height),\n left: this.isReversed ? undefined : convertToUnit(this.slider.left),\n right: this.isReversed ? convertToUnit(this.slider.right) : undefined,\n top: this.vertical ? convertToUnit(this.slider.top) : undefined,\n transition: this.slider.left != null ? null : 'none',\n width: convertToUnit(this.slider.width),\n }\n },\n computedColor (): string {\n if (this.color) return this.color\n else if (this.isDark && !this.appIsDark) return 'white'\n else return 'primary'\n },\n },\n\n watch: {\n alignWithTitle: 'callSlider',\n centered: 'callSlider',\n centerActive: 'callSlider',\n fixedTabs: 'callSlider',\n grow: 'callSlider',\n iconsAndText: 'callSlider',\n right: 'callSlider',\n showArrows: 'callSlider',\n vertical: 'callSlider',\n '$vuetify.application.left': 'onResize',\n '$vuetify.application.right': 'onResize',\n '$vuetify.rtl': 'onResize',\n },\n\n mounted () {\n this.$nextTick(() => {\n window.setTimeout(this.callSlider, 30)\n })\n },\n\n methods: {\n callSlider () {\n if (\n this.hideSlider ||\n !this.$refs.items ||\n !this.$refs.items.selectedItems.length\n ) {\n this.slider.width = 0\n return false\n }\n\n this.$nextTick(() => {\n // Give screen time to paint\n const activeTab = this.$refs.items.selectedItems[0]\n /* istanbul ignore if */\n if (!activeTab || !activeTab.$el) {\n this.slider.width = 0\n this.slider.left = 0\n return\n }\n const el = activeTab.$el as HTMLElement\n\n this.slider = {\n height: !this.vertical ? Number(this.sliderSize) : el.scrollHeight,\n left: this.vertical ? 0 : el.offsetLeft,\n right: this.vertical ? 0 : el.offsetLeft + el.offsetWidth,\n top: el.offsetTop,\n width: this.vertical ? Number(this.sliderSize) : el.scrollWidth,\n }\n })\n\n return true\n },\n genBar (items: VNode[], slider: VNode | null) {\n const data = {\n style: {\n height: convertToUnit(this.height),\n },\n props: {\n activeClass: this.activeClass,\n centerActive: this.centerActive,\n dark: this.dark,\n light: this.light,\n mandatory: !this.optional,\n mobileBreakpoint: this.mobileBreakpoint,\n nextIcon: this.nextIcon,\n prevIcon: this.prevIcon,\n showArrows: this.showArrows,\n value: this.internalValue,\n },\n on: {\n 'call:slider': this.callSlider,\n change: (val: any) => {\n this.internalValue = val\n },\n },\n ref: 'items',\n }\n\n this.setTextColor(this.computedColor, data)\n this.setBackgroundColor(this.backgroundColor, data)\n\n return this.$createElement(VTabsBar, data, [\n this.genSlider(slider),\n items,\n ])\n },\n genItems (items: VNode | null, item: VNode[]) {\n // If user provides items\n // opt to use theirs\n if (items) return items\n\n // If no tabs are provided\n // render nothing\n if (!item.length) return null\n\n return this.$createElement(VTabsItems, {\n props: {\n value: this.internalValue,\n },\n on: {\n change: (val: any) => {\n this.internalValue = val\n },\n },\n }, item)\n },\n genSlider (slider: VNode | null) {\n if (this.hideSlider) return null\n\n if (!slider) {\n slider = this.$createElement(VTabsSlider, {\n props: { color: this.sliderColor },\n })\n }\n\n return this.$createElement('div', {\n staticClass: 'v-tabs-slider-wrapper',\n style: this.sliderStyles,\n }, [slider])\n },\n onResize () {\n if (this._isDestroyed) return\n\n clearTimeout(this.resizeTimeout)\n this.resizeTimeout = window.setTimeout(this.callSlider, 0)\n },\n parseNodes () {\n let items = null\n let slider = null\n const item = []\n const tab = []\n const slot = this.$slots.default || []\n const length = slot.length\n\n for (let i = 0; i < length; i++) {\n const vnode = slot[i]\n\n if (vnode.componentOptions) {\n switch (vnode.componentOptions.Ctor.options.name) {\n case 'v-tabs-slider': slider = vnode\n break\n case 'v-tabs-items': items = vnode\n break\n case 'v-tab-item': item.push(vnode)\n break\n // case 'v-tab' - intentionally omitted\n default: tab.push(vnode)\n }\n } else {\n tab.push(vnode)\n }\n }\n\n /**\n * tab: array of `v-tab`\n * slider: single `v-tabs-slider`\n * items: single `v-tabs-items`\n * item: array of `v-tab-item`\n */\n return { tab, slider, items, item }\n },\n },\n\n render (h): VNode {\n const { tab, slider, items, item } = this.parseNodes()\n\n return h('div', {\n staticClass: 'v-tabs',\n class: this.classes,\n directives: [{\n name: 'resize',\n modifiers: { quiet: true },\n value: this.onResize,\n }],\n }, [\n this.genBar(tab, slider),\n this.genItems(items, item),\n ])\n },\n})\n","import { render, staticRenderFns } from \"./About.vue?vue&type=template&id=5e5094ea&\"\nimport script from \"./About.vue?vue&type=script&lang=js&\"\nexport * from \"./About.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 { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\ninstallComponents(component, {VTab,VTabItem,VTabs,VTabsItems})\n"],"sourceRoot":""}