Port UI.dynamic to blaze-refactor