@scrolia/vanilla
Version:
A headless scrollbar component
97 lines (95 loc) • 3.18 kB
JavaScript
const require_rolldown_runtime = require('../../_virtual/rolldown_runtime.js');
const require_contexts_scrollcore = require('../../contexts/scrollcore.js');
const require_attribute = require('../../functions/attribute.js');
const require_functions_props_get = require('../../functions/props/get.js');
const require_functions_props_set = require('../../functions/props/set.js');
const atomico = require_rolldown_runtime.__toESM(require("atomico"));
const atomico_jsx_runtime = require_rolldown_runtime.__toESM(require("atomico/jsx-runtime"));
function _Provider(props) {
const elRef = atomico.useHost();
const [disabled] = atomico.useState(props.disabled ?? false);
const [page] = atomico.useState(props.page ?? false);
const [plugins] = atomico.useState(props.plugins ?? []);
const contentRef = atomico.useRef();
const [hvTrackX, setHvTrackX] = atomico.useState(false);
const [hvThumbX, setHvThumbX] = atomico.useState(false);
const [hvTrackY, setHvTrackY] = atomico.useState(false);
const [hvThumbY, setHvThumbY] = atomico.useState(false);
const totalX = atomico.useRef(0);
const totalY = atomico.useRef(0);
const viewX = atomico.useRef(0);
const viewY = atomico.useRef(0);
const viewOffsetX = atomico.useRef(0);
const viewOffsetY = atomico.useRef(0);
const [scrollbarLengthX, setScrollbarLengthX] = atomico.useState(0);
const [scrollbarLengthY, setScrollbarLengthY] = atomico.useState(0);
const [scrollbarOffsetX, setScrollbarOffsetX] = atomico.useState(0);
const [scrollbarOffsetY, setScrollbarOffsetY] = atomico.useState(0);
atomico.useProvider(require_contexts_scrollcore.ScrollCoreContext, {
options: {
disabled,
page,
plugins
},
contentRef,
x: {
hvTrack: hvTrackX,
setHvTrack: setHvTrackX,
hvThumb: hvThumbX,
setHvThumb: setHvThumbX,
total: totalX,
view: viewX,
viewOffset: viewOffsetX,
scrollbarLength: scrollbarLengthX,
setScrollbarLength: setScrollbarLengthX,
scrollbarOffset: scrollbarOffsetX,
setScrollbarOffset: setScrollbarOffsetX
},
y: {
hvTrack: hvTrackY,
setHvTrack: setHvTrackY,
hvThumb: hvThumbY,
setHvThumb: setHvThumbY,
total: totalY,
view: viewY,
viewOffset: viewOffsetY,
scrollbarLength: scrollbarLengthY,
setScrollbarLength: setScrollbarLengthY,
scrollbarOffset: scrollbarOffsetY,
setScrollbarOffset: setScrollbarOffsetY
}
});
atomico.useEffect(() => {
const props$1 = require_attribute.getPropsFromAttributes(elRef.current.attributes);
const newProps = require_functions_props_get.getComponentProps({
name: "provider",
props: props$1,
plugins: plugins ?? []
});
require_functions_props_set.setComponentProps(elRef.current, newProps);
}, [plugins]);
return /* @__PURE__ */ (0, atomico_jsx_runtime.jsx)("host", {
shadowDom: true,
children: /* @__PURE__ */ (0, atomico_jsx_runtime.jsx)("slot", {})
});
}
_Provider.props = {
disabled: {
type: Boolean,
reflect: true,
attr: "disabled"
},
page: {
type: Boolean,
reflect: true,
attr: "page"
},
plugins: {
type: Array,
reflect: true,
attr: "plugins"
}
};
const Provider = atomico.c(_Provider);
exports.Provider = Provider;
//# sourceMappingURL=index.js.map