浏览代码

add metainfo to keyevent (#4287)

* allow for event handlers to ignore args

* use a constant

* dang it darglint

* forgor

* keep the tests but move them to valid place

* add metainfo to keyevent

* format code

* fix pyi files

* generate all prefixes of event types

* change format rule
Khaleel Al-Adhami 6 月之前
父节点
当前提交
b9d73edd66
共有 85 个文件被更改,包括 514 次插入409 次删除
  1. 1 0
      pyproject.toml
  2. 2 7
      reflex/app.py
  3. 7 1
      reflex/components/base/error_boundary.pyi
  4. 7 5
      reflex/components/core/clipboard.pyi
  5. 11 14
      reflex/components/core/upload.pyi
  6. 60 14
      reflex/components/datadisplay/dataeditor.pyi
  7. 56 14
      reflex/components/el/elements/forms.pyi
  8. 3 1
      reflex/components/moment/moment.pyi
  9. 3 1
      reflex/components/radix/primitives/accordion.pyi
  10. 12 4
      reflex/components/radix/primitives/drawer.pyi
  11. 18 6
      reflex/components/radix/primitives/form.pyi
  12. 6 2
      reflex/components/radix/primitives/slider.pyi
  13. 4 5
      reflex/components/radix/themes/color_mode.pyi
  14. 3 1
      reflex/components/radix/themes/components/alert_dialog.pyi
  15. 1 5
      reflex/components/radix/themes/components/avatar.py
  16. 1 5
      reflex/components/radix/themes/components/badge.py
  17. 1 4
      reflex/components/radix/themes/components/button.pyi
  18. 1 4
      reflex/components/radix/themes/components/callout.py
  19. 1 3
      reflex/components/radix/themes/components/card.py
  20. 1 5
      reflex/components/radix/themes/components/checkbox.py
  21. 9 3
      reflex/components/radix/themes/components/checkbox.pyi
  22. 1 4
      reflex/components/radix/themes/components/context_menu.py
  23. 6 2
      reflex/components/radix/themes/components/context_menu.pyi
  24. 1 4
      reflex/components/radix/themes/components/dialog.py
  25. 6 2
      reflex/components/radix/themes/components/dialog.pyi
  26. 1 5
      reflex/components/radix/themes/components/dropdown_menu.py
  27. 6 2
      reflex/components/radix/themes/components/dropdown_menu.pyi
  28. 1 4
      reflex/components/radix/themes/components/hover_card.py
  29. 6 2
      reflex/components/radix/themes/components/hover_card.pyi
  30. 1 4
      reflex/components/radix/themes/components/icon_button.pyi
  31. 1 3
      reflex/components/radix/themes/components/inset.py
  32. 1 4
      reflex/components/radix/themes/components/popover.py
  33. 3 1
      reflex/components/radix/themes/components/popover.pyi
  34. 3 1
      reflex/components/radix/themes/components/radio_cards.pyi
  35. 1 5
      reflex/components/radix/themes/components/radio_group.py
  36. 3 1
      reflex/components/radix/themes/components/radio_group.pyi
  37. 1 3
      reflex/components/radix/themes/components/scroll_area.py
  38. 3 1
      reflex/components/radix/themes/components/segmented_control.pyi
  39. 1 5
      reflex/components/radix/themes/components/select.py
  40. 18 6
      reflex/components/radix/themes/components/select.pyi
  41. 1 4
      reflex/components/radix/themes/components/separator.py
  42. 1 4
      reflex/components/radix/themes/components/slider.py
  43. 12 6
      reflex/components/radix/themes/components/slider.pyi
  44. 1 4
      reflex/components/radix/themes/components/spinner.py
  45. 1 4
      reflex/components/radix/themes/components/switch.py
  46. 3 1
      reflex/components/radix/themes/components/switch.pyi
  47. 1 3
      reflex/components/radix/themes/components/table.py
  48. 1 4
      reflex/components/radix/themes/components/tabs.py
  49. 6 2
      reflex/components/radix/themes/components/tabs.pyi
  50. 1 5
      reflex/components/radix/themes/components/text_area.py
  51. 24 6
      reflex/components/radix/themes/components/text_area.pyi
  52. 1 5
      reflex/components/radix/themes/components/text_field.py
  53. 47 11
      reflex/components/radix/themes/components/text_field.pyi
  54. 1 3
      reflex/components/radix/themes/components/tooltip.py
  55. 4 5
      reflex/components/radix/themes/components/tooltip.pyi
  56. 1 5
      reflex/components/radix/themes/layout/base.py
  57. 1 6
      reflex/components/radix/themes/layout/flex.py
  58. 1 6
      reflex/components/radix/themes/layout/grid.py
  59. 2 8
      reflex/components/radix/themes/typography/blockquote.py
  60. 2 9
      reflex/components/radix/themes/typography/code.py
  61. 2 10
      reflex/components/radix/themes/typography/heading.py
  62. 2 9
      reflex/components/radix/themes/typography/link.py
  63. 2 10
      reflex/components/radix/themes/typography/text.py
  64. 11 4
      reflex/components/react_player/audio.pyi
  65. 9 3
      reflex/components/react_player/react_player.pyi
  66. 11 4
      reflex/components/react_player/video.pyi
  67. 1 3
      reflex/components/recharts/cartesian.pyi
  68. 1 3
      reflex/components/recharts/charts.pyi
  69. 1 3
      reflex/components/recharts/general.pyi
  70. 1 3
      reflex/components/recharts/polar.pyi
  71. 22 6
      reflex/components/suneditor/editor.pyi
  72. 1 10
      reflex/components/tags/iter_tag.py
  73. 2 9
      reflex/constants/__init__.py
  74. 28 10
      reflex/event.py
  75. 1 4
      reflex/experimental/client_state.py
  76. 6 2
      reflex/experimental/layout.pyi
  77. 1 5
      reflex/istate/wrappers.py
  78. 1 3
      reflex/state.py
  79. 19 4
      reflex/utils/pyi_generator.py
  80. 2 9
      reflex/utils/types.py
  81. 2 11
      reflex/vars/base.py
  82. 1 7
      reflex/vars/function.py
  83. 1 3
      tests/units/components/test_component.py
  84. 1 5
      tests/units/test_var.py
  85. 1 5
      tests/units/utils/test_utils.py

+ 1 - 0
pyproject.toml

@@ -91,6 +91,7 @@ build-backend = "poetry.core.masonry.api"
 
 [tool.ruff]
 target-version = "py39"
+lint.isort.split-on-trailing-comma = false
 lint.select = ["B", "D", "E", "F", "I", "SIM", "W"]
 lint.ignore = ["B008", "D205", "E501", "F403", "SIM115"]
 lint.pydocstyle.convention = "google"

+ 2 - 7
reflex/app.py

@@ -48,10 +48,7 @@ from reflex.admin import AdminDash
 from reflex.app_mixins import AppMixin, LifespanMixin, MiddlewareMixin
 from reflex.compiler import compiler
 from reflex.compiler import utils as compiler_utils
-from reflex.compiler.compiler import (
-    ExecutorSafeFunctions,
-    compile_theme,
-)
+from reflex.compiler.compiler import ExecutorSafeFunctions, compile_theme
 from reflex.components.base.app_wrap import AppWrap
 from reflex.components.base.error_boundary import ErrorBoundary
 from reflex.components.base.fragment import Fragment
@@ -79,9 +76,7 @@ from reflex.event import (
     window_alert,
 )
 from reflex.model import Model, get_db_status
-from reflex.page import (
-    DECORATED_PAGES,
-)
+from reflex.page import DECORATED_PAGES
 from reflex.route import (
     get_route_args,
     replace_brackets_with_keywords,

+ 7 - 1
reflex/components/base/error_boundary.pyi

@@ -32,7 +32,13 @@ class ErrorBoundary(Component):
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_error: Optional[EventType[[str, str], BASE_STATE]] = None,
+        on_error: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, str], BASE_STATE],
+            ]
+        ] = None,
         on_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,

