export function registerDirectives(Alpine) {
Alpine.directive("fallback", (element, { expression }, { evaluateLater, effect }) => {
const lista = evaluateLater(expression);
effect(() => {
lista((items) => {
element.style.display = Array.isArray(items) && items.length > 0 ? "none" : "";
});
});
});
Alpine.directive("follow", (element, _directive, { cleanup }) => {
let stick = true;
const atEnd = () => element.scrollHeight - element.scrollTop - element.clientHeight < 24;
const onScroll = () => {
stick = atEnd();
};
element.addEventListener("scroll", onScroll, { passive: true });
const mutationObserver = new MutationObserver(() => {
if (stick) element.scrollTop = element.scrollHeight;
});
mutationObserver.observe(element, { childList: true, subtree: true });
cleanup(() => {
element.removeEventListener("scroll", onScroll);
mutationObserver.disconnect();
});
});
}