UNPKG

nimiq-vitepress-theme

Version:

Nimiq UI theme for VitePress

82 lines (81 loc) 2.13 kB
import { useData } from "vitepress"; import { computed } from "vue"; import { useSourceCode } from "./useSourceCode.mjs"; export function useActionsMenu() { const { theme } = useData(); const { copyMarkdownContent, copyMarkdownLink, chatGPTUrl, claudeUrl, viewAsMarkdown, copyOptionsConfig, showCopyMarkdown } = useSourceCode(); const customActions = computed(() => { return theme.value.outlineActions || []; }); const allActions = computed(() => { const actions = []; if (showCopyMarkdown.value) { actions.push({ icon: "i-nimiq:copy", label: "Copy page", onClick: copyMarkdownContent }); } return [...actions, ...customActions.value]; }); const nativeOptions = computed(() => { const options = []; if (copyOptionsConfig.value.markdownLink) { options.push({ icon: "i-tabler:link", label: "Copy markdown link", onClick: copyMarkdownLink }); } if (copyOptionsConfig.value.viewMarkdown) { options.push({ icon: "i-tabler:eye", label: "View as markdown", onClick: viewAsMarkdown }); } return options; }); const externalOptions = computed(() => { const options = []; if (copyOptionsConfig.value.chatgpt) { options.push({ icon: "i-local:openai", label: "Open in ChatGPT", onClick: () => { if (typeof window !== "undefined") { window.open(chatGPTUrl.value, "_blank", "noopener,noreferrer"); } } }); } if (copyOptionsConfig.value.claude) { options.push({ icon: "i-local:claude", label: "Open in Claude", onClick: () => { if (typeof window !== "undefined") { window.open(claudeUrl.value, "_blank", "noopener,noreferrer"); } } }); } return options; }); const hasDropdown = computed(() => nativeOptions.value.length > 0 || externalOptions.value.length > 0); return { customActions, allActions, nativeOptions, externalOptions, hasDropdown }; }