Excalidraw-Block-Plugin #136
Labels
No Label
area:auth
area:docs
area:export
area:ops
area:storage
area:supply-chain
auth
backend
blocked
collab
deployment
docs
effort:L
effort:M
effort:S
frontend
plugins
qa
vs-nfd
vs-nfd:blocker
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: stwaidele/dorfteich#136
Loading…
Reference in New Issue
Block a user
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ziel
Neues Block-Plugin „Excalidraw" (handgezeichnete Whiteboard-Skizzen), analog zum bestehenden draw.io-Plugin. Keine Backend-/SDK-/Host-Änderungen nötig — Capability-Fläche (
blockData,ui.enterFullscreen), CSP (frame-src/connect-srcself), Fallback-Renderer ({…, svg}) und Install-/Registry-/Serving-Pfad tragen die Block-Form bereits.Vorbild
packages/plugins/drawio/— das einzige „bundled-app"-Plugin: vendored Sub-App, Vollbild, persistiert{xml, svg}.Umsetzung — neues Paket
packages/plugins/excalidraw/spiegeltdrawio/manifest.json:id:"excalidraw",kind:"code", Block-Extension-Pointid:"diagram",permissions:["blockData","ui"],fallback:{type:"text",value:"[Excalidraw]"}, i18n-Refs.src/plugin.ts(Vorbilddrawio/src/plugin.ts):createPluginmitonRender: gespeichertessvginline;onEdit: Snapshot + Bearbeiten-Knopf, Auto-Öffnen bei leerem Block;openEditor:host.ui.enterFullscreen()+ eingebettetes Excalidraw, Export überexportToSvg, Persistenz{ scene, svg }perhost.blockData.setData;onDestroy → closeEditor → host.ui.exitFullscreen().svgspeichern →PluginFallbackRendererbedient Lese-/Public-Ansicht und Export ohne Backend-Änderung.build.mjs: draw.io-Stil (vendor + esbuild + fflate) empfohlen, weil Excalidraw groß ist (Fonts/roughjs/Worker) und Assets nur unter dem eigenen Asset-Pfad laden darf (CSPfont-src/connect-srcself). Größenlimits: ZIP ≤ 64 MiB, entpackt ≤ 256 MiB (apps/api/src/plugins/plugin.constants.ts). Mermaid-Stil (esbuild-inline) nur, falls das Bundle klein genug bleibt.i18n/de.json,i18n/en.json.docs/developer/extending.md(+docs/de/…) und Plugin-Referenzliste um Excalidraw ergänzen.Offene Punkte
/admin/plugins/excalidraw/preview) verifizieren (Konsole ohne Verstöße).Akzeptanzkriterien
pnpm builderzeugtdist/excalidraw-<v>.zipinnerhalb der 64/256-MiB-Limits.{scene, svg}.pnpm lint+ betroffene Gates grün.Umgesetzt in
c164a03: Referenz-Block-Pluginpackages/plugins/excalidraw/— anders als draw.io als React-npm-Lib per esbuild gebündelt (Controller+React+Excalidraw in plugin.js; Fonts/Locales/Data ausdist/prod/im ZIP-Root, geladen überEXCALIDRAW_ASSET_PATH; CSP bleibt self-only). Lifecycle analog draw.io: Render zeigt gespeichertes SVG, Edit öffnet Vollbild-Excalidraw, „Speichern & Beenden" persistiert{scene, svg}→ Fallback-Renderer bedient Lese-/Public-Ansicht und Exporte ohne Backend-Änderung. Build:excalidraw-1.0.0.zip, 15,5 MiB zip / 22,3 MiB unpacked (Limits 64/256). pnpm-Override@floating-ui/react-dom@2.1.2gegen kaputte Upstream-Dependency (dokumentiert in pnpm-workspace.yaml).Verifiziert: Manifest (SDK) valide; auf Test+Int installiert (mode=optional) und Laufzeit unter Sandbox-CSP bestätigt (Vollbild-Editor rendert komplett inkl. Fonts/Canvas). OFFEN (separat): Installation auf PROD durch Site-Admin (ZIP unter
packages/plugins/excalidraw/dist/).