Plugins can now ship a web page as the UI of a view or custom editor
(`web = "web/index.html"`), so editors built on web libraries are plugins
rather than part of the core.
- Web views: every file under the page's directory is part of the package
(checked, copied on install, covered by the digest and signature) and
served through the `openidea-plugin` URL scheme, under a per-revision
path with a CSP of its own, into an `<iframe sandbox="allow-scripts">`.
An update or reinstall reloads open pages.
- Frame bridge (`window.openidea`), shared by html bodies and web pages:
theme, messages to the plugin's code, `document.get/edit/replace/onChange`
(versioned edits that join the text editor's undo history, Save and dirty
state), `saveFile`/`openFile` through the IDE's dialogs, and IDE shortcuts
the page leaves alone.
- Custom editor layouts: tab, split (Editor and X) or preview over the text
editor, switchable from the tab's actions.
- New points `fileIcons` and `fileTemplates`; new optional capability
`clipboard` for web views.
- Excalidraw official plugin: `.excalidraw` / `.excalidraw.json` open as an
interactive canvas kept in step with the file's text, with self-hosted
fonts, PNG/SVG export, images, file icons, a New Drawing template and
JSON highlighting. Closes#732.
- Fixes: a lock-order deadlock between listing plugins and refreshing
project pins; the dev server ignored edits under `src/features/plugins`.
- `plugins/build.sh` builds and checks web pages; CI typechecks and tests
them.
Co-authored-by: Deng Liu <[email protected]>
Run oxfmt once over the whole repository (formatting only, no logic changes) and add `pnpm format:check` to the frontend CI job so unformatted code no longer builds up. `.oxfmtrc.json` now skips the generated theme docs, test fixtures and code blocks inside Markdown.
Co-authored-by: jaw52 <[email protected]>
Per the maintainer's decision for #24, no third-party themes are bundled; instead a theme plugin template and docs let the community port themes (IntelliJ also ships few themes, the rest are plugins).
- templates/theme-plugin: manifest-only plugin with an original example (Harbor Night) covering every UI token and an editor scheme (.icls equivalent).
- docs/plugins/themes.md: format, IntelliJ / VS Code porting tables, generated token reference (pnpm gen:theme-docs); drift test fails when tokens.css and the template/reference disagree.
- pnpm theme:import-intellij: dependency-free converter for IntelliJ .theme.json (+ .icls).
- Plugin host: themes may name an editor-scheme merged over the theme; comments allowed in theme files.
- Fixes: a plugin theme's kind now switches the light/dark base; plugin themes go in their own stylesheet so the Appearance accent and editor scheme still layer on top.
Verified: ide-plugin tests, vitest (44), in-app on macOS: installed the template from disk, applied Harbor Night (dark base + teal accent over Islands Light), back to default restored the light theme.
Claude-Session: https://claude.ai/code/session_01VUYsdXA2nkF5v6zsC93dpn