hangwin--mcp-chrome
61 行
1.7 KiB
TypeScript
61 行
1.7 KiB
TypeScript
/**
|
|
* Quick Panel Markdown Renderer
|
|
*
|
|
* Simple markdown renderer for Quick Panel.
|
|
* Currently uses plain text rendering - markdown support to be added later
|
|
* when proper Vue/content-script integration is resolved.
|
|
*/
|
|
|
|
// ============================================================
|
|
// Types
|
|
// ============================================================
|
|
|
|
export interface MarkdownRendererInstance {
|
|
/** Update the markdown content */
|
|
setContent: (content: string, isStreaming?: boolean) => void;
|
|
/** Get current content */
|
|
getContent: () => string;
|
|
/** Dispose resources */
|
|
dispose: () => void;
|
|
}
|
|
|
|
// ============================================================
|
|
// Main Factory
|
|
// ============================================================
|
|
|
|
/**
|
|
* Create a markdown renderer instance that mounts to a container element.
|
|
* Currently renders as plain text - markdown support pending.
|
|
*
|
|
* @param container - The DOM element to render content into
|
|
* @returns Markdown renderer instance with setContent and dispose methods
|
|
*/
|
|
export function createMarkdownRenderer(container: HTMLElement): MarkdownRendererInstance {
|
|
let currentContent = '';
|
|
|
|
// Create a wrapper div for content
|
|
const contentEl = document.createElement('div');
|
|
contentEl.className = 'qp-markdown-content';
|
|
container.appendChild(contentEl);
|
|
|
|
return {
|
|
setContent(newContent: string, _streaming = false) {
|
|
currentContent = newContent;
|
|
// For now, render as plain text with basic whitespace preservation
|
|
contentEl.textContent = newContent;
|
|
},
|
|
|
|
getContent() {
|
|
return currentContent;
|
|
},
|
|
|
|
dispose() {
|
|
try {
|
|
contentEl.remove();
|
|
} catch {
|
|
// Best-effort cleanup
|
|
}
|
|
},
|
|
};
|
|
}
|