0) $event.preventDefault();
"
@touchend="
const s = $refs.moreSheet;
if (!s || !s._dragging) return;
s._dragging = false;
const held = performance.now() - (s._startT || 0);
const velocity = (s._dy || 0) / Math.max(1, held);
const shouldClose = (s._dy || 0) > 80 || velocity > 0.5;
if (shouldClose) {
// 1-frame delay: commit drag styles dulu, baru slide-out.
// Hindari kedut 1-frame di HP lambat.
requestAnimationFrame(() => {
s.style.transition = 'transform 220ms cubic-bezier(0.32,0.72,0,1), opacity 220ms ease-in';
s.style.transform = 'translateY(110%)';
s.style.opacity = '0';
showMoreMenu = false;
setTimeout(() => {
s.style.transform = '';
s.style.opacity = '';
s.style.transition = '';
}, 260);
});
} else {
s.style.transition = 'transform 280ms cubic-bezier(0.32,0.72,0,1), opacity 200ms ease-out';
s.style.transform = '';
s.style.opacity = '';
}
"
@touchcancel="
const s = $refs.moreSheet;
if (!s) return;
s._dragging = false;
s.style.transition = 'transform 200ms ease-out';
s.style.transform = '';
s.style.opacity = '';
">