# Source code for moderngl_window.context.base.keys

    from typing import Any

    class KeyModifiers:
        """Namespace for storing key modifiers"""

        shift: Any = False
        ctrl: Any = False
        alt: Any = False

        def __repr__(self) -> str:
            return str(self)

        def __str__(self) -> str:
            return "<KeyModifiers shift={} ctrl={} alt={}>".format(self.shift, self.ctrl, self.alt)

    class BaseKeys:
        """
        Namespace for mapping key constants.
        This is simply a template for what keys should be mapped for all window libraries
        """

        # Fallback press/release action when window libraries don't have this
        ACTION_PRESS: Any = "ACTION_PRESS"
        ACTION_RELEASE: Any = "ACTION_RELEASE"

        ESCAPE: Any = "undefined"
        SPACE: Any = "undefined"
        ENTER: Any = "undefined"
        PAGE_UP: Any = "undefined"
        PAGE_DOWN: Any = "undefined"
        LEFT: Any = "undefined"
        RIGHT: Any = "undefined"
        UP: Any = "undefined"
        DOWN: Any = "undefined"
        LEFT_SHIFT: Any = "undefined"
        RIGHT_SHIFT: Any = "undefined"
        LEFT_CTRL: Any = "undefined"

        TAB: Any = "undefined"
        COMMA: Any = "undefined"
        MINUS: Any = "undefined"
        PERIOD: Any = "undefined"
        SLASH: Any = "undefined"
        SEMICOLON: Any = "undefined"
        EQUAL: Any = "undefined"
        LEFT_BRACKET: Any = "undefined"
        RIGHT_BRACKET: Any = "undefined"
        BACKSLASH: Any = "undefined"
        BACKSPACE: Any = "undefined"
        INSERT: Any = "undefined"
        DELETE: Any = "undefined"
        HOME: Any = "undefined"
        END: Any = "undefined"
        CAPS_LOCK: Any = "undefined"

        F1: Any = "undefined"
        F2: Any = "undefined"
        F3: Any = "undefined"
        F4: Any = "undefined"
        F5: Any = "undefined"
        F6: Any = "undefined"
        F7: Any = "undefined"
        F8: Any = "undefined"
        F9: Any = "undefined"
        F10: Any = "undefined"
        F11: Any = "undefined"
        F12: Any = "undefined"

        NUMBER_0: Any = "undefined"
        NUMBER_1: Any = "undefined"
        NUMBER_2: Any = "undefined"
        NUMBER_3: Any = "undefined"
        NUMBER_4: Any = "undefined"
        NUMBER_5: Any = "undefined"
        NUMBER_6: Any = "undefined"
        NUMBER_7: Any = "undefined"
        NUMBER_8: Any = "undefined"
        NUMBER_9: Any = "undefined"

        NUMPAD_0: Any = "undefined"
        NUMPAD_1: Any = "undefined"
        NUMPAD_2: Any = "undefined"
        NUMPAD_3: Any = "undefined"
        NUMPAD_4: Any = "undefined"
        NUMPAD_5: Any = "undefined"
        NUMPAD_6: Any = "undefined"
        NUMPAD_7: Any = "undefined"
        NUMPAD_8: Any = "undefined"
        NUMPAD_9: Any = "undefined"

        A: Any = "undefined"
        B: Any = "undefined"
        C: Any = "undefined"
        D: Any = "undefined"
        E: Any = "undefined"
        F: Any = "undefined"
        G: Any = "undefined"
        H: Any = "undefined"
        I: Any = "undefined"
        J: Any = "undefined"
        K: Any = "undefined"
        L: Any = "undefined"
        M: Any = "undefined"
        N: Any = "undefined"
        O: Any = "undefined"
        P: Any = "undefined"
        Q: Any = "undefined"
        R: Any = "undefined"
        S: Any = "undefined"
        T: Any = "undefined"
        U: Any = "undefined"
        V: Any = "undefined"
        W: Any = "undefined"
        X: Any = "undefined"
        Y: Any = "undefined"
        Z: Any = "undefined"