import type { Editor } from "@tiptap/core" import type { MinimalTiptapProps } from "./minimal-tiptap" let isMac: boolean | undefined interface Navigator { userAgentData?: { brands: { brand: string; version: string }[] mobile: boolean platform: string getHighEntropyValues: (hints: string[]) => Promise<{ platform: string platformVersion: string uaFullVersion: string }> } } function getPlatform(): string { const nav = navigator as Navigator if (nav.userAgentData) { if (nav.userAgentData.platform) { return nav.userAgentData.platform } nav.userAgentData .getHighEntropyValues(["platform"]) .then((highEntropyValues) => { if (highEntropyValues.platform) { return highEntropyValues.platform } }) } if (typeof navigator.platform === "string") { return navigator.platform } return "" } export function isMacOS() { if (isMac === undefined) { isMac = getPlatform().toLowerCase().includes("mac") } return isMac } interface ShortcutKeyResult { symbol: string readable: string } export function getShortcutKey(key: string): ShortcutKeyResult { const lowercaseKey = key.toLowerCase() if (lowercaseKey === "mod") { return isMacOS() ? { symbol: "⌘", readable: "Command" } : { symbol: "Ctrl", readable: "Control" } } else if (lowercaseKey === "alt") { return isMacOS() ? { symbol: "⌥", readable: "Option" } : { symbol: "Alt", readable: "Alt" } } else if (lowercaseKey === "shift") { return isMacOS() ? { symbol: "⇧", readable: "Shift" } : { symbol: "Shift", readable: "Shift" } } else { return { symbol: key, readable: key } } } export function getShortcutKeys(keys: string[]): ShortcutKeyResult[] { return keys.map((key) => getShortcutKey(key)) } export function getOutput( editor: Editor, format: MinimalTiptapProps["output"], ) { if (format === "json") { return editor.getJSON() } if (format === "html") { return editor.getText() ? editor.getHTML() : "" } return editor.getText() }