Переглянути джерело

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]
 [tool.ruff]
 target-version = "py39"
 target-version = "py39"
+lint.isort.split-on-trailing-comma = false
 lint.select = ["B", "D", "E", "F", "I", "SIM", "W"]
 lint.select = ["B", "D", "E", "F", "I", "SIM", "W"]
 lint.ignore = ["B008", "D205", "E501", "F403", "SIM115"]
 lint.ignore = ["B008", "D205", "E501", "F403", "SIM115"]
 lint.pydocstyle.convention = "google"
 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.app_mixins import AppMixin, LifespanMixin, MiddlewareMixin
 from reflex.compiler import compiler
 from reflex.compiler import compiler
 from reflex.compiler import utils as compiler_utils
 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.app_wrap import AppWrap
 from reflex.components.base.error_boundary import ErrorBoundary
 from reflex.components.base.error_boundary import ErrorBoundary
 from reflex.components.base.fragment import Fragment
 from reflex.components.base.fragment import Fragment
@@ -79,9 +76,7 @@ from reflex.event import (
     window_alert,
     window_alert,
 )
 )
 from reflex.model import Model, get_db_status
 from reflex.model import Model, get_db_status
-from reflex.page import (
-    DECORATED_PAGES,
-)
+from reflex.page import DECORATED_PAGES
 from reflex.route import (
 from reflex.route import (
     get_route_args,
     get_route_args,
     replace_brackets_with_keywords,
     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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: 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 typing import Any, Dict, List, Optional, Union, overload
 
 
 from reflex.components.base.fragment import Fragment
 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.style import Style
 from reflex.utils.imports import ImportVar
 from reflex.utils.imports import ImportVar
 from reflex.vars.base import Var
 from reflex.vars.base import Var
@@ -43,7 +40,12 @@ class Clipboard(Fragment):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **props,

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

@@ -6,18 +6,9 @@
 from pathlib import Path
 from pathlib import Path
 from typing import Any, ClassVar, Dict, List, Optional, Union, overload
 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.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.style import Style
 from reflex.utils.imports import ImportVar
 from reflex.utils.imports import ImportVar
 from reflex.vars import VarData
 from reflex.vars import VarData
@@ -120,7 +111,9 @@ class Upload(MemoizationLeaf):
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: 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,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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[
         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,
         ] = None,
         on_click: Optional[EventType[[], 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_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_double_click: Optional[EventType[[], BASE_STATE]] = None,
         on_finished_editing: Optional[
         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,
         ] = None,
         on_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_group_header_clicked: Optional[
         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,
         ] = None,
         on_group_header_context_menu: Optional[
         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,
         ] = 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[
         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,
         ] = 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_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: 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 jinja2 import Environment
 
 
 from reflex.components.el.element import Element
 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.style import Style
 from reflex.utils.imports import ImportDict
 from reflex.utils.imports import ImportDict
 from reflex.vars.base import Var
 from reflex.vars.base import Var
@@ -340,8 +340,12 @@ class Form(BaseHTML):
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_submit: Optional[
         on_submit: Optional[
             Union[
             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,
         ] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
@@ -470,14 +474,32 @@ class Input(BaseHTML):
         class_name: Optional[Any] = None,
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
@@ -1252,7 +1274,9 @@ class Select(BaseHTML):
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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,
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: 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,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: 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,
         **props,
     ) -> "AccordionRoot":
     ) -> "AccordionRoot":
         """Create the component.
         """Create the component.

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

@@ -91,7 +91,9 @@ class DrawerRoot(DrawerComponent):
         class_name: Optional[Any] = None,
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = 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_blur: Optional[EventType[[], BASE_STATE]] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **props,
@@ -573,7 +577,9 @@ class Drawer(ComponentNamespace):
         class_name: Optional[Any] = None,
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = 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_blur: Optional[EventType[[], BASE_STATE]] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_submit: Optional[
         on_submit: Optional[
             Union[
             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,
         ] = None,
         on_unmount: Optional[EventType[[], 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_submit: Optional[
         on_submit: Optional[
             Union[
             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,
         ] = None,
         on_unmount: Optional[EventType[[], 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_submit: Optional[
         on_submit: Optional[
             Union[
             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,
         ] = None,
         on_unmount: Optional[EventType[[], 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_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: 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,
         **props,
     ) -> "SliderRoot":
     ) -> "SliderRoot":
         """Create the component.
         """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.lucide.icon import Icon
 from reflex.components.radix.themes.components.switch import Switch
 from reflex.components.radix.themes.components.switch import Switch
 from reflex.event import BASE_STATE, EventType
 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 reflex.vars.base import Var
 
 
 from .components.icon_button import IconButton
 from .components.icon_button import IconButton
@@ -395,7 +392,9 @@ class ColorModeSwitch(Switch):
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **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.components.core.breakpoints import Responsive
 from reflex.vars.base import Var
 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"]
 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.components.el import elements
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralRadius,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, LiteralRadius, RadixThemesComponent
 
 
 
 
 class Badge(elements.Span, 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.style import Style
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    RadixLoadingProp,
-    RadixThemesComponent,
-)
+from ..base import RadixLoadingProp, RadixThemesComponent
 
 
 LiteralButtonSize = Literal["1", "2", "3", "4"]
 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.components.lucide.icon import Icon
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
 
 
 CalloutVariant = Literal["soft", "surface", "outline"]
 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.components.el import elements
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    RadixThemesComponent,
-)
+from ..base import RadixThemesComponent
 
 
 
 
 class Card(elements.Div, 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.event import EventHandler, passthrough_event_spec
 from reflex.vars.base import LiteralVar, Var
 from reflex.vars.base import LiteralVar, Var
 
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralSpacing,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, LiteralSpacing, RadixThemesComponent
 
 
 LiteralCheckboxSize = Literal["1", "2", "3"]
 LiteralCheckboxSize = Literal["1", "2", "3"]
 LiteralCheckboxVariant = Literal["classic", "surface", "soft"]
 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,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
@@ -264,7 +266,9 @@ class HighLevelCheckbox(RadixThemesComponent):
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
@@ -409,7 +413,9 @@ class CheckboxNamespace(ComponentNamespace):
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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.event import EventHandler, no_args_event_spec, passthrough_event_spec
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
 
 
 LiteralDirType = Literal["ltr", "rtl"]
 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **props,
@@ -330,7 +332,9 @@ class ContextMenuSub(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **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.event import EventHandler, no_args_event_spec, passthrough_event_spec
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    RadixThemesComponent,
-    RadixThemesTriggerComponent,
-)
+from ..base import RadixThemesComponent, RadixThemesTriggerComponent
 
 
 
 
 class DialogRoot(RadixThemesComponent):
 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **props,
@@ -391,7 +393,9 @@ class Dialog(ComponentNamespace):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **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.event import EventHandler, no_args_event_spec, passthrough_event_spec
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-    RadixThemesTriggerComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent, RadixThemesTriggerComponent
 
 
 LiteralDirType = Literal["ltr", "rtl"]
 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **props,
@@ -367,7 +369,9 @@ class DropdownMenuSub(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **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.event import EventHandler, passthrough_event_spec
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    RadixThemesComponent,
-    RadixThemesTriggerComponent,
-)
+from ..base import RadixThemesComponent, RadixThemesTriggerComponent
 
 
 
 
 class HoverCardRoot(RadixThemesComponent):
 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **props,
@@ -286,7 +288,9 @@ class HoverCard(ComponentNamespace):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **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.style import Style
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    RadixLoadingProp,
-    RadixThemesComponent,
-)
+from ..base import RadixLoadingProp, RadixThemesComponent
 
 
 LiteralButtonSize = Literal["1", "2", "3", "4"]
 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.components.el import elements
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    RadixThemesComponent,
-)
+from ..base import RadixThemesComponent
 
 
 LiteralButtonSize = Literal["1", "2", "3", "4"]
 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.event import EventHandler, no_args_event_spec, passthrough_event_spec
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    RadixThemesComponent,
-    RadixThemesTriggerComponent,
-)
+from ..base import RadixThemesComponent, RadixThemesTriggerComponent
 
 
 
 
 class PopoverRoot(RadixThemesComponent):
 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **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_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: 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,
         **props,
     ) -> "RadioCardsRoot":
     ) -> "RadioCardsRoot":
         """Create a new component instance.
         """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.base import LiteralVar, Var
 from reflex.vars.sequence import StringVar
 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"]
 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,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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 reflex.vars.base import Var
 
 
-from ..base import (
-    RadixThemesComponent,
-)
+from ..base import RadixThemesComponent
 
 
 
 
 class ScrollArea(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,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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.event import no_args_event_spec, passthrough_event_spec
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralRadius,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, LiteralRadius, RadixThemesComponent
 
 
 
 
 class SelectRoot(RadixThemesComponent):
 class SelectRoot(RadixThemesComponent):

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

@@ -44,7 +44,9 @@ class SelectRoot(RadixThemesComponent):
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **props,
@@ -685,7 +689,9 @@ class HighLevelSelect(SelectRoot):
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **props,
@@ -861,7 +869,9 @@ class Select(ComponentNamespace):
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **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.components.core.breakpoints import Responsive
 from reflex.vars.base import LiteralVar, Var
 from reflex.vars.base import LiteralVar, Var
 
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
 
 
 LiteralSeperatorSize = Literal["1", "2", "3", "4"]
 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.event import EventHandler, passthrough_event_spec
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
 
 
 on_value_event_spec = (
 on_value_event_spec = (
     passthrough_event_spec(list[Union[int, float]]),
     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_blur: Optional[EventType[[], BASE_STATE]] = None,
         on_change: Optional[
         on_change: Optional[
             Union[
             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,
         ] = None,
         on_click: Optional[EventType[[], 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_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_value_commit: Optional[
         on_value_commit: Optional[
             Union[
             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,
         ] = None,
         **props,
         **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.components.core.breakpoints import Responsive
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    RadixLoadingProp,
-    RadixThemesComponent,
-)
+from ..base import RadixLoadingProp, RadixThemesComponent
 
 
 LiteralSpinnerSize = Literal["1", "2", "3"]
 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.event import EventHandler, passthrough_event_spec
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
 
 
 LiteralSwitchSize = Literal["1", "2", "3"]
 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,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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.components.el import elements
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    RadixThemesComponent,
-)
+from ..base import RadixThemesComponent
 
 
 
 
 class TableRoot(elements.Table, 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.event import EventHandler, passthrough_event_spec
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    LiteralAccentColor,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, RadixThemesComponent
 
 
 vertical_orientation_css = "&[data-orientation='vertical']"
 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,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: Optional[EventType[[], BASE_STATE]] = None,
@@ -341,7 +343,9 @@ class Tabs(ComponentNamespace):
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
         on_blur: Optional[EventType[[], BASE_STATE]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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.components.el import elements
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralRadius,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, LiteralRadius, RadixThemesComponent
 
 
 LiteralTextAreaSize = Literal["1", "2", "3"]
 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.core.breakpoints import Breakpoints
 from reflex.components.el import elements
 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.style import Style
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
@@ -168,14 +168,32 @@ class TextArea(RadixThemesComponent, elements.Textarea):
         class_name: Optional[Any] = None,
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: 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.event import EventHandler, input_event, key_event
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    LiteralAccentColor,
-    LiteralRadius,
-    RadixThemesComponent,
-)
+from ..base import LiteralAccentColor, LiteralRadius, RadixThemesComponent
 
 
 LiteralTextFieldSize = Literal["1", "2", "3"]
 LiteralTextFieldSize = Literal["1", "2", "3"]
 LiteralTextFieldVariant = Literal["classic", "surface", "soft"]
 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.component import ComponentNamespace
 from reflex.components.core.breakpoints import Breakpoints
 from reflex.components.core.breakpoints import Breakpoints
 from reflex.components.el import elements
 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.style import Style
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
@@ -149,14 +149,32 @@ class TextFieldRoot(elements.Div, RadixThemesComponent):
         class_name: Optional[Any] = None,
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: 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,
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: 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.utils import format
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    RadixThemesComponent,
-)
+from ..base import RadixThemesComponent
 
 
 LiteralSideType = Literal[
 LiteralSideType = Literal[
     "top",
     "top",

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

@@ -5,10 +5,7 @@
 # ------------------------------------------------------
 # ------------------------------------------------------
 from typing import Any, Dict, Literal, Optional, Union, overload
 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.style import Style
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
@@ -79,7 +76,9 @@ class Tooltip(RadixThemesComponent):
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_pointer_down_outside: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: 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.components.core.breakpoints import Responsive
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from ..base import (
-    CommonMarginProps,
-    LiteralSpacing,
-    RadixThemesComponent,
-)
+from ..base import CommonMarginProps, LiteralSpacing, RadixThemesComponent
 
 
 LiteralBoolNumber = Literal["0", "1"]
 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.components.el import elements
 from reflex.vars.base import Var
 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"]
 LiteralFlexDirection = Literal["row", "column", "row-reverse", "column-reverse"]
 LiteralFlexWrap = Literal["nowrap", "wrap", "wrap-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.components.el import elements
 from reflex.vars.base import Var
 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"]
 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.components.el import elements
 from reflex.vars.base import Var
 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):
 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.components.el import elements
 from reflex.vars.base import Var
 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):
 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.components.el import elements
 from reflex.vars.base import Var
 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):
 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.utils.imports import ImportDict
 from reflex.vars.base import Var
 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"]
 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.components.el import elements
 from reflex.vars.base import Var
 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[
 LiteralType = Literal[
     "p",
     "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_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_disable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_disable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_enable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_ended: Optional[EventType[[], BASE_STATE]] = None,
         on_ended: Optional[EventType[[], BASE_STATE]] = None,
         on_error: 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_quality_change: Optional[EventType[[], BASE_STATE]] = None,
         on_playback_rate_change: Optional[EventType[[], BASE_STATE]] = None,
         on_playback_rate_change: Optional[EventType[[], BASE_STATE]] = None,
         on_progress: Optional[
         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,
         ] = None,
         on_ready: Optional[EventType[[], BASE_STATE]] = None,
         on_ready: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: 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_start: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **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_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_disable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_disable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_enable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_ended: Optional[EventType[[], BASE_STATE]] = None,
         on_ended: Optional[EventType[[], BASE_STATE]] = None,
         on_error: 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_play: Optional[EventType[[], BASE_STATE]] = None,
         on_playback_quality_change: Optional[EventType[[], BASE_STATE]] = None,
         on_playback_quality_change: Optional[EventType[[], BASE_STATE]] = None,
         on_playback_rate_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_ready: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: 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_start: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **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_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_disable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_disable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_double_click: 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_enable_pip: Optional[EventType[[], BASE_STATE]] = None,
         on_ended: Optional[EventType[[], BASE_STATE]] = None,
         on_ended: Optional[EventType[[], BASE_STATE]] = None,
         on_error: 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_quality_change: Optional[EventType[[], BASE_STATE]] = None,
         on_playback_rate_change: Optional[EventType[[], BASE_STATE]] = None,
         on_playback_rate_change: Optional[EventType[[], BASE_STATE]] = None,
         on_progress: Optional[
         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,
         ] = None,
         on_ready: Optional[EventType[[], BASE_STATE]] = None,
         on_ready: Optional[EventType[[], BASE_STATE]] = None,
         on_scroll: 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_start: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **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.style import Style
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from .recharts import (
-    Recharts,
-)
+from .recharts import Recharts
 
 
 class Axis(Recharts):
 class Axis(Recharts):
     @overload
     @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.style import Style
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from .recharts import (
-    RechartsCharts,
-)
+from .recharts import RechartsCharts
 
 
 class ChartBase(RechartsCharts):
 class ChartBase(RechartsCharts):
     @overload
     @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.style import Style
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from .recharts import (
-    Recharts,
-)
+from .recharts import Recharts
 
 
 class ResponsiveContainer(Recharts, MemoizationLeaf):
 class ResponsiveContainer(Recharts, MemoizationLeaf):
     @overload
     @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.style import Style
 from reflex.vars.base import Var
 from reflex.vars.base import Var
 
 
-from .recharts import (
-    Recharts,
-)
+from .recharts import Recharts
 
 
 class Pie(Recharts):
 class Pie(Recharts):
     def get_event_triggers(self) -> dict[str, Union[Var, Any]]: ...
     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,
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = 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_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
         on_copy: 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_double_click: Optional[EventType[[], BASE_STATE]] = None,
         on_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_focus: Optional[EventType[[], BASE_STATE]] = None,
         on_input: 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_mount: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_enter: 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: 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,
         **props,
     ) -> "Editor":
     ) -> "Editor":
         """Create an instance of Editor. No children allowed.
         """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 dataclasses
 import inspect
 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.components.tags.tag import Tag
 from reflex.vars import LiteralArrayVar, Var, get_unique_variable_name
 from reflex.vars import LiteralArrayVar, Var, get_unique_variable_name

+ 2 - 9
reflex/constants/__init__.py

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

+ 28 - 10
reflex/event.py

@@ -30,6 +30,7 @@ from typing_extensions import (
     ParamSpec,
     ParamSpec,
     Protocol,
     Protocol,
     TypeAliasType,
     TypeAliasType,
+    TypedDict,
     TypeVar,
     TypeVar,
     get_args,
     get_args,
     get_origin,
     get_origin,
@@ -38,16 +39,10 @@ from typing_extensions import (
 from reflex import constants
 from reflex import constants
 from reflex.constants.state import FRONTEND_EVENT_STATE
 from reflex.constants.state import FRONTEND_EVENT_STATE
 from reflex.utils import console, format
 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.utils.types import ArgsSpec, GenericType, typehint_issubclass
 from reflex.vars import VarData
 from reflex.vars import VarData
-from reflex.vars.base import (
-    LiteralVar,
-    Var,
-)
+from reflex.vars.base import LiteralVar, Var
 from reflex.vars.function import (
 from reflex.vars.function import (
     ArgsFunctionOperation,
     ArgsFunctionOperation,
     FunctionStringVar,
     FunctionStringVar,
@@ -448,6 +443,10 @@ class JavasciptKeyboardEvent:
     """Interface for a Javascript KeyboardEvent https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent."""
     """Interface for a Javascript KeyboardEvent https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent."""
 
 
     key: str = ""
     key: str = ""
+    altKey: bool = False
+    ctrlKey: bool = False
+    metaKey: bool = False
+    shiftKey: bool = False
 
 
 
 
 def input_event(e: Var[JavascriptInputEvent]) -> Tuple[Var[str]]:
 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,)
     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.
     """Get the key from a keyboard event.
 
 
     Args:
     Args:
@@ -471,7 +479,17 @@ def key_event(e: Var[JavasciptKeyboardEvent]) -> Tuple[Var[str]]:
     Returns:
     Returns:
         The key from the keyboard event.
         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[()]:
 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 import constants
 from reflex.event import EventChain, EventHandler, EventSpec, run_script
 from reflex.event import EventChain, EventHandler, EventSpec, run_script
 from reflex.utils.imports import ImportVar
 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.base import LiteralVar, Var
 from reflex.vars.function import FunctionVar
 from reflex.vars.function import FunctionVar
 
 

+ 6 - 2
reflex/experimental/layout.pyi

@@ -119,7 +119,9 @@ class DrawerSidebar(DrawerRoot):
         class_name: Optional[Any] = None,
         class_name: Optional[Any] = None,
         autofocus: Optional[bool] = None,
         autofocus: Optional[bool] = None,
         custom_attrs: Optional[Dict[str, Union[Var, str]]] = 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_blur: Optional[EventType[[], BASE_STATE]] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_click: Optional[EventType[[], BASE_STATE]] = None,
         on_context_menu: 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_out: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
         on_mouse_up: 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_scroll: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         on_unmount: Optional[EventType[[], BASE_STATE]] = None,
         **props,
         **props,

+ 1 - 5
reflex/istate/wrappers.py

@@ -3,11 +3,7 @@
 from typing import Any
 from typing import Any
 
 
 from reflex.istate.proxy import ReadOnlyStateProxy
 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:
 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 import event
 from reflex.config import get_config
 from reflex.config import get_config
 from reflex.istate.data import RouterData
 from reflex.istate.data import RouterData
-from reflex.istate.storage import (
-    ClientStorageBase,
-)
+from reflex.istate.storage import ClientStorageBase
 from reflex.vars.base import (
 from reflex.vars.base import (
     ComputedVar,
     ComputedVar,
     DynamicRouteVar,
     DynamicRouteVar,

+ 19 - 4
reflex/utils/pyi_generator.py

@@ -76,6 +76,7 @@ DEFAULT_IMPORTS = {
         "EventSpec",
         "EventSpec",
         "EventType",
         "EventType",
         "BASE_STATE",
         "BASE_STATE",
+        "KeyInputInfo",
     ],
     ],
     "reflex.style": ["Style"],
     "reflex.style": ["Style"],
     "reflex.vars.base": ["Var"],
     "reflex.vars.base": ["Var"],
@@ -509,11 +510,18 @@ def _generate_component_create_functiondef(
             # Convert each argument type to its AST representation
             # Convert each argument type to its AST representation
             type_args = [type_to_ast(arg, cls=clz) for arg in arguments_without_var]
             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
             # 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["):
         if isinstance(annotation, str) and annotation.startswith("Tuple["):
             inside_of_tuple = annotation.removeprefix("Tuple[").removesuffix("]")
             inside_of_tuple = annotation.removeprefix("Tuple[").removesuffix("]")
@@ -545,8 +553,15 @@ def _generate_component_create_functiondef(
                 for argument in arguments
                 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(
             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]")
         return ast.Name(id="EventType[..., BASE_STATE]")
 
 

+ 2 - 9
reflex/utils/types.py

@@ -26,9 +26,7 @@ from typing import (
     get_args,
     get_args,
     get_type_hints,
     get_type_hints,
 )
 )
-from typing import (
-    get_origin as get_origin_og,
-)
+from typing import get_origin as get_origin_og
 
 
 import sqlalchemy
 import sqlalchemy
 
 
@@ -42,12 +40,7 @@ except ModuleNotFoundError:
 
 
 from sqlalchemy.ext.associationproxy import AssociationProxyInstance
 from sqlalchemy.ext.associationproxy import AssociationProxyInstance
 from sqlalchemy.ext.hybrid import hybrid_property
 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 import constants
 from reflex.base import Base
 from reflex.base import Base

+ 2 - 11
reflex/vars/base.py

@@ -38,13 +38,7 @@ from typing import (
     overload,
     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 import constants
 from reflex.base import Base
 from reflex.base import Base
@@ -75,10 +69,7 @@ from reflex.utils.types import (
 if TYPE_CHECKING:
 if TYPE_CHECKING:
     from reflex.state import BaseState
     from reflex.state import BaseState
 
 
-    from .number import (
-        BooleanVar,
-        NumberVar,
-    )
+    from .number import BooleanVar, NumberVar
     from .object import ObjectVar
     from .object import ObjectVar
     from .sequence import ArrayVar, StringVar
     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 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):
 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.state import BaseState
 from reflex.style import Style
 from reflex.style import Style
 from reflex.utils import imports
 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.utils.imports import ImportDict, ImportVar, ParsedImportDict, parse_imports
 from reflex.vars import VarData
 from reflex.vars import VarData
 from reflex.vars.base import LiteralVar, Var
 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,
     var_operation_return,
 )
 )
 from reflex.vars.function import ArgsFunctionOperation, FunctionStringVar
 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.object import LiteralObjectVar, ObjectVar
 from reflex.vars.sequence import (
 from reflex.vars.sequence import (
     ArrayVar,
     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.config import environment
 from reflex.event import EventHandler
 from reflex.event import EventHandler
 from reflex.state import BaseState
 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 import exec as utils_exec
 from reflex.utils.exceptions import ReflexError, SystemPackageMissingError
 from reflex.utils.exceptions import ReflexError, SystemPackageMissingError
 from reflex.vars.base import Var
 from reflex.vars.base import Var