Canvas: keyboard-events ignoreres når bruker skriver i input/textarea.
Space fungerer nå i søkefelt og tekstredigering.
Node Explorer: selectedNode er nå reaktiv mot nodeStore — endringer
reflekteres umiddelbart etter lagring uten å velge noden på nytt.
✏️-knapp vises bare for noder brukeren eier.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
✕ på søk/filter for rask reset. ✏️ for inline redigering av
tittel, innhold og metadata (JSON). Lagre via updateNode API.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Canvas handlePointerDown ignorerer klikk inne i .blockshell-content.
Inputs, knapper, selects og lister i paneler fungerer normalt.
Bare headeren starter Canvas-drag.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reset til 100% justerer kameraposisjon slik at det du ser i
midten forblir i midten. Gjelder dobbeltklikk og toolbar-knapp.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Canvas: scroll=pan, Ctrl+scroll=zoom, piltaster, dblclick=100%.
BlockShell: Ctrl+scroll zoomer panel-innhold.
Nye paneler plasseres i viewport-sentrum, ikke utenfor bildet.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Dropdown viser begge arbeidsflater med absolutte URLer
(ws.synops.no og adm.synops.no). Navigasjon mellom subdomener
fungerer uten å miste sesjon.
Erfaringsnotat: multi-subdomain med SvelteKit — ORIGIN-fellen,
cookie-domene, CSRF, OIDC redirect URIs, sjekkliste for nye
subdomener.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Header viser "Administrasjon" i stedet for "Hjem" på adm.synops.no
- Tom-tilstand foreslår admin-verktøy (Nodeutforsker, Forbruk, AI)
- homeLabel prop i ContextHeader for konfigurerbar tittel
- isAdminHost fra layout server → +page.svelte
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ny trait: NodeExplorerTrait — søk og utforsk noder med edges.
Split-visning: nodeliste til venstre, detaljer til høyre.
Filtrer på node_kind, søk i tittel/innhold/ID.
Klikk edges for å navigere i grafen.
adm.synops.no setter isAdminHost flag via hooks/layout.
Registrert i TRAIT_PANEL_INFO som 'node_explorer'.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ny FlowMeter-komponent som viser episodeprogresjon som en
fargekodet linje (rød→gul→grønn) med pulsering nær mål.
StoryboardTrait viser Flow Meter øverst og kort gruppert
etter status (Klar, Tatt opp, Droppet).
Ref: docs/proposals/flow_meter.md
- Legg til stopPropagation på toolbar-div for å hindre at pointer/click-events
bobler opp til canvas-container og starter pan/lasso
- Zoom-knapper zoomer nå mot viewport-senter (som musehjul) med ±15% steg
- Fullskjerm z-index økt til 9999 (over header)
- Grid-linjer doblet i opacity (6% → 12%) for synlighet i mørkt tema
- Toolbar-separator bruker CSS-variabel i stedet for hardkodet lys farge
Verktøymenyen i header har nå en «Opprett»-seksjon over panellisten
med tre hurtigvalg:
- Ny samtale → oppretter kommunikasjonsnode, navigerer til /chat/[id]
- Nytt brett → oppretter samling med kanban-trait, navigerer til /collection/[id]
- Ny samling → navigerer til /collection/new for full oppsettflyt
Fjernet ~170 hardkodede hex-verdier i style-blokker across 7 filer
og erstattet med var(--color-*) for full temastøtte.
Filer: ChatTrait, EditorTrait, OrchestrationTrait, CalendarTrait,
KanbanTrait, MindMapTrait, StudioTrait.
D3-visualiseringsfarger (MindMapTrait) og fargevelger-palett
(SoundPadGrid) beholdt som funksjonelle farger.
Hver gang en boks klikkes/dras økes en global z-teller og boksen
får høyeste verdi. Rekkefølgen bevares etter at boksen deselekteres.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Når en boks velges eller dras, får den z-index: 10 slik at den
alltid vises over andre bokser. Uvalgte bokser har z-index: 1.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Musehjul er fortsatt rask zoom (20% per steg).
Toolbar-knappene gir nå presis kontroll: ±1% per klikk.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rad 1: 8 forhåndsdefinerte presets (faste)
Rad 2: opptil 6 bruker-slots — klikk + for å lagre gjeldende tema,
klikk for å bruke, høyreklikk for å slette.
Lagres i workspace-metadata.savedThemes.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Alle Tailwind-overrides i app.css bruker nå var(--color-*) i stedet for
hardkodede hex. Dette betyr at temaendringer påvirker alt innhold —
inkludert trait-komponenter, inputs, scrollbar, toolbar og statusfarger.
Canvas-toolbar bruker også CSS vars nå.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ny modell: dropdown velger hva du farger (Canvas, Menylinje, Bokser,
Rammer, Knapper/aksent, Tekst). Tre slidere per element (farge,
metning, lyshet) gir full kontroll over hele spekteret.
Presets setter alle elementer på én gang. Fargeprøve viser valgt farge.
BlockShell bruker ny --color-panel variabel.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Erstattet 9 slidere (3 per farge × 3 farger) med 3 intuitive kontroller:
- Farge: hue-stripe for aksentfarge
- Intensitet: saturation
- Lys/mørk: brightness slider (0=svart, 100=hvit)
Systemet utleder bg, surface, border, text automatisk fra disse.
Canvas-bakgrunn styres nå av --color-bg (var ikke det før).
Presets med emoji-ikoner. Rosa og lys preset lagt til.
Bakoverkompatibel med alle tidligere tema-formater.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
ThemeColor har nå lightness-felt. Alle tre slidere (hue, lightness,
saturation) dekker hele spekteret 0-100/360. Brukeren kan gå fra
hvit til svart og alt imellom. Tekst auto-tilpasses lys/mørk bakgrunn.
Nytt preset «Lys» for de som foretrekker lys skjerm.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Slett-knapp: stopPropagation hindrer handleClickOutside fra å
lukke dropdown før confirmDelete kjører
- Egenskaper-knapp (tidl. Traits) flyttet til venstre i header-right
slik at Verktøy/status/innstillinger ikke forskyves mellom flater
- «Min arbeidsflate» → «Hjem» for konsistens
- «Traits» → «Egenskaper» for norsk menyspråk
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- ContextHeader brukes nå på både personlig flate og samlinger
- Ny theme.ts: ThemeConfig med hue+saturation per farge, presets
(Standard, Hav, Skog, Solnedgang, Lavendel, Monokrom)
- Fargevelger med hue-stripe (regnbue) + saturation-slider + swatch
per farge (bakgrunn, overflate, aksent)
- Slett arbeidsflate med bekreftelsesdialog og innholdstelling
- Kontekst-velger: grupper, rename, ny, slett — fungerer overalt
- +page.svelte forenklet: ~500 linjer CSS fjernet, bruker ContextHeader
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Lasso-seleksjon → dra flytter alle valgte paneler sammen
- Grid on/off lagres i workspace-metadata (huskes mellom besøk)
- Zoom lagres allerede via kameraposisjon (x, y, zoom)
- ZOOM_MIN senket til 5% for spredte layouts
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Klikk-hold-dra på tom bakgrunn = pan (erstatter midtre museknapp)
- Shift+dra = lasso-seleksjon (som før)
- Kameraposisjon (x, y, zoom) lagres i workspace-metadata og
gjenopprettes ved neste besøk
- Senket ZOOM_MIN til 5% for å tillate zoom ut på store canvas
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Toolbar-knapper (zoom, tilpass, grid, fullskjerm) blokkert av Canvas
sin pointerdown-handler. Fikset med closest('.canvas-toolbar')-sjekk.
- Dobbeltklikk på tom flate kjører zoomToFit() for rask navigasjon.
- Seleksjon-ramme dempet: 1px rgba(accent, 0.4) i stedet for 2px solid.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Forrige versjon sendte total offset fra startposisjon på hvert
pointermove-event, som ble addert gjentatte ganger og akselererte
panelet ut av bildet. Nå beregnes delta fra forrige frame.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Når man drar toppen eller venstre kant av et panel, ble bare størrelsen
endret mens posisjon sto fast — som ga inntrykk av at feil kant beveget
seg. Nå beregner BlockShell posisjons-delta (dx, dy) og parent justerer
x/y tilsvarende, slik at den kanten du drar i følger musepekeren.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Resize-handles ble aldri vist fordi isMobile var true for alle paneler
(MOBILE_BREAKPOINT=768 > typisk panelbredde 400-600px). Fjernet
isMobile-sjekken for resize — handles vises nå alltid unntatt i
fullskjerm og minimert modus.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Resize-handlene i BlockShell bruker negative offsets (-3px) som stikker
utenfor canvas-object divens bounds. Uten overflow: visible fanges ikke
pointer events på kantene.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
overflow: hidden på .blockshell klippet resize-handles (negative offsets).
Endret til overflow: visible, border-radius på header/content i stedet.
Lagt til subtile visulle indikatorer ved hover: L-merker på hjørner,
tynne linjer på kanter. Hardkodede farger → CSS custom properties.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- «Mottak» → «Arbeidsflaten» i alle tilbake-lenker
- goto('/workspace') → goto('/') i ContextHeader
- Slettet NodeEditor.svelte og NewChatDialog.svelte (kun brukt av mottak)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hvert subdomain har én jobb. Offentlig og internt er separate domener.
- synops.no = statisk landingsside + /pub/* + /media/*
- ws.synops.no = appen (SvelteKit + /api/* → maskinrommet)
- workspace.synops.no → redirect til ws.synops.no (legacy)
- Fjernet hostname-sjekker fra hooks.server.ts
- Fjernet LandingPage.svelte (landingsside er statisk HTML)
- Alle API-URLer peker til 127.0.0.1:3100 (ikke sidelinja.org)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
LandingPage.svelte med all CSS og HTML innbakt. Ingen iframe,
ingen ekstern fil-avhengighet. Fungerer i alle nettlesere.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Canvas sin CSS transform bryter position:fixed (kjent CSS-gotcha).
Fullskjerm flytter nå DOM-elementet til body, og tilbake ved exit.
z-index 9999 og bakgrunnsfarge #0a0a0b.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Minimer, maksimer og lukk-knapper ble fanget av header-dragging
pga setPointerCapture. Nå: stopPropagation på controls-div og
individuelle knapper, pluss .closest('.blockshell-controls') sjekk.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Canvas var #f8f9fa (nesten hvit). Nå #0a0a0b.
Grid-linjer fra svart 5% til indigo 6% for synlighet på mørk bakgrunn.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Erstattet alle hardkodede lyse farger (white, #f0f2f5, #f3f4f6)
med mørke (#0a0a0b, #1c1c20, #242428) i alle Svelte-komponenter.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Når redirect_feed er satt i podcast-trait, returnerer maskinrommet
HTTP 301 Moved Permanently med Location-header i stedet for å serve
feeden. iTunes new-feed-url-taggen bevares også i RSS-en for klienter
som ikke følger 301.
Admin-UI: erstatter det enkle tekstfeltet med tre tilstander:
- Inaktiv: knapp "Flytt podcast til annen plattform..."
- Bekreftelse: advarsel + URL-felt + rød "Aktiver redirect"-knapp
- Aktiv: gul statusindikator med deaktiver-knapp
Backend: sjekker redirect_feed tidlig i generate_feed() og returnerer
301 før noe annet arbeid gjøres (DB-oppslag for episodes osv).
Dedikert admin-UI for podcast-trait med riktige skjemafelt:
- iTunes Author, Category (med underkategori-dropdown), Language
- Explicit-avkrysning, Redirect Feed URL
- Erstatter generisk nøkkel/verdi-editor for podcast-traitet
RSS-utvidelser:
- itunes:category støtter nå nested subcategory-element
- itunes:new-feed-url for feed-migrasjon via redirect_feed
- Oppdatert både maskinrommet og synops-rss CLI-verktøy
Ny DrawingInput-komponent som lar brukeren tegne en rask skisse direkte
fra chat-inputen. Åpner fullskjerm-canvas med fargevelger, penseltykkelse,
angre og tøm. Eksporterer som PNG → CAS → media-node med metadata
source=drawing. Følger samme mønster som VoiceRecorder/VideoRecorder.
Ikke whiteboard — dette er "post-it-skisse som input".