From ccc7d59b7f8df034fbf2447ca61366f0f9f0dd08 Mon Sep 17 00:00:00 2001 From: vegard Date: Wed, 18 Mar 2026 08:34:43 +0000 Subject: [PATCH] =?UTF-8?q?Gj=C3=B8r=20KanbanTrait=20til=20fullverdig=20Bl?= =?UTF-8?q?ockShell-panel=20med=20inline=20brett=20(oppgave=2020.6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit KanbanTrait var tidligere bare en lenke til /board/[id]. Nå viser den kolonner og kort direkte i BlockShell-panelet, med full funksjonalitet: - Inline kanban-brett med kolonner (todo/in_progress/done) fra metadata - Intern drag-and-drop mellom kolonner (status-edge oppdatering) - Cross-panel drag: kort bruker setDragPayload for drag til andre paneler - BlockReceiver: aksepterer drops fra chat/editor (innholdstransfer-modus) - Opprett kort direkte i kolonne (inline input) - Responsivt: kolonner stables vertikalt på smale paneler (@container + @media) - accessToken-prop lagt til for mutasjoner /board/[id]-ruten beholdes som frittstående visning. Co-Authored-By: Claude Opus 4.6 (1M context) --- docs/features/kanban.md | 11 + .../lib/components/traits/KanbanTrait.svelte | 640 +++++++++++++++++- .../src/routes/collection/[id]/+page.svelte | 4 +- tasks.md | 3 +- 4 files changed, 639 insertions(+), 19 deletions(-) diff --git a/docs/features/kanban.md b/docs/features/kanban.md index 21a9895..7d3a96d 100644 --- a/docs/features/kanban.md +++ b/docs/features/kanban.md @@ -22,6 +22,17 @@ action points fra Møterommet. - Opprett kort direkte i kolonne (tittel-input) - Oppretting av nye brett fra mottak-siden +### KanbanTrait panel (oppgave 20.6, mars 2026) +- **Inline panel:** KanbanTrait er nå et fullverdig BlockShell-panel som viser kolonner og kort direkte i panelet — ikke bare lenke til `/board/[id]`. +- **Kolonner:** Henter kolonner fra `metadata.traits.kanban.columns`, fallback til `['todo', 'in_progress', 'done']`. +- **Intern drag-and-drop:** Kort kan dras mellom kolonner for statusendring (bruker status-edge). +- **BlockReceiver:** Aksepterer drops fra andre paneler (`innholdstransfer`-modus). Noder fra chat/editor opprettes som nye kort med `source_material`-edge. +- **Drag-out:** Kort er draggable med `setDragPayload` — kan dras til andre paneler (chat, editor, kalender). +- **Opprett kort:** Inline-knapp per kolonne for å opprette nye kort (tittel → content-node + belongs_to + status edges). +- **Responsivt:** Kolonner stables vertikalt på smale paneler/mobil via `@container` og `@media` queries. +- **Fullskjerm-toggle:** Via BlockShell-wrapperen (forelder-side wrapper KanbanTrait i BlockShell). +- **`/board/[id]`-ruten beholdes** som frittstående fullside-visning for direktelenker. + ### Gjenstår - Reposisjonering ved dra innad i kolonne (sortert rekkefølge) - Redigeringsmodal for kort (tittel/beskrivelse) diff --git a/frontend/src/lib/components/traits/KanbanTrait.svelte b/frontend/src/lib/components/traits/KanbanTrait.svelte index 603ae9f..8b03fa8 100644 --- a/frontend/src/lib/components/traits/KanbanTrait.svelte +++ b/frontend/src/lib/components/traits/KanbanTrait.svelte @@ -1,18 +1,20 @@ - - {#snippet children()} - - Åpne brett → - - {/snippet} - + + +
+ {#if cards.length === 0 && !accessToken} + +
+ 📋 +

Ingen oppgaver på brettet ennå.

+
+ {:else} + +
+ {#each columns as column (column)} + {@const colCards = cardsByColumn[column] ?? []} +
handleDragOver(e, column)} + ondragleave={handleDragLeave} + ondrop={(e) => handleDrop(e, column)} + role="list" + aria-label={columnLabel(column)} + > + +
+ {columnLabel(column)} + {colCards.length} +
+ + +
+ {#each colCards as card (card.node.id)} +
handleDragStart(e, card)} + ondragend={handleDragEnd} + role="listitem" + > + + {card.node.title || 'Uten tittel'} + + {#if card.node.content} + + {card.node.content} + + {/if} + {#if formatTime(card.node)} + {formatTime(card.node)} + {/if} +
+ {/each} + + + {#if addingToColumn === column} +
+ handleCardKeydown(e, column)} + placeholder="Tittel…" + class="kanban-add-input" + disabled={isCreating} + /> +
+ + +
+
+ {:else if accessToken} + + {/if} +
+
+ {/each} +
+ {/if} +
+ + diff --git a/frontend/src/routes/collection/[id]/+page.svelte b/frontend/src/routes/collection/[id]/+page.svelte index aa45473..269ad4f 100644 --- a/frontend/src/routes/collection/[id]/+page.svelte +++ b/frontend/src/routes/collection/[id]/+page.svelte @@ -336,7 +336,7 @@ {:else if trait === 'chat'} {:else if trait === 'kanban'} - + {:else if trait === 'podcast'} {:else if trait === 'publishing'} @@ -391,7 +391,7 @@ {:else if trait === 'chat'} {:else if trait === 'kanban'} - + {:else if trait === 'podcast'} {:else if trait === 'publishing'} diff --git a/tasks.md b/tasks.md index 37c17a0..695e7a5 100644 --- a/tasks.md +++ b/tasks.md @@ -228,8 +228,7 @@ Ref: `docs/features/universell_overfoering.md`, `docs/retninger/arbeidsflaten.md - [x] 20.3 BlockReceiver interface: implementer `canReceive()`, `receive()`, `renderDropZone()` i alle trait-komponenter (Chat, Kanban, Kalender, Editor, Studio). Kompatibilitetsmatrise bestemmer godkjente drops. Ref: `docs/features/universell_overfoering.md` § 4–5. - [x] 20.4 Transfer service: `innholdstransfer`-modus (ny node + source_material edge) og `lettvekts-triage` (eksisterende node + ny edge/placement). Bestem modus fra verktøy-par. Shift-modifier for override. Ref: `docs/features/universell_overfoering.md` § 1, 3. - [x] 20.5 Panelrework — Chat: gjør ChatTrait til fullverdig BlockShell-panel med BlockReceiver, fullskjerm-toggle, og responsivt design innenfor begrenset container. -- [~] 20.6 Panelrework — Kanban: gjør KanbanTrait til BlockShell-panel med drag-and-drop aksept fra andre paneler, fullskjerm, responsivt. - > Påbegynt: 2026-03-18T08:30 +- [x] 20.6 Panelrework — Kanban: gjør KanbanTrait til BlockShell-panel med drag-and-drop aksept fra andre paneler, fullskjerm, responsivt. - [ ] 20.7 Panelrework — Kalender: gjør CalendarTrait til BlockShell-panel med drop-aksept for scheduling, fullskjerm, responsivt. - [ ] 20.8 Panelrework — Editor/Artikkelverktøy: gjør artikkelverktøy til BlockShell-panel med source_material mottak fra andre paneler. Ref: `docs/features/artikkelverktoy.md`. - [ ] 20.9 Panelrework — Studio: gjør StudioTrait til BlockShell-panel med drop-aksept for lydfiler, fullskjerm, responsivt.