reflex 0.7.1a4__py3-none-any.whl → 0.7.2a1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of reflex might be problematic. Click here for more details.

Files changed (226) hide show
  1. reflex/.templates/jinja/web/utils/context.js.jinja2 +8 -8
  2. reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +3 -3
  3. reflex/admin.py +1 -2
  4. reflex/app.py +46 -49
  5. reflex/app_mixins/lifespan.py +2 -2
  6. reflex/app_mixins/middleware.py +1 -2
  7. reflex/assets.py +1 -2
  8. reflex/base.py +2 -2
  9. reflex/compiler/compiler.py +51 -16
  10. reflex/compiler/utils.py +4 -13
  11. reflex/components/base/app_wrap.pyi +7 -7
  12. reflex/components/base/bare.py +3 -3
  13. reflex/components/base/body.pyi +7 -7
  14. reflex/components/base/document.py +1 -3
  15. reflex/components/base/document.pyi +32 -32
  16. reflex/components/base/error_boundary.py +2 -4
  17. reflex/components/base/error_boundary.pyi +11 -13
  18. reflex/components/base/fragment.pyi +7 -7
  19. reflex/components/base/head.pyi +13 -13
  20. reflex/components/base/link.pyi +22 -22
  21. reflex/components/base/meta.py +5 -7
  22. reflex/components/base/meta.pyi +40 -40
  23. reflex/components/base/script.pyi +11 -14
  24. reflex/components/base/strict_mode.pyi +7 -7
  25. reflex/components/component.py +188 -113
  26. reflex/components/core/auto_scroll.py +8 -1
  27. reflex/components/core/auto_scroll.pyi +183 -210
  28. reflex/components/core/banner.py +2 -4
  29. reflex/components/core/banner.pyi +390 -444
  30. reflex/components/core/breakpoints.py +5 -5
  31. reflex/components/core/client_side_routing.pyi +14 -14
  32. reflex/components/core/clipboard.py +4 -4
  33. reflex/components/core/clipboard.pyi +12 -14
  34. reflex/components/core/cond.py +17 -25
  35. reflex/components/core/debounce.py +3 -3
  36. reflex/components/core/debounce.pyi +14 -14
  37. reflex/components/core/foreach.py +7 -2
  38. reflex/components/core/html.py +1 -3
  39. reflex/components/core/html.pyi +184 -213
  40. reflex/components/core/match.py +15 -19
  41. reflex/components/core/sticky.pyi +930 -1078
  42. reflex/components/core/upload.py +4 -4
  43. reflex/components/core/upload.pyi +62 -62
  44. reflex/components/datadisplay/code.py +6 -6
  45. reflex/components/datadisplay/code.pyi +1159 -1165
  46. reflex/components/datadisplay/dataeditor.py +49 -49
  47. reflex/components/datadisplay/dataeditor.pyi +95 -123
  48. reflex/components/datadisplay/logo.py +1 -3
  49. reflex/components/datadisplay/shiki_code_block.py +8 -10
  50. reflex/components/datadisplay/shiki_code_block.pyi +1678 -1720
  51. reflex/components/el/element.pyi +7 -7
  52. reflex/components/el/elements/base.pyi +183 -210
  53. reflex/components/el/elements/forms.py +23 -23
  54. reflex/components/el/elements/forms.pyi +2571 -2933
  55. reflex/components/el/elements/inline.py +4 -4
  56. reflex/components/el/elements/inline.pyi +5191 -5953
  57. reflex/components/el/elements/media.py +47 -47
  58. reflex/components/el/elements/media.pyi +4802 -5500
  59. reflex/components/el/elements/metadata.py +1 -3
  60. reflex/components/el/elements/metadata.pyi +782 -896
  61. reflex/components/el/elements/other.pyi +1278 -1467
  62. reflex/components/el/elements/scripts.pyi +580 -667
  63. reflex/components/el/elements/sectioning.pyi +2761 -3166
  64. reflex/components/el/elements/tables.pyi +1840 -2119
  65. reflex/components/el/elements/typography.pyi +2772 -3179
  66. reflex/components/gridjs/datatable.py +7 -7
  67. reflex/components/gridjs/datatable.pyi +19 -19
  68. reflex/components/lucide/icon.pyi +21 -21
  69. reflex/components/markdown/markdown.py +2 -2
  70. reflex/components/markdown/markdown.pyi +9 -9
  71. reflex/components/moment/moment.py +11 -12
  72. reflex/components/moment/moment.pyi +44 -47
  73. reflex/components/next/base.pyi +7 -7
  74. reflex/components/next/image.py +3 -3
  75. reflex/components/next/image.pyi +19 -21
  76. reflex/components/next/link.pyi +9 -9
  77. reflex/components/next/video.py +1 -3
  78. reflex/components/next/video.pyi +9 -9
  79. reflex/components/plotly/plotly.py +22 -45
  80. reflex/components/plotly/plotly.pyi +164 -164
  81. reflex/components/radix/primitives/accordion.py +14 -14
  82. reflex/components/radix/primitives/accordion.pyi +439 -487
  83. reflex/components/radix/primitives/base.py +1 -3
  84. reflex/components/radix/primitives/base.pyi +15 -15
  85. reflex/components/radix/primitives/drawer.py +3 -3
  86. reflex/components/radix/primitives/drawer.pyi +110 -116
  87. reflex/components/radix/primitives/form.py +1 -1
  88. reflex/components/radix/primitives/form.pyi +668 -752
  89. reflex/components/radix/primitives/progress.py +6 -6
  90. reflex/components/radix/primitives/progress.pyi +225 -243
  91. reflex/components/radix/primitives/slider.py +6 -6
  92. reflex/components/radix/primitives/slider.pyi +52 -55
  93. reflex/components/radix/themes/base.py +3 -6
  94. reflex/components/radix/themes/base.pyi +197 -303
  95. reflex/components/radix/themes/color_mode.py +5 -5
  96. reflex/components/radix/themes/color_mode.pyi +366 -436
  97. reflex/components/radix/themes/components/alert_dialog.pyi +229 -262
  98. reflex/components/radix/themes/components/aspect_ratio.py +1 -3
  99. reflex/components/radix/themes/components/aspect_ratio.pyi +8 -8
  100. reflex/components/radix/themes/components/avatar.pyi +79 -94
  101. reflex/components/radix/themes/components/badge.pyi +252 -295
  102. reflex/components/radix/themes/components/button.pyi +269 -314
  103. reflex/components/radix/themes/components/callout.py +2 -2
  104. reflex/components/radix/themes/components/callout.pyi +1116 -1290
  105. reflex/components/radix/themes/components/card.pyi +194 -229
  106. reflex/components/radix/themes/components/checkbox.pyi +243 -278
  107. reflex/components/radix/themes/components/checkbox_cards.py +3 -7
  108. reflex/components/radix/themes/components/checkbox_cards.pyi +101 -135
  109. reflex/components/radix/themes/components/checkbox_group.py +2 -2
  110. reflex/components/radix/themes/components/checkbox_group.pyi +83 -96
  111. reflex/components/radix/themes/components/context_menu.py +18 -15
  112. reflex/components/radix/themes/components/context_menu.pyi +408 -458
  113. reflex/components/radix/themes/components/data_list.pyi +122 -147
  114. reflex/components/radix/themes/components/dialog.pyi +231 -264
  115. reflex/components/radix/themes/components/dropdown_menu.py +16 -13
  116. reflex/components/radix/themes/components/dropdown_menu.pyi +223 -246
  117. reflex/components/radix/themes/components/hover_card.py +2 -2
  118. reflex/components/radix/themes/components/hover_card.pyi +237 -282
  119. reflex/components/radix/themes/components/icon_button.pyi +269 -314
  120. reflex/components/radix/themes/components/inset.py +8 -8
  121. reflex/components/radix/themes/components/inset.pyi +232 -292
  122. reflex/components/radix/themes/components/popover.py +2 -2
  123. reflex/components/radix/themes/components/popover.pyi +229 -271
  124. reflex/components/radix/themes/components/progress.pyi +80 -96
  125. reflex/components/radix/themes/components/radio.pyi +73 -86
  126. reflex/components/radix/themes/components/radio_cards.py +4 -8
  127. reflex/components/radix/themes/components/radio_cards.pyi +117 -154
  128. reflex/components/radix/themes/components/radio_group.py +3 -3
  129. reflex/components/radix/themes/components/radio_group.pyi +250 -291
  130. reflex/components/radix/themes/components/scroll_area.pyi +14 -20
  131. reflex/components/radix/themes/components/segmented_control.py +6 -6
  132. reflex/components/radix/themes/components/segmented_control.pyi +89 -108
  133. reflex/components/radix/themes/components/select.py +7 -7
  134. reflex/components/radix/themes/components/select.pyi +376 -444
  135. reflex/components/radix/themes/components/separator.pyi +79 -93
  136. reflex/components/radix/themes/components/skeleton.pyi +32 -26
  137. reflex/components/radix/themes/components/slider.py +8 -8
  138. reflex/components/radix/themes/components/slider.pyi +99 -122
  139. reflex/components/radix/themes/components/spinner.pyi +12 -19
  140. reflex/components/radix/themes/components/switch.pyi +84 -99
  141. reflex/components/radix/themes/components/table.py +9 -9
  142. reflex/components/radix/themes/components/table.pyi +1440 -1794
  143. reflex/components/radix/themes/components/tabs.py +4 -4
  144. reflex/components/radix/themes/components/tabs.pyi +120 -132
  145. reflex/components/radix/themes/components/text_area.pyi +281 -331
  146. reflex/components/radix/themes/components/text_field.py +2 -2
  147. reflex/components/radix/themes/components/text_field.pyi +639 -734
  148. reflex/components/radix/themes/components/tooltip.py +6 -6
  149. reflex/components/radix/themes/components/tooltip.pyi +34 -43
  150. reflex/components/radix/themes/layout/base.pyi +85 -182
  151. reflex/components/radix/themes/layout/box.pyi +183 -210
  152. reflex/components/radix/themes/layout/center.pyi +225 -286
  153. reflex/components/radix/themes/layout/container.pyi +191 -224
  154. reflex/components/radix/themes/layout/flex.py +2 -2
  155. reflex/components/radix/themes/layout/flex.pyi +225 -286
  156. reflex/components/radix/themes/layout/grid.py +2 -2
  157. reflex/components/radix/themes/layout/grid.pyi +245 -315
  158. reflex/components/radix/themes/layout/list.py +2 -2
  159. reflex/components/radix/themes/layout/list.pyi +712 -815
  160. reflex/components/radix/themes/layout/section.pyi +187 -221
  161. reflex/components/radix/themes/layout/spacer.pyi +225 -286
  162. reflex/components/radix/themes/layout/stack.pyi +625 -768
  163. reflex/components/radix/themes/typography/blockquote.pyi +257 -299
  164. reflex/components/radix/themes/typography/code.pyi +259 -304
  165. reflex/components/radix/themes/typography/heading.pyi +272 -324
  166. reflex/components/radix/themes/typography/link.pyi +302 -358
  167. reflex/components/radix/themes/typography/text.pyi +1669 -1945
  168. reflex/components/react_player/audio.pyi +20 -22
  169. reflex/components/react_player/react_player.pyi +19 -19
  170. reflex/components/react_player/video.pyi +20 -22
  171. reflex/components/recharts/cartesian.py +100 -97
  172. reflex/components/recharts/cartesian.pyi +891 -1007
  173. reflex/components/recharts/charts.py +42 -42
  174. reflex/components/recharts/charts.pyi +212 -249
  175. reflex/components/recharts/general.py +22 -21
  176. reflex/components/recharts/general.pyi +198 -223
  177. reflex/components/recharts/polar.py +42 -45
  178. reflex/components/recharts/polar.pyi +254 -288
  179. reflex/components/recharts/recharts.pyi +13 -13
  180. reflex/components/sonner/toast.py +20 -20
  181. reflex/components/sonner/toast.pyi +58 -61
  182. reflex/components/suneditor/editor.py +9 -9
  183. reflex/components/suneditor/editor.pyi +78 -83
  184. reflex/components/tags/cond_tag.py +2 -2
  185. reflex/components/tags/iter_tag.py +10 -14
  186. reflex/components/tags/match_tag.py +2 -2
  187. reflex/components/tags/tag.py +10 -10
  188. reflex/config.py +36 -35
  189. reflex/constants/__init__.py +56 -53
  190. reflex/custom_components/custom_components.py +6 -7
  191. reflex/event.py +38 -42
  192. reflex/experimental/client_state.py +2 -4
  193. reflex/experimental/layout.py +2 -2
  194. reflex/experimental/layout.pyi +579 -663
  195. reflex/istate/data.py +4 -5
  196. reflex/middleware/hydrate_middleware.py +2 -2
  197. reflex/middleware/middleware.py +2 -2
  198. reflex/model.py +3 -5
  199. reflex/page.py +2 -2
  200. reflex/reflex.py +9 -10
  201. reflex/state.py +77 -49
  202. reflex/style.py +9 -3
  203. reflex/testing.py +21 -24
  204. reflex/utils/console.py +1 -1
  205. reflex/utils/decorator.py +26 -1
  206. reflex/utils/exec.py +6 -11
  207. reflex/utils/export.py +2 -3
  208. reflex/utils/format.py +4 -4
  209. reflex/utils/imports.py +12 -12
  210. reflex/utils/prerequisites.py +35 -84
  211. reflex/utils/processes.py +5 -5
  212. reflex/utils/pyi_generator.py +33 -22
  213. reflex/utils/serializers.py +60 -15
  214. reflex/utils/types.py +237 -56
  215. reflex/vars/base.py +122 -72
  216. reflex/vars/datetime.py +2 -2
  217. reflex/vars/function.py +52 -55
  218. reflex/vars/number.py +59 -5
  219. reflex/vars/object.py +57 -26
  220. reflex/vars/sequence.py +983 -958
  221. {reflex-0.7.1a4.dist-info → reflex-0.7.2a1.dist-info}/METADATA +3 -6
  222. reflex-0.7.2a1.dist-info/RECORD +405 -0
  223. {reflex-0.7.1a4.dist-info → reflex-0.7.2a1.dist-info}/WHEEL +1 -1
  224. reflex-0.7.1a4.dist-info/RECORD +0 -405
  225. {reflex-0.7.1a4.dist-info → reflex-0.7.2a1.dist-info}/LICENSE +0 -0
  226. {reflex-0.7.1a4.dist-info → reflex-0.7.2a1.dist-info}/entry_points.txt +0 -0
