introduce widget directive