From f37cc5bb27b551fb6f51e3c554b24068f0c6d9a0 Mon Sep 17 00:00:00 2001 From: vegard Date: Fri, 20 Mar 2026 04:08:40 +0000 Subject: [PATCH] Web Viewer: nettleser-panel i arbeidsflaten Vis en URL i en iframe inne i en BlockShell. URL-bar med navigasjon (tilbake/frem/oppdater), bokmerker for vanlige sider (admin, auth, git, synops.no). Sandbox for sikkerhet. Co-Authored-By: Claude Opus 4.6 (1M context) --- .../components/traits/WebViewerTrait.svelte | 173 ++++++++++++++++++ frontend/src/lib/workspace/types.ts | 1 + frontend/src/routes/+page.svelte | 8 +- 3 files changed, 181 insertions(+), 1 deletion(-) create mode 100644 frontend/src/lib/components/traits/WebViewerTrait.svelte diff --git a/frontend/src/lib/components/traits/WebViewerTrait.svelte b/frontend/src/lib/components/traits/WebViewerTrait.svelte new file mode 100644 index 0000000..6bad73b --- /dev/null +++ b/frontend/src/lib/components/traits/WebViewerTrait.svelte @@ -0,0 +1,173 @@ + + +
+ +
+ + + + + +
+ + +
+ {#each bookmarks as bm (bm.url)} + + {/each} +
+ + + {#if url} + + {:else} +
+

Skriv inn en URL eller velg et bokmerke

+
+ {/if} +
+ + diff --git a/frontend/src/lib/workspace/types.ts b/frontend/src/lib/workspace/types.ts index 6f0a34b..c17a959 100644 --- a/frontend/src/lib/workspace/types.ts +++ b/frontend/src/lib/workspace/types.ts @@ -58,6 +58,7 @@ export const TRAIT_PANEL_INFO: Record = { mindmap: { title: 'Tankekart', icon: '🧠', defaultWidth: 600, defaultHeight: 500 }, ai: { title: 'AI-verktøy', icon: '🤖', defaultWidth: 420, defaultHeight: 500 }, node_explorer: { title: 'Nodeutforsker', icon: '🔍', defaultWidth: 600, defaultHeight: 500 }, + web: { title: 'Nettleser', icon: '🌐', defaultWidth: 700, defaultHeight: 500 }, usage: { title: 'Ressursforbruk', icon: '📊', defaultWidth: 380, defaultHeight: 350 }, storyboard: { title: 'Storyboard', icon: '🎬', defaultWidth: 500, defaultHeight: 450 }, }; diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index bde329a..e0f4972 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -43,6 +43,7 @@ import AiToolPanel from '$lib/components/AiToolPanel.svelte'; import NodeUsage from '$lib/components/NodeUsage.svelte'; import NodeExplorerTrait from '$lib/components/traits/NodeExplorerTrait.svelte'; + import WebViewerTrait from '$lib/components/traits/WebViewerTrait.svelte'; import { createBlockReceiver, executeTransfer, resolveTransferMode, type DragPayload } from '$lib/transfer'; import type { BlockReceiver } from '$lib/components/blockshell/types'; @@ -308,7 +309,7 @@ const knownTraits = new Set([ 'editor', 'chat', 'kanban', 'podcast', 'publishing', 'rss', 'calendar', 'recording', 'transcription', 'studio', 'mixer', 'mindmap', - 'ai', 'usage', 'node_explorer' + 'ai', 'usage', 'node_explorer', 'web' ]); // ========================================================================= @@ -403,6 +404,7 @@
{#each [ ['node_explorer', '🔍', 'Nodeutforsker'], + ['web', '🌐', 'Nettleser'], ['usage', '📊', 'Forbruk'], ['ai', '🤖', 'AI-verktøy'], ] as [key, icon, label] (key)} @@ -486,6 +488,8 @@ {/if} {:else if panel.trait === 'node_explorer'} + {:else if panel.trait === 'web'} + {/if} {:else} @@ -554,6 +558,8 @@ {/if} {:else if trait === 'node_explorer'} + {:else if trait === 'web'} + {/if} {:else}