mirror of
https://github.com/linsa-io/linsa.git
synced 2026-01-12 12:20:23 +01:00
* chore: remove sliding menu * feat(ui): sheet * feat: shortcut component * chore: register new shortcut component to layout * fix: react attr naming * fix: set default to false for shortcut * feat(store): keydown-manager * feat(hooks): keyboard manager * chore: use util from base for la-editor * chore: use util from base for minimal-tiptap-editor * chore(utils): keyboard * chore: use new keyboard manager * fix: uniqueness of certain component * feat: global key handler * chore: implement new key handler
67 lines
1.6 KiB
TypeScript
67 lines
1.6 KiB
TypeScript
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.toUpperCase(), readable: key }
|
|
}
|
|
}
|
|
|
|
export function getShortcutKeys(keys: string[]): ShortcutKeyResult[] {
|
|
return keys.map(key => getShortcutKey(key))
|
|
}
|