{"version":3,"file":"embla-carousel-fade.esm.js","sources":["../src/components/utils.ts","../src/components/Fade.ts"],"sourcesContent":["export function clampNumber(number: number, min: number, max: number): number {\n return Math.min(Math.max(number, min), max)\n}\n\nexport function isNumber(value: number | null): value is number {\n return typeof value === 'number' && !isNaN(value)\n}\n","import { OptionsType } from './Options'\nimport { isNumber, clampNumber } from './utils'\nimport {\n CreatePluginType,\n EmblaCarouselType,\n ScrollBodyType\n} from 'embla-carousel'\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n fade: FadeType\n }\n}\n\nexport type FadeType = CreatePluginType<{}, OptionsType>\n\nexport type FadeOptionsType = FadeType['options']\n\nfunction Fade(userOptions: FadeOptionsType = {}): FadeType {\n const fullOpacity = 1\n const noOpacity = 0\n const fadeFriction = 0.68\n\n let emblaApi: EmblaCarouselType\n let opacities: number[] = []\n let fadeToNextDistance: number\n let distanceFromPointerDown = 0\n let fadeVelocity = 0\n let progress = 0\n let shouldFadePair = false\n\n let defaultSettledBehaviour: ScrollBodyType['settled']\n let defaultProgressBehaviour: EmblaCarouselType['scrollProgress']\n\n function init(emblaApiInstance: EmblaCarouselType): void {\n emblaApi = emblaApiInstance\n\n const selectedSnap = emblaApi.selectedScrollSnap()\n const { scrollBody, containerRect, axis } = emblaApi.internalEngine()\n const containerSize = axis.measureSize(containerRect)\n\n fadeToNextDistance = clampNumber(containerSize * 0.75, 200, 500)\n shouldFadePair = false\n\n opacities = emblaApi\n .scrollSnapList()\n .map((_, index) => (index === selectedSnap ? fullOpacity : noOpacity))\n\n defaultSettledBehaviour = scrollBody.settled\n defaultProgressBehaviour = emblaApi.scrollProgress\n\n scrollBody.settled = settled\n emblaApi.scrollProgress = scrollProgress\n\n emblaApi\n .on('select', select)\n .on('slideFocus', fadeToSelectedSnapInstantly)\n .on('pointerDown', pointerDown)\n .on('pointerUp', pointerUp)\n\n disableScroll()\n fadeToSelectedSnapInstantly()\n }\n\n function destroy(): void {\n const { scrollBody } = emblaApi.internalEngine()\n scrollBody.settled = defaultSettledBehaviour\n emblaApi.scrollProgress = defaultProgressBehaviour\n\n emblaApi\n .off('select', select)\n .off('slideFocus', fadeToSelectedSnapInstantly)\n .off('pointerDown', pointerDown)\n .off('pointerUp', pointerUp)\n\n emblaApi.slideNodes().forEach((slideNode) => {\n const slideStyle = slideNode.style\n slideStyle.opacity = ''\n slideStyle.transform = ''\n slideStyle.pointerEvents = ''\n if (!slideNode.getAttribute('style')) slideNode.removeAttribute('style')\n })\n }\n\n function fadeToSelectedSnapInstantly(): void {\n const selectedSnap = emblaApi.selectedScrollSnap()\n setOpacities(selectedSnap, fullOpacity)\n }\n\n function pointerUp(): void {\n shouldFadePair = false\n }\n\n function pointerDown(): void {\n shouldFadePair = false\n distanceFromPointerDown = 0\n fadeVelocity = 0\n }\n\n function select(): void {\n const duration = emblaApi.internalEngine().scrollBody.duration()\n fadeVelocity = duration ? 0 : fullOpacity\n shouldFadePair = true\n if (!duration) fadeToSelectedSnapInstantly()\n }\n\n function getSlideTransform(position: number): string {\n const { axis } = emblaApi.internalEngine()\n const translateAxis = axis.scroll.toUpperCase()\n return `translate${translateAxis}(${axis.direction(position)}px)`\n }\n\n function disableScroll(): void {\n const { translate, slideLooper } = emblaApi.internalEngine()\n\n translate.clear()\n translate.toggleActive(false)\n\n slideLooper.loopPoints.forEach(({ translate }) => {\n translate.clear()\n translate.toggleActive(false)\n })\n }\n\n function lockExcessiveScroll(fadeIndex: number | null): void {\n const { scrollSnaps, location, target } = emblaApi.internalEngine()\n if (!isNumber(fadeIndex) || opacities[fadeIndex] < 0.5) return\n\n location.set(scrollSnaps[fadeIndex])\n target.set(location)\n }\n\n function setOpacities(fadeIndex: number, velocity: number): void {\n const scrollSnaps = emblaApi.scrollSnapList()\n\n scrollSnaps.forEach((_, indexA) => {\n const absVelocity = Math.abs(velocity)\n const currentOpacity = opacities[indexA]\n const isFadeIndex = indexA === fadeIndex\n\n const nextOpacity = isFadeIndex\n ? currentOpacity + absVelocity\n : currentOpacity - absVelocity\n\n const clampedOpacity = clampNumber(nextOpacity, noOpacity, fullOpacity)\n opacities[indexA] = clampedOpacity\n\n const fadePair = isFadeIndex && shouldFadePair\n const indexB = emblaApi.previousScrollSnap()\n\n if (fadePair) opacities[indexB] = 1 - clampedOpacity\n if (isFadeIndex) setProgress(fadeIndex, clampedOpacity)\n\n setOpacity(indexA)\n })\n }\n\n function setOpacity(index: number): void {\n const slidesInSnap = emblaApi.internalEngine().slideRegistry[index]\n const { scrollSnaps, containerRect } = emblaApi.internalEngine()\n const opacity = opacities[index]\n\n slidesInSnap.forEach((slideIndex) => {\n const slideStyle = emblaApi.slideNodes()[slideIndex].style\n const roundedOpacity = parseFloat(opacity.toFixed(2))\n const hasOpacity = roundedOpacity > noOpacity\n const position = hasOpacity ? scrollSnaps[index] : containerRect.width + 2\n const transform = getSlideTransform(position)\n\n if (hasOpacity) slideStyle.transform = transform\n\n slideStyle.opacity = roundedOpacity.toString()\n slideStyle.pointerEvents = opacity > 0.5 ? 'auto' : 'none'\n\n if (!hasOpacity) slideStyle.transform = transform\n })\n }\n\n function setProgress(fadeIndex: number, opacity: number): void {\n const { index, dragHandler, scrollSnaps } = emblaApi.internalEngine()\n const pointerDown = dragHandler.pointerDown()\n const snapFraction = 1 / (scrollSnaps.length - 1)\n\n let indexA = fadeIndex\n let indexB = pointerDown\n ? emblaApi.selectedScrollSnap()\n : emblaApi.previousScrollSnap()\n\n if (pointerDown && indexA === indexB) {\n const reverseSign = Math.sign(distanceFromPointerDown) * -1\n indexA = indexB\n indexB = index.clone().set(indexB).add(reverseSign).get()\n }\n\n const currentPosition = indexB * snapFraction\n const diffPosition = (indexA - indexB) * snapFraction\n progress = currentPosition + diffPosition * opacity\n }\n\n function getFadeIndex(): number | null {\n const { dragHandler, index, scrollBody } = emblaApi.internalEngine()\n const selectedSnap = emblaApi.selectedScrollSnap()\n\n if (!dragHandler.pointerDown()) return selectedSnap\n\n const directionSign = Math.sign(scrollBody.velocity())\n const distanceSign = Math.sign(distanceFromPointerDown)\n const nextSnap = index\n .clone()\n .set(selectedSnap)\n .add(directionSign * -1)\n .get()\n\n if (!directionSign || !distanceSign) return null\n return distanceSign === directionSign ? nextSnap : selectedSnap\n }\n\n function fade(emblaApi: EmblaCarouselType): void {\n const { dragHandler, scrollBody } = emblaApi.internalEngine()\n const pointerDown = dragHandler.pointerDown()\n const velocity = scrollBody.velocity()\n const duration = scrollBody.duration()\n const fadeIndex = getFadeIndex()\n const noFadeIndex = !isNumber(fadeIndex)\n\n if (pointerDown) {\n if (!velocity) return\n\n distanceFromPointerDown += velocity\n fadeVelocity = Math.abs(velocity / fadeToNextDistance)\n lockExcessiveScroll(fadeIndex)\n }\n\n if (!pointerDown) {\n if (!duration || noFadeIndex) return\n\n fadeVelocity += (fullOpacity - opacities[fadeIndex]) / duration\n fadeVelocity *= fadeFriction\n }\n\n if (noFadeIndex) return\n setOpacities(fadeIndex, fadeVelocity)\n }\n\n function settled(): boolean {\n const { target, location } = emblaApi.internalEngine()\n const diffToTarget = target.get() - location.get()\n const notReachedTarget = Math.abs(diffToTarget) >= 1\n const fadeIndex = getFadeIndex()\n const noFadeIndex = !isNumber(fadeIndex)\n\n fade(emblaApi)\n\n if (noFadeIndex || notReachedTarget) return false\n return opacities[fadeIndex] > 0.999\n }\n\n function scrollProgress(): number {\n return progress\n }\n\n const self: FadeType = {\n name: 'fade',\n options: userOptions,\n init,\n destroy\n }\n return self\n}\n\ndeclare namespace Fade {\n let globalOptions: FadeOptionsType | undefined\n}\n\nFade.globalOptions = undefined\n\nexport default Fade\n"],"names":["clampNumber","number","min","max","Math","isNumber","value","isNaN","Fade","userOptions","fullOpacity","noOpacity","fadeFriction","emblaApi","opacities","fadeToNextDistance","distanceFromPointerDown","fadeVelocity","progress","shouldFadePair","defaultSettledBehaviour","defaultProgressBehaviour","init","emblaApiInstance","selectedSnap","selectedScrollSnap","scrollBody","containerRect","axis","internalEngine","containerSize","measureSize","scrollSnapList","map","_","index","settled","scrollProgress","on","select","fadeToSelectedSnapInstantly","pointerDown","pointerUp","disableScroll","destroy","off","slideNodes","forEach","slideNode","slideStyle","style","opacity","transform","pointerEvents","getAttribute","removeAttribute","setOpacities","duration","getSlideTransform","position","translateAxis","scroll","toUpperCase","direction","translate","slideLooper","clear","toggleActive","loopPoints","lockExcessiveScroll","fadeIndex","scrollSnaps","location","target","set","velocity","indexA","absVelocity","abs","currentOpacity","isFadeIndex","nextOpacity","clampedOpacity","fadePair","indexB","previousScrollSnap","setProgress","setOpacity","slidesInSnap","slideRegistry","slideIndex","roundedOpacity","parseFloat","toFixed","hasOpacity","width","toString","dragHandler","snapFraction","length","reverseSign","sign","clone","add","get","currentPosition","diffPosition","getFadeIndex","directionSign","distanceSign","nextSnap","fade","noFadeIndex","diffToTarget","notReachedTarget","self","name","options","globalOptions","undefined"],"mappings":"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"}