and hence hte gradients flow from each output element to all of the input elements

I think by this you mean that the real ‘derivative’ would be the full Jacobian matrix. That is, each output with respect to each input (all combinations).
By doing some more derivatives on paper however, I found that in practice, you only want each output with respect to its corresponding input. That is, for each smax(x_i), you want dsmax(x_i)/dx_i. Which is the first case of the piecewise version of the Jacobian (smax(x) * (1-smax(x))).