reflex/event.py CHANGED
@@ -13,17 +13,13 @@ from typing import (
13
13
  Annotated,
14
14
  Any,
15
15
  Callable,
16
- Dict,
17
16
  Generic,
18
17
  List,
19
- Optional,
20
18
  Protocol,
21
19
  Sequence,
22
- Tuple,
23
20
  Type,
24
21
  TypedDict,
25
22
  TypeVar,
26
- Union,
27
23
  get_args,
28
24
  get_origin,
29
25
  get_type_hints,
@@ -70,10 +66,10 @@ class Event:
70
66
  name: str
71
67
 
72
68
  # The routing data where event occurred
73
- router_data: Dict[str, Any] = dataclasses.field(default_factory=dict)
69
+ router_data: dict[str, Any] = dataclasses.field(default_factory=dict)
74
70
 
75
71
  # The event payload.
76
- payload: Dict[str, Any] = dataclasses.field(default_factory=dict)
72
+ payload: dict[str, Any] = dataclasses.field(default_factory=dict)
77
73
 
78
74
  @property
79
75
  def substate_token(self) -> str:
@@ -99,7 +95,7 @@ class EventActionsMixin:
99
95
  """Mixin for DOM event actions."""
100
96
 
101
97
  # Whether to `preventDefault` or `stopPropagation` on the event.
102
- event_actions: Dict[str, Union[bool, int]] = dataclasses.field(default_factory=dict)
98
+ event_actions: dict[str, bool | int] = dataclasses.field(default_factory=dict)
103
99
 
104
100
  @property
105
101
  def stop_propagation(self) -> Self:
@@ -261,14 +257,14 @@ class EventSpec(EventActionsMixin):
261
257
  client_handler_name: str = dataclasses.field(default="")
262
258
 
263
259
  # The arguments to pass to the function.
264
- args: Tuple[Tuple[Var, Var], ...] = dataclasses.field(default_factory=tuple)
260
+ args: tuple[tuple[Var, Var], ...] = dataclasses.field(default_factory=tuple)
265
261
 
266
262
  def __init__(
267
263
  self,
268
264
  handler: EventHandler,
269
- event_actions: Dict[str, Union[bool, int]] | None = None,
265
+ event_actions: dict[str, bool | int] | None = None,
270
266
  client_handler_name: str = "",
271
- args: Tuple[Tuple[Var, Var], ...] = (),
267
+ args: tuple[tuple[Var, Var], ...] = (),
272
268
  ):
273
269
  """Initialize an EventSpec.
274
270
 
@@ -285,7 +281,7 @@ class EventSpec(EventActionsMixin):
285
281
  object.__setattr__(self, "client_handler_name", client_handler_name)
286
282
  object.__setattr__(self, "args", args or ())
287
283
 
288
- def with_args(self, args: Tuple[Tuple[Var, Var], ...]) -> EventSpec:
284
+ def with_args(self, args: tuple[tuple[Var, Var], ...]) -> EventSpec:
289
285
  """Copy the event spec, with updated args.
290
286
 
291
287
  Args:
@@ -343,7 +339,7 @@ class CallableEventSpec(EventSpec):
343
339
  API with functions that return a family of EventSpec.
344
340
  """
345
341
 
346
- fn: Optional[Callable[..., EventSpec]] = None
342
+ fn: Callable[..., EventSpec] | None = None
347
343
 
348
344
  def __init__(self, fn: Callable[..., EventSpec] | None = None, **kwargs):
349
345
  """Initialize a CallableEventSpec.
@@ -392,24 +388,22 @@ class CallableEventSpec(EventSpec):
392
388
  class EventChain(EventActionsMixin):
393
389
  """Container for a chain of events that will be executed in order."""
394
390
 
395
- events: Sequence[Union[EventSpec, EventVar, EventCallback]] = dataclasses.field(
391
+ events: Sequence[EventSpec | EventVar | EventCallback] = dataclasses.field(
396
392
  default_factory=list
397
393
  )
398
394
 
399
- args_spec: Optional[Union[Callable, Sequence[Callable]]] = dataclasses.field(
400
- default=None
401
- )
395
+ args_spec: Callable | Sequence[Callable] | None = dataclasses.field(default=None)
402
396
 
403
- invocation: Optional[Var] = dataclasses.field(default=None)
397
+ invocation: Var | None = dataclasses.field(default=None)
404
398
 
405
399
  @classmethod
406
400
  def create(
407
401
  cls,
408
402
  value: EventType,
409
403
  args_spec: ArgsSpec | Sequence[ArgsSpec],
410
- key: Optional[str] = None,
404
+ key: str | None = None,
411
405
  **event_chain_kwargs,
412
- ) -> Union[EventChain, Var]:
406
+ ) -> EventChain | Var:
413
407
  """Create an event chain from a variety of input types.
414
408
 
415
409
  Args:
@@ -451,7 +445,7 @@ class EventChain(EventActionsMixin):
451
445
 
452
446
  # If the input is a list of event handlers, create an event chain.
453
447
  if isinstance(value, List):
454
- events: List[Union[EventSpec, EventVar]] = []
448
+ events: list[EventSpec | EventVar] = []
455
449
  for v in value:
456
450
  if isinstance(v, (EventHandler, EventSpec)):
457
451
  # Call the event handler to get the event.
@@ -532,7 +526,7 @@ class JavasciptKeyboardEvent:
532
526
  shiftKey: bool = False # noqa: N815
533
527
 
534
528
 
535
- def input_event(e: ObjectVar[JavascriptInputEvent]) -> Tuple[Var[str]]:
529
+ def input_event(e: ObjectVar[JavascriptInputEvent]) -> tuple[Var[str]]:
536
530
  """Get the value from an input event.
537
531
 
538
532
  Args:
@@ -555,7 +549,7 @@ class KeyInputInfo(TypedDict):
555
549
 
556
550
  def key_event(
557
551
  e: ObjectVar[JavasciptKeyboardEvent],
558
- ) -> Tuple[Var[str], Var[KeyInputInfo]]:
552
+ ) -> tuple[Var[str], Var[KeyInputInfo]]:
559
553
  """Get the key from a keyboard event.
560
554
 
561
555
  Args:
@@ -577,7 +571,7 @@ def key_event(
577
571
  )
578
572
 
579
573
 
580
- def no_args_event_spec() -> Tuple[()]:
574
+ def no_args_event_spec() -> tuple[()]:
581
575
  """Empty event handler.
