Port componentdialog

Port of `componentdialog`.  Also related to issue #93