@nuxt/ui
Version:
A UI Library for Modern Web Apps, powered by Vue & Tailwind CSS.
40 lines (39 loc) • 1.4 kB
JavaScript
import { ref } from "vue";
import { createSharedComposable } from "@vueuse/core";
import { useAppConfig } from "#imports";
function _useContentSearch() {
const open = ref(false);
const appConfig = useAppConfig();
function mapFile(file, link, parent) {
const prefix = [...new Set([parent?.title, ...file.titles].filter(Boolean))];
return {
prefix: prefix?.length ? prefix.join(" > ") + " >" : void 0,
label: file.id === link.path ? link.title : file.title,
suffix: file.content.replaceAll("<", "<").replaceAll(">", ">"),
to: file.id,
icon: link.icon || parent?.icon || (file.level > 1 ? appConfig.ui.icons.hash : appConfig.ui.icons.file),
level: file.level
};
}
function mapNavigationItems(children, files, parent) {
return children.flatMap((link) => {
if (link.children?.length) {
return mapNavigationItems(link.children, files, link);
}
return files?.filter((file) => file.id === link.path || file.id.startsWith(`${link.path}#`))?.map((file) => mapFile(file, link, parent)) || [];
});
}
function postFilter(query, items) {
if (!query) {
return items?.filter((item) => item.level === 1);
}
return items;
}
return {
open,
mapFile,
mapNavigationItems,
postFilter
};
}
export const useContentSearch = /* @__PURE__ */ createSharedComposable(_useContentSearch);