Thanks! One nice bonus I found is that the component works cleanly with the rich text composer as well - the placeholder still rotates correctly there.
Since it hooks into the composer lifecycle rather than editor-specific internals, it doesn’t rely on Markdown-only selectors, which helps keep it compatible across composer modes.
If Discourse refactors the editor again in future, this should hopefully keep the surface area for breakage fairly small.