grid with keyboard nav extension components
rebuild when js changes