chore: rebrand from Kon/Corbie to Magnotia

Replace all instances of the legacy product names "Kon" and "Corbie" with
"Magnotia" across user-facing copy, code identifiers, package names, bundle
ids, file paths, and documentation. Preserves the unrelated "konsole" (KDE
terminal) reference and the parent CORBEL company name.

- Renames 10 Rust crates (kon-* → magnotia-*) and the tauri binary
- Updates package.json, tauri.conf.json (productName + identifier)
- Renames CSS classes (kon-rh-* → magnotia-rh-*) and animations
- Renames brand and roadmap docs
- Regenerates Cargo.lock and package-lock.json

Verified: svelte-check passes; pure-rust crates compile under new names.
This commit is contained in:
Claude
2026-04-30 13:06:55 +00:00
parent 749403697a
commit 89c63891fa
186 changed files with 1297 additions and 1297 deletions

View File

@@ -42,7 +42,7 @@
const prefs = getPreferences();
const tauriRuntimeAvailable = hasTauriRuntime();
// On Linux Kon uses native KWin/Mutter decorations (see
// On Linux Magnotia uses native KWin/Mutter decorations (see
// src-tauri/tauri.linux.conf.json and windows.rs). Frameless custom
// chrome stays for macOS and Windows. Default to false so Linux users
// don't see a flash of custom titlebar before loadOsInfo resolves.
@@ -68,7 +68,7 @@
});
// Global hotkey registration — dual backend
// Wayland: evdev via kon-hotkey crate (works without display server)
// Wayland: evdev via magnotia-hotkey crate (works without display server)
// X11/macOS/Windows: tauri-plugin-global-shortcut (native)
let registeredHotkey = null;
let hotkeyBackend = $state("unknown"); // "evdev" | "tauri" | "unavailable"
@@ -123,7 +123,7 @@
await mod.register(hotkey, () => {
if (page.current !== "dictation") page.current = "dictation";
requestAnimationFrame(() => {
window.dispatchEvent(new CustomEvent("kon:toggle-recording"));
window.dispatchEvent(new CustomEvent("magnotia:toggle-recording"));
});
});
registeredHotkey = hotkey;
@@ -159,13 +159,13 @@
async function setupEvdevListener() {
if (!tauriRuntimeAvailable) return;
const { listen } = await import("@tauri-apps/api/event");
unlistenEvdev = await listen("kon:hotkey-pressed", () => {
unlistenEvdev = await listen("magnotia:hotkey-pressed", () => {
const now = Date.now();
if (now - lastHotkeyAtMs < HOTKEY_DEBOUNCE_MS) return;
lastHotkeyAtMs = now;
if (page.current !== "dictation") page.current = "dictation";
requestAnimationFrame(() => {
window.dispatchEvent(new CustomEvent("kon:toggle-recording"));
window.dispatchEvent(new CustomEvent("magnotia:toggle-recording"));
});
});
}
@@ -217,7 +217,7 @@
let unlistenWindDown = null;
async function setupWindDownListener() {
if (!tauriRuntimeAvailable) return;
unlistenWindDown = await listen("kon:open-wind-down", () => {
unlistenWindDown = await listen("magnotia:open-wind-down", () => {
page.current = "shutdown";
});
}
@@ -325,7 +325,7 @@
invoke("check_for_update")
.then((version) => {
if (version) {
toasts.info(`Kon ${version} is available. Download and restart to update.`);
toasts.info(`Magnotia ${version} is available. Download and restart to update.`);
}
})
.catch(() => { /* update check failure must not affect the app */ });
@@ -442,7 +442,7 @@
in the bottom-right of the viewport. (Day 3 of the upgrade plan) -->
<ToastViewport />
<!-- Global focus-timer overlay. Renders nothing until a `kon:start-timer`
<!-- Global focus-timer overlay. Renders nothing until a `magnotia:start-timer`
event fires; then pins a shrinking colour ring to the top-right.
Phase 1 of the 2026-04-23 feature-complete roadmap — closes the
visual-time-representation gap from docs/brief/feature-set.md and

View File

@@ -14,7 +14,7 @@
});
</script>
<main class="h-full overflow-hidden" aria-label="Kon application content">
<main class="h-full overflow-hidden" aria-label="Magnotia application content">
{#if page.current === "first-run"}
<FirstRunPage />
{:else if page.current === "dictation"}

View File

@@ -35,7 +35,7 @@
// Listen for settings changes from main window
if (typeof window !== "undefined") {
window.addEventListener("storage", (e) => {
if (e.key === "kon_settings" && e.newValue) {
if (e.key === "magnotia_settings" && e.newValue) {
try {
Object.assign(settings, JSON.parse(e.newValue));
} catch {}

View File

@@ -185,7 +185,7 @@
onpointerdown={handleDragStart}
>
<span class="text-[12px] font-medium text-text-secondary tracking-wide">
Kon - To-do
Magnotia - To-do
</span>
<div class="flex-1"></div>

View File

@@ -28,7 +28,7 @@
if (typeof window !== "undefined") {
window.addEventListener("storage", (event) => {
if (event.key === "kon_settings" && event.newValue) {
if (event.key === "magnotia_settings" && event.newValue) {
try { Object.assign(settings, JSON.parse(event.newValue)); } catch {}
}
});

View File

@@ -32,7 +32,7 @@
// Sync settings from main window
if (typeof window !== "undefined") {
window.addEventListener("storage", (e) => {
if (e.key === "kon_settings" && e.newValue) {
if (e.key === "magnotia_settings" && e.newValue) {
try { Object.assign(settings, JSON.parse(e.newValue)); } catch {}
}
});

View File

@@ -92,8 +92,8 @@
}
onMount(() => {
loadFromHandoff(localStorage.getItem("kon_viewer_item"));
const mode = localStorage.getItem("kon_viewer_mode");
loadFromHandoff(localStorage.getItem("magnotia_viewer_item"));
const mode = localStorage.getItem("magnotia_viewer_mode");
if (mode === "edit" || mode === "view") viewerMode = mode;
// Listen for new items via storage events
@@ -139,7 +139,7 @@
}
function handleStorageChange(e: StorageEvent) {
if (e.key === "kon_viewer_item" && e.newValue) {
if (e.key === "magnotia_viewer_item" && e.newValue) {
void loadFromHandoff(e.newValue);
}
}
@@ -317,7 +317,7 @@
if (!item) return;
try {
localStorage.setItem(
"kon_viewer_item",
"magnotia_viewer_item",
JSON.stringify({ id: String(item.id), stamp: Date.now() }),
);
} catch {}
@@ -391,7 +391,7 @@
onpointerdown={handleDragStart}
>
<span class="text-[12px] font-medium text-text-secondary tracking-wide">
Kon - {viewerMode === "edit" ? "Editor" : "Viewer"}
Magnotia - {viewerMode === "edit" ? "Editor" : "Viewer"}
</span>
<div class="flex-1"></div>
</div>