UXP does not support contentEditable — forces all rich-text panels into a webview fallback

UXP’s panel DOM does not support the contentEditable attribute. Because every mainstream web rich-text editing library is built directly on contentEditable, this single gap makes it impossible to run any of them natively in a UXP panel — ProseMirror, TipTap, Slate, Quill, Draft.js, and Lexical all fail to initialize.

For a panel whose core feature is rich-text editing, this removes the entire category of available tooling. After attempting a native rewrite, we found no native UXP solution — the only way to preserve the feature was to fall back to a webview, and wait for native contentEditable support before we can drop it.

Minimal reproduction

<div contentEditable="true">Try to place a caret or type here</div>

In a browser this is editable and selectable. In a UXP panel it is not. The element does not accept caret placement or keyboard input. We re-verified this directly on the latest Premiere 2026 build — typing into a bare contentEditable div does nothing. Initializing any ProseMirror/TipTap editor on a mounted node reproduces the same failure, since they rely on contentEditable internally.

What we tried, and why we ended up on

Our plugin (a note-taking panel for Premiere) centers on a rich-text note editor: inline bold/italic/underline/strikethrough, embedded clickable timecodes, and links. On the CEP version this was a ~270-line TipTap editor that worked out of the box, because CEP runs full Chromium.

  1. Native port not possible. TipTap/ProseMirror cannot initialize without contentEditable.

  2. Native rewrite onto textarea attempted, then abandoned. We rebuilt the editor as a dual-mode component: a raw-syntax textarea for editing and a separate read-only formatted preview swapped in on blur. It technically works, but it is a hard downgrade and never reached parity:

    • No WYSIWYG — users edit raw markup instead of formatted text.

    • No cursor format state — no way to ask “is the selection bold?”, so toolbar buttons can’t reflect the caret.

    • Manual caret/selection bookkeeping — every formatting action is string surgery plus manual caret restoration after each re-render.

    • Reinvented paste handling — auto-linkifying URLs and tokenizing pasted timecodes had to be hand-built.

Request
Implement contentEditable support in the UXP panel DOM. This single change would unblock the entire rich-text editor ecosystem and let panels like ours drop the webview fallback entirely.