feat(kon): scaffold hybrid modular workspace

- Cargo workspace with 6 domain crates: core, audio, transcription, ai-formatting, storage, cloud-providers
- Minimal Tauri shell (lib.rs + main.rs) with plugin registration
- Svelte 5 frontend copied from Ramble v0.2
- All crates compile as empty stubs
- App identifier: uk.co.corbel.kon

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
jake
2026-03-16 20:21:38 +00:00
commit 9926a42b7a
80 changed files with 13328 additions and 0 deletions

View File

@@ -0,0 +1,70 @@
<script>
import { getCurrentWindow } from "@tauri-apps/api/window";
let maximised = $state(false);
async function handleMinimise() {
await getCurrentWindow().minimize();
}
async function handleMaximise() {
await getCurrentWindow().toggleMaximize();
maximised = await getCurrentWindow().isMaximized();
}
async function handleClose() {
await getCurrentWindow().hide();
}
function handleDragStart(e) {
if (e.button !== 0) return;
if (e.target.closest("button")) return;
getCurrentWindow().startDragging();
}
// Track maximise state
$effect(() => {
let unlisten;
getCurrentWindow().onResized(async () => {
maximised = await getCurrentWindow().isMaximized();
}).then((fn) => unlisten = fn);
return () => unlisten?.();
});
</script>
<div
class="flex items-center h-[32px] select-none bg-sidebar border-b border-border-subtle"
onmousedown={handleDragStart}
data-tauri-drag-region
>
<!-- Left spacer: aligns with sidebar width -->
<div class="w-[210px] min-w-[210px]" data-tauri-drag-region></div>
<!-- Centre: drag area -->
<div class="flex-1" data-tauri-drag-region></div>
<!-- Window controls -->
<div class="flex items-center h-full">
<button class="titlebar-btn hover:bg-hover" onclick={handleMinimise} aria-label="Minimise">
<svg class="w-3 h-3" viewBox="0 0 12 12">
<rect y="5" width="12" height="1.5" rx="0.5" fill="currentColor" />
</svg>
</button>
<button class="titlebar-btn hover:bg-hover" onclick={handleMaximise} aria-label="Maximise">
{#if maximised}
<svg class="w-3 h-3" viewBox="0 0 12 12">
<path d="M3 1h8v8h-2v2H1V3h2V1zm1 1v1h5v5h1V2H4zm-2 2v6h6V4H2z" fill="currentColor" />
</svg>
{:else}
<svg class="w-3 h-3" viewBox="0 0 12 12">
<rect x="1" y="1" width="10" height="10" rx="1" fill="none" stroke="currentColor" stroke-width="1.5" />
</svg>
{/if}
</button>
<button class="titlebar-btn hover:bg-danger/20 hover:text-danger" onclick={handleClose} aria-label="Close">
<svg class="w-3 h-3" viewBox="0 0 12 12">
<path d="M1 1l10 10M11 1L1 11" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" />
</svg>
</button>
</div>
</div>