reflex 0.7.1a4__py3-none-any.whl → 0.7.2__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 (227) 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/.templates/web/utils/state.js +18 -18
  4. reflex/admin.py +1 -2
  5. reflex/app.py +46 -49
  6. reflex/app_mixins/lifespan.py +2 -2
  7. reflex/app_mixins/middleware.py +1 -2
  8. reflex/assets.py +1 -2
  9. reflex/base.py +2 -2
  10. reflex/compiler/compiler.py +51 -16
  11. reflex/compiler/utils.py +4 -13
  12. reflex/components/base/app_wrap.pyi +7 -7
  13. reflex/components/base/bare.py +3 -3
  14. reflex/components/base/body.pyi +7 -7
  15. reflex/components/base/document.py +1 -3
  16. reflex/components/base/document.pyi +32 -32
  17. reflex/components/base/error_boundary.py +2 -4
  18. reflex/components/base/error_boundary.pyi +11 -13
  19. reflex/components/base/fragment.pyi +7 -7
  20. reflex/components/base/head.pyi +13 -13
  21. reflex/components/base/link.pyi +22 -22
  22. reflex/components/base/meta.py +5 -7
  23. reflex/components/base/meta.pyi +40 -40
  24. reflex/components/base/script.pyi +11 -14
  25. reflex/components/base/strict_mode.pyi +7 -7
  26. reflex/components/component.py +188 -113
  27. reflex/components/core/auto_scroll.py +8 -1
  28. reflex/components/core/auto_scroll.pyi +183 -210
  29. reflex/components/core/banner.py +2 -4
  30. reflex/components/core/banner.pyi +390 -444
  31. reflex/components/core/breakpoints.py +5 -5
  32. reflex/components/core/client_side_routing.pyi +14 -14
  33. reflex/components/core/clipboard.py +4 -4
  34. reflex/components/core/clipboard.pyi +12 -14
  35. reflex/components/core/cond.py +17 -25
  36. reflex/components/core/debounce.py +3 -3
  37. reflex/components/core/debounce.pyi +14 -14
  38. reflex/components/core/foreach.py +7 -2
  39. reflex/components/core/html.py +1 -3
  40. reflex/components/core/html.pyi +184 -213
  41. reflex/components/core/match.py +15 -19
  42. reflex/components/core/sticky.pyi +930 -1078
  43. reflex/components/core/upload.py +4 -4
  44. reflex/components/core/upload.pyi +62 -62
  45. reflex/components/datadisplay/code.py +6 -6
  46. reflex/components/datadisplay/code.pyi +1159 -1165
  47. reflex/components/datadisplay/dataeditor.py +49 -49
  48. reflex/components/datadisplay/dataeditor.pyi +95 -123
  49. reflex/components/datadisplay/logo.py +1 -3
  50. reflex/components/datadisplay/shiki_code_block.py +8 -10
  51. reflex/components/datadisplay/shiki_code_block.pyi +1678 -1720
  52. reflex/components/el/element.pyi +7 -7
  53. reflex/components/el/elements/base.pyi +183 -210
  54. reflex/components/el/elements/forms.py +24 -24
  55. reflex/components/el/elements/forms.pyi +2572 -2934
  56. reflex/components/el/elements/inline.py +4 -4
  57. reflex/components/el/elements/inline.pyi +5191 -5953
  58. reflex/components/el/elements/media.py +47 -47
  59. reflex/components/el/elements/media.pyi +4802 -5500
  60. reflex/components/el/elements/metadata.py +1 -3
  61. reflex/components/el/elements/metadata.pyi +782 -896
  62. reflex/components/el/elements/other.pyi +1278 -1467
  63. reflex/components/el/elements/scripts.pyi +580 -667
  64. reflex/components/el/elements/sectioning.pyi +2761 -3166
  65. reflex/components/el/elements/tables.pyi +1840 -2119
  66. reflex/components/el/elements/typography.pyi +2772 -3179
  67. reflex/components/gridjs/datatable.py +7 -7
  68. reflex/components/gridjs/datatable.pyi +19 -19
  69. reflex/components/lucide/icon.pyi +21 -21
  70. reflex/components/markdown/markdown.py +2 -2
  71. reflex/components/markdown/markdown.pyi +9 -9
  72. reflex/components/moment/moment.py +11 -12
  73. reflex/components/moment/moment.pyi +44 -47
  74. reflex/components/next/base.pyi +7 -7
  75. reflex/components/next/image.py +3 -3
  76. reflex/components/next/image.pyi +19 -21
  77. reflex/components/next/link.pyi +9 -9
  78. reflex/components/next/video.py +1 -3
  79. reflex/components/next/video.pyi +9 -9
  80. reflex/components/plotly/plotly.py +22 -45
  81. reflex/components/plotly/plotly.pyi +164 -164
  82. reflex/components/radix/primitives/accordion.py +14 -14
  83. reflex/components/radix/primitives/accordion.pyi +439 -487
  84. reflex/components/radix/primitives/base.py +1 -3
  85. reflex/components/radix/primitives/base.pyi +15 -15
  86. reflex/components/radix/primitives/drawer.py +3 -3
  87. reflex/components/radix/primitives/drawer.pyi +110 -116
  88. reflex/components/radix/primitives/form.py +1 -1
  89. reflex/components/radix/primitives/form.pyi +668 -752
  90. reflex/components/radix/primitives/progress.py +6 -6
  91. reflex/components/radix/primitives/progress.pyi +225 -243
  92. reflex/components/radix/primitives/slider.py +6 -6
  93. reflex/components/radix/primitives/slider.pyi +52 -55
  94. reflex/components/radix/themes/base.py +3 -6
  95. reflex/components/radix/themes/base.pyi +197 -303
  96. reflex/components/radix/themes/color_mode.py +5 -5
  97. reflex/components/radix/themes/color_mode.pyi +366 -436
  98. reflex/components/radix/themes/components/alert_dialog.pyi +229 -262
  99. reflex/components/radix/themes/components/aspect_ratio.py +1 -3
  100. reflex/components/radix/themes/components/aspect_ratio.pyi +8 -8
  101. reflex/components/radix/themes/components/avatar.pyi +79 -94
  102. reflex/components/radix/themes/components/badge.pyi +252 -295
  103. reflex/components/radix/themes/components/button.pyi +269 -314
  104. reflex/components/radix/themes/components/callout.py +2 -2
  105. reflex/components/radix/themes/components/callout.pyi +1116 -1290
  106. reflex/components/radix/themes/components/card.pyi +194 -229
  107. reflex/components/radix/themes/components/checkbox.pyi +243 -278
  108. reflex/components/radix/themes/components/checkbox_cards.py +3 -7
  109. reflex/components/radix/themes/components/checkbox_cards.pyi +101 -135
  110. reflex/components/radix/themes/components/checkbox_group.py +2 -2
  111. reflex/components/radix/themes/components/checkbox_group.pyi +83 -96
  112. reflex/components/radix/themes/components/context_menu.py +18 -15
  113. reflex/components/radix/themes/components/context_menu.pyi +408 -458
  114. reflex/components/radix/themes/components/data_list.pyi +122 -147
  115. reflex/components/radix/themes/components/dialog.pyi +231 -264
  116. reflex/components/radix/themes/components/dropdown_menu.py +16 -13
  117. reflex/components/radix/themes/components/dropdown_menu.pyi +223 -246
  118. reflex/components/radix/themes/components/hover_card.py +2 -2
  119. reflex/components/radix/themes/components/hover_card.pyi +237 -282
  120. reflex/components/radix/themes/components/icon_button.pyi +269 -314
  121. reflex/components/radix/themes/components/inset.py +8 -8
  122. reflex/components/radix/themes/components/inset.pyi +232 -292
  123. reflex/components/radix/themes/components/popover.py +2 -2
  124. reflex/components/radix/themes/components/popover.pyi +229 -271
  125. reflex/components/radix/themes/components/progress.pyi +80 -96
  126. reflex/components/radix/themes/components/radio.pyi +73 -86
  127. reflex/components/radix/themes/components/radio_cards.py +4 -8
  128. reflex/components/radix/themes/components/radio_cards.pyi +117 -154
  129. reflex/components/radix/themes/components/radio_group.py +3 -3
  130. reflex/components/radix/themes/components/radio_group.pyi +250 -291
  131. reflex/components/radix/themes/components/scroll_area.pyi +14 -20
  132. reflex/components/radix/themes/components/segmented_control.py +6 -6
  133. reflex/components/radix/themes/components/segmented_control.pyi +89 -108
  134. reflex/components/radix/themes/components/select.py +7 -7
  135. reflex/components/radix/themes/components/select.pyi +376 -444
  136. reflex/components/radix/themes/components/separator.pyi +79 -93
  137. reflex/components/radix/themes/components/skeleton.pyi +32 -26
  138. reflex/components/radix/themes/components/slider.py +8 -8
  139. reflex/components/radix/themes/components/slider.pyi +99 -122
  140. reflex/components/radix/themes/components/spinner.pyi +12 -19
  141. reflex/components/radix/themes/components/switch.pyi +84 -99
  142. reflex/components/radix/themes/components/table.py +9 -9
  143. reflex/components/radix/themes/components/table.pyi +1440 -1794
  144. reflex/components/radix/themes/components/tabs.py +4 -4
  145. reflex/components/radix/themes/components/tabs.pyi +120 -132
  146. reflex/components/radix/themes/components/text_area.pyi +281 -331
  147. reflex/components/radix/themes/components/text_field.py +2 -2
  148. reflex/components/radix/themes/components/text_field.pyi +639 -734
  149. reflex/components/radix/themes/components/tooltip.py +6 -6
  150. reflex/components/radix/themes/components/tooltip.pyi +34 -43
  151. reflex/components/radix/themes/layout/base.pyi +85 -182
  152. reflex/components/radix/themes/layout/box.pyi +183 -210
  153. reflex/components/radix/themes/layout/center.pyi +225 -286
  154. reflex/components/radix/themes/layout/container.pyi +191 -224
  155. reflex/components/radix/themes/layout/flex.py +2 -2
  156. reflex/components/radix/themes/layout/flex.pyi +225 -286
  157. reflex/components/radix/themes/layout/grid.py +2 -2
  158. reflex/components/radix/themes/layout/grid.pyi +245 -315
  159. reflex/components/radix/themes/layout/list.py +2 -2
  160. reflex/components/radix/themes/layout/list.pyi +712 -815
  161. reflex/components/radix/themes/layout/section.pyi +187 -221
  162. reflex/components/radix/themes/layout/spacer.pyi +225 -286
  163. reflex/components/radix/themes/layout/stack.pyi +625 -768
  164. reflex/components/radix/themes/typography/blockquote.pyi +257 -299
  165. reflex/components/radix/themes/typography/code.pyi +259 -304
  166. reflex/components/radix/themes/typography/heading.pyi +272 -324
  167. reflex/components/radix/themes/typography/link.pyi +302 -358
  168. reflex/components/radix/themes/typography/text.pyi +1669 -1945
  169. reflex/components/react_player/audio.pyi +20 -22
  170. reflex/components/react_player/react_player.pyi +19 -19
  171. reflex/components/react_player/video.pyi +20 -22
  172. reflex/components/recharts/cartesian.py +100 -97
  173. reflex/components/recharts/cartesian.pyi +891 -1007
  174. reflex/components/recharts/charts.py +42 -42
  175. reflex/components/recharts/charts.pyi +212 -249
  176. reflex/components/recharts/general.py +22 -21
  177. reflex/components/recharts/general.pyi +198 -223
  178. reflex/components/recharts/polar.py +42 -45
  179. reflex/components/recharts/polar.pyi +254 -288
  180. reflex/components/recharts/recharts.pyi +13 -13
  181. reflex/components/sonner/toast.py +20 -20
  182. reflex/components/sonner/toast.pyi +58 -61
  183. reflex/components/suneditor/editor.py +9 -9
  184. reflex/components/suneditor/editor.pyi +78 -83
  185. reflex/components/tags/cond_tag.py +2 -2
  186. reflex/components/tags/iter_tag.py +10 -14
  187. reflex/components/tags/match_tag.py +2 -2
  188. reflex/components/tags/tag.py +10 -10
  189. reflex/config.py +36 -35
  190. reflex/constants/__init__.py +56 -53
  191. reflex/custom_components/custom_components.py +6 -7
  192. reflex/event.py +38 -42
  193. reflex/experimental/client_state.py +2 -4
  194. reflex/experimental/layout.py +2 -2
  195. reflex/experimental/layout.pyi +579 -663
  196. reflex/istate/data.py +4 -5
  197. reflex/middleware/hydrate_middleware.py +2 -2
  198. reflex/middleware/middleware.py +2 -2
  199. reflex/model.py +3 -5
  200. reflex/page.py +2 -2
  201. reflex/reflex.py +9 -10
  202. reflex/state.py +77 -49
  203. reflex/style.py +11 -5
  204. reflex/testing.py +21 -24
  205. reflex/utils/console.py +1 -1
  206. reflex/utils/decorator.py +26 -1
  207. reflex/utils/exec.py +6 -11
  208. reflex/utils/export.py +2 -3
  209. reflex/utils/format.py +4 -4
  210. reflex/utils/imports.py +12 -12
  211. reflex/utils/prerequisites.py +35 -84
  212. reflex/utils/processes.py +5 -5
  213. reflex/utils/pyi_generator.py +33 -22
  214. reflex/utils/serializers.py +60 -15
  215. reflex/utils/types.py +237 -56
  216. reflex/vars/base.py +122 -72
  217. reflex/vars/datetime.py +2 -2
  218. reflex/vars/function.py +52 -55
  219. reflex/vars/number.py +59 -5
  220. reflex/vars/object.py +57 -26
  221. reflex/vars/sequence.py +983 -958
  222. {reflex-0.7.1a4.dist-info → reflex-0.7.2.dist-info}/METADATA +3 -6
  223. reflex-0.7.2.dist-info/RECORD +405 -0
  224. {reflex-0.7.1a4.dist-info → reflex-0.7.2.dist-info}/WHEEL +1 -1
  225. reflex-0.7.1a4.dist-info/RECORD +0 -405
  226. {reflex-0.7.1a4.dist-info → reflex-0.7.2.dist-info}/LICENSE +0 -0
  227. {reflex-0.7.1a4.dist-info → reflex-0.7.2.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: