@scrolia/vanilla
Version:
A headless scrollbar component
40 lines (38 loc) • 1.29 kB
JavaScript
import { useScrollCore } from "../../contexts/scrollcore.mjs";
import { useComponentPropsSetter } from "../../hooks/props.mjs";
import { useThumbYHandler } from "../../hooks/thumb.mjs";
import * as Atom from "atomico";
import { jsx } from "atomico/jsx-runtime";
const _ThumbY = () => {
const elRef = Atom.useHost();
const { options: { disabled }, y: { setHvThumb, scrollbarLength, scrollbarOffset } } = useScrollCore();
Atom.useEffect(() => {
setHvThumb(true);
});
const { onPointerDown } = useThumbYHandler();
Atom.useEffect(() => {
elRef.current.addEventListener("pointerdown", onPointerDown);
return () => {
elRef.current.removeEventListener("pointerdown", onPointerDown);
};
}, [onPointerDown]);
useComponentPropsSetter("thumbY");
Atom.useEffect(() => {
if (disabled) return void 0;
const length = Number.isNaN(scrollbarLength) ? 0 : scrollbarLength;
const offset = Number.isNaN(scrollbarOffset) ? 0 : scrollbarOffset;
elRef.current.style.height = `${length}px`;
elRef.current.style.top = `${offset}px`;
}, [
disabled,
scrollbarLength,
scrollbarOffset
]);
return /* @__PURE__ */ jsx("host", {
shadowDom: true,
children: /* @__PURE__ */ jsx("slot", {})
});
};
const ThumbY = Atom.c(_ThumbY);
export { ThumbY };
//# sourceMappingURL=y.mjs.map