{"version":3,"file":"feature-showcase-5UtvJv5v.cjs","names":["isObject"],"sources":["../node_modules/embla-carousel-reactive-utils/esm/embla-carousel-reactive-utils.esm.js","../node_modules/embla-carousel/esm/embla-carousel.esm.js","../node_modules/embla-carousel-react/esm/embla-carousel-react.esm.js","../src/components/ui/feature-showcase.tsx"],"sourcesContent":["function isObject(subject) {\n  return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction isRecord(subject) {\n  return isObject(subject) || Array.isArray(subject);\n}\nfunction canUseDOM() {\n  return !!(typeof window !== 'undefined' && window.document && window.document.createElement);\n}\nfunction areOptionsEqual(optionsA, optionsB) {\n  const optionsAKeys = Object.keys(optionsA);\n  const optionsBKeys = Object.keys(optionsB);\n  if (optionsAKeys.length !== optionsBKeys.length) return false;\n  const breakpointsA = JSON.stringify(Object.keys(optionsA.breakpoints || {}));\n  const breakpointsB = JSON.stringify(Object.keys(optionsB.breakpoints || {}));\n  if (breakpointsA !== breakpointsB) return false;\n  return optionsAKeys.every(key => {\n    const valueA = optionsA[key];\n    const valueB = optionsB[key];\n    if (typeof valueA === 'function') return `${valueA}` === `${valueB}`;\n    if (!isRecord(valueA) || !isRecord(valueB)) return valueA === valueB;\n    return areOptionsEqual(valueA, valueB);\n  });\n}\nfunction sortAndMapPluginToOptions(plugins) {\n  return plugins.concat().sort((a, b) => a.name > b.name ? 1 : -1).map(plugin => plugin.options);\n}\nfunction arePluginsEqual(pluginsA, pluginsB) {\n  if (pluginsA.length !== pluginsB.length) return false;\n  const optionsA = sortAndMapPluginToOptions(pluginsA);\n  const optionsB = sortAndMapPluginToOptions(pluginsB);\n  return optionsA.every((optionA, index) => {\n    const optionB = optionsB[index];\n    return areOptionsEqual(optionA, optionB);\n  });\n}\n\nexport { areOptionsEqual, arePluginsEqual, canUseDOM, sortAndMapPluginToOptions };\n//# sourceMappingURL=embla-carousel-reactive-utils.esm.js.map\n","function isNumber(subject) {\n  return typeof subject === 'number';\n}\nfunction isString(subject) {\n  return typeof subject === 'string';\n}\nfunction isBoolean(subject) {\n  return typeof subject === 'boolean';\n}\nfunction isObject(subject) {\n  return Object.prototype.toString.call(subject) === '[object Object]';\n}\nfunction mathAbs(n) {\n  return Math.abs(n);\n}\nfunction mathSign(n) {\n  return Math.sign(n);\n}\nfunction deltaAbs(valueB, valueA) {\n  return mathAbs(valueB - valueA);\n}\nfunction factorAbs(valueB, valueA) {\n  if (valueB === 0 || valueA === 0) return 0;\n  if (mathAbs(valueB) <= mathAbs(valueA)) return 0;\n  const diff = deltaAbs(mathAbs(valueB), mathAbs(valueA));\n  return mathAbs(diff / valueB);\n}\nfunction roundToTwoDecimals(num) {\n  return Math.round(num * 100) / 100;\n}\nfunction arrayKeys(array) {\n  return objectKeys(array).map(Number);\n}\nfunction arrayLast(array) {\n  return array[arrayLastIndex(array)];\n}\nfunction arrayLastIndex(array) {\n  return Math.max(0, array.length - 1);\n}\nfunction arrayIsLastIndex(array, index) {\n  return index === arrayLastIndex(array);\n}\nfunction arrayFromNumber(n, startAt = 0) {\n  return Array.from(Array(n), (_, i) => startAt + i);\n}\nfunction objectKeys(object) {\n  return Object.keys(object);\n}\nfunction objectsMergeDeep(objectA, objectB) {\n  return [objectA, objectB].reduce((mergedObjects, currentObject) => {\n    objectKeys(currentObject).forEach(key => {\n      const valueA = mergedObjects[key];\n      const valueB = currentObject[key];\n      const areObjects = isObject(valueA) && isObject(valueB);\n      mergedObjects[key] = areObjects ? objectsMergeDeep(valueA, valueB) : valueB;\n    });\n    return mergedObjects;\n  }, {});\n}\nfunction isMouseEvent(evt, ownerWindow) {\n  return typeof ownerWindow.MouseEvent !== 'undefined' && evt instanceof ownerWindow.MouseEvent;\n}\n\nfunction Alignment(align, viewSize) {\n  const predefined = {\n    start,\n    center,\n    end\n  };\n  function start() {\n    return 0;\n  }\n  function center(n) {\n    return end(n) / 2;\n  }\n  function end(n) {\n    return viewSize - n;\n  }\n  function measure(n, index) {\n    if (isString(align)) return predefined[align](n);\n    return align(viewSize, n, index);\n  }\n  const self = {\n    measure\n  };\n  return self;\n}\n\nfunction EventStore() {\n  let listeners = [];\n  function add(node, type, handler, options = {\n    passive: true\n  }) {\n    let removeListener;\n    if ('addEventListener' in node) {\n      node.addEventListener(type, handler, options);\n      removeListener = () => node.removeEventListener(type, handler, options);\n    } else {\n      const legacyMediaQueryList = node;\n      legacyMediaQueryList.addListener(handler);\n      removeListener = () => legacyMediaQueryList.removeListener(handler);\n    }\n    listeners.push(removeListener);\n    return self;\n  }\n  function clear() {\n    listeners = listeners.filter(remove => remove());\n  }\n  const self = {\n    add,\n    clear\n  };\n  return self;\n}\n\nfunction Animations(ownerDocument, ownerWindow, update, render) {\n  const documentVisibleHandler = EventStore();\n  const fixedTimeStep = 1000 / 60;\n  let lastTimeStamp = null;\n  let accumulatedTime = 0;\n  let animationId = 0;\n  function init() {\n    documentVisibleHandler.add(ownerDocument, 'visibilitychange', () => {\n      if (ownerDocument.hidden) reset();\n    });\n  }\n  function destroy() {\n    stop();\n    documentVisibleHandler.clear();\n  }\n  function animate(timeStamp) {\n    if (!animationId) return;\n    if (!lastTimeStamp) {\n      lastTimeStamp = timeStamp;\n      update();\n      update();\n    }\n    const timeElapsed = timeStamp - lastTimeStamp;\n    lastTimeStamp = timeStamp;\n    accumulatedTime += timeElapsed;\n    while (accumulatedTime >= fixedTimeStep) {\n      update();\n      accumulatedTime -= fixedTimeStep;\n    }\n    const alpha = accumulatedTime / fixedTimeStep;\n    render(alpha);\n    if (animationId) {\n      animationId = ownerWindow.requestAnimationFrame(animate);\n    }\n  }\n  function start() {\n    if (animationId) return;\n    animationId = ownerWindow.requestAnimationFrame(animate);\n  }\n  function stop() {\n    ownerWindow.cancelAnimationFrame(animationId);\n    lastTimeStamp = null;\n    accumulatedTime = 0;\n    animationId = 0;\n  }\n  function reset() {\n    lastTimeStamp = null;\n    accumulatedTime = 0;\n  }\n  const self = {\n    init,\n    destroy,\n    start,\n    stop,\n    update,\n    render\n  };\n  return self;\n}\n\nfunction Axis(axis, contentDirection) {\n  const isRightToLeft = contentDirection === 'rtl';\n  const isVertical = axis === 'y';\n  const scroll = isVertical ? 'y' : 'x';\n  const cross = isVertical ? 'x' : 'y';\n  const sign = !isVertical && isRightToLeft ? -1 : 1;\n  const startEdge = getStartEdge();\n  const endEdge = getEndEdge();\n  function measureSize(nodeRect) {\n    const {\n      height,\n      width\n    } = nodeRect;\n    return isVertical ? height : width;\n  }\n  function getStartEdge() {\n    if (isVertical) return 'top';\n    return isRightToLeft ? 'right' : 'left';\n  }\n  function getEndEdge() {\n    if (isVertical) return 'bottom';\n    return isRightToLeft ? 'left' : 'right';\n  }\n  function direction(n) {\n    return n * sign;\n  }\n  const self = {\n    scroll,\n    cross,\n    startEdge,\n    endEdge,\n    measureSize,\n    direction\n  };\n  return self;\n}\n\nfunction Limit(min = 0, max = 0) {\n  const length = mathAbs(min - max);\n  function reachedMin(n) {\n    return n < min;\n  }\n  function reachedMax(n) {\n    return n > max;\n  }\n  function reachedAny(n) {\n    return reachedMin(n) || reachedMax(n);\n  }\n  function constrain(n) {\n    if (!reachedAny(n)) return n;\n    return reachedMin(n) ? min : max;\n  }\n  function removeOffset(n) {\n    if (!length) return n;\n    return n - length * Math.ceil((n - max) / length);\n  }\n  const self = {\n    length,\n    max,\n    min,\n    constrain,\n    reachedAny,\n    reachedMax,\n    reachedMin,\n    removeOffset\n  };\n  return self;\n}\n\nfunction Counter(max, start, loop) {\n  const {\n    constrain\n  } = Limit(0, max);\n  const loopEnd = max + 1;\n  let counter = withinLimit(start);\n  function withinLimit(n) {\n    return !loop ? constrain(n) : mathAbs((loopEnd + n) % loopEnd);\n  }\n  function get() {\n    return counter;\n  }\n  function set(n) {\n    counter = withinLimit(n);\n    return self;\n  }\n  function add(n) {\n    return clone().set(get() + n);\n  }\n  function clone() {\n    return Counter(max, get(), loop);\n  }\n  const self = {\n    get,\n    set,\n    add,\n    clone\n  };\n  return self;\n}\n\nfunction DragHandler(axis, rootNode, ownerDocument, ownerWindow, target, dragTracker, location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, baseFriction, watchDrag) {\n  const {\n    cross: crossAxis,\n    direction\n  } = axis;\n  const focusNodes = ['INPUT', 'SELECT', 'TEXTAREA'];\n  const nonPassiveEvent = {\n    passive: false\n  };\n  const initEvents = EventStore();\n  const dragEvents = EventStore();\n  const goToNextThreshold = Limit(50, 225).constrain(percentOfView.measure(20));\n  const snapForceBoost = {\n    mouse: 300,\n    touch: 400\n  };\n  const freeForceBoost = {\n    mouse: 500,\n    touch: 600\n  };\n  const baseSpeed = dragFree ? 43 : 25;\n  let isMoving = false;\n  let startScroll = 0;\n  let startCross = 0;\n  let pointerIsDown = false;\n  let preventScroll = false;\n  let preventClick = false;\n  let isMouse = false;\n  function init(emblaApi) {\n    if (!watchDrag) return;\n    function downIfAllowed(evt) {\n      if (isBoolean(watchDrag) || watchDrag(emblaApi, evt)) down(evt);\n    }\n    const node = rootNode;\n    initEvents.add(node, 'dragstart', evt => evt.preventDefault(), nonPassiveEvent).add(node, 'touchmove', () => undefined, nonPassiveEvent).add(node, 'touchend', () => undefined).add(node, 'touchstart', downIfAllowed).add(node, 'mousedown', downIfAllowed).add(node, 'touchcancel', up).add(node, 'contextmenu', up).add(node, 'click', click, true);\n  }\n  function destroy() {\n    initEvents.clear();\n    dragEvents.clear();\n  }\n  function addDragEvents() {\n    const node = isMouse ? ownerDocument : rootNode;\n    dragEvents.add(node, 'touchmove', move, nonPassiveEvent).add(node, 'touchend', up).add(node, 'mousemove', move, nonPassiveEvent).add(node, 'mouseup', up);\n  }\n  function isFocusNode(node) {\n    const nodeName = node.nodeName || '';\n    return focusNodes.includes(nodeName);\n  }\n  function forceBoost() {\n    const boost = dragFree ? freeForceBoost : snapForceBoost;\n    const type = isMouse ? 'mouse' : 'touch';\n    return boost[type];\n  }\n  function allowedForce(force, targetChanged) {\n    const next = index.add(mathSign(force) * -1);\n    const baseForce = scrollTarget.byDistance(force, !dragFree).distance;\n    if (dragFree || mathAbs(force) < goToNextThreshold) return baseForce;\n    if (skipSnaps && targetChanged) return baseForce * 0.5;\n    return scrollTarget.byIndex(next.get(), 0).distance;\n  }\n  function down(evt) {\n    const isMouseEvt = isMouseEvent(evt, ownerWindow);\n    isMouse = isMouseEvt;\n    preventClick = dragFree && isMouseEvt && !evt.buttons && isMoving;\n    isMoving = deltaAbs(target.get(), location.get()) >= 2;\n    if (isMouseEvt && evt.button !== 0) return;\n    if (isFocusNode(evt.target)) return;\n    pointerIsDown = true;\n    dragTracker.pointerDown(evt);\n    scrollBody.useFriction(0).useDuration(0);\n    target.set(location);\n    addDragEvents();\n    startScroll = dragTracker.readPoint(evt);\n    startCross = dragTracker.readPoint(evt, crossAxis);\n    eventHandler.emit('pointerDown');\n  }\n  function move(evt) {\n    const isTouchEvt = !isMouseEvent(evt, ownerWindow);\n    if (isTouchEvt && evt.touches.length >= 2) return up(evt);\n    const lastScroll = dragTracker.readPoint(evt);\n    const lastCross = dragTracker.readPoint(evt, crossAxis);\n    const diffScroll = deltaAbs(lastScroll, startScroll);\n    const diffCross = deltaAbs(lastCross, startCross);\n    if (!preventScroll && !isMouse) {\n      if (!evt.cancelable) return up(evt);\n      preventScroll = diffScroll > diffCross;\n      if (!preventScroll) return up(evt);\n    }\n    const diff = dragTracker.pointerMove(evt);\n    if (diffScroll > dragThreshold) preventClick = true;\n    scrollBody.useFriction(0.3).useDuration(0.75);\n    animation.start();\n    target.add(direction(diff));\n    evt.preventDefault();\n  }\n  function up(evt) {\n    const currentLocation = scrollTarget.byDistance(0, false);\n    const targetChanged = currentLocation.index !== index.get();\n    const rawForce = dragTracker.pointerUp(evt) * forceBoost();\n    const force = allowedForce(direction(rawForce), targetChanged);\n    const forceFactor = factorAbs(rawForce, force);\n    const speed = baseSpeed - 10 * forceFactor;\n    const friction = baseFriction + forceFactor / 50;\n    preventScroll = false;\n    pointerIsDown = false;\n    dragEvents.clear();\n    scrollBody.useDuration(speed).useFriction(friction);\n    scrollTo.distance(force, !dragFree);\n    isMouse = false;\n    eventHandler.emit('pointerUp');\n  }\n  function click(evt) {\n    if (preventClick) {\n      evt.stopPropagation();\n      evt.preventDefault();\n      preventClick = false;\n    }\n  }\n  function pointerDown() {\n    return pointerIsDown;\n  }\n  const self = {\n    init,\n    destroy,\n    pointerDown\n  };\n  return self;\n}\n\nfunction DragTracker(axis, ownerWindow) {\n  const logInterval = 170;\n  let startEvent;\n  let lastEvent;\n  function readTime(evt) {\n    return evt.timeStamp;\n  }\n  function readPoint(evt, evtAxis) {\n    const property = evtAxis || axis.scroll;\n    const coord = `client${property === 'x' ? 'X' : 'Y'}`;\n    return (isMouseEvent(evt, ownerWindow) ? evt : evt.touches[0])[coord];\n  }\n  function pointerDown(evt) {\n    startEvent = evt;\n    lastEvent = evt;\n    return readPoint(evt);\n  }\n  function pointerMove(evt) {\n    const diff = readPoint(evt) - readPoint(lastEvent);\n    const expired = readTime(evt) - readTime(startEvent) > logInterval;\n    lastEvent = evt;\n    if (expired) startEvent = evt;\n    return diff;\n  }\n  function pointerUp(evt) {\n    if (!startEvent || !lastEvent) return 0;\n    const diffDrag = readPoint(lastEvent) - readPoint(startEvent);\n    const diffTime = readTime(evt) - readTime(startEvent);\n    const expired = readTime(evt) - readTime(lastEvent) > logInterval;\n    const force = diffDrag / diffTime;\n    const isFlick = diffTime && !expired && mathAbs(force) > 0.1;\n    return isFlick ? force : 0;\n  }\n  const self = {\n    pointerDown,\n    pointerMove,\n    pointerUp,\n    readPoint\n  };\n  return self;\n}\n\nfunction NodeRects() {\n  function measure(node) {\n    const {\n      offsetTop,\n      offsetLeft,\n      offsetWidth,\n      offsetHeight\n    } = node;\n    const offset = {\n      top: offsetTop,\n      right: offsetLeft + offsetWidth,\n      bottom: offsetTop + offsetHeight,\n      left: offsetLeft,\n      width: offsetWidth,\n      height: offsetHeight\n    };\n    return offset;\n  }\n  const self = {\n    measure\n  };\n  return self;\n}\n\nfunction PercentOfView(viewSize) {\n  function measure(n) {\n    return viewSize * (n / 100);\n  }\n  const self = {\n    measure\n  };\n  return self;\n}\n\nfunction ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects) {\n  const observeNodes = [container].concat(slides);\n  let resizeObserver;\n  let containerSize;\n  let slideSizes = [];\n  let destroyed = false;\n  function readSize(node) {\n    return axis.measureSize(nodeRects.measure(node));\n  }\n  function init(emblaApi) {\n    if (!watchResize) return;\n    containerSize = readSize(container);\n    slideSizes = slides.map(readSize);\n    function defaultCallback(entries) {\n      for (const entry of entries) {\n        if (destroyed) return;\n        const isContainer = entry.target === container;\n        const slideIndex = slides.indexOf(entry.target);\n        const lastSize = isContainer ? containerSize : slideSizes[slideIndex];\n        const newSize = readSize(isContainer ? container : slides[slideIndex]);\n        const diffSize = mathAbs(newSize - lastSize);\n        if (diffSize >= 0.5) {\n          emblaApi.reInit();\n          eventHandler.emit('resize');\n          break;\n        }\n      }\n    }\n    resizeObserver = new ResizeObserver(entries => {\n      if (isBoolean(watchResize) || watchResize(emblaApi, entries)) {\n        defaultCallback(entries);\n      }\n    });\n    ownerWindow.requestAnimationFrame(() => {\n      observeNodes.forEach(node => resizeObserver.observe(node));\n    });\n  }\n  function destroy() {\n    destroyed = true;\n    if (resizeObserver) resizeObserver.disconnect();\n  }\n  const self = {\n    init,\n    destroy\n  };\n  return self;\n}\n\nfunction ScrollBody(location, offsetLocation, previousLocation, target, baseDuration, baseFriction) {\n  let scrollVelocity = 0;\n  let scrollDirection = 0;\n  let scrollDuration = baseDuration;\n  let scrollFriction = baseFriction;\n  let rawLocation = location.get();\n  let rawLocationPrevious = 0;\n  function seek() {\n    const displacement = target.get() - location.get();\n    const isInstant = !scrollDuration;\n    let scrollDistance = 0;\n    if (isInstant) {\n      scrollVelocity = 0;\n      previousLocation.set(target);\n      location.set(target);\n      scrollDistance = displacement;\n    } else {\n      previousLocation.set(location);\n      scrollVelocity += displacement / scrollDuration;\n      scrollVelocity *= scrollFriction;\n      rawLocation += scrollVelocity;\n      location.add(scrollVelocity);\n      scrollDistance = rawLocation - rawLocationPrevious;\n    }\n    scrollDirection = mathSign(scrollDistance);\n    rawLocationPrevious = rawLocation;\n    return self;\n  }\n  function settled() {\n    const diff = target.get() - offsetLocation.get();\n    return mathAbs(diff) < 0.001;\n  }\n  function duration() {\n    return scrollDuration;\n  }\n  function direction() {\n    return scrollDirection;\n  }\n  function velocity() {\n    return scrollVelocity;\n  }\n  function useBaseDuration() {\n    return useDuration(baseDuration);\n  }\n  function useBaseFriction() {\n    return useFriction(baseFriction);\n  }\n  function useDuration(n) {\n    scrollDuration = n;\n    return self;\n  }\n  function useFriction(n) {\n    scrollFriction = n;\n    return self;\n  }\n  const self = {\n    direction,\n    duration,\n    velocity,\n    seek,\n    settled,\n    useBaseFriction,\n    useBaseDuration,\n    useFriction,\n    useDuration\n  };\n  return self;\n}\n\nfunction ScrollBounds(limit, location, target, scrollBody, percentOfView) {\n  const pullBackThreshold = percentOfView.measure(10);\n  const edgeOffsetTolerance = percentOfView.measure(50);\n  const frictionLimit = Limit(0.1, 0.99);\n  let disabled = false;\n  function shouldConstrain() {\n    if (disabled) return false;\n    if (!limit.reachedAny(target.get())) return false;\n    if (!limit.reachedAny(location.get())) return false;\n    return true;\n  }\n  function constrain(pointerDown) {\n    if (!shouldConstrain()) return;\n    const edge = limit.reachedMin(location.get()) ? 'min' : 'max';\n    const diffToEdge = mathAbs(limit[edge] - location.get());\n    const diffToTarget = target.get() - location.get();\n    const friction = frictionLimit.constrain(diffToEdge / edgeOffsetTolerance);\n    target.subtract(diffToTarget * friction);\n    if (!pointerDown && mathAbs(diffToTarget) < pullBackThreshold) {\n      target.set(limit.constrain(target.get()));\n      scrollBody.useDuration(25).useBaseFriction();\n    }\n  }\n  function toggleActive(active) {\n    disabled = !active;\n  }\n  const self = {\n    shouldConstrain,\n    constrain,\n    toggleActive\n  };\n  return self;\n}\n\nfunction ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance) {\n  const scrollBounds = Limit(-contentSize + viewSize, 0);\n  const snapsBounded = measureBounded();\n  const scrollContainLimit = findScrollContainLimit();\n  const snapsContained = measureContained();\n  function usePixelTolerance(bound, snap) {\n    return deltaAbs(bound, snap) <= 1;\n  }\n  function findScrollContainLimit() {\n    const startSnap = snapsBounded[0];\n    const endSnap = arrayLast(snapsBounded);\n    const min = snapsBounded.lastIndexOf(startSnap);\n    const max = snapsBounded.indexOf(endSnap) + 1;\n    return Limit(min, max);\n  }\n  function measureBounded() {\n    return snapsAligned.map((snapAligned, index) => {\n      const {\n        min,\n        max\n      } = scrollBounds;\n      const snap = scrollBounds.constrain(snapAligned);\n      const isFirst = !index;\n      const isLast = arrayIsLastIndex(snapsAligned, index);\n      if (isFirst) return max;\n      if (isLast) return min;\n      if (usePixelTolerance(min, snap)) return min;\n      if (usePixelTolerance(max, snap)) return max;\n      return snap;\n    }).map(scrollBound => parseFloat(scrollBound.toFixed(3)));\n  }\n  function measureContained() {\n    if (contentSize <= viewSize + pixelTolerance) return [scrollBounds.max];\n    if (containScroll === 'keepSnaps') return snapsBounded;\n    const {\n      min,\n      max\n    } = scrollContainLimit;\n    return snapsBounded.slice(min, max);\n  }\n  const self = {\n    snapsContained,\n    scrollContainLimit\n  };\n  return self;\n}\n\nfunction ScrollLimit(contentSize, scrollSnaps, loop) {\n  const max = scrollSnaps[0];\n  const min = loop ? max - contentSize : arrayLast(scrollSnaps);\n  const limit = Limit(min, max);\n  const self = {\n    limit\n  };\n  return self;\n}\n\nfunction ScrollLooper(contentSize, limit, location, vectors) {\n  const jointSafety = 0.1;\n  const min = limit.min + jointSafety;\n  const max = limit.max + jointSafety;\n  const {\n    reachedMin,\n    reachedMax\n  } = Limit(min, max);\n  function shouldLoop(direction) {\n    if (direction === 1) return reachedMax(location.get());\n    if (direction === -1) return reachedMin(location.get());\n    return false;\n  }\n  function loop(direction) {\n    if (!shouldLoop(direction)) return;\n    const loopDistance = contentSize * (direction * -1);\n    vectors.forEach(v => v.add(loopDistance));\n  }\n  const self = {\n    loop\n  };\n  return self;\n}\n\nfunction ScrollProgress(limit) {\n  const {\n    max,\n    length\n  } = limit;\n  function get(n) {\n    const currentLocation = n - max;\n    return length ? currentLocation / -length : 0;\n  }\n  const self = {\n    get\n  };\n  return self;\n}\n\nfunction ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll) {\n  const {\n    startEdge,\n    endEdge\n  } = axis;\n  const {\n    groupSlides\n  } = slidesToScroll;\n  const alignments = measureSizes().map(alignment.measure);\n  const snaps = measureUnaligned();\n  const snapsAligned = measureAligned();\n  function measureSizes() {\n    return groupSlides(slideRects).map(rects => arrayLast(rects)[endEdge] - rects[0][startEdge]).map(mathAbs);\n  }\n  function measureUnaligned() {\n    return slideRects.map(rect => containerRect[startEdge] - rect[startEdge]).map(snap => -mathAbs(snap));\n  }\n  function measureAligned() {\n    return groupSlides(snaps).map(g => g[0]).map((snap, index) => snap + alignments[index]);\n  }\n  const self = {\n    snaps,\n    snapsAligned\n  };\n  return self;\n}\n\nfunction SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes) {\n  const {\n    groupSlides\n  } = slidesToScroll;\n  const {\n    min,\n    max\n  } = scrollContainLimit;\n  const slideRegistry = createSlideRegistry();\n  function createSlideRegistry() {\n    const groupedSlideIndexes = groupSlides(slideIndexes);\n    const doNotContain = !containSnaps || containScroll === 'keepSnaps';\n    if (scrollSnaps.length === 1) return [slideIndexes];\n    if (doNotContain) return groupedSlideIndexes;\n    return groupedSlideIndexes.slice(min, max).map((group, index, groups) => {\n      const isFirst = !index;\n      const isLast = arrayIsLastIndex(groups, index);\n      if (isFirst) {\n        const range = arrayLast(groups[0]) + 1;\n        return arrayFromNumber(range);\n      }\n      if (isLast) {\n        const range = arrayLastIndex(slideIndexes) - arrayLast(groups)[0] + 1;\n        return arrayFromNumber(range, arrayLast(groups)[0]);\n      }\n      return group;\n    });\n  }\n  const self = {\n    slideRegistry\n  };\n  return self;\n}\n\nfunction ScrollTarget(loop, scrollSnaps, contentSize, limit, targetVector) {\n  const {\n    reachedAny,\n    removeOffset,\n    constrain\n  } = limit;\n  function minDistance(distances) {\n    return distances.concat().sort((a, b) => mathAbs(a) - mathAbs(b))[0];\n  }\n  function findTargetSnap(target) {\n    const distance = loop ? removeOffset(target) : constrain(target);\n    const ascDiffsToSnaps = scrollSnaps.map((snap, index) => ({\n      diff: shortcut(snap - distance, 0),\n      index\n    })).sort((d1, d2) => mathAbs(d1.diff) - mathAbs(d2.diff));\n    const {\n      index\n    } = ascDiffsToSnaps[0];\n    return {\n      index,\n      distance\n    };\n  }\n  function shortcut(target, direction) {\n    const targets = [target, target + contentSize, target - contentSize];\n    if (!loop) return target;\n    if (!direction) return minDistance(targets);\n    const matchingTargets = targets.filter(t => mathSign(t) === direction);\n    if (matchingTargets.length) return minDistance(matchingTargets);\n    return arrayLast(targets) - contentSize;\n  }\n  function byIndex(index, direction) {\n    const diffToSnap = scrollSnaps[index] - targetVector.get();\n    const distance = shortcut(diffToSnap, direction);\n    return {\n      index,\n      distance\n    };\n  }\n  function byDistance(distance, snap) {\n    const target = targetVector.get() + distance;\n    const {\n      index,\n      distance: targetSnapDistance\n    } = findTargetSnap(target);\n    const reachedBound = !loop && reachedAny(target);\n    if (!snap || reachedBound) return {\n      index,\n      distance\n    };\n    const diffToSnap = scrollSnaps[index] - targetSnapDistance;\n    const snapDistance = distance + shortcut(diffToSnap, 0);\n    return {\n      index,\n      distance: snapDistance\n    };\n  }\n  const self = {\n    byDistance,\n    byIndex,\n    shortcut\n  };\n  return self;\n}\n\nfunction ScrollTo(animation, indexCurrent, indexPrevious, scrollBody, scrollTarget, targetVector, eventHandler) {\n  function scrollTo(target) {\n    const distanceDiff = target.distance;\n    const indexDiff = target.index !== indexCurrent.get();\n    targetVector.add(distanceDiff);\n    if (distanceDiff) {\n      if (scrollBody.duration()) {\n        animation.start();\n      } else {\n        animation.update();\n        animation.render(1);\n        animation.update();\n      }\n    }\n    if (indexDiff) {\n      indexPrevious.set(indexCurrent.get());\n      indexCurrent.set(target.index);\n      eventHandler.emit('select');\n    }\n  }\n  function distance(n, snap) {\n    const target = scrollTarget.byDistance(n, snap);\n    scrollTo(target);\n  }\n  function index(n, direction) {\n    const targetIndex = indexCurrent.clone().set(n);\n    const target = scrollTarget.byIndex(targetIndex.get(), direction);\n    scrollTo(target);\n  }\n  const self = {\n    distance,\n    index\n  };\n  return self;\n}\n\nfunction SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus) {\n  const focusListenerOptions = {\n    passive: true,\n    capture: true\n  };\n  let lastTabPressTime = 0;\n  function init(emblaApi) {\n    if (!watchFocus) return;\n    function defaultCallback(index) {\n      const nowTime = new Date().getTime();\n      const diffTime = nowTime - lastTabPressTime;\n      if (diffTime > 10) return;\n      eventHandler.emit('slideFocusStart');\n      root.scrollLeft = 0;\n      const group = slideRegistry.findIndex(group => group.includes(index));\n      if (!isNumber(group)) return;\n      scrollBody.useDuration(0);\n      scrollTo.index(group, 0);\n      eventHandler.emit('slideFocus');\n    }\n    eventStore.add(document, 'keydown', registerTabPress, false);\n    slides.forEach((slide, slideIndex) => {\n      eventStore.add(slide, 'focus', evt => {\n        if (isBoolean(watchFocus) || watchFocus(emblaApi, evt)) {\n          defaultCallback(slideIndex);\n        }\n      }, focusListenerOptions);\n    });\n  }\n  function registerTabPress(event) {\n    if (event.code === 'Tab') lastTabPressTime = new Date().getTime();\n  }\n  const self = {\n    init\n  };\n  return self;\n}\n\nfunction Vector1D(initialValue) {\n  let value = initialValue;\n  function get() {\n    return value;\n  }\n  function set(n) {\n    value = normalizeInput(n);\n  }\n  function add(n) {\n    value += normalizeInput(n);\n  }\n  function subtract(n) {\n    value -= normalizeInput(n);\n  }\n  function normalizeInput(n) {\n    return isNumber(n) ? n : n.get();\n  }\n  const self = {\n    get,\n    set,\n    add,\n    subtract\n  };\n  return self;\n}\n\nfunction Translate(axis, container) {\n  const translate = axis.scroll === 'x' ? x : y;\n  const containerStyle = container.style;\n  let previousTarget = null;\n  let disabled = false;\n  function x(n) {\n    return `translate3d(${n}px,0px,0px)`;\n  }\n  function y(n) {\n    return `translate3d(0px,${n}px,0px)`;\n  }\n  function to(target) {\n    if (disabled) return;\n    const newTarget = roundToTwoDecimals(axis.direction(target));\n    if (newTarget === previousTarget) return;\n    containerStyle.transform = translate(newTarget);\n    previousTarget = newTarget;\n  }\n  function toggleActive(active) {\n    disabled = !active;\n  }\n  function clear() {\n    if (disabled) return;\n    containerStyle.transform = '';\n    if (!container.getAttribute('style')) container.removeAttribute('style');\n  }\n  const self = {\n    clear,\n    to,\n    toggleActive\n  };\n  return self;\n}\n\nfunction SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, location, slides) {\n  const roundingSafety = 0.5;\n  const ascItems = arrayKeys(slideSizesWithGaps);\n  const descItems = arrayKeys(slideSizesWithGaps).reverse();\n  const loopPoints = startPoints().concat(endPoints());\n  function removeSlideSizes(indexes, from) {\n    return indexes.reduce((a, i) => {\n      return a - slideSizesWithGaps[i];\n    }, from);\n  }\n  function slidesInGap(indexes, gap) {\n    return indexes.reduce((a, i) => {\n      const remainingGap = removeSlideSizes(a, gap);\n      return remainingGap > 0 ? a.concat([i]) : a;\n    }, []);\n  }\n  function findSlideBounds(offset) {\n    return snaps.map((snap, index) => ({\n      start: snap - slideSizes[index] + roundingSafety + offset,\n      end: snap + viewSize - roundingSafety + offset\n    }));\n  }\n  function findLoopPoints(indexes, offset, isEndEdge) {\n    const slideBounds = findSlideBounds(offset);\n    return indexes.map(index => {\n      const initial = isEndEdge ? 0 : -contentSize;\n      const altered = isEndEdge ? contentSize : 0;\n      const boundEdge = isEndEdge ? 'end' : 'start';\n      const loopPoint = slideBounds[index][boundEdge];\n      return {\n        index,\n        loopPoint,\n        slideLocation: Vector1D(-1),\n        translate: Translate(axis, slides[index]),\n        target: () => location.get() > loopPoint ? initial : altered\n      };\n    });\n  }\n  function startPoints() {\n    const gap = scrollSnaps[0];\n    const indexes = slidesInGap(descItems, gap);\n    return findLoopPoints(indexes, contentSize, false);\n  }\n  function endPoints() {\n    const gap = viewSize - scrollSnaps[0] - 1;\n    const indexes = slidesInGap(ascItems, gap);\n    return findLoopPoints(indexes, -contentSize, true);\n  }\n  function canLoop() {\n    return loopPoints.every(({\n      index\n    }) => {\n      const otherIndexes = ascItems.filter(i => i !== index);\n      return removeSlideSizes(otherIndexes, viewSize) <= 0.1;\n    });\n  }\n  function loop() {\n    loopPoints.forEach(loopPoint => {\n      const {\n        target,\n        translate,\n        slideLocation\n      } = loopPoint;\n      const shiftLocation = target();\n      if (shiftLocation === slideLocation.get()) return;\n      translate.to(shiftLocation);\n      slideLocation.set(shiftLocation);\n    });\n  }\n  function clear() {\n    loopPoints.forEach(loopPoint => loopPoint.translate.clear());\n  }\n  const self = {\n    canLoop,\n    clear,\n    loop,\n    loopPoints\n  };\n  return self;\n}\n\nfunction SlidesHandler(container, eventHandler, watchSlides) {\n  let mutationObserver;\n  let destroyed = false;\n  function init(emblaApi) {\n    if (!watchSlides) return;\n    function defaultCallback(mutations) {\n      for (const mutation of mutations) {\n        if (mutation.type === 'childList') {\n          emblaApi.reInit();\n          eventHandler.emit('slidesChanged');\n          break;\n        }\n      }\n    }\n    mutationObserver = new MutationObserver(mutations => {\n      if (destroyed) return;\n      if (isBoolean(watchSlides) || watchSlides(emblaApi, mutations)) {\n        defaultCallback(mutations);\n      }\n    });\n    mutationObserver.observe(container, {\n      childList: true\n    });\n  }\n  function destroy() {\n    if (mutationObserver) mutationObserver.disconnect();\n    destroyed = true;\n  }\n  const self = {\n    init,\n    destroy\n  };\n  return self;\n}\n\nfunction SlidesInView(container, slides, eventHandler, threshold) {\n  const intersectionEntryMap = {};\n  let inViewCache = null;\n  let notInViewCache = null;\n  let intersectionObserver;\n  let destroyed = false;\n  function init() {\n    intersectionObserver = new IntersectionObserver(entries => {\n      if (destroyed) return;\n      entries.forEach(entry => {\n        const index = slides.indexOf(entry.target);\n        intersectionEntryMap[index] = entry;\n      });\n      inViewCache = null;\n      notInViewCache = null;\n      eventHandler.emit('slidesInView');\n    }, {\n      root: container.parentElement,\n      threshold\n    });\n    slides.forEach(slide => intersectionObserver.observe(slide));\n  }\n  function destroy() {\n    if (intersectionObserver) intersectionObserver.disconnect();\n    destroyed = true;\n  }\n  function createInViewList(inView) {\n    return objectKeys(intersectionEntryMap).reduce((list, slideIndex) => {\n      const index = parseInt(slideIndex);\n      const {\n        isIntersecting\n      } = intersectionEntryMap[index];\n      const inViewMatch = inView && isIntersecting;\n      const notInViewMatch = !inView && !isIntersecting;\n      if (inViewMatch || notInViewMatch) list.push(index);\n      return list;\n    }, []);\n  }\n  function get(inView = true) {\n    if (inView && inViewCache) return inViewCache;\n    if (!inView && notInViewCache) return notInViewCache;\n    const slideIndexes = createInViewList(inView);\n    if (inView) inViewCache = slideIndexes;\n    if (!inView) notInViewCache = slideIndexes;\n    return slideIndexes;\n  }\n  const self = {\n    init,\n    destroy,\n    get\n  };\n  return self;\n}\n\nfunction SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow) {\n  const {\n    measureSize,\n    startEdge,\n    endEdge\n  } = axis;\n  const withEdgeGap = slideRects[0] && readEdgeGap;\n  const startGap = measureStartGap();\n  const endGap = measureEndGap();\n  const slideSizes = slideRects.map(measureSize);\n  const slideSizesWithGaps = measureWithGaps();\n  function measureStartGap() {\n    if (!withEdgeGap) return 0;\n    const slideRect = slideRects[0];\n    return mathAbs(containerRect[startEdge] - slideRect[startEdge]);\n  }\n  function measureEndGap() {\n    if (!withEdgeGap) return 0;\n    const style = ownerWindow.getComputedStyle(arrayLast(slides));\n    return parseFloat(style.getPropertyValue(`margin-${endEdge}`));\n  }\n  function measureWithGaps() {\n    return slideRects.map((rect, index, rects) => {\n      const isFirst = !index;\n      const isLast = arrayIsLastIndex(rects, index);\n      if (isFirst) return slideSizes[index] + startGap;\n      if (isLast) return slideSizes[index] + endGap;\n      return rects[index + 1][startEdge] - rect[startEdge];\n    }).map(mathAbs);\n  }\n  const self = {\n    slideSizes,\n    slideSizesWithGaps,\n    startGap,\n    endGap\n  };\n  return self;\n}\n\nfunction SlidesToScroll(axis, viewSize, slidesToScroll, loop, containerRect, slideRects, startGap, endGap, pixelTolerance) {\n  const {\n    startEdge,\n    endEdge,\n    direction\n  } = axis;\n  const groupByNumber = isNumber(slidesToScroll);\n  function byNumber(array, groupSize) {\n    return arrayKeys(array).filter(i => i % groupSize === 0).map(i => array.slice(i, i + groupSize));\n  }\n  function bySize(array) {\n    if (!array.length) return [];\n    return arrayKeys(array).reduce((groups, rectB, index) => {\n      const rectA = arrayLast(groups) || 0;\n      const isFirst = rectA === 0;\n      const isLast = rectB === arrayLastIndex(array);\n      const edgeA = containerRect[startEdge] - slideRects[rectA][startEdge];\n      const edgeB = containerRect[startEdge] - slideRects[rectB][endEdge];\n      const gapA = !loop && isFirst ? direction(startGap) : 0;\n      const gapB = !loop && isLast ? direction(endGap) : 0;\n      const chunkSize = mathAbs(edgeB - gapB - (edgeA + gapA));\n      if (index && chunkSize > viewSize + pixelTolerance) groups.push(rectB);\n      if (isLast) groups.push(array.length);\n      return groups;\n    }, []).map((currentSize, index, groups) => {\n      const previousSize = Math.max(groups[index - 1] || 0);\n      return array.slice(previousSize, currentSize);\n    });\n  }\n  function groupSlides(array) {\n    return groupByNumber ? byNumber(array, slidesToScroll) : bySize(array);\n  }\n  const self = {\n    groupSlides\n  };\n  return self;\n}\n\nfunction Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler) {\n  // Options\n  const {\n    align,\n    axis: scrollAxis,\n    direction,\n    startIndex,\n    loop,\n    duration,\n    dragFree,\n    dragThreshold,\n    inViewThreshold,\n    slidesToScroll: groupSlides,\n    skipSnaps,\n    containScroll,\n    watchResize,\n    watchSlides,\n    watchDrag,\n    watchFocus\n  } = options;\n  // Measurements\n  const pixelTolerance = 2;\n  const nodeRects = NodeRects();\n  const containerRect = nodeRects.measure(container);\n  const slideRects = slides.map(nodeRects.measure);\n  const axis = Axis(scrollAxis, direction);\n  const viewSize = axis.measureSize(containerRect);\n  const percentOfView = PercentOfView(viewSize);\n  const alignment = Alignment(align, viewSize);\n  const containSnaps = !loop && !!containScroll;\n  const readEdgeGap = loop || !!containScroll;\n  const {\n    slideSizes,\n    slideSizesWithGaps,\n    startGap,\n    endGap\n  } = SlideSizes(axis, containerRect, slideRects, slides, readEdgeGap, ownerWindow);\n  const slidesToScroll = SlidesToScroll(axis, viewSize, groupSlides, loop, containerRect, slideRects, startGap, endGap, pixelTolerance);\n  const {\n    snaps,\n    snapsAligned\n  } = ScrollSnaps(axis, alignment, containerRect, slideRects, slidesToScroll);\n  const contentSize = -arrayLast(snaps) + arrayLast(slideSizesWithGaps);\n  const {\n    snapsContained,\n    scrollContainLimit\n  } = ScrollContain(viewSize, contentSize, snapsAligned, containScroll, pixelTolerance);\n  const scrollSnaps = containSnaps ? snapsContained : snapsAligned;\n  const {\n    limit\n  } = ScrollLimit(contentSize, scrollSnaps, loop);\n  // Indexes\n  const index = Counter(arrayLastIndex(scrollSnaps), startIndex, loop);\n  const indexPrevious = index.clone();\n  const slideIndexes = arrayKeys(slides);\n  // Animation\n  const update = ({\n    dragHandler,\n    scrollBody,\n    scrollBounds,\n    options: {\n      loop\n    }\n  }) => {\n    if (!loop) scrollBounds.constrain(dragHandler.pointerDown());\n    scrollBody.seek();\n  };\n  const render = ({\n    scrollBody,\n    translate,\n    location,\n    offsetLocation,\n    previousLocation,\n    scrollLooper,\n    slideLooper,\n    dragHandler,\n    animation,\n    eventHandler,\n    scrollBounds,\n    options: {\n      loop\n    }\n  }, alpha) => {\n    const shouldSettle = scrollBody.settled();\n    const withinBounds = !scrollBounds.shouldConstrain();\n    const hasSettled = loop ? shouldSettle : shouldSettle && withinBounds;\n    const hasSettledAndIdle = hasSettled && !dragHandler.pointerDown();\n    if (hasSettledAndIdle) animation.stop();\n    const interpolatedLocation = location.get() * alpha + previousLocation.get() * (1 - alpha);\n    offsetLocation.set(interpolatedLocation);\n    if (loop) {\n      scrollLooper.loop(scrollBody.direction());\n      slideLooper.loop();\n    }\n    translate.to(offsetLocation.get());\n    if (hasSettledAndIdle) eventHandler.emit('settle');\n    if (!hasSettled) eventHandler.emit('scroll');\n  };\n  const animation = Animations(ownerDocument, ownerWindow, () => update(engine), alpha => render(engine, alpha));\n  // Shared\n  const friction = 0.68;\n  const startLocation = scrollSnaps[index.get()];\n  const location = Vector1D(startLocation);\n  const previousLocation = Vector1D(startLocation);\n  const offsetLocation = Vector1D(startLocation);\n  const target = Vector1D(startLocation);\n  const scrollBody = ScrollBody(location, offsetLocation, previousLocation, target, duration, friction);\n  const scrollTarget = ScrollTarget(loop, scrollSnaps, contentSize, limit, target);\n  const scrollTo = ScrollTo(animation, index, indexPrevious, scrollBody, scrollTarget, target, eventHandler);\n  const scrollProgress = ScrollProgress(limit);\n  const eventStore = EventStore();\n  const slidesInView = SlidesInView(container, slides, eventHandler, inViewThreshold);\n  const {\n    slideRegistry\n  } = SlideRegistry(containSnaps, containScroll, scrollSnaps, scrollContainLimit, slidesToScroll, slideIndexes);\n  const slideFocus = SlideFocus(root, slides, slideRegistry, scrollTo, scrollBody, eventStore, eventHandler, watchFocus);\n  // Engine\n  const engine = {\n    ownerDocument,\n    ownerWindow,\n    eventHandler,\n    containerRect,\n    slideRects,\n    animation,\n    axis,\n    dragHandler: DragHandler(axis, root, ownerDocument, ownerWindow, target, DragTracker(axis, ownerWindow), location, animation, scrollTo, scrollBody, scrollTarget, index, eventHandler, percentOfView, dragFree, dragThreshold, skipSnaps, friction, watchDrag),\n    eventStore,\n    percentOfView,\n    index,\n    indexPrevious,\n    limit,\n    location,\n    offsetLocation,\n    previousLocation,\n    options,\n    resizeHandler: ResizeHandler(container, eventHandler, ownerWindow, slides, axis, watchResize, nodeRects),\n    scrollBody,\n    scrollBounds: ScrollBounds(limit, offsetLocation, target, scrollBody, percentOfView),\n    scrollLooper: ScrollLooper(contentSize, limit, offsetLocation, [location, offsetLocation, previousLocation, target]),\n    scrollProgress,\n    scrollSnapList: scrollSnaps.map(scrollProgress.get),\n    scrollSnaps,\n    scrollTarget,\n    scrollTo,\n    slideLooper: SlideLooper(axis, viewSize, contentSize, slideSizes, slideSizesWithGaps, snaps, scrollSnaps, offsetLocation, slides),\n    slideFocus,\n    slidesHandler: SlidesHandler(container, eventHandler, watchSlides),\n    slidesInView,\n    slideIndexes,\n    slideRegistry,\n    slidesToScroll,\n    target,\n    translate: Translate(axis, container)\n  };\n  return engine;\n}\n\nfunction EventHandler() {\n  let listeners = {};\n  let api;\n  function init(emblaApi) {\n    api = emblaApi;\n  }\n  function getListeners(evt) {\n    return listeners[evt] || [];\n  }\n  function emit(evt) {\n    getListeners(evt).forEach(e => e(api, evt));\n    return self;\n  }\n  function on(evt, cb) {\n    listeners[evt] = getListeners(evt).concat([cb]);\n    return self;\n  }\n  function off(evt, cb) {\n    listeners[evt] = getListeners(evt).filter(e => e !== cb);\n    return self;\n  }\n  function clear() {\n    listeners = {};\n  }\n  const self = {\n    init,\n    emit,\n    off,\n    on,\n    clear\n  };\n  return self;\n}\n\nconst defaultOptions = {\n  align: 'center',\n  axis: 'x',\n  container: null,\n  slides: null,\n  containScroll: 'trimSnaps',\n  direction: 'ltr',\n  slidesToScroll: 1,\n  inViewThreshold: 0,\n  breakpoints: {},\n  dragFree: false,\n  dragThreshold: 10,\n  loop: false,\n  skipSnaps: false,\n  duration: 25,\n  startIndex: 0,\n  active: true,\n  watchDrag: true,\n  watchResize: true,\n  watchSlides: true,\n  watchFocus: true\n};\n\nfunction OptionsHandler(ownerWindow) {\n  function mergeOptions(optionsA, optionsB) {\n    return objectsMergeDeep(optionsA, optionsB || {});\n  }\n  function optionsAtMedia(options) {\n    const optionsAtMedia = options.breakpoints || {};\n    const matchedMediaOptions = objectKeys(optionsAtMedia).filter(media => ownerWindow.matchMedia(media).matches).map(media => optionsAtMedia[media]).reduce((a, mediaOption) => mergeOptions(a, mediaOption), {});\n    return mergeOptions(options, matchedMediaOptions);\n  }\n  function optionsMediaQueries(optionsList) {\n    return optionsList.map(options => objectKeys(options.breakpoints || {})).reduce((acc, mediaQueries) => acc.concat(mediaQueries), []).map(ownerWindow.matchMedia);\n  }\n  const self = {\n    mergeOptions,\n    optionsAtMedia,\n    optionsMediaQueries\n  };\n  return self;\n}\n\nfunction PluginsHandler(optionsHandler) {\n  let activePlugins = [];\n  function init(emblaApi, plugins) {\n    activePlugins = plugins.filter(({\n      options\n    }) => optionsHandler.optionsAtMedia(options).active !== false);\n    activePlugins.forEach(plugin => plugin.init(emblaApi, optionsHandler));\n    return plugins.reduce((map, plugin) => Object.assign(map, {\n      [plugin.name]: plugin\n    }), {});\n  }\n  function destroy() {\n    activePlugins = activePlugins.filter(plugin => plugin.destroy());\n  }\n  const self = {\n    init,\n    destroy\n  };\n  return self;\n}\n\nfunction EmblaCarousel(root, userOptions, userPlugins) {\n  const ownerDocument = root.ownerDocument;\n  const ownerWindow = ownerDocument.defaultView;\n  const optionsHandler = OptionsHandler(ownerWindow);\n  const pluginsHandler = PluginsHandler(optionsHandler);\n  const mediaHandlers = EventStore();\n  const eventHandler = EventHandler();\n  const {\n    mergeOptions,\n    optionsAtMedia,\n    optionsMediaQueries\n  } = optionsHandler;\n  const {\n    on,\n    off,\n    emit\n  } = eventHandler;\n  const reInit = reActivate;\n  let destroyed = false;\n  let engine;\n  let optionsBase = mergeOptions(defaultOptions, EmblaCarousel.globalOptions);\n  let options = mergeOptions(optionsBase);\n  let pluginList = [];\n  let pluginApis;\n  let container;\n  let slides;\n  function storeElements() {\n    const {\n      container: userContainer,\n      slides: userSlides\n    } = options;\n    const customContainer = isString(userContainer) ? root.querySelector(userContainer) : userContainer;\n    container = customContainer || root.children[0];\n    const customSlides = isString(userSlides) ? container.querySelectorAll(userSlides) : userSlides;\n    slides = [].slice.call(customSlides || container.children);\n  }\n  function createEngine(options) {\n    const engine = Engine(root, container, slides, ownerDocument, ownerWindow, options, eventHandler);\n    if (options.loop && !engine.slideLooper.canLoop()) {\n      const optionsWithoutLoop = Object.assign({}, options, {\n        loop: false\n      });\n      return createEngine(optionsWithoutLoop);\n    }\n    return engine;\n  }\n  function activate(withOptions, withPlugins) {\n    if (destroyed) return;\n    optionsBase = mergeOptions(optionsBase, withOptions);\n    options = optionsAtMedia(optionsBase);\n    pluginList = withPlugins || pluginList;\n    storeElements();\n    engine = createEngine(options);\n    optionsMediaQueries([optionsBase, ...pluginList.map(({\n      options\n    }) => options)]).forEach(query => mediaHandlers.add(query, 'change', reActivate));\n    if (!options.active) return;\n    engine.translate.to(engine.location.get());\n    engine.animation.init();\n    engine.slidesInView.init();\n    engine.slideFocus.init(self);\n    engine.eventHandler.init(self);\n    engine.resizeHandler.init(self);\n    engine.slidesHandler.init(self);\n    if (engine.options.loop) engine.slideLooper.loop();\n    if (container.offsetParent && slides.length) engine.dragHandler.init(self);\n    pluginApis = pluginsHandler.init(self, pluginList);\n  }\n  function reActivate(withOptions, withPlugins) {\n    const startIndex = selectedScrollSnap();\n    deActivate();\n    activate(mergeOptions({\n      startIndex\n    }, withOptions), withPlugins);\n    eventHandler.emit('reInit');\n  }\n  function deActivate() {\n    engine.dragHandler.destroy();\n    engine.eventStore.clear();\n    engine.translate.clear();\n    engine.slideLooper.clear();\n    engine.resizeHandler.destroy();\n    engine.slidesHandler.destroy();\n    engine.slidesInView.destroy();\n    engine.animation.destroy();\n    pluginsHandler.destroy();\n    mediaHandlers.clear();\n  }\n  function destroy() {\n    if (destroyed) return;\n    destroyed = true;\n    mediaHandlers.clear();\n    deActivate();\n    eventHandler.emit('destroy');\n    eventHandler.clear();\n  }\n  function scrollTo(index, jump, direction) {\n    if (!options.active || destroyed) return;\n    engine.scrollBody.useBaseFriction().useDuration(jump === true ? 0 : options.duration);\n    engine.scrollTo.index(index, direction || 0);\n  }\n  function scrollNext(jump) {\n    const next = engine.index.add(1).get();\n    scrollTo(next, jump, -1);\n  }\n  function scrollPrev(jump) {\n    const prev = engine.index.add(-1).get();\n    scrollTo(prev, jump, 1);\n  }\n  function canScrollNext() {\n    const next = engine.index.add(1).get();\n    return next !== selectedScrollSnap();\n  }\n  function canScrollPrev() {\n    const prev = engine.index.add(-1).get();\n    return prev !== selectedScrollSnap();\n  }\n  function scrollSnapList() {\n    return engine.scrollSnapList;\n  }\n  function scrollProgress() {\n    return engine.scrollProgress.get(engine.offsetLocation.get());\n  }\n  function selectedScrollSnap() {\n    return engine.index.get();\n  }\n  function previousScrollSnap() {\n    return engine.indexPrevious.get();\n  }\n  function slidesInView() {\n    return engine.slidesInView.get();\n  }\n  function slidesNotInView() {\n    return engine.slidesInView.get(false);\n  }\n  function plugins() {\n    return pluginApis;\n  }\n  function internalEngine() {\n    return engine;\n  }\n  function rootNode() {\n    return root;\n  }\n  function containerNode() {\n    return container;\n  }\n  function slideNodes() {\n    return slides;\n  }\n  const self = {\n    canScrollNext,\n    canScrollPrev,\n    containerNode,\n    internalEngine,\n    destroy,\n    off,\n    on,\n    emit,\n    plugins,\n    previousScrollSnap,\n    reInit,\n    rootNode,\n    scrollNext,\n    scrollPrev,\n    scrollProgress,\n    scrollSnapList,\n    scrollTo,\n    selectedScrollSnap,\n    slideNodes,\n    slidesInView,\n    slidesNotInView\n  };\n  activate(userOptions, userPlugins);\n  setTimeout(() => eventHandler.emit('init'), 0);\n  return self;\n}\nEmblaCarousel.globalOptions = undefined;\n\nexport { EmblaCarousel as default };\n//# sourceMappingURL=embla-carousel.esm.js.map\n","import { useRef, useState, useCallback, useEffect } from 'react';\nimport { areOptionsEqual, arePluginsEqual, canUseDOM } from 'embla-carousel-reactive-utils';\nimport EmblaCarousel from 'embla-carousel';\n\nfunction useEmblaCarousel(options = {}, plugins = []) {\n  const storedOptions = useRef(options);\n  const storedPlugins = useRef(plugins);\n  const [emblaApi, setEmblaApi] = useState();\n  const [viewport, setViewport] = useState();\n  const reInit = useCallback(() => {\n    if (emblaApi) emblaApi.reInit(storedOptions.current, storedPlugins.current);\n  }, [emblaApi]);\n  useEffect(() => {\n    if (areOptionsEqual(storedOptions.current, options)) return;\n    storedOptions.current = options;\n    reInit();\n  }, [options, reInit]);\n  useEffect(() => {\n    if (arePluginsEqual(storedPlugins.current, plugins)) return;\n    storedPlugins.current = plugins;\n    reInit();\n  }, [plugins, reInit]);\n  useEffect(() => {\n    if (canUseDOM() && viewport) {\n      EmblaCarousel.globalOptions = useEmblaCarousel.globalOptions;\n      const newEmblaApi = EmblaCarousel(viewport, storedOptions.current, storedPlugins.current);\n      setEmblaApi(newEmblaApi);\n      return () => newEmblaApi.destroy();\n    } else {\n      setEmblaApi(undefined);\n    }\n  }, [viewport, setEmblaApi]);\n  return [setViewport, emblaApi];\n}\nuseEmblaCarousel.globalOptions = undefined;\n\nexport { useEmblaCarousel as default };\n//# sourceMappingURL=embla-carousel-react.esm.js.map\n","import useEmblaCarousel from 'embla-carousel-react';\nimport { ChevronLeft, ChevronRight } from 'lucide-react';\nimport * as React from 'react';\nimport { useEffect, useState } from 'react';\nimport { H2, P } from '@/components/ui/typography';\nimport { cn } from '@/lib/utils';\n\nconst FeatureShowcase = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n  ({ className, ...props }, ref) => (\n    <div\n      ref={ref}\n      className={cn('@container flex w-full flex-wrap items-stretch gap-0 bg-surface', className)}\n      {...props}\n    />\n  ),\n);\n\nconst FeatureShowcaseIntro = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(\n  ({ className, ...props }, ref) => (\n    <div\n      ref={ref}\n      className={cn(\n        '@5xl:mx-[8.3333%] mx-0 box-border flex @5xl:w-[33.3334%] w-full flex-col justify-center @5xl:p-8 p-6',\n        className,\n      )}\n      {...props}\n    />\n  ),\n);\n\nFeatureShowcaseIntro.displayName = 'FeatureShowcaseIntro';\n\nconst FeatureShowcaseIntroTitle = React.forwardRef<\n  HTMLHeadingElement,\n  React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n  <H2\n    ref={ref}\n    className={cn('text-left text-content-primary rtl:text-right', className)}\n    {...props}\n  />\n));\n\nFeatureShowcaseIntroTitle.displayName = 'FeatureShowcaseIntroTitle';\n\nconst FeatureShowcaseIntroBody = React.forwardRef<\n  HTMLHeadingElement,\n  React.HTMLAttributes<HTMLHeadingElement>\n>(({ className, ...props }, ref) => (\n  <P\n    ref={ref}\n    className={cn('text-left text-content-primary rtl:text-right', className)}\n    {...props}\n  />\n));\n\nFeatureShowcaseIntroBody.displayName = 'FeatureShowcaseIntroBody';\n\nfunction FeatureShowcaseCard(props: {\n  showTabs?: boolean;\n  className?: string;\n  sections: {\n    section: string;\n    items: {\n      headerImage: string;\n      stripColor?: string;\n      content: React.ReactNode;\n    }[];\n  }[];\n}) {\n  const { showTabs = true, sections, className } = props;\n  const [emblaRef, emblaApi] = useEmblaCarousel({ loop: false });\n  const goToPrev = () => emblaApi?.scrollPrev();\n  const goToNext = () => emblaApi?.scrollNext();\n  const items = sections.flatMap((group) =>\n    group.items.map((item, index) => ({\n      ...item,\n      index: index + 1,\n      section: group.section,\n      total: group.items.length,\n    })),\n  );\n  const [canPrev, setCanPrev] = useState(false);\n  const [canNext, setCanNext] = useState(false);\n  const [selectedIndex, setSelectedIndex] = useState(0);\n\n  useEffect(() => {\n    if (!emblaApi) return;\n\n    const update = () => {\n      setCanPrev(emblaApi.canScrollPrev());\n      setCanNext(emblaApi.canScrollNext());\n      setSelectedIndex(emblaApi.selectedScrollSnap());\n    };\n\n    update();\n\n    emblaApi.on('select', update);\n    emblaApi.on('reInit', update);\n\n    return () => {\n      emblaApi.off('select', update);\n      emblaApi.off('reInit', update);\n    };\n  }, [emblaApi]);\n  return (\n    <div className={cn('flex @5xl:w-1/2 w-full flex-col gap-0', className)}>\n      <div className='mx-auto w-full'>\n        <div className='relative overflow-hidden' ref={emblaRef}>\n          <div className='flex'>\n            {items.map((d) => (\n              <div\n                className='min-w-0 flex-[0_0_100%] border-b-16'\n                key={`${d.section}_${d.index}`}\n                style={{ borderColor: d.stripColor || 'var(--blue-600)' }}\n              >\n                <div className='flex h-full flex-col'>\n                  <div className='h-[40vh] w-full overflow-hidden'>\n                    <img\n                      alt='card header'\n                      src={d.headerImage}\n                      className='h-full w-full object-cover object-center'\n                    />\n                  </div>\n\n                  <div\n                    className={`box-border w-full grow bg-white @5xl:px-10 px-4 pb-24 ${showTabs ? 'pt-24' : 'pt-10'}`}\n                  >\n                    <div className='@5xl:w-3/4 w-full'>{d.content}</div>\n                  </div>\n                </div>\n              </div>\n            ))}\n          </div>\n          {showTabs && (\n            <div className='absolute top-[40vh] box-border flex w-full justify-between gap-2 @5xl:px-10 px-4 pt-10'>\n              <div className='mb-2 flex items-center gap-4 border-stroke border-b-2'>\n                {sections.map((d) => (\n                  <button\n                    type='button'\n                    key={d.section}\n                    className={`shrink-0 border-b-2 bg-transparent font-body uppercase ${items[selectedIndex].section === d.section ? 'border-primary' : 'border-stroke'} -mb-0.5 font-base font-bold`}\n                    onClick={() =>\n                      emblaApi?.scrollTo(items.findIndex((el) => el.section === d.section))\n                    }\n                  >\n                    {d.section}\n                  </button>\n                ))}\n              </div>\n              <div className='@5xl:inline hidden'>\n                <P\n                  marginBottom='none'\n                  size='base'\n                  className='-mb-0.5 bg-transparent font-body font-bold uppercase'\n                >\n                  {items[selectedIndex].index}/{items[selectedIndex].total}\n                </P>\n              </div>\n            </div>\n          )}\n          <div className='absolute @5xl:right-4 bottom-10 @5xl:left-auto left-4 flex @5xl:w-auto w-[calc(100%-32px)] items-center justify-between'>\n            <div className='flex gap-1'>\n              <button\n                type='button'\n                aria-label='Go to next page'\n                onClick={goToPrev}\n                disabled={!canPrev}\n                className='rounded-full bg-foreground-soft p-2 text-content-reverse disabled:opacity-disabled rtl:scale-x-[-1]'\n              >\n                <ChevronLeft className='h-6 w-6' />\n              </button>\n              <button\n                type='button'\n                onClick={goToNext}\n                aria-label='Go to next page'\n                disabled={!canNext}\n                className='rounded-full bg-foreground-soft p-2 text-content-reverse disabled:opacity-disabled rtl:scale-x-[-1]'\n              >\n                <ChevronRight className='h-6 w-6' />\n              </button>\n            </div>\n            <div className='inline @5xl:hidden'>\n              <P\n                marginBottom='none'\n                size='base'\n                className='-mb-0.5 bg-transparent font-body font-bold uppercase'\n              >\n                {items[selectedIndex].index}/{items[selectedIndex].total}\n              </P>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n}\n\nexport {\n  FeatureShowcase,\n  FeatureShowcaseCard,\n  FeatureShowcaseIntro,\n  FeatureShowcaseIntroBody,\n  FeatureShowcaseIntroTitle,\n};\n"],"x_google_ignoreList":[0,1,2],"mappings":"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"}