Tuples by sequentially stepping through entries in list of lists
JavaScript (ES6), 59 bytes
Expects a list of lists of positive integers.

f=a=&gt;[a.map(a=&gt;a[0]),...a.some(a=&gt;a[1]&amp;&amp;a.shift())?f(a):[]]

Try it online!
How?
At each iteration:

We output a new list consisting of the first element of each list.
We remove the first element of the first list containing at least 2 elements, and repeat the process. Or we stop the recursion if no such list exists.