{"version":3,"file":"embla-carousel-autoplay.cjs.js","sources":["../src/components/Options.ts","../src/components/utils.ts","../src/components/Autoplay.ts"],"sourcesContent":["import { CreateOptionsType, EmblaCarouselType } from 'embla-carousel'\n\nexport type DelayOptionType =\n | number\n | ((scrollSnaps: number[], emblaApi: EmblaCarouselType) => number[])\n\nexport type RootNodeType =\n | null\n | ((emblaRoot: HTMLElement) => HTMLElement | null)\n\nexport type OptionsType = CreateOptionsType<{\n delay: DelayOptionType\n jump: boolean\n playOnInit: boolean\n stopOnFocusIn: boolean\n stopOnInteraction: boolean\n stopOnMouseEnter: boolean\n stopOnLastSnap: boolean\n rootNode: RootNodeType\n}>\n\nexport const defaultOptions: OptionsType = {\n active: true,\n breakpoints: {},\n delay: 4000,\n jump: false,\n playOnInit: true,\n stopOnFocusIn: true,\n stopOnInteraction: true,\n stopOnMouseEnter: false,\n stopOnLastSnap: false,\n rootNode: null\n}\n","import { EmblaCarouselType } from 'embla-carousel/components/EmblaCarousel'\nimport { DelayOptionType, RootNodeType } from './Options'\n\nexport function normalizeDelay(\n emblaApi: EmblaCarouselType,\n delay: DelayOptionType\n): number[] {\n const scrollSnaps = emblaApi.scrollSnapList()\n\n if (typeof delay === 'number') {\n return scrollSnaps.map(() => delay)\n }\n return delay(scrollSnaps, emblaApi)\n}\n\nexport function getAutoplayRootNode(\n emblaApi: EmblaCarouselType,\n rootNode: RootNodeType\n): HTMLElement {\n const emblaRootNode = emblaApi.rootNode()\n return (rootNode && rootNode(emblaRootNode)) || emblaRootNode\n}\n","import { OptionsType, defaultOptions } from './Options'\nimport { getAutoplayRootNode, normalizeDelay } from './utils'\nimport {\n CreatePluginType,\n OptionsHandlerType,\n EmblaCarouselType\n} from 'embla-carousel'\n\ndeclare module 'embla-carousel' {\n interface EmblaPluginsType {\n autoplay: AutoplayType\n }\n\n interface EmblaEventListType {\n autoplayPlay: 'autoplay:play'\n autoplayStop: 'autoplay:stop'\n autoplaySelect: 'autoplay:select'\n autoplayTimerSet: 'autoplay:timerset'\n autoplayTimerStopped: 'autoplay:timerstopped'\n }\n}\n\nexport type AutoplayType = CreatePluginType<\n {\n play: (jump?: boolean) => void\n stop: () => void\n reset: () => void\n isPlaying: () => boolean\n timeUntilNext: () => number | null\n },\n OptionsType\n>\n\nexport type AutoplayOptionsType = AutoplayType['options']\n\nfunction Autoplay(userOptions: AutoplayOptionsType = {}): AutoplayType {\n let options: OptionsType\n let emblaApi: EmblaCarouselType\n let destroyed: boolean\n let delay: ReturnType\n let timerStartTime: null | number = null\n let timerId = 0\n let autoplayActive = false\n let mouseIsOver = false\n let playOnDocumentVisible = false\n let jump = false\n\n function init(\n emblaApiInstance: EmblaCarouselType,\n optionsHandler: OptionsHandlerType\n ): void {\n emblaApi = emblaApiInstance\n\n const { mergeOptions, optionsAtMedia } = optionsHandler\n const optionsBase = mergeOptions(defaultOptions, Autoplay.globalOptions)\n const allOptions = mergeOptions(optionsBase, userOptions)\n options = optionsAtMedia(allOptions)\n\n if (emblaApi.scrollSnapList().length <= 1) return\n\n jump = options.jump\n destroyed = false\n delay = normalizeDelay(emblaApi, options.delay)\n\n const { eventStore, ownerDocument } = emblaApi.internalEngine()\n const isDraggable = !!emblaApi.internalEngine().options.watchDrag\n const root = getAutoplayRootNode(emblaApi, options.rootNode)\n\n eventStore.add(ownerDocument, 'visibilitychange', visibilityChange)\n\n if (isDraggable) {\n emblaApi.on('pointerDown', pointerDown)\n }\n\n if (isDraggable && !options.stopOnInteraction) {\n emblaApi.on('pointerUp', pointerUp)\n }\n\n if (options.stopOnMouseEnter) {\n eventStore.add(root, 'mouseenter', mouseEnter)\n }\n\n if (options.stopOnMouseEnter && !options.stopOnInteraction) {\n eventStore.add(root, 'mouseleave', mouseLeave)\n }\n\n if (options.stopOnFocusIn) {\n emblaApi.on('slideFocusStart', stopAutoplay)\n }\n\n if (options.stopOnFocusIn && !options.stopOnInteraction) {\n eventStore.add(emblaApi.containerNode(), 'focusout', startAutoplay)\n }\n\n if (options.playOnInit) startAutoplay()\n }\n\n function destroy(): void {\n emblaApi\n .off('pointerDown', pointerDown)\n .off('pointerUp', pointerUp)\n .off('slideFocusStart', stopAutoplay)\n\n stopAutoplay()\n destroyed = true\n autoplayActive = false\n }\n\n function setTimer(): void {\n const { ownerWindow } = emblaApi.internalEngine()\n ownerWindow.clearTimeout(timerId)\n timerId = ownerWindow.setTimeout(next, delay[emblaApi.selectedScrollSnap()])\n timerStartTime = new Date().getTime()\n emblaApi.emit('autoplay:timerset')\n }\n\n function clearTimer(): void {\n const { ownerWindow } = emblaApi.internalEngine()\n ownerWindow.clearTimeout(timerId)\n timerId = 0\n timerStartTime = null\n emblaApi.emit('autoplay:timerstopped')\n }\n\n function startAutoplay(): void {\n if (destroyed) return\n if (documentIsHidden()) {\n playOnDocumentVisible = true\n return\n }\n if (!autoplayActive) emblaApi.emit('autoplay:play')\n\n setTimer()\n autoplayActive = true\n }\n\n function stopAutoplay(): void {\n if (destroyed) return\n if (autoplayActive) emblaApi.emit('autoplay:stop')\n\n clearTimer()\n autoplayActive = false\n }\n\n function visibilityChange(): void {\n if (documentIsHidden()) {\n playOnDocumentVisible = autoplayActive\n return stopAutoplay()\n }\n\n if (playOnDocumentVisible) startAutoplay()\n }\n\n function documentIsHidden(): boolean {\n const { ownerDocument } = emblaApi.internalEngine()\n return ownerDocument.visibilityState === 'hidden'\n }\n\n function pointerDown(): void {\n if (!mouseIsOver) stopAutoplay()\n }\n\n function pointerUp(): void {\n if (!mouseIsOver) startAutoplay()\n }\n\n function mouseEnter(): void {\n mouseIsOver = true\n stopAutoplay()\n }\n\n function mouseLeave(): void {\n mouseIsOver = false\n startAutoplay()\n }\n\n function play(jumpOverride?: boolean): void {\n if (typeof jumpOverride !== 'undefined') jump = jumpOverride\n startAutoplay()\n }\n\n function stop(): void {\n if (autoplayActive) stopAutoplay()\n }\n\n function reset(): void {\n if (autoplayActive) startAutoplay()\n }\n\n function isPlaying(): boolean {\n return autoplayActive\n }\n\n function next(): void {\n const { index } = emblaApi.internalEngine()\n const nextIndex = index.clone().add(1).get()\n const lastIndex = emblaApi.scrollSnapList().length - 1\n const kill = options.stopOnLastSnap && nextIndex === lastIndex\n\n if (emblaApi.canScrollNext()) {\n emblaApi.scrollNext(jump)\n } else {\n emblaApi.scrollTo(0, jump)\n }\n\n emblaApi.emit('autoplay:select')\n\n if (kill) return stopAutoplay()\n startAutoplay()\n }\n\n function timeUntilNext(): number | null {\n if (!timerStartTime) return null\n const currentDelay = delay[emblaApi.selectedScrollSnap()]\n const timePastSinceStart = new Date().getTime() - timerStartTime\n return currentDelay - timePastSinceStart\n }\n\n const self: AutoplayType = {\n name: 'autoplay',\n options: userOptions,\n init,\n destroy,\n play,\n stop,\n reset,\n isPlaying,\n timeUntilNext\n }\n return self\n}\n\ndeclare namespace Autoplay {\n let globalOptions: AutoplayOptionsType | undefined\n}\n\nAutoplay.globalOptions = undefined\n\nexport default Autoplay\n"],"names":["defaultOptions","active","breakpoints","delay","jump","playOnInit","stopOnFocusIn","stopOnInteraction","stopOnMouseEnter","stopOnLastSnap","rootNode","normalizeDelay","emblaApi","scrollSnaps","scrollSnapList","map","getAutoplayRootNode","emblaRootNode","Autoplay","userOptions","options","destroyed","timerStartTime","timerId","autoplayActive","mouseIsOver","playOnDocumentVisible","init","emblaApiInstance","optionsHandler","mergeOptions","optionsAtMedia","optionsBase","globalOptions","allOptions","length","eventStore","ownerDocument","internalEngine","isDraggable","watchDrag","root","add","visibilityChange","on","pointerDown","pointerUp","mouseEnter","mouseLeave","stopAutoplay","containerNode","startAutoplay","destroy","off","setTimer","ownerWindow","clearTimeout","setTimeout","next","selectedScrollSnap","Date","getTime","emit","clearTimer","documentIsHidden","visibilityState","play","jumpOverride","stop","reset","isPlaying","index","nextIndex","clone","get","lastIndex","kill","canScrollNext","scrollNext","scrollTo","timeUntilNext","currentDelay","timePastSinceStart","self","name","undefined"],"mappings":"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"}