1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
1) { $event.stopPropagation(); } startDrag($event.clientX, $event.clientY)"
@mousemove.prevent="dragTo($event.clientX, $event.clientY)"
@mouseup="if (isDragging) { $event.stopPropagation(); } endDrag()"
@mouseleave="endDrag()"
@touchstart="handleTouchStart($event)"
@touchmove="handleTouchMove($event)"
@touchend="handleTouchEnd($event)"
@touchcancel="handleTouchEnd($event)"
:class="{ 'cursor-grab': scale > 1 && !isDragging, 'cursor-grabbing': isDragging }"
>
Plain Sliced Oak Floating Shelf
Plain Sliced Oak Floating Shelf
Length
Depth
Finish
Plain Sliced Oak Floating Shelf
$499
$499