reka-ui
Version:
Vue port for Radix UI Primitives.
69 lines (65 loc) • 2.3 kB
JavaScript
;
const vue = require('vue');
const Collection_Collection = require('../Collection/Collection.cjs');
const shared_getActiveElement = require('../shared/getActiveElement.cjs');
const Primitive_Primitive = require('../Primitive/Primitive.cjs');
const Select_SelectContentImpl = require('./SelectContentImpl.cjs');
const _sfc_main = /* @__PURE__ */ vue.defineComponent({
__name: "SelectScrollButtonImpl",
emits: ["autoScroll"],
setup(__props, { emit: __emit }) {
const emits = __emit;
const { getItems } = Collection_Collection.useCollection();
const contentContext = Select_SelectContentImpl.injectSelectContentContext();
const autoScrollTimerRef = vue.ref(null);
function clearAutoScrollTimer() {
if (autoScrollTimerRef.value !== null) {
window.clearInterval(autoScrollTimerRef.value);
autoScrollTimerRef.value = null;
}
}
vue.watchEffect(() => {
const activeItem = getItems().map((i) => i.ref).find(
(item) => item === shared_getActiveElement.getActiveElement()
);
activeItem?.scrollIntoView({ block: "nearest" });
});
function handlePointerDown() {
if (autoScrollTimerRef.value === null) {
autoScrollTimerRef.value = window.setInterval(() => {
emits("autoScroll");
}, 50);
}
}
function handlePointerMove() {
contentContext.onItemLeave?.();
if (autoScrollTimerRef.value === null) {
autoScrollTimerRef.value = window.setInterval(() => {
emits("autoScroll");
}, 50);
}
}
vue.onBeforeUnmount(() => clearAutoScrollTimer());
return (_ctx, _cache) => {
return vue.openBlock(), vue.createBlock(vue.unref(Primitive_Primitive.Primitive), vue.mergeProps({
"aria-hidden": "true",
style: {
flexShrink: 0
}
}, _ctx.$parent?.$props, {
onPointerdown: handlePointerDown,
onPointermove: handlePointerMove,
onPointerleave: _cache[0] || (_cache[0] = () => {
clearAutoScrollTimer();
})
}), {
default: vue.withCtx(() => [
vue.renderSlot(_ctx.$slots, "default")
]),
_: 3
}, 16);
};
}
});
exports._sfc_main = _sfc_main;
//# sourceMappingURL=SelectScrollButtonImpl.cjs.map