WidgetA finished markdown reply drawn as one widget.
Looks like Textual's Markdown (validated against Textual 8.2.8) but
holds no child widgets. Long fence lines fold instead of scrolling.
Markdown source of the finished reply.
The widget id.
Space-separated CSS classes.
Inline classes match MarkdownBlock; block classes mirror block CSS.
The markdown source.
Text that selection offsets index into, one line per row.
Replace the markdown source and re-layout.
Return a visual that lays out rows at the width it renders at.
Return the reply's rows at width, cached per width.
Re-layout when a theme change alters fence highlighting or spacing.
Copy the selected text as the reply reads, not as it wraps.
Soft-wrapped lines rejoin with a space, folded code lines with nothing. Indents, padding, and repeated blank lines drop out.
Open a clicked link with the shared URL safety check.