Terminals do not work this way.
Terminals do not send modifier keys. Modifiers are swallowed by the terminal and do not get sent down the wire to the host. Terminal input is in terms of character sequences not keyboard events. (Yes, a few real terminals such as the DEC VT520 supported "scancode" modes, but that would break beyond repair what you are actually trying to do, and you are almost certainly not using a DEC VT520 or anything that fully emulates it.) The sequences are pre-composed characters, or ECMA-48 control sequences representing certain non-graphic keys (i.e. function, cursor keypad, editing keypad, and calculator keypad keys).
Programs that use terminal I/O simply do not have this as part of their I/O paradigm.
Terminfo does not have anywhere near all, or even most, of the ECMA-48 control sequences, by the way. It's actually a very inferior way of processing terminal input, ironically because it deals quite badly with key chords that include non-graphic keys and modifier keys. So do not go looking to terminfo to tell you about terminal input.
GUIs, "consoles" on other operating systems, and the low-level HIDs upon which kernel (and some user-space) virtual terminals are based, are different kettles of fish. Those do have the concept of keyboard press/release input events visible to applications. But the POSIX general terminal interface, as employed by ZLE in the Z shell, does not work the way that you think.