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,29 @@
<script>
import { onMount, onDestroy } from "svelte";
let { type = "dots", speed = 100, classes = "" } = $props();
const sequences = {
dots: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
circle: ["◴", "◷", "◶", "◵"],
pulse: ["◉", "◎", "○", "◎"],
stars: ["·", "✢", "✳", "✶", "✻", "✽"],
orbit: ["⠁", "⠂", "⠄", "⡀", "⢀", "⠠", "⠐", "⠈"],
};
let frame = $state(0);
let interval = null;
let chars = sequences[type] || sequences.dots;
onMount(() => {
interval = setInterval(() => {
frame = (frame + 1) % chars.length;
}, speed);
});
onDestroy(() => {
if (interval) clearInterval(interval);
});
</script>
<span class="inline-block {classes}" aria-hidden="true">{chars[frame]}</span>