feat(ui): components, routes and styles

Sidebar (lazy tree, keyboard navigation, saved searches), page view with
typed properties, tasks, tags, calendar and clip dialogs, settings with
shortcut rebinding, canvas, database and board views.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Your NameandClaude Sonnet 5.5 committed 2026-10-15 11:57:09 +02:00
1 parent c0587cb267
commit 27fafa0bcd
39 files changed
+8744 -94

No files matched your search

+35
View File
@@ -0,0 +1,35 @@
<script>
import Icon from './Icon.svelte';
import { store } from '$lib/state.svelte.js';
let closing = $state(false);
let url = $state('');
let busy = $state(false);
async function go() {
if (!url.trim() || busy) return;
busy = true;
await store.clipWeb(url);
busy = false;
close();
}
function close() {
closing = true;
setTimeout(() => { store.clipOpen = false; closing = false; }, 150);
}
const focusOnMount = (el) => el.focus();
</script>
<svelte:window onkeydown={(e) => e.key === 'Escape' && close()} />
<div class="overlay" class:closing role="presentation" onmousedown={(e) => e.target === e.currentTarget && close()}>
<div class="panel" role="dialog" aria-label="Clip a web page">
<div class="pal-top">
<Icon name="globe" />
<input bind:value={url} placeholder="Paste a web address to save as a note" autocomplete="off" spellcheck="false" use:focusOnMount
onkeydown={(e) => { if (e.key === 'Enter') { e.preventDefault(); go(); } }} />
<button class="btn primary" disabled={busy || !url.trim()} onclick={go}>{busy ? 'Clipping…' : 'Clip'}</button>
</div>
<div class="pal-foot"><span>Saves the page’s main text as Markdown, with its address in the page’s front matter. Public web pages only.</span></div>
</div>
</div>