+ 7 - 5
reflex/components/core/clipboard.pyi

@@ -6,10 +6,7 @@
 from typing import Any, Dict, List, Optional, Union, overload
 
 from reflex.components.base.fragment import Fragment
-from reflex.event import (
-    BASE_STATE,
-    EventType,
-)
+from reflex.event import BASE_STATE, EventType
 from reflex.style import Style
 from reflex.utils.imports import ImportVar
 from reflex.vars.base import Var
@@ -43,7 +40,12 @@ class Clipboard(Fragment):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_paste: Optional[EventType[[list[tuple[str, str]]], BASE_STATE]] = None,
+        on_paste: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[list[tuple[str, str]]], BASE_STATE],
+            ]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 11 - 14
reflex/components/core/upload.pyi

@@ -6,18 +6,9 @@
 from pathlib import Path
 from typing import Any, ClassVar, Dict, List, Optional, Union, overload
 
-from reflex.components.component import (
-    Component,
-    ComponentNamespace,
-    MemoizationLeaf,
-)
+from reflex.components.component import Component, ComponentNamespace, MemoizationLeaf
 from reflex.constants import Dirs
-from reflex.event import (
-    BASE_STATE,
-    CallableEventSpec,
-    EventSpec,
-    EventType,
-)
+from reflex.event import BASE_STATE, CallableEventSpec, EventSpec, EventType
 from reflex.style import Style
 from reflex.utils.imports import ImportVar
 from reflex.vars import VarData
@@ -120,7 +111,9 @@ class Upload(MemoizationLeaf):
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_drop: Optional[EventType[[Any], BASE_STATE]] = None,
+        on_drop: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[Any], BASE_STATE]]
+        ] = None,
         on_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
@@ -186,7 +179,9 @@ class StyledUpload(Upload):
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_drop: Optional[EventType[[Any], BASE_STATE]] = None,
+        on_drop: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[Any], BASE_STATE]]
+        ] = None,
         on_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
@@ -252,7 +247,9 @@ class UploadNamespace(ComponentNamespace):
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_drop: Optional[EventType[[Any], BASE_STATE]] = None,
+        on_drop: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[Any], BASE_STATE]]
+        ] = None,
         on_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,

+ 60 - 14
reflex/components/datadisplay/dataeditor.pyi

@@ -184,34 +184,80 @@ class DataEditor(NoSSRComponent):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_cell_activated: Optional[EventType[[tuple[int, int]], BASE_STATE]] = None,
-        on_cell_clicked: Optional[EventType[[tuple[int, int]], BASE_STATE]] = None,
-        on_cell_context_menu: Optional[EventType[[tuple[int, int]], BASE_STATE]] = None,
+        on_cell_activated: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]]
+        ] = None,
+        on_cell_clicked: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]]
+        ] = None,
+        on_cell_context_menu: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]]
+        ] = None,
         on_cell_edited: Optional[
-            EventType[[tuple[int, int], GridCell], BASE_STATE]
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[tuple[int, int]], BASE_STATE],
+                EventType[[tuple[int, int], GridCell], BASE_STATE],
+            ]
         ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_column_resize: Optional[EventType[[GridColumn, int], BASE_STATE]] = None,
+        on_column_resize: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[GridColumn], BASE_STATE],
+                EventType[[GridColumn, int], BASE_STATE],
+            ]
+        ] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
-        on_delete: Optional[EventType[[GridSelection], BASE_STATE]] = None,
+        on_delete: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[GridSelection], BASE_STATE]]
+        ] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
         on_finished_editing: Optional[
-            EventType[[Union[GridCell, None], tuple[int, int]], BASE_STATE]
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[Union[GridCell, None]], BASE_STATE],
+                EventType[[Union[GridCell, None], tuple[int, int]], BASE_STATE],
+            ]
         ] = None,
         on_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_group_header_clicked: Optional[
-            EventType[[tuple[int, int], GridCell], BASE_STATE]
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[tuple[int, int]], BASE_STATE],
+                EventType[[tuple[int, int], GridCell], BASE_STATE],
+            ]
         ] = None,
         on_group_header_context_menu: Optional[
-            EventType[[int, GroupHeaderClickedEventArgs], BASE_STATE]
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[int], BASE_STATE],
+                EventType[[int, GroupHeaderClickedEventArgs], BASE_STATE],
+            ]
+        ] = None,
+        on_group_header_renamed: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, str], BASE_STATE],
+            ]
+        ] = None,
+        on_header_clicked: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]]
         ] = None,
-        on_group_header_renamed: Optional[EventType[[str, str], BASE_STATE]] = None,
-        on_header_clicked: Optional[EventType[[tuple[int, int]], BASE_STATE]] = None,
         on_header_context_menu: Optional[
-            EventType[[tuple[int, int]], BASE_STATE]
+            Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]]
+        ] = None,
+        on_header_menu_click: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[int], BASE_STATE],
+                EventType[[int, Rectangle], BASE_STATE],
+            ]
+        ] = None,
+        on_item_hovered: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[tuple[int, int]], BASE_STATE]]
         ] = None,
-        on_header_menu_click: Optional[EventType[[int, Rectangle], BASE_STATE]] = None,
-        on_item_hovered: Optional[EventType[[tuple[int, int]], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,

+ 56 - 14
reflex/components/el/elements/forms.pyi

@@ -8,7 +8,7 @@ from typing import Any, Dict, Optional, Tuple, Union, overload
 from jinja2 import Environment
 
 from reflex.components.el.element import Element
-from reflex.event import BASE_STATE, EventType
+from reflex.event import BASE_STATE, EventType, KeyInputInfo
 from reflex.style import Style
 from reflex.utils.imports import ImportDict
 from reflex.vars.base import Var
@@ -340,8 +340,12 @@ class Form(BaseHTML):
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_submit: Optional[
             Union[
-                EventType[[Dict[str, Any]], BASE_STATE],
-                EventType[[Dict[str, str]], BASE_STATE],
+                Union[
+                    EventType[[], BASE_STATE], EventType[[Dict[str, Any]], BASE_STATE]
+                ],
+                Union[
+                    EventType[[], BASE_STATE], EventType[[Dict[str, str]], BASE_STATE]
+                ],
             ]
         ] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
@@ -470,14 +474,32 @@ class Input(BaseHTML):
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
-        on_blur: Optional[EventType[[str], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_blur: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_focus: Optional[EventType[[str], BASE_STATE]] = None,
-        on_key_down: Optional[EventType[[str], BASE_STATE]] = None,
-        on_key_up: Optional[EventType[[str], BASE_STATE]] = None,
+        on_focus: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
+        on_key_down: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, KeyInputInfo], BASE_STATE],
+            ]
+        ] = None,
+        on_key_up: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, KeyInputInfo], BASE_STATE],
+            ]
+        ] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
@@ -1252,7 +1274,9 @@ class Select(BaseHTML):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
@@ -1369,14 +1393,32 @@ class Textarea(BaseHTML):
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
-        on_blur: Optional[EventType[[str], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_blur: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_focus: Optional[EventType[[str], BASE_STATE]] = None,
-        on_key_down: Optional[EventType[[str], BASE_STATE]] = None,
-        on_key_up: Optional[EventType[[str], BASE_STATE]] = None,
+        on_focus: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
+        on_key_down: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, KeyInputInfo], BASE_STATE],
+            ]
+        ] = None,
+        on_key_up: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, KeyInputInfo], BASE_STATE],
+            ]
+        ] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,

