reflex 0.7.1a1__py3-none-any.whl → 0.7.1a3__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.

@@ -15,7 +15,13 @@
15
15
  "devDependencies": {
16
16
  {% for package, version in dev_dependencies.items() %}
17
17
  "{{ package }}": "{{ version }}"{% if not loop.last %},{% endif %}
18
-
18
+
19
+ {% endfor %}
20
+ },
21
+ "overrides": {
22
+ {% for package, version in overrides.items() %}
23
+ "{{ package }}": "{{ version }}"{% if not loop.last %},{% endif %}
24
+
19
25
  {% endfor %}
20
26
  }
21
27
  }
reflex/app.py CHANGED
@@ -75,6 +75,7 @@ from reflex.components.core.client_side_routing import (
75
75
  from reflex.components.core.sticky import sticky
76
76
  from reflex.components.core.upload import Upload, get_upload_dir
77
77
  from reflex.components.radix import themes
78
+ from reflex.components.sonner.toast import toast
78
79
  from reflex.config import ExecutorType, environment, get_config
79
80
  from reflex.event import (
80
81
  _EVENT_FIELDS,
@@ -84,7 +85,6 @@ from reflex.event import (
84
85
  EventType,
85
86
  IndividualEventType,
86
87
  get_hydrate_event,
87
- window_alert,
88
88
  )
89
89
  from reflex.model import Model, get_db_status
90
90
  from reflex.page import DECORATED_PAGES
@@ -144,7 +144,7 @@ def default_backend_exception_handler(exception: Exception) -> EventSpec:
144
144
  EventSpec: The window alert event.
145
145
 
146
146
  """
147
- from reflex.components.sonner.toast import Toaster, toast
147
+ from reflex.components.sonner.toast import toast
148
148
 
149
149
  error = traceback.format_exc()
150
150
 
@@ -155,18 +155,16 @@ def default_backend_exception_handler(exception: Exception) -> EventSpec:
155
155
  if is_prod_mode()
156
156
  else [f"{type(exception).__name__}: {exception}.", "See logs for details."]
157
157
  )
158
- if Toaster.is_used:
159
- return toast(
160
- "An error occurred.",
161
- level="error",
162
- description="<br/>".join(error_message),
163
- position="top-center",
164
- id="backend_error",
165
- style={"width": "500px"},
166
- )
167
- else:
168
- error_message.insert(0, "An error occurred.")
169
- return window_alert("\n".join(error_message))
158
+
159
+ return toast(
160
+ "An error occurred.",
161
+ level="error",
162
+ fallback_to_alert=True,
163
+ description="<br/>".join(error_message),
164
+ position="top-center",
165
+ id="backend_error",
166
+ style={"width": "500px"},
167
+ )
170
168
 
171
169
 
172
170
  def extra_overlay_function() -> Optional[Component]:
@@ -414,7 +412,7 @@ class App(MiddlewareMixin, LifespanMixin):
414
412
  ] = default_backend_exception_handler
415
413
 
416
414
  # Put the toast provider in the app wrap.
417
- bundle_toaster: bool = True
415
+ toaster: Component | None = dataclasses.field(default_factory=toast.provider)
418
416
 
419
417
  @property
420
418
  def api(self) -> FastAPI | None:
@@ -1100,10 +1098,6 @@ class App(MiddlewareMixin, LifespanMixin):
1100
1098
  should_compile = self._should_compile()
1101
1099
 
1102
1100
  if not should_compile:
1103
- if self.bundle_toaster:
1104
- from reflex.components.sonner.toast import Toaster
1105
-
1106
- Toaster.is_used = True
1107
1101
  with console.timing("Evaluate Pages (Backend)"):
1108
1102
  for route in self._unevaluated_pages:
1109
1103
  console.debug(f"Evaluating page: {route}")
@@ -1133,20 +1127,6 @@ class App(MiddlewareMixin, LifespanMixin):
1133
1127
  + adhoc_steps_without_executor,
1134
1128
  )
1135
1129
 
1136
- if self.bundle_toaster:
1137
- from reflex.components.component import memo
1138
- from reflex.components.sonner.toast import toast
1139
-
1140
- internal_toast_provider = toast.provider()
1141
-
1142
- @memo
1143
- def memoized_toast_provider():
1144
- return internal_toast_provider
1145
-
1146
- toast_provider = Fragment.create(memoized_toast_provider())
1147
-
1148
- app_wrappers[(1, "ToasterProvider")] = toast_provider
1149
-
1150
1130
  with console.timing("Evaluate Pages (Frontend)"):
1151
1131
  performance_metrics: list[tuple[str, float]] = []
1152
1132
  for route in self._unevaluated_pages:
@@ -1207,6 +1187,17 @@ class App(MiddlewareMixin, LifespanMixin):
1207
1187
  # Add the custom components from the page to the set.
1208
1188
  custom_components |= component._get_all_custom_components()
1209
1189
 
1190
+ if (toaster := self.toaster) is not None:
1191
+ from reflex.components.component import memo
1192
+
1193
+ @memo
1194
+ def memoized_toast_provider():
1195
+ return toaster
1196
+
1197
+ toast_provider = Fragment.create(memoized_toast_provider())
1198
+
1199
+ app_wrappers[(1, "ToasterProvider")] = toast_provider
1200
+
1210
1201
  # Add the app wraps to the app.
1211
1202
  for key, app_wrap in self.app_wraps.items():
1212
1203
  component = app_wrap(self._state is not None)
@@ -11,7 +11,9 @@ from reflex.vars.base import Var, get_unique_variable_name
11
11
  class AutoScroll(Div):
12
12
  """A div that automatically scrolls to the bottom when new content is added."""
13
13
 
14
- _memoization_mode = MemoizationMode(disposition=MemoizationDisposition.ALWAYS)
14
+ _memoization_mode = MemoizationMode(
15
+ disposition=MemoizationDisposition.ALWAYS, recursive=False
16
+ )
15
17
 
16
18
  @classmethod
17
19
  def create(cls, *children, **props):
@@ -44,7 +46,6 @@ class AutoScroll(Div):
44
46
  """
45
47
  ref_name = self.get_ref()
46
48
  return [
47
- "const containerRef = useRef(null);",
48
49
  "const wasNearBottom = useRef(false);",
49
50
  "const hadScrollbar = useRef(false);",
50
51
  f"""
@@ -85,6 +86,8 @@ useEffect(() => {{
85
86
  const container = {ref_name}.current;
86
87
  if (!container) return;
87
88
 
89
+ scrollToBottomIfNeeded();
90
+
88
91
  // Create ResizeObserver to detect height changes
89
92
  const resizeObserver = new ResizeObserver(() => {{
90
93
  scrollToBottomIfNeeded();
@@ -5,6 +5,7 @@ from __future__ import annotations
5
5
  from typing import Optional
6
6
 
7
7
  from reflex import constants
8
+ from reflex.components.base.fragment import Fragment
8
9
  from reflex.components.component import Component
9
10
  from reflex.components.core.cond import cond
10
11
  from reflex.components.el.elements.typography import Div
@@ -16,7 +17,7 @@ from reflex.components.radix.themes.components.dialog import (
16
17
  )
17
18
  from reflex.components.radix.themes.layout.flex import Flex
18
19
  from reflex.components.radix.themes.typography.text import Text
19
- from reflex.components.sonner.toast import Toaster, ToastProps
20
+ from reflex.components.sonner.toast import ToastProps, toast_ref
20
21
  from reflex.config import environment
21
22
  from reflex.constants import Dirs, Hooks, Imports
22
23
  from reflex.constants.compiler import CompileVars
@@ -90,7 +91,7 @@ def default_connection_error() -> list[str | Var | Component]:
90
91
  ]
91
92
 
92
93
 
93
- class ConnectionToaster(Toaster):
94
+ class ConnectionToaster(Fragment):
94
95
  """A connection toaster component."""
95
96
 
96
97
  def add_hooks(self) -> list[str | Var]:
@@ -113,11 +114,11 @@ class ConnectionToaster(Toaster):
113
114
  if environment.REFLEX_DOES_BACKEND_COLD_START.get():
114
115
  loading_message = Var.create("Backend is starting.")
115
116
  backend_is_loading_toast_var = Var(
116
- f"toast.loading({loading_message!s}, {{...toast_props, description: '', closeButton: false, onDismiss: () => setUserDismissed(true)}},)"
117
+ f"toast?.loading({loading_message!s}, {{...toast_props, description: '', closeButton: false, onDismiss: () => setUserDismissed(true)}},)"
117
118
  )
118
119
  backend_is_not_responding = Var.create("Backend is not responding.")
119
120
  backend_is_down_toast_var = Var(
120
- f"toast.error({backend_is_not_responding!s}, {{...toast_props, description: '', onDismiss: () => setUserDismissed(true)}},)"
121
+ f"toast?.error({backend_is_not_responding!s}, {{...toast_props, description: '', onDismiss: () => setUserDismissed(true)}},)"
121
122
  )
122
123
  toast_var = Var(
123
124
  f"""
@@ -138,10 +139,11 @@ setTimeout(() => {{
138
139
  f"Cannot connect to server: {connection_error}."
139
140
  )
140
141
  toast_var = Var(
141
- f"toast.error({loading_message!s}, {{...toast_props, onDismiss: () => setUserDismissed(true)}},)"
142
+ f"toast?.error({loading_message!s}, {{...toast_props, onDismiss: () => setUserDismissed(true)}},)"
142
143
  )
143
144
 
144
145
  individual_hooks = [
146
+ Var(f"const toast = {toast_ref};"),
145
147
  f"const toast_props = {LiteralVar.create(props)!s};",
146
148
  "const [userDismissed, setUserDismissed] = useState(false);",
147
149
  "const [waitedForBackend, setWaitedForBackend] = useState(false);",
@@ -163,7 +165,7 @@ setTimeout(() => {{
163
165
  {toast_var!s}
164
166
  }}
165
167
  }} else {{
166
- toast.dismiss("{toast_id}");
168
+ toast?.dismiss("{toast_id}");
167
169
  setUserDismissed(false); // after reconnection reset dismissed state
168
170
  }}
169
171
  }}
@@ -189,7 +191,6 @@ setTimeout(() => {{
189
191
  Returns:
190
192
  The connection toaster component.
191
193
  """
192
- Toaster.is_used = True
193
194
  return super().create(*children, **props)
194
195
 
195
196
 
@@ -5,10 +5,10 @@
5
5
  # ------------------------------------------------------
6
6
  from typing import Any, Dict, Literal, Optional, Union, overload
7
7
 
8
+ from reflex.components.base.fragment import Fragment
8
9
  from reflex.components.component import Component
9
10
  from reflex.components.el.elements.typography import Div
10
11
  from reflex.components.lucide.icon import Icon
11
- from reflex.components.sonner.toast import Toaster, ToastProps
12
12
  from reflex.constants.compiler import CompileVars
13
13
  from reflex.event import EventType
14
14
  from reflex.style import Style
@@ -41,48 +41,13 @@ class WebsocketTargetURL(Var):
41
41
 
42
42
  def default_connection_error() -> list[str | Var | Component]: ...
43
43
 
44
- class ConnectionToaster(Toaster):
44
+ class ConnectionToaster(Fragment):
45
45
  def add_hooks(self) -> list[str | Var]: ...
46
46
  @overload
47
47
  @classmethod
48
48
  def create( # type: ignore
49
49
  cls,
50
50
  *children,
51
- theme: Optional[Union[Var[str], str]] = None,
52
- rich_colors: Optional[Union[Var[bool], bool]] = None,
53
- expand: Optional[Union[Var[bool], bool]] = None,
54
- visible_toasts: Optional[Union[Var[int], int]] = None,
55
- position: Optional[
56
- Union[
57
- Literal[
58
- "bottom-center",
59
- "bottom-left",
60
- "bottom-right",
61
- "top-center",
62
- "top-left",
63
- "top-right",
64
- ],
65
- Var[
66
- Literal[
67
- "bottom-center",
68
- "bottom-left",
69
- "bottom-right",
70
- "top-center",
71
- "top-left",
72
- "top-right",
73
- ]
74
- ],
75
- ]
76
- ] = None,
77
- close_button: Optional[Union[Var[bool], bool]] = None,
78
- offset: Optional[Union[Var[str], str]] = None,
79
- dir: Optional[Union[Var[str], str]] = None,
80
- hotkey: Optional[Union[Var[str], str]] = None,
81
- invert: Optional[Union[Var[bool], bool]] = None,
82
- toast_options: Optional[Union[ToastProps, Var[ToastProps]]] = None,
83
- gap: Optional[Union[Var[int], int]] = None,
84
- loading_icon: Optional[Union[Icon, Var[Icon]]] = None,
85
- pause_when_page_is_hidden: Optional[Union[Var[bool], bool]] = None,
86
51
  style: Optional[Style] = None,
87
52
  key: Optional[Any] = None,
88
53
  id: Optional[Any] = None,
@@ -110,20 +75,6 @@ class ConnectionToaster(Toaster):
110
75
 
111
76
  Args:
112
77
  *children: The children of the component.
113
- theme: the theme of the toast
114
- rich_colors: whether to show rich colors
115
- expand: whether to expand the toast
116
- visible_toasts: the number of toasts that are currently visible
117
- position: the position of the toast
118
- close_button: whether to show the close button
119
- offset: offset of the toast
120
- dir: directionality of the toast (default: ltr)
121
- hotkey: Keyboard shortcut that will move focus to the toaster area.
122
- invert: Dark toasts in light mode and vice versa.
123
- toast_options: These will act as default options for all toasts. See toast() for all available options.
124
- gap: Gap between toasts when expanded
125
- loading_icon: Changes the default loading icon
126
- pause_when_page_is_hidden: Pauses toast timers when the page is hidden, e.g., when the tab is backgrounded, the browser is minimized, or the OS is locked.
127
78
  style: The style of the component.
128
79
  key: A unique key for the component.
129
80
  id: The id for the component.
@@ -2,7 +2,7 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
- from typing import Any, ClassVar, Literal, Optional, Union
5
+ from typing import Any, Literal, Optional, Union
6
6
 
7
7
  from reflex.base import Base
8
8
  from reflex.components.component import Component, ComponentNamespace
@@ -17,6 +17,7 @@ from reflex.utils.serializers import serializer
17
17
  from reflex.vars import VarData
18
18
  from reflex.vars.base import LiteralVar, Var
19
19
  from reflex.vars.function import FunctionVar
20
+ from reflex.vars.number import ternary_operation
20
21
  from reflex.vars.object import ObjectVar
21
22
 
22
23
  LiteralPosition = Literal[
@@ -217,9 +218,6 @@ class Toaster(Component):
217
218
  # Pauses toast timers when the page is hidden, e.g., when the tab is backgrounded, the browser is minimized, or the OS is locked.
218
219
  pause_when_page_is_hidden: Var[bool]
219
220
 
220
- # Marked True when any Toast component is created.
221
- is_used: ClassVar[bool] = False
222
-
223
221
  def add_hooks(self) -> list[Var | str]:
224
222
  """Add hooks for the toaster component.
225
223
 
@@ -241,13 +239,17 @@ class Toaster(Component):
241
239
 
242
240
  @staticmethod
243
241
  def send_toast(
244
- message: str | Var = "", level: str | None = None, **props
242
+ message: str | Var = "",
243
+ level: str | None = None,
244
+ fallback_to_alert: bool = False,
245
+ **props,
245
246
  ) -> EventSpec:
246
247
  """Send a toast message.
247
248
 
248
249
  Args:
249
250
  message: The message to display.
250
251
  level: The level of the toast.
252
+ fallback_to_alert: Whether to fallback to an alert if the toaster is not created.
251
253
  **props: The options for the toast.
252
254
 
253
255
  Raises:
@@ -256,11 +258,6 @@ class Toaster(Component):
256
258
  Returns:
257
259
  The toast event.
258
260
  """
259
- if not Toaster.is_used:
260
- raise ValueError(
261
- "Toaster component must be created before sending a toast. (use `rx.toast.provider()`)"
262
- )
263
-
264
261
  toast_command = (
265
262
  ObjectVar.__getattr__(toast_ref.to(dict), level) if level else toast_ref
266
263
  ).to(FunctionVar)
@@ -277,6 +274,21 @@ class Toaster(Component):
277
274
  else:
278
275
  toast = toast_command.call(message)
279
276
 
277
+ if fallback_to_alert:
278
+ toast = ternary_operation(
279
+ toast_ref.bool(),
280
+ toast,
281
+ FunctionVar("window.alert").call(
282
+ Var.create(
283
+ message
284
+ if isinstance(message, str) and message
285
+ else props.get("title", props.get("description", ""))
286
+ )
287
+ .to(str)
288
+ .replace("<br/>", "\n")
289
+ ),
290
+ )
291
+
280
292
  return run_script(toast)
281
293
 
282
294
  @staticmethod
@@ -379,7 +391,6 @@ class Toaster(Component):
379
391
  Returns:
380
392
  The toaster component.
381
393
  """
382
- cls.is_used = True
383
394
  return super().create(*children, **props)
384
395
 
385
396
 
@@ -3,7 +3,7 @@
3
3
  # ------------------- DO NOT EDIT ----------------------
4
4
  # This file was generated by `reflex/utils/pyi_generator.py`!
5
5
  # ------------------------------------------------------
6
- from typing import Any, ClassVar, Dict, Literal, Optional, Union, overload
6
+ from typing import Any, Dict, Literal, Optional, Union, overload
7
7
 
8
8
  from reflex.base import Base
9
9
  from reflex.components.component import Component, ComponentNamespace
@@ -60,12 +60,13 @@ class ToastProps(PropsBase, NoExtrasAllowedProps):
60
60
  def dict(self, *args: Any, **kwargs: Any) -> dict[str, Any]: ...
61
61
 
62
62
  class Toaster(Component):
63
- is_used: ClassVar[bool] = False
64
-
65
63
  def add_hooks(self) -> list[Var | str]: ...
66
64
  @staticmethod
67
65
  def send_toast(
68
- message: str | Var = "", level: str | None = None, **props
66
+ message: str | Var = "",
67
+ level: str | None = None,
68
+ fallback_to_alert: bool = False,
69
+ **props,
69
70
  ) -> EventSpec: ...
70
71
  @staticmethod
71
72
  def toast_info(message: str | Var = "", **kwargs: Any): ...
@@ -185,13 +186,17 @@ class ToastNamespace(ComponentNamespace):
185
186
 
186
187
  @staticmethod
187
188
  def __call__(
188
- message: Union[str, Var] = "", level: Optional[str] = None, **props
189
+ message: Union[str, Var] = "",
190
+ level: Optional[str] = None,
191
+ fallback_to_alert: bool = False,
192
+ **props,
189
193
  ) -> "EventSpec":
190
194
  """Send a toast message.
191
195
 
192
196
  Args:
193
197
  message: The message to display.
194
198
  level: The level of the toast.
199
+ fallback_to_alert: Whether to fallback to an alert if the toaster is not created.
195
200
  **props: The options for the toast.
196
201
 
197
202
  Raises:
@@ -195,3 +195,7 @@ class PackageJson(SimpleNamespace):
195
195
  "postcss": "8.5.1",
196
196
  "postcss-import": "16.1.0",
197
197
  }
198
+ OVERRIDES = {
199
+ # This should always match the `react` version in DEPENDENCIES for recharts compatibility.
200
+ "react-is": "19.0.0"
201
+ }
reflex/style.py CHANGED
@@ -6,7 +6,7 @@ from typing import Any, Literal, Tuple, Type
6
6
 
7
7
  from reflex import constants
8
8
  from reflex.components.core.breakpoints import Breakpoints, breakpoints_values
9
- from reflex.event import EventChain, EventHandler
9
+ from reflex.event import EventChain, EventHandler, EventSpec, run_script
10
10
  from reflex.utils import format
11
11
  from reflex.utils.exceptions import ReflexError
12
12
  from reflex.utils.imports import ImportVar
@@ -49,9 +49,9 @@ def _color_mode_var(_js_expr: str, _var_type: Type = str) -> Var:
49
49
 
50
50
 
51
51
  def set_color_mode(
52
- new_color_mode: LiteralColorMode | Var[LiteralColorMode] | None = None,
53
- ) -> Var[EventChain]:
54
- """Create an EventChain Var that sets the color mode to a specific value.
52
+ new_color_mode: LiteralColorMode | Var[LiteralColorMode],
53
+ ) -> EventSpec:
54
+ """Create an EventSpec Var that sets the color mode to a specific value.
55
55
 
56
56
  Note: `set_color_mode` is not a real event and cannot be triggered from a
57
57
  backend event handler.
@@ -60,24 +60,15 @@ def set_color_mode(
60
60
  new_color_mode: The color mode to set.
61
61
 
62
62
  Returns:
63
- The EventChain Var that can be passed to an event trigger.
63
+ The EventSpec Var that can be passed to an event trigger.
64
64
  """
65
65
  base_setter = _color_mode_var(
66
66
  _js_expr=constants.ColorMode.SET,
67
- _var_type=EventChain,
68
- )
69
- if new_color_mode is None:
70
- return base_setter
71
-
72
- if not isinstance(new_color_mode, Var):
73
- new_color_mode = LiteralVar.create(new_color_mode)
67
+ ).to(FunctionVar)
74
68
 
75
- return Var(
76
- f"() => {base_setter!s}({new_color_mode!s})",
77
- _var_data=VarData.merge(
78
- base_setter._get_all_var_data(), new_color_mode._get_all_var_data()
79
- ),
80
- ).to(FunctionVar, EventChain)
69
+ return run_script(
70
+ base_setter.call(new_color_mode),
71
+ )
81
72
 
82
73
 
83
74
  # Var resolves to the current color mode for the app ("light", "dark" or "system")
@@ -846,6 +846,7 @@ def _compile_package_json():
846
846
  },
847
847
  dependencies=constants.PackageJson.DEPENDENCIES,
848
848
  dev_dependencies=constants.PackageJson.DEV_DEPENDENCIES,
849
+ overrides=constants.PackageJson.OVERRIDES,
849
850
  )
850
851
 
851
852
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: reflex
3
- Version: 0.7.1a1
3
+ Version: 0.7.1a3
4
4
  Summary: Web apps in pure Python.
5
5
  License: Apache-2.0
6
6
  Keywords: web,framework
@@ -7,7 +7,7 @@ reflex/.templates/jinja/custom_components/__init__.py.jinja2,sha256=z5n2tvoS7iND
7
7
  reflex/.templates/jinja/custom_components/demo_app.py.jinja2,sha256=ipbKtObNqQLcwbFowod_bSWW4bttW_8bNyTXl7JL1zg,826
8
8
  reflex/.templates/jinja/custom_components/pyproject.toml.jinja2,sha256=HG-k3pruUlMy7xYz339hgFkNMTLqB-C_FTLKkOgfBPM,630
9
9
  reflex/.templates/jinja/custom_components/src.py.jinja2,sha256=e80PwMI6NoeQtGJ0NXWhYrkqUe7jvvJTFuztYQe-R5w,2403
10
- reflex/.templates/jinja/web/package.json.jinja2,sha256=YU9PF8WgiQ8OPlG3oLDX31t2R0o6DFntCh698NTiDK8,548
10
+ reflex/.templates/jinja/web/package.json.jinja2,sha256=Dyg7DbKaEgxUoaV_DUsv_bHcT0h1mXKgO4R_pVzlHQw,707
11
11
  reflex/.templates/jinja/web/pages/_app.js.jinja2,sha256=s0pSHZAZB9SUI3PabTB8uB4I3kehMc-L2DXBxSW6iQY,1375
12
12
  reflex/.templates/jinja/web/pages/_document.js.jinja2,sha256=E2r3MWp-gimAa6DdRs9ErQpPEyjS_yV5fdid_wdOOlA,182
13
13
  reflex/.templates/jinja/web/pages/base_page.js.jinja2,sha256=-Jykv29ZqzsQyyRe_iR2gUD5ac-X5RhDrGs0-diOMOA,400
@@ -40,7 +40,7 @@ reflex/__init__.py,sha256=64HB9b6MKesl3Yv6aZMsozdMKKpgnxirKk-aeN45UYY,10341
40
40
  reflex/__init__.pyi,sha256=j4ZkO-mKKw5dFBhJVbaOg7AlncO-JCckV2cHENPiLG0,11303
41
41
  reflex/__main__.py,sha256=6cVrGEyT3j3tEvlEVUatpaYfbB5EF3UVY-6vc_Z7-hw,108
42
42
  reflex/admin.py,sha256=_3pkkauMiTGJJ0kwAEBnsUWAgZZ_1WNnCaaObbhpmUI,374
43
- reflex/app.py,sha256=fUtAJjxVMdRfiVFvLPq-ojfGe_dbDGqpCeB4H3I1h60,68986
43
+ reflex/app.py,sha256=1O5MOi3PnHnOht7GrXutUGOwjdE9nqRBm-H3B2UeA2U,68659
44
44
  reflex/app_mixins/__init__.py,sha256=Oegz3-gZLP9p2OAN5ALNbsgxuNQfS6lGZgQA8cc-9mQ,137
45
45
  reflex/app_mixins/lifespan.py,sha256=Xs5KiidoyO921oaBuEg7zaR8B1_SPYDZLouel6u9PRo,3298
46
46
  reflex/app_mixins/middleware.py,sha256=lB8I67SEbqcJhp3aqMLZFIZekCYKeMby-Ph2sedIYJI,3349
@@ -80,10 +80,10 @@ reflex/components/base/strict_mode.pyi,sha256=3JSap5xIYQqzbhO_3crfbuwl2J9DXGSWVo
80
80
  reflex/components/component.py,sha256=nBsxmSlpy7W_50nWzAKaY_P5MXkKSriA1dirSSX-ex0,86360
81
81
  reflex/components/core/__init__.py,sha256=1Z5MUA5wRPi4w7TXzRFyCfxbG8lUMqs29buWHIGG-CU,1321
82
82
  reflex/components/core/__init__.pyi,sha256=HDZSx-RIBpryukJo8ECdxSnZwpThP0IR2LV66h1XyJ4,2046
83
- reflex/components/core/auto_scroll.py,sha256=9-9Xj47ApLYE3vOiCwxY7VlUAaoRMf-U2Gi4xHVszRA,3390
83
+ reflex/components/core/auto_scroll.py,sha256=4FzSep5SDns9cZEtWzo7n_8dxcT25U0qUu5eUYeZNHs,3402
84
84
  reflex/components/core/auto_scroll.pyi,sha256=Gg8NcSI_Ku2m3_cGAi8-T9sVWpAiDB2PuJVcyz3PQFw,10621
85
- reflex/components/core/banner.py,sha256=WrZ6lHpw30F53CnAVhMT3AJXLSVLzPOW35FsOOs734Q,18435
86
- reflex/components/core/banner.pyi,sha256=p7ew6UtPXo7iuR1fWeJmxnUL3I262UCtf44FBCcO91E,30952
85
+ reflex/components/core/banner.py,sha256=fCseNUGEm0S8dwzEIFpVXLAOC-_KmcMlg-gUYYXR9DY,18512
86
+ reflex/components/core/banner.pyi,sha256=2rMM8Jk2HKYEqFP10cAN494pqDg32GjeXsIPCe3eHao,28546
87
87
  reflex/components/core/breakpoints.py,sha256=oCY2eBaM12hvbMImhc72wX-2tfIGT0oZh1R0NFY1ZWs,2782
88
88
  reflex/components/core/client_side_routing.py,sha256=z2WD2jT9U-xDOyHTLjCs0mf5HkwSEJpMmUeXzl4S7ZU,1897
89
89
  reflex/components/core/client_side_routing.pyi,sha256=iSugaj073JtHey6oUOj5dGgDHB5PoyOHC6A_r_R5N9Q,4252
@@ -318,8 +318,8 @@ reflex/components/recharts/polar.pyi,sha256=EbciHhTcRZb7Z_2X5ikunr_49dj0wu-hzOzX
318
318
  reflex/components/recharts/recharts.py,sha256=pWwrKtEcHbGaeqaDAZH1FQgPuPKj7PE6DT_df_OeIio,3176
319
319
  reflex/components/recharts/recharts.pyi,sha256=Hb5IW-qiodffHtEZZpq_GzyeQUJB_0S8WW_vEpfNgaE,6772
320
320
  reflex/components/sonner/__init__.py,sha256=L_mdRIy7-ccRGSz5VK6J8O-c-e-D1p9xWw29_ErrvGg,68
321
- reflex/components/sonner/toast.py,sha256=6J_S1Oer8wxnDKf94nuhOrKTZnSJmcptkrfsANe1rRE,12130
322
- reflex/components/sonner/toast.pyi,sha256=S9xAfYqx8DXnmhUaMSO8vYc_Vt0MmfZf8kANE54DxrE,7723
321
+ reflex/components/sonner/toast.py,sha256=mKyaUfYS2Y5ErYF1wiVAMBhFDFiGN2nDF0Ir58EB4NU,12532
322
+ reflex/components/sonner/toast.pyi,sha256=A_j9ibMEWG4wVBuqtd333-vNZ7BnzIOXlcHKyDG1gZ8,7886
323
323
  reflex/components/suneditor/__init__.py,sha256=htkPzy0O_1ro1nw8w8gFPjYhg5xywMpsUfc4Dl3OHuw,109
324
324
  reflex/components/suneditor/editor.py,sha256=W1_Yu3UwqQFsFxFdJalKls2RMUjFfboy2FLiNw_xZYw,8061
325
325
  reflex/components/suneditor/editor.pyi,sha256=tIJQikzW3LE3p8fPdy1O5X0Ma__UWnUPcGYGvK2Q9J0,9304
@@ -337,7 +337,7 @@ reflex/constants/compiler.py,sha256=7EdvrKNyr-C7e2T6Xmvd5gpTo5rh4SAHZpmQFV1rrM4,
337
337
  reflex/constants/config.py,sha256=4EljK_fD1Nf4-OfJ9HLYeHSW5xTfNPN6AGjzJ5ARZSY,1579
338
338
  reflex/constants/custom_components.py,sha256=joJt4CEt1yKy7wsBH6vYo7_QRW0O_fWXrrTf0VY2q14,1317
339
339
  reflex/constants/event.py,sha256=8PWobGXnUIbkRS73dRiroj5BJw4C3sbo5AHAhJTZFyM,2849
340
- reflex/constants/installer.py,sha256=DtzTrFDiqsjpNh0UpOybfxM3DJF4mUHdGuo48-NKTn0,4701
340
+ reflex/constants/installer.py,sha256=um3zu_tF7X0HUWPL6bjGGas36hGolIR1mfxViYSyhIQ,4853
341
341
  reflex/constants/route.py,sha256=J4QVdeeYz9wX0lYT1sgx0m3kLSArDHzmGCDZ2sqy854,2139
342
342
  reflex/constants/state.py,sha256=6Mfr7xVcAZOj5aSy7kp0W6r8oTs7K30URgGDAAFLfPQ,294
343
343
  reflex/constants/style.py,sha256=EPgRYHhAlcrPUBc2HkDTdTj-Q0uDAXHlq8Sp6D35Zf4,475
@@ -366,7 +366,7 @@ reflex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
366
366
  reflex/reflex.py,sha256=O1TKYq4HdGLdVOP9X6zG7jtrux77yExBVkGOnMYjjCQ,19380
367
367
  reflex/route.py,sha256=nn_hJwtQdjiqH_dHXfqMGWKllnyPQZTSR-KWdHDhoOs,4210
368
368
  reflex/state.py,sha256=Mw1Bd7p61LDEqFUEFl0CqBwm6rzKayA06wo2IjeYpdU,140394
369
- reflex/style.py,sha256=K3UAhjmkwHIhDO3gJaZWBmgpRT8EOM-eQS0NsAY_k5I,13377
369
+ reflex/style.py,sha256=VZvLiBq0KEznu5AdYEQbjy3BUmiscTrGABUbDfiMlHo,13045
370
370
  reflex/testing.py,sha256=NukmgpkB70naGllLWBQTqm8XE2XBUxkpywBYFCpMwyc,35762
371
371
  reflex/utils/__init__.py,sha256=y-AHKiRQAhk2oAkvn7W8cRVTZVK625ff8tTwvZtO7S4,24
372
372
  reflex/utils/build.py,sha256=gm_lRsOqKeRD5mBiRToJcT4Vt_ZQPzDuazGfvJlSeeQ,9024
@@ -382,7 +382,7 @@ reflex/utils/imports.py,sha256=8lTJ8qCJlMUlQnZssOv0l2nntuTfGfLsLqkJAS5JTbA,3974
382
382
  reflex/utils/lazy_loader.py,sha256=-3DcwIqHNft2fb1ikgDYAMiEwNfbiWfrTBAf1gEVX2o,1367
383
383
  reflex/utils/net.py,sha256=0Yd9OLK8R_px2sqnqrDkTky6hYHtG2pEDvvilOjDfjc,1219
384
384
  reflex/utils/path_ops.py,sha256=Sio_pZ9-dqu6pAPUkO_JA9ONXDsyLGKWOVRoA-dCrec,7903
385
- reflex/utils/prerequisites.py,sha256=6kghciNA1lMHX2fYHTd4nj-81Hv1pXxzVZTXVQQbzXc,66614
385
+ reflex/utils/prerequisites.py,sha256=vEZR0Y99WKU4pEFnPTUFdRR2xnSiwSJSoaDQ5Zbv5n0,66665
386
386
  reflex/utils/processes.py,sha256=tvYVIJgxBLboCVMYLnQYeNNIFr2cwufdWNZEOxpC4qw,13527
387
387
  reflex/utils/pyi_generator.py,sha256=6BVJ1KrLH8WvfYjBVm5-zjI6-Zdhzngp5ubkixsCIl4,41240
388
388
  reflex/utils/redir.py,sha256=bmQGAgoNWwySeLRQTpoMpmKInwIOCW77wkXT61fwcj8,1868
@@ -398,8 +398,8 @@ reflex/vars/function.py,sha256=r5NFBsueqiaRkM0F1Zp2lqWYMvWBhbNwyf5F9jrEC9A,14794
398
398
  reflex/vars/number.py,sha256=a0Qq_xM3v4Lcjm8l9Yg6ESRITUOnzgWADNmfvv4tmGI,27871
399
399
  reflex/vars/object.py,sha256=jfvxtrklztDtbD2zgNVNCZZE6X6HQMB6yJHPhtb0hUo,15033
400
400
  reflex/vars/sequence.py,sha256=_A1By3COdoTt9o5WM2odYsWf1twTv8Depf0kgHLdhGQ,54276
401
- reflex-0.7.1a1.dist-info/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
402
- reflex-0.7.1a1.dist-info/METADATA,sha256=KI2GRLvxQIsOy2THl8MjRDMcgG9vu1Po7p-hPP6_oQs,11985
403
- reflex-0.7.1a1.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
404
- reflex-0.7.1a1.dist-info/entry_points.txt,sha256=H1Z5Yat_xJfy0dRT1Frk2PkO_p41Xy7fCKlj4FcdL9o,44
405
- reflex-0.7.1a1.dist-info/RECORD,,
401
+ reflex-0.7.1a3.dist-info/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
402
+ reflex-0.7.1a3.dist-info/METADATA,sha256=9p4zHQTxhlfiby3x01MJWttyzUfGaaCnMV9oAdg5mQ4,11985
403
+ reflex-0.7.1a3.dist-info/WHEEL,sha256=IYZQI976HJqqOpQU6PHkJ8fb3tMNBFjg-Cn-pwAbaFM,88
404
+ reflex-0.7.1a3.dist-info/entry_points.txt,sha256=H1Z5Yat_xJfy0dRT1Frk2PkO_p41Xy7fCKlj4FcdL9o,44
405
+ reflex-0.7.1a3.dist-info/RECORD,,