{"version":3,"file":"scrollIndicator-CeIdhihG.js","sources":["../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/scroll/observe.mjs","../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/resize/handle-element.mjs","../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/resize/handle-window.mjs","../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/resize/index.mjs","../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/scroll/info.mjs","../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/scroll/offsets/inset.mjs","../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/scroll/offsets/edge.mjs","../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/scroll/offsets/offset.mjs","../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/scroll/offsets/presets.mjs","../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/scroll/offsets/index.mjs","../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/scroll/on-scroll-handler.mjs","../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/scroll/track.mjs","../../node_modules/.pnpm/framer-motion@11.18.2_react-dom@18.3.1_react@18.3.1/node_modules/framer-motion/dist/es/render/dom/scroll/index.mjs","../../src/scripts/modules/scrollIndicator.ts"],"sourcesContent":["import { frame, cancelFrame } from '../../../frameloop/frame.mjs';\n\nfunction observeTimeline(update, timeline) {\n    let prevProgress;\n    const onFrame = () => {\n        const { currentTime } = timeline;\n        const percentage = currentTime === null ? 0 : currentTime.value;\n        const progress = percentage / 100;\n        if (prevProgress !== progress) {\n            update(progress);\n        }\n        prevProgress = progress;\n    };\n    frame.update(onFrame, true);\n    return () => cancelFrame(onFrame);\n}\n\nexport { observeTimeline };\n","import { resolveElements } from 'motion-dom';\n\nconst resizeHandlers = new WeakMap();\nlet observer;\nfunction getElementSize(target, borderBoxSize) {\n    if (borderBoxSize) {\n        const { inlineSize, blockSize } = borderBoxSize[0];\n        return { width: inlineSize, height: blockSize };\n    }\n    else if (target instanceof SVGElement && \"getBBox\" in target) {\n        return target.getBBox();\n    }\n    else {\n        return {\n            width: target.offsetWidth,\n            height: target.offsetHeight,\n        };\n    }\n}\nfunction notifyTarget({ target, contentRect, borderBoxSize, }) {\n    var _a;\n    (_a = resizeHandlers.get(target)) === null || _a === void 0 ? void 0 : _a.forEach((handler) => {\n        handler({\n            target,\n            contentSize: contentRect,\n            get size() {\n                return getElementSize(target, borderBoxSize);\n            },\n        });\n    });\n}\nfunction notifyAll(entries) {\n    entries.forEach(notifyTarget);\n}\nfunction createResizeObserver() {\n    if (typeof ResizeObserver === \"undefined\")\n        return;\n    observer = new ResizeObserver(notifyAll);\n}\nfunction resizeElement(target, handler) {\n    if (!observer)\n        createResizeObserver();\n    const elements = resolveElements(target);\n    elements.forEach((element) => {\n        let elementHandlers = resizeHandlers.get(element);\n        if (!elementHandlers) {\n            elementHandlers = new Set();\n            resizeHandlers.set(element, elementHandlers);\n        }\n        elementHandlers.add(handler);\n        observer === null || observer === void 0 ? void 0 : observer.observe(element);\n    });\n    return () => {\n        elements.forEach((element) => {\n            const elementHandlers = resizeHandlers.get(element);\n            elementHandlers === null || elementHandlers === void 0 ? void 0 : elementHandlers.delete(handler);\n            if (!(elementHandlers === null || elementHandlers === void 0 ? void 0 : elementHandlers.size)) {\n                observer === null || observer === void 0 ? void 0 : observer.unobserve(element);\n            }\n        });\n    };\n}\n\nexport { resizeElement };\n","const windowCallbacks = new Set();\nlet windowResizeHandler;\nfunction createWindowResizeHandler() {\n    windowResizeHandler = () => {\n        const size = {\n            width: window.innerWidth,\n            height: window.innerHeight,\n        };\n        const info = {\n            target: window,\n            size,\n            contentSize: size,\n        };\n        windowCallbacks.forEach((callback) => callback(info));\n    };\n    window.addEventListener(\"resize\", windowResizeHandler);\n}\nfunction resizeWindow(callback) {\n    windowCallbacks.add(callback);\n    if (!windowResizeHandler)\n        createWindowResizeHandler();\n    return () => {\n        windowCallbacks.delete(callback);\n        if (!windowCallbacks.size && windowResizeHandler) {\n            windowResizeHandler = undefined;\n        }\n    };\n}\n\nexport { resizeWindow };\n","import { resizeElement } from './handle-element.mjs';\nimport { resizeWindow } from './handle-window.mjs';\n\nfunction resize(a, b) {\n    return typeof a === \"function\" ? resizeWindow(a) : resizeElement(a, b);\n}\n\nexport { resize };\n","import { progress } from 'motion-utils';\nimport { velocityPerSecond } from '../../../utils/velocity-per-second.mjs';\n\n/**\n * A time in milliseconds, beyond which we consider the scroll velocity to be 0.\n */\nconst maxElapsed = 50;\nconst createAxisInfo = () => ({\n    current: 0,\n    offset: [],\n    progress: 0,\n    scrollLength: 0,\n    targetOffset: 0,\n    targetLength: 0,\n    containerLength: 0,\n    velocity: 0,\n});\nconst createScrollInfo = () => ({\n    time: 0,\n    x: createAxisInfo(),\n    y: createAxisInfo(),\n});\nconst keys = {\n    x: {\n        length: \"Width\",\n        position: \"Left\",\n    },\n    y: {\n        length: \"Height\",\n        position: \"Top\",\n    },\n};\nfunction updateAxisInfo(element, axisName, info, time) {\n    const axis = info[axisName];\n    const { length, position } = keys[axisName];\n    const prev = axis.current;\n    const prevTime = info.time;\n    axis.current = element[`scroll${position}`];\n    axis.scrollLength = element[`scroll${length}`] - element[`client${length}`];\n    axis.offset.length = 0;\n    axis.offset[0] = 0;\n    axis.offset[1] = axis.scrollLength;\n    axis.progress = progress(0, axis.scrollLength, axis.current);\n    const elapsed = time - prevTime;\n    axis.velocity =\n        elapsed > maxElapsed\n            ? 0\n            : velocityPerSecond(axis.current - prev, elapsed);\n}\nfunction updateScrollInfo(element, info, time) {\n    updateAxisInfo(element, \"x\", info, time);\n    updateAxisInfo(element, \"y\", info, time);\n    info.time = time;\n}\n\nexport { createScrollInfo, updateScrollInfo };\n","function calcInset(element, container) {\n    const inset = { x: 0, y: 0 };\n    let current = element;\n    while (current && current !== container) {\n        if (current instanceof HTMLElement) {\n            inset.x += current.offsetLeft;\n            inset.y += current.offsetTop;\n            current = current.offsetParent;\n        }\n        else if (current.tagName === \"svg\") {\n            /**\n             * This isn't an ideal approach to measuring the offset of <svg /> tags.\n             * It would be preferable, given they behave like HTMLElements in most ways\n             * to use offsetLeft/Top. But these don't exist on <svg />. Likewise we\n             * can't use .getBBox() like most SVG elements as these provide the offset\n             * relative to the SVG itself, which for <svg /> is usually 0x0.\n             */\n            const svgBoundingBox = current.getBoundingClientRect();\n            current = current.parentElement;\n            const parentBoundingBox = current.getBoundingClientRect();\n            inset.x += svgBoundingBox.left - parentBoundingBox.left;\n            inset.y += svgBoundingBox.top - parentBoundingBox.top;\n        }\n        else if (current instanceof SVGGraphicsElement) {\n            const { x, y } = current.getBBox();\n            inset.x += x;\n            inset.y += y;\n            let svg = null;\n            let parent = current.parentNode;\n            while (!svg) {\n                if (parent.tagName === \"svg\") {\n                    svg = parent;\n                }\n                parent = current.parentNode;\n            }\n            current = svg;\n        }\n        else {\n            break;\n        }\n    }\n    return inset;\n}\n\nexport { calcInset };\n","const namedEdges = {\n    start: 0,\n    center: 0.5,\n    end: 1,\n};\nfunction resolveEdge(edge, length, inset = 0) {\n    let delta = 0;\n    /**\n     * If we have this edge defined as a preset, replace the definition\n     * with the numerical value.\n     */\n    if (edge in namedEdges) {\n        edge = namedEdges[edge];\n    }\n    /**\n     * Handle unit values\n     */\n    if (typeof edge === \"string\") {\n        const asNumber = parseFloat(edge);\n        if (edge.endsWith(\"px\")) {\n            delta = asNumber;\n        }\n        else if (edge.endsWith(\"%\")) {\n            edge = asNumber / 100;\n        }\n        else if (edge.endsWith(\"vw\")) {\n            delta = (asNumber / 100) * document.documentElement.clientWidth;\n        }\n        else if (edge.endsWith(\"vh\")) {\n            delta = (asNumber / 100) * document.documentElement.clientHeight;\n        }\n        else {\n            edge = asNumber;\n        }\n    }\n    /**\n     * If the edge is defined as a number, handle as a progress value.\n     */\n    if (typeof edge === \"number\") {\n        delta = length * edge;\n    }\n    return inset + delta;\n}\n\nexport { namedEdges, resolveEdge };\n","import { resolveEdge, namedEdges } from './edge.mjs';\n\nconst defaultOffset = [0, 0];\nfunction resolveOffset(offset, containerLength, targetLength, targetInset) {\n    let offsetDefinition = Array.isArray(offset) ? offset : defaultOffset;\n    let targetPoint = 0;\n    let containerPoint = 0;\n    if (typeof offset === \"number\") {\n        /**\n         * If we're provided offset: [0, 0.5, 1] then each number x should become\n         * [x, x], so we default to the behaviour of mapping 0 => 0 of both target\n         * and container etc.\n         */\n        offsetDefinition = [offset, offset];\n    }\n    else if (typeof offset === \"string\") {\n        offset = offset.trim();\n        if (offset.includes(\" \")) {\n            offsetDefinition = offset.split(\" \");\n        }\n        else {\n            /**\n             * If we're provided a definition like \"100px\" then we want to apply\n             * that only to the top of the target point, leaving the container at 0.\n             * Whereas a named offset like \"end\" should be applied to both.\n             */\n            offsetDefinition = [offset, namedEdges[offset] ? offset : `0`];\n        }\n    }\n    targetPoint = resolveEdge(offsetDefinition[0], targetLength, targetInset);\n    containerPoint = resolveEdge(offsetDefinition[1], containerLength);\n    return targetPoint - containerPoint;\n}\n\nexport { resolveOffset };\n","const ScrollOffset = {\n    Enter: [\n        [0, 1],\n        [1, 1],\n    ],\n    Exit: [\n        [0, 0],\n        [1, 0],\n    ],\n    Any: [\n        [1, 0],\n        [0, 1],\n    ],\n    All: [\n        [0, 0],\n        [1, 1],\n    ],\n};\n\nexport { ScrollOffset };\n","import { clamp } from '../../../../utils/clamp.mjs';\nimport { interpolate } from '../../../../utils/interpolate.mjs';\nimport { defaultOffset } from '../../../../utils/offsets/default.mjs';\nimport { calcInset } from './inset.mjs';\nimport { resolveOffset } from './offset.mjs';\nimport { ScrollOffset } from './presets.mjs';\n\nconst point = { x: 0, y: 0 };\nfunction getTargetSize(target) {\n    return \"getBBox\" in target && target.tagName !== \"svg\"\n        ? target.getBBox()\n        : { width: target.clientWidth, height: target.clientHeight };\n}\nfunction resolveOffsets(container, info, options) {\n    const { offset: offsetDefinition = ScrollOffset.All } = options;\n    const { target = container, axis = \"y\" } = options;\n    const lengthLabel = axis === \"y\" ? \"height\" : \"width\";\n    const inset = target !== container ? calcInset(target, container) : point;\n    /**\n     * Measure the target and container. If they're the same thing then we\n     * use the container's scrollWidth/Height as the target, from there\n     * all other calculations can remain the same.\n     */\n    const targetSize = target === container\n        ? { width: container.scrollWidth, height: container.scrollHeight }\n        : getTargetSize(target);\n    const containerSize = {\n        width: container.clientWidth,\n        height: container.clientHeight,\n    };\n    /**\n     * Reset the length of the resolved offset array rather than creating a new one.\n     * TODO: More reusable data structures for targetSize/containerSize would also be good.\n     */\n    info[axis].offset.length = 0;\n    /**\n     * Populate the offset array by resolving the user's offset definition into\n     * a list of pixel scroll offets.\n     */\n    let hasChanged = !info[axis].interpolate;\n    const numOffsets = offsetDefinition.length;\n    for (let i = 0; i < numOffsets; i++) {\n        const offset = resolveOffset(offsetDefinition[i], containerSize[lengthLabel], targetSize[lengthLabel], inset[axis]);\n        if (!hasChanged && offset !== info[axis].interpolatorOffsets[i]) {\n            hasChanged = true;\n        }\n        info[axis].offset[i] = offset;\n    }\n    /**\n     * If the pixel scroll offsets have changed, create a new interpolator function\n     * to map scroll value into a progress.\n     */\n    if (hasChanged) {\n        info[axis].interpolate = interpolate(info[axis].offset, defaultOffset(offsetDefinition), { clamp: false });\n        info[axis].interpolatorOffsets = [...info[axis].offset];\n    }\n    info[axis].progress = clamp(0, 1, info[axis].interpolate(info[axis].current));\n}\n\nexport { resolveOffsets };\n","import { warnOnce } from '../../../utils/warn-once.mjs';\nimport { updateScrollInfo } from './info.mjs';\nimport { resolveOffsets } from './offsets/index.mjs';\n\nfunction measure(container, target = container, info) {\n    /**\n     * Find inset of target within scrollable container\n     */\n    info.x.targetOffset = 0;\n    info.y.targetOffset = 0;\n    if (target !== container) {\n        let node = target;\n        while (node && node !== container) {\n            info.x.targetOffset += node.offsetLeft;\n            info.y.targetOffset += node.offsetTop;\n            node = node.offsetParent;\n        }\n    }\n    info.x.targetLength =\n        target === container ? target.scrollWidth : target.clientWidth;\n    info.y.targetLength =\n        target === container ? target.scrollHeight : target.clientHeight;\n    info.x.containerLength = container.clientWidth;\n    info.y.containerLength = container.clientHeight;\n    /**\n     * In development mode ensure scroll containers aren't position: static as this makes\n     * it difficult to measure their relative positions.\n     */\n    if (process.env.NODE_ENV !== \"production\") {\n        if (container && target && target !== container) {\n            warnOnce(getComputedStyle(container).position !== \"static\", \"Please ensure that the container has a non-static position, like 'relative', 'fixed', or 'absolute' to ensure scroll offset is calculated correctly.\");\n        }\n    }\n}\nfunction createOnScrollHandler(element, onScroll, info, options = {}) {\n    return {\n        measure: () => measure(element, options.target, info),\n        update: (time) => {\n            updateScrollInfo(element, info, time);\n            if (options.offset || options.target) {\n                resolveOffsets(element, info, options);\n            }\n        },\n        notify: () => onScroll(info),\n    };\n}\n\nexport { createOnScrollHandler };\n","import { resize } from '../resize/index.mjs';\nimport { createScrollInfo } from './info.mjs';\nimport { createOnScrollHandler } from './on-scroll-handler.mjs';\nimport { frame, cancelFrame, frameData } from '../../../frameloop/frame.mjs';\n\nconst scrollListeners = new WeakMap();\nconst resizeListeners = new WeakMap();\nconst onScrollHandlers = new WeakMap();\nconst getEventTarget = (element) => element === document.documentElement ? window : element;\nfunction scrollInfo(onScroll, { container = document.documentElement, ...options } = {}) {\n    let containerHandlers = onScrollHandlers.get(container);\n    /**\n     * Get the onScroll handlers for this container.\n     * If one isn't found, create a new one.\n     */\n    if (!containerHandlers) {\n        containerHandlers = new Set();\n        onScrollHandlers.set(container, containerHandlers);\n    }\n    /**\n     * Create a new onScroll handler for the provided callback.\n     */\n    const info = createScrollInfo();\n    const containerHandler = createOnScrollHandler(container, onScroll, info, options);\n    containerHandlers.add(containerHandler);\n    /**\n     * Check if there's a scroll event listener for this container.\n     * If not, create one.\n     */\n    if (!scrollListeners.has(container)) {\n        const measureAll = () => {\n            for (const handler of containerHandlers)\n                handler.measure();\n        };\n        const updateAll = () => {\n            for (const handler of containerHandlers) {\n                handler.update(frameData.timestamp);\n            }\n        };\n        const notifyAll = () => {\n            for (const handler of containerHandlers)\n                handler.notify();\n        };\n        const listener = () => {\n            frame.read(measureAll, false, true);\n            frame.read(updateAll, false, true);\n            frame.update(notifyAll, false, true);\n        };\n        scrollListeners.set(container, listener);\n        const target = getEventTarget(container);\n        window.addEventListener(\"resize\", listener, { passive: true });\n        if (container !== document.documentElement) {\n            resizeListeners.set(container, resize(container, listener));\n        }\n        target.addEventListener(\"scroll\", listener, { passive: true });\n    }\n    const listener = scrollListeners.get(container);\n    frame.read(listener, false, true);\n    return () => {\n        var _a;\n        cancelFrame(listener);\n        /**\n         * Check if we even have any handlers for this container.\n         */\n        const currentHandlers = onScrollHandlers.get(container);\n        if (!currentHandlers)\n            return;\n        currentHandlers.delete(containerHandler);\n        if (currentHandlers.size)\n            return;\n        /**\n         * If no more handlers, remove the scroll listener too.\n         */\n        const scrollListener = scrollListeners.get(container);\n        scrollListeners.delete(container);\n        if (scrollListener) {\n            getEventTarget(container).removeEventListener(\"scroll\", scrollListener);\n            (_a = resizeListeners.get(container)) === null || _a === void 0 ? void 0 : _a();\n            window.removeEventListener(\"resize\", scrollListener);\n        }\n    };\n}\n\nexport { scrollInfo };\n","import { supportsScrollTimeline } from 'motion-dom';\nimport { noop } from 'motion-utils';\nimport { observeTimeline } from './observe.mjs';\nimport { scrollInfo } from './track.mjs';\n\nfunction scrollTimelineFallback({ source, container, axis = \"y\", }) {\n    // Support legacy source argument. Deprecate later.\n    if (source)\n        container = source;\n    // ScrollTimeline records progress as a percentage CSSUnitValue\n    const currentTime = { value: 0 };\n    const cancel = scrollInfo((info) => {\n        currentTime.value = info[axis].progress * 100;\n    }, { container, axis });\n    return { currentTime, cancel };\n}\nconst timelineCache = new Map();\nfunction getTimeline({ source, container = document.documentElement, axis = \"y\", } = {}) {\n    // Support legacy source argument. Deprecate later.\n    if (source)\n        container = source;\n    if (!timelineCache.has(container)) {\n        timelineCache.set(container, {});\n    }\n    const elementCache = timelineCache.get(container);\n    if (!elementCache[axis]) {\n        elementCache[axis] = supportsScrollTimeline()\n            ? new ScrollTimeline({ source: container, axis })\n            : scrollTimelineFallback({ source: container, axis });\n    }\n    return elementCache[axis];\n}\n/**\n * If the onScroll function has two arguments, it's expecting\n * more specific information about the scroll from scrollInfo.\n */\nfunction isOnScrollWithInfo(onScroll) {\n    return onScroll.length === 2;\n}\n/**\n * Currently, we only support element tracking with `scrollInfo`, though in\n * the future we can also offer ViewTimeline support.\n */\nfunction needsElementTracking(options) {\n    return options && (options.target || options.offset);\n}\nfunction scrollFunction(onScroll, options) {\n    if (isOnScrollWithInfo(onScroll) || needsElementTracking(options)) {\n        return scrollInfo((info) => {\n            onScroll(info[options.axis].progress, info);\n        }, options);\n    }\n    else {\n        return observeTimeline(onScroll, getTimeline(options));\n    }\n}\nfunction scrollAnimation(animation, options) {\n    animation.flatten();\n    if (needsElementTracking(options)) {\n        animation.pause();\n        return scrollInfo((info) => {\n            animation.time = animation.duration * info[options.axis].progress;\n        }, options);\n    }\n    else {\n        const timeline = getTimeline(options);\n        if (animation.attachTimeline) {\n            return animation.attachTimeline(timeline, (valueAnimation) => {\n                valueAnimation.pause();\n                return observeTimeline((progress) => {\n                    valueAnimation.time = valueAnimation.duration * progress;\n                }, timeline);\n            });\n        }\n        else {\n            return noop;\n        }\n    }\n}\nfunction scroll(onScroll, { axis = \"y\", ...options } = {}) {\n    const optionsWithDefaults = { axis, ...options };\n    return typeof onScroll === \"function\"\n        ? scrollFunction(onScroll, optionsWithDefaults)\n        : scrollAnimation(onScroll, optionsWithDefaults);\n}\n\nexport { scroll };\n","import { Component } from '@verndale/core';\nimport { scroll } from 'framer-motion/dom';\nimport { debounce } from '../helpers';\n\nclass ScrollIndicator extends Component {\n  private barHeight: number = 0;\n  private resizeObserver: ResizeObserver = new ResizeObserver(() => {});\n\n  constructor(el: HTMLElement) {\n    super(el);\n\n    if (!this.dom.$footer) {\n      this.el.style.display = 'none';\n      console.warn('WARNING: No footer element found. Scroll indicator hidden.');\n      return;\n    }\n\n    this.initBar();\n    scroll((progress: number) => this.handleScroll(progress as number));\n    this.addResizeObserver();\n  }\n\n  addListeners() {\n    if (this.dom.$footer) window.addEventListener('resize', debounce(this.initBar.bind(this), 250));\n  }\n\n  setupDefaults() {\n    this.dom = {\n      el: this.el,\n      $bar: this.el.querySelector('.scroll-indicator__bar') as HTMLElement,\n      $dot: this.el.querySelector('.scroll-indicator__dot') as HTMLElement,\n      $footer: document.querySelector('.footer') as HTMLElement\n    };\n  }\n\n  addResizeObserver() {\n    this.resizeObserver = new ResizeObserver(entries => {\n      for (const entry of entries) {\n        if (entry.target === document.body && entry.contentRect) {\n          this.initBar();\n        }\n      }\n    });\n    this.resizeObserver.observe(document.body);\n  }\n\n  handleResize() {\n    debounce(this.initBar, 250);\n  }\n\n  initBar() {\n    if (!this.dom) return;\n\n    const bar = this.dom.$bar as HTMLDivElement;\n    const footer = this.dom.$footer as HTMLDivElement;\n    const footerRect = footer.getBoundingClientRect();\n    const barRect = bar.getBoundingClientRect();\n    let barHeight = footerRect.top - barRect.top;\n    const remainder = barHeight % 6;\n    barHeight -= remainder;\n\n    bar.style.blockSize = `${barHeight}px`;\n\n    this.barHeight = barHeight;\n  }\n\n  handleScroll = (progress: number) => {\n    const dot = this.dom.$dot as HTMLDivElement;\n    dot.style.insetBlockStart = `${Math.ceil(progress * this.barHeight)}px`;\n  };\n\n  componentWillUnmount() {\n    this.resizeObserver.disconnect();\n  }\n}\n\nexport default ScrollIndicator;\n"],"names":["observeTimeline","update","timeline","prevProgress","onFrame","currentTime","progress","frame","cancelFrame","resizeHandlers","observer","getElementSize","target","borderBoxSize","inlineSize","blockSize","notifyTarget","contentRect","_a","handler","notifyAll","entries","createResizeObserver","resizeElement","elements","resolveElements","element","elementHandlers","windowCallbacks","windowResizeHandler","createWindowResizeHandler","size","info","callback","resizeWindow","resize","a","b","maxElapsed","createAxisInfo","createScrollInfo","keys","updateAxisInfo","axisName","time","axis","length","position","prev","prevTime","elapsed","velocityPerSecond","updateScrollInfo","calcInset","container","inset","current","svgBoundingBox","parentBoundingBox","x","y","svg","parent","namedEdges","resolveEdge","edge","delta","asNumber","defaultOffset","resolveOffset","offset","containerLength","targetLength","targetInset","offsetDefinition","targetPoint","containerPoint","ScrollOffset","point","getTargetSize","resolveOffsets","options","lengthLabel","targetSize","containerSize","hasChanged","numOffsets","i","interpolate","clamp","measure","node","createOnScrollHandler","onScroll","scrollListeners","resizeListeners","onScrollHandlers","getEventTarget","scrollInfo","containerHandlers","containerHandler","measureAll","updateAll","frameData","listener","currentHandlers","scrollListener","scrollTimelineFallback","source","cancel","timelineCache","getTimeline","elementCache","supportsScrollTimeline","isOnScrollWithInfo","needsElementTracking","scrollFunction","scrollAnimation","animation","valueAnimation","noop","scroll","optionsWithDefaults","ScrollIndicator","Component","el","__publicField","dot","debounce","entry","bar","footerRect","barRect","barHeight","remainder"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12]}