+ 3 - 1
reflex/components/moment/moment.pyi

@@ -59,7 +59,9 @@ class Moment(NoSSRComponent):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,

+ 3 - 1
reflex/components/radix/primitives/accordion.pyi

@@ -262,7 +262,9 @@ class AccordionRoot(AccordionComponent):
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
-        on_value_change: Optional[EventType[[str | List[str]], BASE_STATE]] = None,
+        on_value_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str | List[str]], BASE_STATE]]
+        ] = None,
         **props,
     ) -> "AccordionRoot":
         """Create the component.

+ 12 - 4
reflex/components/radix/primitives/drawer.pyi

@@ -91,7 +91,9 @@ class DrawerRoot(DrawerComponent):
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
-        on_animation_end: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_animation_end: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
@@ -105,7 +107,9 @@ class DrawerRoot(DrawerComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
@@ -573,7 +577,9 @@ class Drawer(ComponentNamespace):
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
-        on_animation_end: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_animation_end: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
@@ -587,7 +593,9 @@ class Drawer(ComponentNamespace):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 18 - 6
reflex/components/radix/primitives/form.pyi

@@ -131,8 +131,12 @@ class FormRoot(FormComponent, HTMLForm):
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_submit: Optional[
             Union[
-                EventType[[Dict[str, Any]], BASE_STATE],
-                EventType[[Dict[str, str]], BASE_STATE],
+                Union[
+                    EventType[[], BASE_STATE], EventType[[Dict[str, Any]], BASE_STATE]
+                ],
+                Union[
+                    EventType[[], BASE_STATE], EventType[[Dict[str, str]], BASE_STATE]
+                ],
             ]
         ] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
@@ -603,8 +607,12 @@ class Form(FormRoot):
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_submit: Optional[
             Union[
-                EventType[[Dict[str, Any]], BASE_STATE],
-                EventType[[Dict[str, str]], BASE_STATE],
+                Union[
+                    EventType[[], BASE_STATE], EventType[[Dict[str, Any]], BASE_STATE]
+                ],
+                Union[
+                    EventType[[], BASE_STATE], EventType[[Dict[str, str]], BASE_STATE]
+                ],
             ]
         ] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
@@ -732,8 +740,12 @@ class FormNamespace(ComponentNamespace):
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_submit: Optional[
             Union[
-                EventType[[Dict[str, Any]], BASE_STATE],
-                EventType[[Dict[str, str]], BASE_STATE],
+                Union[
+                    EventType[[], BASE_STATE], EventType[[Dict[str, Any]], BASE_STATE]
+                ],
+                Union[
+                    EventType[[], BASE_STATE], EventType[[Dict[str, str]], BASE_STATE]
+                ],
             ]
         ] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,

+ 6 - 2
reflex/components/radix/primitives/slider.pyi

@@ -109,8 +109,12 @@ class SliderRoot(SliderComponent):
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
-        on_value_change: Optional[EventType[[List[int]], BASE_STATE]] = None,
-        on_value_commit: Optional[EventType[[List[int]], BASE_STATE]] = None,
+        on_value_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[List[int]], BASE_STATE]]
+        ] = None,
+        on_value_commit: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[List[int]], BASE_STATE]]
+        ] = None,
         **props,
     ) -> "SliderRoot":
         """Create the component.

+ 4 - 5
reflex/components/radix/themes/color_mode.pyi

@@ -11,10 +11,7 @@ from reflex.components.core.cond import Cond
 from reflex.components.lucide.icon import Icon
 from reflex.components.radix.themes.components.switch import Switch
 from reflex.event import BASE_STATE, EventType
-from reflex.style import (
-    Style,
-    color_mode,
-)
+from reflex.style import Style, color_mode
 from reflex.vars.base import Var
 
 from .components.icon_button import IconButton
@@ -395,7 +392,9 @@ class ColorModeSwitch(Switch):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,

+ 3 - 1
reflex/components/radix/themes/components/alert_dialog.pyi

