components: Add Viewer, for interactive preview