basic extendable interface for creating elements