Scala iterator chunking into fixed-size batches

Scala
def chunked[A](items: Iterator[A], size: Int): Iterator[Vector[A]] =
  require(size > 0, "chunk size must be positive")
  new Iterator[Vector[A]] {
    def hasNext: Boolean = items.hasNext

    def next(): Vector[A] =
      val out = Vector.newBuilder[A]
      var taken = 0
      while taken < size && items.hasNext do
        out += items.next()
        taken += 1
      out.result()
  }

def chunkVector[A](items: Vector[A], size: Int): Vector[Vector[A]] =
  chunked(items.iterator, size).toVector