feat(phase2): localization EN/RU + additional widget types

- Add svelte-i18n with 224 translation keys (English + Russian)
- Language switcher in header (EN/RU toggle, persists to localStorage)
- Extract all hardcoded strings from 37 component/page files
- Add 4 new widget types: Bookmark, Note (markdown), Embed (iframe), Status
- WidgetRenderer dispatches by type, WidgetGrid supports full-width widgets
- Type-specific config forms in board editor
- Install marked for markdown rendering
This commit is contained in:
2026-03-24 23:18:05 +03:00
parent bf4e5089ee
commit 477c0e4d52
52 changed files with 1776 additions and 395 deletions
+15 -4
View File
@@ -29,11 +29,22 @@
widgets: WidgetData[];
}
interface Props {
section: SectionData;
interface AppData {
id: string;
name: string;
url: string;
icon: string | null;
iconType: string;
description: string | null;
statuses: Array<{ status: string; responseTime: number | null }>;
}
let { section }: Props = $props();
interface Props {
section: SectionData;
allApps?: AppData[];
}
let { section, allApps = [] }: Props = $props();
let expanded = $state(section.isExpandedByDefault);
</script>
@@ -48,7 +59,7 @@
<SectionCollapsible {expanded}>
<div class="px-4 pb-4">
<WidgetGrid widgets={section.widgets} />
<WidgetGrid widgets={section.widgets} {allApps} />
</div>
</SectionCollapsible>
</div>