@@ -43,7 +43,9 @@ class AlertDialogRoot(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 1 - 5
reflex/components/radix/themes/components/avatar.py

@@ -5,11 +5,7 @@ from typing import Literal
 from reflex.components.core.breakpoints import Responsive
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralRadius,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, LiteralRadius, RadixThemesComponent
 
 LiteralSize = Literal["1", "2", "3", "4", "5", "6", "7", "8", "9"]
 

+ 1 - 5
reflex/components/radix/themes/components/badge.py

@@ -6,11 +6,7 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.components.el import elements
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralRadius,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, LiteralRadius, RadixThemesComponent
 
 
 class Badge(elements.Span, RadixThemesComponent):

+ 1 - 4
reflex/components/radix/themes/components/button.pyi

@@ -11,10 +11,7 @@ from reflex.event import BASE_STATE, EventType
 from reflex.style import Style
 from reflex.vars.base import Var
 
-from ..base import (
-    RadixLoadingProp,
-    RadixThemesComponent,
-)
+from ..base import RadixLoadingProp, RadixThemesComponent
 
 LiteralButtonSize = Literal["1", "2", "3", "4"]
 

+ 1 - 4
reflex/components/radix/themes/components/callout.py

@@ -9,10 +9,7 @@ from reflex.components.el import elements
 from reflex.components.lucide.icon import Icon
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
 
 CalloutVariant = Literal["soft", "surface", "outline"]
 

+ 1 - 3
reflex/components/radix/themes/components/card.py

@@ -6,9 +6,7 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.components.el import elements
 from reflex.vars.base import Var
 
-from ..base import (
-    RadixThemesComponent,
-)
+from ..base import RadixThemesComponent
 
 
 class Card(elements.Div, RadixThemesComponent):

+ 1 - 5
reflex/components/radix/themes/components/checkbox.py

@@ -9,11 +9,7 @@ from reflex.components.radix.themes.typography.text import Text
 from reflex.event import EventHandler, passthrough_event_spec
 from reflex.vars.base import LiteralVar, Var
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralSpacing,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, LiteralSpacing, RadixThemesComponent
 
 LiteralCheckboxSize = Literal["1", "2", "3"]
 LiteralCheckboxVariant = Literal["classic", "surface", "soft"]

+ 9 - 3
reflex/components/radix/themes/components/checkbox.pyi

@@ -116,7 +116,9 @@ class Checkbox(RadixThemesComponent):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
@@ -264,7 +266,9 @@ class HighLevelCheckbox(RadixThemesComponent):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
@@ -409,7 +413,9 @@ class CheckboxNamespace(ComponentNamespace):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,

+ 1 - 4
reflex/components/radix/themes/components/context_menu.py

@@ -7,10 +7,7 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
 
 LiteralDirType = Literal["ltr", "rtl"]
 

+ 6 - 2
reflex/components/radix/themes/components/context_menu.pyi

@@ -47,7 +47,9 @@ class ContextMenuRoot(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
@@ -330,7 +332,9 @@ class ContextMenuSub(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 1 - 4
reflex/components/radix/themes/components/dialog.py

@@ -8,10 +8,7 @@ from reflex.components.el import elements
 from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
 from reflex.vars.base import Var
 
-from ..base import (
-    RadixThemesComponent,
-    RadixThemesTriggerComponent,
-)
+from ..base import RadixThemesComponent, RadixThemesTriggerComponent
 
 
 class DialogRoot(RadixThemesComponent):

+ 6 - 2
reflex/components/radix/themes/components/dialog.pyi

@@ -41,7 +41,9 @@ class DialogRoot(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
@@ -391,7 +393,9 @@ class Dialog(ComponentNamespace):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 1 - 5
reflex/components/radix/themes/components/dropdown_menu.py

@@ -7,11 +7,7 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-    RadixThemesTriggerComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent, RadixThemesTriggerComponent
 
 LiteralDirType = Literal["ltr", "rtl"]
 

+ 6 - 2
reflex/components/radix/themes/components/dropdown_menu.pyi

@@ -49,7 +49,9 @@ class DropdownMenuRoot(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
@@ -367,7 +369,9 @@ class DropdownMenuSub(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 1 - 4
reflex/components/radix/themes/components/hover_card.py

@@ -8,10 +8,7 @@ from reflex.components.el import elements
 from reflex.event import EventHandler, passthrough_event_spec
 from reflex.vars.base import Var
 
-from ..base import (
-    RadixThemesComponent,
-    RadixThemesTriggerComponent,
-)
+from ..base import RadixThemesComponent, RadixThemesTriggerComponent
 
 
 class HoverCardRoot(RadixThemesComponent):

+ 6 - 2
reflex/components/radix/themes/components/hover_card.pyi

@@ -43,7 +43,9 @@ class HoverCardRoot(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
@@ -286,7 +288,9 @@ class HoverCard(ComponentNamespace):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 1 - 4
reflex/components/radix/themes/components/icon_button.pyi

@@ -11,10 +11,7 @@ from reflex.event import BASE_STATE, EventType
 from reflex.style import Style
 from reflex.vars.base import Var
 
-from ..base import (
-    RadixLoadingProp,
-    RadixThemesComponent,
-)
+from ..base import RadixLoadingProp, RadixThemesComponent
 
 LiteralButtonSize = Literal["1", "2", "3", "4"]
 

+ 1 - 3
reflex/components/radix/themes/components/inset.py

@@ -6,9 +6,7 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.components.el import elements
 from reflex.vars.base import Var
 
-from ..base import (
-    RadixThemesComponent,
-)
+from ..base import RadixThemesComponent
 
 LiteralButtonSize = Literal["1", "2", "3", "4"]
 

+ 1 - 4
reflex/components/radix/themes/components/popover.py

@@ -8,10 +8,7 @@ from reflex.components.el import elements
 from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spec
 from reflex.vars.base import Var
 
-from ..base import (
-    RadixThemesComponent,
-    RadixThemesTriggerComponent,
-)
+from ..base import RadixThemesComponent, RadixThemesTriggerComponent
 
 
 class PopoverRoot(RadixThemesComponent):

+ 3 - 1
reflex/components/radix/themes/components/popover.pyi

@@ -42,7 +42,9 @@ class PopoverRoot(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 3 - 1
reflex/components/radix/themes/components/radio_cards.pyi

@@ -177,7 +177,9 @@ class RadioCardsRoot(RadixThemesComponent):
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
-        on_value_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_value_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         **props,
     ) -> "RadioCardsRoot":
         """Create a new component instance.

+ 1 - 5
reflex/components/radix/themes/components/radio_group.py

@@ -14,11 +14,7 @@ from reflex.utils import types
 from reflex.vars.base import LiteralVar, Var
 from reflex.vars.sequence import StringVar
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralSpacing,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, LiteralSpacing, RadixThemesComponent
 
 LiteralFlexDirection = Literal["row", "column", "row-reverse", "column-reverse"]
 

+ 3 - 1
reflex/components/radix/themes/components/radio_group.pyi

@@ -113,7 +113,9 @@ class RadioGroupRoot(RadixThemesComponent):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,

+ 1 - 3
reflex/components/radix/themes/components/scroll_area.py

@@ -4,9 +4,7 @@ from typing import Literal
 
 from reflex.vars.base import Var
 
-from ..base import (
-    RadixThemesComponent,
-)
+from ..base import RadixThemesComponent
 
 
 class ScrollArea(RadixThemesComponent):

+ 3 - 1
reflex/components/radix/themes/components/segmented_control.pyi

@@ -117,7 +117,9 @@ class SegmentedControlRoot(RadixThemesComponent):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str | List[str]], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str | List[str]], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,

+ 1 - 5
reflex/components/radix/themes/components/select.py

@@ -8,11 +8,7 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.event import no_args_event_spec, passthrough_event_spec
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralRadius,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, LiteralRadius, RadixThemesComponent
 
 
 class SelectRoot(RadixThemesComponent):

+ 18 - 6
reflex/components/radix/themes/components/select.pyi

@@ -44,7 +44,9 @@ class SelectRoot(RadixThemesComponent):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
@@ -57,7 +59,9 @@ class SelectRoot(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
@@ -685,7 +689,9 @@ class HighLevelSelect(SelectRoot):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
@@ -698,7 +704,9 @@ class HighLevelSelect(SelectRoot):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
@@ -861,7 +869,9 @@ class Select(ComponentNamespace):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
@@ -874,7 +884,9 @@ class Select(ComponentNamespace):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 1 - 4
reflex/components/radix/themes/components/separator.py

@@ -5,10 +5,7 @@ from typing import Literal
 from reflex.components.core.breakpoints import Responsive
 from reflex.vars.base import LiteralVar, Var
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
 
 LiteralSeperatorSize = Literal["1", "2", "3", "4"]
 

+ 1 - 4
reflex/components/radix/themes/components/slider.py

@@ -9,10 +9,7 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.event import EventHandler, passthrough_event_spec
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
 
 on_value_event_spec = (
     passthrough_event_spec(list[Union[int, float]]),

+ 12 - 6
reflex/components/radix/themes/components/slider.pyi

@@ -142,9 +142,12 @@ class Slider(RadixThemesComponent):
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
         on_change: Optional[
             Union[
-                EventType[[list[Union[int, float]]], BASE_STATE],
-                EventType[[list[int]], BASE_STATE],
-                EventType[[list[float]], BASE_STATE],
+                Union[
+                    EventType[[], BASE_STATE],
+                    EventType[[list[Union[int, float]]], BASE_STATE],
+                ],
+                Union[EventType[[], BASE_STATE], EventType[[list[int]], BASE_STATE]],
+                Union[EventType[[], BASE_STATE], EventType[[list[float]], BASE_STATE]],
             ]
         ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
@@ -163,9 +166,12 @@ class Slider(RadixThemesComponent):
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_value_commit: Optional[
             Union[
-                EventType[[list[Union[int, float]]], BASE_STATE],
-                EventType[[list[int]], BASE_STATE],
-                EventType[[list[float]], BASE_STATE],
+                Union[
+                    EventType[[], BASE_STATE],
+                    EventType[[list[Union[int, float]]], BASE_STATE],
+                ],
+                Union[EventType[[], BASE_STATE], EventType[[list[int]], BASE_STATE]],
+                Union[EventType[[], BASE_STATE], EventType[[list[float]], BASE_STATE]],
             ]
         ] = None,
         **props,

+ 1 - 4
reflex/components/radix/themes/components/spinner.py

@@ -5,10 +5,7 @@ from typing import Literal
 from reflex.components.core.breakpoints import Responsive
 from reflex.vars.base import Var
 
-from ..base import (
-    RadixLoadingProp,
-    RadixThemesComponent,
-)
+from ..base import RadixLoadingProp, RadixThemesComponent
 
 LiteralSpinnerSize = Literal["1", "2", "3"]
 

+ 1 - 4
reflex/components/radix/themes/components/switch.py

@@ -6,10 +6,7 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.event import EventHandler, passthrough_event_spec
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
 
 LiteralSwitchSize = Literal["1", "2", "3"]
 

+ 3 - 1
reflex/components/radix/themes/components/switch.pyi

@@ -119,7 +119,9 @@ class Switch(RadixThemesComponent):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,

+ 1 - 3
reflex/components/radix/themes/components/table.py

@@ -7,9 +7,7 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.components.el import elements
 from reflex.vars.base import Var
 
-from ..base import (
-    RadixThemesComponent,
-)
+from ..base import RadixThemesComponent
 
 
 class TableRoot(elements.Table, RadixThemesComponent):

+ 1 - 4
reflex/components/radix/themes/components/tabs.py

@@ -10,10 +10,7 @@ from reflex.components.core.colors import color
 from reflex.event import EventHandler, passthrough_event_spec
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
 
 vertical_orientation_css = "&[data-orientation='vertical']"
 

+ 6 - 2
reflex/components/radix/themes/components/tabs.pyi

@@ -41,7 +41,9 @@ class TabsRoot(RadixThemesComponent):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
@@ -341,7 +343,9 @@ class Tabs(ComponentNamespace):
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,

+ 1 - 5
reflex/components/radix/themes/components/text_area.py

@@ -8,11 +8,7 @@ from reflex.components.core.debounce import DebounceInput
 from reflex.components.el import elements
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralRadius,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, LiteralRadius, RadixThemesComponent
 
 LiteralTextAreaSize = Literal["1", "2", "3"]
 

+ 24 - 6
reflex/components/radix/themes/components/text_area.pyi

@@ -7,7 +7,7 @@ from typing import Any, Dict, Literal, Optional, Union, overload
 
 from reflex.components.core.breakpoints import Breakpoints
 from reflex.components.el import elements
-from reflex.event import BASE_STATE, EventType
+from reflex.event import BASE_STATE, EventType, KeyInputInfo
 from reflex.style import Style
 from reflex.vars.base import Var
 
@@ -168,14 +168,32 @@ class TextArea(RadixThemesComponent, elements.Textarea):
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
-        on_blur: Optional[EventType[[str], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_blur: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_focus: Optional[EventType[[str], BASE_STATE]] = None,
-        on_key_down: Optional[EventType[[str], BASE_STATE]] = None,
-        on_key_up: Optional[EventType[[str], BASE_STATE]] = None,
+        on_focus: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
+        on_key_down: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, KeyInputInfo], BASE_STATE],
+            ]
+        ] = None,
+        on_key_up: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, KeyInputInfo], BASE_STATE],
+            ]
+        ] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,

+ 1 - 5
reflex/components/radix/themes/components/text_field.py

@@ -11,11 +11,7 @@ from reflex.components.el import elements
 from reflex.event import EventHandler, input_event, key_event
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralRadius,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, LiteralRadius, RadixThemesComponent
 
 LiteralTextFieldSize = Literal["1", "2", "3"]
 LiteralTextFieldVariant = Literal["classic", "surface", "soft"]

+ 47 - 11
reflex/components/radix/themes/components/text_field.pyi

@@ -8,7 +8,7 @@ from typing import Any, Dict, Literal, Optional, Union, overload
 from reflex.components.component import ComponentNamespace
 from reflex.components.core.breakpoints import Breakpoints
 from reflex.components.el import elements
-from reflex.event import BASE_STATE, EventType
+from reflex.event import BASE_STATE, EventType, KeyInputInfo
 from reflex.style import Style
 from reflex.vars.base import Var
 
@@ -149,14 +149,32 @@ class TextFieldRoot(elements.Div, RadixThemesComponent):
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
-        on_blur: Optional[EventType[[str], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_blur: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_focus: Optional[EventType[[str], BASE_STATE]] = None,
-        on_key_down: Optional[EventType[[str], BASE_STATE]] = None,
-        on_key_up: Optional[EventType[[str], BASE_STATE]] = None,
+        on_focus: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
+        on_key_down: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, KeyInputInfo], BASE_STATE],
+            ]
+        ] = None,
+        on_key_up: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, KeyInputInfo], BASE_STATE],
+            ]
+        ] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
@@ -466,14 +484,32 @@ class TextField(ComponentNamespace):
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
-        on_blur: Optional[EventType[[str], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_blur: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_focus: Optional[EventType[[str], BASE_STATE]] = None,
-        on_key_down: Optional[EventType[[str], BASE_STATE]] = None,
-        on_key_up: Optional[EventType[[str], BASE_STATE]] = None,
+        on_focus: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
+        on_key_down: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, KeyInputInfo], BASE_STATE],
+            ]
+        ] = None,
+        on_key_up: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, KeyInputInfo], BASE_STATE],
+            ]
+        ] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,

+ 1 - 3
reflex/components/radix/themes/components/tooltip.py

@@ -7,9 +7,7 @@ from reflex.event import EventHandler, no_args_event_spec, passthrough_event_spe
 from reflex.utils import format
 from reflex.vars.base import Var
 
-from ..base import (
-    RadixThemesComponent,
-)
+from ..base import RadixThemesComponent
 
 LiteralSideType = Literal[
     "top",

+ 4 - 5
reflex/components/radix/themes/components/tooltip.pyi

@@ -5,10 +5,7 @@
 # ------------------------------------------------------
 from typing import Any, Dict, Literal, Optional, Union, overload
 
-from reflex.event import (
-    BASE_STATE,
-    EventType,
-)
+from reflex.event import BASE_STATE, EventType
 from reflex.style import Style
 from reflex.vars.base import Var
 
@@ -79,7 +76,9 @@ class Tooltip(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_pointer_down_outside: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,

+ 1 - 5
reflex/components/radix/themes/layout/base.py

@@ -7,11 +7,7 @@ from typing import Literal
 from reflex.components.core.breakpoints import Responsive
 from reflex.vars.base import Var
 
-from ..base import (
-    CommonMarginProps,
-    LiteralSpacing,
-    RadixThemesComponent,
-)
+from ..base import CommonMarginProps, LiteralSpacing, RadixThemesComponent
 
 LiteralBoolNumber = Literal["0", "1"]
 

+ 1 - 6
reflex/components/radix/themes/layout/flex.py

@@ -8,12 +8,7 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.components.el import elements
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAlign,
-    LiteralJustify,
-    LiteralSpacing,
-    RadixThemesComponent,
-)
+from ..base import LiteralAlign, LiteralJustify, LiteralSpacing, RadixThemesComponent
 
 LiteralFlexDirection = Literal["row", "column", "row-reverse", "column-reverse"]
 LiteralFlexWrap = Literal["nowrap", "wrap", "wrap-reverse"]

+ 1 - 6
reflex/components/radix/themes/layout/grid.py

@@ -8,12 +8,7 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.components.el import elements
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAlign,
-    LiteralJustify,
-    LiteralSpacing,
-    RadixThemesComponent,
-)
+from ..base import LiteralAlign, LiteralJustify, LiteralSpacing, RadixThemesComponent
 
 LiteralGridFlow = Literal["row", "column", "dense", "row-dense", "column-dense"]
 

+ 2 - 8
reflex/components/radix/themes/typography/blockquote.py

@@ -9,14 +9,8 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.components.el import elements
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
-from .base import (
-    LiteralTextSize,
-    LiteralTextWeight,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
+from .base import LiteralTextSize, LiteralTextWeight
 
 
 class Blockquote(elements.Blockquote, RadixThemesComponent):

+ 2 - 9
reflex/components/radix/themes/typography/code.py

@@ -9,15 +9,8 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.components.el import elements
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralVariant,
-    RadixThemesComponent,
-)
-from .base import (
-    LiteralTextSize,
-    LiteralTextWeight,
-)
+from ..base import LiteralAccentColor, LiteralVariant, RadixThemesComponent
+from .base import LiteralTextSize, LiteralTextWeight
 
 
 class Code(elements.Code, RadixThemesComponent):

+ 2 - 10
reflex/components/radix/themes/typography/heading.py

@@ -9,16 +9,8 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.components.el import elements
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
-from .base import (
-    LiteralTextAlign,
-    LiteralTextSize,
-    LiteralTextTrim,
-    LiteralTextWeight,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
+from .base import LiteralTextAlign, LiteralTextSize, LiteralTextTrim, LiteralTextWeight
 
 
 class Heading(elements.H1, RadixThemesComponent):

+ 2 - 9
reflex/components/radix/themes/typography/link.py

@@ -16,15 +16,8 @@ from reflex.components.next.link import NextLink
 from reflex.utils.imports import ImportDict
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
-from .base import (
-    LiteralTextSize,
-    LiteralTextTrim,
-    LiteralTextWeight,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
+from .base import LiteralTextSize, LiteralTextTrim, LiteralTextWeight
 
 LiteralLinkUnderline = Literal["auto", "hover", "always", "none"]
 

+ 2 - 10
reflex/components/radix/themes/typography/text.py

@@ -12,16 +12,8 @@ from reflex.components.core.breakpoints import Responsive
 from reflex.components.el import elements
 from reflex.vars.base import Var
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
-from .base import (
-    LiteralTextAlign,
-    LiteralTextSize,
-    LiteralTextTrim,
-    LiteralTextWeight,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
+from .base import LiteralTextAlign, LiteralTextSize, LiteralTextTrim, LiteralTextWeight
 
 LiteralType = Literal[
     "p",

+ 11 - 4
reflex/components/react_player/audio.pyi

@@ -42,7 +42,9 @@ class Audio(ReactPlayer):
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_disable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_duration: Optional[EventType[[float], BASE_STATE]] = None,
+        on_duration: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[float], BASE_STATE]]
+        ] = None,
         on_enable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_ended: Optional[EventType[[], BASE_STATE]] = None,
         on_error: Optional[EventType[[], BASE_STATE]] = None,
@@ -60,13 +62,18 @@ class Audio(ReactPlayer):
         on_playback_quality_change: Optional[EventType[[], BASE_STATE]] = None,
         on_playback_rate_change: Optional[EventType[[], BASE_STATE]] = None,
         on_progress: Optional[
-            EventType[
-                [reflex.components.react_player.react_player.Progress], BASE_STATE
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[
+                    [reflex.components.react_player.react_player.Progress], BASE_STATE
+                ],
             ]
         ] = None,
         on_ready: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
-        on_seek: Optional[EventType[[float], BASE_STATE]] = None,
+        on_seek: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[float], BASE_STATE]]
+        ] = None,
         on_start: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 9 - 3
reflex/components/react_player/react_player.pyi

@@ -47,7 +47,9 @@ class ReactPlayer(NoSSRComponent):
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_disable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_duration: Optional[EventType[[float], BASE_STATE]] = None,
+        on_duration: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[float], BASE_STATE]]
+        ] = None,
         on_enable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_ended: Optional[EventType[[], BASE_STATE]] = None,
         on_error: Optional[EventType[[], BASE_STATE]] = None,
@@ -64,10 +66,14 @@ class ReactPlayer(NoSSRComponent):
         on_play: Optional[EventType[[], BASE_STATE]] = None,
         on_playback_quality_change: Optional[EventType[[], BASE_STATE]] = None,
         on_playback_rate_change: Optional[EventType[[], BASE_STATE]] = None,
-        on_progress: Optional[EventType[[Progress], BASE_STATE]] = None,
+        on_progress: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[Progress], BASE_STATE]]
+        ] = None,
         on_ready: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
-        on_seek: Optional[EventType[[float], BASE_STATE]] = None,
+        on_seek: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[float], BASE_STATE]]
+        ] = None,
         on_start: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 11 - 4
reflex/components/react_player/video.pyi

@@ -42,7 +42,9 @@ class Video(ReactPlayer):
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_disable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
-        on_duration: Optional[EventType[[float], BASE_STATE]] = None,
+        on_duration: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[float], BASE_STATE]]
+        ] = None,
         on_enable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_ended: Optional[EventType[[], BASE_STATE]] = None,
         on_error: Optional[EventType[[], BASE_STATE]] = None,
@@ -60,13 +62,18 @@ class Video(ReactPlayer):
         on_playback_quality_change: Optional[EventType[[], BASE_STATE]] = None,
         on_playback_rate_change: Optional[EventType[[], BASE_STATE]] = None,
         on_progress: Optional[
-            EventType[
-                [reflex.components.react_player.react_player.Progress], BASE_STATE
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[
+                    [reflex.components.react_player.react_player.Progress], BASE_STATE
+                ],
             ]
         ] = None,
         on_ready: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
-        on_seek: Optional[EventType[[float], BASE_STATE]] = None,
+        on_seek: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[float], BASE_STATE]]
+        ] = None,
         on_start: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 1 - 3
reflex/components/recharts/cartesian.pyi

@@ -10,9 +10,7 @@ from reflex.event import BASE_STATE, EventType
 from reflex.style import Style
 from reflex.vars.base import Var
 
-from .recharts import (
-    Recharts,
-)
+from .recharts import Recharts
 
 class Axis(Recharts):
     @overload

+ 1 - 3
reflex/components/recharts/charts.pyi

@@ -10,9 +10,7 @@ from reflex.event import BASE_STATE, EventType
 from reflex.style import Style
 from reflex.vars.base import Var
 
-from .recharts import (
-    RechartsCharts,
-)
+from .recharts import RechartsCharts
 
 class ChartBase(RechartsCharts):
     @overload

+ 1 - 3
reflex/components/recharts/general.pyi

@@ -11,9 +11,7 @@ from reflex.event import BASE_STATE, EventType
 from reflex.style import Style
 from reflex.vars.base import Var
 
-from .recharts import (
-    Recharts,
-)
+from .recharts import Recharts
 
 class ResponsiveContainer(Recharts, MemoizationLeaf):
     @overload

+ 1 - 3
reflex/components/recharts/polar.pyi

@@ -10,9 +10,7 @@ from reflex.event import BASE_STATE, EventType
 from reflex.style import Style
 from reflex.vars.base import Var
 
-from .recharts import (
-    Recharts,
-)
+from .recharts import Recharts
 
 class Pie(Recharts):
     def get_event_triggers(self) -> dict[str, Union[Var, Any]]: ...

+ 22 - 6
reflex/components/suneditor/editor.pyi

@@ -127,8 +127,12 @@ class Editor(NoSSRComponent):
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
-        on_blur: Optional[EventType[[str], BASE_STATE]] = None,
-        on_change: Optional[EventType[[str], BASE_STATE]] = None,
+        on_blur: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
+        on_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[str], BASE_STATE]]
+        ] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_copy: Optional[EventType[[], BASE_STATE]] = None,
@@ -136,7 +140,9 @@ class Editor(NoSSRComponent):
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
         on_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_input: Optional[EventType[[], BASE_STATE]] = None,
-        on_load: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_load: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
@@ -145,11 +151,21 @@ class Editor(NoSSRComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_paste: Optional[EventType[[str, bool], BASE_STATE]] = None,
+        on_paste: Optional[
+            Union[
+                EventType[[], BASE_STATE],
+                EventType[[str], BASE_STATE],
+                EventType[[str, bool], BASE_STATE],
+            ]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
-        toggle_code_view: Optional[EventType[[bool], BASE_STATE]] = None,
-        toggle_full_screen: Optional[EventType[[bool], BASE_STATE]] = None,
+        toggle_code_view: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
+        toggle_full_screen: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         **props,
     ) -> "Editor":
         """Create an instance of Editor. No children allowed.

+ 1 - 10
reflex/components/tags/iter_tag.py

@@ -4,16 +4,7 @@ from __future__ import annotations
 
 import dataclasses
 import inspect
-from typing import (
-    TYPE_CHECKING,
-    Any,
-    Callable,
-    Iterable,
-    Tuple,
-    Type,
-    Union,
-    get_args,
-)
+from typing import TYPE_CHECKING, Any, Callable, Iterable, Tuple, Type, Union, get_args
 
 from reflex.components.tags.tag import Tag
 from reflex.vars import LiteralArrayVar, Var, get_unique_variable_name

+ 2 - 9
reflex/constants/__init__.py

@@ -41,16 +41,9 @@ from .config import (
     GitIgnore,
     RequirementsTxt,
 )
-from .custom_components import (
-    CustomComponents,
-)
+from .custom_components import CustomComponents
 from .event import Endpoint, EventTriggers, SocketEvent
-from .installer import (
-    Bun,
-    Fnm,
-    Node,
-    PackageJson,
-)
+from .installer import Bun, Fnm, Node, PackageJson
 from .route import (
     ROUTE_NOT_FOUND,
     ROUTER,

+ 28 - 10
reflex/event.py

@@ -30,6 +30,7 @@ from typing_extensions import (
     ParamSpec,
     Protocol,
     TypeAliasType,
+    TypedDict,
     TypeVar,
     get_args,
     get_origin,
@@ -38,16 +39,10 @@ from typing_extensions import (
 from reflex import constants
 from reflex.constants.state import FRONTEND_EVENT_STATE
 from reflex.utils import console, format
-from reflex.utils.exceptions import (
-    EventFnArgMismatch,
-    EventHandlerArgTypeMismatch,
-)
+from reflex.utils.exceptions import EventFnArgMismatch, EventHandlerArgTypeMismatch
 from reflex.utils.types import ArgsSpec, GenericType, typehint_issubclass
 from reflex.vars import VarData
-from reflex.vars.base import (
-    LiteralVar,
-    Var,
-)
+from reflex.vars.base import LiteralVar, Var
 from reflex.vars.function import (
     ArgsFunctionOperation,
     FunctionStringVar,
@@ -448,6 +443,10 @@ class JavasciptKeyboardEvent:
     """Interface for a Javascript KeyboardEvent https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent."""
 
     key: str = ""
+    altKey: bool = False
+    ctrlKey: bool = False
+    metaKey: bool = False
+    shiftKey: bool = False
 
 
 def input_event(e: Var[JavascriptInputEvent]) -> Tuple[Var[str]]:
@@ -462,7 +461,16 @@ def input_event(e: Var[JavascriptInputEvent]) -> Tuple[Var[str]]:
     return (e.target.value,)
 
 
-def key_event(e: Var[JavasciptKeyboardEvent]) -> Tuple[Var[str]]:
+class KeyInputInfo(TypedDict):
+    """Information about a key input event."""
+
+    alt_key: bool
+    ctrl_key: bool
+    meta_key: bool
+    shift_key: bool
+
+
+def key_event(e: Var[JavasciptKeyboardEvent]) -> Tuple[Var[str], Var[KeyInputInfo]]:
     """Get the key from a keyboard event.
 
     Args:
@@ -471,7 +479,17 @@ def key_event(e: Var[JavasciptKeyboardEvent]) -> Tuple[Var[str]]:
     Returns:
         The key from the keyboard event.
     """
-    return (e.key,)
+    return (
+        e.key,
+        Var.create(
+            {
+                "alt_key": e.altKey,
+                "ctrl_key": e.ctrlKey,
+                "meta_key": e.metaKey,
+                "shift_key": e.shiftKey,
+            },
+        ),
+    )
 
 
 def no_args_event_spec() -> Tuple[()]:

+ 1 - 4
reflex/experimental/client_state.py

@@ -10,10 +10,7 @@ from typing import Any, Callable, Union
 from reflex import constants
 from reflex.event import EventChain, EventHandler, EventSpec, run_script
 from reflex.utils.imports import ImportVar
-from reflex.vars import (
-    VarData,
-    get_unique_variable_name,
-)
+from reflex.vars import VarData, get_unique_variable_name
 from reflex.vars.base import LiteralVar, Var
 from reflex.vars.function import FunctionVar
 

+ 6 - 2
reflex/experimental/layout.pyi

@@ -119,7 +119,9 @@ class DrawerSidebar(DrawerRoot):
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
-        on_animation_end: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_animation_end: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
@@ -133,7 +135,9 @@ class DrawerSidebar(DrawerRoot):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
-        on_open_change: Optional[EventType[[bool], BASE_STATE]] = None,
+        on_open_change: Optional[
+            Union[EventType[[], BASE_STATE], EventType[[bool], BASE_STATE]]
+        ] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,

+ 1 - 5
reflex/istate/wrappers.py

@@ -3,11 +3,7 @@
 from typing import Any
 
 from reflex.istate.proxy import ReadOnlyStateProxy
-from reflex.state import (
-    _split_substate_key,
-    _substate_key,
-    get_state_manager,
-)
+from reflex.state import _split_substate_key, _substate_key, get_state_manager
 
 
 async def get_state(token, state_cls: Any | None = None) -> ReadOnlyStateProxy:

+ 1 - 3
reflex/state.py

@@ -44,9 +44,7 @@ from typing_extensions import Self
 from reflex import event
 from reflex.config import get_config
 from reflex.istate.data import RouterData
-from reflex.istate.storage import (
-    ClientStorageBase,
-)
+from reflex.istate.storage import ClientStorageBase
 from reflex.vars.base import (
     ComputedVar,
     DynamicRouteVar,

+ 19 - 4
reflex/utils/pyi_generator.py

@@ -76,6 +76,7 @@ DEFAULT_IMPORTS = {
         "EventSpec",
         "EventType",
         "BASE_STATE",
+        "KeyInputInfo",
     ],
     "reflex.style": ["Style"],
     "reflex.vars.base": ["Var"],
@@ -509,11 +510,18 @@ def _generate_component_create_functiondef(
             # Convert each argument type to its AST representation
             type_args = [type_to_ast(arg, cls=clz) for arg in arguments_without_var]
 
-            # Join the type arguments with commas for EventType
-            args_str = ", ".join(ast.unparse(arg) for arg in type_args)
+            # Get all prefixes of the type arguments
+            all_count_args_type = [
+                ast.Name(
+                    f"EventType[[{', '.join([ast.unparse(arg) for arg in type_args[:i]])}], BASE_STATE]"
+                )
+                for i in range(len(type_args) + 1)
+            ]
 
             # Create EventType using the joined string
-            return ast.Name(id=f"EventType[[{args_str}], BASE_STATE]")
+            return ast.Name(
+                id=f"Union[{', '.join(map(ast.unparse, all_count_args_type))}]"
+            )
 
         if isinstance(annotation, str) and annotation.startswith("Tuple["):
             inside_of_tuple = annotation.removeprefix("Tuple[").removesuffix("]")
@@ -545,8 +553,15 @@ def _generate_component_create_functiondef(
                 for argument in arguments
             ]
 
+            all_count_args_type = [
+                ast.Name(
+                    f"EventType[[{', '.join(arguments_without_var[:i])}], BASE_STATE]"
+                )
+                for i in range(len(arguments) + 1)
+            ]
+
             return ast.Name(
-                id=f"EventType[[{', '.join(arguments_without_var)}], BASE_STATE]"
+                id=f"Union[{', '.join(map(ast.unparse, all_count_args_type))}]"
             )
         return ast.Name(id="EventType[..., BASE_STATE]")
 

+ 2 - 9
reflex/utils/types.py

@@ -26,9 +26,7 @@ from typing import (
     get_args,
     get_type_hints,
 )
-from typing import (
-    get_origin as get_origin_og,
-)
+from typing import get_origin as get_origin_og
 
 import sqlalchemy
 
@@ -42,12 +40,7 @@ except ModuleNotFoundError:
 
 from sqlalchemy.ext.associationproxy import AssociationProxyInstance
 from sqlalchemy.ext.hybrid import hybrid_property
-from sqlalchemy.orm import (
-    DeclarativeBase,
-    Mapped,
-    QueryableAttribute,
-    Relationship,
-)
+from sqlalchemy.orm import DeclarativeBase, Mapped, QueryableAttribute, Relationship
 
 from reflex import constants
 from reflex.base import Base

+ 2 - 11
reflex/vars/base.py

@@ -38,13 +38,7 @@ from typing import (
     overload,
 )
 
-from typing_extensions import (
-    ParamSpec,
-    TypeGuard,
-    deprecated,
-    get_type_hints,
-    override,
-)
+from typing_extensions import ParamSpec, TypeGuard, deprecated, get_type_hints, override
 
 from reflex import constants
 from reflex.base import Base
@@ -75,10 +69,7 @@ from reflex.utils.types import (
 if TYPE_CHECKING:
     from reflex.state import BaseState
 
-    from .number import (
-        BooleanVar,
-        NumberVar,
-    )
+    from .number import BooleanVar, NumberVar
     from .object import ObjectVar
     from .sequence import ArrayVar, StringVar
 

+ 1 - 7
reflex/vars/function.py

@@ -8,13 +8,7 @@ from typing import Any, Callable, Optional, Tuple, Type, Union
 
 from reflex.utils.types import GenericType
 
-from .base import (
-    CachedVarOperation,
-    LiteralVar,
-    Var,
-    VarData,
-    cached_property_no_lock,
-)
+from .base import CachedVarOperation, LiteralVar, Var, VarData, cached_property_no_lock
 
 
 class FunctionVar(Var[Callable], python_types=Callable):

+ 1 - 3
tests/units/components/test_component.py

@@ -27,9 +27,7 @@ from reflex.event import (
 from reflex.state import BaseState
 from reflex.style import Style
 from reflex.utils import imports
-from reflex.utils.exceptions import (
-    EventFnArgMismatch,
-)
+from reflex.utils.exceptions import EventFnArgMismatch
 from reflex.utils.imports import ImportDict, ImportVar, ParsedImportDict, parse_imports
 from reflex.vars import VarData
 from reflex.vars.base import LiteralVar, Var

+ 1 - 5
tests/units/test_var.py

@@ -23,11 +23,7 @@ from reflex.vars.base import (
     var_operation_return,
 )
 from reflex.vars.function import ArgsFunctionOperation, FunctionStringVar
-from reflex.vars.number import (
-    LiteralBooleanVar,
-    LiteralNumberVar,
-    NumberVar,
-)
+from reflex.vars.number import LiteralBooleanVar, LiteralNumberVar, NumberVar
 from reflex.vars.object import LiteralObjectVar, ObjectVar
 from reflex.vars.sequence import (
     ArrayVar,

+ 1 - 5
tests/units/utils/test_utils.py

@@ -13,11 +13,7 @@ from reflex.base import Base
 from reflex.config import environment
 from reflex.event import EventHandler
 from reflex.state import BaseState
-from reflex.utils import (
-    build,
-    prerequisites,
-    types,
-)
+from reflex.utils import build, prerequisites, types
 from reflex.utils import exec as utils_exec
 from reflex.utils.exceptions import ReflexError, SystemPackageMissingError
 from reflex.vars.base import Var