port elastic component to new library