import Fuse from 'fuse.js'; import { ref, watch, computed, unref } from 'vue-demi'; import { resolveUnref } from '@vueuse/shared'; function useFuse(search, data, options) { const createFuse = () => { var _a, _b; return new Fuse((_a = resolveUnref(data)) != null ? _a : [], (_b = resolveUnref(options)) == null ? void 0 : _b.fuseOptions); }; const fuse = ref(createFuse()); watch(() => { var _a; return (_a = resolveUnref(options)) == null ? void 0 : _a.fuseOptions; }, () => { fuse.value = createFuse(); }, { deep: true }); watch(() => resolveUnref(data), (newData) => { fuse.value.setCollection(newData); }, { deep: true }); const results = computed(() => { const resolved = resolveUnref(options); if ((resolved == null ? void 0 : resolved.matchAllWhenSearchEmpty) && !unref(search)) return resolveUnref(data).map((item, index) => ({ item, refIndex: index })); const limit = resolved == null ? void 0 : resolved.resultLimit; return fuse.value.search(resolveUnref(search), limit ? { limit } : void 0); }); return { fuse, results }; } export { useFuse };