import { type Ref, computed } from 'vue' import { type PageData, useData } from 'vitepress' export interface Data { lang: Ref } const iconMappings = { about: 'information-outline', bookmark: 'bookmark-outline', bookPage: '', compassOutline: '', dataPrivacy: '', dice: 'dice-5-outline', dotsHorizontal: '', downloadOutline: '', favourite: 'heart-outline', feed: 'rss', history: '', local: '', paletteOutline: '', sources: '', services: '', threeDots: 'dots-vertical', web: '' } interface Navigation { name: string icon?: string dependsOn?: string } const navigationMappings: Record = { // Main menus "main_three_dots": { name: "Three dots", icon: iconMappings.threeDots }, "main_history": { name: "History", icon: iconMappings.history }, "main_favourites": { name: "Favourites", icon: iconMappings.favourite }, "main_explore": { name: "Explore", icon: iconMappings.compassOutline }, "main_feed": { name: "Feed", icon: iconMappings.feed }, "main_settings": { name: "Settings", dependsOn: "main_three_dots" }, // Explore "explore_local_storage" : { name: "Local storage", icon: iconMappings.local, dependsOn: "main_explore" }, "explore_bookmarks" : { name: "Bookmarks", icon: iconMappings.bookmark, dependsOn: "main_explore" }, "explore_random" : { name: "Random", icon: iconMappings.dice, dependsOn: "main_explore" }, "explore_downloads" : { name: "Downloads", icon: iconMappings.downloadOutline, dependsOn: "main_explore" }, "explore_manage_sources" : { name: "Manage", dependsOn: "main_explore" }, // Details "details_tracking" : { name: "Tracking", dependsOn: "main_three_dots" }, // Favourites "favourites_three_dots": { name: "Three dots", icon: iconMappings.threeDots, dependsOn: "main_favourites" }, "favourites_manage_categories" : { name: "Manage categories", dependsOn: "favourites_three_dots" }, // Settings submenu "appearance": { name: "Appearance", icon: iconMappings.paletteOutline, dependsOn: "main_settings" }, "sources": { name: "Manga sources", icon: iconMappings.sources, dependsOn: "main_settings" }, "reader": { name: "Reader settings", icon: iconMappings.bookPage, dependsOn: "main_settings" }, "network": { name: "Network", icon: iconMappings.web, dependsOn: "main_settings" }, "data": { name: "Data and privacy", icon: iconMappings.dataPrivacy, dependsOn: "main_settings" }, "downloads": { name: "Downloads", icon: iconMappings.downloadOutline, dependsOn: "main_settings" }, "checking": { name: "Check for new chapters", icon: iconMappings.feed, dependsOn: "main_settings" }, "services": { name: "Services", icon: iconMappings.services, dependsOn: "main_settings" }, "about": { name: "About", icon: iconMappings.about, dependsOn: "main_settings" }, } function generateNavigationHtml(navKey: string) { const navData = navigationMappings[navKey] if (!navData) { return "Unsupported Navigation!" } const { name, icon, dependsOn } = navData const iconHtml = icon ?? "" let html = `${iconHtml}${name}` if (dependsOn) { html = `${generateNavigationHtml(dependsOn)} arrow-right-thin ${html}` } return html } const shortcodes = { nav: { render({ to }) { return generateNavigationHtml(to) }, }, } export default shortcodes