import React from "react"; import { createRoot } from "react-dom/client"; import Editor from "./Editor"; /** * Mount the Koenig editor into the given DOM element. * * @param {string} elementId - ID of the container element * @param {object} opts * @param {string} [opts.initialJson] - Serialised Lexical JSON (from Ghost) * @param {string} [opts.csrfToken] - CSRF token for API calls * @param {object} [opts.uploadUrls] - { image, media, file } upload endpoint URLs * @param {string} [opts.oembedUrl] - oEmbed proxy endpoint URL * @param {string} [opts.unsplashApiKey] - Unsplash API key for image search */ window.mountEditor = function mountEditor(elementId, opts = {}) { const container = document.getElementById(elementId); if (!container) { console.error(`[editor] Element #${elementId} not found`); return; } let currentJson = opts.initialJson || null; function handleChange(json) { currentJson = json; // Stash the latest JSON in a hidden input for form submission const hidden = document.getElementById("lexical-json-input"); if (hidden) hidden.value = json; } const root = createRoot(container); root.render( ); // Return handle for programmatic access return { getJson: () => currentJson, }; };