scroll-to-future 1.0.1 → 1.0.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.
- package/dist/index.js +0 -10
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +0 -10
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -781,12 +781,6 @@ var useFuture = ({
|
|
|
781
781
|
(0, import_react4.useEffect)(() => {
|
|
782
782
|
if (!findedTarget) return;
|
|
783
783
|
const mode = config.scrollBar?.hideNativeScrollbar ?? false;
|
|
784
|
-
console.log("native scrollbar effect:", {
|
|
785
|
-
mode,
|
|
786
|
-
nativeOnMobile,
|
|
787
|
-
coversAllScrollableAxes,
|
|
788
|
-
target: findedTarget
|
|
789
|
-
});
|
|
790
784
|
if (mode === false || !coversAllScrollableAxes) {
|
|
791
785
|
return;
|
|
792
786
|
}
|
|
@@ -1701,10 +1695,6 @@ var ScrollToFuture = ({
|
|
|
1701
1695
|
const mounted = useMounted();
|
|
1702
1696
|
const [findedTarget, setFindedTarget] = (0, import_react7.useState)(null);
|
|
1703
1697
|
const config = merge({ scrollBar, thumb, selectTheme, optionsTheme });
|
|
1704
|
-
console.log("hideNativeScrollbar:", {
|
|
1705
|
-
original: scrollBar.hideNativeScrollbar,
|
|
1706
|
-
merged: config.scrollBar.hideNativeScrollbar
|
|
1707
|
-
});
|
|
1708
1698
|
const vars = variables(config.optionsTheme);
|
|
1709
1699
|
const mode = config.scrollBar?.mode ?? "both";
|
|
1710
1700
|
const positionMode = config.scrollBar?.positionMode ?? "after";
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/ScrollToFuture.tsx","../src/components/Axios/ScrollAxis.tsx","../src/utils/constants.ts","../src/utils/helper.ts","../src/hooks/useElementScrollObserver.ts","../src/hooks/useRefReady.ts","../src/hooks/useFuture.ts","../src/utils/native-scrollbar.ts","../src/hooks/useMounted.tsx","../src/hooks/useTargetRect.ts","../src/themes/collection.theme.ts","../src/themes/preset.ts","../src/utils/config.ts","../src/utils/merge.ts","../src/utils/mobile-detect.ts","../src/utils/variables-css.ts"],"sourcesContent":["export { ScrollToFuture } from \"./ScrollToFuture\";\r\nexport type { ScrollToFutureConfig } from \"./types/scroll-to-future.type\";\r\nimport \"./css/index.css\";\r\n","import { useRef, useState } from \"react\";\r\nimport { ScrollAxis } from \"./components/Axios/ScrollAxis\";\r\nimport \"./css/axis.css\";\r\nimport \"./css/scroll.css\";\r\n\r\nimport { useElementScrollObserver } from \"./hooks/useElementScrollObserver\";\r\nimport { useFuture } from \"./hooks/useFuture\";\r\nimport { useMounted } from \"./hooks/useMounted\";\r\nimport { useTargetRect } from \"./hooks/useTargetRect\";\r\nimport type { ScrollToFutureInterface } from \"./types/scroll-to-future.type\";\r\nimport { merge } from \"./utils/merge\";\r\nimport { shouldUseNativeScrollbar } from \"./utils/mobile-detect\";\r\n\r\nimport { variables } from \"./utils/variables-css\";\r\n\r\nexport const ScrollToFuture = ({\r\n target,\r\n scrollBar = {},\r\n thumb = {},\r\n selectTheme = \"primary\",\r\n optionsTheme = {},\r\n nativeOnMobile = true,\r\n}: ScrollToFutureInterface) => {\r\n const anchorRef = useRef<HTMLSpanElement | null>(null);\r\n const targetRef = useRef<HTMLElement | null>(null);\r\n const mounted = useMounted();\r\n const [findedTarget, setFindedTarget] = useState<HTMLElement | null>(null);\r\n\r\n const config = merge({ scrollBar, thumb, selectTheme, optionsTheme });\r\n console.log(\"hideNativeScrollbar:\", {\r\n original: scrollBar.hideNativeScrollbar,\r\n merged: config.scrollBar.hideNativeScrollbar,\r\n });\r\n const vars = variables(config.optionsTheme);\r\n const mode = config.scrollBar?.mode ?? \"both\";\r\n const positionMode = config.scrollBar?.positionMode ?? \"after\";\r\n const superimposition = config.scrollBar?.superimposition ?? \"over\";\r\n const nativeScrollOnMobile = shouldUseNativeScrollbar() && nativeOnMobile;\r\n\r\n const metrics = useElementScrollObserver(findedTarget);\r\n const rect = useTargetRect(findedTarget);\r\n const wantsY = mode === \"vertical\" || mode === \"both\";\r\n const wantsX = mode === \"horizontal\" || mode === \"both\";\r\n const showY = wantsY && metrics.y.canScroll;\r\n const showX = wantsX && metrics.x.canScroll;\r\n const coversAllScrollableAxes =\r\n (!metrics.x.canScroll || showX) && (!metrics.y.canScroll || showY);\r\n\r\n useFuture({\r\n target,\r\n anchorRef,\r\n targetRef,\r\n setFindedTarget,\r\n mounted,\r\n config,\r\n showY,\r\n showX,\r\n superimposition,\r\n findedTarget,\r\n positionMode,\r\n coversAllScrollableAxes,\r\n nativeOnMobile,\r\n });\r\n\r\n if (!mounted || nativeScrollOnMobile) {\r\n return null;\r\n }\r\n\r\n const canRenderOverlay =\r\n findedTarget !== null && rect.width > 0 && rect.height > 0;\r\n\r\n return (\r\n <>\r\n {!target && (\r\n <span\r\n ref={anchorRef}\r\n aria-hidden=\"true\"\r\n style={{ display: \"none\" }}\r\n />\r\n )}\r\n\r\n {canRenderOverlay && (\r\n <div\r\n className=\"scroll-to-future__overlay\"\r\n style={{\r\n top: rect.top,\r\n left: rect.left,\r\n width: rect.width,\r\n height: rect.height,\r\n }}\r\n >\r\n {showY && (\r\n <ScrollAxis\r\n vars={vars}\r\n axis=\"y\"\r\n target={findedTarget}\r\n metrics={metrics.y}\r\n scrollBar={config.scrollBar!}\r\n thumb={thumb}\r\n positionMode={positionMode}\r\n superimposition={superimposition}\r\n hasCrossAxis={showX}\r\n />\r\n )}\r\n\r\n {showX && (\r\n <ScrollAxis\r\n vars={vars}\r\n axis=\"x\"\r\n target={findedTarget}\r\n metrics={metrics.x}\r\n scrollBar={config.scrollBar!}\r\n thumb={thumb}\r\n positionMode={positionMode}\r\n superimposition={superimposition}\r\n hasCrossAxis={showY}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n","import type React from \"react\";\r\nimport { useRef, useState } from \"react\";\r\nimport { Axis, AxisMetrics } from \"src/types/config/axis.type\";\r\nimport {\r\n PositionMode,\r\n ScrollToFutureScrollBar,\r\n Superimposition,\r\n} from \"src/types/config/scrollbar.type\";\r\nimport { ScrollToFutureThumb } from \"src/types/config/thumb.type\";\r\nimport { DEFAULT_TRACK_THICKNESS } from \"src/utils/constants\";\r\nimport {\r\n clamp,\r\n computeThumbPosition,\r\n computeThumbSize,\r\n fitInsetsWithinSize,\r\n isPageScrollTarget,\r\n parseBoundaryOffset,\r\n parsePxValue,\r\n resolveTrackLength,\r\n trackPositionToScroll,\r\n} from \"src/utils/helper\";\r\n\r\ninterface ScrollAxisProps {\r\n axis: Axis;\r\n target: HTMLElement | null;\r\n metrics: AxisMetrics;\r\n scrollBar: ScrollToFutureScrollBar;\r\n thumb: ScrollToFutureThumb;\r\n positionMode: PositionMode;\r\n superimposition: Superimposition;\r\n hasCrossAxis: boolean;\r\n vars: Record<string, string>;\r\n}\r\n\r\nexport const ScrollAxis = ({\r\n axis,\r\n target,\r\n metrics,\r\n scrollBar,\r\n thumb,\r\n positionMode,\r\n superimposition,\r\n hasCrossAxis,\r\n vars,\r\n}: ScrollAxisProps) => {\r\n const trackRef = useRef<HTMLDivElement>(null);\r\n //* REFS ====================================================================\r\n const dragState = useRef<{\r\n startPointer: number;\r\n startScroll: number;\r\n } | null>(null);\r\n //* REFS ====================================================================\r\n\r\n //* STATE ===================================================================\r\n const [isDragging, setIsDragging] = useState(false);\r\n //* STATE ===================================================================\r\n\r\n //* COMPUTED PROPERTIES =====================================================\r\n const requestedTrackThickness =\r\n parsePxValue(scrollBar.widthTrack) ?? DEFAULT_TRACK_THICKNESS;\r\n const trackThickness = Math.max(1, requestedTrackThickness);\r\n const trackBoundary = parseBoundaryOffset(scrollBar.boundaryOffset);\r\n const thumbBoundary = parseBoundaryOffset(thumb.boundaryOffset);\r\n const requestedCrossAxisOccupation =\r\n trackBoundary.start + trackThickness + trackBoundary.end;\r\n const maximumCrossAxisOccupation = Math.max(0, metrics.clientSize - 1);\r\n const crossAxisOccupation = hasCrossAxis\r\n ? clamp(requestedCrossAxisOccupation, 0, maximumCrossAxisOccupation)\r\n : 0;\r\n const availableMainStart =\r\n hasCrossAxis && positionMode === \"before\" ? crossAxisOccupation : 0;\r\n const availableMainSize = Math.max(\r\n 0,\r\n metrics.clientSize - crossAxisOccupation,\r\n );\r\n const trackCenter = availableMainStart + availableMainSize / 2;\r\n const requestedTrackLength = resolveTrackLength(\r\n scrollBar.heightTrack,\r\n metrics.clientSize,\r\n );\r\n const trackLength =\r\n availableMainSize > 0\r\n ? clamp(requestedTrackLength, 1, availableMainSize)\r\n : 0;\r\n const fittedThumbMainInsets = fitInsetsWithinSize(\r\n thumbBoundary.start,\r\n thumbBoundary.end,\r\n trackLength,\r\n 1,\r\n );\r\n const thumbMainStart = fittedThumbMainInsets.start;\r\n const innerTrackLength = fittedThumbMainInsets.innerSize;\r\n const requestedThumbCrossSize =\r\n trackThickness - thumbBoundary.start - thumbBoundary.end;\r\n const thumbCrossSize = clamp(requestedThumbCrossSize, 1, trackThickness);\r\n const thumbSize = computeThumbSize(\r\n innerTrackLength,\r\n metrics,\r\n thumb.heightTrack,\r\n );\r\n const thumbPositionInsideTrack = computeThumbPosition(\r\n innerTrackLength,\r\n thumbSize,\r\n metrics,\r\n );\r\n const thumbPosition = thumbMainStart + thumbPositionInsideTrack;\r\n const maxScroll = Math.max(0, metrics.scrollSize - metrics.clientSize);\r\n const maxThumbTravel = Math.max(0, innerTrackLength - thumbSize);\r\n //* COMPUTED PROPERTIES =====================================================\r\n\r\n //* METHODS =================================================================\r\n const setScrollPosition = (value: number) => {\r\n const targetElement = target;\r\n\r\n if (!targetElement) return;\r\n\r\n const nextValue = clamp(value, 0, Math.max(0, maxScroll));\r\n\r\n if (!isPageScrollTarget(targetElement)) {\r\n if (axis === \"x\") {\r\n //eslint-disable-next-line\r\n targetElement.scrollLeft = nextValue;\r\n } else {\r\n targetElement.scrollTop = nextValue;\r\n }\r\n\r\n return;\r\n }\r\n\r\n const targetStyle = window.getComputedStyle(targetElement);\r\n\r\n const overflowValue =\r\n axis === \"x\" ? targetStyle.overflowX : targetStyle.overflowY;\r\n\r\n const targetCanScroll =\r\n axis === \"x\"\r\n ? targetElement.scrollWidth - targetElement.clientWidth > 1\r\n : targetElement.scrollHeight - targetElement.clientHeight > 1;\r\n\r\n const targetOwnsScroll =\r\n targetCanScroll && /^(auto|scroll|overlay)$/.test(overflowValue);\r\n\r\n if (targetOwnsScroll) {\r\n if (axis === \"x\") {\r\n targetElement.scrollLeft = nextValue;\r\n } else {\r\n targetElement.scrollTop = nextValue;\r\n }\r\n\r\n return;\r\n }\r\n\r\n window.scrollTo({\r\n left: axis === \"x\" ? nextValue : window.scrollX,\r\n top: axis === \"y\" ? nextValue : window.scrollY,\r\n behavior: \"auto\",\r\n });\r\n };\r\n\r\n const handleThumbPointerDown = (\r\n event: React.PointerEvent<HTMLDivElement>,\r\n ) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n dragState.current = {\r\n startPointer: axis === \"x\" ? event.clientX : event.clientY,\r\n startScroll: metrics.scrollPos,\r\n };\r\n\r\n setIsDragging(true);\r\n\r\n event.currentTarget.setPointerCapture(event.pointerId);\r\n };\r\n\r\n const handleThumbPointerMove = (\r\n event: React.PointerEvent<HTMLDivElement>,\r\n ) => {\r\n const currentDragState = dragState.current;\r\n\r\n if (!currentDragState) return;\r\n if (maxScroll <= 0 || maxThumbTravel <= 0) return;\r\n\r\n const pointerPosition = axis === \"x\" ? event.clientX : event.clientY;\r\n\r\n const pointerDelta = pointerPosition - currentDragState.startPointer;\r\n\r\n const scrollDelta = (pointerDelta / maxThumbTravel) * maxScroll;\r\n\r\n setScrollPosition(currentDragState.startScroll + scrollDelta);\r\n };\r\n\r\n const stopDrag = (event: React.PointerEvent<HTMLDivElement>) => {\r\n if (!dragState.current) return;\r\n\r\n dragState.current = null;\r\n setIsDragging(false);\r\n\r\n try {\r\n event.currentTarget.releasePointerCapture(event.pointerId);\r\n } catch {}\r\n };\r\n\r\n const handleTrackPointerDown = (\r\n event: React.PointerEvent<HTMLDivElement>,\r\n ) => {\r\n if (event.target !== event.currentTarget) {\r\n return;\r\n }\r\n\r\n const trackElement = trackRef.current;\r\n\r\n if (!trackElement) return;\r\n if (maxThumbTravel <= 0) return;\r\n\r\n const rect = trackElement.getBoundingClientRect();\r\n\r\n const clickPosition =\r\n axis === \"x\" ? event.clientX - rect.left : event.clientY - rect.top;\r\n\r\n const clickInsideInnerTrack = clickPosition - thumbMainStart;\r\n\r\n const targetThumbStart = clamp(\r\n clickInsideInnerTrack - thumbSize / 2,\r\n 0,\r\n maxThumbTravel,\r\n );\r\n\r\n const nextScroll = trackPositionToScroll(\r\n targetThumbStart,\r\n innerTrackLength,\r\n thumbSize,\r\n metrics,\r\n );\r\n\r\n setScrollPosition(nextScroll);\r\n };\r\n //* METHODS =================================================================\r\n\r\n //* CHECKS ==================================================================\r\n if (\r\n !metrics.canScroll ||\r\n metrics.clientSize <= 0 ||\r\n trackLength < 1 ||\r\n innerTrackLength < 1 ||\r\n thumbSize < 1\r\n ) {\r\n return null;\r\n }\r\n //* CHECKS ==================================================================\r\n\r\n //* STYLES ==================================================================\r\n const trackStyle: React.CSSProperties =\r\n axis === \"y\"\r\n ? {\r\n position: \"absolute\",\r\n top: trackCenter,\r\n transform: \"translateY(-50%)\",\r\n\r\n width: trackThickness,\r\n height: trackLength,\r\n\r\n ...(positionMode === \"before\"\r\n ? {\r\n left: trackBoundary.start,\r\n }\r\n : {\r\n right: trackBoundary.end,\r\n }),\r\n\r\n pointerEvents: \"auto\",\r\n }\r\n : {\r\n position: \"absolute\",\r\n left: trackCenter,\r\n transform: \"translateX(-50%)\",\r\n width: trackLength,\r\n height: trackThickness,\r\n\r\n ...(positionMode === \"before\"\r\n ? {\r\n top: trackBoundary.start,\r\n }\r\n : {\r\n bottom: trackBoundary.end,\r\n }),\r\n\r\n pointerEvents: \"auto\",\r\n };\r\n\r\n const thumbStyle: React.CSSProperties =\r\n axis === \"y\"\r\n ? {\r\n top: thumbPosition,\r\n height: thumbSize,\r\n\r\n //* horizontal center\r\n left: \"50%\",\r\n width: thumbCrossSize,\r\n transform: \"translateX(-50%)\",\r\n }\r\n : {\r\n left: thumbPosition,\r\n width: thumbSize,\r\n\r\n //* vertical center\r\n top: \"50%\",\r\n height: thumbCrossSize,\r\n transform: \"translateY(-50%)\",\r\n };\r\n //* STYLES ==================================================================\r\n\r\n //* JSX =====================================================================\r\n return (\r\n <div\r\n ref={trackRef}\r\n className=\"scroll-to-future__track\"\r\n style={{ ...trackStyle, ...vars }}\r\n //eslint-disable-next-line\r\n onPointerDown={handleTrackPointerDown}\r\n data-axis={axis}\r\n data-superimposition={superimposition}\r\n >\r\n <div\r\n className={`scroll-to-future__thumb ${\r\n isDragging ? \"scroll-to-future__thumb--dragging\" : \"\"\r\n }`.trim()}\r\n style={thumbStyle}\r\n onPointerDown={handleThumbPointerDown}\r\n //eslint-disable-next-line\r\n onPointerMove={handleThumbPointerMove}\r\n onPointerUp={stopDrag}\r\n onPointerCancel={stopDrag}\r\n />\r\n </div>\r\n );\r\n //* JSX =====================================================================\r\n};\r\n","import { AxisMetrics } from \"../types/config/axis.type\";\r\n\r\nexport const MIN_THUMB_SIZE = 24;\r\nexport const DEFAULT_TRACK_THICKNESS = 8;\r\nexport const MAX_THUMB_RATIO = 0.8;\r\n\r\nexport const EMPTY_AXIS_METRICS: AxisMetrics = {\r\n scrollSize: 0,\r\n clientSize: 0,\r\n scrollPos: 0,\r\n canScroll: false,\r\n};\r\n","import {\r\n Axis,\r\n AxisInsets,\r\n AxisMetrics,\r\n ParsedOffset,\r\n} from \"../types/config/axis.type\";\r\nimport { BoundaryOffset } from \"../types/config/general.type\";\r\nimport { HeightTrackType } from \"../types/config/scrollbar.type\";\r\nimport { ScrollToFutureThumb } from \"../types/config/thumb.type\";\r\nimport { MAX_THUMB_RATIO, MIN_THUMB_SIZE } from \"./constants\";\r\n\r\nexport const clamp = (value: number, min: number, max: number): number =>\r\n Math.min(Math.max(value, min), Math.max(min, max));\r\n\r\nexport const parsePxValue = (value?: string | null): number | null => {\r\n if (!value) return null;\r\n const match = /^(-?\\d+(?:\\.\\d+)?)px$/.exec(value.trim());\r\n return match ? Number(match[1]) : null;\r\n};\r\n\r\nexport const parseBoundaryOffset = (\r\n value?: BoundaryOffset | null,\r\n): ParsedOffset => {\r\n if (!value) {\r\n return {\r\n start: 0,\r\n end: 0,\r\n };\r\n }\r\n\r\n const parts = value.trim().split(/\\s+/);\r\n\r\n const start = Math.max(0, parsePxValue(parts[0]) ?? 0);\r\n\r\n const end =\r\n parts.length > 1 ? Math.max(0, parsePxValue(parts[1]) ?? 0) : start;\r\n\r\n return {\r\n start,\r\n end,\r\n };\r\n};\r\n\r\nexport const fitInsetsWithinSize = (\r\n start: number,\r\n end: number,\r\n size: number,\r\n minInnerSize = 1,\r\n): {\r\n start: number;\r\n end: number;\r\n innerSize: number;\r\n} => {\r\n const safeSize = Math.max(0, size);\r\n\r\n if (safeSize <= 0) {\r\n return {\r\n start: 0,\r\n end: 0,\r\n innerSize: 0,\r\n };\r\n }\r\n\r\n const actualMinInnerSize = Math.min(Math.max(0, minInnerSize), safeSize);\r\n const safeStart = Math.max(0, start);\r\n const safeEnd = Math.max(0, end);\r\n const requestedInsetsSize = safeStart + safeEnd;\r\n const maximumInsetsSize = safeSize - actualMinInnerSize;\r\n\r\n if (requestedInsetsSize <= maximumInsetsSize) {\r\n return {\r\n start: safeStart,\r\n end: safeEnd,\r\n innerSize: safeSize - safeStart - safeEnd,\r\n };\r\n }\r\n\r\n if (requestedInsetsSize <= 0) {\r\n return {\r\n start: 0,\r\n end: 0,\r\n innerSize: safeSize,\r\n };\r\n }\r\n\r\n const scale = maximumInsetsSize / requestedInsetsSize;\r\n const fittedStart = safeStart * scale;\r\n const fittedEnd = safeEnd * scale;\r\n\r\n return {\r\n start: fittedStart,\r\n end: fittedEnd,\r\n innerSize: Math.max(\r\n actualMinInnerSize,\r\n safeSize - fittedStart - fittedEnd,\r\n ),\r\n };\r\n};\r\n\r\nexport const resolveAxisInsets = (\r\n value: BoundaryOffset | undefined,\r\n axis: Axis,\r\n): AxisInsets => {\r\n const { start, end } = parseBoundaryOffset(value);\r\n\r\n if (axis === \"y\") {\r\n return {\r\n cross: start,\r\n main: end,\r\n };\r\n }\r\n\r\n return {\r\n cross: start,\r\n main: end,\r\n };\r\n};\r\n\r\nexport const resolveTrackLength = (\r\n value: HeightTrackType | undefined,\r\n containerSize: number,\r\n): number => {\r\n if (!value) return containerSize;\r\n\r\n const px = parsePxValue(value);\r\n if (px !== null) return px;\r\n\r\n const percentMatch = /^(-?\\d+(?:\\.\\d+)?)%$/.exec(value);\r\n if (percentMatch) return (Number(percentMatch[1]) / 100) * containerSize;\r\n\r\n const vhMatch = /^(-?\\d+(?:\\.\\d+)?)vh$/.exec(value);\r\n if (vhMatch) {\r\n const vh =\r\n typeof window !== \"undefined\" ? window.innerHeight : containerSize;\r\n return (Number(vhMatch[1]) / 100) * vh;\r\n }\r\n\r\n const dvhMatch = /^(-?\\d+(?:\\.\\d+)?)d(s)?vh$/.exec(value);\r\n if (dvhMatch) {\r\n const dvh =\r\n typeof window !== \"undefined\"\r\n ? (window.visualViewport?.height ?? window.innerHeight)\r\n : containerSize;\r\n return (Number(dvhMatch[1]) / 100) * dvh;\r\n }\r\n\r\n return containerSize;\r\n};\r\n\r\nexport const computeThumbSize = (\r\n trackLength: number,\r\n metrics: AxisMetrics,\r\n thumbHeightTrack: ScrollToFutureThumb[\"heightTrack\"],\r\n): number => {\r\n if (trackLength <= 0) return 0;\r\n\r\n const minSize = Math.min(MIN_THUMB_SIZE, trackLength);\r\n const maxSize = Math.min(\r\n trackLength,\r\n Math.max(minSize, trackLength * MAX_THUMB_RATIO),\r\n );\r\n\r\n if (!thumbHeightTrack || thumbHeightTrack === \"auto\") {\r\n const ratio =\r\n metrics.scrollSize > 0\r\n ? metrics.clientSize / metrics.scrollSize\r\n : 1;\r\n\r\n const autoSize = trackLength * clamp(ratio, 0, 1);\r\n return clamp(autoSize, minSize, maxSize);\r\n }\r\n\r\n const px = parsePxValue(thumbHeightTrack);\r\n\r\n if (px !== null) {\r\n return clamp(px, minSize, maxSize);\r\n }\r\n\r\n const percentMatch = /^(-?\\d+(?:\\.\\d+)?)%$/.exec(thumbHeightTrack.trim());\r\n\r\n if (percentMatch) {\r\n const size = (Number(percentMatch[1]) / 100) * trackLength;\r\n\r\n return clamp(size, minSize, maxSize);\r\n }\r\n\r\n return maxSize;\r\n};\r\n\r\nexport const computeThumbPosition = (\r\n trackLength: number,\r\n thumbSize: number,\r\n metrics: AxisMetrics,\r\n): number => {\r\n const maxScroll = metrics.scrollSize - metrics.clientSize;\r\n const maxThumbTravel = trackLength - thumbSize;\r\n if (maxScroll <= 0 || maxThumbTravel <= 0) return 0;\r\n const ratio = clamp(metrics.scrollPos / maxScroll, 0, 1);\r\n return ratio * maxThumbTravel;\r\n};\r\n\r\nexport const trackPositionToScroll = (\r\n trackPos: number,\r\n trackLength: number,\r\n thumbSize: number,\r\n metrics: AxisMetrics,\r\n): number => {\r\n const maxScroll = metrics.scrollSize - metrics.clientSize;\r\n const maxThumbTravel = trackLength - thumbSize;\r\n if (maxScroll <= 0 || maxThumbTravel <= 0) return 0;\r\n const ratio = clamp(trackPos / maxThumbTravel, 0, 1);\r\n return ratio * maxScroll;\r\n};\r\n\r\nexport const computeReservedSpace = (\r\n boundaryOffset: BoundaryOffset | undefined,\r\n trackThicknessPx: number,\r\n superimposition: \"over\" | \"after\" | undefined,\r\n): number => {\r\n if (superimposition !== \"after\") {\r\n return 0;\r\n }\r\n\r\n const { start, end } = parseBoundaryOffset(boundaryOffset);\r\n\r\n return start + trackThicknessPx + end;\r\n};\r\n\r\nexport const resolveScrollingElement = (el: HTMLElement): HTMLElement => {\r\n if (\r\n typeof document !== \"undefined\" &&\r\n (el === document.body || el === document.documentElement)\r\n ) {\r\n return (\r\n (document.scrollingElement as HTMLElement | null) ??\r\n document.documentElement\r\n );\r\n }\r\n return el;\r\n};\r\n\r\nexport const isPageScrollTarget = (el: HTMLElement): boolean =>\r\n typeof document !== \"undefined\" &&\r\n (el === document.body || el === document.documentElement);\r\n","import { useEffect, useRef, useState } from \"react\";\r\nimport { isPageScrollTarget } from \"../utils/helper\";\r\n\r\nimport { AxisMetrics, TargetMetrics } from \"../types/config/axis.type\";\r\nimport { EMPTY_AXIS_METRICS } from \"../utils/constants\";\r\nimport { useRefReady } from \"./useRefReady\";\r\n\r\nconst isSameAxisMetrics = (previous: AxisMetrics, next: AxisMetrics): boolean =>\r\n previous.scrollSize === next.scrollSize &&\r\n previous.clientSize === next.clientSize &&\r\n previous.scrollPos === next.scrollPos &&\r\n previous.canScroll === next.canScroll;\r\n\r\nconst getActualScrollPosition = (...values: number[]): number =>\r\n values.reduce((current, value) => {\r\n return Math.abs(value) > Math.abs(current) ? value : current;\r\n }, 0);\r\n\r\nexport const useElementScrollObserver = (\r\n target: HTMLElement | null | undefined,\r\n): TargetMetrics => {\r\n const [metrics, setMetrics] = useState<TargetMetrics>({\r\n x: EMPTY_AXIS_METRICS,\r\n y: EMPTY_AXIS_METRICS,\r\n });\r\n\r\n const rafRef = useRef<number | null>(null);\r\n const ready = useRefReady(target);\r\n\r\n useEffect(() => {\r\n const targetElement = target;\r\n\r\n if (!targetElement) {\r\n //eslint-disable-next-line\r\n setMetrics({\r\n x: EMPTY_AXIS_METRICS,\r\n y: EMPTY_AXIS_METRICS,\r\n });\r\n\r\n return;\r\n }\r\n\r\n const pageScroll = isPageScrollTarget(targetElement);\r\n\r\n const measure = () => {\r\n let nextX: AxisMetrics;\r\n let nextY: AxisMetrics;\r\n\r\n if (pageScroll) {\r\n const root = document.documentElement;\r\n const body = document.body;\r\n const scrollingElement =\r\n document.scrollingElement as HTMLElement | null;\r\n\r\n const scrollWidth = Math.max(\r\n root.scrollWidth,\r\n body.scrollWidth,\r\n scrollingElement?.scrollWidth ?? 0,\r\n targetElement.scrollWidth,\r\n );\r\n\r\n const scrollHeight = Math.max(\r\n root.scrollHeight,\r\n body.scrollHeight,\r\n scrollingElement?.scrollHeight ?? 0,\r\n targetElement.scrollHeight,\r\n );\r\n\r\n const clientWidth =\r\n window.visualViewport?.width ?? window.innerWidth;\r\n\r\n const clientHeight =\r\n window.visualViewport?.height ?? window.innerHeight;\r\n\r\n /*\r\n * Важно: не читаем только window.scrollY.\r\n * body может быть самостоятельным overflow-контейнером.\r\n */\r\n const scrollLeft = getActualScrollPosition(\r\n window.scrollX,\r\n root.scrollLeft,\r\n body.scrollLeft,\r\n scrollingElement?.scrollLeft ?? 0,\r\n targetElement.scrollLeft,\r\n );\r\n\r\n const scrollTop = getActualScrollPosition(\r\n window.scrollY,\r\n root.scrollTop,\r\n body.scrollTop,\r\n scrollingElement?.scrollTop ?? 0,\r\n targetElement.scrollTop,\r\n );\r\n\r\n nextX = {\r\n scrollSize: scrollWidth,\r\n clientSize: clientWidth,\r\n scrollPos: scrollLeft,\r\n canScroll: scrollWidth - clientWidth > 1,\r\n };\r\n\r\n nextY = {\r\n scrollSize: scrollHeight,\r\n clientSize: clientHeight,\r\n scrollPos: scrollTop,\r\n canScroll: scrollHeight - clientHeight > 1,\r\n };\r\n } else {\r\n nextX = {\r\n scrollSize: targetElement.scrollWidth,\r\n clientSize: targetElement.clientWidth,\r\n scrollPos: targetElement.scrollLeft,\r\n canScroll:\r\n targetElement.scrollWidth - targetElement.clientWidth >\r\n 1,\r\n };\r\n\r\n nextY = {\r\n scrollSize: targetElement.scrollHeight,\r\n clientSize: targetElement.clientHeight,\r\n scrollPos: targetElement.scrollTop,\r\n canScroll:\r\n targetElement.scrollHeight -\r\n targetElement.clientHeight >\r\n 1,\r\n };\r\n }\r\n\r\n setMetrics((previous) => {\r\n const sameX = isSameAxisMetrics(previous.x, nextX);\r\n const sameY = isSameAxisMetrics(previous.y, nextY);\r\n\r\n if (sameX && sameY) {\r\n return previous;\r\n }\r\n\r\n return {\r\n x: nextX,\r\n y: nextY,\r\n };\r\n });\r\n };\r\n\r\n const scheduleMeasure = () => {\r\n if (rafRef.current !== null) return;\r\n\r\n rafRef.current = requestAnimationFrame(() => {\r\n rafRef.current = null;\r\n measure();\r\n });\r\n };\r\n\r\n measure();\r\n\r\n const resizeObserver = new ResizeObserver(scheduleMeasure);\r\n\r\n if (pageScroll) {\r\n resizeObserver.observe(document.documentElement);\r\n resizeObserver.observe(document.body);\r\n\r\n if (\r\n targetElement !== document.documentElement &&\r\n targetElement !== document.body\r\n ) {\r\n resizeObserver.observe(targetElement);\r\n }\r\n } else {\r\n resizeObserver.observe(targetElement);\r\n\r\n Array.from(targetElement.children).forEach((child) => {\r\n resizeObserver.observe(child);\r\n });\r\n }\r\n\r\n const mutationRoot = pageScroll\r\n ? document.documentElement\r\n : targetElement;\r\n\r\n const mutationObserver = new MutationObserver((mutations) => {\r\n for (const mutation of mutations) {\r\n if (mutation.type !== \"childList\") continue;\r\n\r\n mutation.addedNodes.forEach((node) => {\r\n if (!(node instanceof Element)) return;\r\n\r\n try {\r\n resizeObserver.observe(node);\r\n } catch {}\r\n });\r\n }\r\n\r\n scheduleMeasure();\r\n });\r\n\r\n mutationObserver.observe(mutationRoot, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [\"style\", \"class\", \"hidden\"],\r\n });\r\n\r\n window.addEventListener(\"scroll\", scheduleMeasure, {\r\n capture: true,\r\n passive: true,\r\n });\r\n\r\n targetElement.addEventListener(\"scroll\", scheduleMeasure, {\r\n passive: true,\r\n });\r\n\r\n window.addEventListener(\"resize\", scheduleMeasure);\r\n\r\n window.visualViewport?.addEventListener(\"resize\", scheduleMeasure);\r\n\r\n window.visualViewport?.addEventListener(\"scroll\", scheduleMeasure);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n mutationObserver.disconnect();\r\n\r\n window.removeEventListener(\"scroll\", scheduleMeasure, true);\r\n\r\n targetElement.removeEventListener(\"scroll\", scheduleMeasure);\r\n\r\n window.removeEventListener(\"resize\", scheduleMeasure);\r\n\r\n window.visualViewport?.removeEventListener(\r\n \"resize\",\r\n scheduleMeasure,\r\n );\r\n\r\n window.visualViewport?.removeEventListener(\r\n \"scroll\",\r\n scheduleMeasure,\r\n );\r\n\r\n if (rafRef.current !== null) {\r\n cancelAnimationFrame(rafRef.current);\r\n rafRef.current = null;\r\n }\r\n };\r\n }, [target, ready]);\r\n\r\n return metrics;\r\n};\r\n","import { useEffect, useState } from \"react\";\r\n\r\nexport const useRefReady = (target: HTMLElement | null | undefined): number => {\r\n const [tick, setTick] = useState(0);\r\n\r\n useEffect(() => {\r\n if (target) return;\r\n let rafId: number;\r\n const check = () => {\r\n if (target) {\r\n setTick((t) => t + 1);\r\n } else {\r\n rafId = requestAnimationFrame(check);\r\n }\r\n };\r\n rafId = requestAnimationFrame(check);\r\n return () => cancelAnimationFrame(rafId);\r\n }, [target]);\r\n\r\n return tick;\r\n};\r\n","import { useEffect } from \"react\";\r\nimport { DEFAULT_TRACK_THICKNESS } from \"src/utils/constants\";\r\nimport { computeReservedSpace, parsePxValue } from \"src/utils/helper\";\r\nimport { hideNativeScrollbar } from \"src/utils/native-scrollbar\";\r\n\r\nexport const useFuture = ({\r\n target,\r\n anchorRef,\r\n targetRef,\r\n setFindedTarget,\r\n mounted,\r\n config,\r\n showY,\r\n showX,\r\n superimposition,\r\n findedTarget,\r\n positionMode,\r\n coversAllScrollableAxes,\r\n nativeOnMobile,\r\n}: {\r\n target?: React.RefObject<HTMLElement | null> | null;\r\n anchorRef: React.RefObject<HTMLSpanElement | null>;\r\n targetRef: React.RefObject<HTMLElement | null>;\r\n setFindedTarget: React.Dispatch<React.SetStateAction<HTMLElement | null>>;\r\n mounted: boolean;\r\n config: any;\r\n showY: boolean;\r\n showX: boolean;\r\n superimposition: \"over\" | \"after\";\r\n findedTarget: HTMLElement | null;\r\n positionMode: \"before\" | \"after\";\r\n coversAllScrollableAxes: boolean;\r\n nativeOnMobile: boolean;\r\n}) => {\r\n useEffect(() => {\r\n if (!mounted) return;\r\n\r\n let rafId: number | null = null;\r\n\r\n const resolveTarget = () => {\r\n const nextTarget = target\r\n ? target.current\r\n : (anchorRef.current?.parentElement ?? null);\r\n\r\n if (nextTarget) {\r\n targetRef.current = nextTarget;\r\n setFindedTarget((previousTarget) =>\r\n previousTarget === nextTarget ? previousTarget : nextTarget,\r\n );\r\n return;\r\n }\r\n rafId = requestAnimationFrame(resolveTarget);\r\n };\r\n resolveTarget();\r\n\r\n return () => {\r\n if (rafId !== null) {\r\n cancelAnimationFrame(rafId);\r\n }\r\n };\r\n }, [mounted, target]);\r\n\r\n useEffect(() => {\r\n const el = targetRef.current;\r\n if (!el) return;\r\n\r\n const trackThickness =\r\n parsePxValue(config.scrollBar?.widthTrack) ??\r\n DEFAULT_TRACK_THICKNESS;\r\n const reservedY = showY\r\n ? computeReservedSpace(\r\n config.scrollBar?.boundaryOffset,\r\n trackThickness,\r\n superimposition,\r\n )\r\n : 0;\r\n const reservedX = showX\r\n ? computeReservedSpace(\r\n config.scrollBar?.boundaryOffset,\r\n trackThickness,\r\n superimposition,\r\n )\r\n : 0;\r\n const previousInlinePadding = {\r\n left: el.style.paddingLeft,\r\n right: el.style.paddingRight,\r\n top: el.style.paddingTop,\r\n bottom: el.style.paddingBottom,\r\n };\r\n const computedStyle = window.getComputedStyle(el);\r\n const basePadding = {\r\n left: Number.parseFloat(computedStyle.paddingLeft) || 0,\r\n right: Number.parseFloat(computedStyle.paddingRight) || 0,\r\n top: Number.parseFloat(computedStyle.paddingTop) || 0,\r\n bottom: Number.parseFloat(computedStyle.paddingBottom) || 0,\r\n };\r\n\r\n if (reservedY > 0) {\r\n if (positionMode === \"before\") {\r\n el.style.paddingLeft = `${basePadding.left + reservedY}px`;\r\n } else {\r\n el.style.paddingRight = `${basePadding.right + reservedY}px`;\r\n }\r\n }\r\n\r\n if (reservedX > 0) {\r\n if (positionMode === \"before\") {\r\n el.style.paddingTop = `${basePadding.top + reservedX}px`;\r\n } else {\r\n el.style.paddingBottom = `${basePadding.bottom + reservedX}px`;\r\n }\r\n }\r\n\r\n return () => {\r\n el.style.paddingLeft = previousInlinePadding.left;\r\n el.style.paddingRight = previousInlinePadding.right;\r\n el.style.paddingTop = previousInlinePadding.top;\r\n el.style.paddingBottom = previousInlinePadding.bottom;\r\n };\r\n }, [\r\n findedTarget,\r\n showX,\r\n showY,\r\n positionMode,\r\n superimposition,\r\n config.scrollBar?.boundaryOffset,\r\n config.scrollBar?.widthTrack,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!findedTarget) return;\r\n\r\n const mode = config.scrollBar?.hideNativeScrollbar ?? false;\r\n\r\n console.log(\"native scrollbar effect:\", {\r\n mode,\r\n nativeOnMobile,\r\n coversAllScrollableAxes,\r\n target: findedTarget,\r\n });\r\n\r\n if (mode === false || !coversAllScrollableAxes) {\r\n return;\r\n }\r\n\r\n return hideNativeScrollbar(findedTarget, mode, nativeOnMobile);\r\n }, [\r\n findedTarget,\r\n coversAllScrollableAxes,\r\n nativeOnMobile,\r\n config.scrollBar?.hideNativeScrollbar,\r\n ]);\r\n};\r\n","import { HideNativeScrollbarMode } from \"src/types/config/scrollbar.type\";\r\n\r\nconst STYLE_ID = \"scroll-to-future-native-scrollbar-styles\";\r\nconst ALWAYS_CLASS = \"scroll-to-future-hide-native-scrollbar\";\r\nconst FINE_POINTER_CLASS = \"scroll-to-future-hide-native-scrollbar-fine\";\r\n\r\nconst classCounters = new WeakMap<HTMLElement, Map<string, number>>();\r\n\r\nconst installStyles = (): void => {\r\n if (typeof document === \"undefined\") return;\r\n\r\n if (document.getElementById(STYLE_ID)) {\r\n return;\r\n }\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = STYLE_ID;\r\n\r\n style.textContent = `\r\n .${ALWAYS_CLASS} {\r\n scrollbar-width: none !important;\r\n -ms-overflow-style: none !important;\r\n }\r\n\r\n .${ALWAYS_CLASS}::-webkit-scrollbar {\r\n display: none !important;\r\n width: 0 !important;\r\n height: 0 !important;\r\n background: transparent !important;\r\n }\r\n\r\n @media (any-pointer: fine) {\r\n .${FINE_POINTER_CLASS} {\r\n scrollbar-width: none !important;\r\n -ms-overflow-style: none !important;\r\n }\r\n\r\n .${FINE_POINTER_CLASS}::-webkit-scrollbar {\r\n display: none !important;\r\n width: 0 !important;\r\n height: 0 !important;\r\n background: transparent !important;\r\n }\r\n }\r\n `;\r\n\r\n document.head.appendChild(style);\r\n};\r\n\r\nconst retainClass = (element: HTMLElement, className: string): (() => void) => {\r\n let elementCounters = classCounters.get(element);\r\n\r\n if (!elementCounters) {\r\n elementCounters = new Map();\r\n classCounters.set(element, elementCounters);\r\n }\r\n\r\n const currentCount = elementCounters.get(className) ?? 0;\r\n elementCounters.set(className, currentCount + 1);\r\n\r\n if (currentCount === 0) {\r\n element.classList.add(className);\r\n }\r\n\r\n return () => {\r\n const counters = classCounters.get(element);\r\n if (!counters) return;\r\n\r\n const count = counters.get(className) ?? 0;\r\n\r\n if (count <= 1) {\r\n counters.delete(className);\r\n element.classList.remove(className);\r\n } else {\r\n counters.set(className, count - 1);\r\n }\r\n\r\n if (counters.size === 0) {\r\n classCounters.delete(element);\r\n }\r\n };\r\n};\r\n\r\nconst isDocumentScrollTarget = (target: HTMLElement): boolean => {\r\n if (typeof document === \"undefined\") {\r\n return false;\r\n }\r\n\r\n return (\r\n target === document.body ||\r\n target === document.documentElement ||\r\n target === document.scrollingElement\r\n );\r\n};\r\n\r\nconst resolveStyleTargets = (target: HTMLElement): HTMLElement[] => {\r\n if (!isDocumentScrollTarget(target)) {\r\n return [target];\r\n }\r\n\r\n const targets = new Set<HTMLElement>();\r\n targets.add(document.documentElement);\r\n\r\n if (document.body) {\r\n targets.add(document.body);\r\n }\r\n\r\n const scrollingElement = document.scrollingElement;\r\n\r\n if (scrollingElement instanceof HTMLElement) {\r\n targets.add(scrollingElement);\r\n }\r\n\r\n return Array.from(targets);\r\n};\r\n\r\nconst isMobileInputDevice = (): boolean => {\r\n if (typeof window === \"undefined\" || typeof navigator === \"undefined\") {\r\n return false;\r\n }\r\n\r\n const coarsePointer = window.matchMedia(\"(pointer: coarse)\").matches;\r\n const cannotHover = window.matchMedia(\"(hover: none)\").matches;\r\n const hasTouch = navigator.maxTouchPoints > 0;\r\n\r\n return hasTouch && coarsePointer && cannotHover;\r\n};\r\n\r\nexport const hideNativeScrollbar = (\r\n target: HTMLElement,\r\n mode: HideNativeScrollbarMode,\r\n nativeOnMobile: boolean,\r\n): (() => void) => {\r\n if (\r\n typeof window === \"undefined\" ||\r\n typeof document === \"undefined\" ||\r\n mode === false\r\n ) {\r\n return () => {};\r\n }\r\n\r\n /*\r\n * На телефонах и планшетах оставляем нативный scrollbar,\r\n * если пользователь явно включил nativeOnMobile.\r\n */\r\n if (nativeOnMobile && isMobileInputDevice()) {\r\n return () => {};\r\n }\r\n\r\n installStyles();\r\n\r\n const className = mode === \"always\" ? ALWAYS_CLASS : FINE_POINTER_CLASS;\r\n\r\n const targets = resolveStyleTargets(target);\r\n\r\n const cleanups = targets.map((element) => retainClass(element, className));\r\n\r\n return () => {\r\n cleanups.forEach((cleanup) => {\r\n cleanup();\r\n });\r\n };\r\n};\r\n","\"use client\";\r\nimport { useEffect, useState } from \"react\";\r\n\r\nexport function useMounted() {\r\n const [mounted, setMounted] = useState(false);\r\n\r\n useEffect(() => {\r\n if (mounted) return;\r\n //eslint-disable-next-line\r\n setMounted(true);\r\n }, []);\r\n\r\n return mounted;\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { isPageScrollTarget } from \"../utils/helper\";\r\nimport { useRefReady } from \"./useRefReady\";\r\n\r\nexport interface TargetRect {\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nconst EMPTY_RECT: TargetRect = { top: 0, left: 0, width: 0, height: 0 };\r\n\r\nexport const useTargetRect = (\r\n target: HTMLElement | null | undefined,\r\n): TargetRect => {\r\n const [rect, setRect] = useState<TargetRect>(EMPTY_RECT);\r\n const ready = useRefReady(target);\r\n\r\n useEffect(() => {\r\n const el = target;\r\n if (!el) {\r\n //eslint-disable-next-line\r\n setRect(EMPTY_RECT);\r\n return;\r\n }\r\n\r\n let rafId: number | null = null;\r\n const pageScroll = isPageScrollTarget(el);\r\n\r\n const measure = () => {\r\n const r = pageScroll\r\n ? {\r\n top: 0,\r\n left: 0,\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n }\r\n : el.getBoundingClientRect();\r\n setRect((prev) => {\r\n if (\r\n prev.top === r.top &&\r\n prev.left === r.left &&\r\n prev.width === r.width &&\r\n prev.height === r.height\r\n ) {\r\n return prev;\r\n }\r\n return {\r\n top: r.top,\r\n left: r.left,\r\n width: r.width,\r\n height: r.height,\r\n };\r\n });\r\n };\r\n\r\n const scheduleMeasure = () => {\r\n if (rafId != null) return;\r\n rafId = requestAnimationFrame(() => {\r\n rafId = null;\r\n measure();\r\n });\r\n };\r\n\r\n measure();\r\n\r\n const resizeObserver = new ResizeObserver(scheduleMeasure);\r\n resizeObserver.observe(el);\r\n\r\n window.addEventListener(\"scroll\", scheduleMeasure, {\r\n capture: true,\r\n passive: true,\r\n });\r\n window.addEventListener(\"resize\", scheduleMeasure);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n window.removeEventListener(\"scroll\", scheduleMeasure, true);\r\n window.removeEventListener(\"resize\", scheduleMeasure);\r\n if (rafId != null) cancelAnimationFrame(rafId);\r\n };\r\n }, [target, ready]);\r\n\r\n return rect;\r\n};\r\n","import { ScrollToFutureThemeProps } from \"src/types/theme/scroll-to-future.theme.type\";\r\n\r\nexport const primary: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.15)\",\r\n borderRadius: \"8px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.25)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.35)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.35)\",\r\n borderRadius: \"8px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.55)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0s ease, transform 0s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.75)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const midnight: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(15, 23, 42, 0.55)\",\r\n borderRadius: \"8px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(30, 41, 59, 0.72)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(51, 65, 85, 0.88)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(148, 163, 184, 0.55)\",\r\n borderRadius: \"8px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(203, 213, 225, 0.78)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0s ease, transform 0s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(241, 245, 249, 0.96)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const neonCyan: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(6, 78, 89, 0.35)\",\r\n borderRadius: \"4px\",\r\n transition: \"background-color 0.25s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(8, 145, 178, 0.48)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(14, 116, 144, 0.68)\",\r\n transition: \"background-color 0.12s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(34, 211, 238, 0.58)\",\r\n borderRadius: \"3px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(103, 232, 249, 0.85)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(207, 250, 254, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const ocean: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(7, 89, 133, 0.22)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.35s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(3, 105, 161, 0.35)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(2, 132, 199, 0.5)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(14, 165, 233, 0.58)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(56, 189, 248, 0.82)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(186, 230, 253, 0.98)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const deepSea: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(2, 44, 55, 0.62)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(6, 78, 89, 0.78)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(14, 116, 144, 0.9)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(8, 145, 178, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(34, 211, 238, 0.82)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(165, 243, 252, 0.98)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const forest: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(20, 83, 45, 0.25)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(21, 128, 61, 0.38)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(22, 163, 74, 0.52)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(34, 197, 94, 0.55)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(74, 222, 128, 0.8)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(187, 247, 208, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const moss: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(54, 83, 20, 0.28)\",\r\n borderRadius: \"6px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(63, 98, 18, 0.42)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(77, 124, 15, 0.58)\",\r\n transition: \"background-color 0.14s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(132, 204, 22, 0.55)\",\r\n borderRadius: \"5px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(163, 230, 53, 0.8)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(217, 249, 157, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const lava: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(69, 10, 10, 0.45)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.22s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(127, 29, 29, 0.62)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(153, 27, 27, 0.78)\",\r\n transition: \"background-color 0.1s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(239, 68, 68, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(249, 115, 22, 0.88)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.16s ease, transform 0.16s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(253, 186, 116, 1)\",\r\n transform: \"scale(1.14)\",\r\n transition: \"background-color 0.1s ease, transform 0.1s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const ember: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(67, 20, 7, 0.32)\",\r\n borderRadius: \"5px\",\r\n transition: \"background-color 0.25s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(124, 45, 18, 0.48)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(154, 52, 18, 0.65)\",\r\n transition: \"background-color 0.12s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(234, 88, 12, 0.6)\",\r\n borderRadius: \"4px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(251, 146, 60, 0.86)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(254, 215, 170, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const gold: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(113, 63, 18, 0.25)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(161, 98, 7, 0.4)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(202, 138, 4, 0.55)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(234, 179, 8, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(250, 204, 21, 0.85)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.2s ease, transform 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(254, 240, 138, 1)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const roseQuartz: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(136, 19, 55, 0.18)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.32s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(190, 24, 93, 0.28)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(219, 39, 119, 0.4)\",\r\n transition: \"background-color 0.16s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(251, 113, 133, 0.58)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(244, 114, 182, 0.8)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(253, 164, 175, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const violet: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(76, 29, 149, 0.3)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.28s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(91, 33, 182, 0.45)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(109, 40, 217, 0.62)\",\r\n transition: \"background-color 0.14s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(139, 92, 246, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(167, 139, 250, 0.86)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(221, 214, 254, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const royal: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(30, 27, 75, 0.48)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(49, 46, 129, 0.65)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(67, 56, 202, 0.82)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(99, 102, 241, 0.65)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(165, 180, 252, 0.86)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.2s ease, transform 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(224, 231, 255, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const arctic: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(186, 230, 253, 0.22)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.35s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(125, 211, 252, 0.36)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(56, 189, 248, 0.5)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(224, 242, 254, 0.65)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(240, 249, 255, 0.88)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 1)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const glass: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.08)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.14)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.22)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.28)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.46)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.7)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const graphite: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(17, 24, 39, 0.52)\",\r\n borderRadius: \"3px\",\r\n transition: \"background-color 0.22s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(31, 41, 55, 0.7)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(55, 65, 81, 0.88)\",\r\n transition: \"background-color 0.1s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(107, 114, 128, 0.65)\",\r\n borderRadius: \"2px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(156, 163, 175, 0.82)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(229, 231, 235, 0.98)\",\r\n transform: \"scale(1.06)\",\r\n transition: \"background-color 0.1s ease, transform 0.1s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const terminal: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 20, 5, 0.72)\",\r\n borderRadius: \"0px\",\r\n transition: \"background-color 0.15s linear\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 40, 10, 0.82)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 65, 18, 0.92)\",\r\n transition: \"background-color 0.08s linear\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(34, 197, 94, 0.62)\",\r\n borderRadius: \"0px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(74, 222, 128, 0.85)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.1s linear\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(187, 247, 208, 1)\",\r\n transform: \"scale(1.06)\",\r\n transition: \"background-color 0.08s linear, transform 0.08s linear\",\r\n },\r\n },\r\n};\r\n\r\nexport const toxic: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(54, 83, 20, 0.48)\",\r\n borderRadius: \"2px\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(77, 124, 15, 0.65)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(101, 163, 13, 0.82)\",\r\n transition: \"background-color 0.1s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(163, 230, 53, 0.68)\",\r\n borderRadius: \"1px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(190, 242, 100, 0.9)\",\r\n transform: \"scale(1.04)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(236, 252, 203, 1)\",\r\n transform: \"scale(1.15)\",\r\n transition: \"background-color 0.08s ease, transform 0.08s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const candy: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(244, 114, 182, 0.18)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(192, 132, 252, 0.28)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(129, 140, 248, 0.42)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(251, 113, 133, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(244, 114, 182, 0.84)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(224, 231, 255, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const sand: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(120, 53, 15, 0.16)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.32s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(180, 83, 9, 0.25)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(217, 119, 6, 0.38)\",\r\n transition: \"background-color 0.16s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(217, 119, 6, 0.52)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(245, 158, 11, 0.75)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(253, 230, 138, 0.98)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const monoLight: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.08)\",\r\n borderRadius: \"6px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.14)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.22)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.32)\",\r\n borderRadius: \"6px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.52)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.75)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const monoDark: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.08)\",\r\n borderRadius: \"6px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.14)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.22)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.32)\",\r\n borderRadius: \"6px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.55)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.82)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n","import { PresetsThemeType } from \"../types/theme/preset.theme.type\";\r\nimport { ScrollToFutureThemeProps } from \"../types/theme/scroll-to-future.theme.type\";\r\nimport {\r\n arctic,\r\n candy,\r\n deepSea,\r\n ember,\r\n forest,\r\n glass,\r\n gold,\r\n graphite,\r\n lava,\r\n midnight,\r\n monoDark,\r\n monoLight,\r\n moss,\r\n neonCyan,\r\n ocean,\r\n primary,\r\n roseQuartz,\r\n royal,\r\n sand,\r\n terminal,\r\n toxic,\r\n violet,\r\n} from \"./collection.theme\";\r\n\r\nexport const presets: Record<PresetsThemeType, ScrollToFutureThemeProps> = {\r\n primary,\r\n midnight,\r\n neonCyan,\r\n ocean,\r\n deepSea,\r\n forest,\r\n moss,\r\n lava,\r\n ember,\r\n gold,\r\n roseQuartz,\r\n violet,\r\n royal,\r\n arctic,\r\n glass,\r\n graphite,\r\n terminal,\r\n toxic,\r\n candy,\r\n sand,\r\n monoLight,\r\n monoDark,\r\n};\r\n","import { ScrollToFutureInterface } from \"../types/scroll-to-future.type\";\r\n\r\nexport const defaultConfig: Required<Omit<ScrollToFutureInterface, \"target\">> =\r\n {\r\n scrollBar: {\r\n mode: \"both\",\r\n positionMode: \"after\",\r\n superimposition: \"after\",\r\n boundaryOffset: \"4px\",\r\n heightTrack: \"98%\",\r\n hideNativeScrollbar: \"always\",\r\n },\r\n\r\n thumb: {\r\n boundaryOffset: \"1px 1px\",\r\n heightTrack: \"auto\",\r\n },\r\n\r\n nativeOnMobile: true,\r\n\r\n selectTheme: \"primary\",\r\n optionsTheme: {},\r\n };\r\n","import { presets } from \"../themes/preset\";\r\nimport { ScrollToFutureScrollBar } from \"../types/config/scrollbar.type\";\r\nimport { ScrollToFutureThumb } from \"../types/config/thumb.type\";\r\nimport { ScrollToFutureInterface } from \"../types/scroll-to-future.type\";\r\nimport { ScrollToFutureThemeProps } from \"../types/theme/scroll-to-future.theme.type\";\r\nimport { defaultConfig } from \"./config\";\r\n\r\ntype Config = Omit<ScrollToFutureInterface, \"target\">;\r\n\r\nexport interface MergedConfig {\r\n scrollBar: ScrollToFutureScrollBar;\r\n thumb: ScrollToFutureThumb;\r\n optionsTheme: ScrollToFutureThemeProps;\r\n}\r\n\r\nexport const merge = (config: Config): MergedConfig => {\r\n const selectedTheme =\r\n presets[config.selectTheme ?? defaultConfig.selectTheme];\r\n\r\n return {\r\n scrollBar: {\r\n ...defaultConfig.scrollBar,\r\n ...config.scrollBar,\r\n },\r\n thumb: {\r\n ...defaultConfig.thumb,\r\n ...config.thumb,\r\n },\r\n optionsTheme: themeMerge(selectedTheme, config.optionsTheme),\r\n };\r\n};\r\n\r\ntype PlainObject = Record<string, unknown>;\r\n\r\nconst isPlainObject = (value: unknown): value is PlainObject =>\r\n typeof value === \"object\" && value !== null && !Array.isArray(value);\r\n\r\nexport const themeMerge = <T extends PlainObject>(\r\n base: T,\r\n override?: Partial<T>,\r\n): T => {\r\n if (!override) return base;\r\n\r\n const result: PlainObject = { ...base };\r\n\r\n for (const key of Object.keys(override) as Array<keyof T>) {\r\n const overrideValue = override[key];\r\n const baseValue = base[key];\r\n\r\n if (overrideValue === undefined) continue;\r\n\r\n if (isPlainObject(overrideValue) && isPlainObject(baseValue)) {\r\n result[key as string] = themeMerge(\r\n baseValue as PlainObject,\r\n overrideValue as PlainObject,\r\n );\r\n } else {\r\n result[key as string] = overrideValue;\r\n }\r\n }\r\n\r\n return result as T;\r\n};\r\n","export const shouldUseNativeScrollbar = (): boolean => {\r\n if (typeof window === \"undefined\") {\r\n return true;\r\n }\r\n\r\n const primaryPointerIsCoarse =\r\n window.matchMedia(\"(pointer: coarse)\").matches;\r\n\r\n const hasAnyFinePointer = window.matchMedia(\"(any-pointer: fine)\").matches;\r\n\r\n return primaryPointerIsCoarse && !hasAnyFinePointer;\r\n};\r\n","import { ScrollToFutureThemeProps } from \"../types/theme/scroll-to-future.theme.type\";\r\n\r\nexport const variables = (theme: ScrollToFutureThemeProps) => {\r\n const styles: Record<string, string> = {};\r\n\r\n for (const key in theme) {\r\n const k = key as keyof ScrollToFutureThemeProps;\r\n const statusTheme = theme[k];\r\n\r\n if (!statusTheme) continue;\r\n\r\n const type = k === \"scrollBar\" ? \"scrollbar\" : \"thumb\";\r\n\r\n for (const status in statusTheme) {\r\n const properties = statusTheme[status as keyof typeof statusTheme];\r\n\r\n if (!properties) continue;\r\n\r\n const statusPrefix = status === \"inactive\" ? \"\" : `-${status}`;\r\n\r\n for (const prop in properties) {\r\n const value = properties[prop as keyof typeof properties];\r\n\r\n if (value === undefined) continue;\r\n\r\n styles[`--${type}${statusPrefix}-${prop}`] = value as string;\r\n }\r\n }\r\n }\r\n\r\n return styles;\r\n};\r\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/ScrollToFuture.tsx","../src/components/Axios/ScrollAxis.tsx","../src/utils/constants.ts","../src/utils/helper.ts","../src/hooks/useElementScrollObserver.ts","../src/hooks/useRefReady.ts","../src/hooks/useFuture.ts","../src/utils/native-scrollbar.ts","../src/hooks/useMounted.tsx","../src/hooks/useTargetRect.ts","../src/themes/collection.theme.ts","../src/themes/preset.ts","../src/utils/config.ts","../src/utils/merge.ts","../src/utils/mobile-detect.ts","../src/utils/variables-css.ts"],"sourcesContent":["export { ScrollToFuture } from \"./ScrollToFuture\";\r\nexport type { ScrollToFutureConfig } from \"./types/scroll-to-future.type\";\r\nimport \"./css/index.css\";\r\n","import { useRef, useState } from \"react\";\r\nimport { ScrollAxis } from \"./components/Axios/ScrollAxis\";\r\nimport \"./css/axis.css\";\r\nimport \"./css/scroll.css\";\r\n\r\nimport { useElementScrollObserver } from \"./hooks/useElementScrollObserver\";\r\nimport { useFuture } from \"./hooks/useFuture\";\r\nimport { useMounted } from \"./hooks/useMounted\";\r\nimport { useTargetRect } from \"./hooks/useTargetRect\";\r\nimport type { ScrollToFutureInterface } from \"./types/scroll-to-future.type\";\r\nimport { merge } from \"./utils/merge\";\r\nimport { shouldUseNativeScrollbar } from \"./utils/mobile-detect\";\r\n\r\nimport { variables } from \"./utils/variables-css\";\r\n\r\nexport const ScrollToFuture = ({\r\n target,\r\n scrollBar = {},\r\n thumb = {},\r\n selectTheme = \"primary\",\r\n optionsTheme = {},\r\n nativeOnMobile = true,\r\n}: ScrollToFutureInterface) => {\r\n const anchorRef = useRef<HTMLSpanElement | null>(null);\r\n const targetRef = useRef<HTMLElement | null>(null);\r\n const mounted = useMounted();\r\n const [findedTarget, setFindedTarget] = useState<HTMLElement | null>(null);\r\n\r\n const config = merge({ scrollBar, thumb, selectTheme, optionsTheme });\r\n const vars = variables(config.optionsTheme);\r\n const mode = config.scrollBar?.mode ?? \"both\";\r\n const positionMode = config.scrollBar?.positionMode ?? \"after\";\r\n const superimposition = config.scrollBar?.superimposition ?? \"over\";\r\n const nativeScrollOnMobile = shouldUseNativeScrollbar() && nativeOnMobile;\r\n\r\n const metrics = useElementScrollObserver(findedTarget);\r\n const rect = useTargetRect(findedTarget);\r\n const wantsY = mode === \"vertical\" || mode === \"both\";\r\n const wantsX = mode === \"horizontal\" || mode === \"both\";\r\n const showY = wantsY && metrics.y.canScroll;\r\n const showX = wantsX && metrics.x.canScroll;\r\n const coversAllScrollableAxes =\r\n (!metrics.x.canScroll || showX) && (!metrics.y.canScroll || showY);\r\n\r\n useFuture({\r\n target,\r\n anchorRef,\r\n targetRef,\r\n setFindedTarget,\r\n mounted,\r\n config,\r\n showY,\r\n showX,\r\n superimposition,\r\n findedTarget,\r\n positionMode,\r\n coversAllScrollableAxes,\r\n nativeOnMobile,\r\n });\r\n\r\n if (!mounted || nativeScrollOnMobile) {\r\n return null;\r\n }\r\n\r\n const canRenderOverlay =\r\n findedTarget !== null && rect.width > 0 && rect.height > 0;\r\n\r\n return (\r\n <>\r\n {!target && (\r\n <span\r\n ref={anchorRef}\r\n aria-hidden=\"true\"\r\n style={{ display: \"none\" }}\r\n />\r\n )}\r\n\r\n {canRenderOverlay && (\r\n <div\r\n className=\"scroll-to-future__overlay\"\r\n style={{\r\n top: rect.top,\r\n left: rect.left,\r\n width: rect.width,\r\n height: rect.height,\r\n }}\r\n >\r\n {showY && (\r\n <ScrollAxis\r\n vars={vars}\r\n axis=\"y\"\r\n target={findedTarget}\r\n metrics={metrics.y}\r\n scrollBar={config.scrollBar!}\r\n thumb={thumb}\r\n positionMode={positionMode}\r\n superimposition={superimposition}\r\n hasCrossAxis={showX}\r\n />\r\n )}\r\n\r\n {showX && (\r\n <ScrollAxis\r\n vars={vars}\r\n axis=\"x\"\r\n target={findedTarget}\r\n metrics={metrics.x}\r\n scrollBar={config.scrollBar!}\r\n thumb={thumb}\r\n positionMode={positionMode}\r\n superimposition={superimposition}\r\n hasCrossAxis={showY}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n","import type React from \"react\";\r\nimport { useRef, useState } from \"react\";\r\nimport { Axis, AxisMetrics } from \"src/types/config/axis.type\";\r\nimport {\r\n PositionMode,\r\n ScrollToFutureScrollBar,\r\n Superimposition,\r\n} from \"src/types/config/scrollbar.type\";\r\nimport { ScrollToFutureThumb } from \"src/types/config/thumb.type\";\r\nimport { DEFAULT_TRACK_THICKNESS } from \"src/utils/constants\";\r\nimport {\r\n clamp,\r\n computeThumbPosition,\r\n computeThumbSize,\r\n fitInsetsWithinSize,\r\n isPageScrollTarget,\r\n parseBoundaryOffset,\r\n parsePxValue,\r\n resolveTrackLength,\r\n trackPositionToScroll,\r\n} from \"src/utils/helper\";\r\n\r\ninterface ScrollAxisProps {\r\n axis: Axis;\r\n target: HTMLElement | null;\r\n metrics: AxisMetrics;\r\n scrollBar: ScrollToFutureScrollBar;\r\n thumb: ScrollToFutureThumb;\r\n positionMode: PositionMode;\r\n superimposition: Superimposition;\r\n hasCrossAxis: boolean;\r\n vars: Record<string, string>;\r\n}\r\n\r\nexport const ScrollAxis = ({\r\n axis,\r\n target,\r\n metrics,\r\n scrollBar,\r\n thumb,\r\n positionMode,\r\n superimposition,\r\n hasCrossAxis,\r\n vars,\r\n}: ScrollAxisProps) => {\r\n const trackRef = useRef<HTMLDivElement>(null);\r\n //* REFS ====================================================================\r\n const dragState = useRef<{\r\n startPointer: number;\r\n startScroll: number;\r\n } | null>(null);\r\n //* REFS ====================================================================\r\n\r\n //* STATE ===================================================================\r\n const [isDragging, setIsDragging] = useState(false);\r\n //* STATE ===================================================================\r\n\r\n //* COMPUTED PROPERTIES =====================================================\r\n const requestedTrackThickness =\r\n parsePxValue(scrollBar.widthTrack) ?? DEFAULT_TRACK_THICKNESS;\r\n const trackThickness = Math.max(1, requestedTrackThickness);\r\n const trackBoundary = parseBoundaryOffset(scrollBar.boundaryOffset);\r\n const thumbBoundary = parseBoundaryOffset(thumb.boundaryOffset);\r\n const requestedCrossAxisOccupation =\r\n trackBoundary.start + trackThickness + trackBoundary.end;\r\n const maximumCrossAxisOccupation = Math.max(0, metrics.clientSize - 1);\r\n const crossAxisOccupation = hasCrossAxis\r\n ? clamp(requestedCrossAxisOccupation, 0, maximumCrossAxisOccupation)\r\n : 0;\r\n const availableMainStart =\r\n hasCrossAxis && positionMode === \"before\" ? crossAxisOccupation : 0;\r\n const availableMainSize = Math.max(\r\n 0,\r\n metrics.clientSize - crossAxisOccupation,\r\n );\r\n const trackCenter = availableMainStart + availableMainSize / 2;\r\n const requestedTrackLength = resolveTrackLength(\r\n scrollBar.heightTrack,\r\n metrics.clientSize,\r\n );\r\n const trackLength =\r\n availableMainSize > 0\r\n ? clamp(requestedTrackLength, 1, availableMainSize)\r\n : 0;\r\n const fittedThumbMainInsets = fitInsetsWithinSize(\r\n thumbBoundary.start,\r\n thumbBoundary.end,\r\n trackLength,\r\n 1,\r\n );\r\n const thumbMainStart = fittedThumbMainInsets.start;\r\n const innerTrackLength = fittedThumbMainInsets.innerSize;\r\n const requestedThumbCrossSize =\r\n trackThickness - thumbBoundary.start - thumbBoundary.end;\r\n const thumbCrossSize = clamp(requestedThumbCrossSize, 1, trackThickness);\r\n const thumbSize = computeThumbSize(\r\n innerTrackLength,\r\n metrics,\r\n thumb.heightTrack,\r\n );\r\n const thumbPositionInsideTrack = computeThumbPosition(\r\n innerTrackLength,\r\n thumbSize,\r\n metrics,\r\n );\r\n const thumbPosition = thumbMainStart + thumbPositionInsideTrack;\r\n const maxScroll = Math.max(0, metrics.scrollSize - metrics.clientSize);\r\n const maxThumbTravel = Math.max(0, innerTrackLength - thumbSize);\r\n //* COMPUTED PROPERTIES =====================================================\r\n\r\n //* METHODS =================================================================\r\n const setScrollPosition = (value: number) => {\r\n const targetElement = target;\r\n\r\n if (!targetElement) return;\r\n\r\n const nextValue = clamp(value, 0, Math.max(0, maxScroll));\r\n\r\n if (!isPageScrollTarget(targetElement)) {\r\n if (axis === \"x\") {\r\n //eslint-disable-next-line\r\n targetElement.scrollLeft = nextValue;\r\n } else {\r\n targetElement.scrollTop = nextValue;\r\n }\r\n\r\n return;\r\n }\r\n\r\n const targetStyle = window.getComputedStyle(targetElement);\r\n\r\n const overflowValue =\r\n axis === \"x\" ? targetStyle.overflowX : targetStyle.overflowY;\r\n\r\n const targetCanScroll =\r\n axis === \"x\"\r\n ? targetElement.scrollWidth - targetElement.clientWidth > 1\r\n : targetElement.scrollHeight - targetElement.clientHeight > 1;\r\n\r\n const targetOwnsScroll =\r\n targetCanScroll && /^(auto|scroll|overlay)$/.test(overflowValue);\r\n\r\n if (targetOwnsScroll) {\r\n if (axis === \"x\") {\r\n targetElement.scrollLeft = nextValue;\r\n } else {\r\n targetElement.scrollTop = nextValue;\r\n }\r\n\r\n return;\r\n }\r\n\r\n window.scrollTo({\r\n left: axis === \"x\" ? nextValue : window.scrollX,\r\n top: axis === \"y\" ? nextValue : window.scrollY,\r\n behavior: \"auto\",\r\n });\r\n };\r\n\r\n const handleThumbPointerDown = (\r\n event: React.PointerEvent<HTMLDivElement>,\r\n ) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n dragState.current = {\r\n startPointer: axis === \"x\" ? event.clientX : event.clientY,\r\n startScroll: metrics.scrollPos,\r\n };\r\n\r\n setIsDragging(true);\r\n\r\n event.currentTarget.setPointerCapture(event.pointerId);\r\n };\r\n\r\n const handleThumbPointerMove = (\r\n event: React.PointerEvent<HTMLDivElement>,\r\n ) => {\r\n const currentDragState = dragState.current;\r\n\r\n if (!currentDragState) return;\r\n if (maxScroll <= 0 || maxThumbTravel <= 0) return;\r\n\r\n const pointerPosition = axis === \"x\" ? event.clientX : event.clientY;\r\n\r\n const pointerDelta = pointerPosition - currentDragState.startPointer;\r\n\r\n const scrollDelta = (pointerDelta / maxThumbTravel) * maxScroll;\r\n\r\n setScrollPosition(currentDragState.startScroll + scrollDelta);\r\n };\r\n\r\n const stopDrag = (event: React.PointerEvent<HTMLDivElement>) => {\r\n if (!dragState.current) return;\r\n\r\n dragState.current = null;\r\n setIsDragging(false);\r\n\r\n try {\r\n event.currentTarget.releasePointerCapture(event.pointerId);\r\n } catch {}\r\n };\r\n\r\n const handleTrackPointerDown = (\r\n event: React.PointerEvent<HTMLDivElement>,\r\n ) => {\r\n if (event.target !== event.currentTarget) {\r\n return;\r\n }\r\n\r\n const trackElement = trackRef.current;\r\n\r\n if (!trackElement) return;\r\n if (maxThumbTravel <= 0) return;\r\n\r\n const rect = trackElement.getBoundingClientRect();\r\n\r\n const clickPosition =\r\n axis === \"x\" ? event.clientX - rect.left : event.clientY - rect.top;\r\n\r\n const clickInsideInnerTrack = clickPosition - thumbMainStart;\r\n\r\n const targetThumbStart = clamp(\r\n clickInsideInnerTrack - thumbSize / 2,\r\n 0,\r\n maxThumbTravel,\r\n );\r\n\r\n const nextScroll = trackPositionToScroll(\r\n targetThumbStart,\r\n innerTrackLength,\r\n thumbSize,\r\n metrics,\r\n );\r\n\r\n setScrollPosition(nextScroll);\r\n };\r\n //* METHODS =================================================================\r\n\r\n //* CHECKS ==================================================================\r\n if (\r\n !metrics.canScroll ||\r\n metrics.clientSize <= 0 ||\r\n trackLength < 1 ||\r\n innerTrackLength < 1 ||\r\n thumbSize < 1\r\n ) {\r\n return null;\r\n }\r\n //* CHECKS ==================================================================\r\n\r\n //* STYLES ==================================================================\r\n const trackStyle: React.CSSProperties =\r\n axis === \"y\"\r\n ? {\r\n position: \"absolute\",\r\n top: trackCenter,\r\n transform: \"translateY(-50%)\",\r\n\r\n width: trackThickness,\r\n height: trackLength,\r\n\r\n ...(positionMode === \"before\"\r\n ? {\r\n left: trackBoundary.start,\r\n }\r\n : {\r\n right: trackBoundary.end,\r\n }),\r\n\r\n pointerEvents: \"auto\",\r\n }\r\n : {\r\n position: \"absolute\",\r\n left: trackCenter,\r\n transform: \"translateX(-50%)\",\r\n width: trackLength,\r\n height: trackThickness,\r\n\r\n ...(positionMode === \"before\"\r\n ? {\r\n top: trackBoundary.start,\r\n }\r\n : {\r\n bottom: trackBoundary.end,\r\n }),\r\n\r\n pointerEvents: \"auto\",\r\n };\r\n\r\n const thumbStyle: React.CSSProperties =\r\n axis === \"y\"\r\n ? {\r\n top: thumbPosition,\r\n height: thumbSize,\r\n\r\n //* horizontal center\r\n left: \"50%\",\r\n width: thumbCrossSize,\r\n transform: \"translateX(-50%)\",\r\n }\r\n : {\r\n left: thumbPosition,\r\n width: thumbSize,\r\n\r\n //* vertical center\r\n top: \"50%\",\r\n height: thumbCrossSize,\r\n transform: \"translateY(-50%)\",\r\n };\r\n //* STYLES ==================================================================\r\n\r\n //* JSX =====================================================================\r\n return (\r\n <div\r\n ref={trackRef}\r\n className=\"scroll-to-future__track\"\r\n style={{ ...trackStyle, ...vars }}\r\n //eslint-disable-next-line\r\n onPointerDown={handleTrackPointerDown}\r\n data-axis={axis}\r\n data-superimposition={superimposition}\r\n >\r\n <div\r\n className={`scroll-to-future__thumb ${\r\n isDragging ? \"scroll-to-future__thumb--dragging\" : \"\"\r\n }`.trim()}\r\n style={thumbStyle}\r\n onPointerDown={handleThumbPointerDown}\r\n //eslint-disable-next-line\r\n onPointerMove={handleThumbPointerMove}\r\n onPointerUp={stopDrag}\r\n onPointerCancel={stopDrag}\r\n />\r\n </div>\r\n );\r\n //* JSX =====================================================================\r\n};\r\n","import { AxisMetrics } from \"../types/config/axis.type\";\r\n\r\nexport const MIN_THUMB_SIZE = 24;\r\nexport const DEFAULT_TRACK_THICKNESS = 8;\r\nexport const MAX_THUMB_RATIO = 0.8;\r\n\r\nexport const EMPTY_AXIS_METRICS: AxisMetrics = {\r\n scrollSize: 0,\r\n clientSize: 0,\r\n scrollPos: 0,\r\n canScroll: false,\r\n};\r\n","import {\r\n Axis,\r\n AxisInsets,\r\n AxisMetrics,\r\n ParsedOffset,\r\n} from \"../types/config/axis.type\";\r\nimport { BoundaryOffset } from \"../types/config/general.type\";\r\nimport { HeightTrackType } from \"../types/config/scrollbar.type\";\r\nimport { ScrollToFutureThumb } from \"../types/config/thumb.type\";\r\nimport { MAX_THUMB_RATIO, MIN_THUMB_SIZE } from \"./constants\";\r\n\r\nexport const clamp = (value: number, min: number, max: number): number =>\r\n Math.min(Math.max(value, min), Math.max(min, max));\r\n\r\nexport const parsePxValue = (value?: string | null): number | null => {\r\n if (!value) return null;\r\n const match = /^(-?\\d+(?:\\.\\d+)?)px$/.exec(value.trim());\r\n return match ? Number(match[1]) : null;\r\n};\r\n\r\nexport const parseBoundaryOffset = (\r\n value?: BoundaryOffset | null,\r\n): ParsedOffset => {\r\n if (!value) {\r\n return {\r\n start: 0,\r\n end: 0,\r\n };\r\n }\r\n\r\n const parts = value.trim().split(/\\s+/);\r\n\r\n const start = Math.max(0, parsePxValue(parts[0]) ?? 0);\r\n\r\n const end =\r\n parts.length > 1 ? Math.max(0, parsePxValue(parts[1]) ?? 0) : start;\r\n\r\n return {\r\n start,\r\n end,\r\n };\r\n};\r\n\r\nexport const fitInsetsWithinSize = (\r\n start: number,\r\n end: number,\r\n size: number,\r\n minInnerSize = 1,\r\n): {\r\n start: number;\r\n end: number;\r\n innerSize: number;\r\n} => {\r\n const safeSize = Math.max(0, size);\r\n\r\n if (safeSize <= 0) {\r\n return {\r\n start: 0,\r\n end: 0,\r\n innerSize: 0,\r\n };\r\n }\r\n\r\n const actualMinInnerSize = Math.min(Math.max(0, minInnerSize), safeSize);\r\n const safeStart = Math.max(0, start);\r\n const safeEnd = Math.max(0, end);\r\n const requestedInsetsSize = safeStart + safeEnd;\r\n const maximumInsetsSize = safeSize - actualMinInnerSize;\r\n\r\n if (requestedInsetsSize <= maximumInsetsSize) {\r\n return {\r\n start: safeStart,\r\n end: safeEnd,\r\n innerSize: safeSize - safeStart - safeEnd,\r\n };\r\n }\r\n\r\n if (requestedInsetsSize <= 0) {\r\n return {\r\n start: 0,\r\n end: 0,\r\n innerSize: safeSize,\r\n };\r\n }\r\n\r\n const scale = maximumInsetsSize / requestedInsetsSize;\r\n const fittedStart = safeStart * scale;\r\n const fittedEnd = safeEnd * scale;\r\n\r\n return {\r\n start: fittedStart,\r\n end: fittedEnd,\r\n innerSize: Math.max(\r\n actualMinInnerSize,\r\n safeSize - fittedStart - fittedEnd,\r\n ),\r\n };\r\n};\r\n\r\nexport const resolveAxisInsets = (\r\n value: BoundaryOffset | undefined,\r\n axis: Axis,\r\n): AxisInsets => {\r\n const { start, end } = parseBoundaryOffset(value);\r\n\r\n if (axis === \"y\") {\r\n return {\r\n cross: start,\r\n main: end,\r\n };\r\n }\r\n\r\n return {\r\n cross: start,\r\n main: end,\r\n };\r\n};\r\n\r\nexport const resolveTrackLength = (\r\n value: HeightTrackType | undefined,\r\n containerSize: number,\r\n): number => {\r\n if (!value) return containerSize;\r\n\r\n const px = parsePxValue(value);\r\n if (px !== null) return px;\r\n\r\n const percentMatch = /^(-?\\d+(?:\\.\\d+)?)%$/.exec(value);\r\n if (percentMatch) return (Number(percentMatch[1]) / 100) * containerSize;\r\n\r\n const vhMatch = /^(-?\\d+(?:\\.\\d+)?)vh$/.exec(value);\r\n if (vhMatch) {\r\n const vh =\r\n typeof window !== \"undefined\" ? window.innerHeight : containerSize;\r\n return (Number(vhMatch[1]) / 100) * vh;\r\n }\r\n\r\n const dvhMatch = /^(-?\\d+(?:\\.\\d+)?)d(s)?vh$/.exec(value);\r\n if (dvhMatch) {\r\n const dvh =\r\n typeof window !== \"undefined\"\r\n ? (window.visualViewport?.height ?? window.innerHeight)\r\n : containerSize;\r\n return (Number(dvhMatch[1]) / 100) * dvh;\r\n }\r\n\r\n return containerSize;\r\n};\r\n\r\nexport const computeThumbSize = (\r\n trackLength: number,\r\n metrics: AxisMetrics,\r\n thumbHeightTrack: ScrollToFutureThumb[\"heightTrack\"],\r\n): number => {\r\n if (trackLength <= 0) return 0;\r\n\r\n const minSize = Math.min(MIN_THUMB_SIZE, trackLength);\r\n const maxSize = Math.min(\r\n trackLength,\r\n Math.max(minSize, trackLength * MAX_THUMB_RATIO),\r\n );\r\n\r\n if (!thumbHeightTrack || thumbHeightTrack === \"auto\") {\r\n const ratio =\r\n metrics.scrollSize > 0\r\n ? metrics.clientSize / metrics.scrollSize\r\n : 1;\r\n\r\n const autoSize = trackLength * clamp(ratio, 0, 1);\r\n return clamp(autoSize, minSize, maxSize);\r\n }\r\n\r\n const px = parsePxValue(thumbHeightTrack);\r\n\r\n if (px !== null) {\r\n return clamp(px, minSize, maxSize);\r\n }\r\n\r\n const percentMatch = /^(-?\\d+(?:\\.\\d+)?)%$/.exec(thumbHeightTrack.trim());\r\n\r\n if (percentMatch) {\r\n const size = (Number(percentMatch[1]) / 100) * trackLength;\r\n\r\n return clamp(size, minSize, maxSize);\r\n }\r\n\r\n return maxSize;\r\n};\r\n\r\nexport const computeThumbPosition = (\r\n trackLength: number,\r\n thumbSize: number,\r\n metrics: AxisMetrics,\r\n): number => {\r\n const maxScroll = metrics.scrollSize - metrics.clientSize;\r\n const maxThumbTravel = trackLength - thumbSize;\r\n if (maxScroll <= 0 || maxThumbTravel <= 0) return 0;\r\n const ratio = clamp(metrics.scrollPos / maxScroll, 0, 1);\r\n return ratio * maxThumbTravel;\r\n};\r\n\r\nexport const trackPositionToScroll = (\r\n trackPos: number,\r\n trackLength: number,\r\n thumbSize: number,\r\n metrics: AxisMetrics,\r\n): number => {\r\n const maxScroll = metrics.scrollSize - metrics.clientSize;\r\n const maxThumbTravel = trackLength - thumbSize;\r\n if (maxScroll <= 0 || maxThumbTravel <= 0) return 0;\r\n const ratio = clamp(trackPos / maxThumbTravel, 0, 1);\r\n return ratio * maxScroll;\r\n};\r\n\r\nexport const computeReservedSpace = (\r\n boundaryOffset: BoundaryOffset | undefined,\r\n trackThicknessPx: number,\r\n superimposition: \"over\" | \"after\" | undefined,\r\n): number => {\r\n if (superimposition !== \"after\") {\r\n return 0;\r\n }\r\n\r\n const { start, end } = parseBoundaryOffset(boundaryOffset);\r\n\r\n return start + trackThicknessPx + end;\r\n};\r\n\r\nexport const resolveScrollingElement = (el: HTMLElement): HTMLElement => {\r\n if (\r\n typeof document !== \"undefined\" &&\r\n (el === document.body || el === document.documentElement)\r\n ) {\r\n return (\r\n (document.scrollingElement as HTMLElement | null) ??\r\n document.documentElement\r\n );\r\n }\r\n return el;\r\n};\r\n\r\nexport const isPageScrollTarget = (el: HTMLElement): boolean =>\r\n typeof document !== \"undefined\" &&\r\n (el === document.body || el === document.documentElement);\r\n","import { useEffect, useRef, useState } from \"react\";\r\nimport { isPageScrollTarget } from \"../utils/helper\";\r\n\r\nimport { AxisMetrics, TargetMetrics } from \"../types/config/axis.type\";\r\nimport { EMPTY_AXIS_METRICS } from \"../utils/constants\";\r\nimport { useRefReady } from \"./useRefReady\";\r\n\r\nconst isSameAxisMetrics = (previous: AxisMetrics, next: AxisMetrics): boolean =>\r\n previous.scrollSize === next.scrollSize &&\r\n previous.clientSize === next.clientSize &&\r\n previous.scrollPos === next.scrollPos &&\r\n previous.canScroll === next.canScroll;\r\n\r\nconst getActualScrollPosition = (...values: number[]): number =>\r\n values.reduce((current, value) => {\r\n return Math.abs(value) > Math.abs(current) ? value : current;\r\n }, 0);\r\n\r\nexport const useElementScrollObserver = (\r\n target: HTMLElement | null | undefined,\r\n): TargetMetrics => {\r\n const [metrics, setMetrics] = useState<TargetMetrics>({\r\n x: EMPTY_AXIS_METRICS,\r\n y: EMPTY_AXIS_METRICS,\r\n });\r\n\r\n const rafRef = useRef<number | null>(null);\r\n const ready = useRefReady(target);\r\n\r\n useEffect(() => {\r\n const targetElement = target;\r\n\r\n if (!targetElement) {\r\n //eslint-disable-next-line\r\n setMetrics({\r\n x: EMPTY_AXIS_METRICS,\r\n y: EMPTY_AXIS_METRICS,\r\n });\r\n\r\n return;\r\n }\r\n\r\n const pageScroll = isPageScrollTarget(targetElement);\r\n\r\n const measure = () => {\r\n let nextX: AxisMetrics;\r\n let nextY: AxisMetrics;\r\n\r\n if (pageScroll) {\r\n const root = document.documentElement;\r\n const body = document.body;\r\n const scrollingElement =\r\n document.scrollingElement as HTMLElement | null;\r\n\r\n const scrollWidth = Math.max(\r\n root.scrollWidth,\r\n body.scrollWidth,\r\n scrollingElement?.scrollWidth ?? 0,\r\n targetElement.scrollWidth,\r\n );\r\n\r\n const scrollHeight = Math.max(\r\n root.scrollHeight,\r\n body.scrollHeight,\r\n scrollingElement?.scrollHeight ?? 0,\r\n targetElement.scrollHeight,\r\n );\r\n\r\n const clientWidth =\r\n window.visualViewport?.width ?? window.innerWidth;\r\n\r\n const clientHeight =\r\n window.visualViewport?.height ?? window.innerHeight;\r\n\r\n /*\r\n * Важно: не читаем только window.scrollY.\r\n * body может быть самостоятельным overflow-контейнером.\r\n */\r\n const scrollLeft = getActualScrollPosition(\r\n window.scrollX,\r\n root.scrollLeft,\r\n body.scrollLeft,\r\n scrollingElement?.scrollLeft ?? 0,\r\n targetElement.scrollLeft,\r\n );\r\n\r\n const scrollTop = getActualScrollPosition(\r\n window.scrollY,\r\n root.scrollTop,\r\n body.scrollTop,\r\n scrollingElement?.scrollTop ?? 0,\r\n targetElement.scrollTop,\r\n );\r\n\r\n nextX = {\r\n scrollSize: scrollWidth,\r\n clientSize: clientWidth,\r\n scrollPos: scrollLeft,\r\n canScroll: scrollWidth - clientWidth > 1,\r\n };\r\n\r\n nextY = {\r\n scrollSize: scrollHeight,\r\n clientSize: clientHeight,\r\n scrollPos: scrollTop,\r\n canScroll: scrollHeight - clientHeight > 1,\r\n };\r\n } else {\r\n nextX = {\r\n scrollSize: targetElement.scrollWidth,\r\n clientSize: targetElement.clientWidth,\r\n scrollPos: targetElement.scrollLeft,\r\n canScroll:\r\n targetElement.scrollWidth - targetElement.clientWidth >\r\n 1,\r\n };\r\n\r\n nextY = {\r\n scrollSize: targetElement.scrollHeight,\r\n clientSize: targetElement.clientHeight,\r\n scrollPos: targetElement.scrollTop,\r\n canScroll:\r\n targetElement.scrollHeight -\r\n targetElement.clientHeight >\r\n 1,\r\n };\r\n }\r\n\r\n setMetrics((previous) => {\r\n const sameX = isSameAxisMetrics(previous.x, nextX);\r\n const sameY = isSameAxisMetrics(previous.y, nextY);\r\n\r\n if (sameX && sameY) {\r\n return previous;\r\n }\r\n\r\n return {\r\n x: nextX,\r\n y: nextY,\r\n };\r\n });\r\n };\r\n\r\n const scheduleMeasure = () => {\r\n if (rafRef.current !== null) return;\r\n\r\n rafRef.current = requestAnimationFrame(() => {\r\n rafRef.current = null;\r\n measure();\r\n });\r\n };\r\n\r\n measure();\r\n\r\n const resizeObserver = new ResizeObserver(scheduleMeasure);\r\n\r\n if (pageScroll) {\r\n resizeObserver.observe(document.documentElement);\r\n resizeObserver.observe(document.body);\r\n\r\n if (\r\n targetElement !== document.documentElement &&\r\n targetElement !== document.body\r\n ) {\r\n resizeObserver.observe(targetElement);\r\n }\r\n } else {\r\n resizeObserver.observe(targetElement);\r\n\r\n Array.from(targetElement.children).forEach((child) => {\r\n resizeObserver.observe(child);\r\n });\r\n }\r\n\r\n const mutationRoot = pageScroll\r\n ? document.documentElement\r\n : targetElement;\r\n\r\n const mutationObserver = new MutationObserver((mutations) => {\r\n for (const mutation of mutations) {\r\n if (mutation.type !== \"childList\") continue;\r\n\r\n mutation.addedNodes.forEach((node) => {\r\n if (!(node instanceof Element)) return;\r\n\r\n try {\r\n resizeObserver.observe(node);\r\n } catch {}\r\n });\r\n }\r\n\r\n scheduleMeasure();\r\n });\r\n\r\n mutationObserver.observe(mutationRoot, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [\"style\", \"class\", \"hidden\"],\r\n });\r\n\r\n window.addEventListener(\"scroll\", scheduleMeasure, {\r\n capture: true,\r\n passive: true,\r\n });\r\n\r\n targetElement.addEventListener(\"scroll\", scheduleMeasure, {\r\n passive: true,\r\n });\r\n\r\n window.addEventListener(\"resize\", scheduleMeasure);\r\n\r\n window.visualViewport?.addEventListener(\"resize\", scheduleMeasure);\r\n\r\n window.visualViewport?.addEventListener(\"scroll\", scheduleMeasure);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n mutationObserver.disconnect();\r\n\r\n window.removeEventListener(\"scroll\", scheduleMeasure, true);\r\n\r\n targetElement.removeEventListener(\"scroll\", scheduleMeasure);\r\n\r\n window.removeEventListener(\"resize\", scheduleMeasure);\r\n\r\n window.visualViewport?.removeEventListener(\r\n \"resize\",\r\n scheduleMeasure,\r\n );\r\n\r\n window.visualViewport?.removeEventListener(\r\n \"scroll\",\r\n scheduleMeasure,\r\n );\r\n\r\n if (rafRef.current !== null) {\r\n cancelAnimationFrame(rafRef.current);\r\n rafRef.current = null;\r\n }\r\n };\r\n }, [target, ready]);\r\n\r\n return metrics;\r\n};\r\n","import { useEffect, useState } from \"react\";\r\n\r\nexport const useRefReady = (target: HTMLElement | null | undefined): number => {\r\n const [tick, setTick] = useState(0);\r\n\r\n useEffect(() => {\r\n if (target) return;\r\n let rafId: number;\r\n const check = () => {\r\n if (target) {\r\n setTick((t) => t + 1);\r\n } else {\r\n rafId = requestAnimationFrame(check);\r\n }\r\n };\r\n rafId = requestAnimationFrame(check);\r\n return () => cancelAnimationFrame(rafId);\r\n }, [target]);\r\n\r\n return tick;\r\n};\r\n","import { useEffect } from \"react\";\r\nimport { DEFAULT_TRACK_THICKNESS } from \"src/utils/constants\";\r\nimport { computeReservedSpace, parsePxValue } from \"src/utils/helper\";\r\nimport { hideNativeScrollbar } from \"src/utils/native-scrollbar\";\r\n\r\nexport const useFuture = ({\r\n target,\r\n anchorRef,\r\n targetRef,\r\n setFindedTarget,\r\n mounted,\r\n config,\r\n showY,\r\n showX,\r\n superimposition,\r\n findedTarget,\r\n positionMode,\r\n coversAllScrollableAxes,\r\n nativeOnMobile,\r\n}: {\r\n target?: React.RefObject<HTMLElement | null> | null;\r\n anchorRef: React.RefObject<HTMLSpanElement | null>;\r\n targetRef: React.RefObject<HTMLElement | null>;\r\n setFindedTarget: React.Dispatch<React.SetStateAction<HTMLElement | null>>;\r\n mounted: boolean;\r\n config: any;\r\n showY: boolean;\r\n showX: boolean;\r\n superimposition: \"over\" | \"after\";\r\n findedTarget: HTMLElement | null;\r\n positionMode: \"before\" | \"after\";\r\n coversAllScrollableAxes: boolean;\r\n nativeOnMobile: boolean;\r\n}) => {\r\n useEffect(() => {\r\n if (!mounted) return;\r\n\r\n let rafId: number | null = null;\r\n\r\n const resolveTarget = () => {\r\n const nextTarget = target\r\n ? target.current\r\n : (anchorRef.current?.parentElement ?? null);\r\n\r\n if (nextTarget) {\r\n targetRef.current = nextTarget;\r\n setFindedTarget((previousTarget) =>\r\n previousTarget === nextTarget ? previousTarget : nextTarget,\r\n );\r\n return;\r\n }\r\n rafId = requestAnimationFrame(resolveTarget);\r\n };\r\n resolveTarget();\r\n\r\n return () => {\r\n if (rafId !== null) {\r\n cancelAnimationFrame(rafId);\r\n }\r\n };\r\n }, [mounted, target]);\r\n\r\n useEffect(() => {\r\n const el = targetRef.current;\r\n if (!el) return;\r\n\r\n const trackThickness =\r\n parsePxValue(config.scrollBar?.widthTrack) ??\r\n DEFAULT_TRACK_THICKNESS;\r\n const reservedY = showY\r\n ? computeReservedSpace(\r\n config.scrollBar?.boundaryOffset,\r\n trackThickness,\r\n superimposition,\r\n )\r\n : 0;\r\n const reservedX = showX\r\n ? computeReservedSpace(\r\n config.scrollBar?.boundaryOffset,\r\n trackThickness,\r\n superimposition,\r\n )\r\n : 0;\r\n const previousInlinePadding = {\r\n left: el.style.paddingLeft,\r\n right: el.style.paddingRight,\r\n top: el.style.paddingTop,\r\n bottom: el.style.paddingBottom,\r\n };\r\n const computedStyle = window.getComputedStyle(el);\r\n const basePadding = {\r\n left: Number.parseFloat(computedStyle.paddingLeft) || 0,\r\n right: Number.parseFloat(computedStyle.paddingRight) || 0,\r\n top: Number.parseFloat(computedStyle.paddingTop) || 0,\r\n bottom: Number.parseFloat(computedStyle.paddingBottom) || 0,\r\n };\r\n\r\n if (reservedY > 0) {\r\n if (positionMode === \"before\") {\r\n el.style.paddingLeft = `${basePadding.left + reservedY}px`;\r\n } else {\r\n el.style.paddingRight = `${basePadding.right + reservedY}px`;\r\n }\r\n }\r\n\r\n if (reservedX > 0) {\r\n if (positionMode === \"before\") {\r\n el.style.paddingTop = `${basePadding.top + reservedX}px`;\r\n } else {\r\n el.style.paddingBottom = `${basePadding.bottom + reservedX}px`;\r\n }\r\n }\r\n\r\n return () => {\r\n el.style.paddingLeft = previousInlinePadding.left;\r\n el.style.paddingRight = previousInlinePadding.right;\r\n el.style.paddingTop = previousInlinePadding.top;\r\n el.style.paddingBottom = previousInlinePadding.bottom;\r\n };\r\n }, [\r\n findedTarget,\r\n showX,\r\n showY,\r\n positionMode,\r\n superimposition,\r\n config.scrollBar?.boundaryOffset,\r\n config.scrollBar?.widthTrack,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!findedTarget) return;\r\n const mode = config.scrollBar?.hideNativeScrollbar ?? false;\r\n if (mode === false || !coversAllScrollableAxes) {\r\n return;\r\n }\r\n\r\n return hideNativeScrollbar(findedTarget, mode, nativeOnMobile);\r\n }, [\r\n findedTarget,\r\n coversAllScrollableAxes,\r\n nativeOnMobile,\r\n config.scrollBar?.hideNativeScrollbar,\r\n ]);\r\n};\r\n","import { HideNativeScrollbarMode } from \"src/types/config/scrollbar.type\";\r\n\r\nconst STYLE_ID = \"scroll-to-future-native-scrollbar-styles\";\r\nconst ALWAYS_CLASS = \"scroll-to-future-hide-native-scrollbar\";\r\nconst FINE_POINTER_CLASS = \"scroll-to-future-hide-native-scrollbar-fine\";\r\n\r\nconst classCounters = new WeakMap<HTMLElement, Map<string, number>>();\r\n\r\nconst installStyles = (): void => {\r\n if (typeof document === \"undefined\") return;\r\n\r\n if (document.getElementById(STYLE_ID)) {\r\n return;\r\n }\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = STYLE_ID;\r\n\r\n style.textContent = `\r\n .${ALWAYS_CLASS} {\r\n scrollbar-width: none !important;\r\n -ms-overflow-style: none !important;\r\n }\r\n\r\n .${ALWAYS_CLASS}::-webkit-scrollbar {\r\n display: none !important;\r\n width: 0 !important;\r\n height: 0 !important;\r\n background: transparent !important;\r\n }\r\n\r\n @media (any-pointer: fine) {\r\n .${FINE_POINTER_CLASS} {\r\n scrollbar-width: none !important;\r\n -ms-overflow-style: none !important;\r\n }\r\n\r\n .${FINE_POINTER_CLASS}::-webkit-scrollbar {\r\n display: none !important;\r\n width: 0 !important;\r\n height: 0 !important;\r\n background: transparent !important;\r\n }\r\n }\r\n `;\r\n\r\n document.head.appendChild(style);\r\n};\r\n\r\nconst retainClass = (element: HTMLElement, className: string): (() => void) => {\r\n let elementCounters = classCounters.get(element);\r\n\r\n if (!elementCounters) {\r\n elementCounters = new Map();\r\n classCounters.set(element, elementCounters);\r\n }\r\n\r\n const currentCount = elementCounters.get(className) ?? 0;\r\n elementCounters.set(className, currentCount + 1);\r\n\r\n if (currentCount === 0) {\r\n element.classList.add(className);\r\n }\r\n\r\n return () => {\r\n const counters = classCounters.get(element);\r\n if (!counters) return;\r\n\r\n const count = counters.get(className) ?? 0;\r\n\r\n if (count <= 1) {\r\n counters.delete(className);\r\n element.classList.remove(className);\r\n } else {\r\n counters.set(className, count - 1);\r\n }\r\n\r\n if (counters.size === 0) {\r\n classCounters.delete(element);\r\n }\r\n };\r\n};\r\n\r\nconst isDocumentScrollTarget = (target: HTMLElement): boolean => {\r\n if (typeof document === \"undefined\") {\r\n return false;\r\n }\r\n\r\n return (\r\n target === document.body ||\r\n target === document.documentElement ||\r\n target === document.scrollingElement\r\n );\r\n};\r\n\r\nconst resolveStyleTargets = (target: HTMLElement): HTMLElement[] => {\r\n if (!isDocumentScrollTarget(target)) {\r\n return [target];\r\n }\r\n\r\n const targets = new Set<HTMLElement>();\r\n targets.add(document.documentElement);\r\n\r\n if (document.body) {\r\n targets.add(document.body);\r\n }\r\n\r\n const scrollingElement = document.scrollingElement;\r\n\r\n if (scrollingElement instanceof HTMLElement) {\r\n targets.add(scrollingElement);\r\n }\r\n\r\n return Array.from(targets);\r\n};\r\n\r\nconst isMobileInputDevice = (): boolean => {\r\n if (typeof window === \"undefined\" || typeof navigator === \"undefined\") {\r\n return false;\r\n }\r\n\r\n const coarsePointer = window.matchMedia(\"(pointer: coarse)\").matches;\r\n const cannotHover = window.matchMedia(\"(hover: none)\").matches;\r\n const hasTouch = navigator.maxTouchPoints > 0;\r\n\r\n return hasTouch && coarsePointer && cannotHover;\r\n};\r\n\r\nexport const hideNativeScrollbar = (\r\n target: HTMLElement,\r\n mode: HideNativeScrollbarMode,\r\n nativeOnMobile: boolean,\r\n): (() => void) => {\r\n if (\r\n typeof window === \"undefined\" ||\r\n typeof document === \"undefined\" ||\r\n mode === false\r\n ) {\r\n return () => {};\r\n }\r\n\r\n /*\r\n * На телефонах и планшетах оставляем нативный scrollbar,\r\n * если пользователь явно включил nativeOnMobile.\r\n */\r\n if (nativeOnMobile && isMobileInputDevice()) {\r\n return () => {};\r\n }\r\n\r\n installStyles();\r\n\r\n const className = mode === \"always\" ? ALWAYS_CLASS : FINE_POINTER_CLASS;\r\n\r\n const targets = resolveStyleTargets(target);\r\n\r\n const cleanups = targets.map((element) => retainClass(element, className));\r\n\r\n return () => {\r\n cleanups.forEach((cleanup) => {\r\n cleanup();\r\n });\r\n };\r\n};\r\n","\"use client\";\r\nimport { useEffect, useState } from \"react\";\r\n\r\nexport function useMounted() {\r\n const [mounted, setMounted] = useState(false);\r\n\r\n useEffect(() => {\r\n if (mounted) return;\r\n //eslint-disable-next-line\r\n setMounted(true);\r\n }, []);\r\n\r\n return mounted;\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { isPageScrollTarget } from \"../utils/helper\";\r\nimport { useRefReady } from \"./useRefReady\";\r\n\r\nexport interface TargetRect {\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nconst EMPTY_RECT: TargetRect = { top: 0, left: 0, width: 0, height: 0 };\r\n\r\nexport const useTargetRect = (\r\n target: HTMLElement | null | undefined,\r\n): TargetRect => {\r\n const [rect, setRect] = useState<TargetRect>(EMPTY_RECT);\r\n const ready = useRefReady(target);\r\n\r\n useEffect(() => {\r\n const el = target;\r\n if (!el) {\r\n //eslint-disable-next-line\r\n setRect(EMPTY_RECT);\r\n return;\r\n }\r\n\r\n let rafId: number | null = null;\r\n const pageScroll = isPageScrollTarget(el);\r\n\r\n const measure = () => {\r\n const r = pageScroll\r\n ? {\r\n top: 0,\r\n left: 0,\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n }\r\n : el.getBoundingClientRect();\r\n setRect((prev) => {\r\n if (\r\n prev.top === r.top &&\r\n prev.left === r.left &&\r\n prev.width === r.width &&\r\n prev.height === r.height\r\n ) {\r\n return prev;\r\n }\r\n return {\r\n top: r.top,\r\n left: r.left,\r\n width: r.width,\r\n height: r.height,\r\n };\r\n });\r\n };\r\n\r\n const scheduleMeasure = () => {\r\n if (rafId != null) return;\r\n rafId = requestAnimationFrame(() => {\r\n rafId = null;\r\n measure();\r\n });\r\n };\r\n\r\n measure();\r\n\r\n const resizeObserver = new ResizeObserver(scheduleMeasure);\r\n resizeObserver.observe(el);\r\n\r\n window.addEventListener(\"scroll\", scheduleMeasure, {\r\n capture: true,\r\n passive: true,\r\n });\r\n window.addEventListener(\"resize\", scheduleMeasure);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n window.removeEventListener(\"scroll\", scheduleMeasure, true);\r\n window.removeEventListener(\"resize\", scheduleMeasure);\r\n if (rafId != null) cancelAnimationFrame(rafId);\r\n };\r\n }, [target, ready]);\r\n\r\n return rect;\r\n};\r\n","import { ScrollToFutureThemeProps } from \"src/types/theme/scroll-to-future.theme.type\";\r\n\r\nexport const primary: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.15)\",\r\n borderRadius: \"8px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.25)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.35)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.35)\",\r\n borderRadius: \"8px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.55)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0s ease, transform 0s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.75)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const midnight: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(15, 23, 42, 0.55)\",\r\n borderRadius: \"8px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(30, 41, 59, 0.72)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(51, 65, 85, 0.88)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(148, 163, 184, 0.55)\",\r\n borderRadius: \"8px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(203, 213, 225, 0.78)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0s ease, transform 0s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(241, 245, 249, 0.96)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const neonCyan: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(6, 78, 89, 0.35)\",\r\n borderRadius: \"4px\",\r\n transition: \"background-color 0.25s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(8, 145, 178, 0.48)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(14, 116, 144, 0.68)\",\r\n transition: \"background-color 0.12s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(34, 211, 238, 0.58)\",\r\n borderRadius: \"3px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(103, 232, 249, 0.85)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(207, 250, 254, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const ocean: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(7, 89, 133, 0.22)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.35s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(3, 105, 161, 0.35)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(2, 132, 199, 0.5)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(14, 165, 233, 0.58)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(56, 189, 248, 0.82)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(186, 230, 253, 0.98)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const deepSea: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(2, 44, 55, 0.62)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(6, 78, 89, 0.78)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(14, 116, 144, 0.9)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(8, 145, 178, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(34, 211, 238, 0.82)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(165, 243, 252, 0.98)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const forest: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(20, 83, 45, 0.25)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(21, 128, 61, 0.38)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(22, 163, 74, 0.52)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(34, 197, 94, 0.55)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(74, 222, 128, 0.8)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(187, 247, 208, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const moss: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(54, 83, 20, 0.28)\",\r\n borderRadius: \"6px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(63, 98, 18, 0.42)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(77, 124, 15, 0.58)\",\r\n transition: \"background-color 0.14s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(132, 204, 22, 0.55)\",\r\n borderRadius: \"5px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(163, 230, 53, 0.8)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(217, 249, 157, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const lava: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(69, 10, 10, 0.45)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.22s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(127, 29, 29, 0.62)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(153, 27, 27, 0.78)\",\r\n transition: \"background-color 0.1s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(239, 68, 68, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(249, 115, 22, 0.88)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.16s ease, transform 0.16s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(253, 186, 116, 1)\",\r\n transform: \"scale(1.14)\",\r\n transition: \"background-color 0.1s ease, transform 0.1s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const ember: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(67, 20, 7, 0.32)\",\r\n borderRadius: \"5px\",\r\n transition: \"background-color 0.25s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(124, 45, 18, 0.48)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(154, 52, 18, 0.65)\",\r\n transition: \"background-color 0.12s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(234, 88, 12, 0.6)\",\r\n borderRadius: \"4px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(251, 146, 60, 0.86)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(254, 215, 170, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const gold: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(113, 63, 18, 0.25)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(161, 98, 7, 0.4)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(202, 138, 4, 0.55)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(234, 179, 8, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(250, 204, 21, 0.85)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.2s ease, transform 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(254, 240, 138, 1)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const roseQuartz: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(136, 19, 55, 0.18)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.32s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(190, 24, 93, 0.28)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(219, 39, 119, 0.4)\",\r\n transition: \"background-color 0.16s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(251, 113, 133, 0.58)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(244, 114, 182, 0.8)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(253, 164, 175, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const violet: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(76, 29, 149, 0.3)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.28s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(91, 33, 182, 0.45)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(109, 40, 217, 0.62)\",\r\n transition: \"background-color 0.14s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(139, 92, 246, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(167, 139, 250, 0.86)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(221, 214, 254, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const royal: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(30, 27, 75, 0.48)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(49, 46, 129, 0.65)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(67, 56, 202, 0.82)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(99, 102, 241, 0.65)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(165, 180, 252, 0.86)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.2s ease, transform 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(224, 231, 255, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const arctic: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(186, 230, 253, 0.22)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.35s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(125, 211, 252, 0.36)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(56, 189, 248, 0.5)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(224, 242, 254, 0.65)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(240, 249, 255, 0.88)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 1)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const glass: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.08)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.14)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.22)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.28)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.46)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.7)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const graphite: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(17, 24, 39, 0.52)\",\r\n borderRadius: \"3px\",\r\n transition: \"background-color 0.22s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(31, 41, 55, 0.7)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(55, 65, 81, 0.88)\",\r\n transition: \"background-color 0.1s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(107, 114, 128, 0.65)\",\r\n borderRadius: \"2px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(156, 163, 175, 0.82)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(229, 231, 235, 0.98)\",\r\n transform: \"scale(1.06)\",\r\n transition: \"background-color 0.1s ease, transform 0.1s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const terminal: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 20, 5, 0.72)\",\r\n borderRadius: \"0px\",\r\n transition: \"background-color 0.15s linear\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 40, 10, 0.82)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 65, 18, 0.92)\",\r\n transition: \"background-color 0.08s linear\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(34, 197, 94, 0.62)\",\r\n borderRadius: \"0px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(74, 222, 128, 0.85)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.1s linear\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(187, 247, 208, 1)\",\r\n transform: \"scale(1.06)\",\r\n transition: \"background-color 0.08s linear, transform 0.08s linear\",\r\n },\r\n },\r\n};\r\n\r\nexport const toxic: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(54, 83, 20, 0.48)\",\r\n borderRadius: \"2px\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(77, 124, 15, 0.65)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(101, 163, 13, 0.82)\",\r\n transition: \"background-color 0.1s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(163, 230, 53, 0.68)\",\r\n borderRadius: \"1px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(190, 242, 100, 0.9)\",\r\n transform: \"scale(1.04)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(236, 252, 203, 1)\",\r\n transform: \"scale(1.15)\",\r\n transition: \"background-color 0.08s ease, transform 0.08s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const candy: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(244, 114, 182, 0.18)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(192, 132, 252, 0.28)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(129, 140, 248, 0.42)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(251, 113, 133, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(244, 114, 182, 0.84)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(224, 231, 255, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const sand: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(120, 53, 15, 0.16)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.32s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(180, 83, 9, 0.25)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(217, 119, 6, 0.38)\",\r\n transition: \"background-color 0.16s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(217, 119, 6, 0.52)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(245, 158, 11, 0.75)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(253, 230, 138, 0.98)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const monoLight: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.08)\",\r\n borderRadius: \"6px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.14)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.22)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.32)\",\r\n borderRadius: \"6px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.52)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.75)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const monoDark: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.08)\",\r\n borderRadius: \"6px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.14)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.22)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.32)\",\r\n borderRadius: \"6px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.55)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.82)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n","import { PresetsThemeType } from \"../types/theme/preset.theme.type\";\r\nimport { ScrollToFutureThemeProps } from \"../types/theme/scroll-to-future.theme.type\";\r\nimport {\r\n arctic,\r\n candy,\r\n deepSea,\r\n ember,\r\n forest,\r\n glass,\r\n gold,\r\n graphite,\r\n lava,\r\n midnight,\r\n monoDark,\r\n monoLight,\r\n moss,\r\n neonCyan,\r\n ocean,\r\n primary,\r\n roseQuartz,\r\n royal,\r\n sand,\r\n terminal,\r\n toxic,\r\n violet,\r\n} from \"./collection.theme\";\r\n\r\nexport const presets: Record<PresetsThemeType, ScrollToFutureThemeProps> = {\r\n primary,\r\n midnight,\r\n neonCyan,\r\n ocean,\r\n deepSea,\r\n forest,\r\n moss,\r\n lava,\r\n ember,\r\n gold,\r\n roseQuartz,\r\n violet,\r\n royal,\r\n arctic,\r\n glass,\r\n graphite,\r\n terminal,\r\n toxic,\r\n candy,\r\n sand,\r\n monoLight,\r\n monoDark,\r\n};\r\n","import { ScrollToFutureInterface } from \"../types/scroll-to-future.type\";\r\n\r\nexport const defaultConfig: Required<Omit<ScrollToFutureInterface, \"target\">> =\r\n {\r\n scrollBar: {\r\n mode: \"both\",\r\n positionMode: \"after\",\r\n superimposition: \"after\",\r\n boundaryOffset: \"4px\",\r\n heightTrack: \"98%\",\r\n hideNativeScrollbar: \"always\",\r\n },\r\n\r\n thumb: {\r\n boundaryOffset: \"1px 1px\",\r\n heightTrack: \"auto\",\r\n },\r\n\r\n nativeOnMobile: true,\r\n\r\n selectTheme: \"primary\",\r\n optionsTheme: {},\r\n };\r\n","import { presets } from \"../themes/preset\";\r\nimport { ScrollToFutureScrollBar } from \"../types/config/scrollbar.type\";\r\nimport { ScrollToFutureThumb } from \"../types/config/thumb.type\";\r\nimport { ScrollToFutureInterface } from \"../types/scroll-to-future.type\";\r\nimport { ScrollToFutureThemeProps } from \"../types/theme/scroll-to-future.theme.type\";\r\nimport { defaultConfig } from \"./config\";\r\n\r\ntype Config = Omit<ScrollToFutureInterface, \"target\">;\r\n\r\nexport interface MergedConfig {\r\n scrollBar: ScrollToFutureScrollBar;\r\n thumb: ScrollToFutureThumb;\r\n optionsTheme: ScrollToFutureThemeProps;\r\n}\r\n\r\nexport const merge = (config: Config): MergedConfig => {\r\n const selectedTheme =\r\n presets[config.selectTheme ?? defaultConfig.selectTheme];\r\n\r\n return {\r\n scrollBar: {\r\n ...defaultConfig.scrollBar,\r\n ...config.scrollBar,\r\n },\r\n thumb: {\r\n ...defaultConfig.thumb,\r\n ...config.thumb,\r\n },\r\n optionsTheme: themeMerge(selectedTheme, config.optionsTheme),\r\n };\r\n};\r\n\r\ntype PlainObject = Record<string, unknown>;\r\n\r\nconst isPlainObject = (value: unknown): value is PlainObject =>\r\n typeof value === \"object\" && value !== null && !Array.isArray(value);\r\n\r\nexport const themeMerge = <T extends PlainObject>(\r\n base: T,\r\n override?: Partial<T>,\r\n): T => {\r\n if (!override) return base;\r\n\r\n const result: PlainObject = { ...base };\r\n\r\n for (const key of Object.keys(override) as Array<keyof T>) {\r\n const overrideValue = override[key];\r\n const baseValue = base[key];\r\n\r\n if (overrideValue === undefined) continue;\r\n\r\n if (isPlainObject(overrideValue) && isPlainObject(baseValue)) {\r\n result[key as string] = themeMerge(\r\n baseValue as PlainObject,\r\n overrideValue as PlainObject,\r\n );\r\n } else {\r\n result[key as string] = overrideValue;\r\n }\r\n }\r\n\r\n return result as T;\r\n};\r\n","export const shouldUseNativeScrollbar = (): boolean => {\r\n if (typeof window === \"undefined\") {\r\n return true;\r\n }\r\n\r\n const primaryPointerIsCoarse =\r\n window.matchMedia(\"(pointer: coarse)\").matches;\r\n\r\n const hasAnyFinePointer = window.matchMedia(\"(any-pointer: fine)\").matches;\r\n\r\n return primaryPointerIsCoarse && !hasAnyFinePointer;\r\n};\r\n","import { ScrollToFutureThemeProps } from \"../types/theme/scroll-to-future.theme.type\";\r\n\r\nexport const variables = (theme: ScrollToFutureThemeProps) => {\r\n const styles: Record<string, string> = {};\r\n\r\n for (const key in theme) {\r\n const k = key as keyof ScrollToFutureThemeProps;\r\n const statusTheme = theme[k];\r\n\r\n if (!statusTheme) continue;\r\n\r\n const type = k === \"scrollBar\" ? \"scrollbar\" : \"thumb\";\r\n\r\n for (const status in statusTheme) {\r\n const properties = statusTheme[status as keyof typeof statusTheme];\r\n\r\n if (!properties) continue;\r\n\r\n const statusPrefix = status === \"inactive\" ? \"\" : `-${status}`;\r\n\r\n for (const prop in properties) {\r\n const value = properties[prop as keyof typeof properties];\r\n\r\n if (value === undefined) continue;\r\n\r\n styles[`--${type}${statusPrefix}-${prop}`] = value as string;\r\n }\r\n }\r\n }\r\n\r\n return styles;\r\n};\r\n"],"mappings":"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","names":["import_react","import_react","import_react","import_react","import_react","import_react","import_jsx_runtime"]}
|
package/dist/index.mjs
CHANGED
|
@@ -756,12 +756,6 @@ var useFuture = ({
|
|
|
756
756
|
useEffect3(() => {
|
|
757
757
|
if (!findedTarget) return;
|
|
758
758
|
const mode = config.scrollBar?.hideNativeScrollbar ?? false;
|
|
759
|
-
console.log("native scrollbar effect:", {
|
|
760
|
-
mode,
|
|
761
|
-
nativeOnMobile,
|
|
762
|
-
coversAllScrollableAxes,
|
|
763
|
-
target: findedTarget
|
|
764
|
-
});
|
|
765
759
|
if (mode === false || !coversAllScrollableAxes) {
|
|
766
760
|
return;
|
|
767
761
|
}
|
|
@@ -1676,10 +1670,6 @@ var ScrollToFuture = ({
|
|
|
1676
1670
|
const mounted = useMounted();
|
|
1677
1671
|
const [findedTarget, setFindedTarget] = useState6(null);
|
|
1678
1672
|
const config = merge({ scrollBar, thumb, selectTheme, optionsTheme });
|
|
1679
|
-
console.log("hideNativeScrollbar:", {
|
|
1680
|
-
original: scrollBar.hideNativeScrollbar,
|
|
1681
|
-
merged: config.scrollBar.hideNativeScrollbar
|
|
1682
|
-
});
|
|
1683
1673
|
const vars = variables(config.optionsTheme);
|
|
1684
1674
|
const mode = config.scrollBar?.mode ?? "both";
|
|
1685
1675
|
const positionMode = config.scrollBar?.positionMode ?? "after";
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ScrollToFuture.tsx","../src/components/Axios/ScrollAxis.tsx","../src/utils/constants.ts","../src/utils/helper.ts","../src/hooks/useElementScrollObserver.ts","../src/hooks/useRefReady.ts","../src/hooks/useFuture.ts","../src/utils/native-scrollbar.ts","../src/hooks/useMounted.tsx","../src/hooks/useTargetRect.ts","../src/themes/collection.theme.ts","../src/themes/preset.ts","../src/utils/config.ts","../src/utils/merge.ts","../src/utils/mobile-detect.ts","../src/utils/variables-css.ts"],"sourcesContent":["import { useRef, useState } from \"react\";\r\nimport { ScrollAxis } from \"./components/Axios/ScrollAxis\";\r\nimport \"./css/axis.css\";\r\nimport \"./css/scroll.css\";\r\n\r\nimport { useElementScrollObserver } from \"./hooks/useElementScrollObserver\";\r\nimport { useFuture } from \"./hooks/useFuture\";\r\nimport { useMounted } from \"./hooks/useMounted\";\r\nimport { useTargetRect } from \"./hooks/useTargetRect\";\r\nimport type { ScrollToFutureInterface } from \"./types/scroll-to-future.type\";\r\nimport { merge } from \"./utils/merge\";\r\nimport { shouldUseNativeScrollbar } from \"./utils/mobile-detect\";\r\n\r\nimport { variables } from \"./utils/variables-css\";\r\n\r\nexport const ScrollToFuture = ({\r\n target,\r\n scrollBar = {},\r\n thumb = {},\r\n selectTheme = \"primary\",\r\n optionsTheme = {},\r\n nativeOnMobile = true,\r\n}: ScrollToFutureInterface) => {\r\n const anchorRef = useRef<HTMLSpanElement | null>(null);\r\n const targetRef = useRef<HTMLElement | null>(null);\r\n const mounted = useMounted();\r\n const [findedTarget, setFindedTarget] = useState<HTMLElement | null>(null);\r\n\r\n const config = merge({ scrollBar, thumb, selectTheme, optionsTheme });\r\n console.log(\"hideNativeScrollbar:\", {\r\n original: scrollBar.hideNativeScrollbar,\r\n merged: config.scrollBar.hideNativeScrollbar,\r\n });\r\n const vars = variables(config.optionsTheme);\r\n const mode = config.scrollBar?.mode ?? \"both\";\r\n const positionMode = config.scrollBar?.positionMode ?? \"after\";\r\n const superimposition = config.scrollBar?.superimposition ?? \"over\";\r\n const nativeScrollOnMobile = shouldUseNativeScrollbar() && nativeOnMobile;\r\n\r\n const metrics = useElementScrollObserver(findedTarget);\r\n const rect = useTargetRect(findedTarget);\r\n const wantsY = mode === \"vertical\" || mode === \"both\";\r\n const wantsX = mode === \"horizontal\" || mode === \"both\";\r\n const showY = wantsY && metrics.y.canScroll;\r\n const showX = wantsX && metrics.x.canScroll;\r\n const coversAllScrollableAxes =\r\n (!metrics.x.canScroll || showX) && (!metrics.y.canScroll || showY);\r\n\r\n useFuture({\r\n target,\r\n anchorRef,\r\n targetRef,\r\n setFindedTarget,\r\n mounted,\r\n config,\r\n showY,\r\n showX,\r\n superimposition,\r\n findedTarget,\r\n positionMode,\r\n coversAllScrollableAxes,\r\n nativeOnMobile,\r\n });\r\n\r\n if (!mounted || nativeScrollOnMobile) {\r\n return null;\r\n }\r\n\r\n const canRenderOverlay =\r\n findedTarget !== null && rect.width > 0 && rect.height > 0;\r\n\r\n return (\r\n <>\r\n {!target && (\r\n <span\r\n ref={anchorRef}\r\n aria-hidden=\"true\"\r\n style={{ display: \"none\" }}\r\n />\r\n )}\r\n\r\n {canRenderOverlay && (\r\n <div\r\n className=\"scroll-to-future__overlay\"\r\n style={{\r\n top: rect.top,\r\n left: rect.left,\r\n width: rect.width,\r\n height: rect.height,\r\n }}\r\n >\r\n {showY && (\r\n <ScrollAxis\r\n vars={vars}\r\n axis=\"y\"\r\n target={findedTarget}\r\n metrics={metrics.y}\r\n scrollBar={config.scrollBar!}\r\n thumb={thumb}\r\n positionMode={positionMode}\r\n superimposition={superimposition}\r\n hasCrossAxis={showX}\r\n />\r\n )}\r\n\r\n {showX && (\r\n <ScrollAxis\r\n vars={vars}\r\n axis=\"x\"\r\n target={findedTarget}\r\n metrics={metrics.x}\r\n scrollBar={config.scrollBar!}\r\n thumb={thumb}\r\n positionMode={positionMode}\r\n superimposition={superimposition}\r\n hasCrossAxis={showY}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n","import type React from \"react\";\r\nimport { useRef, useState } from \"react\";\r\nimport { Axis, AxisMetrics } from \"src/types/config/axis.type\";\r\nimport {\r\n PositionMode,\r\n ScrollToFutureScrollBar,\r\n Superimposition,\r\n} from \"src/types/config/scrollbar.type\";\r\nimport { ScrollToFutureThumb } from \"src/types/config/thumb.type\";\r\nimport { DEFAULT_TRACK_THICKNESS } from \"src/utils/constants\";\r\nimport {\r\n clamp,\r\n computeThumbPosition,\r\n computeThumbSize,\r\n fitInsetsWithinSize,\r\n isPageScrollTarget,\r\n parseBoundaryOffset,\r\n parsePxValue,\r\n resolveTrackLength,\r\n trackPositionToScroll,\r\n} from \"src/utils/helper\";\r\n\r\ninterface ScrollAxisProps {\r\n axis: Axis;\r\n target: HTMLElement | null;\r\n metrics: AxisMetrics;\r\n scrollBar: ScrollToFutureScrollBar;\r\n thumb: ScrollToFutureThumb;\r\n positionMode: PositionMode;\r\n superimposition: Superimposition;\r\n hasCrossAxis: boolean;\r\n vars: Record<string, string>;\r\n}\r\n\r\nexport const ScrollAxis = ({\r\n axis,\r\n target,\r\n metrics,\r\n scrollBar,\r\n thumb,\r\n positionMode,\r\n superimposition,\r\n hasCrossAxis,\r\n vars,\r\n}: ScrollAxisProps) => {\r\n const trackRef = useRef<HTMLDivElement>(null);\r\n //* REFS ====================================================================\r\n const dragState = useRef<{\r\n startPointer: number;\r\n startScroll: number;\r\n } | null>(null);\r\n //* REFS ====================================================================\r\n\r\n //* STATE ===================================================================\r\n const [isDragging, setIsDragging] = useState(false);\r\n //* STATE ===================================================================\r\n\r\n //* COMPUTED PROPERTIES =====================================================\r\n const requestedTrackThickness =\r\n parsePxValue(scrollBar.widthTrack) ?? DEFAULT_TRACK_THICKNESS;\r\n const trackThickness = Math.max(1, requestedTrackThickness);\r\n const trackBoundary = parseBoundaryOffset(scrollBar.boundaryOffset);\r\n const thumbBoundary = parseBoundaryOffset(thumb.boundaryOffset);\r\n const requestedCrossAxisOccupation =\r\n trackBoundary.start + trackThickness + trackBoundary.end;\r\n const maximumCrossAxisOccupation = Math.max(0, metrics.clientSize - 1);\r\n const crossAxisOccupation = hasCrossAxis\r\n ? clamp(requestedCrossAxisOccupation, 0, maximumCrossAxisOccupation)\r\n : 0;\r\n const availableMainStart =\r\n hasCrossAxis && positionMode === \"before\" ? crossAxisOccupation : 0;\r\n const availableMainSize = Math.max(\r\n 0,\r\n metrics.clientSize - crossAxisOccupation,\r\n );\r\n const trackCenter = availableMainStart + availableMainSize / 2;\r\n const requestedTrackLength = resolveTrackLength(\r\n scrollBar.heightTrack,\r\n metrics.clientSize,\r\n );\r\n const trackLength =\r\n availableMainSize > 0\r\n ? clamp(requestedTrackLength, 1, availableMainSize)\r\n : 0;\r\n const fittedThumbMainInsets = fitInsetsWithinSize(\r\n thumbBoundary.start,\r\n thumbBoundary.end,\r\n trackLength,\r\n 1,\r\n );\r\n const thumbMainStart = fittedThumbMainInsets.start;\r\n const innerTrackLength = fittedThumbMainInsets.innerSize;\r\n const requestedThumbCrossSize =\r\n trackThickness - thumbBoundary.start - thumbBoundary.end;\r\n const thumbCrossSize = clamp(requestedThumbCrossSize, 1, trackThickness);\r\n const thumbSize = computeThumbSize(\r\n innerTrackLength,\r\n metrics,\r\n thumb.heightTrack,\r\n );\r\n const thumbPositionInsideTrack = computeThumbPosition(\r\n innerTrackLength,\r\n thumbSize,\r\n metrics,\r\n );\r\n const thumbPosition = thumbMainStart + thumbPositionInsideTrack;\r\n const maxScroll = Math.max(0, metrics.scrollSize - metrics.clientSize);\r\n const maxThumbTravel = Math.max(0, innerTrackLength - thumbSize);\r\n //* COMPUTED PROPERTIES =====================================================\r\n\r\n //* METHODS =================================================================\r\n const setScrollPosition = (value: number) => {\r\n const targetElement = target;\r\n\r\n if (!targetElement) return;\r\n\r\n const nextValue = clamp(value, 0, Math.max(0, maxScroll));\r\n\r\n if (!isPageScrollTarget(targetElement)) {\r\n if (axis === \"x\") {\r\n //eslint-disable-next-line\r\n targetElement.scrollLeft = nextValue;\r\n } else {\r\n targetElement.scrollTop = nextValue;\r\n }\r\n\r\n return;\r\n }\r\n\r\n const targetStyle = window.getComputedStyle(targetElement);\r\n\r\n const overflowValue =\r\n axis === \"x\" ? targetStyle.overflowX : targetStyle.overflowY;\r\n\r\n const targetCanScroll =\r\n axis === \"x\"\r\n ? targetElement.scrollWidth - targetElement.clientWidth > 1\r\n : targetElement.scrollHeight - targetElement.clientHeight > 1;\r\n\r\n const targetOwnsScroll =\r\n targetCanScroll && /^(auto|scroll|overlay)$/.test(overflowValue);\r\n\r\n if (targetOwnsScroll) {\r\n if (axis === \"x\") {\r\n targetElement.scrollLeft = nextValue;\r\n } else {\r\n targetElement.scrollTop = nextValue;\r\n }\r\n\r\n return;\r\n }\r\n\r\n window.scrollTo({\r\n left: axis === \"x\" ? nextValue : window.scrollX,\r\n top: axis === \"y\" ? nextValue : window.scrollY,\r\n behavior: \"auto\",\r\n });\r\n };\r\n\r\n const handleThumbPointerDown = (\r\n event: React.PointerEvent<HTMLDivElement>,\r\n ) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n dragState.current = {\r\n startPointer: axis === \"x\" ? event.clientX : event.clientY,\r\n startScroll: metrics.scrollPos,\r\n };\r\n\r\n setIsDragging(true);\r\n\r\n event.currentTarget.setPointerCapture(event.pointerId);\r\n };\r\n\r\n const handleThumbPointerMove = (\r\n event: React.PointerEvent<HTMLDivElement>,\r\n ) => {\r\n const currentDragState = dragState.current;\r\n\r\n if (!currentDragState) return;\r\n if (maxScroll <= 0 || maxThumbTravel <= 0) return;\r\n\r\n const pointerPosition = axis === \"x\" ? event.clientX : event.clientY;\r\n\r\n const pointerDelta = pointerPosition - currentDragState.startPointer;\r\n\r\n const scrollDelta = (pointerDelta / maxThumbTravel) * maxScroll;\r\n\r\n setScrollPosition(currentDragState.startScroll + scrollDelta);\r\n };\r\n\r\n const stopDrag = (event: React.PointerEvent<HTMLDivElement>) => {\r\n if (!dragState.current) return;\r\n\r\n dragState.current = null;\r\n setIsDragging(false);\r\n\r\n try {\r\n event.currentTarget.releasePointerCapture(event.pointerId);\r\n } catch {}\r\n };\r\n\r\n const handleTrackPointerDown = (\r\n event: React.PointerEvent<HTMLDivElement>,\r\n ) => {\r\n if (event.target !== event.currentTarget) {\r\n return;\r\n }\r\n\r\n const trackElement = trackRef.current;\r\n\r\n if (!trackElement) return;\r\n if (maxThumbTravel <= 0) return;\r\n\r\n const rect = trackElement.getBoundingClientRect();\r\n\r\n const clickPosition =\r\n axis === \"x\" ? event.clientX - rect.left : event.clientY - rect.top;\r\n\r\n const clickInsideInnerTrack = clickPosition - thumbMainStart;\r\n\r\n const targetThumbStart = clamp(\r\n clickInsideInnerTrack - thumbSize / 2,\r\n 0,\r\n maxThumbTravel,\r\n );\r\n\r\n const nextScroll = trackPositionToScroll(\r\n targetThumbStart,\r\n innerTrackLength,\r\n thumbSize,\r\n metrics,\r\n );\r\n\r\n setScrollPosition(nextScroll);\r\n };\r\n //* METHODS =================================================================\r\n\r\n //* CHECKS ==================================================================\r\n if (\r\n !metrics.canScroll ||\r\n metrics.clientSize <= 0 ||\r\n trackLength < 1 ||\r\n innerTrackLength < 1 ||\r\n thumbSize < 1\r\n ) {\r\n return null;\r\n }\r\n //* CHECKS ==================================================================\r\n\r\n //* STYLES ==================================================================\r\n const trackStyle: React.CSSProperties =\r\n axis === \"y\"\r\n ? {\r\n position: \"absolute\",\r\n top: trackCenter,\r\n transform: \"translateY(-50%)\",\r\n\r\n width: trackThickness,\r\n height: trackLength,\r\n\r\n ...(positionMode === \"before\"\r\n ? {\r\n left: trackBoundary.start,\r\n }\r\n : {\r\n right: trackBoundary.end,\r\n }),\r\n\r\n pointerEvents: \"auto\",\r\n }\r\n : {\r\n position: \"absolute\",\r\n left: trackCenter,\r\n transform: \"translateX(-50%)\",\r\n width: trackLength,\r\n height: trackThickness,\r\n\r\n ...(positionMode === \"before\"\r\n ? {\r\n top: trackBoundary.start,\r\n }\r\n : {\r\n bottom: trackBoundary.end,\r\n }),\r\n\r\n pointerEvents: \"auto\",\r\n };\r\n\r\n const thumbStyle: React.CSSProperties =\r\n axis === \"y\"\r\n ? {\r\n top: thumbPosition,\r\n height: thumbSize,\r\n\r\n //* horizontal center\r\n left: \"50%\",\r\n width: thumbCrossSize,\r\n transform: \"translateX(-50%)\",\r\n }\r\n : {\r\n left: thumbPosition,\r\n width: thumbSize,\r\n\r\n //* vertical center\r\n top: \"50%\",\r\n height: thumbCrossSize,\r\n transform: \"translateY(-50%)\",\r\n };\r\n //* STYLES ==================================================================\r\n\r\n //* JSX =====================================================================\r\n return (\r\n <div\r\n ref={trackRef}\r\n className=\"scroll-to-future__track\"\r\n style={{ ...trackStyle, ...vars }}\r\n //eslint-disable-next-line\r\n onPointerDown={handleTrackPointerDown}\r\n data-axis={axis}\r\n data-superimposition={superimposition}\r\n >\r\n <div\r\n className={`scroll-to-future__thumb ${\r\n isDragging ? \"scroll-to-future__thumb--dragging\" : \"\"\r\n }`.trim()}\r\n style={thumbStyle}\r\n onPointerDown={handleThumbPointerDown}\r\n //eslint-disable-next-line\r\n onPointerMove={handleThumbPointerMove}\r\n onPointerUp={stopDrag}\r\n onPointerCancel={stopDrag}\r\n />\r\n </div>\r\n );\r\n //* JSX =====================================================================\r\n};\r\n","import { AxisMetrics } from \"../types/config/axis.type\";\r\n\r\nexport const MIN_THUMB_SIZE = 24;\r\nexport const DEFAULT_TRACK_THICKNESS = 8;\r\nexport const MAX_THUMB_RATIO = 0.8;\r\n\r\nexport const EMPTY_AXIS_METRICS: AxisMetrics = {\r\n scrollSize: 0,\r\n clientSize: 0,\r\n scrollPos: 0,\r\n canScroll: false,\r\n};\r\n","import {\r\n Axis,\r\n AxisInsets,\r\n AxisMetrics,\r\n ParsedOffset,\r\n} from \"../types/config/axis.type\";\r\nimport { BoundaryOffset } from \"../types/config/general.type\";\r\nimport { HeightTrackType } from \"../types/config/scrollbar.type\";\r\nimport { ScrollToFutureThumb } from \"../types/config/thumb.type\";\r\nimport { MAX_THUMB_RATIO, MIN_THUMB_SIZE } from \"./constants\";\r\n\r\nexport const clamp = (value: number, min: number, max: number): number =>\r\n Math.min(Math.max(value, min), Math.max(min, max));\r\n\r\nexport const parsePxValue = (value?: string | null): number | null => {\r\n if (!value) return null;\r\n const match = /^(-?\\d+(?:\\.\\d+)?)px$/.exec(value.trim());\r\n return match ? Number(match[1]) : null;\r\n};\r\n\r\nexport const parseBoundaryOffset = (\r\n value?: BoundaryOffset | null,\r\n): ParsedOffset => {\r\n if (!value) {\r\n return {\r\n start: 0,\r\n end: 0,\r\n };\r\n }\r\n\r\n const parts = value.trim().split(/\\s+/);\r\n\r\n const start = Math.max(0, parsePxValue(parts[0]) ?? 0);\r\n\r\n const end =\r\n parts.length > 1 ? Math.max(0, parsePxValue(parts[1]) ?? 0) : start;\r\n\r\n return {\r\n start,\r\n end,\r\n };\r\n};\r\n\r\nexport const fitInsetsWithinSize = (\r\n start: number,\r\n end: number,\r\n size: number,\r\n minInnerSize = 1,\r\n): {\r\n start: number;\r\n end: number;\r\n innerSize: number;\r\n} => {\r\n const safeSize = Math.max(0, size);\r\n\r\n if (safeSize <= 0) {\r\n return {\r\n start: 0,\r\n end: 0,\r\n innerSize: 0,\r\n };\r\n }\r\n\r\n const actualMinInnerSize = Math.min(Math.max(0, minInnerSize), safeSize);\r\n const safeStart = Math.max(0, start);\r\n const safeEnd = Math.max(0, end);\r\n const requestedInsetsSize = safeStart + safeEnd;\r\n const maximumInsetsSize = safeSize - actualMinInnerSize;\r\n\r\n if (requestedInsetsSize <= maximumInsetsSize) {\r\n return {\r\n start: safeStart,\r\n end: safeEnd,\r\n innerSize: safeSize - safeStart - safeEnd,\r\n };\r\n }\r\n\r\n if (requestedInsetsSize <= 0) {\r\n return {\r\n start: 0,\r\n end: 0,\r\n innerSize: safeSize,\r\n };\r\n }\r\n\r\n const scale = maximumInsetsSize / requestedInsetsSize;\r\n const fittedStart = safeStart * scale;\r\n const fittedEnd = safeEnd * scale;\r\n\r\n return {\r\n start: fittedStart,\r\n end: fittedEnd,\r\n innerSize: Math.max(\r\n actualMinInnerSize,\r\n safeSize - fittedStart - fittedEnd,\r\n ),\r\n };\r\n};\r\n\r\nexport const resolveAxisInsets = (\r\n value: BoundaryOffset | undefined,\r\n axis: Axis,\r\n): AxisInsets => {\r\n const { start, end } = parseBoundaryOffset(value);\r\n\r\n if (axis === \"y\") {\r\n return {\r\n cross: start,\r\n main: end,\r\n };\r\n }\r\n\r\n return {\r\n cross: start,\r\n main: end,\r\n };\r\n};\r\n\r\nexport const resolveTrackLength = (\r\n value: HeightTrackType | undefined,\r\n containerSize: number,\r\n): number => {\r\n if (!value) return containerSize;\r\n\r\n const px = parsePxValue(value);\r\n if (px !== null) return px;\r\n\r\n const percentMatch = /^(-?\\d+(?:\\.\\d+)?)%$/.exec(value);\r\n if (percentMatch) return (Number(percentMatch[1]) / 100) * containerSize;\r\n\r\n const vhMatch = /^(-?\\d+(?:\\.\\d+)?)vh$/.exec(value);\r\n if (vhMatch) {\r\n const vh =\r\n typeof window !== \"undefined\" ? window.innerHeight : containerSize;\r\n return (Number(vhMatch[1]) / 100) * vh;\r\n }\r\n\r\n const dvhMatch = /^(-?\\d+(?:\\.\\d+)?)d(s)?vh$/.exec(value);\r\n if (dvhMatch) {\r\n const dvh =\r\n typeof window !== \"undefined\"\r\n ? (window.visualViewport?.height ?? window.innerHeight)\r\n : containerSize;\r\n return (Number(dvhMatch[1]) / 100) * dvh;\r\n }\r\n\r\n return containerSize;\r\n};\r\n\r\nexport const computeThumbSize = (\r\n trackLength: number,\r\n metrics: AxisMetrics,\r\n thumbHeightTrack: ScrollToFutureThumb[\"heightTrack\"],\r\n): number => {\r\n if (trackLength <= 0) return 0;\r\n\r\n const minSize = Math.min(MIN_THUMB_SIZE, trackLength);\r\n const maxSize = Math.min(\r\n trackLength,\r\n Math.max(minSize, trackLength * MAX_THUMB_RATIO),\r\n );\r\n\r\n if (!thumbHeightTrack || thumbHeightTrack === \"auto\") {\r\n const ratio =\r\n metrics.scrollSize > 0\r\n ? metrics.clientSize / metrics.scrollSize\r\n : 1;\r\n\r\n const autoSize = trackLength * clamp(ratio, 0, 1);\r\n return clamp(autoSize, minSize, maxSize);\r\n }\r\n\r\n const px = parsePxValue(thumbHeightTrack);\r\n\r\n if (px !== null) {\r\n return clamp(px, minSize, maxSize);\r\n }\r\n\r\n const percentMatch = /^(-?\\d+(?:\\.\\d+)?)%$/.exec(thumbHeightTrack.trim());\r\n\r\n if (percentMatch) {\r\n const size = (Number(percentMatch[1]) / 100) * trackLength;\r\n\r\n return clamp(size, minSize, maxSize);\r\n }\r\n\r\n return maxSize;\r\n};\r\n\r\nexport const computeThumbPosition = (\r\n trackLength: number,\r\n thumbSize: number,\r\n metrics: AxisMetrics,\r\n): number => {\r\n const maxScroll = metrics.scrollSize - metrics.clientSize;\r\n const maxThumbTravel = trackLength - thumbSize;\r\n if (maxScroll <= 0 || maxThumbTravel <= 0) return 0;\r\n const ratio = clamp(metrics.scrollPos / maxScroll, 0, 1);\r\n return ratio * maxThumbTravel;\r\n};\r\n\r\nexport const trackPositionToScroll = (\r\n trackPos: number,\r\n trackLength: number,\r\n thumbSize: number,\r\n metrics: AxisMetrics,\r\n): number => {\r\n const maxScroll = metrics.scrollSize - metrics.clientSize;\r\n const maxThumbTravel = trackLength - thumbSize;\r\n if (maxScroll <= 0 || maxThumbTravel <= 0) return 0;\r\n const ratio = clamp(trackPos / maxThumbTravel, 0, 1);\r\n return ratio * maxScroll;\r\n};\r\n\r\nexport const computeReservedSpace = (\r\n boundaryOffset: BoundaryOffset | undefined,\r\n trackThicknessPx: number,\r\n superimposition: \"over\" | \"after\" | undefined,\r\n): number => {\r\n if (superimposition !== \"after\") {\r\n return 0;\r\n }\r\n\r\n const { start, end } = parseBoundaryOffset(boundaryOffset);\r\n\r\n return start + trackThicknessPx + end;\r\n};\r\n\r\nexport const resolveScrollingElement = (el: HTMLElement): HTMLElement => {\r\n if (\r\n typeof document !== \"undefined\" &&\r\n (el === document.body || el === document.documentElement)\r\n ) {\r\n return (\r\n (document.scrollingElement as HTMLElement | null) ??\r\n document.documentElement\r\n );\r\n }\r\n return el;\r\n};\r\n\r\nexport const isPageScrollTarget = (el: HTMLElement): boolean =>\r\n typeof document !== \"undefined\" &&\r\n (el === document.body || el === document.documentElement);\r\n","import { useEffect, useRef, useState } from \"react\";\r\nimport { isPageScrollTarget } from \"../utils/helper\";\r\n\r\nimport { AxisMetrics, TargetMetrics } from \"../types/config/axis.type\";\r\nimport { EMPTY_AXIS_METRICS } from \"../utils/constants\";\r\nimport { useRefReady } from \"./useRefReady\";\r\n\r\nconst isSameAxisMetrics = (previous: AxisMetrics, next: AxisMetrics): boolean =>\r\n previous.scrollSize === next.scrollSize &&\r\n previous.clientSize === next.clientSize &&\r\n previous.scrollPos === next.scrollPos &&\r\n previous.canScroll === next.canScroll;\r\n\r\nconst getActualScrollPosition = (...values: number[]): number =>\r\n values.reduce((current, value) => {\r\n return Math.abs(value) > Math.abs(current) ? value : current;\r\n }, 0);\r\n\r\nexport const useElementScrollObserver = (\r\n target: HTMLElement | null | undefined,\r\n): TargetMetrics => {\r\n const [metrics, setMetrics] = useState<TargetMetrics>({\r\n x: EMPTY_AXIS_METRICS,\r\n y: EMPTY_AXIS_METRICS,\r\n });\r\n\r\n const rafRef = useRef<number | null>(null);\r\n const ready = useRefReady(target);\r\n\r\n useEffect(() => {\r\n const targetElement = target;\r\n\r\n if (!targetElement) {\r\n //eslint-disable-next-line\r\n setMetrics({\r\n x: EMPTY_AXIS_METRICS,\r\n y: EMPTY_AXIS_METRICS,\r\n });\r\n\r\n return;\r\n }\r\n\r\n const pageScroll = isPageScrollTarget(targetElement);\r\n\r\n const measure = () => {\r\n let nextX: AxisMetrics;\r\n let nextY: AxisMetrics;\r\n\r\n if (pageScroll) {\r\n const root = document.documentElement;\r\n const body = document.body;\r\n const scrollingElement =\r\n document.scrollingElement as HTMLElement | null;\r\n\r\n const scrollWidth = Math.max(\r\n root.scrollWidth,\r\n body.scrollWidth,\r\n scrollingElement?.scrollWidth ?? 0,\r\n targetElement.scrollWidth,\r\n );\r\n\r\n const scrollHeight = Math.max(\r\n root.scrollHeight,\r\n body.scrollHeight,\r\n scrollingElement?.scrollHeight ?? 0,\r\n targetElement.scrollHeight,\r\n );\r\n\r\n const clientWidth =\r\n window.visualViewport?.width ?? window.innerWidth;\r\n\r\n const clientHeight =\r\n window.visualViewport?.height ?? window.innerHeight;\r\n\r\n /*\r\n * Важно: не читаем только window.scrollY.\r\n * body может быть самостоятельным overflow-контейнером.\r\n */\r\n const scrollLeft = getActualScrollPosition(\r\n window.scrollX,\r\n root.scrollLeft,\r\n body.scrollLeft,\r\n scrollingElement?.scrollLeft ?? 0,\r\n targetElement.scrollLeft,\r\n );\r\n\r\n const scrollTop = getActualScrollPosition(\r\n window.scrollY,\r\n root.scrollTop,\r\n body.scrollTop,\r\n scrollingElement?.scrollTop ?? 0,\r\n targetElement.scrollTop,\r\n );\r\n\r\n nextX = {\r\n scrollSize: scrollWidth,\r\n clientSize: clientWidth,\r\n scrollPos: scrollLeft,\r\n canScroll: scrollWidth - clientWidth > 1,\r\n };\r\n\r\n nextY = {\r\n scrollSize: scrollHeight,\r\n clientSize: clientHeight,\r\n scrollPos: scrollTop,\r\n canScroll: scrollHeight - clientHeight > 1,\r\n };\r\n } else {\r\n nextX = {\r\n scrollSize: targetElement.scrollWidth,\r\n clientSize: targetElement.clientWidth,\r\n scrollPos: targetElement.scrollLeft,\r\n canScroll:\r\n targetElement.scrollWidth - targetElement.clientWidth >\r\n 1,\r\n };\r\n\r\n nextY = {\r\n scrollSize: targetElement.scrollHeight,\r\n clientSize: targetElement.clientHeight,\r\n scrollPos: targetElement.scrollTop,\r\n canScroll:\r\n targetElement.scrollHeight -\r\n targetElement.clientHeight >\r\n 1,\r\n };\r\n }\r\n\r\n setMetrics((previous) => {\r\n const sameX = isSameAxisMetrics(previous.x, nextX);\r\n const sameY = isSameAxisMetrics(previous.y, nextY);\r\n\r\n if (sameX && sameY) {\r\n return previous;\r\n }\r\n\r\n return {\r\n x: nextX,\r\n y: nextY,\r\n };\r\n });\r\n };\r\n\r\n const scheduleMeasure = () => {\r\n if (rafRef.current !== null) return;\r\n\r\n rafRef.current = requestAnimationFrame(() => {\r\n rafRef.current = null;\r\n measure();\r\n });\r\n };\r\n\r\n measure();\r\n\r\n const resizeObserver = new ResizeObserver(scheduleMeasure);\r\n\r\n if (pageScroll) {\r\n resizeObserver.observe(document.documentElement);\r\n resizeObserver.observe(document.body);\r\n\r\n if (\r\n targetElement !== document.documentElement &&\r\n targetElement !== document.body\r\n ) {\r\n resizeObserver.observe(targetElement);\r\n }\r\n } else {\r\n resizeObserver.observe(targetElement);\r\n\r\n Array.from(targetElement.children).forEach((child) => {\r\n resizeObserver.observe(child);\r\n });\r\n }\r\n\r\n const mutationRoot = pageScroll\r\n ? document.documentElement\r\n : targetElement;\r\n\r\n const mutationObserver = new MutationObserver((mutations) => {\r\n for (const mutation of mutations) {\r\n if (mutation.type !== \"childList\") continue;\r\n\r\n mutation.addedNodes.forEach((node) => {\r\n if (!(node instanceof Element)) return;\r\n\r\n try {\r\n resizeObserver.observe(node);\r\n } catch {}\r\n });\r\n }\r\n\r\n scheduleMeasure();\r\n });\r\n\r\n mutationObserver.observe(mutationRoot, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [\"style\", \"class\", \"hidden\"],\r\n });\r\n\r\n window.addEventListener(\"scroll\", scheduleMeasure, {\r\n capture: true,\r\n passive: true,\r\n });\r\n\r\n targetElement.addEventListener(\"scroll\", scheduleMeasure, {\r\n passive: true,\r\n });\r\n\r\n window.addEventListener(\"resize\", scheduleMeasure);\r\n\r\n window.visualViewport?.addEventListener(\"resize\", scheduleMeasure);\r\n\r\n window.visualViewport?.addEventListener(\"scroll\", scheduleMeasure);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n mutationObserver.disconnect();\r\n\r\n window.removeEventListener(\"scroll\", scheduleMeasure, true);\r\n\r\n targetElement.removeEventListener(\"scroll\", scheduleMeasure);\r\n\r\n window.removeEventListener(\"resize\", scheduleMeasure);\r\n\r\n window.visualViewport?.removeEventListener(\r\n \"resize\",\r\n scheduleMeasure,\r\n );\r\n\r\n window.visualViewport?.removeEventListener(\r\n \"scroll\",\r\n scheduleMeasure,\r\n );\r\n\r\n if (rafRef.current !== null) {\r\n cancelAnimationFrame(rafRef.current);\r\n rafRef.current = null;\r\n }\r\n };\r\n }, [target, ready]);\r\n\r\n return metrics;\r\n};\r\n","import { useEffect, useState } from \"react\";\r\n\r\nexport const useRefReady = (target: HTMLElement | null | undefined): number => {\r\n const [tick, setTick] = useState(0);\r\n\r\n useEffect(() => {\r\n if (target) return;\r\n let rafId: number;\r\n const check = () => {\r\n if (target) {\r\n setTick((t) => t + 1);\r\n } else {\r\n rafId = requestAnimationFrame(check);\r\n }\r\n };\r\n rafId = requestAnimationFrame(check);\r\n return () => cancelAnimationFrame(rafId);\r\n }, [target]);\r\n\r\n return tick;\r\n};\r\n","import { useEffect } from \"react\";\r\nimport { DEFAULT_TRACK_THICKNESS } from \"src/utils/constants\";\r\nimport { computeReservedSpace, parsePxValue } from \"src/utils/helper\";\r\nimport { hideNativeScrollbar } from \"src/utils/native-scrollbar\";\r\n\r\nexport const useFuture = ({\r\n target,\r\n anchorRef,\r\n targetRef,\r\n setFindedTarget,\r\n mounted,\r\n config,\r\n showY,\r\n showX,\r\n superimposition,\r\n findedTarget,\r\n positionMode,\r\n coversAllScrollableAxes,\r\n nativeOnMobile,\r\n}: {\r\n target?: React.RefObject<HTMLElement | null> | null;\r\n anchorRef: React.RefObject<HTMLSpanElement | null>;\r\n targetRef: React.RefObject<HTMLElement | null>;\r\n setFindedTarget: React.Dispatch<React.SetStateAction<HTMLElement | null>>;\r\n mounted: boolean;\r\n config: any;\r\n showY: boolean;\r\n showX: boolean;\r\n superimposition: \"over\" | \"after\";\r\n findedTarget: HTMLElement | null;\r\n positionMode: \"before\" | \"after\";\r\n coversAllScrollableAxes: boolean;\r\n nativeOnMobile: boolean;\r\n}) => {\r\n useEffect(() => {\r\n if (!mounted) return;\r\n\r\n let rafId: number | null = null;\r\n\r\n const resolveTarget = () => {\r\n const nextTarget = target\r\n ? target.current\r\n : (anchorRef.current?.parentElement ?? null);\r\n\r\n if (nextTarget) {\r\n targetRef.current = nextTarget;\r\n setFindedTarget((previousTarget) =>\r\n previousTarget === nextTarget ? previousTarget : nextTarget,\r\n );\r\n return;\r\n }\r\n rafId = requestAnimationFrame(resolveTarget);\r\n };\r\n resolveTarget();\r\n\r\n return () => {\r\n if (rafId !== null) {\r\n cancelAnimationFrame(rafId);\r\n }\r\n };\r\n }, [mounted, target]);\r\n\r\n useEffect(() => {\r\n const el = targetRef.current;\r\n if (!el) return;\r\n\r\n const trackThickness =\r\n parsePxValue(config.scrollBar?.widthTrack) ??\r\n DEFAULT_TRACK_THICKNESS;\r\n const reservedY = showY\r\n ? computeReservedSpace(\r\n config.scrollBar?.boundaryOffset,\r\n trackThickness,\r\n superimposition,\r\n )\r\n : 0;\r\n const reservedX = showX\r\n ? computeReservedSpace(\r\n config.scrollBar?.boundaryOffset,\r\n trackThickness,\r\n superimposition,\r\n )\r\n : 0;\r\n const previousInlinePadding = {\r\n left: el.style.paddingLeft,\r\n right: el.style.paddingRight,\r\n top: el.style.paddingTop,\r\n bottom: el.style.paddingBottom,\r\n };\r\n const computedStyle = window.getComputedStyle(el);\r\n const basePadding = {\r\n left: Number.parseFloat(computedStyle.paddingLeft) || 0,\r\n right: Number.parseFloat(computedStyle.paddingRight) || 0,\r\n top: Number.parseFloat(computedStyle.paddingTop) || 0,\r\n bottom: Number.parseFloat(computedStyle.paddingBottom) || 0,\r\n };\r\n\r\n if (reservedY > 0) {\r\n if (positionMode === \"before\") {\r\n el.style.paddingLeft = `${basePadding.left + reservedY}px`;\r\n } else {\r\n el.style.paddingRight = `${basePadding.right + reservedY}px`;\r\n }\r\n }\r\n\r\n if (reservedX > 0) {\r\n if (positionMode === \"before\") {\r\n el.style.paddingTop = `${basePadding.top + reservedX}px`;\r\n } else {\r\n el.style.paddingBottom = `${basePadding.bottom + reservedX}px`;\r\n }\r\n }\r\n\r\n return () => {\r\n el.style.paddingLeft = previousInlinePadding.left;\r\n el.style.paddingRight = previousInlinePadding.right;\r\n el.style.paddingTop = previousInlinePadding.top;\r\n el.style.paddingBottom = previousInlinePadding.bottom;\r\n };\r\n }, [\r\n findedTarget,\r\n showX,\r\n showY,\r\n positionMode,\r\n superimposition,\r\n config.scrollBar?.boundaryOffset,\r\n config.scrollBar?.widthTrack,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!findedTarget) return;\r\n\r\n const mode = config.scrollBar?.hideNativeScrollbar ?? false;\r\n\r\n console.log(\"native scrollbar effect:\", {\r\n mode,\r\n nativeOnMobile,\r\n coversAllScrollableAxes,\r\n target: findedTarget,\r\n });\r\n\r\n if (mode === false || !coversAllScrollableAxes) {\r\n return;\r\n }\r\n\r\n return hideNativeScrollbar(findedTarget, mode, nativeOnMobile);\r\n }, [\r\n findedTarget,\r\n coversAllScrollableAxes,\r\n nativeOnMobile,\r\n config.scrollBar?.hideNativeScrollbar,\r\n ]);\r\n};\r\n","import { HideNativeScrollbarMode } from \"src/types/config/scrollbar.type\";\r\n\r\nconst STYLE_ID = \"scroll-to-future-native-scrollbar-styles\";\r\nconst ALWAYS_CLASS = \"scroll-to-future-hide-native-scrollbar\";\r\nconst FINE_POINTER_CLASS = \"scroll-to-future-hide-native-scrollbar-fine\";\r\n\r\nconst classCounters = new WeakMap<HTMLElement, Map<string, number>>();\r\n\r\nconst installStyles = (): void => {\r\n if (typeof document === \"undefined\") return;\r\n\r\n if (document.getElementById(STYLE_ID)) {\r\n return;\r\n }\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = STYLE_ID;\r\n\r\n style.textContent = `\r\n .${ALWAYS_CLASS} {\r\n scrollbar-width: none !important;\r\n -ms-overflow-style: none !important;\r\n }\r\n\r\n .${ALWAYS_CLASS}::-webkit-scrollbar {\r\n display: none !important;\r\n width: 0 !important;\r\n height: 0 !important;\r\n background: transparent !important;\r\n }\r\n\r\n @media (any-pointer: fine) {\r\n .${FINE_POINTER_CLASS} {\r\n scrollbar-width: none !important;\r\n -ms-overflow-style: none !important;\r\n }\r\n\r\n .${FINE_POINTER_CLASS}::-webkit-scrollbar {\r\n display: none !important;\r\n width: 0 !important;\r\n height: 0 !important;\r\n background: transparent !important;\r\n }\r\n }\r\n `;\r\n\r\n document.head.appendChild(style);\r\n};\r\n\r\nconst retainClass = (element: HTMLElement, className: string): (() => void) => {\r\n let elementCounters = classCounters.get(element);\r\n\r\n if (!elementCounters) {\r\n elementCounters = new Map();\r\n classCounters.set(element, elementCounters);\r\n }\r\n\r\n const currentCount = elementCounters.get(className) ?? 0;\r\n elementCounters.set(className, currentCount + 1);\r\n\r\n if (currentCount === 0) {\r\n element.classList.add(className);\r\n }\r\n\r\n return () => {\r\n const counters = classCounters.get(element);\r\n if (!counters) return;\r\n\r\n const count = counters.get(className) ?? 0;\r\n\r\n if (count <= 1) {\r\n counters.delete(className);\r\n element.classList.remove(className);\r\n } else {\r\n counters.set(className, count - 1);\r\n }\r\n\r\n if (counters.size === 0) {\r\n classCounters.delete(element);\r\n }\r\n };\r\n};\r\n\r\nconst isDocumentScrollTarget = (target: HTMLElement): boolean => {\r\n if (typeof document === \"undefined\") {\r\n return false;\r\n }\r\n\r\n return (\r\n target === document.body ||\r\n target === document.documentElement ||\r\n target === document.scrollingElement\r\n );\r\n};\r\n\r\nconst resolveStyleTargets = (target: HTMLElement): HTMLElement[] => {\r\n if (!isDocumentScrollTarget(target)) {\r\n return [target];\r\n }\r\n\r\n const targets = new Set<HTMLElement>();\r\n targets.add(document.documentElement);\r\n\r\n if (document.body) {\r\n targets.add(document.body);\r\n }\r\n\r\n const scrollingElement = document.scrollingElement;\r\n\r\n if (scrollingElement instanceof HTMLElement) {\r\n targets.add(scrollingElement);\r\n }\r\n\r\n return Array.from(targets);\r\n};\r\n\r\nconst isMobileInputDevice = (): boolean => {\r\n if (typeof window === \"undefined\" || typeof navigator === \"undefined\") {\r\n return false;\r\n }\r\n\r\n const coarsePointer = window.matchMedia(\"(pointer: coarse)\").matches;\r\n const cannotHover = window.matchMedia(\"(hover: none)\").matches;\r\n const hasTouch = navigator.maxTouchPoints > 0;\r\n\r\n return hasTouch && coarsePointer && cannotHover;\r\n};\r\n\r\nexport const hideNativeScrollbar = (\r\n target: HTMLElement,\r\n mode: HideNativeScrollbarMode,\r\n nativeOnMobile: boolean,\r\n): (() => void) => {\r\n if (\r\n typeof window === \"undefined\" ||\r\n typeof document === \"undefined\" ||\r\n mode === false\r\n ) {\r\n return () => {};\r\n }\r\n\r\n /*\r\n * На телефонах и планшетах оставляем нативный scrollbar,\r\n * если пользователь явно включил nativeOnMobile.\r\n */\r\n if (nativeOnMobile && isMobileInputDevice()) {\r\n return () => {};\r\n }\r\n\r\n installStyles();\r\n\r\n const className = mode === \"always\" ? ALWAYS_CLASS : FINE_POINTER_CLASS;\r\n\r\n const targets = resolveStyleTargets(target);\r\n\r\n const cleanups = targets.map((element) => retainClass(element, className));\r\n\r\n return () => {\r\n cleanups.forEach((cleanup) => {\r\n cleanup();\r\n });\r\n };\r\n};\r\n","\"use client\";\r\nimport { useEffect, useState } from \"react\";\r\n\r\nexport function useMounted() {\r\n const [mounted, setMounted] = useState(false);\r\n\r\n useEffect(() => {\r\n if (mounted) return;\r\n //eslint-disable-next-line\r\n setMounted(true);\r\n }, []);\r\n\r\n return mounted;\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { isPageScrollTarget } from \"../utils/helper\";\r\nimport { useRefReady } from \"./useRefReady\";\r\n\r\nexport interface TargetRect {\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nconst EMPTY_RECT: TargetRect = { top: 0, left: 0, width: 0, height: 0 };\r\n\r\nexport const useTargetRect = (\r\n target: HTMLElement | null | undefined,\r\n): TargetRect => {\r\n const [rect, setRect] = useState<TargetRect>(EMPTY_RECT);\r\n const ready = useRefReady(target);\r\n\r\n useEffect(() => {\r\n const el = target;\r\n if (!el) {\r\n //eslint-disable-next-line\r\n setRect(EMPTY_RECT);\r\n return;\r\n }\r\n\r\n let rafId: number | null = null;\r\n const pageScroll = isPageScrollTarget(el);\r\n\r\n const measure = () => {\r\n const r = pageScroll\r\n ? {\r\n top: 0,\r\n left: 0,\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n }\r\n : el.getBoundingClientRect();\r\n setRect((prev) => {\r\n if (\r\n prev.top === r.top &&\r\n prev.left === r.left &&\r\n prev.width === r.width &&\r\n prev.height === r.height\r\n ) {\r\n return prev;\r\n }\r\n return {\r\n top: r.top,\r\n left: r.left,\r\n width: r.width,\r\n height: r.height,\r\n };\r\n });\r\n };\r\n\r\n const scheduleMeasure = () => {\r\n if (rafId != null) return;\r\n rafId = requestAnimationFrame(() => {\r\n rafId = null;\r\n measure();\r\n });\r\n };\r\n\r\n measure();\r\n\r\n const resizeObserver = new ResizeObserver(scheduleMeasure);\r\n resizeObserver.observe(el);\r\n\r\n window.addEventListener(\"scroll\", scheduleMeasure, {\r\n capture: true,\r\n passive: true,\r\n });\r\n window.addEventListener(\"resize\", scheduleMeasure);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n window.removeEventListener(\"scroll\", scheduleMeasure, true);\r\n window.removeEventListener(\"resize\", scheduleMeasure);\r\n if (rafId != null) cancelAnimationFrame(rafId);\r\n };\r\n }, [target, ready]);\r\n\r\n return rect;\r\n};\r\n","import { ScrollToFutureThemeProps } from \"src/types/theme/scroll-to-future.theme.type\";\r\n\r\nexport const primary: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.15)\",\r\n borderRadius: \"8px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.25)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.35)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.35)\",\r\n borderRadius: \"8px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.55)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0s ease, transform 0s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.75)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const midnight: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(15, 23, 42, 0.55)\",\r\n borderRadius: \"8px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(30, 41, 59, 0.72)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(51, 65, 85, 0.88)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(148, 163, 184, 0.55)\",\r\n borderRadius: \"8px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(203, 213, 225, 0.78)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0s ease, transform 0s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(241, 245, 249, 0.96)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const neonCyan: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(6, 78, 89, 0.35)\",\r\n borderRadius: \"4px\",\r\n transition: \"background-color 0.25s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(8, 145, 178, 0.48)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(14, 116, 144, 0.68)\",\r\n transition: \"background-color 0.12s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(34, 211, 238, 0.58)\",\r\n borderRadius: \"3px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(103, 232, 249, 0.85)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(207, 250, 254, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const ocean: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(7, 89, 133, 0.22)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.35s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(3, 105, 161, 0.35)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(2, 132, 199, 0.5)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(14, 165, 233, 0.58)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(56, 189, 248, 0.82)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(186, 230, 253, 0.98)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const deepSea: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(2, 44, 55, 0.62)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(6, 78, 89, 0.78)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(14, 116, 144, 0.9)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(8, 145, 178, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(34, 211, 238, 0.82)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(165, 243, 252, 0.98)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const forest: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(20, 83, 45, 0.25)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(21, 128, 61, 0.38)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(22, 163, 74, 0.52)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(34, 197, 94, 0.55)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(74, 222, 128, 0.8)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(187, 247, 208, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const moss: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(54, 83, 20, 0.28)\",\r\n borderRadius: \"6px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(63, 98, 18, 0.42)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(77, 124, 15, 0.58)\",\r\n transition: \"background-color 0.14s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(132, 204, 22, 0.55)\",\r\n borderRadius: \"5px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(163, 230, 53, 0.8)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(217, 249, 157, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const lava: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(69, 10, 10, 0.45)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.22s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(127, 29, 29, 0.62)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(153, 27, 27, 0.78)\",\r\n transition: \"background-color 0.1s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(239, 68, 68, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(249, 115, 22, 0.88)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.16s ease, transform 0.16s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(253, 186, 116, 1)\",\r\n transform: \"scale(1.14)\",\r\n transition: \"background-color 0.1s ease, transform 0.1s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const ember: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(67, 20, 7, 0.32)\",\r\n borderRadius: \"5px\",\r\n transition: \"background-color 0.25s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(124, 45, 18, 0.48)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(154, 52, 18, 0.65)\",\r\n transition: \"background-color 0.12s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(234, 88, 12, 0.6)\",\r\n borderRadius: \"4px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(251, 146, 60, 0.86)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(254, 215, 170, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const gold: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(113, 63, 18, 0.25)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(161, 98, 7, 0.4)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(202, 138, 4, 0.55)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(234, 179, 8, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(250, 204, 21, 0.85)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.2s ease, transform 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(254, 240, 138, 1)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const roseQuartz: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(136, 19, 55, 0.18)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.32s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(190, 24, 93, 0.28)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(219, 39, 119, 0.4)\",\r\n transition: \"background-color 0.16s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(251, 113, 133, 0.58)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(244, 114, 182, 0.8)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(253, 164, 175, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const violet: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(76, 29, 149, 0.3)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.28s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(91, 33, 182, 0.45)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(109, 40, 217, 0.62)\",\r\n transition: \"background-color 0.14s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(139, 92, 246, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(167, 139, 250, 0.86)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(221, 214, 254, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const royal: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(30, 27, 75, 0.48)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(49, 46, 129, 0.65)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(67, 56, 202, 0.82)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(99, 102, 241, 0.65)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(165, 180, 252, 0.86)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.2s ease, transform 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(224, 231, 255, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const arctic: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(186, 230, 253, 0.22)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.35s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(125, 211, 252, 0.36)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(56, 189, 248, 0.5)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(224, 242, 254, 0.65)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(240, 249, 255, 0.88)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 1)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const glass: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.08)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.14)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.22)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.28)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.46)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.7)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const graphite: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(17, 24, 39, 0.52)\",\r\n borderRadius: \"3px\",\r\n transition: \"background-color 0.22s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(31, 41, 55, 0.7)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(55, 65, 81, 0.88)\",\r\n transition: \"background-color 0.1s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(107, 114, 128, 0.65)\",\r\n borderRadius: \"2px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(156, 163, 175, 0.82)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(229, 231, 235, 0.98)\",\r\n transform: \"scale(1.06)\",\r\n transition: \"background-color 0.1s ease, transform 0.1s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const terminal: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 20, 5, 0.72)\",\r\n borderRadius: \"0px\",\r\n transition: \"background-color 0.15s linear\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 40, 10, 0.82)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 65, 18, 0.92)\",\r\n transition: \"background-color 0.08s linear\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(34, 197, 94, 0.62)\",\r\n borderRadius: \"0px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(74, 222, 128, 0.85)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.1s linear\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(187, 247, 208, 1)\",\r\n transform: \"scale(1.06)\",\r\n transition: \"background-color 0.08s linear, transform 0.08s linear\",\r\n },\r\n },\r\n};\r\n\r\nexport const toxic: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(54, 83, 20, 0.48)\",\r\n borderRadius: \"2px\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(77, 124, 15, 0.65)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(101, 163, 13, 0.82)\",\r\n transition: \"background-color 0.1s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(163, 230, 53, 0.68)\",\r\n borderRadius: \"1px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(190, 242, 100, 0.9)\",\r\n transform: \"scale(1.04)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(236, 252, 203, 1)\",\r\n transform: \"scale(1.15)\",\r\n transition: \"background-color 0.08s ease, transform 0.08s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const candy: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(244, 114, 182, 0.18)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(192, 132, 252, 0.28)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(129, 140, 248, 0.42)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(251, 113, 133, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(244, 114, 182, 0.84)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(224, 231, 255, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const sand: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(120, 53, 15, 0.16)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.32s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(180, 83, 9, 0.25)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(217, 119, 6, 0.38)\",\r\n transition: \"background-color 0.16s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(217, 119, 6, 0.52)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(245, 158, 11, 0.75)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(253, 230, 138, 0.98)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const monoLight: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.08)\",\r\n borderRadius: \"6px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.14)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.22)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.32)\",\r\n borderRadius: \"6px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.52)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.75)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const monoDark: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.08)\",\r\n borderRadius: \"6px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.14)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.22)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.32)\",\r\n borderRadius: \"6px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.55)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.82)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n","import { PresetsThemeType } from \"../types/theme/preset.theme.type\";\r\nimport { ScrollToFutureThemeProps } from \"../types/theme/scroll-to-future.theme.type\";\r\nimport {\r\n arctic,\r\n candy,\r\n deepSea,\r\n ember,\r\n forest,\r\n glass,\r\n gold,\r\n graphite,\r\n lava,\r\n midnight,\r\n monoDark,\r\n monoLight,\r\n moss,\r\n neonCyan,\r\n ocean,\r\n primary,\r\n roseQuartz,\r\n royal,\r\n sand,\r\n terminal,\r\n toxic,\r\n violet,\r\n} from \"./collection.theme\";\r\n\r\nexport const presets: Record<PresetsThemeType, ScrollToFutureThemeProps> = {\r\n primary,\r\n midnight,\r\n neonCyan,\r\n ocean,\r\n deepSea,\r\n forest,\r\n moss,\r\n lava,\r\n ember,\r\n gold,\r\n roseQuartz,\r\n violet,\r\n royal,\r\n arctic,\r\n glass,\r\n graphite,\r\n terminal,\r\n toxic,\r\n candy,\r\n sand,\r\n monoLight,\r\n monoDark,\r\n};\r\n","import { ScrollToFutureInterface } from \"../types/scroll-to-future.type\";\r\n\r\nexport const defaultConfig: Required<Omit<ScrollToFutureInterface, \"target\">> =\r\n {\r\n scrollBar: {\r\n mode: \"both\",\r\n positionMode: \"after\",\r\n superimposition: \"after\",\r\n boundaryOffset: \"4px\",\r\n heightTrack: \"98%\",\r\n hideNativeScrollbar: \"always\",\r\n },\r\n\r\n thumb: {\r\n boundaryOffset: \"1px 1px\",\r\n heightTrack: \"auto\",\r\n },\r\n\r\n nativeOnMobile: true,\r\n\r\n selectTheme: \"primary\",\r\n optionsTheme: {},\r\n };\r\n","import { presets } from \"../themes/preset\";\r\nimport { ScrollToFutureScrollBar } from \"../types/config/scrollbar.type\";\r\nimport { ScrollToFutureThumb } from \"../types/config/thumb.type\";\r\nimport { ScrollToFutureInterface } from \"../types/scroll-to-future.type\";\r\nimport { ScrollToFutureThemeProps } from \"../types/theme/scroll-to-future.theme.type\";\r\nimport { defaultConfig } from \"./config\";\r\n\r\ntype Config = Omit<ScrollToFutureInterface, \"target\">;\r\n\r\nexport interface MergedConfig {\r\n scrollBar: ScrollToFutureScrollBar;\r\n thumb: ScrollToFutureThumb;\r\n optionsTheme: ScrollToFutureThemeProps;\r\n}\r\n\r\nexport const merge = (config: Config): MergedConfig => {\r\n const selectedTheme =\r\n presets[config.selectTheme ?? defaultConfig.selectTheme];\r\n\r\n return {\r\n scrollBar: {\r\n ...defaultConfig.scrollBar,\r\n ...config.scrollBar,\r\n },\r\n thumb: {\r\n ...defaultConfig.thumb,\r\n ...config.thumb,\r\n },\r\n optionsTheme: themeMerge(selectedTheme, config.optionsTheme),\r\n };\r\n};\r\n\r\ntype PlainObject = Record<string, unknown>;\r\n\r\nconst isPlainObject = (value: unknown): value is PlainObject =>\r\n typeof value === \"object\" && value !== null && !Array.isArray(value);\r\n\r\nexport const themeMerge = <T extends PlainObject>(\r\n base: T,\r\n override?: Partial<T>,\r\n): T => {\r\n if (!override) return base;\r\n\r\n const result: PlainObject = { ...base };\r\n\r\n for (const key of Object.keys(override) as Array<keyof T>) {\r\n const overrideValue = override[key];\r\n const baseValue = base[key];\r\n\r\n if (overrideValue === undefined) continue;\r\n\r\n if (isPlainObject(overrideValue) && isPlainObject(baseValue)) {\r\n result[key as string] = themeMerge(\r\n baseValue as PlainObject,\r\n overrideValue as PlainObject,\r\n );\r\n } else {\r\n result[key as string] = overrideValue;\r\n }\r\n }\r\n\r\n return result as T;\r\n};\r\n","export const shouldUseNativeScrollbar = (): boolean => {\r\n if (typeof window === \"undefined\") {\r\n return true;\r\n }\r\n\r\n const primaryPointerIsCoarse =\r\n window.matchMedia(\"(pointer: coarse)\").matches;\r\n\r\n const hasAnyFinePointer = window.matchMedia(\"(any-pointer: fine)\").matches;\r\n\r\n return primaryPointerIsCoarse && !hasAnyFinePointer;\r\n};\r\n","import { ScrollToFutureThemeProps } from \"../types/theme/scroll-to-future.theme.type\";\r\n\r\nexport const variables = (theme: ScrollToFutureThemeProps) => {\r\n const styles: Record<string, string> = {};\r\n\r\n for (const key in theme) {\r\n const k = key as keyof ScrollToFutureThemeProps;\r\n const statusTheme = theme[k];\r\n\r\n if (!statusTheme) continue;\r\n\r\n const type = k === \"scrollBar\" ? \"scrollbar\" : \"thumb\";\r\n\r\n for (const status in statusTheme) {\r\n const properties = statusTheme[status as keyof typeof statusTheme];\r\n\r\n if (!properties) continue;\r\n\r\n const statusPrefix = status === \"inactive\" ? \"\" : `-${status}`;\r\n\r\n for (const prop in properties) {\r\n const value = properties[prop as keyof typeof properties];\r\n\r\n if (value === undefined) continue;\r\n\r\n styles[`--${type}${statusPrefix}-${prop}`] = value as string;\r\n }\r\n }\r\n }\r\n\r\n return styles;\r\n};\r\n"],"mappings":"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","names":["useRef","useState","useEffect","useRef","useState","useState","useState","useRef","useEffect","useEffect","useEffect","useEffect","useState","useEffect","useState","useState","useEffect","jsx","useRef","useState"]}
|
|
1
|
+
{"version":3,"sources":["../src/ScrollToFuture.tsx","../src/components/Axios/ScrollAxis.tsx","../src/utils/constants.ts","../src/utils/helper.ts","../src/hooks/useElementScrollObserver.ts","../src/hooks/useRefReady.ts","../src/hooks/useFuture.ts","../src/utils/native-scrollbar.ts","../src/hooks/useMounted.tsx","../src/hooks/useTargetRect.ts","../src/themes/collection.theme.ts","../src/themes/preset.ts","../src/utils/config.ts","../src/utils/merge.ts","../src/utils/mobile-detect.ts","../src/utils/variables-css.ts"],"sourcesContent":["import { useRef, useState } from \"react\";\r\nimport { ScrollAxis } from \"./components/Axios/ScrollAxis\";\r\nimport \"./css/axis.css\";\r\nimport \"./css/scroll.css\";\r\n\r\nimport { useElementScrollObserver } from \"./hooks/useElementScrollObserver\";\r\nimport { useFuture } from \"./hooks/useFuture\";\r\nimport { useMounted } from \"./hooks/useMounted\";\r\nimport { useTargetRect } from \"./hooks/useTargetRect\";\r\nimport type { ScrollToFutureInterface } from \"./types/scroll-to-future.type\";\r\nimport { merge } from \"./utils/merge\";\r\nimport { shouldUseNativeScrollbar } from \"./utils/mobile-detect\";\r\n\r\nimport { variables } from \"./utils/variables-css\";\r\n\r\nexport const ScrollToFuture = ({\r\n target,\r\n scrollBar = {},\r\n thumb = {},\r\n selectTheme = \"primary\",\r\n optionsTheme = {},\r\n nativeOnMobile = true,\r\n}: ScrollToFutureInterface) => {\r\n const anchorRef = useRef<HTMLSpanElement | null>(null);\r\n const targetRef = useRef<HTMLElement | null>(null);\r\n const mounted = useMounted();\r\n const [findedTarget, setFindedTarget] = useState<HTMLElement | null>(null);\r\n\r\n const config = merge({ scrollBar, thumb, selectTheme, optionsTheme });\r\n const vars = variables(config.optionsTheme);\r\n const mode = config.scrollBar?.mode ?? \"both\";\r\n const positionMode = config.scrollBar?.positionMode ?? \"after\";\r\n const superimposition = config.scrollBar?.superimposition ?? \"over\";\r\n const nativeScrollOnMobile = shouldUseNativeScrollbar() && nativeOnMobile;\r\n\r\n const metrics = useElementScrollObserver(findedTarget);\r\n const rect = useTargetRect(findedTarget);\r\n const wantsY = mode === \"vertical\" || mode === \"both\";\r\n const wantsX = mode === \"horizontal\" || mode === \"both\";\r\n const showY = wantsY && metrics.y.canScroll;\r\n const showX = wantsX && metrics.x.canScroll;\r\n const coversAllScrollableAxes =\r\n (!metrics.x.canScroll || showX) && (!metrics.y.canScroll || showY);\r\n\r\n useFuture({\r\n target,\r\n anchorRef,\r\n targetRef,\r\n setFindedTarget,\r\n mounted,\r\n config,\r\n showY,\r\n showX,\r\n superimposition,\r\n findedTarget,\r\n positionMode,\r\n coversAllScrollableAxes,\r\n nativeOnMobile,\r\n });\r\n\r\n if (!mounted || nativeScrollOnMobile) {\r\n return null;\r\n }\r\n\r\n const canRenderOverlay =\r\n findedTarget !== null && rect.width > 0 && rect.height > 0;\r\n\r\n return (\r\n <>\r\n {!target && (\r\n <span\r\n ref={anchorRef}\r\n aria-hidden=\"true\"\r\n style={{ display: \"none\" }}\r\n />\r\n )}\r\n\r\n {canRenderOverlay && (\r\n <div\r\n className=\"scroll-to-future__overlay\"\r\n style={{\r\n top: rect.top,\r\n left: rect.left,\r\n width: rect.width,\r\n height: rect.height,\r\n }}\r\n >\r\n {showY && (\r\n <ScrollAxis\r\n vars={vars}\r\n axis=\"y\"\r\n target={findedTarget}\r\n metrics={metrics.y}\r\n scrollBar={config.scrollBar!}\r\n thumb={thumb}\r\n positionMode={positionMode}\r\n superimposition={superimposition}\r\n hasCrossAxis={showX}\r\n />\r\n )}\r\n\r\n {showX && (\r\n <ScrollAxis\r\n vars={vars}\r\n axis=\"x\"\r\n target={findedTarget}\r\n metrics={metrics.x}\r\n scrollBar={config.scrollBar!}\r\n thumb={thumb}\r\n positionMode={positionMode}\r\n superimposition={superimposition}\r\n hasCrossAxis={showY}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </>\r\n );\r\n};\r\n","import type React from \"react\";\r\nimport { useRef, useState } from \"react\";\r\nimport { Axis, AxisMetrics } from \"src/types/config/axis.type\";\r\nimport {\r\n PositionMode,\r\n ScrollToFutureScrollBar,\r\n Superimposition,\r\n} from \"src/types/config/scrollbar.type\";\r\nimport { ScrollToFutureThumb } from \"src/types/config/thumb.type\";\r\nimport { DEFAULT_TRACK_THICKNESS } from \"src/utils/constants\";\r\nimport {\r\n clamp,\r\n computeThumbPosition,\r\n computeThumbSize,\r\n fitInsetsWithinSize,\r\n isPageScrollTarget,\r\n parseBoundaryOffset,\r\n parsePxValue,\r\n resolveTrackLength,\r\n trackPositionToScroll,\r\n} from \"src/utils/helper\";\r\n\r\ninterface ScrollAxisProps {\r\n axis: Axis;\r\n target: HTMLElement | null;\r\n metrics: AxisMetrics;\r\n scrollBar: ScrollToFutureScrollBar;\r\n thumb: ScrollToFutureThumb;\r\n positionMode: PositionMode;\r\n superimposition: Superimposition;\r\n hasCrossAxis: boolean;\r\n vars: Record<string, string>;\r\n}\r\n\r\nexport const ScrollAxis = ({\r\n axis,\r\n target,\r\n metrics,\r\n scrollBar,\r\n thumb,\r\n positionMode,\r\n superimposition,\r\n hasCrossAxis,\r\n vars,\r\n}: ScrollAxisProps) => {\r\n const trackRef = useRef<HTMLDivElement>(null);\r\n //* REFS ====================================================================\r\n const dragState = useRef<{\r\n startPointer: number;\r\n startScroll: number;\r\n } | null>(null);\r\n //* REFS ====================================================================\r\n\r\n //* STATE ===================================================================\r\n const [isDragging, setIsDragging] = useState(false);\r\n //* STATE ===================================================================\r\n\r\n //* COMPUTED PROPERTIES =====================================================\r\n const requestedTrackThickness =\r\n parsePxValue(scrollBar.widthTrack) ?? DEFAULT_TRACK_THICKNESS;\r\n const trackThickness = Math.max(1, requestedTrackThickness);\r\n const trackBoundary = parseBoundaryOffset(scrollBar.boundaryOffset);\r\n const thumbBoundary = parseBoundaryOffset(thumb.boundaryOffset);\r\n const requestedCrossAxisOccupation =\r\n trackBoundary.start + trackThickness + trackBoundary.end;\r\n const maximumCrossAxisOccupation = Math.max(0, metrics.clientSize - 1);\r\n const crossAxisOccupation = hasCrossAxis\r\n ? clamp(requestedCrossAxisOccupation, 0, maximumCrossAxisOccupation)\r\n : 0;\r\n const availableMainStart =\r\n hasCrossAxis && positionMode === \"before\" ? crossAxisOccupation : 0;\r\n const availableMainSize = Math.max(\r\n 0,\r\n metrics.clientSize - crossAxisOccupation,\r\n );\r\n const trackCenter = availableMainStart + availableMainSize / 2;\r\n const requestedTrackLength = resolveTrackLength(\r\n scrollBar.heightTrack,\r\n metrics.clientSize,\r\n );\r\n const trackLength =\r\n availableMainSize > 0\r\n ? clamp(requestedTrackLength, 1, availableMainSize)\r\n : 0;\r\n const fittedThumbMainInsets = fitInsetsWithinSize(\r\n thumbBoundary.start,\r\n thumbBoundary.end,\r\n trackLength,\r\n 1,\r\n );\r\n const thumbMainStart = fittedThumbMainInsets.start;\r\n const innerTrackLength = fittedThumbMainInsets.innerSize;\r\n const requestedThumbCrossSize =\r\n trackThickness - thumbBoundary.start - thumbBoundary.end;\r\n const thumbCrossSize = clamp(requestedThumbCrossSize, 1, trackThickness);\r\n const thumbSize = computeThumbSize(\r\n innerTrackLength,\r\n metrics,\r\n thumb.heightTrack,\r\n );\r\n const thumbPositionInsideTrack = computeThumbPosition(\r\n innerTrackLength,\r\n thumbSize,\r\n metrics,\r\n );\r\n const thumbPosition = thumbMainStart + thumbPositionInsideTrack;\r\n const maxScroll = Math.max(0, metrics.scrollSize - metrics.clientSize);\r\n const maxThumbTravel = Math.max(0, innerTrackLength - thumbSize);\r\n //* COMPUTED PROPERTIES =====================================================\r\n\r\n //* METHODS =================================================================\r\n const setScrollPosition = (value: number) => {\r\n const targetElement = target;\r\n\r\n if (!targetElement) return;\r\n\r\n const nextValue = clamp(value, 0, Math.max(0, maxScroll));\r\n\r\n if (!isPageScrollTarget(targetElement)) {\r\n if (axis === \"x\") {\r\n //eslint-disable-next-line\r\n targetElement.scrollLeft = nextValue;\r\n } else {\r\n targetElement.scrollTop = nextValue;\r\n }\r\n\r\n return;\r\n }\r\n\r\n const targetStyle = window.getComputedStyle(targetElement);\r\n\r\n const overflowValue =\r\n axis === \"x\" ? targetStyle.overflowX : targetStyle.overflowY;\r\n\r\n const targetCanScroll =\r\n axis === \"x\"\r\n ? targetElement.scrollWidth - targetElement.clientWidth > 1\r\n : targetElement.scrollHeight - targetElement.clientHeight > 1;\r\n\r\n const targetOwnsScroll =\r\n targetCanScroll && /^(auto|scroll|overlay)$/.test(overflowValue);\r\n\r\n if (targetOwnsScroll) {\r\n if (axis === \"x\") {\r\n targetElement.scrollLeft = nextValue;\r\n } else {\r\n targetElement.scrollTop = nextValue;\r\n }\r\n\r\n return;\r\n }\r\n\r\n window.scrollTo({\r\n left: axis === \"x\" ? nextValue : window.scrollX,\r\n top: axis === \"y\" ? nextValue : window.scrollY,\r\n behavior: \"auto\",\r\n });\r\n };\r\n\r\n const handleThumbPointerDown = (\r\n event: React.PointerEvent<HTMLDivElement>,\r\n ) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n\r\n dragState.current = {\r\n startPointer: axis === \"x\" ? event.clientX : event.clientY,\r\n startScroll: metrics.scrollPos,\r\n };\r\n\r\n setIsDragging(true);\r\n\r\n event.currentTarget.setPointerCapture(event.pointerId);\r\n };\r\n\r\n const handleThumbPointerMove = (\r\n event: React.PointerEvent<HTMLDivElement>,\r\n ) => {\r\n const currentDragState = dragState.current;\r\n\r\n if (!currentDragState) return;\r\n if (maxScroll <= 0 || maxThumbTravel <= 0) return;\r\n\r\n const pointerPosition = axis === \"x\" ? event.clientX : event.clientY;\r\n\r\n const pointerDelta = pointerPosition - currentDragState.startPointer;\r\n\r\n const scrollDelta = (pointerDelta / maxThumbTravel) * maxScroll;\r\n\r\n setScrollPosition(currentDragState.startScroll + scrollDelta);\r\n };\r\n\r\n const stopDrag = (event: React.PointerEvent<HTMLDivElement>) => {\r\n if (!dragState.current) return;\r\n\r\n dragState.current = null;\r\n setIsDragging(false);\r\n\r\n try {\r\n event.currentTarget.releasePointerCapture(event.pointerId);\r\n } catch {}\r\n };\r\n\r\n const handleTrackPointerDown = (\r\n event: React.PointerEvent<HTMLDivElement>,\r\n ) => {\r\n if (event.target !== event.currentTarget) {\r\n return;\r\n }\r\n\r\n const trackElement = trackRef.current;\r\n\r\n if (!trackElement) return;\r\n if (maxThumbTravel <= 0) return;\r\n\r\n const rect = trackElement.getBoundingClientRect();\r\n\r\n const clickPosition =\r\n axis === \"x\" ? event.clientX - rect.left : event.clientY - rect.top;\r\n\r\n const clickInsideInnerTrack = clickPosition - thumbMainStart;\r\n\r\n const targetThumbStart = clamp(\r\n clickInsideInnerTrack - thumbSize / 2,\r\n 0,\r\n maxThumbTravel,\r\n );\r\n\r\n const nextScroll = trackPositionToScroll(\r\n targetThumbStart,\r\n innerTrackLength,\r\n thumbSize,\r\n metrics,\r\n );\r\n\r\n setScrollPosition(nextScroll);\r\n };\r\n //* METHODS =================================================================\r\n\r\n //* CHECKS ==================================================================\r\n if (\r\n !metrics.canScroll ||\r\n metrics.clientSize <= 0 ||\r\n trackLength < 1 ||\r\n innerTrackLength < 1 ||\r\n thumbSize < 1\r\n ) {\r\n return null;\r\n }\r\n //* CHECKS ==================================================================\r\n\r\n //* STYLES ==================================================================\r\n const trackStyle: React.CSSProperties =\r\n axis === \"y\"\r\n ? {\r\n position: \"absolute\",\r\n top: trackCenter,\r\n transform: \"translateY(-50%)\",\r\n\r\n width: trackThickness,\r\n height: trackLength,\r\n\r\n ...(positionMode === \"before\"\r\n ? {\r\n left: trackBoundary.start,\r\n }\r\n : {\r\n right: trackBoundary.end,\r\n }),\r\n\r\n pointerEvents: \"auto\",\r\n }\r\n : {\r\n position: \"absolute\",\r\n left: trackCenter,\r\n transform: \"translateX(-50%)\",\r\n width: trackLength,\r\n height: trackThickness,\r\n\r\n ...(positionMode === \"before\"\r\n ? {\r\n top: trackBoundary.start,\r\n }\r\n : {\r\n bottom: trackBoundary.end,\r\n }),\r\n\r\n pointerEvents: \"auto\",\r\n };\r\n\r\n const thumbStyle: React.CSSProperties =\r\n axis === \"y\"\r\n ? {\r\n top: thumbPosition,\r\n height: thumbSize,\r\n\r\n //* horizontal center\r\n left: \"50%\",\r\n width: thumbCrossSize,\r\n transform: \"translateX(-50%)\",\r\n }\r\n : {\r\n left: thumbPosition,\r\n width: thumbSize,\r\n\r\n //* vertical center\r\n top: \"50%\",\r\n height: thumbCrossSize,\r\n transform: \"translateY(-50%)\",\r\n };\r\n //* STYLES ==================================================================\r\n\r\n //* JSX =====================================================================\r\n return (\r\n <div\r\n ref={trackRef}\r\n className=\"scroll-to-future__track\"\r\n style={{ ...trackStyle, ...vars }}\r\n //eslint-disable-next-line\r\n onPointerDown={handleTrackPointerDown}\r\n data-axis={axis}\r\n data-superimposition={superimposition}\r\n >\r\n <div\r\n className={`scroll-to-future__thumb ${\r\n isDragging ? \"scroll-to-future__thumb--dragging\" : \"\"\r\n }`.trim()}\r\n style={thumbStyle}\r\n onPointerDown={handleThumbPointerDown}\r\n //eslint-disable-next-line\r\n onPointerMove={handleThumbPointerMove}\r\n onPointerUp={stopDrag}\r\n onPointerCancel={stopDrag}\r\n />\r\n </div>\r\n );\r\n //* JSX =====================================================================\r\n};\r\n","import { AxisMetrics } from \"../types/config/axis.type\";\r\n\r\nexport const MIN_THUMB_SIZE = 24;\r\nexport const DEFAULT_TRACK_THICKNESS = 8;\r\nexport const MAX_THUMB_RATIO = 0.8;\r\n\r\nexport const EMPTY_AXIS_METRICS: AxisMetrics = {\r\n scrollSize: 0,\r\n clientSize: 0,\r\n scrollPos: 0,\r\n canScroll: false,\r\n};\r\n","import {\r\n Axis,\r\n AxisInsets,\r\n AxisMetrics,\r\n ParsedOffset,\r\n} from \"../types/config/axis.type\";\r\nimport { BoundaryOffset } from \"../types/config/general.type\";\r\nimport { HeightTrackType } from \"../types/config/scrollbar.type\";\r\nimport { ScrollToFutureThumb } from \"../types/config/thumb.type\";\r\nimport { MAX_THUMB_RATIO, MIN_THUMB_SIZE } from \"./constants\";\r\n\r\nexport const clamp = (value: number, min: number, max: number): number =>\r\n Math.min(Math.max(value, min), Math.max(min, max));\r\n\r\nexport const parsePxValue = (value?: string | null): number | null => {\r\n if (!value) return null;\r\n const match = /^(-?\\d+(?:\\.\\d+)?)px$/.exec(value.trim());\r\n return match ? Number(match[1]) : null;\r\n};\r\n\r\nexport const parseBoundaryOffset = (\r\n value?: BoundaryOffset | null,\r\n): ParsedOffset => {\r\n if (!value) {\r\n return {\r\n start: 0,\r\n end: 0,\r\n };\r\n }\r\n\r\n const parts = value.trim().split(/\\s+/);\r\n\r\n const start = Math.max(0, parsePxValue(parts[0]) ?? 0);\r\n\r\n const end =\r\n parts.length > 1 ? Math.max(0, parsePxValue(parts[1]) ?? 0) : start;\r\n\r\n return {\r\n start,\r\n end,\r\n };\r\n};\r\n\r\nexport const fitInsetsWithinSize = (\r\n start: number,\r\n end: number,\r\n size: number,\r\n minInnerSize = 1,\r\n): {\r\n start: number;\r\n end: number;\r\n innerSize: number;\r\n} => {\r\n const safeSize = Math.max(0, size);\r\n\r\n if (safeSize <= 0) {\r\n return {\r\n start: 0,\r\n end: 0,\r\n innerSize: 0,\r\n };\r\n }\r\n\r\n const actualMinInnerSize = Math.min(Math.max(0, minInnerSize), safeSize);\r\n const safeStart = Math.max(0, start);\r\n const safeEnd = Math.max(0, end);\r\n const requestedInsetsSize = safeStart + safeEnd;\r\n const maximumInsetsSize = safeSize - actualMinInnerSize;\r\n\r\n if (requestedInsetsSize <= maximumInsetsSize) {\r\n return {\r\n start: safeStart,\r\n end: safeEnd,\r\n innerSize: safeSize - safeStart - safeEnd,\r\n };\r\n }\r\n\r\n if (requestedInsetsSize <= 0) {\r\n return {\r\n start: 0,\r\n end: 0,\r\n innerSize: safeSize,\r\n };\r\n }\r\n\r\n const scale = maximumInsetsSize / requestedInsetsSize;\r\n const fittedStart = safeStart * scale;\r\n const fittedEnd = safeEnd * scale;\r\n\r\n return {\r\n start: fittedStart,\r\n end: fittedEnd,\r\n innerSize: Math.max(\r\n actualMinInnerSize,\r\n safeSize - fittedStart - fittedEnd,\r\n ),\r\n };\r\n};\r\n\r\nexport const resolveAxisInsets = (\r\n value: BoundaryOffset | undefined,\r\n axis: Axis,\r\n): AxisInsets => {\r\n const { start, end } = parseBoundaryOffset(value);\r\n\r\n if (axis === \"y\") {\r\n return {\r\n cross: start,\r\n main: end,\r\n };\r\n }\r\n\r\n return {\r\n cross: start,\r\n main: end,\r\n };\r\n};\r\n\r\nexport const resolveTrackLength = (\r\n value: HeightTrackType | undefined,\r\n containerSize: number,\r\n): number => {\r\n if (!value) return containerSize;\r\n\r\n const px = parsePxValue(value);\r\n if (px !== null) return px;\r\n\r\n const percentMatch = /^(-?\\d+(?:\\.\\d+)?)%$/.exec(value);\r\n if (percentMatch) return (Number(percentMatch[1]) / 100) * containerSize;\r\n\r\n const vhMatch = /^(-?\\d+(?:\\.\\d+)?)vh$/.exec(value);\r\n if (vhMatch) {\r\n const vh =\r\n typeof window !== \"undefined\" ? window.innerHeight : containerSize;\r\n return (Number(vhMatch[1]) / 100) * vh;\r\n }\r\n\r\n const dvhMatch = /^(-?\\d+(?:\\.\\d+)?)d(s)?vh$/.exec(value);\r\n if (dvhMatch) {\r\n const dvh =\r\n typeof window !== \"undefined\"\r\n ? (window.visualViewport?.height ?? window.innerHeight)\r\n : containerSize;\r\n return (Number(dvhMatch[1]) / 100) * dvh;\r\n }\r\n\r\n return containerSize;\r\n};\r\n\r\nexport const computeThumbSize = (\r\n trackLength: number,\r\n metrics: AxisMetrics,\r\n thumbHeightTrack: ScrollToFutureThumb[\"heightTrack\"],\r\n): number => {\r\n if (trackLength <= 0) return 0;\r\n\r\n const minSize = Math.min(MIN_THUMB_SIZE, trackLength);\r\n const maxSize = Math.min(\r\n trackLength,\r\n Math.max(minSize, trackLength * MAX_THUMB_RATIO),\r\n );\r\n\r\n if (!thumbHeightTrack || thumbHeightTrack === \"auto\") {\r\n const ratio =\r\n metrics.scrollSize > 0\r\n ? metrics.clientSize / metrics.scrollSize\r\n : 1;\r\n\r\n const autoSize = trackLength * clamp(ratio, 0, 1);\r\n return clamp(autoSize, minSize, maxSize);\r\n }\r\n\r\n const px = parsePxValue(thumbHeightTrack);\r\n\r\n if (px !== null) {\r\n return clamp(px, minSize, maxSize);\r\n }\r\n\r\n const percentMatch = /^(-?\\d+(?:\\.\\d+)?)%$/.exec(thumbHeightTrack.trim());\r\n\r\n if (percentMatch) {\r\n const size = (Number(percentMatch[1]) / 100) * trackLength;\r\n\r\n return clamp(size, minSize, maxSize);\r\n }\r\n\r\n return maxSize;\r\n};\r\n\r\nexport const computeThumbPosition = (\r\n trackLength: number,\r\n thumbSize: number,\r\n metrics: AxisMetrics,\r\n): number => {\r\n const maxScroll = metrics.scrollSize - metrics.clientSize;\r\n const maxThumbTravel = trackLength - thumbSize;\r\n if (maxScroll <= 0 || maxThumbTravel <= 0) return 0;\r\n const ratio = clamp(metrics.scrollPos / maxScroll, 0, 1);\r\n return ratio * maxThumbTravel;\r\n};\r\n\r\nexport const trackPositionToScroll = (\r\n trackPos: number,\r\n trackLength: number,\r\n thumbSize: number,\r\n metrics: AxisMetrics,\r\n): number => {\r\n const maxScroll = metrics.scrollSize - metrics.clientSize;\r\n const maxThumbTravel = trackLength - thumbSize;\r\n if (maxScroll <= 0 || maxThumbTravel <= 0) return 0;\r\n const ratio = clamp(trackPos / maxThumbTravel, 0, 1);\r\n return ratio * maxScroll;\r\n};\r\n\r\nexport const computeReservedSpace = (\r\n boundaryOffset: BoundaryOffset | undefined,\r\n trackThicknessPx: number,\r\n superimposition: \"over\" | \"after\" | undefined,\r\n): number => {\r\n if (superimposition !== \"after\") {\r\n return 0;\r\n }\r\n\r\n const { start, end } = parseBoundaryOffset(boundaryOffset);\r\n\r\n return start + trackThicknessPx + end;\r\n};\r\n\r\nexport const resolveScrollingElement = (el: HTMLElement): HTMLElement => {\r\n if (\r\n typeof document !== \"undefined\" &&\r\n (el === document.body || el === document.documentElement)\r\n ) {\r\n return (\r\n (document.scrollingElement as HTMLElement | null) ??\r\n document.documentElement\r\n );\r\n }\r\n return el;\r\n};\r\n\r\nexport const isPageScrollTarget = (el: HTMLElement): boolean =>\r\n typeof document !== \"undefined\" &&\r\n (el === document.body || el === document.documentElement);\r\n","import { useEffect, useRef, useState } from \"react\";\r\nimport { isPageScrollTarget } from \"../utils/helper\";\r\n\r\nimport { AxisMetrics, TargetMetrics } from \"../types/config/axis.type\";\r\nimport { EMPTY_AXIS_METRICS } from \"../utils/constants\";\r\nimport { useRefReady } from \"./useRefReady\";\r\n\r\nconst isSameAxisMetrics = (previous: AxisMetrics, next: AxisMetrics): boolean =>\r\n previous.scrollSize === next.scrollSize &&\r\n previous.clientSize === next.clientSize &&\r\n previous.scrollPos === next.scrollPos &&\r\n previous.canScroll === next.canScroll;\r\n\r\nconst getActualScrollPosition = (...values: number[]): number =>\r\n values.reduce((current, value) => {\r\n return Math.abs(value) > Math.abs(current) ? value : current;\r\n }, 0);\r\n\r\nexport const useElementScrollObserver = (\r\n target: HTMLElement | null | undefined,\r\n): TargetMetrics => {\r\n const [metrics, setMetrics] = useState<TargetMetrics>({\r\n x: EMPTY_AXIS_METRICS,\r\n y: EMPTY_AXIS_METRICS,\r\n });\r\n\r\n const rafRef = useRef<number | null>(null);\r\n const ready = useRefReady(target);\r\n\r\n useEffect(() => {\r\n const targetElement = target;\r\n\r\n if (!targetElement) {\r\n //eslint-disable-next-line\r\n setMetrics({\r\n x: EMPTY_AXIS_METRICS,\r\n y: EMPTY_AXIS_METRICS,\r\n });\r\n\r\n return;\r\n }\r\n\r\n const pageScroll = isPageScrollTarget(targetElement);\r\n\r\n const measure = () => {\r\n let nextX: AxisMetrics;\r\n let nextY: AxisMetrics;\r\n\r\n if (pageScroll) {\r\n const root = document.documentElement;\r\n const body = document.body;\r\n const scrollingElement =\r\n document.scrollingElement as HTMLElement | null;\r\n\r\n const scrollWidth = Math.max(\r\n root.scrollWidth,\r\n body.scrollWidth,\r\n scrollingElement?.scrollWidth ?? 0,\r\n targetElement.scrollWidth,\r\n );\r\n\r\n const scrollHeight = Math.max(\r\n root.scrollHeight,\r\n body.scrollHeight,\r\n scrollingElement?.scrollHeight ?? 0,\r\n targetElement.scrollHeight,\r\n );\r\n\r\n const clientWidth =\r\n window.visualViewport?.width ?? window.innerWidth;\r\n\r\n const clientHeight =\r\n window.visualViewport?.height ?? window.innerHeight;\r\n\r\n /*\r\n * Важно: не читаем только window.scrollY.\r\n * body может быть самостоятельным overflow-контейнером.\r\n */\r\n const scrollLeft = getActualScrollPosition(\r\n window.scrollX,\r\n root.scrollLeft,\r\n body.scrollLeft,\r\n scrollingElement?.scrollLeft ?? 0,\r\n targetElement.scrollLeft,\r\n );\r\n\r\n const scrollTop = getActualScrollPosition(\r\n window.scrollY,\r\n root.scrollTop,\r\n body.scrollTop,\r\n scrollingElement?.scrollTop ?? 0,\r\n targetElement.scrollTop,\r\n );\r\n\r\n nextX = {\r\n scrollSize: scrollWidth,\r\n clientSize: clientWidth,\r\n scrollPos: scrollLeft,\r\n canScroll: scrollWidth - clientWidth > 1,\r\n };\r\n\r\n nextY = {\r\n scrollSize: scrollHeight,\r\n clientSize: clientHeight,\r\n scrollPos: scrollTop,\r\n canScroll: scrollHeight - clientHeight > 1,\r\n };\r\n } else {\r\n nextX = {\r\n scrollSize: targetElement.scrollWidth,\r\n clientSize: targetElement.clientWidth,\r\n scrollPos: targetElement.scrollLeft,\r\n canScroll:\r\n targetElement.scrollWidth - targetElement.clientWidth >\r\n 1,\r\n };\r\n\r\n nextY = {\r\n scrollSize: targetElement.scrollHeight,\r\n clientSize: targetElement.clientHeight,\r\n scrollPos: targetElement.scrollTop,\r\n canScroll:\r\n targetElement.scrollHeight -\r\n targetElement.clientHeight >\r\n 1,\r\n };\r\n }\r\n\r\n setMetrics((previous) => {\r\n const sameX = isSameAxisMetrics(previous.x, nextX);\r\n const sameY = isSameAxisMetrics(previous.y, nextY);\r\n\r\n if (sameX && sameY) {\r\n return previous;\r\n }\r\n\r\n return {\r\n x: nextX,\r\n y: nextY,\r\n };\r\n });\r\n };\r\n\r\n const scheduleMeasure = () => {\r\n if (rafRef.current !== null) return;\r\n\r\n rafRef.current = requestAnimationFrame(() => {\r\n rafRef.current = null;\r\n measure();\r\n });\r\n };\r\n\r\n measure();\r\n\r\n const resizeObserver = new ResizeObserver(scheduleMeasure);\r\n\r\n if (pageScroll) {\r\n resizeObserver.observe(document.documentElement);\r\n resizeObserver.observe(document.body);\r\n\r\n if (\r\n targetElement !== document.documentElement &&\r\n targetElement !== document.body\r\n ) {\r\n resizeObserver.observe(targetElement);\r\n }\r\n } else {\r\n resizeObserver.observe(targetElement);\r\n\r\n Array.from(targetElement.children).forEach((child) => {\r\n resizeObserver.observe(child);\r\n });\r\n }\r\n\r\n const mutationRoot = pageScroll\r\n ? document.documentElement\r\n : targetElement;\r\n\r\n const mutationObserver = new MutationObserver((mutations) => {\r\n for (const mutation of mutations) {\r\n if (mutation.type !== \"childList\") continue;\r\n\r\n mutation.addedNodes.forEach((node) => {\r\n if (!(node instanceof Element)) return;\r\n\r\n try {\r\n resizeObserver.observe(node);\r\n } catch {}\r\n });\r\n }\r\n\r\n scheduleMeasure();\r\n });\r\n\r\n mutationObserver.observe(mutationRoot, {\r\n childList: true,\r\n subtree: true,\r\n attributes: true,\r\n attributeFilter: [\"style\", \"class\", \"hidden\"],\r\n });\r\n\r\n window.addEventListener(\"scroll\", scheduleMeasure, {\r\n capture: true,\r\n passive: true,\r\n });\r\n\r\n targetElement.addEventListener(\"scroll\", scheduleMeasure, {\r\n passive: true,\r\n });\r\n\r\n window.addEventListener(\"resize\", scheduleMeasure);\r\n\r\n window.visualViewport?.addEventListener(\"resize\", scheduleMeasure);\r\n\r\n window.visualViewport?.addEventListener(\"scroll\", scheduleMeasure);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n mutationObserver.disconnect();\r\n\r\n window.removeEventListener(\"scroll\", scheduleMeasure, true);\r\n\r\n targetElement.removeEventListener(\"scroll\", scheduleMeasure);\r\n\r\n window.removeEventListener(\"resize\", scheduleMeasure);\r\n\r\n window.visualViewport?.removeEventListener(\r\n \"resize\",\r\n scheduleMeasure,\r\n );\r\n\r\n window.visualViewport?.removeEventListener(\r\n \"scroll\",\r\n scheduleMeasure,\r\n );\r\n\r\n if (rafRef.current !== null) {\r\n cancelAnimationFrame(rafRef.current);\r\n rafRef.current = null;\r\n }\r\n };\r\n }, [target, ready]);\r\n\r\n return metrics;\r\n};\r\n","import { useEffect, useState } from \"react\";\r\n\r\nexport const useRefReady = (target: HTMLElement | null | undefined): number => {\r\n const [tick, setTick] = useState(0);\r\n\r\n useEffect(() => {\r\n if (target) return;\r\n let rafId: number;\r\n const check = () => {\r\n if (target) {\r\n setTick((t) => t + 1);\r\n } else {\r\n rafId = requestAnimationFrame(check);\r\n }\r\n };\r\n rafId = requestAnimationFrame(check);\r\n return () => cancelAnimationFrame(rafId);\r\n }, [target]);\r\n\r\n return tick;\r\n};\r\n","import { useEffect } from \"react\";\r\nimport { DEFAULT_TRACK_THICKNESS } from \"src/utils/constants\";\r\nimport { computeReservedSpace, parsePxValue } from \"src/utils/helper\";\r\nimport { hideNativeScrollbar } from \"src/utils/native-scrollbar\";\r\n\r\nexport const useFuture = ({\r\n target,\r\n anchorRef,\r\n targetRef,\r\n setFindedTarget,\r\n mounted,\r\n config,\r\n showY,\r\n showX,\r\n superimposition,\r\n findedTarget,\r\n positionMode,\r\n coversAllScrollableAxes,\r\n nativeOnMobile,\r\n}: {\r\n target?: React.RefObject<HTMLElement | null> | null;\r\n anchorRef: React.RefObject<HTMLSpanElement | null>;\r\n targetRef: React.RefObject<HTMLElement | null>;\r\n setFindedTarget: React.Dispatch<React.SetStateAction<HTMLElement | null>>;\r\n mounted: boolean;\r\n config: any;\r\n showY: boolean;\r\n showX: boolean;\r\n superimposition: \"over\" | \"after\";\r\n findedTarget: HTMLElement | null;\r\n positionMode: \"before\" | \"after\";\r\n coversAllScrollableAxes: boolean;\r\n nativeOnMobile: boolean;\r\n}) => {\r\n useEffect(() => {\r\n if (!mounted) return;\r\n\r\n let rafId: number | null = null;\r\n\r\n const resolveTarget = () => {\r\n const nextTarget = target\r\n ? target.current\r\n : (anchorRef.current?.parentElement ?? null);\r\n\r\n if (nextTarget) {\r\n targetRef.current = nextTarget;\r\n setFindedTarget((previousTarget) =>\r\n previousTarget === nextTarget ? previousTarget : nextTarget,\r\n );\r\n return;\r\n }\r\n rafId = requestAnimationFrame(resolveTarget);\r\n };\r\n resolveTarget();\r\n\r\n return () => {\r\n if (rafId !== null) {\r\n cancelAnimationFrame(rafId);\r\n }\r\n };\r\n }, [mounted, target]);\r\n\r\n useEffect(() => {\r\n const el = targetRef.current;\r\n if (!el) return;\r\n\r\n const trackThickness =\r\n parsePxValue(config.scrollBar?.widthTrack) ??\r\n DEFAULT_TRACK_THICKNESS;\r\n const reservedY = showY\r\n ? computeReservedSpace(\r\n config.scrollBar?.boundaryOffset,\r\n trackThickness,\r\n superimposition,\r\n )\r\n : 0;\r\n const reservedX = showX\r\n ? computeReservedSpace(\r\n config.scrollBar?.boundaryOffset,\r\n trackThickness,\r\n superimposition,\r\n )\r\n : 0;\r\n const previousInlinePadding = {\r\n left: el.style.paddingLeft,\r\n right: el.style.paddingRight,\r\n top: el.style.paddingTop,\r\n bottom: el.style.paddingBottom,\r\n };\r\n const computedStyle = window.getComputedStyle(el);\r\n const basePadding = {\r\n left: Number.parseFloat(computedStyle.paddingLeft) || 0,\r\n right: Number.parseFloat(computedStyle.paddingRight) || 0,\r\n top: Number.parseFloat(computedStyle.paddingTop) || 0,\r\n bottom: Number.parseFloat(computedStyle.paddingBottom) || 0,\r\n };\r\n\r\n if (reservedY > 0) {\r\n if (positionMode === \"before\") {\r\n el.style.paddingLeft = `${basePadding.left + reservedY}px`;\r\n } else {\r\n el.style.paddingRight = `${basePadding.right + reservedY}px`;\r\n }\r\n }\r\n\r\n if (reservedX > 0) {\r\n if (positionMode === \"before\") {\r\n el.style.paddingTop = `${basePadding.top + reservedX}px`;\r\n } else {\r\n el.style.paddingBottom = `${basePadding.bottom + reservedX}px`;\r\n }\r\n }\r\n\r\n return () => {\r\n el.style.paddingLeft = previousInlinePadding.left;\r\n el.style.paddingRight = previousInlinePadding.right;\r\n el.style.paddingTop = previousInlinePadding.top;\r\n el.style.paddingBottom = previousInlinePadding.bottom;\r\n };\r\n }, [\r\n findedTarget,\r\n showX,\r\n showY,\r\n positionMode,\r\n superimposition,\r\n config.scrollBar?.boundaryOffset,\r\n config.scrollBar?.widthTrack,\r\n ]);\r\n\r\n useEffect(() => {\r\n if (!findedTarget) return;\r\n const mode = config.scrollBar?.hideNativeScrollbar ?? false;\r\n if (mode === false || !coversAllScrollableAxes) {\r\n return;\r\n }\r\n\r\n return hideNativeScrollbar(findedTarget, mode, nativeOnMobile);\r\n }, [\r\n findedTarget,\r\n coversAllScrollableAxes,\r\n nativeOnMobile,\r\n config.scrollBar?.hideNativeScrollbar,\r\n ]);\r\n};\r\n","import { HideNativeScrollbarMode } from \"src/types/config/scrollbar.type\";\r\n\r\nconst STYLE_ID = \"scroll-to-future-native-scrollbar-styles\";\r\nconst ALWAYS_CLASS = \"scroll-to-future-hide-native-scrollbar\";\r\nconst FINE_POINTER_CLASS = \"scroll-to-future-hide-native-scrollbar-fine\";\r\n\r\nconst classCounters = new WeakMap<HTMLElement, Map<string, number>>();\r\n\r\nconst installStyles = (): void => {\r\n if (typeof document === \"undefined\") return;\r\n\r\n if (document.getElementById(STYLE_ID)) {\r\n return;\r\n }\r\n\r\n const style = document.createElement(\"style\");\r\n style.id = STYLE_ID;\r\n\r\n style.textContent = `\r\n .${ALWAYS_CLASS} {\r\n scrollbar-width: none !important;\r\n -ms-overflow-style: none !important;\r\n }\r\n\r\n .${ALWAYS_CLASS}::-webkit-scrollbar {\r\n display: none !important;\r\n width: 0 !important;\r\n height: 0 !important;\r\n background: transparent !important;\r\n }\r\n\r\n @media (any-pointer: fine) {\r\n .${FINE_POINTER_CLASS} {\r\n scrollbar-width: none !important;\r\n -ms-overflow-style: none !important;\r\n }\r\n\r\n .${FINE_POINTER_CLASS}::-webkit-scrollbar {\r\n display: none !important;\r\n width: 0 !important;\r\n height: 0 !important;\r\n background: transparent !important;\r\n }\r\n }\r\n `;\r\n\r\n document.head.appendChild(style);\r\n};\r\n\r\nconst retainClass = (element: HTMLElement, className: string): (() => void) => {\r\n let elementCounters = classCounters.get(element);\r\n\r\n if (!elementCounters) {\r\n elementCounters = new Map();\r\n classCounters.set(element, elementCounters);\r\n }\r\n\r\n const currentCount = elementCounters.get(className) ?? 0;\r\n elementCounters.set(className, currentCount + 1);\r\n\r\n if (currentCount === 0) {\r\n element.classList.add(className);\r\n }\r\n\r\n return () => {\r\n const counters = classCounters.get(element);\r\n if (!counters) return;\r\n\r\n const count = counters.get(className) ?? 0;\r\n\r\n if (count <= 1) {\r\n counters.delete(className);\r\n element.classList.remove(className);\r\n } else {\r\n counters.set(className, count - 1);\r\n }\r\n\r\n if (counters.size === 0) {\r\n classCounters.delete(element);\r\n }\r\n };\r\n};\r\n\r\nconst isDocumentScrollTarget = (target: HTMLElement): boolean => {\r\n if (typeof document === \"undefined\") {\r\n return false;\r\n }\r\n\r\n return (\r\n target === document.body ||\r\n target === document.documentElement ||\r\n target === document.scrollingElement\r\n );\r\n};\r\n\r\nconst resolveStyleTargets = (target: HTMLElement): HTMLElement[] => {\r\n if (!isDocumentScrollTarget(target)) {\r\n return [target];\r\n }\r\n\r\n const targets = new Set<HTMLElement>();\r\n targets.add(document.documentElement);\r\n\r\n if (document.body) {\r\n targets.add(document.body);\r\n }\r\n\r\n const scrollingElement = document.scrollingElement;\r\n\r\n if (scrollingElement instanceof HTMLElement) {\r\n targets.add(scrollingElement);\r\n }\r\n\r\n return Array.from(targets);\r\n};\r\n\r\nconst isMobileInputDevice = (): boolean => {\r\n if (typeof window === \"undefined\" || typeof navigator === \"undefined\") {\r\n return false;\r\n }\r\n\r\n const coarsePointer = window.matchMedia(\"(pointer: coarse)\").matches;\r\n const cannotHover = window.matchMedia(\"(hover: none)\").matches;\r\n const hasTouch = navigator.maxTouchPoints > 0;\r\n\r\n return hasTouch && coarsePointer && cannotHover;\r\n};\r\n\r\nexport const hideNativeScrollbar = (\r\n target: HTMLElement,\r\n mode: HideNativeScrollbarMode,\r\n nativeOnMobile: boolean,\r\n): (() => void) => {\r\n if (\r\n typeof window === \"undefined\" ||\r\n typeof document === \"undefined\" ||\r\n mode === false\r\n ) {\r\n return () => {};\r\n }\r\n\r\n /*\r\n * На телефонах и планшетах оставляем нативный scrollbar,\r\n * если пользователь явно включил nativeOnMobile.\r\n */\r\n if (nativeOnMobile && isMobileInputDevice()) {\r\n return () => {};\r\n }\r\n\r\n installStyles();\r\n\r\n const className = mode === \"always\" ? ALWAYS_CLASS : FINE_POINTER_CLASS;\r\n\r\n const targets = resolveStyleTargets(target);\r\n\r\n const cleanups = targets.map((element) => retainClass(element, className));\r\n\r\n return () => {\r\n cleanups.forEach((cleanup) => {\r\n cleanup();\r\n });\r\n };\r\n};\r\n","\"use client\";\r\nimport { useEffect, useState } from \"react\";\r\n\r\nexport function useMounted() {\r\n const [mounted, setMounted] = useState(false);\r\n\r\n useEffect(() => {\r\n if (mounted) return;\r\n //eslint-disable-next-line\r\n setMounted(true);\r\n }, []);\r\n\r\n return mounted;\r\n}\r\n","import { useEffect, useState } from \"react\";\r\nimport { isPageScrollTarget } from \"../utils/helper\";\r\nimport { useRefReady } from \"./useRefReady\";\r\n\r\nexport interface TargetRect {\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\nconst EMPTY_RECT: TargetRect = { top: 0, left: 0, width: 0, height: 0 };\r\n\r\nexport const useTargetRect = (\r\n target: HTMLElement | null | undefined,\r\n): TargetRect => {\r\n const [rect, setRect] = useState<TargetRect>(EMPTY_RECT);\r\n const ready = useRefReady(target);\r\n\r\n useEffect(() => {\r\n const el = target;\r\n if (!el) {\r\n //eslint-disable-next-line\r\n setRect(EMPTY_RECT);\r\n return;\r\n }\r\n\r\n let rafId: number | null = null;\r\n const pageScroll = isPageScrollTarget(el);\r\n\r\n const measure = () => {\r\n const r = pageScroll\r\n ? {\r\n top: 0,\r\n left: 0,\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n }\r\n : el.getBoundingClientRect();\r\n setRect((prev) => {\r\n if (\r\n prev.top === r.top &&\r\n prev.left === r.left &&\r\n prev.width === r.width &&\r\n prev.height === r.height\r\n ) {\r\n return prev;\r\n }\r\n return {\r\n top: r.top,\r\n left: r.left,\r\n width: r.width,\r\n height: r.height,\r\n };\r\n });\r\n };\r\n\r\n const scheduleMeasure = () => {\r\n if (rafId != null) return;\r\n rafId = requestAnimationFrame(() => {\r\n rafId = null;\r\n measure();\r\n });\r\n };\r\n\r\n measure();\r\n\r\n const resizeObserver = new ResizeObserver(scheduleMeasure);\r\n resizeObserver.observe(el);\r\n\r\n window.addEventListener(\"scroll\", scheduleMeasure, {\r\n capture: true,\r\n passive: true,\r\n });\r\n window.addEventListener(\"resize\", scheduleMeasure);\r\n\r\n return () => {\r\n resizeObserver.disconnect();\r\n window.removeEventListener(\"scroll\", scheduleMeasure, true);\r\n window.removeEventListener(\"resize\", scheduleMeasure);\r\n if (rafId != null) cancelAnimationFrame(rafId);\r\n };\r\n }, [target, ready]);\r\n\r\n return rect;\r\n};\r\n","import { ScrollToFutureThemeProps } from \"src/types/theme/scroll-to-future.theme.type\";\r\n\r\nexport const primary: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.15)\",\r\n borderRadius: \"8px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.25)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.35)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.35)\",\r\n borderRadius: \"8px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.55)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0s ease, transform 0s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.75)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const midnight: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(15, 23, 42, 0.55)\",\r\n borderRadius: \"8px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(30, 41, 59, 0.72)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(51, 65, 85, 0.88)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(148, 163, 184, 0.55)\",\r\n borderRadius: \"8px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(203, 213, 225, 0.78)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0s ease, transform 0s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(241, 245, 249, 0.96)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const neonCyan: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(6, 78, 89, 0.35)\",\r\n borderRadius: \"4px\",\r\n transition: \"background-color 0.25s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(8, 145, 178, 0.48)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(14, 116, 144, 0.68)\",\r\n transition: \"background-color 0.12s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(34, 211, 238, 0.58)\",\r\n borderRadius: \"3px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(103, 232, 249, 0.85)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(207, 250, 254, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const ocean: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(7, 89, 133, 0.22)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.35s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(3, 105, 161, 0.35)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(2, 132, 199, 0.5)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(14, 165, 233, 0.58)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(56, 189, 248, 0.82)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(186, 230, 253, 0.98)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const deepSea: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(2, 44, 55, 0.62)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(6, 78, 89, 0.78)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(14, 116, 144, 0.9)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(8, 145, 178, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(34, 211, 238, 0.82)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(165, 243, 252, 0.98)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const forest: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(20, 83, 45, 0.25)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(21, 128, 61, 0.38)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(22, 163, 74, 0.52)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(34, 197, 94, 0.55)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(74, 222, 128, 0.8)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(187, 247, 208, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const moss: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(54, 83, 20, 0.28)\",\r\n borderRadius: \"6px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(63, 98, 18, 0.42)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(77, 124, 15, 0.58)\",\r\n transition: \"background-color 0.14s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(132, 204, 22, 0.55)\",\r\n borderRadius: \"5px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(163, 230, 53, 0.8)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(217, 249, 157, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const lava: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(69, 10, 10, 0.45)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.22s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(127, 29, 29, 0.62)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(153, 27, 27, 0.78)\",\r\n transition: \"background-color 0.1s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(239, 68, 68, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(249, 115, 22, 0.88)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.16s ease, transform 0.16s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(253, 186, 116, 1)\",\r\n transform: \"scale(1.14)\",\r\n transition: \"background-color 0.1s ease, transform 0.1s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const ember: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(67, 20, 7, 0.32)\",\r\n borderRadius: \"5px\",\r\n transition: \"background-color 0.25s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(124, 45, 18, 0.48)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(154, 52, 18, 0.65)\",\r\n transition: \"background-color 0.12s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(234, 88, 12, 0.6)\",\r\n borderRadius: \"4px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(251, 146, 60, 0.86)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(254, 215, 170, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const gold: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(113, 63, 18, 0.25)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(161, 98, 7, 0.4)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(202, 138, 4, 0.55)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(234, 179, 8, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(250, 204, 21, 0.85)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.2s ease, transform 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(254, 240, 138, 1)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const roseQuartz: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(136, 19, 55, 0.18)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.32s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(190, 24, 93, 0.28)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(219, 39, 119, 0.4)\",\r\n transition: \"background-color 0.16s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(251, 113, 133, 0.58)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(244, 114, 182, 0.8)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(253, 164, 175, 0.98)\",\r\n transform: \"scale(1.1)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const violet: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(76, 29, 149, 0.3)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.28s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(91, 33, 182, 0.45)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(109, 40, 217, 0.62)\",\r\n transition: \"background-color 0.14s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(139, 92, 246, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(167, 139, 250, 0.86)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(221, 214, 254, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const royal: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(30, 27, 75, 0.48)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(49, 46, 129, 0.65)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(67, 56, 202, 0.82)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(99, 102, 241, 0.65)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(165, 180, 252, 0.86)\",\r\n transform: \"scale(1.02)\",\r\n transition: \"background-color 0.2s ease, transform 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(224, 231, 255, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const arctic: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(186, 230, 253, 0.22)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.35s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(125, 211, 252, 0.36)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(56, 189, 248, 0.5)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(224, 242, 254, 0.65)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(240, 249, 255, 0.88)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 1)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const glass: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.08)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.14)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.22)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.28)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.46)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.7)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const graphite: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(17, 24, 39, 0.52)\",\r\n borderRadius: \"3px\",\r\n transition: \"background-color 0.22s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(31, 41, 55, 0.7)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(55, 65, 81, 0.88)\",\r\n transition: \"background-color 0.1s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(107, 114, 128, 0.65)\",\r\n borderRadius: \"2px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(156, 163, 175, 0.82)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(229, 231, 235, 0.98)\",\r\n transform: \"scale(1.06)\",\r\n transition: \"background-color 0.1s ease, transform 0.1s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const terminal: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 20, 5, 0.72)\",\r\n borderRadius: \"0px\",\r\n transition: \"background-color 0.15s linear\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 40, 10, 0.82)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 65, 18, 0.92)\",\r\n transition: \"background-color 0.08s linear\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(34, 197, 94, 0.62)\",\r\n borderRadius: \"0px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(74, 222, 128, 0.85)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.1s linear\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(187, 247, 208, 1)\",\r\n transform: \"scale(1.06)\",\r\n transition: \"background-color 0.08s linear, transform 0.08s linear\",\r\n },\r\n },\r\n};\r\n\r\nexport const toxic: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(54, 83, 20, 0.48)\",\r\n borderRadius: \"2px\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(77, 124, 15, 0.65)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(101, 163, 13, 0.82)\",\r\n transition: \"background-color 0.1s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(163, 230, 53, 0.68)\",\r\n borderRadius: \"1px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(190, 242, 100, 0.9)\",\r\n transform: \"scale(1.04)\",\r\n transition: \"background-color 0.14s ease, transform 0.14s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(236, 252, 203, 1)\",\r\n transform: \"scale(1.15)\",\r\n transition: \"background-color 0.08s ease, transform 0.08s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const candy: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(244, 114, 182, 0.18)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(192, 132, 252, 0.28)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(129, 140, 248, 0.42)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(251, 113, 133, 0.62)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(244, 114, 182, 0.84)\",\r\n transform: \"scale(1.03)\",\r\n transition: \"background-color 0.18s ease, transform 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(224, 231, 255, 1)\",\r\n transform: \"scale(1.12)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const sand: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(120, 53, 15, 0.16)\",\r\n borderRadius: \"999px\",\r\n transition: \"background-color 0.32s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(180, 83, 9, 0.25)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(217, 119, 6, 0.38)\",\r\n transition: \"background-color 0.16s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(217, 119, 6, 0.52)\",\r\n borderRadius: \"999px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(245, 158, 11, 0.75)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.2s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(253, 230, 138, 0.98)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.15s ease, transform 0.15s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const monoLight: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.08)\",\r\n borderRadius: \"6px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.14)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.22)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.32)\",\r\n borderRadius: \"6px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.52)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(0, 0, 0, 0.75)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n\r\nexport const monoDark: ScrollToFutureThemeProps = {\r\n scrollBar: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.08)\",\r\n borderRadius: \"6px\",\r\n transition: \"background-color 0.3s ease\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.14)\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.22)\",\r\n transition: \"background-color 0.15s ease\",\r\n },\r\n },\r\n\r\n thumb: {\r\n inactive: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.32)\",\r\n borderRadius: \"6px\",\r\n },\r\n hover: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.55)\",\r\n transform: \"scale(1)\",\r\n transition: \"background-color 0.18s ease\",\r\n },\r\n active: {\r\n backgroundColor: \"rgba(255, 255, 255, 0.82)\",\r\n transform: \"scale(1.08)\",\r\n transition: \"background-color 0.12s ease, transform 0.12s ease\",\r\n },\r\n },\r\n};\r\n","import { PresetsThemeType } from \"../types/theme/preset.theme.type\";\r\nimport { ScrollToFutureThemeProps } from \"../types/theme/scroll-to-future.theme.type\";\r\nimport {\r\n arctic,\r\n candy,\r\n deepSea,\r\n ember,\r\n forest,\r\n glass,\r\n gold,\r\n graphite,\r\n lava,\r\n midnight,\r\n monoDark,\r\n monoLight,\r\n moss,\r\n neonCyan,\r\n ocean,\r\n primary,\r\n roseQuartz,\r\n royal,\r\n sand,\r\n terminal,\r\n toxic,\r\n violet,\r\n} from \"./collection.theme\";\r\n\r\nexport const presets: Record<PresetsThemeType, ScrollToFutureThemeProps> = {\r\n primary,\r\n midnight,\r\n neonCyan,\r\n ocean,\r\n deepSea,\r\n forest,\r\n moss,\r\n lava,\r\n ember,\r\n gold,\r\n roseQuartz,\r\n violet,\r\n royal,\r\n arctic,\r\n glass,\r\n graphite,\r\n terminal,\r\n toxic,\r\n candy,\r\n sand,\r\n monoLight,\r\n monoDark,\r\n};\r\n","import { ScrollToFutureInterface } from \"../types/scroll-to-future.type\";\r\n\r\nexport const defaultConfig: Required<Omit<ScrollToFutureInterface, \"target\">> =\r\n {\r\n scrollBar: {\r\n mode: \"both\",\r\n positionMode: \"after\",\r\n superimposition: \"after\",\r\n boundaryOffset: \"4px\",\r\n heightTrack: \"98%\",\r\n hideNativeScrollbar: \"always\",\r\n },\r\n\r\n thumb: {\r\n boundaryOffset: \"1px 1px\",\r\n heightTrack: \"auto\",\r\n },\r\n\r\n nativeOnMobile: true,\r\n\r\n selectTheme: \"primary\",\r\n optionsTheme: {},\r\n };\r\n","import { presets } from \"../themes/preset\";\r\nimport { ScrollToFutureScrollBar } from \"../types/config/scrollbar.type\";\r\nimport { ScrollToFutureThumb } from \"../types/config/thumb.type\";\r\nimport { ScrollToFutureInterface } from \"../types/scroll-to-future.type\";\r\nimport { ScrollToFutureThemeProps } from \"../types/theme/scroll-to-future.theme.type\";\r\nimport { defaultConfig } from \"./config\";\r\n\r\ntype Config = Omit<ScrollToFutureInterface, \"target\">;\r\n\r\nexport interface MergedConfig {\r\n scrollBar: ScrollToFutureScrollBar;\r\n thumb: ScrollToFutureThumb;\r\n optionsTheme: ScrollToFutureThemeProps;\r\n}\r\n\r\nexport const merge = (config: Config): MergedConfig => {\r\n const selectedTheme =\r\n presets[config.selectTheme ?? defaultConfig.selectTheme];\r\n\r\n return {\r\n scrollBar: {\r\n ...defaultConfig.scrollBar,\r\n ...config.scrollBar,\r\n },\r\n thumb: {\r\n ...defaultConfig.thumb,\r\n ...config.thumb,\r\n },\r\n optionsTheme: themeMerge(selectedTheme, config.optionsTheme),\r\n };\r\n};\r\n\r\ntype PlainObject = Record<string, unknown>;\r\n\r\nconst isPlainObject = (value: unknown): value is PlainObject =>\r\n typeof value === \"object\" && value !== null && !Array.isArray(value);\r\n\r\nexport const themeMerge = <T extends PlainObject>(\r\n base: T,\r\n override?: Partial<T>,\r\n): T => {\r\n if (!override) return base;\r\n\r\n const result: PlainObject = { ...base };\r\n\r\n for (const key of Object.keys(override) as Array<keyof T>) {\r\n const overrideValue = override[key];\r\n const baseValue = base[key];\r\n\r\n if (overrideValue === undefined) continue;\r\n\r\n if (isPlainObject(overrideValue) && isPlainObject(baseValue)) {\r\n result[key as string] = themeMerge(\r\n baseValue as PlainObject,\r\n overrideValue as PlainObject,\r\n );\r\n } else {\r\n result[key as string] = overrideValue;\r\n }\r\n }\r\n\r\n return result as T;\r\n};\r\n","export const shouldUseNativeScrollbar = (): boolean => {\r\n if (typeof window === \"undefined\") {\r\n return true;\r\n }\r\n\r\n const primaryPointerIsCoarse =\r\n window.matchMedia(\"(pointer: coarse)\").matches;\r\n\r\n const hasAnyFinePointer = window.matchMedia(\"(any-pointer: fine)\").matches;\r\n\r\n return primaryPointerIsCoarse && !hasAnyFinePointer;\r\n};\r\n","import { ScrollToFutureThemeProps } from \"../types/theme/scroll-to-future.theme.type\";\r\n\r\nexport const variables = (theme: ScrollToFutureThemeProps) => {\r\n const styles: Record<string, string> = {};\r\n\r\n for (const key in theme) {\r\n const k = key as keyof ScrollToFutureThemeProps;\r\n const statusTheme = theme[k];\r\n\r\n if (!statusTheme) continue;\r\n\r\n const type = k === \"scrollBar\" ? \"scrollbar\" : \"thumb\";\r\n\r\n for (const status in statusTheme) {\r\n const properties = statusTheme[status as keyof typeof statusTheme];\r\n\r\n if (!properties) continue;\r\n\r\n const statusPrefix = status === \"inactive\" ? \"\" : `-${status}`;\r\n\r\n for (const prop in properties) {\r\n const value = properties[prop as keyof typeof properties];\r\n\r\n if (value === undefined) continue;\r\n\r\n styles[`--${type}${statusPrefix}-${prop}`] = value as string;\r\n }\r\n }\r\n }\r\n\r\n return styles;\r\n};\r\n"],"mappings":"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","names":["useRef","useState","useEffect","useRef","useState","useState","useState","useRef","useEffect","useEffect","useEffect","useEffect","useState","useEffect","useState","useState","useEffect","jsx","useRef","useState"]}
|