mirror of
https://gitlab.com/ArkHost/HelixNotes.git
synced 2026-07-24 15:55:55 +02:00
- Quick Access drag-to-reorder: drag notes to rearrange, order persists - Quick Access preserves order when moving notes between notebooks - In-note search: debounced input, proper scroll-to-match - Panel resize: RAF-batched updates, editor containment during resize - Thinner resize handles (3px) - Note list: removed transition, added CSS containment for 1200+ notes - Escape closes Settings and Info panels - Fix Quick Access cache invalidation on remove
41 lines
1.1 KiB
Svelte
41 lines
1.1 KiB
Svelte
<script lang="ts">
|
|
let { onResize }: { onResize: (delta: number) => void } = $props();
|
|
let active = $state(false);
|
|
let startX = 0;
|
|
let rafId = 0;
|
|
let pendingDelta = 0;
|
|
|
|
function onMouseDown(e: MouseEvent) {
|
|
e.preventDefault();
|
|
active = true;
|
|
startX = e.clientX;
|
|
document.body.classList.add('resizing');
|
|
window.addEventListener('mousemove', onMouseMove);
|
|
window.addEventListener('mouseup', onMouseUp);
|
|
}
|
|
|
|
function onMouseMove(e: MouseEvent) {
|
|
pendingDelta += e.clientX - startX;
|
|
startX = e.clientX;
|
|
if (!rafId) {
|
|
rafId = requestAnimationFrame(() => {
|
|
onResize(pendingDelta);
|
|
pendingDelta = 0;
|
|
rafId = 0;
|
|
});
|
|
}
|
|
}
|
|
|
|
function onMouseUp() {
|
|
active = false;
|
|
document.body.classList.remove('resizing');
|
|
if (rafId) { cancelAnimationFrame(rafId); rafId = 0; }
|
|
if (pendingDelta) { onResize(pendingDelta); pendingDelta = 0; }
|
|
window.removeEventListener('mousemove', onMouseMove);
|
|
window.removeEventListener('mouseup', onMouseUp);
|
|
}
|
|
</script>
|
|
|
|
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
<div class="resize-handle" class:active onmousedown={onMouseDown}></div>
|