CommonMarkViewer::new takes a source_id: impl std::hash::Hash as an argument. I have some questions about it:
What exactly is it used for? Is it only used for the scroll cache of show_scrollable? If so, perhaps it could be moved from the constructor to show_scrollable to clarify this.
Should the Id be globally unique, or just unique within the parent Ui? That is: is it used directly, or mixed with ui.id() first?