{"version":3,"sources":["webpack:///../../../src/components/VGrid/VRow.ts","webpack:///../../../src/components/VIcon/VIcon.ts","webpack:///../../../src/mixins/routable/index.ts","webpack:///../../../src/mixins/measurable/index.ts","webpack:///../../../src/mixins/registrable/index.ts","webpack:///./src/modules/helpAndFaqs/views/articleDetail.vue?e96c","webpack:///../../../src/mixins/groupable/index.ts","webpack:///../../../src/components/VItemGroup/VItemGroup.ts","webpack:///../../../src/components/VGrid/VCol.ts","webpack:///../../../src/mixins/binds-attrs/index.ts","webpack:///../../../src/components/VSlideGroup/VSlideGroup.ts","webpack:///../../../src/mixins/comparable/index.ts","webpack:///./src/mixins/sidebarMixin.ts","webpack:///../../../src/components/VIcon/index.ts","webpack:///./src/components/base/loggedInComponentBase.ts","webpack:///../../../src/components/VResponsive/VResponsive.ts","webpack:///../../../src/components/VResponsive/index.ts","webpack:///../../../src/components/VImg/VImg.ts","webpack:///../../../src/mixins/sizeable/index.ts","webpack:///./src/modules/helpAndFaqs/views/articleDetail.vue","webpack:///./src/modules/helpAndFaqs/views/articleDetail.vue?5274","webpack:///./src/modules/helpAndFaqs/views/articleDetail.vue?f0e6","webpack:///./src/modules/helpAndFaqs/views/articleDetail.vue?9287","webpack:///../../../src/directives/touch/index.ts","webpack:///../../../src/components/VChip/VChip.ts","webpack:///../../../src/components/VDivider/VDivider.ts","webpack:///../../../src/directives/resize/index.ts","webpack:///../../../src/mixins/mobile/index.ts","webpack:///../../../src/components/VChipGroup/VChipGroup.ts","webpack:///../../../src/mixins/toggleable/index.ts","webpack:///./node_modules/vue-youtube-embed/lib/vue-youtube-embed.js"],"names":["breakpoints","ALIGNMENT","makeProps","prefix","def","reduce","props","val","upperFirst","alignValidator","str","includes","alignProps","type","String","default","validator","justifyValidator","justifyProps","alignContentValidator","alignContentProps","propMap","align","Object","keys","justify","alignContent","classMap","breakpointClass","prop","className","breakpoint","replace","toLowerCase","cache","Map","Vue","extend","name","functional","tag","dense","Boolean","noGutters","render","h","data","children","cacheKey","classList","get","forEach","value","push","set","mergeData","staticClass","class","SIZE_MAP","isFontAwesome5","iconType","some","isSvgPath","icon","test","length","VIcon","mixins","BindsAttrs","Colorable","Sizeable","Themeable","disabled","left","right","size","Number","required","computed","medium","hasClickListener","this","listeners$","click","methods","getIcon","iconName","$slots","text","trim","remapInternalIcon","getSize","sizes","xSmall","small","large","xLarge","explicitSize","find","key","convertToUnit","getDefaultData","attrs","undefined","attrs$","on","getSvgWrapperData","fontSize","wrapperData","style","height","width","applyColors","themeClasses","setTextColor","color","renderFontIcon","newChildren","delimiterIndex","indexOf","isMaterialIcon","slice","renderSvgIcon","svgData","xmlns","viewBox","role","d","renderSvgIconComponent","component","nativeOn","$_wrapperFor","domProps","textContent","innerHTML","directives","Ripple","activeClass","append","exact","exactPath","exactActiveClass","link","href","to","nuxt","ripple","target","isActive","proxyClass","classes","computedRipple","_a","isClickable","isLink","$listeners","$attrs","tabindex","styles","watch","$route","mounted","onRouteChange","generateRouteLink","ref","path","assign","$refs","$nextTick","getObjectValueByPath","toggle","maxHeight","maxWidth","minHeight","minWidth","measurableStyles","generateWarning","child","parent","consoleWarn","inject","namespace","defaultImpl","register","unregister","provide","self","factory","RegistrableInject","groupClasses","created","beforeDestroy","$emit","BaseItemGroup","Comparable","Proxyable","mandatory","max","multiple","internalLazyValue","items","selectedIndex","selectedItem","selectedItems","filter","item","index","toggleMethod","getValue","selectedValues","internalValue","Array","isArray","v","valueComparator","intern","genData","i","onClick","updateInternalValue","$on","updateMandatory","updateItem","_isDestroyed","splice","valueIndex","updateItemsState","updateMultiple","updateSingle","last","reverse","defaultValue","findIndex","isSame","itemGroup","breakpointProps","offsetProps","orderProps","col","offset","order","cols","alignSelf","hasColClasses","startsWith","makeWatcher","property","oldVal","attr","prototype","hasOwnProperty","call","$delete","$data","$set","$watch","immediate","bias","c","x","Math","abs","sign","calculateUpdatedOffset","selectedElement","widths","rtl","currentScrollOffset","clientWidth","offsetLeft","content","totalWidth","wrapper","itemOffset","additionalOffset","min","calculateCenteredOffset","offsetCentered","BaseSlideGroup","Mobile","Resize","Touch","centerActive","nextIcon","prevIcon","showArrows","isOverflowing","resizeTimeout","startX","isSwipingHorizontal","isSwiping","scrollOffset","canTouch","window","__cachedNext","genTransition","__cachedPrev","options","hasAffixes","isMobile","hasNext","hasPrev","$vuetify","scroll","transform","ResizeObserver","obs","onResize","observe","$el","disconnect","itemsLength","setWidths","onScroll","scrollLeft","onFocusin","e","el","composedPath","vm","genNext","slot","$scopedSlots","next","$createElement","onAffixClick","genContent","focusin","genIcon","location","upperLocation","toUpperCase","hasAffix","genPrev","prev","VFadeTransition","genWrapper","start","overflowCheck","onTouchStart","move","onTouchMove","end","onTouchEnd","calculateNewOffset","direction","newAbosluteOffset","scrollTo","touchstartX","setProperty","diffX","touchmoveX","diffY","touchmoveY","touchstartY","document","documentElement","overflowY","maxScrollOffset","removeProperty","fn","stopPropagation","scrollIntoView","lastItemPosition","getBoundingClientRect","wrapperPosition","requestAnimationFrame","slideGroup","Function","deepEqual","SidebarMixin","LoggedInComponentBase","constructor","routeName","updateSidebarStates","closeMainNav","setTimeout","uiModule","mainNavigationDrawerOpen","setNavigationDrawer","mdAndDown","toggleAltDrawer","drawerType","AltDrawerType","CampaignSidebar","open","UpcomingPostsSidebar","Component","assetModalModule","getModule","AssetModalModule","newAssetModalModule","NewAssetModalModule","postModalModule","PostModalModule","stickerModalModule","StickerModalModule","storesModule","StoresModule","UiModule","userModule","UserModule","createModule","CreateModule","createAssetModule","CreateAssetModule","createPostModule","CreatePostModule","currentStore","campaignSidebarOpen","isLoading","upcomingPostsSidebarOpen","user","id","Promise","resolve","isViewingSingleStore","getStoreChannels","storeChannels","toggleAuthoriseSocialChannelsModal","Measurable","aspectRatio","contentClass","computedAspectRatio","aspectStyle","paddingBottom","__cachedSizer","getSlot","VResponsive","hasIntersect","intersect","alt","contain","eager","gradient","lazySrc","root","rootMargin","threshold","position","src","srcset","transition","currentSrc","image","calculatedAspectRatio","naturalWidth","hasError","normalisedSrc","aspect","__cachedImage","backgroundImage","join","backgroundPosition","mode","loadImage","init","entries","observer","isIntersecting","lazyImg","Image","pollForSize","onLoad","getSrc","endsWith","naturalHeight","onError","onload","decode","catch","err","message","then","onerror","img","timeout","poll","complete","_b","__genPlaceholder","placeholder","appear","node","modifiers","once","handler","sizeableClasses","_c","_vm","_e","article","params","articleId","_v","staticRenderFns","use","VueYouTubeEmbed","global","helpAndFAQsModule","HelpAndFAQsModule","ArticleDetail","currentHelpArticle","smAndDown","from","getArticleById","console","error","ready","event","player","components","youtube","YouTubePlayer","handleGesture","touchendX","touchendY","dirRatio","minDistance","offsetX","offsetY","up","down","touchstart","touch","changedTouches","clientX","clientY","touchend","touchmove","createHandlers","inserted","binding","vnode","parentElement","passive","handlers","_touchHandlers","context","_uid","eventName","addEventListener","unbind","removeEventListener","Routable","GroupableFactory","ToggleableFactory","active","chipGroup","close","closeIcon","closeLabel","draggable","filterIcon","label","outlined","pill","textColor","hasClose","breakingProps","original","replacement","breaking","genFilter","VExpandXTransition","genClose","lang","t","preventDefault","setBackgroundColor","inset","vertical","orientation","callback","_onResize","quiet","mobileBreakpoint","isNaN","mobile","mobileWidth","parseInt","isNumber","deprecate","column","model","Toggleable","apply","arguments","youtubeRegexp","timeRegexp","getIdFromURL","url","pieces","split","uriComponent","decodeURIComponent","getTimeFromURL","times","match","full","minutes","seconds","container","scripts","events","run","this$1","YT","nextTick","pid","playerHeight","playerWidth","playerVars","autoplay","time","videoId","mute","host","elementId","template","setSize","setMute","unMute","update","bind","YouTube","Player","onReady","onStateChange","destroy","install","componentId","$youtube","createElement","firstScriptTag","getElementsByTagName","parentNode","insertBefore","onYouTubeIframeAPIReady","PlayerState","ENDED","PLAYING","PAUSED","BUFFERING","CUED"],"mappings":"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","file":"js/chunk-25671852.0771b97a.js","sourcesContent":["import './VGrid.sass'\n\nimport Vue, { 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 ALIGNMENT = ['start', 'end', 'center']\n\nfunction makeProps (prefix: string, def: () => PropOptions) {\n return breakpoints.reduce((props, val) => {\n props[prefix + upperFirst(val)] = def()\n return props\n }, {} as Dictionary)\n}\n\nconst alignValidator = (str: any) => [...ALIGNMENT, 'baseline', 'stretch'].includes(str)\nconst alignProps = makeProps('align', () => ({\n type: String,\n default: null,\n validator: alignValidator,\n}))\n\nconst justifyValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around'].includes(str)\nconst justifyProps = makeProps('justify', () => ({\n type: String,\n default: null,\n validator: justifyValidator,\n}))\n\nconst alignContentValidator = (str: any) => [...ALIGNMENT, 'space-between', 'space-around', 'stretch'].includes(str)\nconst alignContentProps = makeProps('alignContent', () => ({\n type: String,\n default: null,\n validator: alignContentValidator,\n}))\n\nconst propMap = {\n align: Object.keys(alignProps),\n justify: Object.keys(justifyProps),\n alignContent: Object.keys(alignContentProps),\n}\n\nconst classMap = {\n align: 'align',\n justify: 'justify',\n alignContent: 'align-content',\n}\n\nfunction breakpointClass (type: keyof typeof propMap, prop: string, val: string) {\n let className = classMap[type]\n if (val == null) {\n return undefined\n }\n if (prop) {\n // alignSm -> Sm\n const breakpoint = prop.replace(type, '')\n className += `-${breakpoint}`\n }\n // .align-items-sm-center\n className += `-${val}`\n return className.toLowerCase()\n}\n\nconst cache = new Map()\n\nexport default Vue.extend({\n name: 'v-row',\n functional: true,\n props: {\n tag: {\n type: String,\n default: 'div',\n },\n dense: Boolean,\n noGutters: Boolean,\n align: {\n type: String,\n default: null,\n validator: alignValidator,\n },\n ...alignProps,\n justify: {\n type: String,\n default: null,\n validator: justifyValidator,\n },\n ...justifyProps,\n alignContent: {\n type: String,\n default: null,\n validator: alignContentValidator,\n },\n ...alignContentProps,\n },\n render (h, { props, data, children }) {\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 `align`, `justify`, `alignContent` breakpoint props\n let type: keyof typeof propMap\n for (type in propMap) {\n propMap[type].forEach(prop => {\n const value: string = (props as any)[prop]\n const className = breakpointClass(type, prop, value)\n if (className) classList!.push(className)\n })\n }\n\n classList.push({\n 'no-gutters': props.noGutters,\n 'row--dense': props.dense,\n [`align-${props.align}`]: props.align,\n [`justify-${props.justify}`]: props.justify,\n [`align-content-${props.alignContent}`]: props.alignContent,\n })\n\n cache.set(cacheKey, classList)\n }\n\n return h(\n props.tag,\n mergeData(data, {\n staticClass: 'row',\n class: classList,\n }),\n children\n )\n },\n})\n","import './VIcon.sass'\n\n// Mixins\nimport BindsAttrs from '../../mixins/binds-attrs'\nimport Colorable from '../../mixins/colorable'\nimport Sizeable from '../../mixins/sizeable'\nimport Themeable from '../../mixins/themeable'\n\n// Util\nimport { convertToUnit, keys, remapInternalIcon } from '../../util/helpers'\n\n// Types\nimport Vue, { CreateElement, VNode, VNodeChildren, VNodeData } from 'vue'\nimport mixins from '../../util/mixins'\nimport { VuetifyIcon, VuetifyIconComponent } from 'vuetify/types/services/icons'\n\nenum SIZE_MAP {\n xSmall = '12px',\n small = '16px',\n default = '24px',\n medium = '28px',\n large = '36px',\n xLarge = '40px'\n}\n\nfunction isFontAwesome5 (iconType: string): boolean {\n return ['fas', 'far', 'fal', 'fab', 'fad', 'fak'].some(val => iconType.includes(val))\n}\n\nfunction isSvgPath (icon: string): boolean {\n return (/^[mzlhvcsqta]\\s*[-+.0-9][^mlhvzcsqta]+/i.test(icon) && /[\\dz]$/i.test(icon) && icon.length > 4)\n}\n\nconst VIcon = mixins(\n BindsAttrs,\n Colorable,\n Sizeable,\n Themeable\n /* @vue/component */\n).extend({\n name: 'v-icon',\n\n props: {\n dense: Boolean,\n disabled: Boolean,\n left: Boolean,\n right: Boolean,\n size: [Number, String],\n tag: {\n type: String,\n required: false,\n default: 'i',\n },\n },\n\n computed: {\n medium () {\n return false\n },\n hasClickListener (): boolean {\n return Boolean(\n this.listeners$.click || this.listeners$['!click']\n )\n },\n },\n\n methods: {\n getIcon (): VuetifyIcon {\n let iconName = ''\n if (this.$slots.default) iconName = this.$slots.default[0].text!.trim()\n\n return remapInternalIcon(this, iconName)\n },\n getSize (): string | undefined {\n const sizes = {\n xSmall: this.xSmall,\n small: this.small,\n medium: this.medium,\n large: this.large,\n xLarge: this.xLarge,\n }\n\n const explicitSize = keys(sizes).find(key => sizes[key])\n\n return (\n (explicitSize && SIZE_MAP[explicitSize]) || convertToUnit(this.size)\n )\n },\n // Component data for both font icon and SVG wrapper span\n getDefaultData (): VNodeData {\n return {\n staticClass: 'v-icon notranslate',\n class: {\n 'v-icon--disabled': this.disabled,\n 'v-icon--left': this.left,\n 'v-icon--link': this.hasClickListener,\n 'v-icon--right': this.right,\n 'v-icon--dense': this.dense,\n },\n attrs: {\n 'aria-hidden': !this.hasClickListener,\n disabled: this.hasClickListener && this.disabled,\n type: this.hasClickListener ? 'button' : undefined,\n ...this.attrs$,\n },\n on: this.listeners$,\n }\n },\n getSvgWrapperData () {\n const fontSize = this.getSize()\n const wrapperData = {\n ...this.getDefaultData(),\n style: fontSize ? {\n fontSize,\n height: fontSize,\n width: fontSize,\n } : undefined,\n }\n this.applyColors(wrapperData)\n\n return wrapperData\n },\n applyColors (data: VNodeData): void {\n data.class = { ...data.class, ...this.themeClasses }\n this.setTextColor(this.color, data)\n },\n renderFontIcon (icon: string, h: CreateElement): VNode {\n const newChildren: VNodeChildren = []\n const data = this.getDefaultData()\n\n let iconType = 'material-icons'\n // Material Icon delimiter is _\n // https://material.io/icons/\n const delimiterIndex = icon.indexOf('-')\n const isMaterialIcon = delimiterIndex <= -1\n\n if (isMaterialIcon) {\n // Material icon uses ligatures.\n newChildren.push(icon)\n } else {\n iconType = icon.slice(0, delimiterIndex)\n if (isFontAwesome5(iconType)) iconType = ''\n }\n\n data.class[iconType] = true\n data.class[icon] = !isMaterialIcon\n\n const fontSize = this.getSize()\n if (fontSize) data.style = { fontSize }\n\n this.applyColors(data)\n\n return h(this.hasClickListener ? 'button' : this.tag, data, newChildren)\n },\n renderSvgIcon (icon: string, h: CreateElement): VNode {\n const svgData: VNodeData = {\n class: 'v-icon__svg',\n attrs: {\n xmlns: 'http://www.w3.org/2000/svg',\n viewBox: '0 0 24 24',\n role: 'img',\n 'aria-hidden': true,\n },\n }\n\n const size = this.getSize()\n if (size) {\n svgData.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [\n h('svg', svgData, [\n h('path', {\n attrs: {\n d: icon,\n },\n }),\n ]),\n ])\n },\n renderSvgIconComponent (\n icon: VuetifyIconComponent,\n h: CreateElement\n ): VNode {\n const data: VNodeData = {\n class: {\n 'v-icon__component': true,\n },\n }\n\n const size = this.getSize()\n if (size) {\n data.style = {\n fontSize: size,\n height: size,\n width: size,\n }\n }\n\n this.applyColors(data)\n\n const component = icon.component\n data.props = icon.props\n data.nativeOn = data.on\n\n return h(this.hasClickListener ? 'button' : 'span', this.getSvgWrapperData(), [\n h(component, data),\n ])\n },\n },\n\n render (h: CreateElement): VNode {\n const icon = this.getIcon()\n\n if (typeof icon === 'string') {\n if (isSvgPath(icon)) {\n return this.renderSvgIcon(icon, h)\n }\n return this.renderFontIcon(icon, h)\n }\n\n return this.renderSvgIconComponent(icon, h)\n },\n})\n\nexport default Vue.extend({\n name: 'v-icon',\n\n $_wrapperFor: VIcon,\n\n functional: true,\n\n render (h, { data, children }): VNode {\n let iconName = ''\n\n // Support usage of v-text and v-html\n if (data.domProps) {\n iconName = data.domProps.textContent ||\n data.domProps.innerHTML ||\n iconName\n\n // Remove nodes so it doesn't\n // overwrite our changes\n delete data.domProps.textContent\n delete data.domProps.innerHTML\n }\n\n return h(VIcon, data, iconName ? [iconName] : children)\n },\n})\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","// Helpers\nimport { convertToUnit } from '../../util/helpers'\n\n// Types\nimport Vue, { PropType } from 'vue'\n\nexport type NumberOrNumberString = PropType\n\nexport default Vue.extend({\n name: 'measurable',\n\n props: {\n height: [Number, String] as NumberOrNumberString,\n maxHeight: [Number, String] as NumberOrNumberString,\n maxWidth: [Number, String] as NumberOrNumberString,\n minHeight: [Number, String] as NumberOrNumberString,\n minWidth: [Number, String] as NumberOrNumberString,\n width: [Number, String] as NumberOrNumberString,\n },\n\n computed: {\n measurableStyles (): object {\n const styles: Record = {}\n\n const height = convertToUnit(this.height)\n const minHeight = convertToUnit(this.minHeight)\n const minWidth = convertToUnit(this.minWidth)\n const maxHeight = convertToUnit(this.maxHeight)\n const maxWidth = convertToUnit(this.maxWidth)\n const width = convertToUnit(this.width)\n\n if (height) styles.height = height\n if (minHeight) styles.minHeight = minHeight\n if (minWidth) styles.minWidth = minWidth\n if (maxHeight) styles.maxHeight = maxHeight\n if (maxWidth) styles.maxWidth = maxWidth\n if (width) styles.width = width\n\n return styles\n },\n },\n})\n","import Vue from 'vue'\nimport { VueConstructor } from 'vue/types/vue'\nimport { consoleWarn } from '../../util/console'\n\nfunction generateWarning (child: string, parent: string) {\n return () => consoleWarn(`The ${child} component must be used inside a ${parent}`)\n}\n\nexport type Registrable = VueConstructor : {\n register (...props: any[]): void\n unregister (self: any): void\n }\n}>\n\nexport function inject<\n T extends string, C extends VueConstructor | null = null\n> (namespace: T, child?: string, parent?: string): Registrable {\n const defaultImpl = child && parent ? {\n register: generateWarning(child, parent),\n unregister: generateWarning(child, parent),\n } : null\n\n return Vue.extend({\n name: 'registrable-inject',\n\n inject: {\n [namespace]: {\n default: defaultImpl,\n },\n },\n })\n}\n\nexport function provide (namespace: string, self = false) {\n return Vue.extend({\n name: 'registrable-provide',\n\n provide (): object {\n return {\n [namespace]: self ? this : {\n register: (this as any).register,\n unregister: (this as any).unregister,\n },\n }\n },\n })\n}\n","export * from \"-!../../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./articleDetail.vue?vue&type=style&index=0&id=700b428a&prod&lang=scss&scoped=true&\"","// Mixins\nimport { Registrable, inject as RegistrableInject } from '../registrable'\n\n// Utilities\nimport { ExtractVue } from '../../util/mixins'\nimport { VueConstructor } from 'vue'\nimport { PropValidator } from 'vue/types/options'\n\nexport type Groupable = VueConstructor> & {\n activeClass: string\n isActive: boolean\n disabled: boolean\n groupClasses: object\n toggle (): void\n}>\n\nexport function factory (\n namespace: T,\n child?: string,\n parent?: string\n): Groupable {\n return RegistrableInject(namespace, child, parent).extend({\n name: 'groupable',\n\n props: {\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this[namespace]) return undefined\n\n return this[namespace].activeClass\n },\n } as any as PropValidator,\n disabled: Boolean,\n },\n\n data () {\n return {\n isActive: false,\n }\n },\n\n computed: {\n groupClasses (): object {\n if (!this.activeClass) return {}\n\n return {\n [this.activeClass]: this.isActive,\n }\n },\n },\n\n created () {\n this[namespace] && (this[namespace] as any).register(this)\n },\n\n beforeDestroy () {\n this[namespace] && (this[namespace] as any).unregister(this)\n },\n\n methods: {\n toggle () {\n this.$emit('change')\n },\n },\n })\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-redeclare */\nconst Groupable = factory('itemGroup')\n\nexport default Groupable\n","// Styles\nimport './VItemGroup.sass'\n\n// Mixins\nimport Comparable from '../../mixins/comparable'\nimport Groupable from '../../mixins/groupable'\nimport Proxyable from '../../mixins/proxyable'\nimport Themeable from '../../mixins/themeable'\n\n// Utilities\nimport mixins from '../../util/mixins'\nimport { consoleWarn } from '../../util/console'\n\n// Types\nimport { VNode } from 'vue/types'\n\nexport type GroupableInstance = InstanceType & {\n id?: string\n to?: any\n value?: any\n }\n\nexport const BaseItemGroup = mixins(\n Comparable,\n Proxyable,\n Themeable\n).extend({\n name: 'base-item-group',\n\n props: {\n activeClass: {\n type: String,\n default: 'v-item--active',\n },\n mandatory: Boolean,\n max: {\n type: [Number, String],\n default: null,\n },\n multiple: Boolean,\n tag: {\n type: String,\n default: 'div',\n },\n },\n\n data () {\n return {\n // As long as a value is defined, show it\n // Otherwise, check if multiple\n // to determine which default to provide\n internalLazyValue: this.value !== undefined\n ? this.value\n : this.multiple ? [] : undefined,\n items: [] as GroupableInstance[],\n }\n },\n\n computed: {\n classes (): Record {\n return {\n 'v-item-group': true,\n ...this.themeClasses,\n }\n },\n selectedIndex (): number {\n return (this.selectedItem && this.items.indexOf(this.selectedItem)) || -1\n },\n selectedItem (): GroupableInstance | undefined {\n if (this.multiple) return undefined\n\n return this.selectedItems[0]\n },\n selectedItems (): GroupableInstance[] {\n return this.items.filter((item, index) => {\n return this.toggleMethod(this.getValue(item, index))\n })\n },\n selectedValues (): any[] {\n if (this.internalValue == null) return []\n\n return Array.isArray(this.internalValue)\n ? this.internalValue\n : [this.internalValue]\n },\n toggleMethod (): (v: any) => boolean {\n if (!this.multiple) {\n return (v: any) => this.valueComparator(this.internalValue, v)\n }\n\n const internalValue = this.internalValue\n if (Array.isArray(internalValue)) {\n return (v: any) => internalValue.some(intern => this.valueComparator(intern, v))\n }\n\n return () => false\n },\n },\n\n watch: {\n internalValue: 'updateItemsState',\n items: 'updateItemsState',\n },\n\n created () {\n if (this.multiple && !Array.isArray(this.internalValue)) {\n consoleWarn('Model must be bound to an array if the multiple property is true.', this)\n }\n },\n\n methods: {\n\n genData (): object {\n return {\n class: this.classes,\n }\n },\n getValue (item: GroupableInstance, i: number): unknown {\n return item.value === undefined\n ? i\n : item.value\n },\n onClick (item: GroupableInstance) {\n this.updateInternalValue(\n this.getValue(item, this.items.indexOf(item))\n )\n },\n register (item: GroupableInstance) {\n const index = this.items.push(item) - 1\n\n item.$on('change', () => this.onClick(item))\n\n // If no value provided and mandatory,\n // assign first registered item\n if (this.mandatory && !this.selectedValues.length) {\n this.updateMandatory()\n }\n\n this.updateItem(item, index)\n },\n unregister (item: GroupableInstance) {\n if (this._isDestroyed) return\n\n const index = this.items.indexOf(item)\n const value = this.getValue(item, index)\n\n this.items.splice(index, 1)\n\n const valueIndex = this.selectedValues.indexOf(value)\n\n // Items is not selected, do nothing\n if (valueIndex < 0) return\n\n // If not mandatory, use regular update process\n if (!this.mandatory) {\n return this.updateInternalValue(value)\n }\n\n // Remove the value\n if (this.multiple && Array.isArray(this.internalValue)) {\n this.internalValue = this.internalValue.filter(v => v !== value)\n } else {\n this.internalValue = undefined\n }\n\n // If mandatory and we have no selection\n // add the last item as value\n /* istanbul ignore else */\n if (!this.selectedItems.length) {\n this.updateMandatory(true)\n }\n },\n updateItem (item: GroupableInstance, index: number) {\n const value = this.getValue(item, index)\n\n item.isActive = this.toggleMethod(value)\n },\n // https://github.com/vuetifyjs/vuetify/issues/5352\n updateItemsState () {\n this.$nextTick(() => {\n if (this.mandatory &&\n !this.selectedItems.length\n ) {\n return this.updateMandatory()\n }\n\n // TODO: Make this smarter so it\n // doesn't have to iterate every\n // child in an update\n this.items.forEach(this.updateItem)\n })\n },\n updateInternalValue (value: any) {\n this.multiple\n ? this.updateMultiple(value)\n : this.updateSingle(value)\n },\n updateMandatory (last?: boolean) {\n if (!this.items.length) return\n\n const items = this.items.slice()\n\n if (last) items.reverse()\n\n const item = items.find(item => !item.disabled)\n\n // If no tabs are available\n // aborts mandatory value\n if (!item) return\n\n const index = this.items.indexOf(item)\n\n this.updateInternalValue(\n this.getValue(item, index)\n )\n },\n updateMultiple (value: any) {\n const defaultValue = Array.isArray(this.internalValue)\n ? this.internalValue\n : []\n const internalValue = defaultValue.slice()\n const index = internalValue.findIndex(val => this.valueComparator(val, value))\n\n if (\n this.mandatory &&\n // Item already exists\n index > -1 &&\n // value would be reduced below min\n internalValue.length - 1 < 1\n ) return\n\n if (\n // Max is set\n this.max != null &&\n // Item doesn't exist\n index < 0 &&\n // value would be increased above max\n internalValue.length + 1 > this.max\n ) return\n\n index > -1\n ? internalValue.splice(index, 1)\n : internalValue.push(value)\n\n this.internalValue = internalValue\n },\n updateSingle (value: any) {\n const isSame = this.valueComparator(this.internalValue, value)\n\n if (this.mandatory && isSame) return\n\n this.internalValue = isSame ? undefined : value\n },\n },\n\n render (h): VNode {\n return h(this.tag, this.genData(), this.$slots.default)\n },\n})\n\nexport default BaseItemGroup.extend({\n name: 'v-item-group',\n\n provide (): object {\n return {\n itemGroup: this,\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","import Vue from 'vue'\n\n/**\n * This mixin provides `attrs$` and `listeners$` to work around\n * vue bug https://github.com/vuejs/vue/issues/10115\n */\n\nfunction makeWatcher (property: string): ThisType & ((val: any, oldVal: any) => void) {\n return function (this: Vue, val, oldVal) {\n for (const attr in oldVal) {\n if (!Object.prototype.hasOwnProperty.call(val, attr)) {\n this.$delete(this.$data[property], attr)\n }\n }\n for (const attr in val) {\n this.$set(this.$data[property], attr, val[attr])\n }\n }\n}\n\nexport default Vue.extend({\n data: () => ({\n attrs$: {} as Dictionary,\n listeners$: {} as Dictionary,\n }),\n\n created () {\n // Work around unwanted re-renders: https://github.com/vuejs/vue/issues/10115\n // Make sure to use `attrs$` instead of `$attrs` (confusing right?)\n this.$watch('$attrs', makeWatcher('attrs$'), { immediate: true })\n this.$watch('$listeners', makeWatcher('listeners$'), { immediate: true })\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'\nimport { composedPath } from '../../util/helpers'\n\ninterface TouchEvent {\n touchstartX: number\n touchstartY: number\n touchmoveX: number\n touchmoveY: 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\nfunction bias (val: number) {\n const c = 0.501\n const x = Math.abs(val)\n return Math.sign(val) * (x / ((1 / c - 2) * (1 - x) + 1))\n}\n\nexport function calculateUpdatedOffset (\n selectedElement: HTMLElement,\n widths: Widths,\n rtl: boolean,\n currentScrollOffset: number\n): 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\nexport function calculateCenteredOffset (\n selectedElement: HTMLElement,\n widths: Widths,\n rtl: boolean\n): 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\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: any) => (\n typeof v === 'boolean' || [\n 'always',\n 'desktop',\n 'mobile',\n ].includes(v)\n ),\n },\n },\n\n data: () => ({\n isOverflowing: false,\n resizeTimeout: 0,\n startX: 0,\n isSwipingHorizontal: false,\n isSwiping: false,\n scrollOffset: 0,\n widths: {\n content: 0,\n wrapper: 0,\n },\n }),\n\n computed: {\n canTouch (): boolean {\n return typeof window !== 'undefined'\n },\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 || Math.abs(this.scrollOffset) > 0\n\n // Always show on mobile\n case 'mobile': return (\n this.isMobile ||\n (this.isOverflowing || Math.abs(this.scrollOffset) > 0)\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 || Math.abs(this.scrollOffset) > 0)\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 if (this.$vuetify.rtl) val = -val\n\n let scroll =\n val <= 0\n ? bias(-val)\n : val > this.widths.content - this.widths.wrapper\n ? -(this.widths.content - this.widths.wrapper) + bias(this.widths.content - this.widths.wrapper - val)\n : -val\n\n if (this.$vuetify.rtl) scroll = -scroll\n\n this.$refs.content.style.transform = `translateX(${scroll}px)`\n },\n },\n\n mounted () {\n if (typeof ResizeObserver !== 'undefined') {\n const obs = new ResizeObserver(() => {\n this.onResize()\n })\n obs.observe(this.$el)\n obs.observe(this.$refs.content)\n this.$on('hook:destroyed', () => {\n obs.disconnect()\n })\n } else {\n let itemsLength = 0\n this.$on('hook:beforeUpdate', () => {\n itemsLength = (this.$refs.content?.children || []).length\n })\n this.$on('hook:updated', () => {\n if (itemsLength === (this.$refs.content?.children || []).length) return\n this.setWidths()\n })\n }\n },\n\n methods: {\n onScroll () {\n this.$refs.wrapper.scrollLeft = 0\n },\n onFocusin (e: FocusEvent) {\n if (!this.isOverflowing) return\n\n // Focused element is likely to be the root of an item, so a\n // breadth-first search will probably find it in the first iteration\n for (const el of composedPath(e)) {\n for (const vm of this.items) {\n if (vm.$el === el) {\n this.scrollOffset = calculateUpdatedOffset(\n vm.$el as HTMLElement,\n this.widths,\n this.$vuetify.rtl,\n this.scrollOffset\n )\n return\n }\n }\n }\n },\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 on: {\n focusin: this.onFocusin,\n },\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 on: {\n scroll: this.onScroll,\n },\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 if (!this.canTouch) return\n\n if (!this.isSwiping) {\n // only calculate disableSwipeHorizontal during the first onTouchMove invoke\n // in order to ensure disableSwipeHorizontal value is consistent between onTouchStart and onTouchEnd\n const diffX = e.touchmoveX - e.touchstartX\n const diffY = e.touchmoveY - e.touchstartY\n this.isSwipingHorizontal = Math.abs(diffX) > Math.abs(diffY)\n this.isSwiping = true\n }\n\n if (this.isSwipingHorizontal) {\n // sliding horizontally\n this.scrollOffset = this.startX - e.touchmoveX\n // temporarily disable window vertical scrolling\n document.documentElement.style.overflowY = 'hidden'\n }\n },\n onTouchEnd () {\n if (!this.canTouch) return\n\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 this.isSwiping = false\n // rollback whole page scrolling to default\n document.documentElement.style.removeProperty('overflow-y')\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 && this.items.length) {\n const lastItemPosition = this.items[this.items.length - 1].$el.getBoundingClientRect()\n const wrapperPosition = this.$refs.wrapper.getBoundingClientRect()\n\n if (\n (this.$vuetify.rtl && wrapperPosition.right < lastItemPosition.right) ||\n (!this.$vuetify.rtl && wrapperPosition.left > lastItemPosition.left)\n ) {\n this.scrollTo('prev')\n }\n }\n\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 = calculateCenteredOffset(\n this.selectedItem.$el as HTMLElement,\n this.widths,\n this.$vuetify.rtl\n )\n } else if (this.isOverflowing) {\n this.scrollOffset = calculateUpdatedOffset(\n this.selectedItem.$el as HTMLElement,\n this.widths,\n this.$vuetify.rtl,\n this.scrollOffset\n )\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 () {\n window.requestAnimationFrame(() => {\n if (this._isDestroyed) return\n\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 // https://github.com/vuetifyjs/vuetify/issues/13212\n // We add +1 to the wrappers width to prevent an issue where the `clientWidth`\n // gets calculated wrongly by the browser if using a different zoom-level.\n this.isOverflowing = this.widths.wrapper + 1 < 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","import Vue from 'vue'\nimport { PropValidator } from 'vue/types/options'\nimport { deepEqual } from '../../util/helpers'\n\nexport default Vue.extend({\n name: 'comparable',\n props: {\n valueComparator: {\n type: Function,\n default: deepEqual,\n } as PropValidator,\n },\n})\n","import { Component } from 'vue-property-decorator';\r\nimport { LoggedInComponentBase } from '@/components/base/loggedInComponentBase';\r\nimport { AltDrawerType } from '@/constants';\r\n\r\n@Component\r\nexport class SidebarMixin extends LoggedInComponentBase {\r\n private routeName = this.$route.name;\r\n\r\n mounted() {\r\n this.updateSidebarStates();\r\n }\r\n\r\n private closeMainNav() {\r\n /**\r\n * Vuetify will emit an `input` event whenever a navigation drawer changes state,\r\n * and this can interfere with our own commands, so use a timeout to wait a tick.\r\n */\r\n setTimeout(() => {\r\n if (this.uiModule.mainNavigationDrawerOpen) {\r\n this.uiModule.setNavigationDrawer(false);\r\n }\r\n });\r\n }\r\n\r\n public updateSidebarStates() {\r\n if (\r\n this.routeName?.toLowerCase().includes('helpandfaqs') ||\r\n this.routeName?.toLowerCase().includes('settings') ||\r\n this.routeName?.toLowerCase().includes('home')\r\n ) {\r\n if (this.$vuetify.breakpoint.mdAndDown) {\r\n this.closeMainNav();\r\n } else {\r\n this.uiModule.setNavigationDrawer(true);\r\n }\r\n } else if (this.routeName?.toLowerCase().includes('assetlibrary')) {\r\n if (this.$vuetify.breakpoint.mdAndDown) {\r\n this.uiModule.toggleAltDrawer({\r\n drawerType: AltDrawerType.CampaignSidebar,\r\n open: false\r\n });\r\n\r\n this.closeMainNav();\r\n } else {\r\n this.uiModule.toggleAltDrawer({\r\n drawerType: AltDrawerType.CampaignSidebar,\r\n open: true\r\n });\r\n this.uiModule.setNavigationDrawer(true);\r\n }\r\n } else if (\r\n this.routeName?.toLowerCase().includes('calendar') ||\r\n this.routeName?.toLowerCase().includes('creativecentre')\r\n ) {\r\n if (this.$vuetify.breakpoint.mdAndDown) {\r\n this.uiModule.toggleAltDrawer({\r\n drawerType: AltDrawerType.UpcomingPostsSidebar,\r\n open: false\r\n });\r\n\r\n this.closeMainNav();\r\n } else {\r\n this.uiModule.toggleAltDrawer({\r\n drawerType: AltDrawerType.UpcomingPostsSidebar,\r\n open: true\r\n });\r\n this.uiModule.setNavigationDrawer(true);\r\n }\r\n }\r\n }\r\n}\r\n","import VIcon from './VIcon'\n\nexport { VIcon }\nexport default VIcon\n","import Vue from 'vue';\r\nimport { getModule } from 'vuex-module-decorators';\r\nimport ApplicationUser from '@/models/auth/applicationUser';\r\nimport {\r\n AssetModalModule,\r\n NewAssetModalModule,\r\n PostModalModule,\r\n StickerModalModule,\r\n StoresModule,\r\n UiModule,\r\n CreateModule,\r\n CreatePostModule,\r\n CreateAssetModule,\r\n} from '@/store';\r\nimport { UserModule } from '@/store/userModule';\r\nimport { AltDrawerType } from '@/constants';\r\nimport { UserStore } from '@/models/users/userStore';\r\n\r\nexport abstract class LoggedInComponentBase extends Vue {\r\n protected assetModalModule = getModule(AssetModalModule);\r\n protected newAssetModalModule = getModule(NewAssetModalModule);\r\n protected postModalModule = getModule(PostModalModule);\r\n protected stickerModalModule = getModule(StickerModalModule);\r\n protected storesModule = getModule(StoresModule);\r\n protected uiModule = getModule(UiModule);\r\n protected userModule = getModule(UserModule);\r\n protected createModule = getModule(CreateModule);\r\n protected createAssetModule = getModule(CreateAssetModule);\r\n protected createPostModule = getModule(CreatePostModule);\r\n\r\n public get currentStore(): UserStore {\r\n return this.userModule.currentStore;\r\n }\r\n\r\n public get campaignSidebarOpen(): boolean {\r\n return this.uiModule.campaignSidebarOpen;\r\n }\r\n\r\n public set campaignSidebarOpen(value: boolean) {\r\n this.uiModule.toggleAltDrawer({\r\n drawerType: AltDrawerType.CampaignSidebar,\r\n open: value,\r\n });\r\n }\r\n\r\n public get isLoading(): boolean {\r\n return this.uiModule.isLoading;\r\n }\r\n\r\n public get mainNavigationDrawer(): boolean | null {\r\n return this.uiModule.mainNavigationDrawerOpen;\r\n }\r\n\r\n public get upcomingPostsSidebarOpen(): boolean | null {\r\n return this.uiModule.upcomingPostsSidebarOpen;\r\n }\r\n\r\n public get user(): ApplicationUser | null {\r\n return this.user;\r\n }\r\n\r\n /*\r\n * Check if the current store has authorised their social accounts.\r\n * If not, prompt them with a modal.\r\n * Pass if current user is an MSO and is not viewing a paricular store.\r\n */\r\n protected async checkSocialChannelsAuthorised() {\r\n /*\r\n this wait is a hack to resolve a race condition on page load where this.userModule.isViewingSingleStore is incorrect (stores haven't loaded yet?).\r\n this results in the below getStoreChannels() not being called which in turn disables buttons on recommended posts because store channels [] is empty\r\n @ 1 second the problem persists\r\n */\r\n if (this.userModule.currentStore.id === '') {\r\n await new Promise((resolve) => setTimeout(resolve, 2000));\r\n }\r\n\r\n if (!this.userModule.isViewingSingleStore) {\r\n return;\r\n }\r\n\r\n await this.storesModule.getStoreChannels(this.userModule.currentStore.id);\r\n\r\n if (\r\n this.storesModule.storeChannels.length === 0 &&\r\n this.$route.name !== 'settings.root'\r\n ) {\r\n this.storesModule.toggleAuthoriseSocialChannelsModal(true);\r\n }\r\n }\r\n}\r\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","import Vue from 'vue'\n\nexport default Vue.extend({\n name: 'sizeable',\n\n props: {\n large: Boolean,\n small: Boolean,\n xLarge: Boolean,\n xSmall: Boolean,\n },\n\n computed: {\n medium (): boolean {\n return Boolean(\n !this.xSmall &&\n !this.small &&\n !this.large &&\n !this.xLarge\n )\n },\n sizeableClasses (): object {\n return {\n 'v-size--x-small': this.xSmall,\n 'v-size--small': this.small,\n 'v-size--default': this.medium,\n 'v-size--large': this.large,\n 'v-size--x-large': this.xLarge,\n }\n },\n },\n})\n","var render = function render(){var _vm=this,_c=_vm._self._c,_setup=_vm._self._setupProxy;return _c('div',{staticClass:\"l-gutters\"},[_c('div',{staticClass:\"l-container\"},[_c('v-row',{staticClass:\"mb-4 mt-11\"},[_c('v-col',[_c('router-link',{staticClass:\"text-decoration-none\",attrs:{\"to\":{ name: 'helpAndFaqs.root' }}},[_c('v-icon',{staticClass:\"fal fa-chevron-left mr-3\"}),_vm._v(\" Back to Learn Room \")],1)],1)],1),(!_vm.article.videoCode)?_c('v-img',{attrs:{\"src\":_vm.article.blobUrl,\"height\":_vm.imageHeight,\"cover\":\"\"}}):_vm._e(),(_vm.article.videoCode)?_c('youtube',{attrs:{\"video-id\":_vm.article.videoCode,\"player-width\":\"100%\",\"player-height\":_vm.imageHeight},on:{\"ready\":_vm.ready}}):_vm._e(),_c('v-chip-group',{staticClass:\"mt-5\"},_vm._l((_vm.article.categories),function(category){return _c('v-chip',{key:category.id,attrs:{\"to\":{\n name: 'helpAndFaqs.category',\n params: { articleId: category.id },\n }}},[_vm._v(\" \"+_vm._s(category.title)+\" \")])}),1),_c('h1',{staticClass:\"my-5\"},[_vm._v(\" \"+_vm._s(_vm.article.title)+\" \")]),_c('v-divider',{staticClass:\"mb-5\"}),_c('v-row',[_c('v-col',{staticClass:\"article__body\",domProps:{\"innerHTML\":_vm._s(_vm.article.bodyCopy)}})],1),_c('v-row',[_c('v-col',[_c('router-link',{staticClass:\"text-decoration-none\",attrs:{\"to\":{ name: 'helpAndFaqs.root' }}},[_c('v-icon',{staticClass:\"fal fa-chevron-left mr-3\"}),_vm._v(\" Back to Learn Room \")],1)],1)],1)],1)])\n}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\r\nimport { Component } from 'vue-property-decorator';\r\nimport { LoggedInComponentBase } from '@/components/base/loggedInComponentBase';\r\nimport { Route } from 'vue-router';\r\nimport { HelpAndFAQsModule } from '@/store';\r\nimport { getModule } from 'vuex-module-decorators';\r\nimport { Article } from '@/api/contracts/helpAndFAQs/article';\r\nimport { SidebarMixin } from '@/mixins/sidebarMixin';\r\n// https://github.com/kaorun343/vue-youtube-embed\r\nimport Vue from 'vue';\r\nimport VueYouTubeEmbed, { YouTubePlayer } from 'vue-youtube-embed';\r\n\r\nVue.use(VueYouTubeEmbed, { global: false });\r\n\r\nconst helpAndFAQsModule = getModule(HelpAndFAQsModule);\r\n\r\n@Component({\r\n components: {\r\n youtube: YouTubePlayer,\r\n },\r\n mixins: [SidebarMixin],\r\n})\r\nexport default class ArticleDetail extends LoggedInComponentBase {\r\n // eslint-disable-next-line\r\n private player: any;\r\n\r\n public get article(): Article | null {\r\n return helpAndFAQsModule.currentHelpArticle;\r\n }\r\n\r\n public get imageHeight(): number {\r\n return this.$vuetify.breakpoint.smAndDown ? 300 : 500;\r\n }\r\n\r\n public async beforeRouteEnter(\r\n to: Route,\r\n from: Route,\r\n next: (arg?: boolean | ((vm: ArticleDetail) => void)) => void\r\n ): Promise {\r\n try {\r\n await helpAndFAQsModule.getArticleById(to.params.id);\r\n next();\r\n } catch (err) {\r\n console.error(err.message);\r\n next(false);\r\n }\r\n }\r\n\r\n // eslint-disable-next-line\r\n ready(event: any) {\r\n this.player = event.target;\r\n }\r\n}\r\n","import mod from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./articleDetail.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../../node_modules/thread-loader/dist/cjs.js!../../../../node_modules/babel-loader/lib/index.js!../../../../node_modules/ts-loader/index.js??ref--15-3!../../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./articleDetail.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./articleDetail.vue?vue&type=template&id=700b428a&scoped=true&\"\nimport script from \"./articleDetail.vue?vue&type=script&lang=ts&\"\nexport * from \"./articleDetail.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./articleDetail.vue?vue&type=style&index=0&id=700b428a&prod&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 \"700b428a\",\n null\n \n)\n\nexport default component.exports","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 './VChip.sass'\n\n// Types\nimport { VNode } from 'vue'\nimport mixins from '../../util/mixins'\n\n// Components\nimport { VExpandXTransition } from '../transitions'\nimport VIcon from '../VIcon'\n\n// Mixins\nimport Colorable from '../../mixins/colorable'\nimport { factory as GroupableFactory } from '../../mixins/groupable'\nimport Themeable from '../../mixins/themeable'\nimport { factory as ToggleableFactory } from '../../mixins/toggleable'\nimport Routable from '../../mixins/routable'\nimport Sizeable from '../../mixins/sizeable'\n\n// Utilities\nimport { breaking } from '../../util/console'\n\n// Types\nimport { PropValidator, PropType } from 'vue/types/options'\n\n/* @vue/component */\nexport default mixins(\n Colorable,\n Sizeable,\n Routable,\n Themeable,\n GroupableFactory('chipGroup'),\n ToggleableFactory('inputValue')\n).extend({\n name: 'v-chip',\n\n props: {\n active: {\n type: Boolean,\n default: true,\n },\n activeClass: {\n type: String,\n default (): string | undefined {\n if (!this.chipGroup) return ''\n\n return this.chipGroup.activeClass\n },\n } as any as PropValidator,\n close: Boolean,\n closeIcon: {\n type: String,\n default: '$delete',\n },\n closeLabel: {\n type: String,\n default: '$vuetify.close',\n },\n disabled: Boolean,\n draggable: Boolean,\n filter: Boolean,\n filterIcon: {\n type: String,\n default: '$complete',\n },\n label: Boolean,\n link: Boolean,\n outlined: Boolean,\n pill: Boolean,\n tag: {\n type: String,\n default: 'span',\n },\n textColor: String,\n value: null as any as PropType,\n },\n\n data: () => ({\n proxyClass: 'v-chip--active',\n }),\n\n computed: {\n classes (): object {\n return {\n 'v-chip': true,\n ...Routable.options.computed.classes.call(this),\n 'v-chip--clickable': this.isClickable,\n 'v-chip--disabled': this.disabled,\n 'v-chip--draggable': this.draggable,\n 'v-chip--label': this.label,\n 'v-chip--link': this.isLink,\n 'v-chip--no-color': !this.color,\n 'v-chip--outlined': this.outlined,\n 'v-chip--pill': this.pill,\n 'v-chip--removable': this.hasClose,\n ...this.themeClasses,\n ...this.sizeableClasses,\n ...this.groupClasses,\n }\n },\n hasClose (): boolean {\n return Boolean(this.close)\n },\n isClickable (): boolean {\n return Boolean(\n Routable.options.computed.isClickable.call(this) ||\n this.chipGroup\n )\n },\n },\n\n created () {\n const breakingProps = [\n ['outline', 'outlined'],\n ['selected', 'input-value'],\n ['value', 'active'],\n ['@input', '@active.sync'],\n ]\n\n /* istanbul ignore next */\n breakingProps.forEach(([original, replacement]) => {\n if (this.$attrs.hasOwnProperty(original)) breaking(original, replacement, this)\n })\n },\n\n methods: {\n click (e: MouseEvent): void {\n this.$emit('click', e)\n\n this.chipGroup && this.toggle()\n },\n genFilter (): VNode {\n const children = []\n\n if (this.isActive) {\n children.push(\n this.$createElement(VIcon, {\n staticClass: 'v-chip__filter',\n props: { left: true },\n }, this.filterIcon)\n )\n }\n\n return this.$createElement(VExpandXTransition, children)\n },\n genClose (): VNode {\n return this.$createElement(VIcon, {\n staticClass: 'v-chip__close',\n props: {\n right: true,\n size: 18,\n },\n attrs: {\n 'aria-label': this.$vuetify.lang.t(this.closeLabel),\n },\n on: {\n click: (e: Event) => {\n e.stopPropagation()\n e.preventDefault()\n\n this.$emit('click:close')\n this.$emit('update:active', false)\n },\n },\n }, this.closeIcon)\n },\n genContent (): VNode {\n return this.$createElement('span', {\n staticClass: 'v-chip__content',\n }, [\n this.filter && this.genFilter(),\n this.$slots.default,\n this.hasClose && this.genClose(),\n ])\n },\n },\n\n render (h): VNode {\n const children = [this.genContent()]\n let { tag, data } = this.generateRouteLink()\n\n data.attrs = {\n ...data.attrs,\n draggable: this.draggable ? 'true' : undefined,\n tabindex: this.chipGroup && !this.disabled ? 0 : data.attrs!.tabindex,\n }\n data.directives!.push({\n name: 'show',\n value: this.active,\n })\n data = this.setBackgroundColor(this.color, data)\n\n const color = this.textColor || (this.outlined && this.color)\n\n return h(tag, this.setTextColor(color, data), children)\n },\n})\n","// Styles\nimport './VDivider.sass'\n\n// Types\nimport { VNode } from 'vue'\n\n// Mixins\nimport Themeable from '../../mixins/themeable'\n\nexport default Themeable.extend({\n name: 'v-divider',\n\n props: {\n inset: Boolean,\n vertical: Boolean,\n },\n\n render (h): VNode {\n // WAI-ARIA attributes\n let orientation\n if (!this.$attrs.role || this.$attrs.role === 'separator') {\n orientation = this.vertical ? 'vertical' : 'horizontal'\n }\n return h('hr', {\n class: {\n 'v-divider': true,\n 'v-divider--inset': this.inset,\n 'v-divider--vertical': this.vertical,\n ...this.themeClasses,\n },\n attrs: {\n role: 'separator',\n 'aria-orientation': orientation,\n ...this.$attrs,\n },\n on: this.$listeners,\n })\n },\n})\n","import { VNodeDirective } from 'vue/types/vnode'\nimport { VNode } from 'vue'\n\ninterface ResizeVNodeDirective extends VNodeDirective {\n value?: () => void\n options?: boolean | AddEventListenerOptions\n}\n\nfunction inserted (el: HTMLElement, binding: ResizeVNodeDirective, vnode: VNode) {\n const callback = binding.value!\n const options = binding.options || { passive: true }\n\n window.addEventListener('resize', callback, options)\n\n el._onResize = Object(el._onResize)\n el._onResize![vnode.context!._uid] = {\n callback,\n options,\n }\n\n if (!binding.modifiers || !binding.modifiers.quiet) {\n callback()\n }\n}\n\nfunction unbind (el: HTMLElement, binding: ResizeVNodeDirective, vnode: VNode) {\n if (!el._onResize?.[vnode.context!._uid]) return\n\n const { callback, options } = el._onResize[vnode.context!._uid]!\n\n window.removeEventListener('resize', callback, options)\n\n delete el._onResize[vnode.context!._uid]\n}\n\nexport const Resize = {\n inserted,\n unbind,\n}\n\nexport default Resize\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 './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 Vue, { VueConstructor } from 'vue'\n\nexport type Toggleable = VueConstructor>\n\nexport function factory (prop?: T, event?: string): Toggleable\nexport function factory (prop = 'value', event = 'input') {\n return Vue.extend({\n name: 'toggleable',\n\n model: { prop, event },\n\n props: {\n [prop]: { required: false },\n },\n\n data () {\n return {\n isActive: !!this[prop],\n }\n },\n\n watch: {\n [prop] (val) {\n this.isActive = !!val\n },\n isActive (val) {\n !!val !== this[prop] && this.$emit(event, val)\n },\n },\n })\n}\n\n/* eslint-disable-next-line @typescript-eslint/no-redeclare */\nconst Toggleable = factory()\n\nexport default Toggleable\n","/*!\n * Vue YouTube Embed version 2.2.2\n * under MIT License copyright 2019 kaorun343\n */\n// fork from https://github.com/brandly/angular-youtube-embed\n\nif (!String.prototype.includes) {\n String.prototype.includes = function () {\n return String.prototype.indexOf.apply(this, arguments) !== -1\n };\n}\n\nvar youtubeRegexp = /https?:\\/\\/(?:[0-9A-Z-]+\\.)?(?:youtu\\.be\\/|youtube(?:-nocookie)?\\.com\\S*[^\\w\\s-])([\\w-]{11})(?=[^\\w-]|$)(?![?=&+%\\w.-]*(?:['\"][^<>]*>|<\\/a>))[?=&+%\\w.-]*/ig;\nvar timeRegexp = /t=(\\d+)[ms]?(\\d+)?s?/;\n\n/**\n * get id from url\n * @param {string} url url\n * @return {string} id\n */\nfunction getIdFromURL (url) {\n var id = url.replace(youtubeRegexp, '$1');\n\n if (id.includes(';')) {\n var pieces = id.split(';');\n\n if (pieces[1].includes('%')) {\n var uriComponent = decodeURIComponent(pieces[1]);\n id = (\"http://youtube.com\" + uriComponent).replace(youtubeRegexp, '$1');\n } else {\n id = pieces[0];\n }\n } else if (id.includes('#')) {\n id = id.split('#')[0];\n }\n\n return id\n}\n\n/**\n * get time from url\n * @param {string} url url\n * @return {number} time\n */\nfunction getTimeFromURL (url) {\n if ( url === void 0 ) url = '';\n\n var times = url.match(timeRegexp);\n\n if (!times) {\n return 0\n }\n\n var full = times[0];\n var minutes = times[1];\n var seconds = times[2];\n\n if (typeof seconds !== 'undefined') {\n seconds = parseInt(seconds, 10);\n minutes = parseInt(minutes, 10);\n } else if (full.includes('m')) {\n minutes = parseInt(minutes, 10);\n seconds = 0;\n } else {\n seconds = parseInt(minutes, 10);\n minutes = 0;\n }\n\n return seconds + (minutes * 60)\n}\n\nvar container = {\n scripts: [],\n events: {},\n\n run: function run () {\n var this$1 = this;\n\n this.scripts.forEach(function (callback) {\n callback(this$1.YT);\n });\n this.scripts = [];\n },\n\n register: function register (callback) {\n var this$1 = this;\n\n if (this.YT) {\n this.Vue.nextTick(function () {\n callback(this$1.YT);\n });\n } else {\n this.scripts.push(callback);\n }\n }\n};\n\nvar pid = 0;\n\nvar YouTubePlayer = {\n name: 'YoutubeEmbed',\n props: {\n playerHeight: {\n type: [String, Number],\n default: '360'\n },\n playerWidth: {\n type: [String, Number],\n default: '640'\n },\n playerVars: {\n type: Object,\n default: function () { return ({ autoplay: 0, time: 0 }); }\n },\n videoId: {\n type: String\n },\n mute: {\n type: Boolean,\n default: false\n },\n host: {\n type: String,\n default: 'https://www.youtube.com'\n }\n },\n render: function render (h) {\n return h('div', [\n h('div', { attrs: { id: this.elementId }})\n ])\n },\n template: '
',\n watch: {\n playerWidth: 'setSize',\n playerHeight: 'setSize',\n videoId: 'update',\n mute: 'setMute'\n },\n data: function data () {\n pid += 1;\n return {\n elementId: (\"youtube-player-\" + pid),\n player: {}\n }\n },\n methods: {\n setSize: function setSize () {\n this.player.setSize(this.playerWidth, this.playerHeight);\n },\n setMute: function setMute (value) {\n if (value) {\n this.player.mute();\n } else {\n this.player.unMute();\n }\n },\n update: function update (videoId) {\n var name = (this.playerVars.autoplay ? 'load' : 'cue') + \"VideoById\";\n if (this.player.hasOwnProperty(name)) {\n this.player[name](videoId);\n } else {\n setTimeout(function () {\n this.update(videoId);\n }.bind(this), 100);\n }\n }\n },\n mounted: function mounted () {\n var this$1 = this;\n\n container.register(function (YouTube) {\n var ref = this$1;\n var playerHeight = ref.playerHeight;\n var playerWidth = ref.playerWidth;\n var playerVars = ref.playerVars;\n var videoId = ref.videoId;\n var host = ref.host;\n\n this$1.player = new YouTube.Player(this$1.elementId, {\n height: playerHeight,\n width: playerWidth,\n playerVars: playerVars,\n videoId: videoId,\n host: host,\n events: {\n onReady: function (event) {\n this$1.setMute(this$1.mute);\n this$1.$emit('ready', event);\n },\n onStateChange: function (event) {\n if (event.data !== -1) {\n this$1.$emit(container.events[event.data], event);\n }\n },\n onError: function (event) {\n this$1.$emit('error', event);\n }\n }\n });\n });\n },\n beforeDestroy: function beforeDestroy () {\n if (this.player !== null && this.player.destroy) {\n this.player.destroy();\n }\n delete this.player;\n }\n};\n\nvar index = {\n install: function install (Vue, options) {\n if ( options === void 0 ) options = {};\n\n container.Vue = Vue;\n YouTubePlayer.ready = YouTubePlayer.mounted;\n var global = options.global; if ( global === void 0 ) global = true;\n var componentId = options.componentId; if ( componentId === void 0 ) componentId = 'youtube';\n\n if (global) {\n // if there is a global component with \"youtube\" identifier already taken\n // then we should let user to pass a new identifier.\n Vue.component(componentId, YouTubePlayer);\n }\n Vue.prototype.$youtube = { getIdFromURL: getIdFromURL, getTimeFromURL: getTimeFromURL };\n\n if (typeof window !== 'undefined' && typeof document !== 'undefined') {\n var tag = document.createElement('script');\n tag.src = 'https://www.youtube.com/player_api';\n var firstScriptTag = document.getElementsByTagName('script')[0];\n firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n\n window.onYouTubeIframeAPIReady = function () {\n container.YT = YT;\n var PlayerState = YT.PlayerState;\n\n container.events[PlayerState.ENDED] = 'ended';\n container.events[PlayerState.PLAYING] = 'playing';\n container.events[PlayerState.PAUSED] = 'paused';\n container.events[PlayerState.BUFFERING] = 'buffering';\n container.events[PlayerState.CUED] = 'cued';\n\n container.Vue.nextTick(function () {\n container.run();\n });\n };\n }\n }\n};\n\nexport default index;\nexport { YouTubePlayer, getIdFromURL, getTimeFromURL };\n"],"sourceRoot":""}