some work on the license manager

This commit is contained in:
2026-07-10 16:55:48 +02:00
parent af80c7d582
commit 4a15f1e351
9 changed files with 736 additions and 624 deletions
+53 -6
View File
@@ -8,7 +8,7 @@ import { toast } from 'vue-sonner'
// Attributes, classes
// -----------------------------------------------------------------------------
// #region Clöasses
// #region Classes
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
@@ -202,6 +202,18 @@ export function randomDate(): Date {
return date
}
export function addDays(date: Date | string, days: number) {
const newDate = new Date(date);
newDate.setDate(newDate.getDate() + days);
return newDate;
}
export function addYears(date: Date | string, years: number) {
const newDate = new Date(date);
newDate.setFullYear(newDate.getFullYear() + years);
return newDate;
}
// -----------------------------------------------------------------------------
@@ -228,11 +240,9 @@ Nam liber tempor cum soluta nobis eleifend option congue nihil imperdiet doming
// Keyboard shortcuts
// -----------------------------------------------------------------------------
// Füge diese Typdefinitionen am Anfang der Datei hinzu
type HotkeyCallback = (params?: any) => void;
type HotkeyEnabledCallback = () => boolean;
// Füge diese Variablen am Anfang der Datei hinzu
const registeredHotkeys = new Map<string, {
callback: HotkeyCallback;
params: any;
@@ -296,6 +306,15 @@ export function hotkey(
.map(key => normalizeKeyName(key))
.join('+')
// Warnung, wenn der registrierte Shortcut bekanntlich nicht zuverlässig
// vom Browser/OS unterdrückt werden kann.
if (UNPREVENTABLE_SHORTCUTS.has(normalizedCombination)) {
console.warn(
`Registriere Shortcut "${keyCombination}" (normalized: "${normalizedCombination}"). ` +
'Achtung: Das Standardverhalten dieses Shortcuts kann vom Browser/OS nicht zuverlässig verhindert werden.'
)
}
// Speichern der Hotkey-Informationen
registeredHotkeys.set(normalizedCombination, {
callback,
@@ -337,7 +356,11 @@ function normalizeKeyName(key: string): string {
'arrowup': 'uparrow',
'arrowdown': 'downarrow',
'return': 'enter',
'esc': 'escape'
'esc': 'escape',
'opt': 'alt',
'option': 'alt',
'spacebar': 'space',
'space': 'space'
};
// Konvertiere den Tastennamen in Kleinbuchstaben
@@ -347,6 +370,29 @@ function normalizeKeyName(key: string): string {
return keyMap[lowerKey] || lowerKey
}
// Liste bekannter Shortcuts, deren Standardverhalten unter vielen Browsern/OS
// nicht zuverlässig durch `preventDefault()` unterdrückt werden kann.
// Diese Liste ist nicht vollständig — sie dient nur zur Warnung beim Registrieren.
const UNPREVENTABLE_SHORTCUTS = new Set([
'cmd+tab',
'ctrl+tab',
'cmd+n',
'ctrl+n',
'cmd+space',
'ctrl+space',
'alt+tab',
'ctrl+alt+delete',
'f12',
'cmd+q',
'ctrl+q',
'cmd+w',
'ctrl+w',
'ctrl+shift+i',
'cmd+opt+i',
'ctrl+shift+j',
'cmd+opt+j'
]);
function handleKeyboardEvent(event: KeyboardEvent) {
// Überprüfen, ob das Event-Element ein Eingabefeld, Textarea oder ähnliches ist
const target = event.target as HTMLElement;
@@ -354,8 +400,9 @@ function handleKeyboardEvent(event: KeyboardEvent) {
target.tagName === 'TEXTAREA' ||
target.tagName === 'SELECT' ||
target.isContentEditable) {
// Wenn das Event-Element ein Eingabefeld ist, den Shortcut nicht auslösen
return;
return
}
// Erstellen einer normalisierten Tastaturkombination
@@ -390,7 +437,7 @@ function handleKeyboardEvent(event: KeyboardEvent) {
// Verhindern der Standardaktion, falls gewünscht
event.preventDefault()
event.stopPropagation()
return 0
return false
}
}
}