Files
v10/dist/dev/ui/slider/slider-preview.js

38 lines
1.3 KiB
JavaScript

"use client";
import { renderElement } from "../../utils/use-render.js";
import { useSliderContext } from "./context.js";
import { getSliderPreviewStyle } from "@videojs/core/dom";
import { forwardRef, useEffect, useRef, useState } from "react";
//#region src/ui/slider/slider-preview.tsx
/** Positioning container for preview content that tracks the pointer along the slider. */
const SliderPreview = forwardRef(function SliderPreview(componentProps, forwardedRef) {
const { render, className, style, overflow = "clamp", ...elementProps } = componentProps;
const context = useSliderContext();
const { state } = context;
const measureRef = useRef(null);
const [width, setWidth] = useState(0);
useEffect(() => {
const el = measureRef.current;
if (!el) return;
const observer = new ResizeObserver(([entry]) => {
setWidth(entry.contentRect.width);
});
observer.observe(el);
return () => observer.disconnect();
}, []);
const positionStyle = getSliderPreviewStyle(width, overflow);
return renderElement("div", {
render,
className,
style
}, {
state,
stateAttrMap: context.stateAttrMap,
ref: [forwardedRef, measureRef],
props: [{ style: positionStyle }, elementProps]
});
});
//#endregion
export { SliderPreview };
//# sourceMappingURL=slider-preview.js.map