import { ref, watch, onUnmounted, getCurrentInstance, type Ref } from 'vue'; /** * Renvoie un miroir débouncé d'un ref source. Le ref source reste instantané (idéal pour un * v-model d'input) ; le miroir ne se met à jour qu'après `delay` ms de stabilité : c'est lui * que le pipeline de tri/filtre consomme, pour ne pas recalculer à chaque frappe. */ export function useDebouncedRef(source: Ref, delay = 150): Ref { const debounced = ref(source.value) as Ref; let timer: ReturnType | undefined; watch(source, (v) => { clearTimeout(timer); timer = setTimeout(() => { debounced.value = v; }, delay); }); if (getCurrentInstance()) onUnmounted(() => clearTimeout(timer)); return debounced; }