@evermade/overflow-slider 4.2.2 → 4.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/.github/workflows/npm-publish.yml +40 -22
  2. package/.github/workflows/publish.yml +35 -0
  3. package/CHANGELOG.md +116 -0
  4. package/README.md +55 -111
  5. package/RELEASE.md +44 -0
  6. package/dist/index.esm.js +106 -13
  7. package/dist/index.esm.js.map +1 -1
  8. package/dist/index.min.js +1 -1
  9. package/dist/index.min.js.map +1 -1
  10. package/dist/plugins/core/index.d2.ts +3 -2
  11. package/dist/plugins/thumbnails/index.d.ts +2 -2
  12. package/dist/plugins/thumbnails/index.esm.js +4 -4
  13. package/dist/plugins/thumbnails/index.min.js +1 -1
  14. package/docs/assets/demo.css +5 -0
  15. package/docs/assets/demo.js +11 -0
  16. package/docs/dist/index.d.ts +1 -1
  17. package/docs/dist/index.esm.js +106 -13
  18. package/docs/dist/index.esm.js.map +1 -1
  19. package/docs/dist/index.min.js +1 -1
  20. package/docs/dist/index.min.js.map +1 -1
  21. package/docs/dist/plugins/arrows/index.d.ts +1 -1
  22. package/docs/dist/plugins/autoplay/index.d.ts +1 -1
  23. package/docs/dist/plugins/classnames/index.d.ts +1 -1
  24. package/docs/dist/plugins/core/index.d.ts +10 -63
  25. package/docs/dist/plugins/core/index.d2.ts +64 -10
  26. package/docs/dist/plugins/dots/index.d.ts +1 -1
  27. package/docs/dist/plugins/drag-scrolling/index.d.ts +1 -1
  28. package/docs/dist/plugins/fade/index.d.ts +1 -1
  29. package/docs/dist/plugins/full-width/index.d.ts +1 -1
  30. package/docs/dist/plugins/scroll-indicator/index.d.ts +1 -1
  31. package/docs/dist/plugins/skip-links/index.d.ts +1 -1
  32. package/docs/dist/plugins/thumbnails/index.d.ts +3 -3
  33. package/docs/dist/plugins/thumbnails/index.esm.js +4 -4
  34. package/docs/dist/plugins/thumbnails/index.min.js +1 -1
  35. package/docs/index.html +29 -0
  36. package/package.json +1 -1
  37. package/src/core/slider.ts +111 -12
  38. package/src/core/types.ts +4 -1
  39. package/src/plugins/thumbnails/index.ts +4 -4
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/core/details.ts","../src/core/utils.ts","../src/core/slider.ts","../src/core/overflow-slider.ts"],"sourcesContent":["export default function details(slider) {\n var _a;\n let instance;\n let hasOverflow = false;\n let slideCount = 0;\n let containerWidth = 0;\n let containerHeight = 0;\n let scrollableAreaWidth = 0;\n let amountOfPages = 0;\n let currentPage = 0;\n if (Math.floor(slider.getInclusiveScrollWidth()) > Math.floor(slider.getInclusiveClientWidth())) {\n hasOverflow = true;\n }\n slideCount = (_a = slider.slides.length) !== null && _a !== void 0 ? _a : 0;\n containerWidth = slider.container.offsetWidth;\n containerHeight = slider.container.offsetHeight;\n scrollableAreaWidth = slider.getInclusiveScrollWidth();\n amountOfPages = Math.ceil(scrollableAreaWidth / containerWidth);\n if (Math.floor(slider.getScrollLeft()) >= 0) {\n currentPage = Math.floor(slider.getScrollLeft() / containerWidth);\n // Consider as last page if we're within tolerance of the maximum scroll position\n // When FullWidthPlugin is active, account for the margin offset\n const maxScroll = scrollableAreaWidth - containerWidth - (2 * slider.getLeftOffset());\n if (slider.getScrollLeft() >= maxScroll - 1) {\n currentPage = amountOfPages - 1;\n }\n }\n instance = {\n hasOverflow,\n slideCount,\n containerWidth,\n containerHeight,\n scrollableAreaWidth,\n amountOfPages,\n currentPage,\n };\n return instance;\n}\n;\n","function generateId(prefix, i = 1) {\n const id = `${prefix}-${i}`;\n if (document.getElementById(id)) {\n return generateId(prefix, i + 1);\n }\n return id;\n}\nfunction objectsAreEqual(obj1, obj2) {\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n for (let key of keys1) {\n // Use `Object.prototype.hasOwnProperty.call` for better safety\n if (!Object.prototype.hasOwnProperty.call(obj2, key) || obj1[key] !== obj2[key]) {\n return false;\n }\n }\n return true;\n}\nfunction getOutermostChildrenEdgeMarginSum(el) {\n if (el.children.length === 0) {\n return 0;\n }\n // get the first child and its left margin\n const firstChild = el.children[0];\n const firstChildStyle = getComputedStyle(firstChild);\n const firstChildMarginLeft = parseFloat(firstChildStyle.marginLeft);\n // Get the last child and its right margin\n const lastChild = el.children[el.children.length - 1];\n const lastChildStyle = getComputedStyle(lastChild);\n const lastChildMarginRight = parseFloat(lastChildStyle.marginRight);\n return firstChildMarginLeft + lastChildMarginRight;\n}\nexport { generateId, objectsAreEqual, getOutermostChildrenEdgeMarginSum };\n","import details from './details';\nimport { generateId, objectsAreEqual, getOutermostChildrenEdgeMarginSum } from './utils';\nexport default function Slider(container, options, plugins) {\n let slider;\n let subs = {};\n const overrideTransitions = () => {\n slider.slides.forEach((slide) => {\n slide.style.transition = 'none';\n });\n };\n const restoreTransitions = () => {\n slider.slides.forEach((slide) => {\n slide.style.removeProperty('transition');\n });\n };\n function init() {\n slider.container = container;\n // ensure container has id\n let containerId = container.getAttribute('id');\n if (containerId === null) {\n containerId = generateId('overflow-slider');\n container.setAttribute('id', containerId);\n }\n setSlides();\n // CSS transitions can cause delays for calculations\n overrideTransitions();\n setDetails(true);\n setActiveSlideIdx();\n slider.on('contentsChanged', () => {\n setSlides();\n setDetails();\n setActiveSlideIdx();\n });\n slider.on('containerSizeChanged', () => setDetails());\n let requestId = 0;\n const setDetailsDebounce = () => {\n if (requestId) {\n window.cancelAnimationFrame(requestId);\n }\n requestId = window.requestAnimationFrame(() => {\n setDetails();\n setActiveSlideIdx();\n });\n };\n slider.on('scroll', setDetailsDebounce);\n addEventListeners();\n setDataAttributes();\n setCSSVariables();\n if (plugins) {\n for (const plugin of plugins) {\n plugin(slider);\n }\n // plugins may mutate layout: refresh details and derived data after they run\n // setTimeout( () => {\n setDetails();\n setActiveSlideIdx();\n setCSSVariables();\n slider.emit('pluginsLoaded');\n // }, 250 );\n }\n slider.on('detailsChanged', () => {\n setDataAttributes();\n setCSSVariables();\n });\n slider.emit('created');\n restoreTransitions();\n slider.container.setAttribute('data-ready', 'true');\n }\n ;\n function setDetails(isInit = false) {\n const oldDetails = slider.details;\n const newDetails = details(slider);\n slider.details = newDetails;\n if (!isInit && !objectsAreEqual(oldDetails, newDetails)) {\n slider.emit('detailsChanged');\n }\n else if (isInit) {\n slider.emit('detailsChanged');\n }\n }\n ;\n function setSlides() {\n slider.slides = Array.from(slider.container.querySelectorAll(slider.options.slidesSelector));\n }\n function addEventListeners() {\n // changes to DOM\n const observer = new MutationObserver(() => slider.emit('contentsChanged'));\n observer.observe(slider.container, { childList: true });\n // container size changes\n const resizeObserver = new ResizeObserver(() => slider.emit('containerSizeChanged'));\n resizeObserver.observe(slider.container);\n // scroll event with debouncing\n let scrollTimeout;\n let nativeScrollTimeout;\n let programmaticScrollTimeout;\n let scrollLeft = slider.container.scrollLeft;\n let nativeScrollLeft = slider.container.scrollLeft;\n let programmaticScrollLeft = slider.container.scrollLeft;\n let isScrolling = false;\n let isUserScrolling = false;\n let isProgrammaticScrolling = false;\n // all types of scroll\n slider.container.addEventListener('scroll', () => {\n const newScrollLeft = slider.container.scrollLeft;\n if (Math.floor(scrollLeft) !== Math.floor(newScrollLeft)) {\n if (!isScrolling) {\n isScrolling = true;\n slider.emit('scrollStart');\n }\n scrollLeft = newScrollLeft;\n clearTimeout(scrollTimeout);\n scrollTimeout = setTimeout(() => {\n isScrolling = false;\n slider.emit('scrollEnd');\n }, 50);\n slider.emit('scroll');\n }\n // keep up nativeScrolling to take into account scroll-snap\n if (isUserScrolling) {\n nativeScrollHandler();\n }\n });\n // user initted scroll (touchmove, mouse wheel, etc.)\n const nativeScrollHandler = () => {\n const newScrollLeft = slider.container.scrollLeft;\n if (Math.floor(nativeScrollLeft) !== Math.floor(newScrollLeft) && !isProgrammaticScrolling) {\n if (!isUserScrolling) {\n slider.emit('nativeScrollStart');\n isUserScrolling = true;\n }\n slider.emit('nativeScroll');\n nativeScrollLeft = newScrollLeft;\n clearTimeout(nativeScrollTimeout);\n nativeScrollTimeout = setTimeout(() => {\n isUserScrolling = false;\n slider.emit('nativeScrollEnd');\n // update programmaticScrollLeft to match nativeScrollLeft\n // this prevents programmaticScroll triggering with no real change to scrollLeft\n programmaticScrollLeft = nativeScrollLeft;\n }, 50);\n }\n };\n slider.container.addEventListener('touchmove', nativeScrollHandler);\n slider.container.addEventListener('mousewheel', nativeScrollHandler);\n slider.container.addEventListener('wheel', nativeScrollHandler);\n // programmatic scroll (scrollTo, etc.)\n slider.on('programmaticScrollStart', () => {\n isProgrammaticScrolling = true;\n });\n slider.container.addEventListener('scroll', () => {\n const newScrollLeft = slider.container.scrollLeft;\n if (Math.floor(programmaticScrollLeft) !== Math.floor(newScrollLeft) && !isUserScrolling && isProgrammaticScrolling) {\n programmaticScrollLeft = newScrollLeft;\n clearTimeout(programmaticScrollTimeout);\n programmaticScrollTimeout = setTimeout(() => {\n isProgrammaticScrolling = false;\n slider.emit('programmaticScrollEnd');\n // update nativeScrollLeft to match programmaticScrollLeft\n // this prevents nativeScroll triggering with no real change to scrollLeft\n nativeScrollLeft = programmaticScrollLeft;\n }, 50);\n slider.emit('programmaticScroll');\n }\n });\n // Fix issues on scroll snapping not working on programmatic scroll (it's not smooth)\n // by disabling scroll snap if scrolling is programmatic\n slider.on('programmaticScrollStart', () => {\n slider.container.style.scrollSnapType = 'none';\n });\n // restore scroll snap if user scroll starts\n slider.on('nativeScrollStart', () => {\n slider.container.style.scrollSnapType = '';\n });\n // Listen for mouse down and touch start events on the document\n // This handles both mouse clicks and touch interactions\n let wasInteractedWith = false;\n slider.container.addEventListener('mousedown', () => {\n wasInteractedWith = true;\n });\n slider.container.addEventListener('touchstart', () => {\n wasInteractedWith = true;\n }, { passive: true });\n slider.container.addEventListener('focusin', (e) => {\n // move target parents as long as they are not the container\n // but only if focus didn't start from mouse or touch\n if (!wasInteractedWith) {\n let target = e.target;\n while (target.parentElement !== slider.container) {\n if (target.parentElement) {\n target = target.parentElement;\n }\n else {\n break;\n }\n }\n ensureSlideIsInView(target, 'auto');\n }\n wasInteractedWith = false;\n });\n }\n ;\n function setCSSVariables() {\n slider.options.cssVariableContainer.style.setProperty('--slider-container-height', `${slider.details.containerHeight}px`);\n slider.options.cssVariableContainer.style.setProperty('--slider-container-width', `${slider.details.containerWidth}px`);\n slider.options.cssVariableContainer.style.setProperty('--slider-scrollable-width', `${slider.details.scrollableAreaWidth}px`);\n slider.options.cssVariableContainer.style.setProperty('--slider-slides-count', `${slider.details.slideCount}`);\n slider.options.cssVariableContainer.style.setProperty('--slider-x-offset', `${getLeftOffset()}px`);\n if (typeof slider.options.targetWidth === 'function') {\n slider.options.cssVariableContainer.style.setProperty('--slider-container-target-width', `${slider.options.targetWidth(slider)}px`);\n }\n }\n function setDataAttributes() {\n slider.container.setAttribute('data-has-overflow', slider.details.hasOverflow ? 'true' : 'false');\n if (slider.options.rtl) {\n slider.container.setAttribute('dir', 'rtl');\n }\n }\n function ensureSlideIsInView(slide, scrollBehavior = null) {\n const behavior = scrollBehavior || slider.options.scrollBehavior;\n const slideRect = slide.getBoundingClientRect();\n const sliderRect = slider.container.getBoundingClientRect();\n const containerWidth = slider.container.offsetWidth;\n const scrollLeft = slider.container.scrollLeft;\n const slideStart = slideRect.left - sliderRect.left + scrollLeft;\n const slideEnd = slideStart + slideRect.width;\n let scrollTarget = null;\n if (Math.floor(slideStart) < Math.floor(scrollLeft)) {\n scrollTarget = slideStart;\n }\n else if (Math.floor(slideEnd) > Math.floor(scrollLeft) + Math.floor(containerWidth)) {\n scrollTarget = slideEnd - containerWidth;\n }\n else if (Math.floor(slideStart) === 0) {\n scrollTarget = 0;\n }\n else {\n scrollTarget = slideStart;\n }\n if (scrollTarget !== null) {\n setTimeout((scrollTarget) => {\n slider.emit('programmaticScrollStart');\n slider.container.scrollTo({ left: scrollTarget, behavior: behavior });\n }, 50, scrollTarget);\n }\n }\n ;\n function setActiveSlideIdx() {\n const sliderRect = slider.container.getBoundingClientRect();\n const scrollLeft = slider.getScrollLeft();\n const slides = slider.slides;\n let activeSlideIdx = 0;\n let scrolledPastLastSlide = false;\n if (slider.options.rtl) {\n const scrolledDistance = slider.getInclusiveScrollWidth() - scrollLeft - slider.getInclusiveClientWidth();\n const slidePositions = [];\n for (let i = slides.length - 1; i >= 0; i--) {\n const slideRect = slides[i].getBoundingClientRect();\n const slideEnd = Math.abs(slideRect.left) - Math.abs(sliderRect.left) + scrolledDistance;\n slidePositions.push({\n slide: slides[i],\n slideEnd: slideEnd,\n });\n }\n let closestSlide = null;\n let closestDistance = null;\n for (let i = 0; i < slidePositions.length; i++) {\n const distance = Math.abs(slidePositions[i].slideEnd - scrolledDistance);\n if (closestDistance === null || distance < closestDistance) {\n closestDistance = distance;\n closestSlide = slidePositions[i].slide;\n }\n }\n if (closestSlide) {\n activeSlideIdx = slides.indexOf(closestSlide);\n }\n else {\n activeSlideIdx = slides.length - 1;\n }\n }\n else {\n for (let i = 0; i < slides.length; i++) {\n const slideRect = slides[i].getBoundingClientRect();\n const slideStart = slideRect.left - sliderRect.left + scrollLeft + getGapSize();\n if (Math.floor(slideStart) >= Math.floor(scrollLeft)) {\n activeSlideIdx = i;\n break;\n }\n if (i === slides.length - 1) {\n scrolledPastLastSlide = true;\n }\n }\n }\n if (scrolledPastLastSlide) {\n activeSlideIdx = slides.length - 1;\n }\n const oldActiveSlideIdx = slider.activeSlideIdx;\n slider.activeSlideIdx = activeSlideIdx;\n if (oldActiveSlideIdx !== activeSlideIdx) {\n slider.emit('activeSlideChanged');\n }\n }\n function moveToSlide(idx) {\n const slide = slider.slides[idx];\n if (slide) {\n ensureSlideIsInView(slide);\n }\n }\n ;\n function canMoveToSlide(idx) {\n if (idx < 0 || idx >= slider.slides.length) {\n return false;\n }\n if (idx === slider.activeSlideIdx) {\n return false;\n }\n const direction = slider.options.rtl ? (idx < slider.activeSlideIdx ? 'backwards' : 'forwards') : (idx < slider.activeSlideIdx ? 'backwards' : 'forwards');\n // check if the slide is already in view\n const sliderRect = slider.container.getBoundingClientRect();\n const scrollLeft = slider.getScrollLeft();\n const containerWidth = slider.details.containerWidth;\n const hasUpcomingContent = slider.slides.some((s, i) => {\n if (i === slider.activeSlideIdx) {\n return false; // skip the slide we are checking\n }\n const sRect = s.getBoundingClientRect();\n const sStart = sRect.left - sliderRect.left + scrollLeft;\n const sEnd = sStart + sRect.width;\n if (slider.options.rtl) {\n if (scrollLeft === 0 && slider.details.hasOverflow) {\n return true;\n }\n return (direction === 'forwards' && i > slider.activeSlideIdx && Math.floor(sStart) < Math.floor(scrollLeft)) ||\n (direction === 'backwards' && i < slider.activeSlideIdx && Math.floor(sEnd) > Math.floor(scrollLeft + containerWidth));\n }\n else {\n return (direction === 'forwards' && i > slider.activeSlideIdx && Math.floor(sEnd) > Math.floor(scrollLeft + containerWidth)) ||\n (direction === 'backwards' && i < slider.activeSlideIdx && Math.floor(sStart) < Math.floor(scrollLeft));\n }\n });\n return hasUpcomingContent;\n }\n function moveToSlideInDirection(direction) {\n const activeSlideIdx = slider.activeSlideIdx;\n if (direction === 'prev') {\n if (activeSlideIdx > 0) {\n moveToSlide(activeSlideIdx - 1);\n }\n }\n else if (direction === 'next') {\n if (activeSlideIdx < slider.slides.length - 1) {\n moveToSlide(activeSlideIdx + 1);\n }\n }\n }\n function getInclusiveScrollWidth() {\n return slider.container.scrollWidth + getOutermostChildrenEdgeMarginSum(slider.container);\n }\n ;\n function getInclusiveClientWidth() {\n return slider.container.clientWidth + getOutermostChildrenEdgeMarginSum(slider.container);\n }\n function getScrollLeft() {\n return slider.options.rtl ? Math.abs(slider.container.scrollLeft) : slider.container.scrollLeft;\n }\n ;\n function setScrollLeft(value) {\n slider.container.scrollLeft = slider.options.rtl ? -value : value;\n }\n ;\n function getGapSize() {\n let gapSize = 0;\n if (slider.slides.length > 1) {\n const firstSlideRect = slider.slides[0].getBoundingClientRect();\n const secondSlideRect = slider.slides[1].getBoundingClientRect();\n gapSize = slider.options.rtl ? Math.abs(Math.floor(secondSlideRect.right - firstSlideRect.left)) : Math.floor(secondSlideRect.left - firstSlideRect.right);\n }\n return gapSize;\n }\n ;\n function getLeftOffset() {\n let offset = 0;\n const fullWidthOffset = slider.container.getAttribute('data-full-width-offset');\n if (fullWidthOffset) {\n offset = parseInt(fullWidthOffset);\n }\n return Math.floor(offset);\n }\n ;\n function moveToDirection(direction = \"prev\") {\n const scrollStrategy = slider.options.scrollStrategy;\n const scrollLeft = slider.container.scrollLeft;\n const sliderRect = slider.container.getBoundingClientRect();\n const containerWidth = slider.container.offsetWidth;\n let targetScrollPosition = scrollLeft;\n const realDirection = slider.options.rtl ? (direction === 'prev' ? 'next' : 'prev') : direction;\n if (realDirection === 'prev') {\n targetScrollPosition = Math.max(0, scrollLeft - slider.container.offsetWidth);\n }\n else if (realDirection === 'next') {\n targetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), scrollLeft + slider.container.offsetWidth);\n }\n if (scrollStrategy === 'fullSlide') {\n let fullSlideTargetScrollPosition = null;\n // extend targetScrollPosition to include gap\n if (realDirection === 'prev') {\n fullSlideTargetScrollPosition = Math.max(0, targetScrollPosition - getGapSize());\n }\n else {\n fullSlideTargetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), targetScrollPosition + getGapSize());\n }\n if (realDirection === 'next') {\n let partialSlideFound = false;\n for (let slide of slider.slides) {\n const slideRect = slide.getBoundingClientRect();\n const slideStart = slideRect.left - sliderRect.left + scrollLeft;\n const slideEnd = slideStart + slideRect.width;\n if (Math.floor(slideStart) < Math.floor(targetScrollPosition) && Math.floor(slideEnd) > Math.floor(targetScrollPosition)) {\n fullSlideTargetScrollPosition = slideStart;\n partialSlideFound = true;\n break;\n }\n }\n if (!partialSlideFound) {\n fullSlideTargetScrollPosition = Math.min(targetScrollPosition, slider.getInclusiveScrollWidth() - slider.container.offsetWidth);\n }\n if (fullSlideTargetScrollPosition) {\n if (Math.floor(fullSlideTargetScrollPosition) > Math.floor(scrollLeft)) {\n // make sure fullSlideTargetScrollPosition is possible considering the container width\n const maxScrollPosition = Math.floor(slider.getInclusiveScrollWidth()) - Math.floor(containerWidth);\n targetScrollPosition = Math.min(fullSlideTargetScrollPosition, maxScrollPosition);\n }\n else {\n // cannot snap to slide, move one page worth of distance\n targetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), scrollLeft + containerWidth);\n }\n }\n }\n else {\n let partialSlideFound = false;\n for (let slide of slider.slides) {\n const slideRect = slide.getBoundingClientRect();\n const slideStart = slideRect.left - sliderRect.left + scrollLeft;\n const slideEnd = slideStart + slideRect.width;\n if (Math.floor(slideStart) < Math.floor(scrollLeft) && Math.floor(slideEnd) > Math.floor(scrollLeft)) {\n fullSlideTargetScrollPosition = slideEnd - containerWidth;\n partialSlideFound = true;\n break;\n }\n }\n if (!partialSlideFound) {\n fullSlideTargetScrollPosition = Math.max(0, scrollLeft - containerWidth);\n }\n if (fullSlideTargetScrollPosition && Math.floor(fullSlideTargetScrollPosition) < Math.floor(scrollLeft)) {\n targetScrollPosition = fullSlideTargetScrollPosition;\n }\n }\n }\n // add left offset\n const offsettedTargetScrollPosition = targetScrollPosition - getLeftOffset();\n if (Math.floor(offsettedTargetScrollPosition) >= 0) {\n targetScrollPosition = offsettedTargetScrollPosition;\n }\n slider.emit('programmaticScrollStart');\n slider.container.style.scrollBehavior = slider.options.scrollBehavior;\n slider.container.scrollLeft = targetScrollPosition;\n setTimeout(() => slider.container.style.scrollBehavior = '', 50);\n }\n ;\n function snapToClosestSlide(direction = \"prev\") {\n var _a, _b;\n const { slides, options, container } = slider;\n const { rtl, emulateScrollSnapMaxThreshold = 10, scrollBehavior = 'smooth', } = options;\n const isForward = rtl ? direction === 'prev' : direction === 'next';\n const scrollPos = getScrollLeft();\n // Get container rect once (includes any CSS transforms)\n const containerRect = container.getBoundingClientRect();\n const factor = rtl ? -1 : 1;\n // Calculate target area offset if targetWidth is defined\n let targetAreaOffset = 0;\n if (typeof options.targetWidth === 'function') {\n try {\n const targetWidth = options.targetWidth(slider);\n const containerWidth = containerRect.width;\n if (Number.isFinite(targetWidth) && targetWidth > 0 && targetWidth < containerWidth) {\n targetAreaOffset = (containerWidth - targetWidth) / 2;\n }\n }\n catch (error) {\n // ignore errors, use default offset of 0\n }\n }\n // Build slide metadata\n const slideData = [...slides].map(slide => {\n const { width } = slide.getBoundingClientRect();\n const slideRect = slide.getBoundingClientRect();\n // position relative to container's left edge\n const relativeStart = (slideRect.left - containerRect.left) + scrollPos;\n // Adjust trigger point to align with target area start instead of container edge\n const alignmentPoint = relativeStart - targetAreaOffset;\n const triggerPoint = Math.min(alignmentPoint + width / 2, alignmentPoint + emulateScrollSnapMaxThreshold);\n return { start: relativeStart - targetAreaOffset, trigger: triggerPoint };\n });\n // Pick the target start based on drag direction\n let targetStart = null;\n if (isForward) {\n const found = slideData.find(item => scrollPos <= item.trigger);\n targetStart = (_a = found === null || found === void 0 ? void 0 : found.start) !== null && _a !== void 0 ? _a : null;\n }\n else {\n const found = [...slideData].reverse().find(item => scrollPos >= item.trigger);\n targetStart = (_b = found === null || found === void 0 ? void 0 : found.start) !== null && _b !== void 0 ? _b : null;\n }\n if (targetStart == null)\n return;\n // Clamp to zero and apply RTL factor\n const finalLeft = Math.max(0, Math.floor(targetStart)) * factor;\n container.scrollTo({ left: finalLeft, behavior: scrollBehavior });\n }\n function on(name, cb) {\n if (!subs[name]) {\n subs[name] = [];\n }\n subs[name].push(cb);\n }\n ;\n function emit(name) {\n var _a;\n if (subs && subs[name]) {\n subs[name].forEach(cb => {\n cb(slider);\n });\n }\n const optionCallBack = (_a = slider === null || slider === void 0 ? void 0 : slider.options) === null || _a === void 0 ? void 0 : _a[name];\n // Type guard to check if the option callback is a function\n if (typeof optionCallBack === 'function') {\n optionCallBack(slider); // Type assertion here\n }\n }\n ;\n slider = {\n emit,\n moveToDirection,\n canMoveToSlide,\n moveToSlide,\n moveToSlideInDirection,\n snapToClosestSlide,\n getInclusiveScrollWidth,\n getInclusiveClientWidth,\n getLeftOffset,\n getGapSize,\n getScrollLeft,\n setScrollLeft,\n setActiveSlideIdx,\n on,\n options,\n };\n init();\n return slider;\n}\n","import Slider from './slider';\nexport default function OverflowSlider(container, options, plugins) {\n try {\n // check that container HTML element\n if (!(container instanceof Element)) {\n throw new Error(`Container must be HTML element, found ${typeof container}`);\n }\n const defaults = {\n cssVariableContainer: container,\n scrollBehavior: \"smooth\",\n scrollStrategy: \"fullSlide\",\n slidesSelector: \":scope > *\",\n emulateScrollSnap: false,\n emulateScrollSnapMaxThreshold: 64,\n rtl: false,\n };\n const sliderOptions = Object.assign(Object.assign({}, defaults), options);\n // disable smooth scrolling if user prefers reduced motion\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n sliderOptions.scrollBehavior = \"auto\";\n }\n return Slider(container, sliderOptions, plugins);\n }\n catch (e) {\n console.error(e);\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/core/details.ts","../src/core/utils.ts","../src/core/slider.ts","../src/core/overflow-slider.ts"],"sourcesContent":["export default function details(slider) {\n var _a;\n let instance;\n let hasOverflow = false;\n let slideCount = 0;\n let containerWidth = 0;\n let containerHeight = 0;\n let scrollableAreaWidth = 0;\n let amountOfPages = 0;\n let currentPage = 0;\n if (Math.floor(slider.getInclusiveScrollWidth()) > Math.floor(slider.getInclusiveClientWidth())) {\n hasOverflow = true;\n }\n slideCount = (_a = slider.slides.length) !== null && _a !== void 0 ? _a : 0;\n containerWidth = slider.container.offsetWidth;\n containerHeight = slider.container.offsetHeight;\n scrollableAreaWidth = slider.getInclusiveScrollWidth();\n amountOfPages = Math.ceil(scrollableAreaWidth / containerWidth);\n if (Math.floor(slider.getScrollLeft()) >= 0) {\n currentPage = Math.floor(slider.getScrollLeft() / containerWidth);\n // Consider as last page if we're within tolerance of the maximum scroll position\n // When FullWidthPlugin is active, account for the margin offset\n const maxScroll = scrollableAreaWidth - containerWidth - (2 * slider.getLeftOffset());\n if (slider.getScrollLeft() >= maxScroll - 1) {\n currentPage = amountOfPages - 1;\n }\n }\n instance = {\n hasOverflow,\n slideCount,\n containerWidth,\n containerHeight,\n scrollableAreaWidth,\n amountOfPages,\n currentPage,\n };\n return instance;\n}\n;\n","function generateId(prefix, i = 1) {\n const id = `${prefix}-${i}`;\n if (document.getElementById(id)) {\n return generateId(prefix, i + 1);\n }\n return id;\n}\nfunction objectsAreEqual(obj1, obj2) {\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n for (let key of keys1) {\n // Use `Object.prototype.hasOwnProperty.call` for better safety\n if (!Object.prototype.hasOwnProperty.call(obj2, key) || obj1[key] !== obj2[key]) {\n return false;\n }\n }\n return true;\n}\nfunction getOutermostChildrenEdgeMarginSum(el) {\n if (el.children.length === 0) {\n return 0;\n }\n // get the first child and its left margin\n const firstChild = el.children[0];\n const firstChildStyle = getComputedStyle(firstChild);\n const firstChildMarginLeft = parseFloat(firstChildStyle.marginLeft);\n // Get the last child and its right margin\n const lastChild = el.children[el.children.length - 1];\n const lastChildStyle = getComputedStyle(lastChild);\n const lastChildMarginRight = parseFloat(lastChildStyle.marginRight);\n return firstChildMarginLeft + lastChildMarginRight;\n}\nexport { generateId, objectsAreEqual, getOutermostChildrenEdgeMarginSum };\n","import details from './details';\nimport { generateId, objectsAreEqual, getOutermostChildrenEdgeMarginSum } from './utils';\nexport default function Slider(container, options, plugins) {\n let slider;\n let subs = {};\n const overrideTransitions = () => {\n slider.slides.forEach((slide) => {\n slide.style.transition = 'none';\n });\n };\n const restoreTransitions = () => {\n slider.slides.forEach((slide) => {\n slide.style.removeProperty('transition');\n });\n };\n function init() {\n slider.container = container;\n // ensure container has id\n let containerId = container.getAttribute('id');\n if (containerId === null) {\n containerId = generateId('overflow-slider');\n container.setAttribute('id', containerId);\n }\n setSlides();\n // CSS transitions can cause delays for calculations\n overrideTransitions();\n setDetails(true);\n setActiveSlideIdx();\n slider.on('contentsChanged', () => {\n setSlides();\n setDetails();\n setActiveSlideIdx();\n });\n slider.on('containerSizeChanged', () => setDetails());\n let requestId = 0;\n const setDetailsDebounce = () => {\n if (requestId) {\n window.cancelAnimationFrame(requestId);\n }\n requestId = window.requestAnimationFrame(() => {\n setDetails();\n setActiveSlideIdx();\n });\n };\n slider.on('scroll', setDetailsDebounce);\n addEventListeners();\n setDataAttributes();\n setCSSVariables();\n if (plugins) {\n for (const plugin of plugins) {\n plugin(slider);\n }\n // plugins may mutate layout: refresh details and derived data after they run\n // setTimeout( () => {\n setDetails();\n setActiveSlideIdx();\n setCSSVariables();\n slider.emit('pluginsLoaded');\n // }, 250 );\n }\n slider.on('detailsChanged', () => {\n setDataAttributes();\n setCSSVariables();\n });\n slider.emit('created');\n restoreTransitions();\n slider.container.setAttribute('data-ready', 'true');\n }\n ;\n function setDetails(isInit = false) {\n const oldDetails = slider.details;\n const newDetails = details(slider);\n slider.details = newDetails;\n if (!isInit && !objectsAreEqual(oldDetails, newDetails)) {\n slider.emit('detailsChanged');\n }\n else if (isInit) {\n slider.emit('detailsChanged');\n }\n }\n ;\n function setSlides() {\n slider.slides = Array.from(slider.container.querySelectorAll(slider.options.slidesSelector));\n }\n function addEventListeners() {\n // changes to DOM\n const observer = new MutationObserver(() => slider.emit('contentsChanged'));\n observer.observe(slider.container, { childList: true });\n // container size changes\n const resizeObserver = new ResizeObserver(() => slider.emit('containerSizeChanged'));\n resizeObserver.observe(slider.container);\n // scroll event with debouncing\n let scrollTimeout;\n let nativeScrollTimeout;\n let programmaticScrollTimeout;\n let scrollLeft = slider.container.scrollLeft;\n let nativeScrollLeft = slider.container.scrollLeft;\n let programmaticScrollLeft = slider.container.scrollLeft;\n let isScrolling = false;\n let isUserScrolling = false;\n let isProgrammaticScrolling = false;\n // all types of scroll\n slider.container.addEventListener('scroll', () => {\n const newScrollLeft = slider.container.scrollLeft;\n if (Math.floor(scrollLeft) !== Math.floor(newScrollLeft)) {\n if (!isScrolling) {\n isScrolling = true;\n slider.emit('scrollStart');\n }\n scrollLeft = newScrollLeft;\n clearTimeout(scrollTimeout);\n scrollTimeout = setTimeout(() => {\n isScrolling = false;\n slider.emit('scrollEnd');\n }, 50);\n slider.emit('scroll');\n }\n // keep up nativeScrolling to take into account scroll-snap\n if (isUserScrolling) {\n nativeScrollHandler();\n }\n });\n // user initted scroll (touchmove, mouse wheel, etc.)\n const nativeScrollHandler = () => {\n const newScrollLeft = slider.container.scrollLeft;\n if (Math.floor(nativeScrollLeft) !== Math.floor(newScrollLeft) && !isProgrammaticScrolling) {\n if (!isUserScrolling) {\n slider.emit('nativeScrollStart');\n isUserScrolling = true;\n }\n slider.emit('nativeScroll');\n nativeScrollLeft = newScrollLeft;\n clearTimeout(nativeScrollTimeout);\n nativeScrollTimeout = setTimeout(() => {\n isUserScrolling = false;\n slider.emit('nativeScrollEnd');\n // update programmaticScrollLeft to match nativeScrollLeft\n // this prevents programmaticScroll triggering with no real change to scrollLeft\n programmaticScrollLeft = nativeScrollLeft;\n }, 50);\n }\n };\n slider.container.addEventListener('touchmove', nativeScrollHandler);\n slider.container.addEventListener('mousewheel', nativeScrollHandler);\n slider.container.addEventListener('wheel', nativeScrollHandler);\n // programmatic scroll (scrollTo, etc.)\n slider.on('programmaticScrollStart', () => {\n isProgrammaticScrolling = true;\n });\n slider.container.addEventListener('scroll', () => {\n const newScrollLeft = slider.container.scrollLeft;\n if (Math.floor(programmaticScrollLeft) !== Math.floor(newScrollLeft) && !isUserScrolling && isProgrammaticScrolling) {\n programmaticScrollLeft = newScrollLeft;\n clearTimeout(programmaticScrollTimeout);\n programmaticScrollTimeout = setTimeout(() => {\n isProgrammaticScrolling = false;\n slider.emit('programmaticScrollEnd');\n // update nativeScrollLeft to match programmaticScrollLeft\n // this prevents nativeScroll triggering with no real change to scrollLeft\n nativeScrollLeft = programmaticScrollLeft;\n }, 50);\n slider.emit('programmaticScroll');\n }\n });\n // Fix issues on scroll snapping not working on programmatic scroll (it's not smooth)\n // by disabling scroll snap if scrolling is programmatic\n slider.on('programmaticScrollStart', () => {\n slider.container.style.scrollSnapType = 'none';\n });\n // restore scroll snap if user scroll starts\n slider.on('nativeScrollStart', () => {\n slider.container.style.scrollSnapType = '';\n });\n // Listen for mouse down and touch start events on the document\n // This handles both mouse clicks and touch interactions\n let wasInteractedWith = false;\n slider.container.addEventListener('mousedown', () => {\n wasInteractedWith = true;\n });\n slider.container.addEventListener('touchstart', () => {\n wasInteractedWith = true;\n }, { passive: true });\n slider.container.addEventListener('focusin', (e) => {\n // Only handle keyboard-initiated focus (not mouse or touch)\n if (wasInteractedWith) {\n wasInteractedWith = false;\n return;\n }\n wasInteractedWith = false;\n // No scrolling needed if there is no overflow\n if (!slider.details.hasOverflow) {\n return;\n }\n const focusedElement = e.target;\n // Walk up from the focused element to find the direct child (slide) of the container\n let slide = focusedElement;\n while (slide.parentElement !== slider.container) {\n if (slide.parentElement) {\n slide = slide.parentElement;\n }\n else {\n // Focused element is not inside the slider container\n return;\n }\n }\n // Emit programmaticScrollStart immediately so the browser's native focus\n // scroll events are classified as programmatic (not native). This prevents\n // nativeScrollStart from restoring scrollSnapType and fighting our correction.\n slider.emit('programmaticScrollStart');\n // Use setTimeout to let the browser's native focus scroll complete,\n // then override with our WCAG-compliant scroll positioning\n setTimeout(() => {\n scrollFocusedSlideIntoView(slide, focusedElement);\n slider.emit('focusScroll');\n }, 50);\n });\n }\n ;\n function setCSSVariables() {\n slider.options.cssVariableContainer.style.setProperty('--slider-container-height', `${slider.details.containerHeight}px`);\n slider.options.cssVariableContainer.style.setProperty('--slider-container-width', `${slider.details.containerWidth}px`);\n slider.options.cssVariableContainer.style.setProperty('--slider-scrollable-width', `${slider.details.scrollableAreaWidth}px`);\n slider.options.cssVariableContainer.style.setProperty('--slider-slides-count', `${slider.details.slideCount}`);\n slider.options.cssVariableContainer.style.setProperty('--slider-x-offset', `${getLeftOffset()}px`);\n if (typeof slider.options.targetWidth === 'function') {\n slider.options.cssVariableContainer.style.setProperty('--slider-container-target-width', `${slider.options.targetWidth(slider)}px`);\n }\n }\n function setDataAttributes() {\n slider.container.setAttribute('data-has-overflow', slider.details.hasOverflow ? 'true' : 'false');\n if (slider.options.rtl) {\n slider.container.setAttribute('dir', 'rtl');\n }\n }\n function ensureSlideIsInView(slide, scrollBehavior = null) {\n const behavior = scrollBehavior || slider.options.scrollBehavior;\n const slideRect = slide.getBoundingClientRect();\n const sliderRect = slider.container.getBoundingClientRect();\n const containerWidth = slider.container.offsetWidth;\n const scrollLeft = slider.container.scrollLeft;\n const slideStart = slideRect.left - sliderRect.left + scrollLeft;\n const slideEnd = slideStart + slideRect.width;\n let scrollTarget = null;\n if (Math.floor(slideStart) < Math.floor(scrollLeft)) {\n scrollTarget = slideStart;\n }\n else if (Math.floor(slideEnd) > Math.floor(scrollLeft) + Math.floor(containerWidth)) {\n scrollTarget = slideEnd - containerWidth;\n }\n else if (Math.floor(slideStart) === 0) {\n scrollTarget = 0;\n }\n else {\n scrollTarget = slideStart;\n }\n if (scrollTarget !== null) {\n setTimeout((scrollTarget) => {\n slider.emit('programmaticScrollStart');\n slider.container.scrollTo({ left: scrollTarget, behavior: behavior });\n }, 50, scrollTarget);\n }\n }\n ;\n /**\n * Scrolls a focused slide (or child element) into view for WCAG AA compliance.\n * Priority:\n * 1. Show the full slide if it fits in the container\n * 2. If the slide is wider than the container, show the focused element\n * 3. If neither fits, align the leading edge (left for LTR, right for RTL)\n */\n function scrollFocusedSlideIntoView(slide, focusedElement) {\n const isRtl = slider.options.rtl;\n const containerRect = slider.container.getBoundingClientRect();\n const containerWidth = slider.container.offsetWidth;\n const slideRect = slide.getBoundingClientRect();\n const scrollLeft = slider.container.scrollLeft;\n // Calculate visual offsets relative to the container viewport\n const slideLeftOffset = slideRect.left - containerRect.left;\n const slideRightOffset = slideRect.right - containerRect.right;\n // Check if slide is already fully visible (1px tolerance for sub-pixel rounding)\n if (slideLeftOffset >= -1 && slideRightOffset <= 1) {\n slider.container.style.scrollSnapType = '';\n slider.emit('programmaticScrollEnd');\n return;\n }\n let scrollTarget;\n if (slideRect.width <= containerWidth) {\n // Slide fits in container — align its leading edge to show it fully\n if (isRtl) {\n // RTL: align slide's right edge with container's right edge\n scrollTarget = scrollLeft + slideRightOffset;\n }\n else {\n // LTR: align slide's left edge with container's left edge\n scrollTarget = scrollLeft + slideLeftOffset;\n }\n }\n else if (focusedElement !== slide) {\n // Slide is wider than container — try to show the focused child element\n const focusRect = focusedElement.getBoundingClientRect();\n const focusLeftOffset = focusRect.left - containerRect.left;\n const focusRightOffset = focusRect.right - containerRect.right;\n // Check if focused element is already fully visible\n if (focusLeftOffset >= -1 && focusRightOffset <= 1) {\n slider.container.style.scrollSnapType = '';\n slider.emit('programmaticScrollEnd');\n return;\n }\n if (focusRect.width <= containerWidth) {\n // Focused element fits in container — align its leading edge\n if (isRtl) {\n scrollTarget = scrollLeft + focusRightOffset;\n }\n else {\n scrollTarget = scrollLeft + focusLeftOffset;\n }\n }\n else {\n // Focused element is also wider than container — align leading edge\n if (isRtl) {\n scrollTarget = scrollLeft + focusRightOffset;\n }\n else {\n scrollTarget = scrollLeft + focusLeftOffset;\n }\n }\n }\n else {\n // Slide is the focused element and wider than container — align leading edge\n if (isRtl) {\n scrollTarget = scrollLeft + slideRightOffset;\n }\n else {\n scrollTarget = scrollLeft + slideLeftOffset;\n }\n }\n slider.emit('programmaticScrollStart');\n slider.container.scrollTo({ left: scrollTarget, behavior: 'auto' });\n }\n ;\n function setActiveSlideIdx() {\n const sliderRect = slider.container.getBoundingClientRect();\n const scrollLeft = slider.getScrollLeft();\n const slides = slider.slides;\n let activeSlideIdx = 0;\n let scrolledPastLastSlide = false;\n if (slider.options.rtl) {\n const scrolledDistance = slider.getInclusiveScrollWidth() - scrollLeft - slider.getInclusiveClientWidth();\n const slidePositions = [];\n for (let i = slides.length - 1; i >= 0; i--) {\n const slideRect = slides[i].getBoundingClientRect();\n const slideEnd = Math.abs(slideRect.left) - Math.abs(sliderRect.left) + scrolledDistance;\n slidePositions.push({\n slide: slides[i],\n slideEnd: slideEnd,\n });\n }\n let closestSlide = null;\n let closestDistance = null;\n for (let i = 0; i < slidePositions.length; i++) {\n const distance = Math.abs(slidePositions[i].slideEnd - scrolledDistance);\n if (closestDistance === null || distance < closestDistance) {\n closestDistance = distance;\n closestSlide = slidePositions[i].slide;\n }\n }\n if (closestSlide) {\n activeSlideIdx = slides.indexOf(closestSlide);\n }\n else {\n activeSlideIdx = slides.length - 1;\n }\n }\n else {\n for (let i = 0; i < slides.length; i++) {\n const slideRect = slides[i].getBoundingClientRect();\n const slideStart = slideRect.left - sliderRect.left + scrollLeft + getGapSize();\n if (Math.floor(slideStart) >= Math.floor(scrollLeft)) {\n activeSlideIdx = i;\n break;\n }\n if (i === slides.length - 1) {\n scrolledPastLastSlide = true;\n }\n }\n }\n if (scrolledPastLastSlide) {\n activeSlideIdx = slides.length - 1;\n }\n const oldActiveSlideIdx = slider.activeSlideIdx;\n slider.activeSlideIdx = activeSlideIdx;\n if (oldActiveSlideIdx !== activeSlideIdx) {\n slider.emit('activeSlideChanged');\n }\n }\n function moveToSlide(idx) {\n const slide = slider.slides[idx];\n if (slide) {\n ensureSlideIsInView(slide);\n }\n }\n ;\n function canMoveToSlide(idx) {\n if (idx < 0 || idx >= slider.slides.length) {\n return false;\n }\n if (idx === slider.activeSlideIdx) {\n return false;\n }\n const direction = slider.options.rtl ? (idx < slider.activeSlideIdx ? 'backwards' : 'forwards') : (idx < slider.activeSlideIdx ? 'backwards' : 'forwards');\n // check if the slide is already in view\n const sliderRect = slider.container.getBoundingClientRect();\n const scrollLeft = slider.getScrollLeft();\n const containerWidth = slider.details.containerWidth;\n const hasUpcomingContent = slider.slides.some((s, i) => {\n if (i === slider.activeSlideIdx) {\n return false; // skip the slide we are checking\n }\n const sRect = s.getBoundingClientRect();\n const sStart = sRect.left - sliderRect.left + scrollLeft;\n const sEnd = sStart + sRect.width;\n if (slider.options.rtl) {\n if (scrollLeft === 0 && slider.details.hasOverflow) {\n return true;\n }\n return (direction === 'forwards' && i > slider.activeSlideIdx && Math.floor(sStart) < Math.floor(scrollLeft)) ||\n (direction === 'backwards' && i < slider.activeSlideIdx && Math.floor(sEnd) > Math.floor(scrollLeft + containerWidth));\n }\n else {\n return (direction === 'forwards' && i > slider.activeSlideIdx && Math.floor(sEnd) > Math.floor(scrollLeft + containerWidth)) ||\n (direction === 'backwards' && i < slider.activeSlideIdx && Math.floor(sStart) < Math.floor(scrollLeft));\n }\n });\n return hasUpcomingContent;\n }\n function moveToSlideInDirection(direction) {\n const activeSlideIdx = slider.activeSlideIdx;\n if (direction === 'prev') {\n if (activeSlideIdx > 0) {\n moveToSlide(activeSlideIdx - 1);\n }\n }\n else if (direction === 'next') {\n if (activeSlideIdx < slider.slides.length - 1) {\n moveToSlide(activeSlideIdx + 1);\n }\n }\n }\n function getInclusiveScrollWidth() {\n return slider.container.scrollWidth + getOutermostChildrenEdgeMarginSum(slider.container);\n }\n ;\n function getInclusiveClientWidth() {\n return slider.container.clientWidth + getOutermostChildrenEdgeMarginSum(slider.container);\n }\n function getScrollLeft() {\n return slider.options.rtl ? Math.abs(slider.container.scrollLeft) : slider.container.scrollLeft;\n }\n ;\n function setScrollLeft(value) {\n slider.container.scrollLeft = slider.options.rtl ? -value : value;\n }\n ;\n function getGapSize() {\n let gapSize = 0;\n if (slider.slides.length > 1) {\n const firstSlideRect = slider.slides[0].getBoundingClientRect();\n const secondSlideRect = slider.slides[1].getBoundingClientRect();\n gapSize = slider.options.rtl ? Math.abs(Math.floor(secondSlideRect.right - firstSlideRect.left)) : Math.floor(secondSlideRect.left - firstSlideRect.right);\n }\n return gapSize;\n }\n ;\n function getLeftOffset() {\n let offset = 0;\n const fullWidthOffset = slider.container.getAttribute('data-full-width-offset');\n if (fullWidthOffset) {\n offset = parseInt(fullWidthOffset);\n }\n return Math.floor(offset);\n }\n ;\n function moveToDirection(direction = \"prev\") {\n const scrollStrategy = slider.options.scrollStrategy;\n const scrollLeft = slider.container.scrollLeft;\n const sliderRect = slider.container.getBoundingClientRect();\n const containerWidth = slider.container.offsetWidth;\n let targetScrollPosition = scrollLeft;\n const realDirection = slider.options.rtl ? (direction === 'prev' ? 'next' : 'prev') : direction;\n if (realDirection === 'prev') {\n targetScrollPosition = Math.max(0, scrollLeft - slider.container.offsetWidth);\n }\n else if (realDirection === 'next') {\n targetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), scrollLeft + slider.container.offsetWidth);\n }\n if (scrollStrategy === 'fullSlide') {\n let fullSlideTargetScrollPosition = null;\n // extend targetScrollPosition to include gap\n if (realDirection === 'prev') {\n fullSlideTargetScrollPosition = Math.max(0, targetScrollPosition - getGapSize());\n }\n else {\n fullSlideTargetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), targetScrollPosition + getGapSize());\n }\n if (realDirection === 'next') {\n let partialSlideFound = false;\n for (let slide of slider.slides) {\n const slideRect = slide.getBoundingClientRect();\n const slideStart = slideRect.left - sliderRect.left + scrollLeft;\n const slideEnd = slideStart + slideRect.width;\n if (Math.floor(slideStart) < Math.floor(targetScrollPosition) && Math.floor(slideEnd) > Math.floor(targetScrollPosition)) {\n fullSlideTargetScrollPosition = slideStart;\n partialSlideFound = true;\n break;\n }\n }\n if (!partialSlideFound) {\n fullSlideTargetScrollPosition = Math.min(targetScrollPosition, slider.getInclusiveScrollWidth() - slider.container.offsetWidth);\n }\n if (fullSlideTargetScrollPosition) {\n if (Math.floor(fullSlideTargetScrollPosition) > Math.floor(scrollLeft)) {\n // make sure fullSlideTargetScrollPosition is possible considering the container width\n const maxScrollPosition = Math.floor(slider.getInclusiveScrollWidth()) - Math.floor(containerWidth);\n targetScrollPosition = Math.min(fullSlideTargetScrollPosition, maxScrollPosition);\n }\n else {\n // cannot snap to slide, move one page worth of distance\n targetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), scrollLeft + containerWidth);\n }\n }\n }\n else {\n let partialSlideFound = false;\n for (let slide of slider.slides) {\n const slideRect = slide.getBoundingClientRect();\n const slideStart = slideRect.left - sliderRect.left + scrollLeft;\n const slideEnd = slideStart + slideRect.width;\n if (Math.floor(slideStart) < Math.floor(scrollLeft) && Math.floor(slideEnd) > Math.floor(scrollLeft)) {\n fullSlideTargetScrollPosition = slideEnd - containerWidth;\n partialSlideFound = true;\n break;\n }\n }\n if (!partialSlideFound) {\n fullSlideTargetScrollPosition = Math.max(0, scrollLeft - containerWidth);\n }\n if (fullSlideTargetScrollPosition && Math.floor(fullSlideTargetScrollPosition) < Math.floor(scrollLeft)) {\n targetScrollPosition = fullSlideTargetScrollPosition;\n }\n }\n }\n // add left offset\n const offsettedTargetScrollPosition = targetScrollPosition - getLeftOffset();\n if (Math.floor(offsettedTargetScrollPosition) >= 0) {\n targetScrollPosition = offsettedTargetScrollPosition;\n }\n slider.emit('programmaticScrollStart');\n slider.container.style.scrollBehavior = slider.options.scrollBehavior;\n slider.container.scrollLeft = targetScrollPosition;\n setTimeout(() => slider.container.style.scrollBehavior = '', 50);\n }\n ;\n function snapToClosestSlide(direction = \"prev\") {\n var _a, _b;\n const { slides, options, container } = slider;\n const { rtl, emulateScrollSnapMaxThreshold = 10, scrollBehavior = 'smooth', } = options;\n const isForward = rtl ? direction === 'prev' : direction === 'next';\n const scrollPos = getScrollLeft();\n // Get container rect once (includes any CSS transforms)\n const containerRect = container.getBoundingClientRect();\n const factor = rtl ? -1 : 1;\n // Calculate target area offset if targetWidth is defined\n let targetAreaOffset = 0;\n if (typeof options.targetWidth === 'function') {\n try {\n const targetWidth = options.targetWidth(slider);\n const containerWidth = containerRect.width;\n if (Number.isFinite(targetWidth) && targetWidth > 0 && targetWidth < containerWidth) {\n targetAreaOffset = (containerWidth - targetWidth) / 2;\n }\n }\n catch (error) {\n // ignore errors, use default offset of 0\n }\n }\n // Build slide metadata\n const slideData = [...slides].map(slide => {\n const { width } = slide.getBoundingClientRect();\n const slideRect = slide.getBoundingClientRect();\n // position relative to container's left edge\n const relativeStart = (slideRect.left - containerRect.left) + scrollPos;\n // Adjust trigger point to align with target area start instead of container edge\n const alignmentPoint = relativeStart - targetAreaOffset;\n const triggerPoint = Math.min(alignmentPoint + width / 2, alignmentPoint + emulateScrollSnapMaxThreshold);\n return { start: relativeStart - targetAreaOffset, trigger: triggerPoint };\n });\n // Pick the target start based on drag direction\n let targetStart = null;\n if (isForward) {\n const found = slideData.find(item => scrollPos <= item.trigger);\n targetStart = (_a = found === null || found === void 0 ? void 0 : found.start) !== null && _a !== void 0 ? _a : null;\n }\n else {\n const found = [...slideData].reverse().find(item => scrollPos >= item.trigger);\n targetStart = (_b = found === null || found === void 0 ? void 0 : found.start) !== null && _b !== void 0 ? _b : null;\n }\n if (targetStart == null)\n return;\n // Clamp to zero and apply RTL factor\n const finalLeft = Math.max(0, Math.floor(targetStart)) * factor;\n container.scrollTo({ left: finalLeft, behavior: scrollBehavior });\n }\n function on(name, cb) {\n if (!subs[name]) {\n subs[name] = [];\n }\n subs[name].push(cb);\n }\n ;\n function emit(name) {\n var _a;\n if (subs && subs[name]) {\n subs[name].forEach(cb => {\n cb(slider);\n });\n }\n const optionCallBack = (_a = slider === null || slider === void 0 ? void 0 : slider.options) === null || _a === void 0 ? void 0 : _a[name];\n // Type guard to check if the option callback is a function\n if (typeof optionCallBack === 'function') {\n optionCallBack(slider); // Type assertion here\n }\n }\n ;\n slider = {\n emit,\n moveToDirection,\n canMoveToSlide,\n moveToSlide,\n moveToSlideInDirection,\n snapToClosestSlide,\n getInclusiveScrollWidth,\n getInclusiveClientWidth,\n getLeftOffset,\n getGapSize,\n getScrollLeft,\n setScrollLeft,\n setActiveSlideIdx,\n on,\n options,\n };\n init();\n return slider;\n}\n","import Slider from './slider';\nexport default function OverflowSlider(container, options, plugins) {\n try {\n // check that container HTML element\n if (!(container instanceof Element)) {\n throw new Error(`Container must be HTML element, found ${typeof container}`);\n }\n const defaults = {\n cssVariableContainer: container,\n scrollBehavior: \"smooth\",\n scrollStrategy: \"fullSlide\",\n slidesSelector: \":scope > *\",\n emulateScrollSnap: false,\n emulateScrollSnapMaxThreshold: 64,\n rtl: false,\n };\n const sliderOptions = Object.assign(Object.assign({}, defaults), options);\n // disable smooth scrolling if user prefers reduced motion\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n sliderOptions.scrollBehavior = \"auto\";\n }\n return Slider(container, sliderOptions, plugins);\n }\n catch (e) {\n console.error(e);\n }\n}\n"],"names":[],"mappings":"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"}
package/dist/index.min.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";function t(e,o=1){const n=`${e}-${o}`;return document.getElementById(n)?t(e,o+1):n}function e(t){if(0===t.children.length)return 0;const e=t.children[0],o=getComputedStyle(e),n=parseFloat(o.marginLeft),l=t.children[t.children.length-1],i=getComputedStyle(l);return n+parseFloat(i.marginRight)}function o(o,n,l){let i,r={};function a(t=!1){const e=i.details,o=function(t){var e;let o,n=!1,l=0,i=0,r=0,a=0,s=0,c=0;if(Math.floor(t.getInclusiveScrollWidth())>Math.floor(t.getInclusiveClientWidth())&&(n=!0),l=null!==(e=t.slides.length)&&void 0!==e?e:0,i=t.container.offsetWidth,r=t.container.offsetHeight,a=t.getInclusiveScrollWidth(),s=Math.ceil(a/i),Math.floor(t.getScrollLeft())>=0){c=Math.floor(t.getScrollLeft()/i);const e=a-i-2*t.getLeftOffset();t.getScrollLeft()>=e-1&&(c=s-1)}return o={hasOverflow:n,slideCount:l,containerWidth:i,containerHeight:r,scrollableAreaWidth:a,amountOfPages:s,currentPage:c},o}(i);i.details=o,t||function(t,e){const o=Object.keys(t),n=Object.keys(e);if(o.length!==n.length)return!1;for(let n of o)if(!Object.prototype.hasOwnProperty.call(e,n)||t[n]!==e[n])return!1;return!0}(e,o)?t&&i.emit("detailsChanged"):i.emit("detailsChanged")}function s(){i.slides=Array.from(i.container.querySelectorAll(i.options.slidesSelector))}function c(){i.options.cssVariableContainer.style.setProperty("--slider-container-height",`${i.details.containerHeight}px`),i.options.cssVariableContainer.style.setProperty("--slider-container-width",`${i.details.containerWidth}px`),i.options.cssVariableContainer.style.setProperty("--slider-scrollable-width",`${i.details.scrollableAreaWidth}px`),i.options.cssVariableContainer.style.setProperty("--slider-slides-count",`${i.details.slideCount}`),i.options.cssVariableContainer.style.setProperty("--slider-x-offset",`${v()}px`),"function"==typeof i.options.targetWidth&&i.options.cssVariableContainer.style.setProperty("--slider-container-target-width",`${i.options.targetWidth(i)}px`)}function d(){i.container.setAttribute("data-has-overflow",i.details.hasOverflow?"true":"false"),i.options.rtl&&i.container.setAttribute("dir","rtl")}function f(t,e=null){const o=e||i.options.scrollBehavior,n=t.getBoundingClientRect(),l=i.container.getBoundingClientRect(),r=i.container.offsetWidth,a=i.container.scrollLeft,s=n.left-l.left+a,c=s+n.width;let d=null;d=Math.floor(s)<Math.floor(a)?s:Math.floor(c)>Math.floor(a)+Math.floor(r)?c-r:0===Math.floor(s)?0:s,null!==d&&setTimeout(t=>{i.emit("programmaticScrollStart"),i.container.scrollTo({left:t,behavior:o})},50,d)}function h(){const t=i.container.getBoundingClientRect(),e=i.getScrollLeft(),o=i.slides;let n=0,l=!1;if(i.options.rtl){const l=i.getInclusiveScrollWidth()-e-i.getInclusiveClientWidth(),r=[];for(let e=o.length-1;e>=0;e--){const n=o[e].getBoundingClientRect(),i=Math.abs(n.left)-Math.abs(t.left)+l;r.push({slide:o[e],slideEnd:i})}let a=null,s=null;for(let t=0;t<r.length;t++){const e=Math.abs(r[t].slideEnd-l);(null===s||e<s)&&(s=e,a=r[t].slide)}n=a?o.indexOf(a):o.length-1}else for(let i=0;i<o.length;i++){const r=o[i].getBoundingClientRect().left-t.left+e+m();if(Math.floor(r)>=Math.floor(e)){n=i;break}i===o.length-1&&(l=!0)}l&&(n=o.length-1);const r=i.activeSlideIdx;i.activeSlideIdx=n,r!==n&&i.emit("activeSlideChanged")}function u(t){const e=i.slides[t];e&&f(e)}function g(){return i.options.rtl?Math.abs(i.container.scrollLeft):i.container.scrollLeft}function m(){let t=0;if(i.slides.length>1){const e=i.slides[0].getBoundingClientRect(),o=i.slides[1].getBoundingClientRect();t=i.options.rtl?Math.abs(Math.floor(o.right-e.left)):Math.floor(o.left-e.right)}return t}function v(){let t=0;const e=i.container.getAttribute("data-full-width-offset");return e&&(t=parseInt(e)),Math.floor(t)}return i={emit:function(t){var e;r&&r[t]&&r[t].forEach(t=>{t(i)});const o=null===(e=null==i?void 0:i.options)||void 0===e?void 0:e[t];"function"==typeof o&&o(i)},moveToDirection:function(t="prev"){const e=i.options.scrollStrategy,o=i.container.scrollLeft,n=i.container.getBoundingClientRect(),l=i.container.offsetWidth;let r=o;const a=i.options.rtl?"prev"===t?"next":"prev":t;if("prev"===a?r=Math.max(0,o-i.container.offsetWidth):"next"===a&&(r=Math.min(i.getInclusiveScrollWidth(),o+i.container.offsetWidth)),"fullSlide"===e){let t=null;if(t="prev"===a?Math.max(0,r-m()):Math.min(i.getInclusiveScrollWidth(),r+m()),"next"===a){let e=!1;for(let l of i.slides){const i=l.getBoundingClientRect(),a=i.left-n.left+o,s=a+i.width;if(Math.floor(a)<Math.floor(r)&&Math.floor(s)>Math.floor(r)){t=a,e=!0;break}}if(e||(t=Math.min(r,i.getInclusiveScrollWidth()-i.container.offsetWidth)),t)if(Math.floor(t)>Math.floor(o)){const e=Math.floor(i.getInclusiveScrollWidth())-Math.floor(l);r=Math.min(t,e)}else r=Math.min(i.getInclusiveScrollWidth(),o+l)}else{let e=!1;for(let r of i.slides){const i=r.getBoundingClientRect(),a=i.left-n.left+o,s=a+i.width;if(Math.floor(a)<Math.floor(o)&&Math.floor(s)>Math.floor(o)){t=s-l,e=!0;break}}e||(t=Math.max(0,o-l)),t&&Math.floor(t)<Math.floor(o)&&(r=t)}}const s=r-v();Math.floor(s)>=0&&(r=s),i.emit("programmaticScrollStart"),i.container.style.scrollBehavior=i.options.scrollBehavior,i.container.scrollLeft=r,setTimeout(()=>i.container.style.scrollBehavior="",50)},canMoveToSlide:function(t){if(t<0||t>=i.slides.length)return!1;if(t===i.activeSlideIdx)return!1;const e=(i.options.rtl,t<i.activeSlideIdx?"backwards":"forwards"),o=i.container.getBoundingClientRect(),n=i.getScrollLeft(),l=i.details.containerWidth;return i.slides.some((t,r)=>{if(r===i.activeSlideIdx)return!1;const a=t.getBoundingClientRect(),s=a.left-o.left+n,c=s+a.width;return i.options.rtl?!(0!==n||!i.details.hasOverflow)||("forwards"===e&&r>i.activeSlideIdx&&Math.floor(s)<Math.floor(n)||"backwards"===e&&r<i.activeSlideIdx&&Math.floor(c)>Math.floor(n+l)):"forwards"===e&&r>i.activeSlideIdx&&Math.floor(c)>Math.floor(n+l)||"backwards"===e&&r<i.activeSlideIdx&&Math.floor(s)<Math.floor(n)})},moveToSlide:u,moveToSlideInDirection:function(t){const e=i.activeSlideIdx;"prev"===t?e>0&&u(e-1):"next"===t&&e<i.slides.length-1&&u(e+1)},snapToClosestSlide:function(t="prev"){var e,o;const{slides:n,options:l,container:r}=i,{rtl:a,emulateScrollSnapMaxThreshold:s=10,scrollBehavior:c="smooth"}=l,d=a?"prev"===t:"next"===t,f=g(),h=r.getBoundingClientRect(),u=a?-1:1;let m=0;if("function"==typeof l.targetWidth)try{const t=l.targetWidth(i),e=h.width;Number.isFinite(t)&&t>0&&t<e&&(m=(e-t)/2)}catch(t){}const v=[...n].map(t=>{const{width:e}=t.getBoundingClientRect(),o=t.getBoundingClientRect().left-h.left+f,n=o-m,l=Math.min(n+e/2,n+s);return{start:o-m,trigger:l}});let p=null;if(d){const t=v.find(t=>f<=t.trigger);p=null!==(e=null==t?void 0:t.start)&&void 0!==e?e:null}else{const t=[...v].reverse().find(t=>f>=t.trigger);p=null!==(o=null==t?void 0:t.start)&&void 0!==o?o:null}if(null==p)return;const S=Math.max(0,Math.floor(p))*u;r.scrollTo({left:S,behavior:c})},getInclusiveScrollWidth:function(){return i.container.scrollWidth+e(i.container)},getInclusiveClientWidth:function(){return i.container.clientWidth+e(i.container)},getLeftOffset:v,getGapSize:m,getScrollLeft:g,setScrollLeft:function(t){i.container.scrollLeft=i.options.rtl?-t:t},setActiveSlideIdx:h,on:function(t,e){r[t]||(r[t]=[]),r[t].push(e)},options:n},function(){i.container=o;let e=o.getAttribute("id");null===e&&(e=t("overflow-slider"),o.setAttribute("id",e)),s(),i.slides.forEach(t=>{t.style.transition="none"}),a(!0),h(),i.on("contentsChanged",()=>{s(),a(),h()}),i.on("containerSizeChanged",()=>a());let n=0;if(i.on("scroll",()=>{n&&window.cancelAnimationFrame(n),n=window.requestAnimationFrame(()=>{a(),h()})}),function(){new MutationObserver(()=>i.emit("contentsChanged")).observe(i.container,{childList:!0});let t,e,o;new ResizeObserver(()=>i.emit("containerSizeChanged")).observe(i.container);let n=i.container.scrollLeft,l=i.container.scrollLeft,r=i.container.scrollLeft,a=!1,s=!1,c=!1;i.container.addEventListener("scroll",()=>{const e=i.container.scrollLeft;Math.floor(n)!==Math.floor(e)&&(a||(a=!0,i.emit("scrollStart")),n=e,clearTimeout(t),t=setTimeout(()=>{a=!1,i.emit("scrollEnd")},50),i.emit("scroll")),s&&d()});const d=()=>{const t=i.container.scrollLeft;Math.floor(l)===Math.floor(t)||c||(s||(i.emit("nativeScrollStart"),s=!0),i.emit("nativeScroll"),l=t,clearTimeout(e),e=setTimeout(()=>{s=!1,i.emit("nativeScrollEnd"),r=l},50))};i.container.addEventListener("touchmove",d),i.container.addEventListener("mousewheel",d),i.container.addEventListener("wheel",d),i.on("programmaticScrollStart",()=>{c=!0}),i.container.addEventListener("scroll",()=>{const t=i.container.scrollLeft;Math.floor(r)!==Math.floor(t)&&!s&&c&&(r=t,clearTimeout(o),o=setTimeout(()=>{c=!1,i.emit("programmaticScrollEnd"),l=r},50),i.emit("programmaticScroll"))}),i.on("programmaticScrollStart",()=>{i.container.style.scrollSnapType="none"}),i.on("nativeScrollStart",()=>{i.container.style.scrollSnapType=""});let h=!1;i.container.addEventListener("mousedown",()=>{h=!0}),i.container.addEventListener("touchstart",()=>{h=!0},{passive:!0}),i.container.addEventListener("focusin",t=>{if(!h){let e=t.target;for(;e.parentElement!==i.container&&e.parentElement;)e=e.parentElement;f(e,"auto")}h=!1})}(),d(),c(),l){for(const t of l)t(i);a(),h(),c(),i.emit("pluginsLoaded")}i.on("detailsChanged",()=>{d(),c()}),i.emit("created"),i.slides.forEach(t=>{t.style.removeProperty("transition")}),i.container.setAttribute("data-ready","true")}(),i}exports.OverflowSlider=function(t,e,n){try{if(!(t instanceof Element))throw new Error("Container must be HTML element, found "+typeof t);const l={cssVariableContainer:t,scrollBehavior:"smooth",scrollStrategy:"fullSlide",slidesSelector:":scope > *",emulateScrollSnap:!1,emulateScrollSnapMaxThreshold:64,rtl:!1},i=Object.assign(Object.assign({},l),e);return window.matchMedia("(prefers-reduced-motion: reduce)").matches&&(i.scrollBehavior="auto"),o(t,i,n)}catch(t){console.error(t)}};
1
+ "use strict";function t(e,o=1){const n=`${e}-${o}`;return document.getElementById(n)?t(e,o+1):n}function e(t){if(0===t.children.length)return 0;const e=t.children[0],o=getComputedStyle(e),n=parseFloat(o.marginLeft),l=t.children[t.children.length-1],i=getComputedStyle(l);return n+parseFloat(i.marginRight)}function o(o,n,l){let i,r={};function a(t=!1){const e=i.details,o=function(t){var e;let o,n=!1,l=0,i=0,r=0,a=0,c=0,s=0;if(Math.floor(t.getInclusiveScrollWidth())>Math.floor(t.getInclusiveClientWidth())&&(n=!0),l=null!==(e=t.slides.length)&&void 0!==e?e:0,i=t.container.offsetWidth,r=t.container.offsetHeight,a=t.getInclusiveScrollWidth(),c=Math.ceil(a/i),Math.floor(t.getScrollLeft())>=0){s=Math.floor(t.getScrollLeft()/i);const e=a-i-2*t.getLeftOffset();t.getScrollLeft()>=e-1&&(s=c-1)}return o={hasOverflow:n,slideCount:l,containerWidth:i,containerHeight:r,scrollableAreaWidth:a,amountOfPages:c,currentPage:s},o}(i);i.details=o,t||function(t,e){const o=Object.keys(t),n=Object.keys(e);if(o.length!==n.length)return!1;for(let n of o)if(!Object.prototype.hasOwnProperty.call(e,n)||t[n]!==e[n])return!1;return!0}(e,o)?t&&i.emit("detailsChanged"):i.emit("detailsChanged")}function c(){i.slides=Array.from(i.container.querySelectorAll(i.options.slidesSelector))}function s(){i.options.cssVariableContainer.style.setProperty("--slider-container-height",`${i.details.containerHeight}px`),i.options.cssVariableContainer.style.setProperty("--slider-container-width",`${i.details.containerWidth}px`),i.options.cssVariableContainer.style.setProperty("--slider-scrollable-width",`${i.details.scrollableAreaWidth}px`),i.options.cssVariableContainer.style.setProperty("--slider-slides-count",`${i.details.slideCount}`),i.options.cssVariableContainer.style.setProperty("--slider-x-offset",`${m()}px`),"function"==typeof i.options.targetWidth&&i.options.cssVariableContainer.style.setProperty("--slider-container-target-width",`${i.options.targetWidth(i)}px`)}function f(){i.container.setAttribute("data-has-overflow",i.details.hasOverflow?"true":"false"),i.options.rtl&&i.container.setAttribute("dir","rtl")}function d(){const t=i.container.getBoundingClientRect(),e=i.getScrollLeft(),o=i.slides;let n=0,l=!1;if(i.options.rtl){const l=i.getInclusiveScrollWidth()-e-i.getInclusiveClientWidth(),r=[];for(let e=o.length-1;e>=0;e--){const n=o[e].getBoundingClientRect(),i=Math.abs(n.left)-Math.abs(t.left)+l;r.push({slide:o[e],slideEnd:i})}let a=null,c=null;for(let t=0;t<r.length;t++){const e=Math.abs(r[t].slideEnd-l);(null===c||e<c)&&(c=e,a=r[t].slide)}n=a?o.indexOf(a):o.length-1}else for(let i=0;i<o.length;i++){const r=o[i].getBoundingClientRect().left-t.left+e+g();if(Math.floor(r)>=Math.floor(e)){n=i;break}i===o.length-1&&(l=!0)}l&&(n=o.length-1);const r=i.activeSlideIdx;i.activeSlideIdx=n,r!==n&&i.emit("activeSlideChanged")}function h(t){const e=i.slides[t];e&&function(t,e=null){const o=e||i.options.scrollBehavior,n=t.getBoundingClientRect(),l=i.container.getBoundingClientRect(),r=i.container.offsetWidth,a=i.container.scrollLeft,c=n.left-l.left+a,s=c+n.width;let f=null;f=Math.floor(c)<Math.floor(a)?c:Math.floor(s)>Math.floor(a)+Math.floor(r)?s-r:0===Math.floor(c)?0:c,null!==f&&setTimeout(t=>{i.emit("programmaticScrollStart"),i.container.scrollTo({left:t,behavior:o})},50,f)}(e)}function u(){return i.options.rtl?Math.abs(i.container.scrollLeft):i.container.scrollLeft}function g(){let t=0;if(i.slides.length>1){const e=i.slides[0].getBoundingClientRect(),o=i.slides[1].getBoundingClientRect();t=i.options.rtl?Math.abs(Math.floor(o.right-e.left)):Math.floor(o.left-e.right)}return t}function m(){let t=0;const e=i.container.getAttribute("data-full-width-offset");return e&&(t=parseInt(e)),Math.floor(t)}return i={emit:function(t){var e;r&&r[t]&&r[t].forEach(t=>{t(i)});const o=null===(e=null==i?void 0:i.options)||void 0===e?void 0:e[t];"function"==typeof o&&o(i)},moveToDirection:function(t="prev"){const e=i.options.scrollStrategy,o=i.container.scrollLeft,n=i.container.getBoundingClientRect(),l=i.container.offsetWidth;let r=o;const a=i.options.rtl?"prev"===t?"next":"prev":t;if("prev"===a?r=Math.max(0,o-i.container.offsetWidth):"next"===a&&(r=Math.min(i.getInclusiveScrollWidth(),o+i.container.offsetWidth)),"fullSlide"===e){let t=null;if(t="prev"===a?Math.max(0,r-g()):Math.min(i.getInclusiveScrollWidth(),r+g()),"next"===a){let e=!1;for(let l of i.slides){const i=l.getBoundingClientRect(),a=i.left-n.left+o,c=a+i.width;if(Math.floor(a)<Math.floor(r)&&Math.floor(c)>Math.floor(r)){t=a,e=!0;break}}if(e||(t=Math.min(r,i.getInclusiveScrollWidth()-i.container.offsetWidth)),t)if(Math.floor(t)>Math.floor(o)){const e=Math.floor(i.getInclusiveScrollWidth())-Math.floor(l);r=Math.min(t,e)}else r=Math.min(i.getInclusiveScrollWidth(),o+l)}else{let e=!1;for(let r of i.slides){const i=r.getBoundingClientRect(),a=i.left-n.left+o,c=a+i.width;if(Math.floor(a)<Math.floor(o)&&Math.floor(c)>Math.floor(o)){t=c-l,e=!0;break}}e||(t=Math.max(0,o-l)),t&&Math.floor(t)<Math.floor(o)&&(r=t)}}const c=r-m();Math.floor(c)>=0&&(r=c),i.emit("programmaticScrollStart"),i.container.style.scrollBehavior=i.options.scrollBehavior,i.container.scrollLeft=r,setTimeout(()=>i.container.style.scrollBehavior="",50)},canMoveToSlide:function(t){if(t<0||t>=i.slides.length)return!1;if(t===i.activeSlideIdx)return!1;const e=(i.options.rtl,t<i.activeSlideIdx?"backwards":"forwards"),o=i.container.getBoundingClientRect(),n=i.getScrollLeft(),l=i.details.containerWidth;return i.slides.some((t,r)=>{if(r===i.activeSlideIdx)return!1;const a=t.getBoundingClientRect(),c=a.left-o.left+n,s=c+a.width;return i.options.rtl?!(0!==n||!i.details.hasOverflow)||("forwards"===e&&r>i.activeSlideIdx&&Math.floor(c)<Math.floor(n)||"backwards"===e&&r<i.activeSlideIdx&&Math.floor(s)>Math.floor(n+l)):"forwards"===e&&r>i.activeSlideIdx&&Math.floor(s)>Math.floor(n+l)||"backwards"===e&&r<i.activeSlideIdx&&Math.floor(c)<Math.floor(n)})},moveToSlide:h,moveToSlideInDirection:function(t){const e=i.activeSlideIdx;"prev"===t?e>0&&h(e-1):"next"===t&&e<i.slides.length-1&&h(e+1)},snapToClosestSlide:function(t="prev"){var e,o;const{slides:n,options:l,container:r}=i,{rtl:a,emulateScrollSnapMaxThreshold:c=10,scrollBehavior:s="smooth"}=l,f=a?"prev"===t:"next"===t,d=u(),h=r.getBoundingClientRect(),g=a?-1:1;let m=0;if("function"==typeof l.targetWidth)try{const t=l.targetWidth(i),e=h.width;Number.isFinite(t)&&t>0&&t<e&&(m=(e-t)/2)}catch(t){}const p=[...n].map(t=>{const{width:e}=t.getBoundingClientRect(),o=t.getBoundingClientRect().left-h.left+d,n=o-m,l=Math.min(n+e/2,n+c);return{start:o-m,trigger:l}});let v=null;if(f){const t=p.find(t=>d<=t.trigger);v=null!==(e=null==t?void 0:t.start)&&void 0!==e?e:null}else{const t=[...p].reverse().find(t=>d>=t.trigger);v=null!==(o=null==t?void 0:t.start)&&void 0!==o?o:null}if(null==v)return;const S=Math.max(0,Math.floor(v))*g;r.scrollTo({left:S,behavior:s})},getInclusiveScrollWidth:function(){return i.container.scrollWidth+e(i.container)},getInclusiveClientWidth:function(){return i.container.clientWidth+e(i.container)},getLeftOffset:m,getGapSize:g,getScrollLeft:u,setScrollLeft:function(t){i.container.scrollLeft=i.options.rtl?-t:t},setActiveSlideIdx:d,on:function(t,e){r[t]||(r[t]=[]),r[t].push(e)},options:n},function(){i.container=o;let e=o.getAttribute("id");null===e&&(e=t("overflow-slider"),o.setAttribute("id",e)),c(),i.slides.forEach(t=>{t.style.transition="none"}),a(!0),d(),i.on("contentsChanged",()=>{c(),a(),d()}),i.on("containerSizeChanged",()=>a());let n=0;if(i.on("scroll",()=>{n&&window.cancelAnimationFrame(n),n=window.requestAnimationFrame(()=>{a(),d()})}),function(){new MutationObserver(()=>i.emit("contentsChanged")).observe(i.container,{childList:!0});let t,e,o;new ResizeObserver(()=>i.emit("containerSizeChanged")).observe(i.container);let n=i.container.scrollLeft,l=i.container.scrollLeft,r=i.container.scrollLeft,a=!1,c=!1,s=!1;i.container.addEventListener("scroll",()=>{const e=i.container.scrollLeft;Math.floor(n)!==Math.floor(e)&&(a||(a=!0,i.emit("scrollStart")),n=e,clearTimeout(t),t=setTimeout(()=>{a=!1,i.emit("scrollEnd")},50),i.emit("scroll")),c&&f()});const f=()=>{const t=i.container.scrollLeft;Math.floor(l)===Math.floor(t)||s||(c||(i.emit("nativeScrollStart"),c=!0),i.emit("nativeScroll"),l=t,clearTimeout(e),e=setTimeout(()=>{c=!1,i.emit("nativeScrollEnd"),r=l},50))};i.container.addEventListener("touchmove",f),i.container.addEventListener("mousewheel",f),i.container.addEventListener("wheel",f),i.on("programmaticScrollStart",()=>{s=!0}),i.container.addEventListener("scroll",()=>{const t=i.container.scrollLeft;Math.floor(r)!==Math.floor(t)&&!c&&s&&(r=t,clearTimeout(o),o=setTimeout(()=>{s=!1,i.emit("programmaticScrollEnd"),l=r},50),i.emit("programmaticScroll"))}),i.on("programmaticScrollStart",()=>{i.container.style.scrollSnapType="none"}),i.on("nativeScrollStart",()=>{i.container.style.scrollSnapType=""});let d=!1;i.container.addEventListener("mousedown",()=>{d=!0}),i.container.addEventListener("touchstart",()=>{d=!0},{passive:!0}),i.container.addEventListener("focusin",t=>{if(d)return void(d=!1);if(d=!1,!i.details.hasOverflow)return;const e=t.target;let o=e;for(;o.parentElement!==i.container;){if(!o.parentElement)return;o=o.parentElement}i.emit("programmaticScrollStart"),setTimeout(()=>{!function(t,e){const o=i.options.rtl,n=i.container.getBoundingClientRect(),l=i.container.offsetWidth,r=t.getBoundingClientRect(),a=i.container.scrollLeft,c=r.left-n.left,s=r.right-n.right;if(c>=-1&&s<=1)return i.container.style.scrollSnapType="",void i.emit("programmaticScrollEnd");let f;if(r.width<=l)f=o?a+s:a+c;else if(e!==t){const t=e.getBoundingClientRect(),l=t.left-n.left,r=t.right-n.right;if(l>=-1&&r<=1)return i.container.style.scrollSnapType="",void i.emit("programmaticScrollEnd");f=(t.width,o?a+r:a+l)}else f=o?a+s:a+c;i.emit("programmaticScrollStart"),i.container.scrollTo({left:f,behavior:"auto"})}(o,e),i.emit("focusScroll")},50)})}(),f(),s(),l){for(const t of l)t(i);a(),d(),s(),i.emit("pluginsLoaded")}i.on("detailsChanged",()=>{f(),s()}),i.emit("created"),i.slides.forEach(t=>{t.style.removeProperty("transition")}),i.container.setAttribute("data-ready","true")}(),i}exports.OverflowSlider=function(t,e,n){try{if(!(t instanceof Element))throw new Error("Container must be HTML element, found "+typeof t);const l={cssVariableContainer:t,scrollBehavior:"smooth",scrollStrategy:"fullSlide",slidesSelector:":scope > *",emulateScrollSnap:!1,emulateScrollSnapMaxThreshold:64,rtl:!1},i=Object.assign(Object.assign({},l),e);return window.matchMedia("(prefers-reduced-motion: reduce)").matches&&(i.scrollBehavior="auto"),o(t,i,n)}catch(t){console.error(t)}};
2
2
  //# sourceMappingURL=index.min.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.min.js","sources":["../src/core/utils.ts","../src/core/slider.ts","../src/core/details.ts","../src/core/overflow-slider.ts"],"sourcesContent":["function generateId(prefix, i = 1) {\n const id = `${prefix}-${i}`;\n if (document.getElementById(id)) {\n return generateId(prefix, i + 1);\n }\n return id;\n}\nfunction objectsAreEqual(obj1, obj2) {\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n for (let key of keys1) {\n // Use `Object.prototype.hasOwnProperty.call` for better safety\n if (!Object.prototype.hasOwnProperty.call(obj2, key) || obj1[key] !== obj2[key]) {\n return false;\n }\n }\n return true;\n}\nfunction getOutermostChildrenEdgeMarginSum(el) {\n if (el.children.length === 0) {\n return 0;\n }\n // get the first child and its left margin\n const firstChild = el.children[0];\n const firstChildStyle = getComputedStyle(firstChild);\n const firstChildMarginLeft = parseFloat(firstChildStyle.marginLeft);\n // Get the last child and its right margin\n const lastChild = el.children[el.children.length - 1];\n const lastChildStyle = getComputedStyle(lastChild);\n const lastChildMarginRight = parseFloat(lastChildStyle.marginRight);\n return firstChildMarginLeft + lastChildMarginRight;\n}\nexport { generateId, objectsAreEqual, getOutermostChildrenEdgeMarginSum };\n","import details from './details';\nimport { generateId, objectsAreEqual, getOutermostChildrenEdgeMarginSum } from './utils';\nexport default function Slider(container, options, plugins) {\n let slider;\n let subs = {};\n const overrideTransitions = () => {\n slider.slides.forEach((slide) => {\n slide.style.transition = 'none';\n });\n };\n const restoreTransitions = () => {\n slider.slides.forEach((slide) => {\n slide.style.removeProperty('transition');\n });\n };\n function init() {\n slider.container = container;\n // ensure container has id\n let containerId = container.getAttribute('id');\n if (containerId === null) {\n containerId = generateId('overflow-slider');\n container.setAttribute('id', containerId);\n }\n setSlides();\n // CSS transitions can cause delays for calculations\n overrideTransitions();\n setDetails(true);\n setActiveSlideIdx();\n slider.on('contentsChanged', () => {\n setSlides();\n setDetails();\n setActiveSlideIdx();\n });\n slider.on('containerSizeChanged', () => setDetails());\n let requestId = 0;\n const setDetailsDebounce = () => {\n if (requestId) {\n window.cancelAnimationFrame(requestId);\n }\n requestId = window.requestAnimationFrame(() => {\n setDetails();\n setActiveSlideIdx();\n });\n };\n slider.on('scroll', setDetailsDebounce);\n addEventListeners();\n setDataAttributes();\n setCSSVariables();\n if (plugins) {\n for (const plugin of plugins) {\n plugin(slider);\n }\n // plugins may mutate layout: refresh details and derived data after they run\n // setTimeout( () => {\n setDetails();\n setActiveSlideIdx();\n setCSSVariables();\n slider.emit('pluginsLoaded');\n // }, 250 );\n }\n slider.on('detailsChanged', () => {\n setDataAttributes();\n setCSSVariables();\n });\n slider.emit('created');\n restoreTransitions();\n slider.container.setAttribute('data-ready', 'true');\n }\n ;\n function setDetails(isInit = false) {\n const oldDetails = slider.details;\n const newDetails = details(slider);\n slider.details = newDetails;\n if (!isInit && !objectsAreEqual(oldDetails, newDetails)) {\n slider.emit('detailsChanged');\n }\n else if (isInit) {\n slider.emit('detailsChanged');\n }\n }\n ;\n function setSlides() {\n slider.slides = Array.from(slider.container.querySelectorAll(slider.options.slidesSelector));\n }\n function addEventListeners() {\n // changes to DOM\n const observer = new MutationObserver(() => slider.emit('contentsChanged'));\n observer.observe(slider.container, { childList: true });\n // container size changes\n const resizeObserver = new ResizeObserver(() => slider.emit('containerSizeChanged'));\n resizeObserver.observe(slider.container);\n // scroll event with debouncing\n let scrollTimeout;\n let nativeScrollTimeout;\n let programmaticScrollTimeout;\n let scrollLeft = slider.container.scrollLeft;\n let nativeScrollLeft = slider.container.scrollLeft;\n let programmaticScrollLeft = slider.container.scrollLeft;\n let isScrolling = false;\n let isUserScrolling = false;\n let isProgrammaticScrolling = false;\n // all types of scroll\n slider.container.addEventListener('scroll', () => {\n const newScrollLeft = slider.container.scrollLeft;\n if (Math.floor(scrollLeft) !== Math.floor(newScrollLeft)) {\n if (!isScrolling) {\n isScrolling = true;\n slider.emit('scrollStart');\n }\n scrollLeft = newScrollLeft;\n clearTimeout(scrollTimeout);\n scrollTimeout = setTimeout(() => {\n isScrolling = false;\n slider.emit('scrollEnd');\n }, 50);\n slider.emit('scroll');\n }\n // keep up nativeScrolling to take into account scroll-snap\n if (isUserScrolling) {\n nativeScrollHandler();\n }\n });\n // user initted scroll (touchmove, mouse wheel, etc.)\n const nativeScrollHandler = () => {\n const newScrollLeft = slider.container.scrollLeft;\n if (Math.floor(nativeScrollLeft) !== Math.floor(newScrollLeft) && !isProgrammaticScrolling) {\n if (!isUserScrolling) {\n slider.emit('nativeScrollStart');\n isUserScrolling = true;\n }\n slider.emit('nativeScroll');\n nativeScrollLeft = newScrollLeft;\n clearTimeout(nativeScrollTimeout);\n nativeScrollTimeout = setTimeout(() => {\n isUserScrolling = false;\n slider.emit('nativeScrollEnd');\n // update programmaticScrollLeft to match nativeScrollLeft\n // this prevents programmaticScroll triggering with no real change to scrollLeft\n programmaticScrollLeft = nativeScrollLeft;\n }, 50);\n }\n };\n slider.container.addEventListener('touchmove', nativeScrollHandler);\n slider.container.addEventListener('mousewheel', nativeScrollHandler);\n slider.container.addEventListener('wheel', nativeScrollHandler);\n // programmatic scroll (scrollTo, etc.)\n slider.on('programmaticScrollStart', () => {\n isProgrammaticScrolling = true;\n });\n slider.container.addEventListener('scroll', () => {\n const newScrollLeft = slider.container.scrollLeft;\n if (Math.floor(programmaticScrollLeft) !== Math.floor(newScrollLeft) && !isUserScrolling && isProgrammaticScrolling) {\n programmaticScrollLeft = newScrollLeft;\n clearTimeout(programmaticScrollTimeout);\n programmaticScrollTimeout = setTimeout(() => {\n isProgrammaticScrolling = false;\n slider.emit('programmaticScrollEnd');\n // update nativeScrollLeft to match programmaticScrollLeft\n // this prevents nativeScroll triggering with no real change to scrollLeft\n nativeScrollLeft = programmaticScrollLeft;\n }, 50);\n slider.emit('programmaticScroll');\n }\n });\n // Fix issues on scroll snapping not working on programmatic scroll (it's not smooth)\n // by disabling scroll snap if scrolling is programmatic\n slider.on('programmaticScrollStart', () => {\n slider.container.style.scrollSnapType = 'none';\n });\n // restore scroll snap if user scroll starts\n slider.on('nativeScrollStart', () => {\n slider.container.style.scrollSnapType = '';\n });\n // Listen for mouse down and touch start events on the document\n // This handles both mouse clicks and touch interactions\n let wasInteractedWith = false;\n slider.container.addEventListener('mousedown', () => {\n wasInteractedWith = true;\n });\n slider.container.addEventListener('touchstart', () => {\n wasInteractedWith = true;\n }, { passive: true });\n slider.container.addEventListener('focusin', (e) => {\n // move target parents as long as they are not the container\n // but only if focus didn't start from mouse or touch\n if (!wasInteractedWith) {\n let target = e.target;\n while (target.parentElement !== slider.container) {\n if (target.parentElement) {\n target = target.parentElement;\n }\n else {\n break;\n }\n }\n ensureSlideIsInView(target, 'auto');\n }\n wasInteractedWith = false;\n });\n }\n ;\n function setCSSVariables() {\n slider.options.cssVariableContainer.style.setProperty('--slider-container-height', `${slider.details.containerHeight}px`);\n slider.options.cssVariableContainer.style.setProperty('--slider-container-width', `${slider.details.containerWidth}px`);\n slider.options.cssVariableContainer.style.setProperty('--slider-scrollable-width', `${slider.details.scrollableAreaWidth}px`);\n slider.options.cssVariableContainer.style.setProperty('--slider-slides-count', `${slider.details.slideCount}`);\n slider.options.cssVariableContainer.style.setProperty('--slider-x-offset', `${getLeftOffset()}px`);\n if (typeof slider.options.targetWidth === 'function') {\n slider.options.cssVariableContainer.style.setProperty('--slider-container-target-width', `${slider.options.targetWidth(slider)}px`);\n }\n }\n function setDataAttributes() {\n slider.container.setAttribute('data-has-overflow', slider.details.hasOverflow ? 'true' : 'false');\n if (slider.options.rtl) {\n slider.container.setAttribute('dir', 'rtl');\n }\n }\n function ensureSlideIsInView(slide, scrollBehavior = null) {\n const behavior = scrollBehavior || slider.options.scrollBehavior;\n const slideRect = slide.getBoundingClientRect();\n const sliderRect = slider.container.getBoundingClientRect();\n const containerWidth = slider.container.offsetWidth;\n const scrollLeft = slider.container.scrollLeft;\n const slideStart = slideRect.left - sliderRect.left + scrollLeft;\n const slideEnd = slideStart + slideRect.width;\n let scrollTarget = null;\n if (Math.floor(slideStart) < Math.floor(scrollLeft)) {\n scrollTarget = slideStart;\n }\n else if (Math.floor(slideEnd) > Math.floor(scrollLeft) + Math.floor(containerWidth)) {\n scrollTarget = slideEnd - containerWidth;\n }\n else if (Math.floor(slideStart) === 0) {\n scrollTarget = 0;\n }\n else {\n scrollTarget = slideStart;\n }\n if (scrollTarget !== null) {\n setTimeout((scrollTarget) => {\n slider.emit('programmaticScrollStart');\n slider.container.scrollTo({ left: scrollTarget, behavior: behavior });\n }, 50, scrollTarget);\n }\n }\n ;\n function setActiveSlideIdx() {\n const sliderRect = slider.container.getBoundingClientRect();\n const scrollLeft = slider.getScrollLeft();\n const slides = slider.slides;\n let activeSlideIdx = 0;\n let scrolledPastLastSlide = false;\n if (slider.options.rtl) {\n const scrolledDistance = slider.getInclusiveScrollWidth() - scrollLeft - slider.getInclusiveClientWidth();\n const slidePositions = [];\n for (let i = slides.length - 1; i >= 0; i--) {\n const slideRect = slides[i].getBoundingClientRect();\n const slideEnd = Math.abs(slideRect.left) - Math.abs(sliderRect.left) + scrolledDistance;\n slidePositions.push({\n slide: slides[i],\n slideEnd: slideEnd,\n });\n }\n let closestSlide = null;\n let closestDistance = null;\n for (let i = 0; i < slidePositions.length; i++) {\n const distance = Math.abs(slidePositions[i].slideEnd - scrolledDistance);\n if (closestDistance === null || distance < closestDistance) {\n closestDistance = distance;\n closestSlide = slidePositions[i].slide;\n }\n }\n if (closestSlide) {\n activeSlideIdx = slides.indexOf(closestSlide);\n }\n else {\n activeSlideIdx = slides.length - 1;\n }\n }\n else {\n for (let i = 0; i < slides.length; i++) {\n const slideRect = slides[i].getBoundingClientRect();\n const slideStart = slideRect.left - sliderRect.left + scrollLeft + getGapSize();\n if (Math.floor(slideStart) >= Math.floor(scrollLeft)) {\n activeSlideIdx = i;\n break;\n }\n if (i === slides.length - 1) {\n scrolledPastLastSlide = true;\n }\n }\n }\n if (scrolledPastLastSlide) {\n activeSlideIdx = slides.length - 1;\n }\n const oldActiveSlideIdx = slider.activeSlideIdx;\n slider.activeSlideIdx = activeSlideIdx;\n if (oldActiveSlideIdx !== activeSlideIdx) {\n slider.emit('activeSlideChanged');\n }\n }\n function moveToSlide(idx) {\n const slide = slider.slides[idx];\n if (slide) {\n ensureSlideIsInView(slide);\n }\n }\n ;\n function canMoveToSlide(idx) {\n if (idx < 0 || idx >= slider.slides.length) {\n return false;\n }\n if (idx === slider.activeSlideIdx) {\n return false;\n }\n const direction = slider.options.rtl ? (idx < slider.activeSlideIdx ? 'backwards' : 'forwards') : (idx < slider.activeSlideIdx ? 'backwards' : 'forwards');\n // check if the slide is already in view\n const sliderRect = slider.container.getBoundingClientRect();\n const scrollLeft = slider.getScrollLeft();\n const containerWidth = slider.details.containerWidth;\n const hasUpcomingContent = slider.slides.some((s, i) => {\n if (i === slider.activeSlideIdx) {\n return false; // skip the slide we are checking\n }\n const sRect = s.getBoundingClientRect();\n const sStart = sRect.left - sliderRect.left + scrollLeft;\n const sEnd = sStart + sRect.width;\n if (slider.options.rtl) {\n if (scrollLeft === 0 && slider.details.hasOverflow) {\n return true;\n }\n return (direction === 'forwards' && i > slider.activeSlideIdx && Math.floor(sStart) < Math.floor(scrollLeft)) ||\n (direction === 'backwards' && i < slider.activeSlideIdx && Math.floor(sEnd) > Math.floor(scrollLeft + containerWidth));\n }\n else {\n return (direction === 'forwards' && i > slider.activeSlideIdx && Math.floor(sEnd) > Math.floor(scrollLeft + containerWidth)) ||\n (direction === 'backwards' && i < slider.activeSlideIdx && Math.floor(sStart) < Math.floor(scrollLeft));\n }\n });\n return hasUpcomingContent;\n }\n function moveToSlideInDirection(direction) {\n const activeSlideIdx = slider.activeSlideIdx;\n if (direction === 'prev') {\n if (activeSlideIdx > 0) {\n moveToSlide(activeSlideIdx - 1);\n }\n }\n else if (direction === 'next') {\n if (activeSlideIdx < slider.slides.length - 1) {\n moveToSlide(activeSlideIdx + 1);\n }\n }\n }\n function getInclusiveScrollWidth() {\n return slider.container.scrollWidth + getOutermostChildrenEdgeMarginSum(slider.container);\n }\n ;\n function getInclusiveClientWidth() {\n return slider.container.clientWidth + getOutermostChildrenEdgeMarginSum(slider.container);\n }\n function getScrollLeft() {\n return slider.options.rtl ? Math.abs(slider.container.scrollLeft) : slider.container.scrollLeft;\n }\n ;\n function setScrollLeft(value) {\n slider.container.scrollLeft = slider.options.rtl ? -value : value;\n }\n ;\n function getGapSize() {\n let gapSize = 0;\n if (slider.slides.length > 1) {\n const firstSlideRect = slider.slides[0].getBoundingClientRect();\n const secondSlideRect = slider.slides[1].getBoundingClientRect();\n gapSize = slider.options.rtl ? Math.abs(Math.floor(secondSlideRect.right - firstSlideRect.left)) : Math.floor(secondSlideRect.left - firstSlideRect.right);\n }\n return gapSize;\n }\n ;\n function getLeftOffset() {\n let offset = 0;\n const fullWidthOffset = slider.container.getAttribute('data-full-width-offset');\n if (fullWidthOffset) {\n offset = parseInt(fullWidthOffset);\n }\n return Math.floor(offset);\n }\n ;\n function moveToDirection(direction = \"prev\") {\n const scrollStrategy = slider.options.scrollStrategy;\n const scrollLeft = slider.container.scrollLeft;\n const sliderRect = slider.container.getBoundingClientRect();\n const containerWidth = slider.container.offsetWidth;\n let targetScrollPosition = scrollLeft;\n const realDirection = slider.options.rtl ? (direction === 'prev' ? 'next' : 'prev') : direction;\n if (realDirection === 'prev') {\n targetScrollPosition = Math.max(0, scrollLeft - slider.container.offsetWidth);\n }\n else if (realDirection === 'next') {\n targetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), scrollLeft + slider.container.offsetWidth);\n }\n if (scrollStrategy === 'fullSlide') {\n let fullSlideTargetScrollPosition = null;\n // extend targetScrollPosition to include gap\n if (realDirection === 'prev') {\n fullSlideTargetScrollPosition = Math.max(0, targetScrollPosition - getGapSize());\n }\n else {\n fullSlideTargetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), targetScrollPosition + getGapSize());\n }\n if (realDirection === 'next') {\n let partialSlideFound = false;\n for (let slide of slider.slides) {\n const slideRect = slide.getBoundingClientRect();\n const slideStart = slideRect.left - sliderRect.left + scrollLeft;\n const slideEnd = slideStart + slideRect.width;\n if (Math.floor(slideStart) < Math.floor(targetScrollPosition) && Math.floor(slideEnd) > Math.floor(targetScrollPosition)) {\n fullSlideTargetScrollPosition = slideStart;\n partialSlideFound = true;\n break;\n }\n }\n if (!partialSlideFound) {\n fullSlideTargetScrollPosition = Math.min(targetScrollPosition, slider.getInclusiveScrollWidth() - slider.container.offsetWidth);\n }\n if (fullSlideTargetScrollPosition) {\n if (Math.floor(fullSlideTargetScrollPosition) > Math.floor(scrollLeft)) {\n // make sure fullSlideTargetScrollPosition is possible considering the container width\n const maxScrollPosition = Math.floor(slider.getInclusiveScrollWidth()) - Math.floor(containerWidth);\n targetScrollPosition = Math.min(fullSlideTargetScrollPosition, maxScrollPosition);\n }\n else {\n // cannot snap to slide, move one page worth of distance\n targetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), scrollLeft + containerWidth);\n }\n }\n }\n else {\n let partialSlideFound = false;\n for (let slide of slider.slides) {\n const slideRect = slide.getBoundingClientRect();\n const slideStart = slideRect.left - sliderRect.left + scrollLeft;\n const slideEnd = slideStart + slideRect.width;\n if (Math.floor(slideStart) < Math.floor(scrollLeft) && Math.floor(slideEnd) > Math.floor(scrollLeft)) {\n fullSlideTargetScrollPosition = slideEnd - containerWidth;\n partialSlideFound = true;\n break;\n }\n }\n if (!partialSlideFound) {\n fullSlideTargetScrollPosition = Math.max(0, scrollLeft - containerWidth);\n }\n if (fullSlideTargetScrollPosition && Math.floor(fullSlideTargetScrollPosition) < Math.floor(scrollLeft)) {\n targetScrollPosition = fullSlideTargetScrollPosition;\n }\n }\n }\n // add left offset\n const offsettedTargetScrollPosition = targetScrollPosition - getLeftOffset();\n if (Math.floor(offsettedTargetScrollPosition) >= 0) {\n targetScrollPosition = offsettedTargetScrollPosition;\n }\n slider.emit('programmaticScrollStart');\n slider.container.style.scrollBehavior = slider.options.scrollBehavior;\n slider.container.scrollLeft = targetScrollPosition;\n setTimeout(() => slider.container.style.scrollBehavior = '', 50);\n }\n ;\n function snapToClosestSlide(direction = \"prev\") {\n var _a, _b;\n const { slides, options, container } = slider;\n const { rtl, emulateScrollSnapMaxThreshold = 10, scrollBehavior = 'smooth', } = options;\n const isForward = rtl ? direction === 'prev' : direction === 'next';\n const scrollPos = getScrollLeft();\n // Get container rect once (includes any CSS transforms)\n const containerRect = container.getBoundingClientRect();\n const factor = rtl ? -1 : 1;\n // Calculate target area offset if targetWidth is defined\n let targetAreaOffset = 0;\n if (typeof options.targetWidth === 'function') {\n try {\n const targetWidth = options.targetWidth(slider);\n const containerWidth = containerRect.width;\n if (Number.isFinite(targetWidth) && targetWidth > 0 && targetWidth < containerWidth) {\n targetAreaOffset = (containerWidth - targetWidth) / 2;\n }\n }\n catch (error) {\n // ignore errors, use default offset of 0\n }\n }\n // Build slide metadata\n const slideData = [...slides].map(slide => {\n const { width } = slide.getBoundingClientRect();\n const slideRect = slide.getBoundingClientRect();\n // position relative to container's left edge\n const relativeStart = (slideRect.left - containerRect.left) + scrollPos;\n // Adjust trigger point to align with target area start instead of container edge\n const alignmentPoint = relativeStart - targetAreaOffset;\n const triggerPoint = Math.min(alignmentPoint + width / 2, alignmentPoint + emulateScrollSnapMaxThreshold);\n return { start: relativeStart - targetAreaOffset, trigger: triggerPoint };\n });\n // Pick the target start based on drag direction\n let targetStart = null;\n if (isForward) {\n const found = slideData.find(item => scrollPos <= item.trigger);\n targetStart = (_a = found === null || found === void 0 ? void 0 : found.start) !== null && _a !== void 0 ? _a : null;\n }\n else {\n const found = [...slideData].reverse().find(item => scrollPos >= item.trigger);\n targetStart = (_b = found === null || found === void 0 ? void 0 : found.start) !== null && _b !== void 0 ? _b : null;\n }\n if (targetStart == null)\n return;\n // Clamp to zero and apply RTL factor\n const finalLeft = Math.max(0, Math.floor(targetStart)) * factor;\n container.scrollTo({ left: finalLeft, behavior: scrollBehavior });\n }\n function on(name, cb) {\n if (!subs[name]) {\n subs[name] = [];\n }\n subs[name].push(cb);\n }\n ;\n function emit(name) {\n var _a;\n if (subs && subs[name]) {\n subs[name].forEach(cb => {\n cb(slider);\n });\n }\n const optionCallBack = (_a = slider === null || slider === void 0 ? void 0 : slider.options) === null || _a === void 0 ? void 0 : _a[name];\n // Type guard to check if the option callback is a function\n if (typeof optionCallBack === 'function') {\n optionCallBack(slider); // Type assertion here\n }\n }\n ;\n slider = {\n emit,\n moveToDirection,\n canMoveToSlide,\n moveToSlide,\n moveToSlideInDirection,\n snapToClosestSlide,\n getInclusiveScrollWidth,\n getInclusiveClientWidth,\n getLeftOffset,\n getGapSize,\n getScrollLeft,\n setScrollLeft,\n setActiveSlideIdx,\n on,\n options,\n };\n init();\n return slider;\n}\n","export default function details(slider) {\n var _a;\n let instance;\n let hasOverflow = false;\n let slideCount = 0;\n let containerWidth = 0;\n let containerHeight = 0;\n let scrollableAreaWidth = 0;\n let amountOfPages = 0;\n let currentPage = 0;\n if (Math.floor(slider.getInclusiveScrollWidth()) > Math.floor(slider.getInclusiveClientWidth())) {\n hasOverflow = true;\n }\n slideCount = (_a = slider.slides.length) !== null && _a !== void 0 ? _a : 0;\n containerWidth = slider.container.offsetWidth;\n containerHeight = slider.container.offsetHeight;\n scrollableAreaWidth = slider.getInclusiveScrollWidth();\n amountOfPages = Math.ceil(scrollableAreaWidth / containerWidth);\n if (Math.floor(slider.getScrollLeft()) >= 0) {\n currentPage = Math.floor(slider.getScrollLeft() / containerWidth);\n // Consider as last page if we're within tolerance of the maximum scroll position\n // When FullWidthPlugin is active, account for the margin offset\n const maxScroll = scrollableAreaWidth - containerWidth - (2 * slider.getLeftOffset());\n if (slider.getScrollLeft() >= maxScroll - 1) {\n currentPage = amountOfPages - 1;\n }\n }\n instance = {\n hasOverflow,\n slideCount,\n containerWidth,\n containerHeight,\n scrollableAreaWidth,\n amountOfPages,\n currentPage,\n };\n return instance;\n}\n;\n","import Slider from './slider';\nexport default function OverflowSlider(container, options, plugins) {\n try {\n // check that container HTML element\n if (!(container instanceof Element)) {\n throw new Error(`Container must be HTML element, found ${typeof container}`);\n }\n const defaults = {\n cssVariableContainer: container,\n scrollBehavior: \"smooth\",\n scrollStrategy: \"fullSlide\",\n slidesSelector: \":scope > *\",\n emulateScrollSnap: false,\n emulateScrollSnapMaxThreshold: 64,\n rtl: false,\n };\n const sliderOptions = Object.assign(Object.assign({}, defaults), options);\n // disable smooth scrolling if user prefers reduced motion\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n sliderOptions.scrollBehavior = \"auto\";\n }\n return Slider(container, sliderOptions, plugins);\n }\n catch (e) {\n console.error(e);\n }\n}\n"],"names":["generateId","prefix","i","id","document","getElementById","getOutermostChildrenEdgeMarginSum","el","children","length","firstChild","firstChildStyle","getComputedStyle","firstChildMarginLeft","parseFloat","marginLeft","lastChild","lastChildStyle","marginRight","Slider","container","options","plugins","slider","subs","setDetails","isInit","oldDetails","details","newDetails","_a","instance","hasOverflow","slideCount","containerWidth","containerHeight","scrollableAreaWidth","amountOfPages","currentPage","Math","floor","getInclusiveScrollWidth","getInclusiveClientWidth","slides","offsetWidth","offsetHeight","ceil","getScrollLeft","maxScroll","getLeftOffset","obj1","obj2","keys1","Object","keys","keys2","key","prototype","hasOwnProperty","call","objectsAreEqual","emit","setSlides","Array","from","querySelectorAll","slidesSelector","setCSSVariables","cssVariableContainer","style","setProperty","targetWidth","setDataAttributes","setAttribute","rtl","ensureSlideIsInView","slide","scrollBehavior","behavior","slideRect","getBoundingClientRect","sliderRect","scrollLeft","slideStart","left","slideEnd","width","scrollTarget","setTimeout","scrollTo","setActiveSlideIdx","activeSlideIdx","scrolledPastLastSlide","scrolledDistance","slidePositions","abs","push","closestSlide","closestDistance","distance","indexOf","getGapSize","oldActiveSlideIdx","moveToSlide","idx","gapSize","firstSlideRect","secondSlideRect","right","offset","fullWidthOffset","getAttribute","parseInt","name","forEach","cb","optionCallBack","moveToDirection","direction","scrollStrategy","targetScrollPosition","realDirection","max","min","fullSlideTargetScrollPosition","partialSlideFound","maxScrollPosition","offsettedTargetScrollPosition","canMoveToSlide","some","s","sRect","sStart","sEnd","moveToSlideInDirection","snapToClosestSlide","_b","emulateScrollSnapMaxThreshold","isForward","scrollPos","containerRect","factor","targetAreaOffset","Number","isFinite","error","slideData","map","relativeStart","alignmentPoint","triggerPoint","start","trigger","targetStart","found","find","item","reverse","finalLeft","scrollWidth","clientWidth","setScrollLeft","value","on","containerId","transition","requestId","window","cancelAnimationFrame","requestAnimationFrame","MutationObserver","observe","childList","scrollTimeout","nativeScrollTimeout","programmaticScrollTimeout","ResizeObserver","nativeScrollLeft","programmaticScrollLeft","isScrolling","isUserScrolling","isProgrammaticScrolling","addEventListener","newScrollLeft","clearTimeout","nativeScrollHandler","scrollSnapType","wasInteractedWith","passive","e","target","parentElement","addEventListeners","plugin","removeProperty","init","Element","Error","defaults","emulateScrollSnap","sliderOptions","assign","matchMedia","matches","console"],"mappings":"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"}
1
+ {"version":3,"file":"index.min.js","sources":["../src/core/utils.ts","../src/core/slider.ts","../src/core/details.ts","../src/core/overflow-slider.ts"],"sourcesContent":["function generateId(prefix, i = 1) {\n const id = `${prefix}-${i}`;\n if (document.getElementById(id)) {\n return generateId(prefix, i + 1);\n }\n return id;\n}\nfunction objectsAreEqual(obj1, obj2) {\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n for (let key of keys1) {\n // Use `Object.prototype.hasOwnProperty.call` for better safety\n if (!Object.prototype.hasOwnProperty.call(obj2, key) || obj1[key] !== obj2[key]) {\n return false;\n }\n }\n return true;\n}\nfunction getOutermostChildrenEdgeMarginSum(el) {\n if (el.children.length === 0) {\n return 0;\n }\n // get the first child and its left margin\n const firstChild = el.children[0];\n const firstChildStyle = getComputedStyle(firstChild);\n const firstChildMarginLeft = parseFloat(firstChildStyle.marginLeft);\n // Get the last child and its right margin\n const lastChild = el.children[el.children.length - 1];\n const lastChildStyle = getComputedStyle(lastChild);\n const lastChildMarginRight = parseFloat(lastChildStyle.marginRight);\n return firstChildMarginLeft + lastChildMarginRight;\n}\nexport { generateId, objectsAreEqual, getOutermostChildrenEdgeMarginSum };\n","import details from './details';\nimport { generateId, objectsAreEqual, getOutermostChildrenEdgeMarginSum } from './utils';\nexport default function Slider(container, options, plugins) {\n let slider;\n let subs = {};\n const overrideTransitions = () => {\n slider.slides.forEach((slide) => {\n slide.style.transition = 'none';\n });\n };\n const restoreTransitions = () => {\n slider.slides.forEach((slide) => {\n slide.style.removeProperty('transition');\n });\n };\n function init() {\n slider.container = container;\n // ensure container has id\n let containerId = container.getAttribute('id');\n if (containerId === null) {\n containerId = generateId('overflow-slider');\n container.setAttribute('id', containerId);\n }\n setSlides();\n // CSS transitions can cause delays for calculations\n overrideTransitions();\n setDetails(true);\n setActiveSlideIdx();\n slider.on('contentsChanged', () => {\n setSlides();\n setDetails();\n setActiveSlideIdx();\n });\n slider.on('containerSizeChanged', () => setDetails());\n let requestId = 0;\n const setDetailsDebounce = () => {\n if (requestId) {\n window.cancelAnimationFrame(requestId);\n }\n requestId = window.requestAnimationFrame(() => {\n setDetails();\n setActiveSlideIdx();\n });\n };\n slider.on('scroll', setDetailsDebounce);\n addEventListeners();\n setDataAttributes();\n setCSSVariables();\n if (plugins) {\n for (const plugin of plugins) {\n plugin(slider);\n }\n // plugins may mutate layout: refresh details and derived data after they run\n // setTimeout( () => {\n setDetails();\n setActiveSlideIdx();\n setCSSVariables();\n slider.emit('pluginsLoaded');\n // }, 250 );\n }\n slider.on('detailsChanged', () => {\n setDataAttributes();\n setCSSVariables();\n });\n slider.emit('created');\n restoreTransitions();\n slider.container.setAttribute('data-ready', 'true');\n }\n ;\n function setDetails(isInit = false) {\n const oldDetails = slider.details;\n const newDetails = details(slider);\n slider.details = newDetails;\n if (!isInit && !objectsAreEqual(oldDetails, newDetails)) {\n slider.emit('detailsChanged');\n }\n else if (isInit) {\n slider.emit('detailsChanged');\n }\n }\n ;\n function setSlides() {\n slider.slides = Array.from(slider.container.querySelectorAll(slider.options.slidesSelector));\n }\n function addEventListeners() {\n // changes to DOM\n const observer = new MutationObserver(() => slider.emit('contentsChanged'));\n observer.observe(slider.container, { childList: true });\n // container size changes\n const resizeObserver = new ResizeObserver(() => slider.emit('containerSizeChanged'));\n resizeObserver.observe(slider.container);\n // scroll event with debouncing\n let scrollTimeout;\n let nativeScrollTimeout;\n let programmaticScrollTimeout;\n let scrollLeft = slider.container.scrollLeft;\n let nativeScrollLeft = slider.container.scrollLeft;\n let programmaticScrollLeft = slider.container.scrollLeft;\n let isScrolling = false;\n let isUserScrolling = false;\n let isProgrammaticScrolling = false;\n // all types of scroll\n slider.container.addEventListener('scroll', () => {\n const newScrollLeft = slider.container.scrollLeft;\n if (Math.floor(scrollLeft) !== Math.floor(newScrollLeft)) {\n if (!isScrolling) {\n isScrolling = true;\n slider.emit('scrollStart');\n }\n scrollLeft = newScrollLeft;\n clearTimeout(scrollTimeout);\n scrollTimeout = setTimeout(() => {\n isScrolling = false;\n slider.emit('scrollEnd');\n }, 50);\n slider.emit('scroll');\n }\n // keep up nativeScrolling to take into account scroll-snap\n if (isUserScrolling) {\n nativeScrollHandler();\n }\n });\n // user initted scroll (touchmove, mouse wheel, etc.)\n const nativeScrollHandler = () => {\n const newScrollLeft = slider.container.scrollLeft;\n if (Math.floor(nativeScrollLeft) !== Math.floor(newScrollLeft) && !isProgrammaticScrolling) {\n if (!isUserScrolling) {\n slider.emit('nativeScrollStart');\n isUserScrolling = true;\n }\n slider.emit('nativeScroll');\n nativeScrollLeft = newScrollLeft;\n clearTimeout(nativeScrollTimeout);\n nativeScrollTimeout = setTimeout(() => {\n isUserScrolling = false;\n slider.emit('nativeScrollEnd');\n // update programmaticScrollLeft to match nativeScrollLeft\n // this prevents programmaticScroll triggering with no real change to scrollLeft\n programmaticScrollLeft = nativeScrollLeft;\n }, 50);\n }\n };\n slider.container.addEventListener('touchmove', nativeScrollHandler);\n slider.container.addEventListener('mousewheel', nativeScrollHandler);\n slider.container.addEventListener('wheel', nativeScrollHandler);\n // programmatic scroll (scrollTo, etc.)\n slider.on('programmaticScrollStart', () => {\n isProgrammaticScrolling = true;\n });\n slider.container.addEventListener('scroll', () => {\n const newScrollLeft = slider.container.scrollLeft;\n if (Math.floor(programmaticScrollLeft) !== Math.floor(newScrollLeft) && !isUserScrolling && isProgrammaticScrolling) {\n programmaticScrollLeft = newScrollLeft;\n clearTimeout(programmaticScrollTimeout);\n programmaticScrollTimeout = setTimeout(() => {\n isProgrammaticScrolling = false;\n slider.emit('programmaticScrollEnd');\n // update nativeScrollLeft to match programmaticScrollLeft\n // this prevents nativeScroll triggering with no real change to scrollLeft\n nativeScrollLeft = programmaticScrollLeft;\n }, 50);\n slider.emit('programmaticScroll');\n }\n });\n // Fix issues on scroll snapping not working on programmatic scroll (it's not smooth)\n // by disabling scroll snap if scrolling is programmatic\n slider.on('programmaticScrollStart', () => {\n slider.container.style.scrollSnapType = 'none';\n });\n // restore scroll snap if user scroll starts\n slider.on('nativeScrollStart', () => {\n slider.container.style.scrollSnapType = '';\n });\n // Listen for mouse down and touch start events on the document\n // This handles both mouse clicks and touch interactions\n let wasInteractedWith = false;\n slider.container.addEventListener('mousedown', () => {\n wasInteractedWith = true;\n });\n slider.container.addEventListener('touchstart', () => {\n wasInteractedWith = true;\n }, { passive: true });\n slider.container.addEventListener('focusin', (e) => {\n // Only handle keyboard-initiated focus (not mouse or touch)\n if (wasInteractedWith) {\n wasInteractedWith = false;\n return;\n }\n wasInteractedWith = false;\n // No scrolling needed if there is no overflow\n if (!slider.details.hasOverflow) {\n return;\n }\n const focusedElement = e.target;\n // Walk up from the focused element to find the direct child (slide) of the container\n let slide = focusedElement;\n while (slide.parentElement !== slider.container) {\n if (slide.parentElement) {\n slide = slide.parentElement;\n }\n else {\n // Focused element is not inside the slider container\n return;\n }\n }\n // Emit programmaticScrollStart immediately so the browser's native focus\n // scroll events are classified as programmatic (not native). This prevents\n // nativeScrollStart from restoring scrollSnapType and fighting our correction.\n slider.emit('programmaticScrollStart');\n // Use setTimeout to let the browser's native focus scroll complete,\n // then override with our WCAG-compliant scroll positioning\n setTimeout(() => {\n scrollFocusedSlideIntoView(slide, focusedElement);\n slider.emit('focusScroll');\n }, 50);\n });\n }\n ;\n function setCSSVariables() {\n slider.options.cssVariableContainer.style.setProperty('--slider-container-height', `${slider.details.containerHeight}px`);\n slider.options.cssVariableContainer.style.setProperty('--slider-container-width', `${slider.details.containerWidth}px`);\n slider.options.cssVariableContainer.style.setProperty('--slider-scrollable-width', `${slider.details.scrollableAreaWidth}px`);\n slider.options.cssVariableContainer.style.setProperty('--slider-slides-count', `${slider.details.slideCount}`);\n slider.options.cssVariableContainer.style.setProperty('--slider-x-offset', `${getLeftOffset()}px`);\n if (typeof slider.options.targetWidth === 'function') {\n slider.options.cssVariableContainer.style.setProperty('--slider-container-target-width', `${slider.options.targetWidth(slider)}px`);\n }\n }\n function setDataAttributes() {\n slider.container.setAttribute('data-has-overflow', slider.details.hasOverflow ? 'true' : 'false');\n if (slider.options.rtl) {\n slider.container.setAttribute('dir', 'rtl');\n }\n }\n function ensureSlideIsInView(slide, scrollBehavior = null) {\n const behavior = scrollBehavior || slider.options.scrollBehavior;\n const slideRect = slide.getBoundingClientRect();\n const sliderRect = slider.container.getBoundingClientRect();\n const containerWidth = slider.container.offsetWidth;\n const scrollLeft = slider.container.scrollLeft;\n const slideStart = slideRect.left - sliderRect.left + scrollLeft;\n const slideEnd = slideStart + slideRect.width;\n let scrollTarget = null;\n if (Math.floor(slideStart) < Math.floor(scrollLeft)) {\n scrollTarget = slideStart;\n }\n else if (Math.floor(slideEnd) > Math.floor(scrollLeft) + Math.floor(containerWidth)) {\n scrollTarget = slideEnd - containerWidth;\n }\n else if (Math.floor(slideStart) === 0) {\n scrollTarget = 0;\n }\n else {\n scrollTarget = slideStart;\n }\n if (scrollTarget !== null) {\n setTimeout((scrollTarget) => {\n slider.emit('programmaticScrollStart');\n slider.container.scrollTo({ left: scrollTarget, behavior: behavior });\n }, 50, scrollTarget);\n }\n }\n ;\n /**\n * Scrolls a focused slide (or child element) into view for WCAG AA compliance.\n * Priority:\n * 1. Show the full slide if it fits in the container\n * 2. If the slide is wider than the container, show the focused element\n * 3. If neither fits, align the leading edge (left for LTR, right for RTL)\n */\n function scrollFocusedSlideIntoView(slide, focusedElement) {\n const isRtl = slider.options.rtl;\n const containerRect = slider.container.getBoundingClientRect();\n const containerWidth = slider.container.offsetWidth;\n const slideRect = slide.getBoundingClientRect();\n const scrollLeft = slider.container.scrollLeft;\n // Calculate visual offsets relative to the container viewport\n const slideLeftOffset = slideRect.left - containerRect.left;\n const slideRightOffset = slideRect.right - containerRect.right;\n // Check if slide is already fully visible (1px tolerance for sub-pixel rounding)\n if (slideLeftOffset >= -1 && slideRightOffset <= 1) {\n slider.container.style.scrollSnapType = '';\n slider.emit('programmaticScrollEnd');\n return;\n }\n let scrollTarget;\n if (slideRect.width <= containerWidth) {\n // Slide fits in container — align its leading edge to show it fully\n if (isRtl) {\n // RTL: align slide's right edge with container's right edge\n scrollTarget = scrollLeft + slideRightOffset;\n }\n else {\n // LTR: align slide's left edge with container's left edge\n scrollTarget = scrollLeft + slideLeftOffset;\n }\n }\n else if (focusedElement !== slide) {\n // Slide is wider than container — try to show the focused child element\n const focusRect = focusedElement.getBoundingClientRect();\n const focusLeftOffset = focusRect.left - containerRect.left;\n const focusRightOffset = focusRect.right - containerRect.right;\n // Check if focused element is already fully visible\n if (focusLeftOffset >= -1 && focusRightOffset <= 1) {\n slider.container.style.scrollSnapType = '';\n slider.emit('programmaticScrollEnd');\n return;\n }\n if (focusRect.width <= containerWidth) {\n // Focused element fits in container — align its leading edge\n if (isRtl) {\n scrollTarget = scrollLeft + focusRightOffset;\n }\n else {\n scrollTarget = scrollLeft + focusLeftOffset;\n }\n }\n else {\n // Focused element is also wider than container — align leading edge\n if (isRtl) {\n scrollTarget = scrollLeft + focusRightOffset;\n }\n else {\n scrollTarget = scrollLeft + focusLeftOffset;\n }\n }\n }\n else {\n // Slide is the focused element and wider than container — align leading edge\n if (isRtl) {\n scrollTarget = scrollLeft + slideRightOffset;\n }\n else {\n scrollTarget = scrollLeft + slideLeftOffset;\n }\n }\n slider.emit('programmaticScrollStart');\n slider.container.scrollTo({ left: scrollTarget, behavior: 'auto' });\n }\n ;\n function setActiveSlideIdx() {\n const sliderRect = slider.container.getBoundingClientRect();\n const scrollLeft = slider.getScrollLeft();\n const slides = slider.slides;\n let activeSlideIdx = 0;\n let scrolledPastLastSlide = false;\n if (slider.options.rtl) {\n const scrolledDistance = slider.getInclusiveScrollWidth() - scrollLeft - slider.getInclusiveClientWidth();\n const slidePositions = [];\n for (let i = slides.length - 1; i >= 0; i--) {\n const slideRect = slides[i].getBoundingClientRect();\n const slideEnd = Math.abs(slideRect.left) - Math.abs(sliderRect.left) + scrolledDistance;\n slidePositions.push({\n slide: slides[i],\n slideEnd: slideEnd,\n });\n }\n let closestSlide = null;\n let closestDistance = null;\n for (let i = 0; i < slidePositions.length; i++) {\n const distance = Math.abs(slidePositions[i].slideEnd - scrolledDistance);\n if (closestDistance === null || distance < closestDistance) {\n closestDistance = distance;\n closestSlide = slidePositions[i].slide;\n }\n }\n if (closestSlide) {\n activeSlideIdx = slides.indexOf(closestSlide);\n }\n else {\n activeSlideIdx = slides.length - 1;\n }\n }\n else {\n for (let i = 0; i < slides.length; i++) {\n const slideRect = slides[i].getBoundingClientRect();\n const slideStart = slideRect.left - sliderRect.left + scrollLeft + getGapSize();\n if (Math.floor(slideStart) >= Math.floor(scrollLeft)) {\n activeSlideIdx = i;\n break;\n }\n if (i === slides.length - 1) {\n scrolledPastLastSlide = true;\n }\n }\n }\n if (scrolledPastLastSlide) {\n activeSlideIdx = slides.length - 1;\n }\n const oldActiveSlideIdx = slider.activeSlideIdx;\n slider.activeSlideIdx = activeSlideIdx;\n if (oldActiveSlideIdx !== activeSlideIdx) {\n slider.emit('activeSlideChanged');\n }\n }\n function moveToSlide(idx) {\n const slide = slider.slides[idx];\n if (slide) {\n ensureSlideIsInView(slide);\n }\n }\n ;\n function canMoveToSlide(idx) {\n if (idx < 0 || idx >= slider.slides.length) {\n return false;\n }\n if (idx === slider.activeSlideIdx) {\n return false;\n }\n const direction = slider.options.rtl ? (idx < slider.activeSlideIdx ? 'backwards' : 'forwards') : (idx < slider.activeSlideIdx ? 'backwards' : 'forwards');\n // check if the slide is already in view\n const sliderRect = slider.container.getBoundingClientRect();\n const scrollLeft = slider.getScrollLeft();\n const containerWidth = slider.details.containerWidth;\n const hasUpcomingContent = slider.slides.some((s, i) => {\n if (i === slider.activeSlideIdx) {\n return false; // skip the slide we are checking\n }\n const sRect = s.getBoundingClientRect();\n const sStart = sRect.left - sliderRect.left + scrollLeft;\n const sEnd = sStart + sRect.width;\n if (slider.options.rtl) {\n if (scrollLeft === 0 && slider.details.hasOverflow) {\n return true;\n }\n return (direction === 'forwards' && i > slider.activeSlideIdx && Math.floor(sStart) < Math.floor(scrollLeft)) ||\n (direction === 'backwards' && i < slider.activeSlideIdx && Math.floor(sEnd) > Math.floor(scrollLeft + containerWidth));\n }\n else {\n return (direction === 'forwards' && i > slider.activeSlideIdx && Math.floor(sEnd) > Math.floor(scrollLeft + containerWidth)) ||\n (direction === 'backwards' && i < slider.activeSlideIdx && Math.floor(sStart) < Math.floor(scrollLeft));\n }\n });\n return hasUpcomingContent;\n }\n function moveToSlideInDirection(direction) {\n const activeSlideIdx = slider.activeSlideIdx;\n if (direction === 'prev') {\n if (activeSlideIdx > 0) {\n moveToSlide(activeSlideIdx - 1);\n }\n }\n else if (direction === 'next') {\n if (activeSlideIdx < slider.slides.length - 1) {\n moveToSlide(activeSlideIdx + 1);\n }\n }\n }\n function getInclusiveScrollWidth() {\n return slider.container.scrollWidth + getOutermostChildrenEdgeMarginSum(slider.container);\n }\n ;\n function getInclusiveClientWidth() {\n return slider.container.clientWidth + getOutermostChildrenEdgeMarginSum(slider.container);\n }\n function getScrollLeft() {\n return slider.options.rtl ? Math.abs(slider.container.scrollLeft) : slider.container.scrollLeft;\n }\n ;\n function setScrollLeft(value) {\n slider.container.scrollLeft = slider.options.rtl ? -value : value;\n }\n ;\n function getGapSize() {\n let gapSize = 0;\n if (slider.slides.length > 1) {\n const firstSlideRect = slider.slides[0].getBoundingClientRect();\n const secondSlideRect = slider.slides[1].getBoundingClientRect();\n gapSize = slider.options.rtl ? Math.abs(Math.floor(secondSlideRect.right - firstSlideRect.left)) : Math.floor(secondSlideRect.left - firstSlideRect.right);\n }\n return gapSize;\n }\n ;\n function getLeftOffset() {\n let offset = 0;\n const fullWidthOffset = slider.container.getAttribute('data-full-width-offset');\n if (fullWidthOffset) {\n offset = parseInt(fullWidthOffset);\n }\n return Math.floor(offset);\n }\n ;\n function moveToDirection(direction = \"prev\") {\n const scrollStrategy = slider.options.scrollStrategy;\n const scrollLeft = slider.container.scrollLeft;\n const sliderRect = slider.container.getBoundingClientRect();\n const containerWidth = slider.container.offsetWidth;\n let targetScrollPosition = scrollLeft;\n const realDirection = slider.options.rtl ? (direction === 'prev' ? 'next' : 'prev') : direction;\n if (realDirection === 'prev') {\n targetScrollPosition = Math.max(0, scrollLeft - slider.container.offsetWidth);\n }\n else if (realDirection === 'next') {\n targetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), scrollLeft + slider.container.offsetWidth);\n }\n if (scrollStrategy === 'fullSlide') {\n let fullSlideTargetScrollPosition = null;\n // extend targetScrollPosition to include gap\n if (realDirection === 'prev') {\n fullSlideTargetScrollPosition = Math.max(0, targetScrollPosition - getGapSize());\n }\n else {\n fullSlideTargetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), targetScrollPosition + getGapSize());\n }\n if (realDirection === 'next') {\n let partialSlideFound = false;\n for (let slide of slider.slides) {\n const slideRect = slide.getBoundingClientRect();\n const slideStart = slideRect.left - sliderRect.left + scrollLeft;\n const slideEnd = slideStart + slideRect.width;\n if (Math.floor(slideStart) < Math.floor(targetScrollPosition) && Math.floor(slideEnd) > Math.floor(targetScrollPosition)) {\n fullSlideTargetScrollPosition = slideStart;\n partialSlideFound = true;\n break;\n }\n }\n if (!partialSlideFound) {\n fullSlideTargetScrollPosition = Math.min(targetScrollPosition, slider.getInclusiveScrollWidth() - slider.container.offsetWidth);\n }\n if (fullSlideTargetScrollPosition) {\n if (Math.floor(fullSlideTargetScrollPosition) > Math.floor(scrollLeft)) {\n // make sure fullSlideTargetScrollPosition is possible considering the container width\n const maxScrollPosition = Math.floor(slider.getInclusiveScrollWidth()) - Math.floor(containerWidth);\n targetScrollPosition = Math.min(fullSlideTargetScrollPosition, maxScrollPosition);\n }\n else {\n // cannot snap to slide, move one page worth of distance\n targetScrollPosition = Math.min(slider.getInclusiveScrollWidth(), scrollLeft + containerWidth);\n }\n }\n }\n else {\n let partialSlideFound = false;\n for (let slide of slider.slides) {\n const slideRect = slide.getBoundingClientRect();\n const slideStart = slideRect.left - sliderRect.left + scrollLeft;\n const slideEnd = slideStart + slideRect.width;\n if (Math.floor(slideStart) < Math.floor(scrollLeft) && Math.floor(slideEnd) > Math.floor(scrollLeft)) {\n fullSlideTargetScrollPosition = slideEnd - containerWidth;\n partialSlideFound = true;\n break;\n }\n }\n if (!partialSlideFound) {\n fullSlideTargetScrollPosition = Math.max(0, scrollLeft - containerWidth);\n }\n if (fullSlideTargetScrollPosition && Math.floor(fullSlideTargetScrollPosition) < Math.floor(scrollLeft)) {\n targetScrollPosition = fullSlideTargetScrollPosition;\n }\n }\n }\n // add left offset\n const offsettedTargetScrollPosition = targetScrollPosition - getLeftOffset();\n if (Math.floor(offsettedTargetScrollPosition) >= 0) {\n targetScrollPosition = offsettedTargetScrollPosition;\n }\n slider.emit('programmaticScrollStart');\n slider.container.style.scrollBehavior = slider.options.scrollBehavior;\n slider.container.scrollLeft = targetScrollPosition;\n setTimeout(() => slider.container.style.scrollBehavior = '', 50);\n }\n ;\n function snapToClosestSlide(direction = \"prev\") {\n var _a, _b;\n const { slides, options, container } = slider;\n const { rtl, emulateScrollSnapMaxThreshold = 10, scrollBehavior = 'smooth', } = options;\n const isForward = rtl ? direction === 'prev' : direction === 'next';\n const scrollPos = getScrollLeft();\n // Get container rect once (includes any CSS transforms)\n const containerRect = container.getBoundingClientRect();\n const factor = rtl ? -1 : 1;\n // Calculate target area offset if targetWidth is defined\n let targetAreaOffset = 0;\n if (typeof options.targetWidth === 'function') {\n try {\n const targetWidth = options.targetWidth(slider);\n const containerWidth = containerRect.width;\n if (Number.isFinite(targetWidth) && targetWidth > 0 && targetWidth < containerWidth) {\n targetAreaOffset = (containerWidth - targetWidth) / 2;\n }\n }\n catch (error) {\n // ignore errors, use default offset of 0\n }\n }\n // Build slide metadata\n const slideData = [...slides].map(slide => {\n const { width } = slide.getBoundingClientRect();\n const slideRect = slide.getBoundingClientRect();\n // position relative to container's left edge\n const relativeStart = (slideRect.left - containerRect.left) + scrollPos;\n // Adjust trigger point to align with target area start instead of container edge\n const alignmentPoint = relativeStart - targetAreaOffset;\n const triggerPoint = Math.min(alignmentPoint + width / 2, alignmentPoint + emulateScrollSnapMaxThreshold);\n return { start: relativeStart - targetAreaOffset, trigger: triggerPoint };\n });\n // Pick the target start based on drag direction\n let targetStart = null;\n if (isForward) {\n const found = slideData.find(item => scrollPos <= item.trigger);\n targetStart = (_a = found === null || found === void 0 ? void 0 : found.start) !== null && _a !== void 0 ? _a : null;\n }\n else {\n const found = [...slideData].reverse().find(item => scrollPos >= item.trigger);\n targetStart = (_b = found === null || found === void 0 ? void 0 : found.start) !== null && _b !== void 0 ? _b : null;\n }\n if (targetStart == null)\n return;\n // Clamp to zero and apply RTL factor\n const finalLeft = Math.max(0, Math.floor(targetStart)) * factor;\n container.scrollTo({ left: finalLeft, behavior: scrollBehavior });\n }\n function on(name, cb) {\n if (!subs[name]) {\n subs[name] = [];\n }\n subs[name].push(cb);\n }\n ;\n function emit(name) {\n var _a;\n if (subs && subs[name]) {\n subs[name].forEach(cb => {\n cb(slider);\n });\n }\n const optionCallBack = (_a = slider === null || slider === void 0 ? void 0 : slider.options) === null || _a === void 0 ? void 0 : _a[name];\n // Type guard to check if the option callback is a function\n if (typeof optionCallBack === 'function') {\n optionCallBack(slider); // Type assertion here\n }\n }\n ;\n slider = {\n emit,\n moveToDirection,\n canMoveToSlide,\n moveToSlide,\n moveToSlideInDirection,\n snapToClosestSlide,\n getInclusiveScrollWidth,\n getInclusiveClientWidth,\n getLeftOffset,\n getGapSize,\n getScrollLeft,\n setScrollLeft,\n setActiveSlideIdx,\n on,\n options,\n };\n init();\n return slider;\n}\n","export default function details(slider) {\n var _a;\n let instance;\n let hasOverflow = false;\n let slideCount = 0;\n let containerWidth = 0;\n let containerHeight = 0;\n let scrollableAreaWidth = 0;\n let amountOfPages = 0;\n let currentPage = 0;\n if (Math.floor(slider.getInclusiveScrollWidth()) > Math.floor(slider.getInclusiveClientWidth())) {\n hasOverflow = true;\n }\n slideCount = (_a = slider.slides.length) !== null && _a !== void 0 ? _a : 0;\n containerWidth = slider.container.offsetWidth;\n containerHeight = slider.container.offsetHeight;\n scrollableAreaWidth = slider.getInclusiveScrollWidth();\n amountOfPages = Math.ceil(scrollableAreaWidth / containerWidth);\n if (Math.floor(slider.getScrollLeft()) >= 0) {\n currentPage = Math.floor(slider.getScrollLeft() / containerWidth);\n // Consider as last page if we're within tolerance of the maximum scroll position\n // When FullWidthPlugin is active, account for the margin offset\n const maxScroll = scrollableAreaWidth - containerWidth - (2 * slider.getLeftOffset());\n if (slider.getScrollLeft() >= maxScroll - 1) {\n currentPage = amountOfPages - 1;\n }\n }\n instance = {\n hasOverflow,\n slideCount,\n containerWidth,\n containerHeight,\n scrollableAreaWidth,\n amountOfPages,\n currentPage,\n };\n return instance;\n}\n;\n","import Slider from './slider';\nexport default function OverflowSlider(container, options, plugins) {\n try {\n // check that container HTML element\n if (!(container instanceof Element)) {\n throw new Error(`Container must be HTML element, found ${typeof container}`);\n }\n const defaults = {\n cssVariableContainer: container,\n scrollBehavior: \"smooth\",\n scrollStrategy: \"fullSlide\",\n slidesSelector: \":scope > *\",\n emulateScrollSnap: false,\n emulateScrollSnapMaxThreshold: 64,\n rtl: false,\n };\n const sliderOptions = Object.assign(Object.assign({}, defaults), options);\n // disable smooth scrolling if user prefers reduced motion\n if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) {\n sliderOptions.scrollBehavior = \"auto\";\n }\n return Slider(container, sliderOptions, plugins);\n }\n catch (e) {\n console.error(e);\n }\n}\n"],"names":["generateId","prefix","i","id","document","getElementById","getOutermostChildrenEdgeMarginSum","el","children","length","firstChild","firstChildStyle","getComputedStyle","firstChildMarginLeft","parseFloat","marginLeft","lastChild","lastChildStyle","marginRight","Slider","container","options","plugins","slider","subs","setDetails","isInit","oldDetails","details","newDetails","_a","instance","hasOverflow","slideCount","containerWidth","containerHeight","scrollableAreaWidth","amountOfPages","currentPage","Math","floor","getInclusiveScrollWidth","getInclusiveClientWidth","slides","offsetWidth","offsetHeight","ceil","getScrollLeft","maxScroll","getLeftOffset","obj1","obj2","keys1","Object","keys","keys2","key","prototype","hasOwnProperty","call","objectsAreEqual","emit","setSlides","Array","from","querySelectorAll","slidesSelector","setCSSVariables","cssVariableContainer","style","setProperty","targetWidth","setDataAttributes","setAttribute","rtl","setActiveSlideIdx","sliderRect","getBoundingClientRect","scrollLeft","activeSlideIdx","scrolledPastLastSlide","scrolledDistance","slidePositions","slideRect","slideEnd","abs","left","push","slide","closestSlide","closestDistance","distance","indexOf","slideStart","getGapSize","oldActiveSlideIdx","moveToSlide","idx","scrollBehavior","behavior","width","scrollTarget","setTimeout","scrollTo","ensureSlideIsInView","gapSize","firstSlideRect","secondSlideRect","right","offset","fullWidthOffset","getAttribute","parseInt","name","forEach","cb","optionCallBack","moveToDirection","direction","scrollStrategy","targetScrollPosition","realDirection","max","min","fullSlideTargetScrollPosition","partialSlideFound","maxScrollPosition","offsettedTargetScrollPosition","canMoveToSlide","some","s","sRect","sStart","sEnd","moveToSlideInDirection","snapToClosestSlide","_b","emulateScrollSnapMaxThreshold","isForward","scrollPos","containerRect","factor","targetAreaOffset","Number","isFinite","error","slideData","map","relativeStart","alignmentPoint","triggerPoint","start","trigger","targetStart","found","find","item","reverse","finalLeft","scrollWidth","clientWidth","setScrollLeft","value","on","containerId","transition","requestId","window","cancelAnimationFrame","requestAnimationFrame","MutationObserver","observe","childList","scrollTimeout","nativeScrollTimeout","programmaticScrollTimeout","ResizeObserver","nativeScrollLeft","programmaticScrollLeft","isScrolling","isUserScrolling","isProgrammaticScrolling","addEventListener","newScrollLeft","clearTimeout","nativeScrollHandler","scrollSnapType","wasInteractedWith","passive","e","focusedElement","target","parentElement","isRtl","slideLeftOffset","slideRightOffset","focusRect","focusLeftOffset","focusRightOffset","scrollFocusedSlideIntoView","addEventListeners","plugin","removeProperty","init","Element","Error","defaults","emulateScrollSnap","sliderOptions","assign","matchMedia","matches","console"],"mappings":"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"}
@@ -58,7 +58,7 @@ type SliderDetails = {
58
58
  amountOfPages: number;
59
59
  currentPage: number;
60
60
  };
61
- type SliderHooks = HOOK_CREATED | HOOK_CONTENTS_CHANGED | HOOK_DETAILS_CHANGED | HOOK_CONTAINER_SIZE_CHANGED | HOOK_ACTIVE_SLIDE_CHANGED | HOOK_SCROLL_START | HOOK_SCROLL | HOOK_SCROLL_END | HOOK_NATIVE_SCROLL_START | HOOK_NATIVE_SCROLL | HOOK_NATIVE_SCROLL_END | HOOK_PROGRAMMATIC_SCROLL_START | HOOK_PROGRAMMATIC_SCROLL | HOOK_PROGRAMMATIC_SCROLL_END;
61
+ type SliderHooks = HOOK_CREATED | HOOK_CONTENTS_CHANGED | HOOK_DETAILS_CHANGED | HOOK_CONTAINER_SIZE_CHANGED | HOOK_ACTIVE_SLIDE_CHANGED | HOOK_SCROLL_START | HOOK_SCROLL | HOOK_SCROLL_END | HOOK_NATIVE_SCROLL_START | HOOK_NATIVE_SCROLL | HOOK_NATIVE_SCROLL_END | HOOK_PROGRAMMATIC_SCROLL_START | HOOK_PROGRAMMATIC_SCROLL | HOOK_PROGRAMMATIC_SCROLL_END | HOOK_FOCUS_SCROLL;
62
62
  type HOOK_CREATED = 'created';
63
63
  type HOOK_DETAILS_CHANGED = 'detailsChanged';
64
64
  type HOOK_CONTENTS_CHANGED = 'contentsChanged';
@@ -73,6 +73,7 @@ type HOOK_NATIVE_SCROLL_END = 'nativeScrollEnd';
73
73
  type HOOK_PROGRAMMATIC_SCROLL_START = 'programmaticScrollStart';
74
74
  type HOOK_PROGRAMMATIC_SCROLL = 'programmaticScroll';
75
75
  type HOOK_PROGRAMMATIC_SCROLL_END = 'programmaticScrollEnd';
76
+ type HOOK_FOCUS_SCROLL = 'focusScroll';
76
77
  type SliderPlugin = (slider: Slider) => void;
77
78
 
78
- export type { DeepPartial, HOOK_ACTIVE_SLIDE_CHANGED, HOOK_CONTAINER_SIZE_CHANGED, HOOK_CONTENTS_CHANGED, HOOK_CREATED, HOOK_DETAILS_CHANGED, HOOK_NATIVE_SCROLL, HOOK_NATIVE_SCROLL_END, HOOK_NATIVE_SCROLL_START, HOOK_PROGRAMMATIC_SCROLL, HOOK_PROGRAMMATIC_SCROLL_END, HOOK_PROGRAMMATIC_SCROLL_START, HOOK_SCROLL, HOOK_SCROLL_END, HOOK_SCROLL_START, Slider, SliderCallback, SliderDetails, SliderHooks, SliderOptionArgs, SliderOptions, SliderPlugin };
79
+ export type { DeepPartial, HOOK_ACTIVE_SLIDE_CHANGED, HOOK_CONTAINER_SIZE_CHANGED, HOOK_CONTENTS_CHANGED, HOOK_CREATED, HOOK_DETAILS_CHANGED, HOOK_FOCUS_SCROLL, HOOK_NATIVE_SCROLL, HOOK_NATIVE_SCROLL_END, HOOK_NATIVE_SCROLL_START, HOOK_PROGRAMMATIC_SCROLL, HOOK_PROGRAMMATIC_SCROLL_END, HOOK_PROGRAMMATIC_SCROLL_START, HOOK_SCROLL, HOOK_SCROLL_END, HOOK_SCROLL_START, Slider, SliderCallback, SliderDetails, SliderHooks, SliderOptionArgs, SliderOptions, SliderPlugin };