Reduce hold delay to 800ms and prevent text selection during hold

1000ms was long enough to trigger browser text selection before drag
activated. Reduced to 800ms and added userSelect:none on the section
during the touch hold period, restored when touch ends.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
juan
2026-03-22 23:40:25 -07:00
parent fbcc261c9c
commit b0ce345c30

View File

@@ -5,7 +5,7 @@ export default class extends Controller {
// Hold delay to require deliberate press-and-hold before activating drag mode
static values = {
holdDelay: { type: Number, default: 1000 },
holdDelay: { type: Number, default: 800 },
};
connect() {
@@ -98,6 +98,10 @@ export default class extends Controller {
this.currentTouchY = this.touchStartY;
this.holdActivated = false;
// Prevent text selection while waiting for hold to activate
section.style.userSelect = "none";
section.style.webkitUserSelect = "none";
// Start hold timer
this.holdTimer = setTimeout(() => {
this.activateDrag();
@@ -183,6 +187,16 @@ export default class extends Controller {
}
resetTouchState() {
// Restore text selection
if (this.pendingSection) {
this.pendingSection.style.userSelect = "";
this.pendingSection.style.webkitUserSelect = "";
}
if (this.draggedElement) {
this.draggedElement.style.userSelect = "";
this.draggedElement.style.webkitUserSelect = "";
}
this.isTouching = false;
this.draggedElement = null;
this.pendingSection = null;