Maybe it will make sense if you rearrange the redirections a bit:
<<< Hey > text.txt cat text.txt
Hey is sent to stdin of cat, as a herestring.
text.txt is opened for writing, and truncated. So if any text were in it, it would be gone.
cat is executed with the argument
text.txt. Since a file was provided as an argument, it ignores stdin, so the
Hey is unused.
text.txt was truncated, so when
cat runs through
text.txt the argument, there's nothing to output, so
text.txt, which is the stdout of
cat via redirection, continues to remain empty.