{ "version": 3, "sources": ["../../../node_modules/embla-carousel-reactive-utils/src/components/utils.ts", "../../../node_modules/embla-carousel/src/components/utils.ts", "../../../node_modules/embla-carousel/src/components/Alignment.ts", "../../../node_modules/embla-carousel/src/components/Axis.ts", "../../../node_modules/embla-carousel/src/components/Limit.ts", "../../../node_modules/embla-carousel/src/components/Counter.ts", "../../../node_modules/embla-carousel/src/components/Direction.ts", "../../../node_modules/embla-carousel/src/components/EventStore.ts", "../../../node_modules/embla-carousel/src/components/DragHandler.ts", "../../../node_modules/embla-carousel/src/components/DragTracker.ts", "../../../node_modules/embla-carousel/src/components/NodeRects.ts", "../../../node_modules/embla-carousel/src/components/PercentOfView.ts", "../../../node_modules/embla-carousel/src/components/ResizeHandler.ts", "../../../node_modules/embla-carousel/src/components/ScrollBody.ts", "../../../node_modules/embla-carousel/src/components/ScrollBounds.ts", "../../../node_modules/embla-carousel/src/components/ScrollContain.ts", "../../../node_modules/embla-carousel/src/components/ScrollLimit.ts", "../../../node_modules/embla-carousel/src/components/ScrollLooper.ts", "../../../node_modules/embla-carousel/src/components/ScrollProgress.ts", "../../../node_modules/embla-carousel/src/components/ScrollSnaps.ts", "../../../node_modules/embla-carousel/src/components/SlideRegistry.ts", "../../../node_modules/embla-carousel/src/components/ScrollTarget.ts", "../../../node_modules/embla-carousel/src/components/ScrollTo.ts", "../../../node_modules/embla-carousel/src/components/SlideFocus.ts", "../../../node_modules/embla-carousel/src/components/Vector1d.ts", "../../../node_modules/embla-carousel/src/components/Translate.ts", "../../../node_modules/embla-carousel/src/components/SlideLooper.ts", "../../../node_modules/embla-carousel/src/components/SlidesHandler.ts", "../../../node_modules/embla-carousel/src/components/SlidesInView.ts", "../../../node_modules/embla-carousel/src/components/SlideSizes.ts", "../../../node_modules/embla-carousel/src/components/SlidesToScroll.ts", "../../../node_modules/embla-carousel/src/components/Engine.ts", "../../../node_modules/embla-carousel/src/components/Animations.ts", "../../../node_modules/embla-carousel/src/components/EventHandler.ts", "../../../node_modules/embla-carousel/src/components/Options.ts", "../../../node_modules/embla-carousel/src/components/OptionsHandler.ts", "../../../node_modules/embla-carousel/src/components/PluginsHandler.ts", "../../../node_modules/embla-carousel/src/components/EmblaCarousel.ts", "../../../node_modules/embla-carousel-react/src/components/useEmblaCarousel.ts"], "sourcesContent": ["import { EmblaPluginType } from 'embla-carousel'\n\nexport function isObject(subject: unknown): subject is Record {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function isRecord(\n subject: unknown\n): subject is Record {\n return isObject(subject) || Array.isArray(subject)\n}\n\nexport function canUseDOM(): boolean {\n return !!(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n )\n}\n\nexport function areOptionsEqual(\n optionsA: Record,\n optionsB: Record\n): boolean {\n const optionsAKeys = Object.keys(optionsA)\n const optionsBKeys = Object.keys(optionsB)\n\n if (optionsAKeys.length !== optionsBKeys.length) return false\n\n const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}))\n const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}))\n\n if (breakpointsA !== breakpointsB) return false\n\n return optionsAKeys.every((key) => {\n const valueA = optionsA[key]\n const valueB = optionsB[key]\n if (typeof valueA === 'function') return `${valueA}` === `${valueB}`\n if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB\n return areOptionsEqual(valueA, valueB)\n })\n}\n\nexport function sortAndMapPluginToOptions(\n plugins: EmblaPluginType[]\n): EmblaPluginType['options'][] {\n return plugins\n .concat()\n .sort((a, b) => (a.name > b.name ? 1 : -1))\n .map((plugin) => plugin.options)\n}\n\nexport function arePluginsEqual(\n pluginsA: EmblaPluginType[],\n pluginsB: EmblaPluginType[]\n): boolean {\n if (pluginsA.length !== pluginsB.length) return false\n\n const optionsA = sortAndMapPluginToOptions(pluginsA)\n const optionsB = sortAndMapPluginToOptions(pluginsB)\n\n return optionsA.every((optionA, index) => {\n const optionB = optionsB[index]\n return areOptionsEqual(optionA, optionB)\n })\n}\n", "import { PointerEventType } from './DragTracker'\n\nexport type WindowType = Window & typeof globalThis\n\nexport function isNumber(subject: unknown): subject is number {\n return typeof subject === 'number'\n}\n\nexport function isString(subject: unknown): subject is string {\n return typeof subject === 'string'\n}\n\nexport function isBoolean(subject: unknown): subject is boolean {\n return typeof subject === 'boolean'\n}\n\nexport function isObject(subject: unknown): subject is Record {\n return Object.prototype.toString.call(subject) === '[object Object]'\n}\n\nexport function mathAbs(n: number): number {\n return Math.abs(n)\n}\n\nexport function mathSign(n: number): number {\n return Math.sign(n)\n}\n\nexport function deltaAbs(valueB: number, valueA: number): number {\n return mathAbs(valueB - valueA)\n}\n\nexport function factorAbs(valueB: number, valueA: number): number {\n if (valueB === 0 || valueA === 0) return 0\n if (mathAbs(valueB) <= mathAbs(valueA)) return 0\n const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA))\n return mathAbs(diff / valueB)\n}\n\nexport function arrayKeys(array: Type[]): number[] {\n return objectKeys(array).map(Number)\n}\n\nexport function arrayLast(array: Type[]): Type {\n return array[arrayLastIndex(array)]\n}\n\nexport function arrayLastIndex(array: Type[]): number {\n return Math.max(0, array.length - 1)\n}\n\nexport function arrayIsLastIndex(array: Type[], index: number): boolean {\n return index === arrayLastIndex(array)\n}\n\nexport function arrayFromNumber(n: number, startAt: number = 0): number[] {\n return Array.from(Array(n), (_, i) => startAt + i)\n}\n\nexport function objectKeys(object: Type): string[] {\n return Object.keys(object)\n}\n\nexport function objectsMergeDeep(\n objectA: Record,\n objectB: Record\n): Record {\n return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n objectKeys(currentObject).forEach((key) => {\n const valueA = mergedObjects[key]\n const valueB = currentObject[key]\n const areObjects = isObject(valueA) && isObject(valueB)\n\n mergedObjects[key] = areObjects\n ? objectsMergeDeep(valueA, valueB)\n : valueB\n })\n return mergedObjects\n }, {})\n}\n\nexport function isMouseEvent(\n evt: PointerEventType,\n ownerWindow: WindowType\n): evt is MouseEvent {\n return (\n typeof ownerWindow.MouseEvent !== 'undefined' &&\n evt instanceof ownerWindow.MouseEvent\n )\n}\n", "import { isString } from './utils'\n\nexport type AlignmentOptionType =\n | 'start'\n | 'center'\n | 'end'\n | ((viewSize: number, snapSize: number, index: number) => number)\n\nexport type AlignmentType = {\n measure: (n: number, index: number) => number\n}\n\nexport function Alignment(\n align: AlignmentOptionType,\n viewSize: number\n): AlignmentType {\n const predefined = { start, center, end }\n\n function start(): number {\n return 0\n }\n\n function center(n: number): number {\n return end(n) / 2\n }\n\n function end(n: number): number {\n return viewSize - n\n }\n\n function measure(n: number, index: number): number {\n if (isString(align)) return predefined[align](n)\n return align(viewSize, n, index)\n }\n\n const self: AlignmentType = {\n measure\n }\n return self\n}\n", "import { DirectionOptionType } from './Direction'\nimport { NodeRectType } from './NodeRects'\n\nexport type AxisOptionType = 'x' | 'y'\ntype AxisEdgeType = 'top' | 'right' | 'bottom' | 'left'\n\nexport type AxisType = {\n scroll: AxisOptionType\n cross: AxisOptionType\n startEdge: AxisEdgeType\n endEdge: AxisEdgeType\n measureSize: (nodeRect: NodeRectType) => number\n}\n\nexport function Axis(\n axis: AxisOptionType,\n direction: DirectionOptionType\n): AxisType {\n const scroll = axis === 'y' ? 'y' : 'x'\n const cross = axis === 'y' ? 'x' : 'y'\n const startEdge = getStartEdge()\n const endEdge = getEndEdge()\n\n function measureSize(nodeRect: NodeRectType): number {\n const { width, height } = nodeRect\n return scroll === 'x' ? width : height\n }\n\n function getStartEdge(): AxisEdgeType {\n if (scroll === 'y') return 'top'\n return direction === 'rtl' ? 'right' : 'left'\n }\n\n function getEndEdge(): AxisEdgeType {\n if (scroll === 'y') return 'bottom'\n return direction === 'rtl' ? 'left' : 'right'\n }\n\n const self: AxisType = {\n scroll,\n cross,\n startEdge,\n endEdge,\n measureSize\n }\n return self\n}\n", "import { mathAbs } from './utils'\n\nexport type LimitType = {\n min: number\n max: number\n length: number\n constrain: (n: number) => number\n reachedAny: (n: number) => boolean\n reachedMax: (n: number) => boolean\n reachedMin: (n: number) => boolean\n removeOffset: (n: number) => number\n}\n\nexport function Limit(min: number, max: number): LimitType {\n const length = mathAbs(min - max)\n\n function reachedMin(n: number): boolean {\n return n < min\n }\n\n function reachedMax(n: number): boolean {\n return n > max\n }\n\n function reachedAny(n: number): boolean {\n return reachedMin(n) || reachedMax(n)\n }\n\n function constrain(n: number): number {\n if (!reachedAny(n)) return n\n return reachedMin(n) ? min : max\n }\n\n function removeOffset(n: number): number {\n if (!length) return n\n return n - length * Math.ceil((n - max) / length)\n }\n\n const self: LimitType = {\n length,\n max,\n min,\n constrain,\n reachedAny,\n reachedMax,\n reachedMin,\n removeOffset\n }\n return self\n}\n", "import { Limit } from './Limit'\nimport { mathAbs } from './utils'\n\nexport type CounterType = {\n get: () => number\n set: (n: number) => CounterType\n add: (n: number) => CounterType\n clone: () => CounterType\n}\n\nexport function Counter(\n max: number,\n start: number,\n loop: boolean\n): CounterType {\n const { constrain } = Limit(0, max)\n const loopEnd = max + 1\n let counter = withinLimit(start)\n\n function withinLimit(n: number): number {\n return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd)\n }\n\n function get(): number {\n return counter\n }\n\n function set(n: number): CounterType {\n counter = withinLimit(n)\n return self\n }\n\n function add(n: number): CounterType {\n return clone().set(get() + n)\n }\n\n function clone(): CounterType {\n return Counter(max, get(), loop)\n }\n\n const self: CounterType = {\n get,\n set,\n add,\n clone\n }\n return self\n}\n", "export type DirectionOptionType = 'ltr' | 'rtl'\n\nexport type DirectionType = {\n apply: (n: number) => number\n}\n\nexport function Direction(direction: DirectionOptionType): DirectionType {\n const sign = direction === 'rtl' ? -1 : 1\n\n function apply(n: number): number {\n return n * sign\n }\n\n const self: DirectionType = {\n apply\n }\n return self\n}\n", "type EventNameType = keyof DocumentEventMap | keyof WindowEventMap\ntype EventHandlerType = (evt: any) => void\ntype EventOptionsType = boolean | AddEventListenerOptions | undefined\ntype EventRemoverType = () => void\n\nexport type EventStoreType = {\n add: (\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options?: EventOptionsType\n ) => EventStoreType\n clear: () => void\n}\n\nexport function EventStore(): EventStoreType {\n let listeners: EventRemoverType[] = []\n\n function add(\n node: EventTarget,\n type: EventNameType,\n handler: EventHandlerType,\n options: EventOptionsType = { passive: true }\n ): EventStoreType {\n let removeListener: EventRemoverType\n\n if ('addEventListener' in node) {\n node.addEventListener(type, handler, options)\n removeListener = () => node.removeEventListener(type, handler, options)\n } else {\n const legacyMediaQueryList = node\n legacyMediaQueryList.addListener(handler)\n removeListener = () => legacyMediaQueryList.removeListener(handler)\n }\n\n listeners.push(removeListener)\n return self\n }\n\n function clear(): void {\n listeners = listeners.filter((remove) => remove())\n }\n\n const self: EventStoreType = {\n add,\n clear\n }\n return self\n}\n", "import { EmblaCarouselType } from './EmblaCarousel'\nimport { AnimationType } from './Animations'\nimport { CounterType } from './Counter'\nimport { DirectionType } from './Direction'\nimport { DragTrackerType, PointerEventType } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { AxisType } from './Axis'\nimport { EventStore } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollTargetType } from './ScrollTarget'\nimport { ScrollToType } from './ScrollTo'\nimport { Vector1DType } from './Vector1d'\nimport { PercentOfViewType } from './PercentOfView'\nimport { Limit } from './Limit'\nimport {\n deltaAbs,\n factorAbs,\n isBoolean,\n isMouseEvent,\n mathAbs,\n mathSign,\n WindowType\n} from './utils'\n\ntype DragHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n evt: PointerEventType\n) => boolean | void\n\nexport type DragHandlerOptionType = boolean | DragHandlerCallbackType\n\nexport type DragHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n pointerDown: () => boolean\n}\n\nexport function DragHandler(\n axis: AxisType,\n direction: DirectionType,\n rootNode: HTMLElement,\n ownerDocument: Document,\n ownerWindow: WindowType,\n target: Vector1DType,\n dragTracker: DragTrackerType,\n location: Vector1DType,\n animation: AnimationType,\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n scrollTarget: ScrollTargetType,\n index: CounterType,\n eventHandler: EventHandlerType,\n percentOfView: PercentOfViewType,\n dragFree: boolean,\n dragThreshold: number,\n skipSnaps: boolean,\n baseFriction: number,\n watchDrag: DragHandlerOptionType\n): DragHandlerType {\n const { cross: crossAxis } = axis\n const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA']\n const nonPassiveEvent = { passive: false }\n const initEvents = EventStore()\n const dragEvents = EventStore()\n const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20))\n const snapForceBoost = { mouse: 300, touch: 400 }\n const freeForceBoost = { mouse: 500, touch: 600 }\n const baseSpeed = dragFree ? 43 : 25\n\n let isMoving = false\n let startScroll = 0\n let startCross = 0\n let pointerIsDown = false\n let preventScroll = false\n let preventClick = false\n let isMouse = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchDrag) return\n\n function downIfAllowed(evt: PointerEventType): void {\n if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt)\n }\n\n const node = rootNode\n initEvents\n .add(node, 'dragstart', (evt) => evt.preventDefault(), nonPassiveEvent)\n .add(node, 'touchmove', () => undefined, nonPassiveEvent)\n .add(node, 'touchend', () => undefined)\n .add(node, 'touchstart', downIfAllowed)\n .add(node, 'mousedown', downIfAllowed)\n .add(node, 'touchcancel', up)\n .add(node, 'contextmenu', up)\n .add(node, 'click', click, true)\n }\n\n function destroy(): void {\n initEvents.clear()\n dragEvents.clear()\n }\n\n function addDragEvents(): void {\n const node = isMouse ? ownerDocument : rootNode\n dragEvents\n .add(node, 'touchmove', move, nonPassiveEvent)\n .add(node, 'touchend', up)\n .add(node, 'mousemove', move, nonPassiveEvent)\n .add(node, 'mouseup', up)\n }\n\n function isFocusNode(node: Element): boolean {\n const nodeName = node.nodeName || ''\n return focusNodes.includes(nodeName)\n }\n\n function forceBoost(): number {\n const boost = dragFree ? freeForceBoost : snapForceBoost\n const type = isMouse ? 'mouse' : 'touch'\n return boost[type]\n }\n\n function allowedForce(force: number, targetChanged: boolean): number {\n const next = index.add(mathSign(force) * -1)\n const baseForce = scrollTarget.byDistance(force, !dragFree).distance\n\n if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce\n if (skipSnaps && targetChanged) return baseForce * 0.5\n\n return scrollTarget.byIndex(next.get(), 0).distance\n }\n\n function down(evt: PointerEventType): void {\n const isMouseEvt = isMouseEvent(evt, ownerWindow)\n isMouse = isMouseEvt\n if (isMouseEvt && evt.button !== 0) return\n if (isFocusNode(evt.target as Element)) return\n\n preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving\n isMoving = deltaAbs(target.get(), location.get()) >= 2\n\n pointerIsDown = true\n dragTracker.pointerDown(evt)\n scrollBody.useFriction(0).useDuration(0)\n target.set(location)\n addDragEvents()\n startScroll = dragTracker.readPoint(evt)\n startCross = dragTracker.readPoint(evt, crossAxis)\n eventHandler.emit('pointerDown')\n }\n\n function move(evt: PointerEventType): void {\n const lastScroll = dragTracker.readPoint(evt)\n const lastCross = dragTracker.readPoint(evt, crossAxis)\n const diffScroll = deltaAbs(lastScroll, startScroll)\n const diffCross = deltaAbs(lastCross, startCross)\n\n if (!preventScroll && !isMouse) {\n if (!evt.cancelable) return up(evt)\n preventScroll = diffScroll > diffCross\n if (!preventScroll) return up(evt)\n }\n const diff = dragTracker.pointerMove(evt)\n if (diffScroll > dragThreshold) preventClick = true\n\n scrollBody.useFriction(0.3).useDuration(1)\n animation.start()\n target.add(direction.apply(diff))\n evt.preventDefault()\n }\n\n function up(evt: PointerEventType): void {\n const currentLocation = scrollTarget.byDistance(0, false)\n const targetChanged = currentLocation.index !== index.get()\n const rawForce = dragTracker.pointerUp(evt) * forceBoost()\n const force = allowedForce(direction.apply(rawForce), targetChanged)\n const forceFactor = factorAbs(rawForce, force)\n const speed = baseSpeed - 10 * forceFactor\n const friction = baseFriction + forceFactor / 50\n\n preventScroll = false\n pointerIsDown = false\n dragEvents.clear()\n scrollBody.useDuration(speed).useFriction(friction)\n scrollTo.distance(force, !dragFree)\n isMouse = false\n eventHandler.emit('pointerUp')\n }\n\n function click(evt: MouseEvent): void {\n if (preventClick) {\n evt.stopPropagation()\n evt.preventDefault()\n }\n }\n\n function pointerDown(): boolean {\n return pointerIsDown\n }\n\n const self: DragHandlerType = {\n init,\n pointerDown,\n destroy\n }\n return self\n}\n", "import { AxisOptionType, AxisType } from './Axis'\nimport { isMouseEvent, mathAbs, WindowType } from './utils'\n\ntype PointerCoordType = keyof Touch | keyof MouseEvent\nexport type PointerEventType = TouchEvent | MouseEvent\n\nexport type DragTrackerType = {\n pointerDown: (evt: PointerEventType) => number\n pointerMove: (evt: PointerEventType) => number\n pointerUp: (evt: PointerEventType) => number\n readPoint: (evt: PointerEventType, evtAxis?: AxisOptionType) => number\n}\n\nexport function DragTracker(\n axis: AxisType,\n ownerWindow: WindowType\n): DragTrackerType {\n const logInterval = 170\n\n let startEvent: PointerEventType\n let lastEvent: PointerEventType\n\n function readTime(evt: PointerEventType): number {\n return evt.timeStamp\n }\n\n function readPoint(evt: PointerEventType, evtAxis?: AxisOptionType): number {\n const property = evtAxis || axis.scroll\n const coord: PointerCoordType = `client${property === 'x' ? 'X' : 'Y'}`\n return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord]\n }\n\n function pointerDown(evt: PointerEventType): number {\n startEvent = evt\n lastEvent = evt\n return readPoint(evt)\n }\n\n function pointerMove(evt: PointerEventType): number {\n const diff = readPoint(evt) - readPoint(lastEvent)\n const expired = readTime(evt) - readTime(startEvent) > logInterval\n\n lastEvent = evt\n if (expired) startEvent = evt\n return diff\n }\n\n function pointerUp(evt: PointerEventType): number {\n if (!startEvent || !lastEvent) return 0\n const diffDrag = readPoint(lastEvent) - readPoint(startEvent)\n const diffTime = readTime(evt) - readTime(startEvent)\n const expired = readTime(evt) - readTime(lastEvent) > logInterval\n const force = diffDrag / diffTime\n const isFlick = diffTime && !expired && mathAbs(force) > 0.1\n\n return isFlick ? force : 0\n }\n\n const self: DragTrackerType = {\n pointerDown,\n pointerMove,\n pointerUp,\n readPoint\n }\n return self\n}\n", "export type NodeRectType = {\n top: number\n right: number\n bottom: number\n left: number\n width: number\n height: number\n}\n\nexport type NodeRectsType = {\n measure: (node: HTMLElement) => NodeRectType\n}\n\nexport function NodeRects(): NodeRectsType {\n function measure(node: HTMLElement): NodeRectType {\n const { offsetTop, offsetLeft, offsetWidth, offsetHeight } = node\n const offset: NodeRectType = {\n top: offsetTop,\n right: offsetLeft + offsetWidth,\n bottom: offsetTop + offsetHeight,\n left: offsetLeft,\n width: offsetWidth,\n height: offsetHeight\n }\n\n return offset\n }\n\n const self: NodeRectsType = {\n measure\n }\n return self\n}\n", "export type PercentOfViewType = {\n measure: (n: number) => number\n}\n\nexport function PercentOfView(viewSize: number): PercentOfViewType {\n function measure(n: number): number {\n return viewSize * (n / 100)\n }\n\n const self: PercentOfViewType = {\n measure\n }\n return self\n}\n", "import { AxisType } from './Axis'\nimport { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { NodeRectsType } from './NodeRects'\nimport { isBoolean, mathAbs, WindowType } from './utils'\n\ntype ResizeHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n entries: ResizeObserverEntry[]\n) => boolean | void\n\nexport type ResizeHandlerOptionType = boolean | ResizeHandlerCallbackType\n\nexport type ResizeHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function ResizeHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n ownerWindow: WindowType,\n slides: HTMLElement[],\n axis: AxisType,\n watchResize: ResizeHandlerOptionType,\n nodeRects: NodeRectsType\n): ResizeHandlerType {\n let resizeObserver: ResizeObserver\n let containerSize: number\n let slideSizes: number[] = []\n let destroyed = false\n\n function readSize(node: HTMLElement): number {\n return axis.measureSize(nodeRects.measure(node))\n }\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchResize) return\n\n containerSize = readSize(container)\n slideSizes = slides.map(readSize)\n\n function defaultCallback(entries: ResizeObserverEntry[]): void {\n for (const entry of entries) {\n const isContainer = entry.target === container\n const slideIndex = slides.indexOf(entry.target)\n const lastSize = isContainer ? containerSize : slideSizes[slideIndex]\n const newSize = readSize(isContainer ? container : slides[slideIndex])\n const diffSize = mathAbs(newSize - lastSize)\n\n if (diffSize >= 0.5) {\n ownerWindow.requestAnimationFrame(() => {\n emblaApi.reInit()\n eventHandler.emit('resize')\n })\n break\n }\n }\n }\n\n resizeObserver = new ResizeObserver((entries) => {\n if (destroyed) return\n if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n defaultCallback(entries)\n }\n })\n\n const observeNodes = [container].concat(slides)\n observeNodes.forEach((node) => resizeObserver.observe(node))\n }\n\n function destroy(): void {\n if (resizeObserver) resizeObserver.disconnect()\n destroyed = true\n }\n\n const self: ResizeHandlerType = {\n init,\n destroy\n }\n return self\n}\n", "import { mathSign, mathAbs } from './utils'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollBodyType = {\n direction: () => number\n duration: () => number\n velocity: () => number\n seek: () => ScrollBodyType\n settled: () => boolean\n useBaseFriction: () => ScrollBodyType\n useBaseDuration: () => ScrollBodyType\n useFriction: (n: number) => ScrollBodyType\n useDuration: (n: number) => ScrollBodyType\n}\n\nexport function ScrollBody(\n location: Vector1DType,\n offsetLocation: Vector1DType,\n target: Vector1DType,\n baseDuration: number,\n baseFriction: number\n): ScrollBodyType {\n let bodyVelocity = 0\n let scrollDirection = 0\n let scrollDuration = baseDuration\n let scrollFriction = baseFriction\n let rawLocation = location.get()\n let rawLocationPrevious = 0\n\n function seek(): ScrollBodyType {\n const diff = target.get() - location.get()\n const isInstant = !scrollDuration\n let directionDiff = 0\n\n if (isInstant) {\n bodyVelocity = 0\n location.set(target)\n\n directionDiff = diff\n } else {\n bodyVelocity += diff / scrollDuration\n bodyVelocity *= scrollFriction\n rawLocation += bodyVelocity\n location.add(bodyVelocity)\n\n directionDiff = rawLocation - rawLocationPrevious\n }\n\n scrollDirection = mathSign(directionDiff)\n rawLocationPrevious = rawLocation\n return self\n }\n\n function settled(): boolean {\n const diff = target.get() - offsetLocation.get()\n return mathAbs(diff) < 0.001\n }\n\n function duration(): number {\n return scrollDuration\n }\n\n function direction(): number {\n return scrollDirection\n }\n\n function velocity(): number {\n return bodyVelocity\n }\n\n function useBaseDuration(): ScrollBodyType {\n return useDuration(baseDuration)\n }\n\n function useBaseFriction(): ScrollBodyType {\n return useFriction(baseFriction)\n }\n\n function useDuration(n: number): ScrollBodyType {\n scrollDuration = n\n return self\n }\n\n function useFriction(n: number): ScrollBodyType {\n scrollFriction = n\n return self\n }\n\n const self: ScrollBodyType = {\n direction,\n duration,\n velocity,\n seek,\n settled,\n useBaseFriction,\n useBaseDuration,\n useFriction,\n useDuration\n }\n return self\n}\n", "import { Limit, LimitType } from './Limit'\nimport { ScrollBodyType } from './ScrollBody'\nimport { Vector1DType } from './Vector1d'\nimport { mathAbs } from './utils'\nimport { PercentOfViewType } from './PercentOfView'\n\nexport type ScrollBoundsType = {\n constrain: (pointerDown: boolean) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function ScrollBounds(\n limit: LimitType,\n location: Vector1DType,\n target: Vector1DType,\n scrollBody: ScrollBodyType,\n percentOfView: PercentOfViewType\n): ScrollBoundsType {\n const pullBackThreshold = percentOfView.measure(10)\n const edgeOffsetTolerance = percentOfView.measure(50)\n const frictionLimit = Limit(0.1, 0.99)\n let disabled = false\n\n function shouldConstrain(): boolean {\n if (disabled) return false\n if (!limit.reachedAny(target.get())) return false\n if (!limit.reachedAny(location.get())) return false\n return true\n }\n\n function constrain(pointerDown: boolean): void {\n if (!shouldConstrain()) return\n const edge = limit.reachedMin(location.get()) ? 'min' : 'max'\n const diffToEdge = mathAbs(limit[edge] - location.get())\n const diffToTarget = target.get() - location.get()\n const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance)\n\n target.subtract(diffToTarget * friction)\n\n if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n target.set(limit.constrain(target.get()))\n scrollBody.useDuration(25).useBaseFriction()\n }\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n const self: ScrollBoundsType = {\n constrain,\n toggleActive\n }\n return self\n}\n", "import { Limit, LimitType } from './Limit'\nimport { arrayIsLastIndex, arrayLast } from './utils'\n\nexport type ScrollContainOptionType = false | 'trimSnaps' | 'keepSnaps'\n\nexport type ScrollContainType = {\n snapsContained: number[]\n scrollContainLimit: LimitType\n}\n\nexport function ScrollContain(\n viewSize: number,\n contentSize: number,\n snapsAligned: number[],\n containScroll: ScrollContainOptionType\n): ScrollContainType {\n const scrollBounds = Limit(-contentSize + viewSize, 0)\n const snapsBounded = measureBounded()\n const scrollContainLimit = findScrollContainLimit()\n const snapsContained = measureContained()\n\n function findScrollContainLimit(): LimitType {\n const startSnap = snapsBounded[0]\n const endSnap = arrayLast(snapsBounded)\n const min = snapsBounded.lastIndexOf(startSnap)\n const max = snapsBounded.indexOf(endSnap) + 1\n return Limit(min, max)\n }\n\n function measureBounded(): number[] {\n return snapsAligned\n .map((snapAligned, index) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(snapsAligned, index)\n if (isFirst) return scrollBounds.max\n if (isLast) return scrollBounds.min\n return scrollBounds.constrain(snapAligned)\n })\n .map((scrollBound) => parseFloat(scrollBound.toFixed(3)))\n }\n\n function measureContained(): number[] {\n if (contentSize <= viewSize) return [scrollBounds.max]\n if (containScroll === 'keepSnaps') return snapsBounded\n const { min, max } = scrollContainLimit\n return snapsBounded.slice(min, max)\n }\n\n const self: ScrollContainType = {\n snapsContained,\n scrollContainLimit\n }\n return self\n}\n", "import { Limit, LimitType } from './Limit'\nimport { arrayLast } from './utils'\n\nexport type ScrollLimitType = {\n limit: LimitType\n}\n\nexport function ScrollLimit(\n contentSize: number,\n scrollSnaps: number[],\n loop: boolean\n): ScrollLimitType {\n const max = scrollSnaps[0]\n const min = loop ? max - contentSize : arrayLast(scrollSnaps)\n const limit = Limit(min, max)\n\n const self: ScrollLimitType = {\n limit\n }\n return self\n}\n", "import { Limit, LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollLooperType = {\n loop: (direction: number) => void\n}\n\nexport function ScrollLooper(\n contentSize: number,\n limit: LimitType,\n offsetLocation: Vector1DType,\n vectors: Vector1DType[]\n): ScrollLooperType {\n const jointSafety = 0.1\n const min = limit.min + jointSafety\n const max = limit.max + jointSafety\n const { reachedMin, reachedMax } = Limit(min, max)\n\n function shouldLoop(direction: number): boolean {\n if (direction === 1) return reachedMax(offsetLocation.get())\n if (direction === -1) return reachedMin(offsetLocation.get())\n return false\n }\n\n function loop(direction: number): void {\n if (!shouldLoop(direction)) return\n\n const loopDistance = contentSize * (direction * -1)\n vectors.forEach((v) => v.add(loopDistance))\n }\n\n const self: ScrollLooperType = {\n loop\n }\n return self\n}\n", "import { LimitType } from './Limit'\n\nexport type ScrollProgressType = {\n get: (n: number) => number\n}\n\nexport function ScrollProgress(limit: LimitType): ScrollProgressType {\n const { max, length } = limit\n\n function get(n: number): number {\n const currentLocation = n - max\n return length ? currentLocation / -length : 0\n }\n\n const self: ScrollProgressType = {\n get\n }\n return self\n}\n", "import { AlignmentType } from './Alignment'\nimport { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport { arrayLast, mathAbs } from './utils'\n\nexport type ScrollSnapsType = {\n snaps: number[]\n snapsAligned: number[]\n}\n\nexport function ScrollSnaps(\n axis: AxisType,\n alignment: AlignmentType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slidesToScroll: SlidesToScrollType\n): ScrollSnapsType {\n const { startEdge, endEdge } = axis\n const { groupSlides } = slidesToScroll\n const alignments = measureSizes().map(alignment.measure)\n const snaps = measureUnaligned()\n const snapsAligned = measureAligned()\n\n function measureSizes(): number[] {\n return groupSlides(slideRects)\n .map((rects) => arrayLast(rects)[endEdge] - rects[0][startEdge])\n .map(mathAbs)\n }\n\n function measureUnaligned(): number[] {\n return slideRects\n .map((rect) => containerRect[startEdge] - rect[startEdge])\n .map((snap) => -mathAbs(snap))\n }\n\n function measureAligned(): number[] {\n return groupSlides(snaps)\n .map((g) => g[0])\n .map((snap, index) => snap + alignments[index])\n }\n\n const self: ScrollSnapsType = {\n snaps,\n snapsAligned\n }\n return self\n}\n", "import { LimitType } from './Limit'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { SlidesToScrollType } from './SlidesToScroll'\nimport {\n arrayFromNumber,\n arrayIsLastIndex,\n arrayLast,\n arrayLastIndex\n} from './utils'\n\nexport type SlideRegistryType = {\n slideRegistry: number[][]\n}\n\nexport function SlideRegistry(\n viewSize: number,\n contentSize: number,\n containSnaps: boolean,\n containScroll: ScrollContainOptionType,\n scrollContainLimit: LimitType,\n slidesToScroll: SlidesToScrollType,\n slideIndexes: number[]\n): SlideRegistryType {\n const { groupSlides } = slidesToScroll\n const { min, max } = scrollContainLimit\n const slideRegistry = createSlideRegistry()\n\n function createSlideRegistry(): number[][] {\n const groupedSlideIndexes = groupSlides(slideIndexes)\n const doNotContain = !containSnaps || containScroll === 'keepSnaps'\n if (doNotContain || contentSize <= viewSize) return groupedSlideIndexes\n\n return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(groups, index)\n\n if (isFirst) {\n const range = arrayLast(groups[0]) + 1\n return arrayFromNumber(range)\n }\n if (isLast) {\n const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1\n return arrayFromNumber(range, arrayLast(groups)[0])\n }\n return group\n })\n }\n\n const self: SlideRegistryType = {\n slideRegistry\n }\n return self\n}\n", "import { LimitType } from './Limit'\nimport { Vector1DType } from './Vector1d'\nimport { arrayLast, mathAbs, mathSign } from './utils'\n\nexport type TargetType = {\n distance: number\n index: number\n}\n\nexport type ScrollTargetType = {\n byIndex: (target: number, direction: number) => TargetType\n byDistance: (force: number, snap: boolean) => TargetType\n shortcut: (target: number, direction: number) => number\n}\n\nexport function ScrollTarget(\n loop: boolean,\n scrollSnaps: number[],\n contentSize: number,\n limit: LimitType,\n targetVector: Vector1DType\n): ScrollTargetType {\n const { reachedAny, removeOffset, constrain } = limit\n\n function minDistance(distances: number[]): number {\n return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0]\n }\n\n function findTargetSnap(target: number): TargetType {\n const distance = loop ? removeOffset(target) : constrain(target)\n const ascDiffsToSnaps = scrollSnaps\n .map((scrollSnap) => scrollSnap - distance)\n .map((diffToSnap) => shortcut(diffToSnap, 0))\n .map((diff, i) => ({ diff, index: i }))\n .sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff))\n\n const { index } = ascDiffsToSnaps[0]\n return { index, distance }\n }\n\n function shortcut(target: number, direction: number): number {\n const targets = [target, target + contentSize, target - contentSize]\n\n if (!loop) return targets[0]\n if (!direction) return minDistance(targets)\n\n const matchingTargets = targets.filter((t) => mathSign(t) === direction)\n if (matchingTargets.length) return minDistance(matchingTargets)\n return arrayLast(targets) - contentSize\n }\n\n function byIndex(index: number, direction: number): TargetType {\n const diffToSnap = scrollSnaps[index] - targetVector.get()\n const distance = shortcut(diffToSnap, direction)\n return { index, distance }\n }\n\n function byDistance(distance: number, snap: boolean): TargetType {\n const target = targetVector.get() + distance\n const { index, distance: targetSnapDistance } = findTargetSnap(target)\n const reachedBound = !loop && reachedAny(target)\n\n if (!snap || reachedBound) return { index, distance }\n\n const diffToSnap = scrollSnaps[index] - targetSnapDistance\n const snapDistance = distance + shortcut(diffToSnap, 0)\n\n return { index, distance: snapDistance }\n }\n\n const self: ScrollTargetType = {\n byDistance,\n byIndex,\n shortcut\n }\n return self\n}\n", "import { AnimationType } from './Animations'\nimport { CounterType } from './Counter'\nimport { EventHandlerType } from './EventHandler'\nimport { ScrollTargetType, TargetType } from './ScrollTarget'\nimport { Vector1DType } from './Vector1d'\n\nexport type ScrollToType = {\n distance: (n: number, snap: boolean) => void\n index: (n: number, direction: number) => void\n}\n\nexport function ScrollTo(\n animation: AnimationType,\n indexCurrent: CounterType,\n indexPrevious: CounterType,\n scrollTarget: ScrollTargetType,\n targetVector: Vector1DType,\n eventHandler: EventHandlerType\n): ScrollToType {\n function scrollTo(target: TargetType): void {\n const distanceDiff = target.distance\n const indexDiff = target.index !== indexCurrent.get()\n\n targetVector.add(distanceDiff)\n if (distanceDiff) animation.start()\n\n if (indexDiff) {\n indexPrevious.set(indexCurrent.get())\n indexCurrent.set(target.index)\n eventHandler.emit('select')\n }\n }\n\n function distance(n: number, snap: boolean): void {\n const target = scrollTarget.byDistance(n, snap)\n scrollTo(target)\n }\n\n function index(n: number, direction: number): void {\n const targetIndex = indexCurrent.clone().set(n)\n const target = scrollTarget.byIndex(targetIndex.get(), direction)\n scrollTo(target)\n }\n\n const self: ScrollToType = {\n distance,\n index\n }\n return self\n}\n", "import { EventStoreType } from './EventStore'\nimport { ScrollBodyType } from './ScrollBody'\nimport { ScrollToType } from './ScrollTo'\nimport { SlideRegistryType } from './SlideRegistry'\nimport { isNumber } from './utils'\n\nexport type SlideFocusType = {\n init: () => void\n}\n\nexport function SlideFocus(\n root: HTMLElement,\n slides: HTMLElement[],\n slideRegistry: SlideRegistryType['slideRegistry'],\n scrollTo: ScrollToType,\n scrollBody: ScrollBodyType,\n eventStore: EventStoreType\n): SlideFocusType {\n let lastTabPressTime = 0\n\n function init(): void {\n eventStore.add(document, 'keydown', registerTabPress, false)\n slides.forEach(addSlideFocusEvent)\n }\n\n function registerTabPress(event: KeyboardEvent): void {\n if (event.code === 'Tab') lastTabPressTime = new Date().getTime()\n }\n\n function addSlideFocusEvent(slide: HTMLElement): void {\n const focus = (): void => {\n const nowTime = new Date().getTime()\n const diffTime = nowTime - lastTabPressTime\n\n if (diffTime > 10) return\n\n root.scrollLeft = 0\n const index = slides.indexOf(slide)\n const group = slideRegistry.findIndex((group) => group.includes(index))\n\n if (!isNumber(group)) return\n\n scrollBody.useDuration(0)\n scrollTo.index(group, 0)\n }\n\n eventStore.add(slide, 'focus', focus, {\n passive: true,\n capture: true\n })\n }\n\n const self: SlideFocusType = {\n init\n }\n return self\n}\n", "import { isNumber } from './utils'\n\nexport type Vector1DType = {\n get: () => number\n set: (n: Vector1DType | number) => void\n add: (n: Vector1DType | number) => void\n subtract: (n: Vector1DType | number) => void\n}\n\nexport function Vector1D(initialValue: number): Vector1DType {\n let value = initialValue\n\n function get(): number {\n return value\n }\n\n function set(n: Vector1DType | number): void {\n value = normalizeInput(n)\n }\n\n function add(n: Vector1DType | number): void {\n value += normalizeInput(n)\n }\n\n function subtract(n: Vector1DType | number): void {\n value -= normalizeInput(n)\n }\n\n function normalizeInput(n: Vector1DType | number): number {\n return isNumber(n) ? n : n.get()\n }\n\n const self: Vector1DType = {\n get,\n set,\n add,\n subtract\n }\n return self\n}\n", "import { AxisType } from './Axis'\nimport { DirectionType } from './Direction'\n\nexport type TranslateType = {\n clear: () => void\n to: (target: number) => void\n toggleActive: (active: boolean) => void\n}\n\nexport function Translate(\n axis: AxisType,\n direction: DirectionType,\n container: HTMLElement\n): TranslateType {\n const translate = axis.scroll === 'x' ? x : y\n const containerStyle = container.style\n let disabled = false\n\n function x(n: number): string {\n return `translate3d(${n}px,0px,0px)`\n }\n\n function y(n: number): string {\n return `translate3d(0px,${n}px,0px)`\n }\n\n function to(target: number): void {\n if (disabled) return\n containerStyle.transform = translate(direction.apply(target))\n }\n\n function toggleActive(active: boolean): void {\n disabled = !active\n }\n\n function clear(): void {\n if (disabled) return\n containerStyle.transform = ''\n if (!container.getAttribute('style')) container.removeAttribute('style')\n }\n\n const self: TranslateType = {\n clear,\n to,\n toggleActive\n }\n return self\n}\n", "import { AxisType } from './Axis'\nimport { arrayKeys } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\nimport { Translate, TranslateType } from './Translate'\nimport { DirectionType } from './Direction'\n\ntype SlideBoundType = {\n start: number\n end: number\n}\n\ntype LoopPointType = {\n loopPoint: number\n index: number\n translate: TranslateType\n slideLocation: Vector1DType\n target: () => number\n}\n\nexport type SlideLooperType = {\n canLoop: () => boolean\n clear: () => void\n loop: () => void\n loopPoints: LoopPointType[]\n}\n\nexport function SlideLooper(\n axis: AxisType,\n direction: DirectionType,\n viewSize: number,\n contentSize: number,\n slideSizes: number[],\n slideSizesWithGaps: number[],\n snaps: number[],\n scrollSnaps: number[],\n offsetLocation: Vector1DType,\n slides: HTMLElement[]\n): SlideLooperType {\n const roundingSafety = 0.5\n const ascItems = arrayKeys(slideSizesWithGaps)\n const descItems = arrayKeys(slideSizesWithGaps).reverse()\n const loopPoints = startPoints().concat(endPoints())\n\n function removeSlideSizes(indexes: number[], from: number): number {\n return indexes.reduce((a: number, i) => {\n return a - slideSizesWithGaps[i]\n }, from)\n }\n\n function slidesInGap(indexes: number[], gap: number): number[] {\n return indexes.reduce((a: number[], i) => {\n const remainingGap = removeSlideSizes(a, gap)\n return remainingGap > 0 ? a.concat([i]) : a\n }, [])\n }\n\n function findSlideBounds(offset: number): SlideBoundType[] {\n return snaps.map((snap, index) => ({\n start: snap - slideSizes[index] + roundingSafety + offset,\n end: snap + viewSize - roundingSafety + offset\n }))\n }\n\n function findLoopPoints(\n indexes: number[],\n offset: number,\n isEndEdge: boolean\n ): LoopPointType[] {\n const slideBounds = findSlideBounds(offset)\n\n return indexes.map((index) => {\n const initial = isEndEdge ? 0 : -contentSize\n const altered = isEndEdge ? contentSize : 0\n const boundEdge = isEndEdge ? 'end' : 'start'\n const loopPoint = slideBounds[index][boundEdge]\n\n return {\n index,\n loopPoint,\n slideLocation: Vector1D(-1),\n translate: Translate(axis, direction, slides[index]),\n target: () => (offsetLocation.get() > loopPoint ? initial : altered)\n }\n })\n }\n\n function startPoints(): LoopPointType[] {\n const gap = scrollSnaps[0]\n const indexes = slidesInGap(descItems, gap)\n return findLoopPoints(indexes, contentSize, false)\n }\n\n function endPoints(): LoopPointType[] {\n const gap = viewSize - scrollSnaps[0] - 1\n const indexes = slidesInGap(ascItems, gap)\n return findLoopPoints(indexes, -contentSize, true)\n }\n\n function canLoop(): boolean {\n return loopPoints.every(({ index }) => {\n const otherIndexes = ascItems.filter((i) => i !== index)\n return removeSlideSizes(otherIndexes, viewSize) <= 0.1\n })\n }\n\n function loop(): void {\n loopPoints.forEach((loopPoint) => {\n const { target, translate, slideLocation } = loopPoint\n const shiftLocation = target()\n if (shiftLocation === slideLocation.get()) return\n translate.to(shiftLocation)\n slideLocation.set(shiftLocation)\n })\n }\n\n function clear(): void {\n loopPoints.forEach((loopPoint) => loopPoint.translate.clear())\n }\n\n const self: SlideLooperType = {\n canLoop,\n clear,\n loop,\n loopPoints\n }\n return self\n}\n", "import { EmblaCarouselType } from './EmblaCarousel'\nimport { EventHandlerType } from './EventHandler'\nimport { isBoolean } from './utils'\n\ntype SlidesHandlerCallbackType = (\n emblaApi: EmblaCarouselType,\n mutations: MutationRecord[]\n) => boolean | void\n\nexport type SlidesHandlerOptionType = boolean | SlidesHandlerCallbackType\n\nexport type SlidesHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n destroy: () => void\n}\n\nexport function SlidesHandler(\n container: HTMLElement,\n eventHandler: EventHandlerType,\n watchSlides: SlidesHandlerOptionType\n): SlidesHandlerType {\n let mutationObserver: MutationObserver\n let destroyed = false\n\n function init(emblaApi: EmblaCarouselType): void {\n if (!watchSlides) return\n\n function defaultCallback(mutations: MutationRecord[]): void {\n for (const mutation of mutations) {\n if (mutation.type === 'childList') {\n emblaApi.reInit()\n eventHandler.emit('slidesChanged')\n break\n }\n }\n }\n\n mutationObserver = new MutationObserver((mutations) => {\n if (destroyed) return\n if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n defaultCallback(mutations)\n }\n })\n\n mutationObserver.observe(container, { childList: true })\n }\n\n function destroy(): void {\n if (mutationObserver) mutationObserver.disconnect()\n destroyed = true\n }\n\n const self: SlidesHandlerType = {\n init,\n destroy\n }\n return self\n}\n", "import { EventHandlerType } from './EventHandler'\nimport { objectKeys } from './utils'\n\ntype IntersectionEntryMapType = {\n [key: number]: IntersectionObserverEntry\n}\n\nexport type SlidesInViewOptionsType = IntersectionObserverInit['threshold']\n\nexport type SlidesInViewType = {\n init: () => void\n destroy: () => void\n get: (inView?: boolean) => number[]\n}\n\nexport function SlidesInView(\n container: HTMLElement,\n slides: HTMLElement[],\n eventHandler: EventHandlerType,\n threshold: SlidesInViewOptionsType\n): SlidesInViewType {\n const intersectionEntryMap: IntersectionEntryMapType = {}\n let inViewCache: number[] | null = null\n let notInViewCache: number[] | null = null\n let intersectionObserver: IntersectionObserver\n let destroyed = false\n\n function init(): void {\n intersectionObserver = new IntersectionObserver(\n (entries) => {\n if (destroyed) return\n\n entries.forEach((entry) => {\n const index = slides.indexOf(entry.target)\n intersectionEntryMap[index] = entry\n })\n\n inViewCache = null\n notInViewCache = null\n eventHandler.emit('slidesInView')\n },\n {\n root: container.parentElement,\n threshold\n }\n )\n\n slides.forEach((slide) => intersectionObserver.observe(slide))\n }\n\n function destroy(): void {\n if (intersectionObserver) intersectionObserver.disconnect()\n destroyed = true\n }\n\n function createInViewList(inView: boolean): number[] {\n return objectKeys(intersectionEntryMap).reduce(\n (list: number[], slideIndex) => {\n const index = parseInt(slideIndex)\n const { isIntersecting } = intersectionEntryMap[index]\n const inViewMatch = inView && isIntersecting\n const notInViewMatch = !inView && !isIntersecting\n\n if (inViewMatch || notInViewMatch) list.push(index)\n return list\n },\n []\n )\n }\n\n function get(inView: boolean = true): number[] {\n if (inView && inViewCache) return inViewCache\n if (!inView && notInViewCache) return notInViewCache\n\n const slideIndexes = createInViewList(inView)\n\n if (inView) inViewCache = slideIndexes\n if (!inView) notInViewCache = slideIndexes\n\n return slideIndexes\n }\n\n const self: SlidesInViewType = {\n init,\n destroy,\n get\n }\n\n return self\n}\n", "import { AxisType } from './Axis'\nimport { NodeRectType } from './NodeRects'\nimport { arrayIsLastIndex, arrayLast, mathAbs, WindowType } from './utils'\n\nexport type SlideSizesType = {\n slideSizes: number[]\n slideSizesWithGaps: number[]\n startGap: number\n endGap: number\n}\n\nexport function SlideSizes(\n axis: AxisType,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n slides: HTMLElement[],\n readEdgeGap: boolean,\n ownerWindow: WindowType\n): SlideSizesType {\n const { measureSize, startEdge, endEdge } = axis\n const withEdgeGap = slideRects[0] && readEdgeGap\n const startGap = measureStartGap()\n const endGap = measureEndGap()\n const slideSizes = slideRects.map(measureSize)\n const slideSizesWithGaps = measureWithGaps()\n\n function measureStartGap(): number {\n if (!withEdgeGap) return 0\n const slideRect = slideRects[0]\n return mathAbs(containerRect[startEdge] - slideRect[startEdge])\n }\n\n function measureEndGap(): number {\n if (!withEdgeGap) return 0\n const style = ownerWindow.getComputedStyle(arrayLast(slides))\n return parseFloat(style.getPropertyValue(`margin-${endEdge}`))\n }\n\n function measureWithGaps(): number[] {\n return slideRects\n .map((rect, index, rects) => {\n const isFirst = !index\n const isLast = arrayIsLastIndex(rects, index)\n if (isFirst) return slideSizes[index] + startGap\n if (isLast) return slideSizes[index] + endGap\n return rects[index + 1][startEdge] - rect[startEdge]\n })\n .map(mathAbs)\n }\n\n const self: SlideSizesType = {\n slideSizes,\n slideSizesWithGaps,\n startGap,\n endGap\n }\n return self\n}\n", "import { AxisType } from './Axis'\nimport { DirectionType } from './Direction'\nimport { NodeRectType } from './NodeRects'\nimport {\n arrayKeys,\n arrayLast,\n arrayLastIndex,\n isNumber,\n mathAbs\n} from './utils'\n\nexport type SlidesToScrollOptionType = 'auto' | number\n\nexport type SlidesToScrollType = {\n groupSlides: (array: Type[]) => Type[][]\n}\n\nexport function SlidesToScroll(\n axis: AxisType,\n direction: DirectionType,\n viewSize: number,\n slidesToScroll: SlidesToScrollOptionType,\n loop: boolean,\n containerRect: NodeRectType,\n slideRects: NodeRectType[],\n startGap: number,\n endGap: number\n): SlidesToScrollType {\n const { startEdge, endEdge } = axis\n const groupByNumber = isNumber(slidesToScroll)\n\n function byNumber(array: Type[], groupSize: number): Type[][] {\n return arrayKeys(array)\n .filter((i) => i % groupSize === 0)\n .map((i) => array.slice(i, i + groupSize))\n }\n\n function bySize(array: Type[]): Type[][] {\n if (!array.length) return []\n\n return arrayKeys(array)\n .reduce((groups: number[], rectB) => {\n const rectA = arrayLast(groups) || 0\n const isFirst = rectA === 0\n const isLast = rectB === arrayLastIndex(array)\n\n const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge]\n const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge]\n const gapA = !loop && isFirst ? direction.apply(startGap) : 0\n const gapB = !loop && isLast ? direction.apply(endGap) : 0\n const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA))\n\n if (chunkSize > viewSize) groups.push(rectB)\n if (isLast) groups.push(array.length)\n return groups\n }, [])\n .map((currentSize, index, groups) => {\n const previousSize = Math.max(groups[index - 1] || 0)\n return array.slice(previousSize, currentSize)\n })\n }\n\n function groupSlides(array: Type[]): Type[][] {\n return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array)\n }\n\n const self: SlidesToScrollType = {\n groupSlides\n }\n return self\n}\n", "import { Alignment } from './Alignment'\nimport { Axis, AxisType } from './Axis'\nimport { Counter, CounterType } from './Counter'\nimport { Direction, DirectionType } from './Direction'\nimport { DragHandler, DragHandlerType } from './DragHandler'\nimport { DragTracker } from './DragTracker'\nimport { EventHandlerType } from './EventHandler'\nimport { EventStore, EventStoreType } from './EventStore'\nimport { LimitType } from './Limit'\nimport { NodeRectType, NodeRects } from './NodeRects'\nimport { OptionsType } from './Options'\nimport { PercentOfView, PercentOfViewType } from './PercentOfView'\nimport { ResizeHandler, ResizeHandlerType } from './ResizeHandler'\nimport { ScrollBody, ScrollBodyType } from './ScrollBody'\nimport { ScrollBounds, ScrollBoundsType } from './ScrollBounds'\nimport { ScrollContain } from './ScrollContain'\nimport { ScrollLimit } from './ScrollLimit'\nimport { ScrollLooper, ScrollLooperType } from './ScrollLooper'\nimport { ScrollProgress, ScrollProgressType } from './ScrollProgress'\nimport { ScrollSnaps } from './ScrollSnaps'\nimport { SlideRegistry, SlideRegistryType } from './SlideRegistry'\nimport { ScrollTarget, ScrollTargetType } from './ScrollTarget'\nimport { ScrollTo, ScrollToType } from './ScrollTo'\nimport { SlideFocus, SlideFocusType } from './SlideFocus'\nimport { SlideLooper, SlideLooperType } from './SlideLooper'\nimport { SlidesHandler, SlidesHandlerType } from './SlidesHandler'\nimport { SlidesInView, SlidesInViewType } from './SlidesInView'\nimport { SlideSizes } from './SlideSizes'\nimport { SlidesToScroll, SlidesToScrollType } from './SlidesToScroll'\nimport { Translate, TranslateType } from './Translate'\nimport { arrayKeys, arrayLast, arrayLastIndex, WindowType } from './utils'\nimport { Vector1D, Vector1DType } from './Vector1d'\nimport {\n AnimationType,\n AnimationUpdateType,\n AnimationsType,\n AnimationRenderType\n} from './Animations'\n\nexport type EngineType = {\n ownerDocument: Document\n ownerWindow: WindowType\n eventHandler: EventHandlerType\n axis: AxisType\n direction: DirectionType\n animation: AnimationType\n scrollBounds: ScrollBoundsType\n scrollLooper: ScrollLooperType\n scrollProgress: ScrollProgressType\n index: CounterType\n indexPrevious: CounterType\n limit: LimitType\n location: Vector1DType\n offsetLocation: Vector1DType\n options: OptionsType\n percentOfView: PercentOfViewType\n scrollBody: ScrollBodyType\n dragHandler: DragHandlerType\n eventStore: EventStoreType\n slideLooper: SlideLooperType\n slidesInView: SlidesInViewType\n slidesToScroll: SlidesToScrollType\n target: Vector1DType\n translate: TranslateType\n resizeHandler: ResizeHandlerType\n slidesHandler: SlidesHandlerType\n scrollTo: ScrollToType\n scrollTarget: ScrollTargetType\n scrollSnapList: number[]\n scrollSnaps: number[]\n slideIndexes: number[]\n slideFocus: SlideFocusType\n slideRegistry: SlideRegistryType['slideRegistry']\n containerRect: NodeRectType\n slideRects: NodeRectType[]\n}\n\nexport function Engine(\n root: HTMLElement,\n container: HTMLElement,\n slides: HTMLElement[],\n ownerDocument: Document,\n ownerWindow: WindowType,\n options: OptionsType,\n eventHandler: EventHandlerType,\n animations: AnimationsType\n): EngineType {\n // Options\n const {\n align,\n axis: scrollAxis,\n direction: contentDirection,\n startIndex,\n loop,\n duration,\n dragFree,\n dragThreshold,\n inViewThreshold,\n slidesToScroll: groupSlides,\n skipSnaps,\n containScroll,\n watchResize,\n watchSlides,\n watchDrag\n } = options\n\n // Measurements\n const nodeRects = NodeRects()\n const containerRect = nodeRects.measure(container)\n const slideRects = slides.map(nodeRects.measure)\n const direction = Direction(contentDirection)\n const axis = Axis(scrollAxis, contentDirection)\n const viewSize = axis.measureSize(containerRect)\n const percentOfView = PercentOfView(viewSize)\n const alignment = Alignment(align, viewSize)\n const containSnaps = !loop && !!containScroll\n const readEdgeGap = loop || !!containScroll\n const { slideSizes, slideSizesWithGaps, startGap, endGap } = SlideSizes(\n axis,\n containerRect,\n slideRects,\n slides,\n readEdgeGap,\n ownerWindow\n )\n const slidesToScroll = SlidesToScroll(\n axis,\n direction,\n viewSize,\n groupSlides,\n loop,\n containerRect,\n slideRects,\n startGap,\n endGap\n )\n const { snaps, snapsAligned } = ScrollSnaps(\n axis,\n alignment,\n containerRect,\n slideRects,\n slidesToScroll\n )\n const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps)\n const { snapsContained, scrollContainLimit } = ScrollContain(\n viewSize,\n contentSize,\n snapsAligned,\n containScroll\n )\n const scrollSnaps = containSnaps ? snapsContained : snapsAligned\n const { limit } = ScrollLimit(contentSize, scrollSnaps, loop)\n\n // Indexes\n const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop)\n const indexPrevious = index.clone()\n const slideIndexes = arrayKeys(slides)\n\n // Animation\n const update: AnimationUpdateType = ({\n dragHandler,\n scrollBody,\n scrollBounds,\n options: { loop }\n }) => {\n if (!loop) scrollBounds.constrain(dragHandler.pointerDown())\n scrollBody.seek()\n }\n\n const render: AnimationRenderType = (\n {\n scrollBody,\n translate,\n location,\n offsetLocation,\n scrollLooper,\n slideLooper,\n dragHandler,\n animation,\n eventHandler,\n options: { loop }\n },\n lagOffset\n ) => {\n const velocity = scrollBody.velocity()\n const hasSettled = scrollBody.settled()\n\n if (hasSettled && !dragHandler.pointerDown()) {\n animation.stop()\n eventHandler.emit('settle')\n }\n if (!hasSettled) eventHandler.emit('scroll')\n\n offsetLocation.set(location.get() - velocity + velocity * lagOffset)\n\n if (loop) {\n scrollLooper.loop(scrollBody.direction())\n slideLooper.loop()\n }\n\n translate.to(offsetLocation.get())\n }\n\n const animation: AnimationType = {\n start: () => animations.start(engine),\n stop: () => animations.stop(engine),\n update: () => update(engine),\n render: (lagOffset: number) => render(engine, lagOffset)\n }\n\n // Shared\n const friction = 0.68\n const startLocation = scrollSnaps[index.get()]\n const location = Vector1D(startLocation)\n const offsetLocation = Vector1D(startLocation)\n const target = Vector1D(startLocation)\n const scrollBody = ScrollBody(\n location,\n offsetLocation,\n target,\n duration,\n friction\n )\n const scrollTarget = ScrollTarget(\n loop,\n scrollSnaps,\n contentSize,\n limit,\n target\n )\n const scrollTo = ScrollTo(\n animation,\n index,\n indexPrevious,\n scrollTarget,\n target,\n eventHandler\n )\n const scrollProgress = ScrollProgress(limit)\n const eventStore = EventStore()\n const slidesInView = SlidesInView(\n container,\n slides,\n eventHandler,\n inViewThreshold\n )\n const { slideRegistry } = SlideRegistry(\n viewSize,\n contentSize,\n containSnaps,\n containScroll,\n scrollContainLimit,\n slidesToScroll,\n slideIndexes\n )\n const slideFocus = SlideFocus(\n root,\n slides,\n slideRegistry,\n scrollTo,\n scrollBody,\n eventStore\n )\n\n // Engine\n const engine: EngineType = {\n ownerDocument,\n ownerWindow,\n eventHandler,\n containerRect,\n slideRects,\n animation,\n axis,\n direction,\n dragHandler: DragHandler(\n axis,\n direction,\n root,\n ownerDocument,\n ownerWindow,\n target,\n DragTracker(axis, ownerWindow),\n location,\n animation,\n scrollTo,\n scrollBody,\n scrollTarget,\n index,\n eventHandler,\n percentOfView,\n dragFree,\n dragThreshold,\n skipSnaps,\n friction,\n watchDrag\n ),\n eventStore,\n percentOfView,\n index,\n indexPrevious,\n limit,\n location,\n offsetLocation,\n options,\n resizeHandler: ResizeHandler(\n container,\n eventHandler,\n ownerWindow,\n slides,\n axis,\n watchResize,\n nodeRects\n ),\n scrollBody,\n scrollBounds: ScrollBounds(\n limit,\n location,\n target,\n scrollBody,\n percentOfView\n ),\n scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [\n location,\n offsetLocation,\n target\n ]),\n scrollProgress,\n scrollSnapList: scrollSnaps.map(scrollProgress.get),\n scrollSnaps,\n scrollTarget,\n scrollTo,\n slideLooper: SlideLooper(\n axis,\n direction,\n viewSize,\n contentSize,\n slideSizes,\n slideSizesWithGaps,\n snaps,\n scrollSnaps,\n offsetLocation,\n slides\n ),\n slideFocus,\n slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n slidesInView,\n slideIndexes,\n slideRegistry,\n slidesToScroll,\n target,\n translate: Translate(axis, direction, container)\n }\n\n return engine\n}\n", "import { EngineType } from './Engine'\nimport { mathAbs, WindowType } from './utils'\n\nexport type AnimationUpdateType = (engine: EngineType) => void\nexport type AnimationRenderType = (\n engine: EngineType,\n lagFactor: number\n) => void\n\nexport type AnimationType = {\n start: () => void\n stop: () => void\n update: () => void\n render: (lagFactor: number) => void\n}\n\nexport type AnimationsType = {\n start: (engine: EngineType) => void\n stop: (engine: EngineType) => void\n reset: () => void\n window: WindowType\n}\n\nexport function Animations(ownerWindow: WindowType): AnimationsType {\n const timeStep = 1000 / 60\n let engines: EngineType[] = []\n let lastTimeStamp: number | null = null\n let lag = 0\n let animationFrame = 0\n\n function animate(timeStamp: DOMHighResTimeStamp): void {\n if (!lastTimeStamp) lastTimeStamp = timeStamp\n\n const elapsed = timeStamp - lastTimeStamp\n lastTimeStamp = timeStamp\n lag += elapsed\n\n while (lag >= timeStep) {\n engines.forEach(({ animation }) => animation.update())\n lag -= timeStep\n }\n\n const lagOffset = mathAbs(lag / timeStep)\n engines.forEach(({ animation }) => animation.render(lagOffset))\n\n if (animationFrame) ownerWindow.requestAnimationFrame(animate)\n }\n\n function start(engine: EngineType): void {\n if (!engines.includes(engine)) engines.push(engine)\n if (animationFrame) return\n\n animationFrame = ownerWindow.requestAnimationFrame(animate)\n }\n\n function stop(engine: EngineType): void {\n engines = engines.filter((e) => e !== engine)\n if (engines.length) return\n\n ownerWindow.cancelAnimationFrame(animationFrame)\n lastTimeStamp = null\n lag = 0\n animationFrame = 0\n }\n\n function reset(): void {\n lastTimeStamp = null\n lag = 0\n }\n\n const self: AnimationsType = {\n start,\n stop,\n reset,\n window: ownerWindow\n }\n return self\n}\n", "import { EmblaCarouselType } from './EmblaCarousel'\n\ntype CallbackType = (emblaApi: EmblaCarouselType, evt: EmblaEventType) => void\ntype ListenersType = Partial<{ [key in EmblaEventType]: CallbackType[] }>\n\nexport type EmblaEventType = EmblaEventListType[keyof EmblaEventListType]\n\nexport interface EmblaEventListType {\n init: 'init'\n pointerDown: 'pointerDown'\n pointerUp: 'pointerUp'\n slidesChanged: 'slidesChanged'\n slidesInView: 'slidesInView'\n scroll: 'scroll'\n select: 'select'\n settle: 'settle'\n destroy: 'destroy'\n reInit: 'reInit'\n resize: 'resize'\n}\n\nexport type EventHandlerType = {\n init: (emblaApi: EmblaCarouselType) => void\n emit: (evt: EmblaEventType) => EventHandlerType\n on: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n off: (evt: EmblaEventType, cb: CallbackType) => EventHandlerType\n}\n\nexport function EventHandler(): EventHandlerType {\n const listeners: ListenersType = {}\n let api: EmblaCarouselType\n\n function init(emblaApi: EmblaCarouselType): void {\n api = emblaApi\n }\n\n function getListeners(evt: EmblaEventType): CallbackType[] {\n return listeners[evt] || []\n }\n\n function emit(evt: EmblaEventType): EventHandlerType {\n getListeners(evt).forEach((e) => e(api, evt))\n return self\n }\n\n function on(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).concat([cb])\n return self\n }\n\n function off(evt: EmblaEventType, cb: CallbackType): EventHandlerType {\n listeners[evt] = getListeners(evt).filter((e) => e !== cb)\n return self\n }\n\n const self: EventHandlerType = {\n init,\n emit,\n off,\n on\n }\n return self\n}\n", "import { AlignmentOptionType } from './Alignment'\nimport { AxisOptionType } from './Axis'\nimport { SlidesToScrollOptionType } from './SlidesToScroll'\nimport { DirectionOptionType } from './Direction'\nimport { ScrollContainOptionType } from './ScrollContain'\nimport { DragHandlerOptionType } from './DragHandler'\nimport { ResizeHandlerOptionType } from './ResizeHandler'\nimport { SlidesHandlerOptionType } from './SlidesHandler'\nimport { SlidesInViewOptionsType } from './SlidesInView'\n\nexport type LooseOptionsType = {\n [key: string]: unknown\n}\n\nexport type CreateOptionsType = Type & {\n active: boolean\n breakpoints: {\n [key: string]: Omit>, 'breakpoints'>\n }\n}\n\nexport type OptionsType = CreateOptionsType<{\n align: AlignmentOptionType\n axis: AxisOptionType\n container: string | HTMLElement | null\n slides: string | HTMLElement[] | NodeListOf | null\n containScroll: ScrollContainOptionType\n direction: DirectionOptionType\n slidesToScroll: SlidesToScrollOptionType\n dragFree: boolean\n dragThreshold: number\n inViewThreshold: SlidesInViewOptionsType\n loop: boolean\n skipSnaps: boolean\n duration: number\n startIndex: number\n watchDrag: DragHandlerOptionType\n watchResize: ResizeHandlerOptionType\n watchSlides: SlidesHandlerOptionType\n}>\n\nexport const defaultOptions: OptionsType = {\n align: 'center',\n axis: 'x',\n container: null,\n slides: null,\n containScroll: 'trimSnaps',\n direction: 'ltr',\n slidesToScroll: 1,\n inViewThreshold: 0,\n breakpoints: {},\n dragFree: false,\n dragThreshold: 10,\n loop: false,\n skipSnaps: false,\n duration: 25,\n startIndex: 0,\n active: true,\n watchDrag: true,\n watchResize: true,\n watchSlides: true\n}\n\nexport type EmblaOptionsType = Partial\n", "import { LooseOptionsType, CreateOptionsType } from './Options'\nimport { objectKeys, objectsMergeDeep, WindowType } from './utils'\n\ntype OptionsType = Partial>\n\nexport type OptionsHandlerType = {\n mergeOptions: (\n optionsA: TypeA,\n optionsB?: TypeB\n ) => TypeA\n optionsAtMedia: (options: Type) => Type\n optionsMediaQueries: (optionsList: OptionsType[]) => MediaQueryList[]\n}\n\nexport function OptionsHandler(ownerWindow: WindowType): OptionsHandlerType {\n function mergeOptions(\n optionsA: TypeA,\n optionsB?: TypeB\n ): TypeA {\n return objectsMergeDeep(optionsA, optionsB || {})\n }\n\n function optionsAtMedia(options: Type): Type {\n const optionsAtMedia = options.breakpoints || {}\n const matchedMediaOptions = objectKeys(optionsAtMedia)\n .filter((media) => ownerWindow.matchMedia(media).matches)\n .map((media) => optionsAtMedia[media])\n .reduce((a, mediaOption) => mergeOptions(a, mediaOption), {})\n\n return mergeOptions(options, matchedMediaOptions)\n }\n\n function optionsMediaQueries(optionsList: OptionsType[]): MediaQueryList[] {\n return optionsList\n .map((options) => objectKeys(options.breakpoints || {}))\n .reduce((acc, mediaQueries) => acc.concat(mediaQueries), [])\n .map(ownerWindow.matchMedia)\n }\n\n const self: OptionsHandlerType = {\n mergeOptions,\n optionsAtMedia,\n optionsMediaQueries\n }\n return self\n}\n", "import { EmblaCarouselType } from './EmblaCarousel'\nimport { OptionsHandlerType } from './OptionsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\n\nexport type PluginsHandlerType = {\n init: (\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ) => EmblaPluginsType\n destroy: () => void\n}\n\nexport function PluginsHandler(\n optionsHandler: OptionsHandlerType\n): PluginsHandlerType {\n let activePlugins: EmblaPluginType[] = []\n\n function init(\n emblaApi: EmblaCarouselType,\n plugins: EmblaPluginType[]\n ): EmblaPluginsType {\n activePlugins = plugins.filter(\n ({ options }) => optionsHandler.optionsAtMedia(options).active !== false\n )\n activePlugins.forEach((plugin) => plugin.init(emblaApi, optionsHandler))\n\n return plugins.reduce(\n (map, plugin) => Object.assign(map, { [plugin.name]: plugin }),\n {}\n )\n }\n\n function destroy(): void {\n activePlugins = activePlugins.filter((plugin) => plugin.destroy())\n }\n\n const self: PluginsHandlerType = {\n init,\n destroy\n }\n return self\n}\n", "import { Engine, EngineType } from './Engine'\nimport { Animations, AnimationsType } from './Animations'\nimport { EventStore } from './EventStore'\nimport { EventHandler, EventHandlerType } from './EventHandler'\nimport { defaultOptions, EmblaOptionsType, OptionsType } from './Options'\nimport { OptionsHandler } from './OptionsHandler'\nimport { PluginsHandler } from './PluginsHandler'\nimport { EmblaPluginsType, EmblaPluginType } from './Plugins'\nimport { isString, WindowType } from './utils'\n\nexport type EmblaCarouselType = {\n canScrollNext: () => boolean\n canScrollPrev: () => boolean\n containerNode: () => HTMLElement\n internalEngine: () => EngineType\n destroy: () => void\n off: EventHandlerType['off']\n on: EventHandlerType['on']\n emit: EventHandlerType['emit']\n plugins: () => EmblaPluginsType\n previousScrollSnap: () => number\n reInit: (options?: EmblaOptionsType, plugins?: EmblaPluginType[]) => void\n rootNode: () => HTMLElement\n scrollNext: (jump?: boolean) => void\n scrollPrev: (jump?: boolean) => void\n scrollProgress: () => number\n scrollSnapList: () => number[]\n scrollTo: (index: number, jump?: boolean) => void\n selectedScrollSnap: () => number\n slideNodes: () => HTMLElement[]\n slidesInView: () => number[]\n slidesNotInView: () => number[]\n}\n\nfunction EmblaCarousel(\n root: HTMLElement,\n userOptions?: EmblaOptionsType,\n userPlugins?: EmblaPluginType[]\n): EmblaCarouselType {\n const ownerDocument = root.ownerDocument\n const ownerWindow = ownerDocument.defaultView\n const optionsHandler = OptionsHandler(ownerWindow)\n const pluginsHandler = PluginsHandler(optionsHandler)\n const mediaHandlers = EventStore()\n const documentVisibleHandler = EventStore()\n const eventHandler = EventHandler()\n const { animationRealms } = EmblaCarousel\n const { mergeOptions, optionsAtMedia, optionsMediaQueries } = optionsHandler\n const { on, off, emit } = eventHandler\n const reInit = reActivate\n\n let destroyed = false\n let engine: EngineType\n let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions)\n let options = mergeOptions(optionsBase)\n let pluginList: EmblaPluginType[] = []\n let pluginApis: EmblaPluginsType\n\n let container: HTMLElement\n let slides: HTMLElement[]\n\n function storeElements(): void {\n const { container: userContainer, slides: userSlides } = options\n\n const customContainer = isString(userContainer)\n ? root.querySelector(userContainer)\n : userContainer\n container = (customContainer || root.children[0])\n\n const customSlides = isString(userSlides)\n ? container.querySelectorAll(userSlides)\n : userSlides\n slides = [].slice.call(customSlides || container.children)\n }\n\n function createEngine(\n options: OptionsType,\n animations: AnimationsType\n ): EngineType {\n const engine = Engine(\n root,\n container,\n slides,\n ownerDocument,\n ownerWindow,\n options,\n eventHandler,\n animations\n )\n\n if (options.loop && !engine.slideLooper.canLoop()) {\n const optionsWithoutLoop = Object.assign({}, options, { loop: false })\n return createEngine(optionsWithoutLoop, animations)\n }\n return engine\n }\n\n function activate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n if (destroyed) return\n\n const animationRealm = animationRealms.find((a) => a.window === ownerWindow)\n const animations = animationRealm || Animations(ownerWindow)\n if (!animationRealm) animationRealms.push(animations)\n\n optionsBase = mergeOptions(optionsBase, withOptions)\n options = optionsAtMedia(optionsBase)\n pluginList = withPlugins || pluginList\n\n storeElements()\n\n engine = createEngine(options, animations)\n\n optionsMediaQueries([\n optionsBase,\n ...pluginList.map(({ options }) => options)\n ]).forEach((query) => mediaHandlers.add(query, 'change', reActivate))\n\n if (!options.active) return\n\n engine.translate.to(engine.location.get())\n engine.slidesInView.init()\n engine.slideFocus.init()\n engine.eventHandler.init(self)\n engine.resizeHandler.init(self)\n engine.slidesHandler.init(self)\n\n documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n if (ownerDocument.hidden) animations.reset()\n })\n\n if (engine.options.loop) engine.slideLooper.loop()\n if (container.offsetParent && slides.length) engine.dragHandler.init(self)\n\n pluginApis = pluginsHandler.init(self, pluginList)\n }\n\n function reActivate(\n withOptions?: EmblaOptionsType,\n withPlugins?: EmblaPluginType[]\n ): void {\n const startIndex = selectedScrollSnap()\n deActivate()\n activate(mergeOptions({ startIndex }, withOptions), withPlugins)\n eventHandler.emit('reInit')\n }\n\n function deActivate(): void {\n engine.dragHandler.destroy()\n engine.animation.stop()\n engine.eventStore.clear()\n engine.translate.clear()\n engine.slideLooper.clear()\n engine.resizeHandler.destroy()\n engine.slidesHandler.destroy()\n engine.slidesInView.destroy()\n pluginsHandler.destroy()\n mediaHandlers.clear()\n documentVisibleHandler.clear()\n }\n\n function destroy(): void {\n if (destroyed) return\n destroyed = true\n mediaHandlers.clear()\n deActivate()\n eventHandler.emit('destroy')\n }\n\n function scrollTo(index: number, jump?: boolean, direction?: number): void {\n if (!options.active || destroyed) return\n engine.scrollBody.useBaseFriction().useDuration(jump ? 0 : options.duration)\n engine.scrollTo.index(index, direction || 0)\n }\n\n function scrollNext(jump?: boolean): void {\n const next = engine.index.add(1).get()\n scrollTo(next, jump === true, -1)\n }\n\n function scrollPrev(jump?: boolean): void {\n const prev = engine.index.add(-1).get()\n scrollTo(prev, jump === true, 1)\n }\n\n function canScrollNext(): boolean {\n const next = engine.index.add(1).get()\n return next !== selectedScrollSnap()\n }\n\n function canScrollPrev(): boolean {\n const prev = engine.index.add(-1).get()\n return prev !== selectedScrollSnap()\n }\n\n function scrollSnapList(): number[] {\n return engine.scrollSnapList\n }\n\n function scrollProgress(): number {\n return engine.scrollProgress.get(engine.location.get())\n }\n\n function selectedScrollSnap(): number {\n return engine.index.get()\n }\n\n function previousScrollSnap(): number {\n return engine.indexPrevious.get()\n }\n\n function slidesInView(): number[] {\n return engine.slidesInView.get()\n }\n\n function slidesNotInView(): number[] {\n return engine.slidesInView.get(false)\n }\n\n function plugins(): EmblaPluginsType {\n return pluginApis\n }\n\n function internalEngine(): EngineType {\n return engine\n }\n\n function rootNode(): HTMLElement {\n return root\n }\n\n function containerNode(): HTMLElement {\n return container\n }\n\n function slideNodes(): HTMLElement[] {\n return slides\n }\n\n const self: EmblaCarouselType = {\n canScrollNext,\n canScrollPrev,\n containerNode,\n internalEngine,\n destroy,\n off,\n on,\n emit,\n plugins,\n previousScrollSnap,\n reInit,\n rootNode,\n scrollNext,\n scrollPrev,\n scrollProgress,\n scrollSnapList,\n scrollTo,\n selectedScrollSnap,\n slideNodes,\n slidesInView,\n slidesNotInView\n }\n\n activate(userOptions, userPlugins)\n setTimeout(() => eventHandler.emit('init'), 0)\n return self\n}\n\nEmblaCarousel.animationRealms = []\nEmblaCarousel.globalOptions = undefined\n\nexport default EmblaCarousel\n", "import { useRef, useEffect, useState, useCallback } from 'react'\nimport {\n areOptionsEqual,\n arePluginsEqual,\n canUseDOM\n} from 'embla-carousel-reactive-utils'\nimport EmblaCarousel, {\n EmblaCarouselType,\n EmblaOptionsType,\n EmblaPluginType\n} from 'embla-carousel'\n\ntype EmblaViewportRefType = (\n instance: ViewportElement | null\n) => void\n\nexport type UseEmblaCarouselType = [\n EmblaViewportRefType,\n EmblaCarouselType | undefined\n]\n\nfunction useEmblaCarousel(\n options: EmblaOptionsType = {},\n plugins: EmblaPluginType[] = []\n): UseEmblaCarouselType {\n const storedOptions = useRef(options)\n const storedPlugins = useRef(plugins)\n const [emblaApi, setEmblaApi] = useState()\n const [viewport, setViewport] = useState()\n\n const reInit = useCallback(() => {\n if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current)\n }, [emblaApi])\n\n useEffect(() => {\n if (canUseDOM() && viewport) {\n EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions\n const newEmblaApi = EmblaCarousel(\n viewport,\n storedOptions.current,\n storedPlugins.current\n )\n setEmblaApi(newEmblaApi)\n return () => newEmblaApi.destroy()\n } else {\n setEmblaApi(undefined)\n }\n }, [viewport, setEmblaApi])\n\n useEffect(() => {\n if (areOptionsEqual(storedOptions.current, options)) return\n storedOptions.current = options\n reInit()\n }, [options, reInit])\n\n useEffect(() => {\n if (arePluginsEqual(storedPlugins.current, plugins)) return\n storedPlugins.current = plugins\n reInit()\n }, [plugins, reInit])\n\n return [setViewport, emblaApi]\n}\n\nuseEmblaCarousel.globalOptions = undefined\n\nexport default useEmblaCarousel\n"], "mappings": "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", "names": ["isObject", "subject", "Object", "prototype", "toString", "call", "isRecord", "Array", "isArray", "canUseDOM", "window", "document", "createElement", "areOptionsEqual", "optionsA", "optionsB", "optionsAKeys", "keys", "optionsBKeys", "length", "breakpointsA", "JSON", "stringify", "breakpoints", "breakpointsB", "every", "key", "valueA", "valueB", "sortAndMapPluginToOptions", "plugins", "concat", "sort", "a", "b", "name", "map", "plugin", "options", "arePluginsEqual", "pluginsA", "pluginsB", "optionA", "index", "optionB", "isNumber", "subject", "isString", "isBoolean", "isObject", "Object", "prototype", "toString", "call", "mathAbs", "n", "Math", "abs", "mathSign", "sign", "deltaAbs", "valueB", "valueA", "factorAbs", "diff", "arrayKeys", "array", "objectKeys", "map", "Number", "arrayLast", "arrayLastIndex", "max", "length", "arrayIsLastIndex", "index", "arrayFromNumber", "startAt", "Array", "from", "_", "i", "object", "keys", "objectsMergeDeep", "objectA", "objectB", "reduce", "mergedObjects", "currentObject", "forEach", "key", "areObjects", "isMouseEvent", "evt", "ownerWindow", "MouseEvent", "Alignment", "align", "viewSize", "predefined", "start", "center", "end", "measure", "Axis", "axis", "direction", "scroll", "cross", "startEdge", "getStartEdge", "endEdge", "getEndEdge", "measureSize", "nodeRect", "width", "height", "Limit", "min", "reachedMin", "reachedMax", "reachedAny", "constrain", "removeOffset", "ceil", "Counter", "loop", "loopEnd", "counter", "withinLimit", "get", "set", "self", "add", "clone", "Direction", "apply", "EventStore", "listeners", "node", "type", "handler", "options", "passive", "removeListener", "addEventListener", "removeEventListener", "legacyMediaQueryList", "addListener", "push", "clear", "filter", "remove", "DragHandler", "rootNode", "ownerDocument", "target", "dragTracker", "location", "animation", "scrollTo", "scrollBody", "scrollTarget", "eventHandler", "percentOfView", "dragFree", "dragThreshold", "skipSnaps", "baseFriction", "watchDrag", "crossAxis", "focusNodes", "nonPassiveEvent", "initEvents", "dragEvents", "goToNextThreshold", "snapForceBoost", "mouse", "touch", "freeForceBoost", "baseSpeed", "isMoving", "startScroll", "startCross", "pointerIsDown", "preventScroll", "preventClick", "isMouse", "init", "emblaApi", "downIfAllowed", "down", "preventDefault", "up", "click", "destroy", "addDragEvents", "move", "isFocusNode", "nodeName", "includes", "forceBoost", "allowedForce", "force", "targetChanged", "next", "baseForce", "byDistance", "distance", "byIndex", "isMouseEvt", "button", "buttons", "pointerDown", "useFriction", "useDuration", "readPoint", "emit", "lastScroll", "lastCross", "diffScroll", "diffCross", "cancelable", "pointerMove", "rawForce", "pointerUp", "forceFactor", "speed", "friction", "stopPropagation", "DragTracker", "startEvent", "lastEvent", "readTime", "timeStamp", "evtAxis", "coord", "touches", "expired", "logInterval", "diffDrag", "diffTime", "NodeRects", "offsetTop", "offsetLeft", "offsetWidth", "offsetHeight", "top", "right", "bottom", "left", "PercentOfView", "ResizeHandler", "container", "slides", "watchResize", "nodeRects", "resizeObserver", "containerSize", "slideSizes", "destroyed", "readSize", "defaultCallback", "entries", "entry", "isContainer", "slideIndex", "indexOf", "lastSize", "newSize", "requestAnimationFrame", "reInit", "ResizeObserver", "concat", "observe", "disconnect", "ScrollBody", "offsetLocation", "baseDuration", "bodyVelocity", "scrollDirection", "scrollDuration", "scrollFriction", "rawLocation", "rawLocationPrevious", "seek", "isInstant", "directionDiff", "settled", "duration", "velocity", "useBaseDuration", "useBaseFriction", "ScrollBounds", "limit", "pullBackThreshold", "edgeOffsetTolerance", "frictionLimit", "disabled", "shouldConstrain", "edge", "diffToEdge", "diffToTarget", "subtract", "toggleActive", "active", "ScrollContain", "contentSize", "snapsAligned", "containScroll", "scrollBounds", "snapsBounded", "measureBounded", "scrollContainLimit", "findScrollContainLimit", "snapsContained", "measureContained", "startSnap", "endSnap", "lastIndexOf", "snapAligned", "isFirst", "isLast", "scrollBound", "parseFloat", "toFixed", "slice", "ScrollLimit", "scrollSnaps", "ScrollLooper", "vectors", "jointSafety", "shouldLoop", "loopDistance", "v", "ScrollProgress", "currentLocation", "ScrollSnaps", "alignment", "containerRect", "slideRects", "slidesToScroll", "groupSlides", "alignments", "measureSizes", "snaps", "measureUnaligned", "measureAligned", "rects", "rect", "snap", "g", "SlideRegistry", "containSnaps", "slideIndexes", "slideRegistry", "createSlideRegistry", "groupedSlideIndexes", "group", "groups", "range", "ScrollTarget", "targetVector", "minDistance", "distances", "sort", "a", "b", "findTargetSnap", "ascDiffsToSnaps", "scrollSnap", "diffToSnap", "shortcut", "d1", "d2", "targets", "matchingTargets", "t", "targetSnapDistance", "reachedBound", "snapDistance", "ScrollTo", "indexCurrent", "indexPrevious", "distanceDiff", "indexDiff", "targetIndex", "SlideFocus", "root", "eventStore", "lastTabPressTime", "document", "registerTabPress", "addSlideFocusEvent", "event", "code", "Date", "getTime", "slide", "focus", "scrollLeft", "findIndex", "capture", "Vector1D", "initialValue", "value", "normalizeInput", "Translate", "translate", "x", "y", "containerStyle", "style", "to", "transform", "getAttribute", "removeAttribute", "SlideLooper", "slideSizesWithGaps", "ascItems", "descItems", "reverse", "loopPoints", "startPoints", "endPoints", "removeSlideSizes", "indexes", "slidesInGap", "gap", "findSlideBounds", "offset", "roundingSafety", "findLoopPoints", "isEndEdge", "slideBounds", "initial", "altered", "boundEdge", "loopPoint", "slideLocation", "canLoop", "every", "otherIndexes", "shiftLocation", "SlidesHandler", "watchSlides", "mutationObserver", "mutations", "mutation", "MutationObserver", "childList", "SlidesInView", "threshold", "intersectionEntryMap", "inViewCache", "notInViewCache", "intersectionObserver", "IntersectionObserver", "parentElement", "createInViewList", "inView", "list", "parseInt", "isIntersecting", "SlideSizes", "readEdgeGap", "withEdgeGap", "startGap", "measureStartGap", "endGap", "measureEndGap", "measureWithGaps", "slideRect", "getComputedStyle", "getPropertyValue", "SlidesToScroll", "groupByNumber", "byNumber", "groupSize", "bySize", "rectB", "rectA", "edgeA", "edgeB", "gapA", "gapB", "currentSize", "previousSize", "Engine", "animations", "scrollAxis", "contentDirection", "startIndex", "inViewThreshold", "update", "dragHandler", "render", "scrollLooper", "slideLooper", "lagOffset", "hasSettled", "stop", "engine", "startLocation", "scrollProgress", "slidesInView", "slideFocus", "resizeHandler", "scrollSnapList", "slidesHandler", "Animations", "timeStep", "engines", "lastTimeStamp", "lag", "animationFrame", "animate", "elapsed", "e", "cancelAnimationFrame", "reset", "window", "EventHandler", "api", "getListeners", "on", "cb", "off", "defaultOptions", "breakpoints", "OptionsHandler", "mergeOptions", "optionsA", "optionsB", "optionsAtMedia", "matchedMediaOptions", "media", "matchMedia", "matches", "mediaOption", "optionsMediaQueries", "optionsList", "acc", "mediaQueries", "PluginsHandler", "optionsHandler", "activePlugins", "plugins", "plugin", "assign", "name", "EmblaCarousel", "userOptions", "userPlugins", "defaultView", "pluginsHandler", "mediaHandlers", "documentVisibleHandler", "animationRealms", "reActivate", "optionsBase", "globalOptions", "pluginList", "pluginApis", "storeElements", "userContainer", "userSlides", "querySelector", "children", "customSlides", "querySelectorAll", "createEngine", "optionsWithoutLoop", "activate", "withOptions", "withPlugins", "animationRealm", "find", "query", "hidden", "offsetParent", "selectedScrollSnap", "deActivate", "jump", "scrollNext", "scrollPrev", "prev", "canScrollNext", "canScrollPrev", "previousScrollSnap", "slidesNotInView", "internalEngine", "containerNode", "slideNodes", "setTimeout", "undefined", "useEmblaCarousel", "options", "plugins", "storedOptions", "useRef", "storedPlugins", "emblaApi", "setEmblaApi", "useState", "viewport", "setViewport", "reInit", "useCallback", "current", "useEffect", "canUseDOM", "EmblaCarousel", "globalOptions", "newEmblaApi", "destroy", "undefined", "areOptionsEqual", "arePluginsEqual"] }