{"version":3,"file":"VSlideGroup-Ci1Z_gXV.js","sources":["../../../node_modules/.pnpm/vuetify@2.7.2_vue@2.7.16/node_modules/vuetify/lib/components/VSlideGroup/VSlideGroup.js"],"sourcesContent":["// Styles\nimport \"../../../src/components/VSlideGroup/VSlideGroup.sass\"; // Components\n\nimport VIcon from '../VIcon';\nimport { VFadeTransition } from '../transitions'; // Extensions\n\nimport { BaseItemGroup } from '../VItemGroup/VItemGroup'; // Mixins\n\nimport Mobile from '../../mixins/mobile'; // Directives\n\nimport Resize from '../../directives/resize';\nimport Touch from '../../directives/touch'; // Utilities\n\nimport mixins from '../../util/mixins';\nimport { composedPath, getSlot } from '../../util/helpers';\n\nfunction bias(val) {\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(selectedElement, widths, rtl, currentScrollOffset) {\n const clientWidth = selectedElement.clientWidth;\n const offsetLeft = rtl ? widths.content - selectedElement.offsetLeft - clientWidth : 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}\nexport function calculateCenteredOffset(selectedElement, widths, rtl) {\n const {\n offsetLeft,\n clientWidth\n } = 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}\nexport const BaseSlideGroup = mixins(BaseItemGroup, Mobile).extend({\n name: 'base-slide-group',\n directives: {\n Resize,\n Touch\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 => typeof v === 'boolean' || ['always', 'never', 'desktop', 'mobile'].includes(v)\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 computed: {\n canTouch() {\n return typeof window !== 'undefined';\n },\n\n __cachedNext() {\n return this.genTransition('next');\n },\n\n __cachedPrev() {\n return this.genTransition('prev');\n },\n\n classes() {\n return { ...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\n hasAffixes() {\n switch (this.showArrows) {\n // Always show arrows on desktop & mobile\n case 'always':\n return true;\n // Always show arrows on desktop\n\n case 'desktop':\n return !this.isMobile;\n // Show arrows on mobile when overflowing.\n // This matches the default 2.2 behavior\n\n case true:\n return this.isOverflowing || Math.abs(this.scrollOffset) > 0;\n // Always show on mobile\n\n case 'mobile':\n return this.isMobile || this.isOverflowing || Math.abs(this.scrollOffset) > 0;\n // Always hide arrows\n\n case 'never':\n return false;\n // https://material.io/components/tabs#scrollable-tabs\n // Always show arrows when\n // overflowed on desktop\n\n default:\n return !this.isMobile && (this.isOverflowing || Math.abs(this.scrollOffset) > 0);\n }\n },\n\n hasNext() {\n if (!this.hasAffixes) return false;\n const {\n content,\n wrapper\n } = this.widths; // Check one scroll ahead to know the width of right-most item\n\n return content > Math.abs(this.scrollOffset) + wrapper;\n },\n\n hasPrev() {\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\n scrollOffset(val) {\n if (this.$vuetify.rtl) val = -val;\n let scroll = val <= 0 ? bias(-val) : val > this.widths.content - this.widths.wrapper ? -(this.widths.content - this.widths.wrapper) + bias(this.widths.content - this.widths.wrapper - val) : -val;\n if (this.$vuetify.rtl) scroll = -scroll;\n this.$refs.content.style.transform = `translateX(${scroll}px)`;\n }\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 var _a;\n\n itemsLength = (((_a = this.$refs.content) === null || _a === void 0 ? void 0 : _a.children) || []).length;\n });\n this.$on('hook:updated', () => {\n var _a;\n\n if (itemsLength === (((_a = this.$refs.content) === null || _a === void 0 ? void 0 : _a.children) || []).length) return;\n this.setWidths();\n });\n }\n },\n\n methods: {\n onScroll() {\n this.$refs.wrapper.scrollLeft = 0;\n },\n\n onFocusin(e) {\n if (!this.isOverflowing) return; // 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\n for (const el of composedPath(e)) {\n for (const vm of this.items) {\n if (vm.$el === el) {\n this.scrollOffset = calculateUpdatedOffset(vm.$el, this.widths, this.$vuetify.rtl, this.scrollOffset);\n return;\n }\n }\n }\n },\n\n // Always generate next for scrollable hint\n genNext() {\n const slot = this.$scopedSlots.next ? this.$scopedSlots.next({}) : getSlot(this, 'next') || this.__cachedNext;\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\n genContent() {\n return this.$createElement('div', {\n staticClass: 'v-slide-group__content',\n ref: 'content',\n on: {\n focusin: this.onFocusin\n }\n }, getSlot(this));\n },\n\n genData() {\n return {\n class: this.classes,\n directives: [{\n name: 'resize',\n value: this.onResize\n }]\n };\n },\n\n genIcon(location) {\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[`has${upperLocation}`];\n if (!this.showArrows && !hasAffix) return null;\n return this.$createElement(VIcon, {\n props: {\n disabled: !hasAffix\n }\n }, this[`${icon}Icon`]);\n },\n\n // Always generate prev for scrollable hint\n genPrev() {\n const slot = this.$scopedSlots.prev ? this.$scopedSlots.prev({}) : getSlot(this, 'prev') || this.__cachedPrev;\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\n genTransition(location) {\n return this.$createElement(VFadeTransition, [this.genIcon(location)]);\n },\n\n genWrapper() {\n return this.$createElement('div', {\n staticClass: 'v-slide-group__wrapper',\n directives: [{\n name: 'touch',\n value: {\n start: e => this.overflowCheck(e, this.onTouchStart),\n move: e => this.overflowCheck(e, this.onTouchMove),\n end: e => this.overflowCheck(e, this.onTouchEnd)\n }\n }],\n ref: 'wrapper',\n on: {\n scroll: this.onScroll\n }\n }, [this.genContent()]);\n },\n\n calculateNewOffset(direction, widths, rtl, currentScrollOffset) {\n const sign = rtl ? -1 : 1;\n const newAbosluteOffset = sign * currentScrollOffset + (direction === 'prev' ? -1 : 1) * widths.wrapper;\n return sign * Math.max(Math.min(newAbosluteOffset, widths.content - widths.wrapper), 0);\n },\n\n onAffixClick(location) {\n this.$emit(`click:${location}`);\n this.scrollTo(location);\n },\n\n onResize() {\n /* istanbul ignore next */\n if (this._isDestroyed) return;\n this.setWidths();\n },\n\n onTouchStart(e) {\n const {\n content\n } = this.$refs;\n this.startX = this.scrollOffset + e.touchstartX;\n content.style.setProperty('transition', 'none');\n content.style.setProperty('willChange', 'transform');\n },\n\n onTouchMove(e) {\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; // temporarily disable window vertical scrolling\n\n document.documentElement.style.overflowY = 'hidden';\n }\n },\n\n onTouchEnd() {\n if (!this.canTouch) return;\n const {\n content,\n wrapper\n } = this.$refs;\n const maxScrollOffset = content.clientWidth - wrapper.clientWidth;\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; // rollback whole page scrolling to default\n\n document.documentElement.style.removeProperty('overflow-y');\n },\n\n overflowCheck(e, fn) {\n e.stopPropagation();\n this.isOverflowing && fn(e);\n },\n\n scrollIntoView\n /* istanbul ignore next */\n () {\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 (this.$vuetify.rtl && wrapperPosition.right < lastItemPosition.right || !this.$vuetify.rtl && wrapperPosition.left > lastItemPosition.left) {\n this.scrollTo('prev');\n }\n }\n\n if (!this.selectedItem) {\n return;\n }\n\n if (this.selectedIndex === 0 || !this.centerActive && !this.isOverflowing) {\n this.scrollOffset = 0;\n } else if (this.centerActive) {\n this.scrollOffset = calculateCenteredOffset(this.selectedItem.$el, this.widths, this.$vuetify.rtl);\n } else if (this.isOverflowing) {\n this.scrollOffset = calculateUpdatedOffset(this.selectedItem.$el, this.widths, this.$vuetify.rtl, this.scrollOffset);\n }\n },\n\n scrollTo\n /* istanbul ignore next */\n (location) {\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\n setWidths() {\n window.requestAnimationFrame(() => {\n if (this._isDestroyed) return;\n const {\n content,\n wrapper\n } = this.$refs;\n this.widths = {\n content: content ? content.clientWidth : 0,\n wrapper: wrapper ? wrapper.clientWidth : 0\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\n this.isOverflowing = this.widths.wrapper + 1 < this.widths.content;\n this.scrollIntoView();\n });\n }\n\n },\n\n render(h) {\n return h('div', this.genData(), [this.genPrev(), this.genWrapper(), this.genNext()]);\n }\n\n});\nexport default BaseSlideGroup.extend({\n name: 'v-slide-group',\n\n provide() {\n return {\n slideGroup: this\n };\n }\n\n});\n//# sourceMappingURL=VSlideGroup.js.map"],"names":["bias","val","x","calculateUpdatedOffset","selectedElement","widths","rtl","currentScrollOffset","clientWidth","offsetLeft","totalWidth","itemOffset","additionalOffset","calculateCenteredOffset","offsetCentered","BaseSlideGroup","mixins","BaseItemGroup","Mobile","Resize","Touch","v","__spreadProps","__spreadValues","content","wrapper","scroll","obs","itemsLength","_a","e","el","composedPath","vm","slot","getSlot","location","icon","upperLocation","hasAffix","VIcon","VFadeTransition","direction","sign","newAbosluteOffset","diffX","diffY","maxScrollOffset","fn","lastItemPosition","wrapperPosition","h"],"mappings":"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","x_google_ignoreList":[0]}