582
576
 
583
577
  Returns:
@@ -598,7 +592,7 @@ U = TypeVar("U")
598
592
  class IdentityEventReturn(Generic[T], Protocol):
599
593
  """Protocol for an identity event return."""
600
594
 
601
- def __call__(self, *values: Var[T]) -> Tuple[Var[T], ...]:
595
+ def __call__(self, *values: Var[T]) -> tuple[Var[T], ...]:
602
596
  """Return the input values.
603
597
 
604
598
  Args:
@@ -613,13 +607,13 @@ class IdentityEventReturn(Generic[T], Protocol):
613
607
  @overload
614
608
  def passthrough_event_spec( # pyright: ignore [reportOverlappingOverload]
615
609
  event_type: Type[T], /
616
- ) -> Callable[[Var[T]], Tuple[Var[T]]]: ...
610
+ ) -> Callable[[Var[T]], tuple[Var[T]]]: ...
617
611
 
618
612
 
619
613
  @overload
620
614
  def passthrough_event_spec(
621
615
  event_type_1: Type[T], event_type2: Type[U], /
622
- ) -> Callable[[Var[T], Var[U]], Tuple[Var[T], Var[U]]]: ...
616
+ ) -> Callable[[Var[T], Var[U]], tuple[Var[T], Var[U]]]: ...
623
617
 
624
618
 
625
619
  @overload
@@ -636,11 +630,11 @@ def passthrough_event_spec(*event_types: Type[T]) -> IdentityEventReturn[T]: #
636
630
  A function that returns the input event as output.
637
631
  """
638
632
 
639
- def inner(*values: Var[T]) -> Tuple[Var[T], ...]:
633
+ def inner(*values: Var[T]) -> tuple[Var[T], ...]:
640
634
  return values
641
635
 
642
636
  inner_type = tuple(Var[event_type] for event_type in event_types)
643
- return_annotation = Tuple[inner_type]
637
+ return_annotation = tuple[inner_type]
644
638
 
645
639
  inner.__signature__ = inspect.signature(inner).replace( # pyright: ignore [reportFunctionMemberAccess]
646
640
  parameters=[
@@ -667,11 +661,11 @@ def passthrough_event_spec(*event_types: Type[T]) -> IdentityEventReturn[T]: #
667
661
  class FileUpload:
668
662
  """Class to represent a file upload."""
669
663
 
670
- upload_id: Optional[str] = None
671
- on_upload_progress: Optional[Union[EventHandler, Callable]] = None
664
+ upload_id: str | None = None
665
+ on_upload_progress: EventHandler | Callable | None = None
672
666
 
673
667
  @staticmethod
674
- def on_upload_progress_args_spec(_prog: Var[Dict[str, Union[int, float, bool]]]):
668
+ def on_upload_progress_args_spec(_prog: Var[dict[str, int | float | bool]]):
675
669
  """Args spec for on_upload_progress event handler.
676
670
 
677
671
  Returns:
@@ -702,7 +696,7 @@ class FileUpload:
702
696
  Var(_js_expr="files"),
703
697
  Var(
704
698
  _js_expr="filesById",
705
- _var_type=Dict[str, Any],
699
+ _var_type=dict[str, Any],
706
700
  _var_data=VarData.merge(upload_files_context_var_data),
707
701
  ).to(ObjectVar)[LiteralVar.create(upload_id)],
708
702
  ),
@@ -982,7 +976,7 @@ def remove_session_storage(key: str) -> EventSpec:
982
976
  )
983
977
 
984
978
 
985
- def set_clipboard(content: Union[str, Var[str]]) -> EventSpec:
979
+ def set_clipboard(content: str | Var[str]) -> EventSpec:
986
980
  """Set the text in content in the clipboard.
987
981
 
988
982
  Args:
@@ -1002,7 +996,7 @@ def set_clipboard(content: Union[str, Var[str]]) -> EventSpec:
1002
996
 
1003
997
  def download(
1004
998
  url: str | Var | None = None,
1005
- filename: Optional[str | Var] = None,
999
+ filename: str | Var | None = None,
1006
1000
  data: str | bytes | Var | None = None,
1007
1001
  ) -> EventSpec:
1008
1002
  """Download the file at a given path or with the specified data.
@@ -1203,7 +1197,7 @@ def get_hydrate_event(state: BaseState) -> str:
1203
1197
  def call_event_handler(
1204
1198
  event_callback: EventHandler | EventSpec,
1205
1199
  event_spec: ArgsSpec | Sequence[ArgsSpec],
1206
- key: Optional[str] = None,
1200
+ key: str | None = None,
1207
1201
  ) -> EventSpec:
1208
1202
  """Call an event handler to get the event spec.
1209
1203
 
@@ -1281,7 +1275,9 @@ def call_event_handler(
1281
1275
  ]
1282
1276
 
1283
1277
  # check that args of event handler are matching the spec if type hints are provided
1284
- for i, arg in enumerate(event_callback_spec.args[1:]):
1278
+ for i, arg in enumerate(
1279
+ event_callback_spec.args[1 : len(args_types_without_vars) + 1]
1280
+ ):
1285
1281
  if arg not in type_hints_of_provided_callback:
1286
1282
  continue
1287
1283
 
@@ -1452,7 +1448,7 @@ def check_fn_match_arg_spec(
1452
1448
  def call_event_fn(
1453
1449
  fn: Callable,
1454
1450
  arg_spec: ArgsSpec | Sequence[ArgsSpec],
1455
- key: Optional[str] = None,
1451
+ key: str | None = None,
1456
1452
  ) -> list[EventSpec] | Var:
1457
1453
  """Call a function to a list of event specs.
1458
1454
 
@@ -1885,7 +1881,7 @@ LAMBDA_OR_STATE = TypeAliasType(
1885
1881
  type_params=(ARGS,),
1886
1882
  )
1887
1883
 
1888
- ItemOrList = V | List[V]
1884
+ ItemOrList = V | list[V]
1889
1885
 
1890
1886
  BASIC_EVENT_TYPES = TypeAliasType(
1891
1887
  "BASIC_EVENT_TYPES", EventSpec | EventHandler | Var[Any], type_params=()
@@ -1946,10 +1942,10 @@ class EventNamespace(types.SimpleNamespace):
1946
1942
  func: Callable[[BASE_STATE, Unpack[P]], Any] | None = None,
1947
1943
  *,
1948
1944
  background: bool | None = None,
1949
- ) -> Union[
1950
- EventCallback[Unpack[P]],
1951
- Callable[[Callable[[BASE_STATE, Unpack[P]], Any]], EventCallback[Unpack[P]]],
1952
- ]:
1945
+ ) -> (
1946
+ EventCallback[Unpack[P]]
1947
+ | Callable[[Callable[[BASE_STATE, Unpack[P]], Any]], EventCallback[Unpack[P]]]
1948
+ ):
1953
1949
  """Wrap a function to be used as an event.
1954
1950
 
1955
1951
  Args:
@@ -4,7 +4,7 @@ from __future__ import annotations
4
4
 
5
5
  import dataclasses
6
6
  import re
7
- from typing import Any, Callable, Union
7
+ from typing import Any, Callable
8
8
 
9
9
  from reflex import constants
10
10
  from reflex.event import EventChain, EventHandler, EventSpec, run_script
@@ -253,9 +253,7 @@ class ClientStateVar(Var):
253
253
  """
254
254
  return self.set_value()
255
255
 
256
- def retrieve(
257
- self, callback: Union[EventHandler, Callable, None] = None
258
- ) -> EventSpec:
256
+ def retrieve(self, callback: EventHandler | Callable | None = None) -> EventSpec:
259
257
  """Pass the value of the client state variable to a backend EventHandler.
260
258
 
261
259
  The event handler must `yield` or `return` the EventSpec to trigger the event.
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any, List
5
+ from typing import Any
6
6
 
7
7
  from reflex import color, cond
8
8
  from reflex.components.base.fragment import Fragment
@@ -64,7 +64,7 @@ class Sidebar(Box, MemoizationLeaf):
64
64
  }
65
65
  )
66
66
 
67
- def add_hooks(self) -> List[Var]:
67
+ def add_hooks(self) -> list[Var]:
68
68
  """Get the hooks to render.
69
69
 
70
70
  Returns: