reflex 0.8.8a1__py3-none-any.whl → 0.8.9__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 (38) hide show
  1. reflex/.templates/web/utils/state.js +5 -5
  2. reflex/app.py +17 -7
  3. reflex/compiler/compiler.py +2 -2
  4. reflex/compiler/templates.py +23 -7
  5. reflex/compiler/utils.py +8 -5
  6. reflex/components/component.py +69 -80
  7. reflex/components/core/sticky.pyi +3 -0
  8. reflex/components/el/elements/media.py +518 -0
  9. reflex/components/el/elements/media.pyi +5869 -5
  10. reflex/components/lucide/icon.py +4 -1
  11. reflex/components/lucide/icon.pyi +4 -1
  12. reflex/components/radix/primitives/drawer.py +9 -21
  13. reflex/components/radix/primitives/drawer.pyi +4 -0
  14. reflex/config.py +34 -7
  15. reflex/constants/compiler.py +1 -1
  16. reflex/constants/installer.py +4 -4
  17. reflex/environment.py +8 -3
  18. reflex/event.py +1 -1
  19. reflex/istate/data.py +15 -0
  20. reflex/plugins/sitemap.py +3 -6
  21. reflex/reflex.py +8 -2
  22. reflex/state.py +46 -6
  23. reflex/testing.py +1 -1
  24. reflex/utils/console.py +67 -7
  25. reflex/utils/format.py +1 -1
  26. reflex/utils/frontend_skeleton.py +6 -1
  27. reflex/utils/imports.py +1 -1
  28. reflex/utils/prerequisites.py +3 -1
  29. reflex/utils/pyi_generator.py +2 -2
  30. reflex/utils/serializers.py +4 -4
  31. reflex/utils/types.py +11 -10
  32. reflex/vars/base.py +24 -17
  33. reflex/vars/object.py +4 -2
  34. {reflex-0.8.8a1.dist-info → reflex-0.8.9.dist-info}/METADATA +1 -1
  35. {reflex-0.8.8a1.dist-info → reflex-0.8.9.dist-info}/RECORD +38 -38
  36. {reflex-0.8.8a1.dist-info → reflex-0.8.9.dist-info}/WHEEL +0 -0
  37. {reflex-0.8.8a1.dist-info → reflex-0.8.9.dist-info}/entry_points.txt +0 -0
  38. {reflex-0.8.8a1.dist-info → reflex-0.8.9.dist-info}/licenses/LICENSE +0 -0
reflex/utils/format.py CHANGED
@@ -518,7 +518,7 @@ def format_event(event_spec: EventSpec) -> str:
518
518
 
519
519
  if event_spec.client_handler_name:
520
520
  event_args.append(wrap(event_spec.client_handler_name, '"'))
521
- return f"Event({', '.join(event_args)})"
521
+ return f"ReflexEvent({', '.join(event_args)})"
522
522
 
523
523
 
524
524
  if TYPE_CHECKING:
@@ -10,6 +10,7 @@ import click
10
10
  from reflex import constants
11
11
  from reflex.compiler import templates
12
12
  from reflex.config import Config, get_config
13
+ from reflex.environment import environment
13
14
  from reflex.utils import console, path_ops
14
15
  from reflex.utils.prerequisites import get_project_hash, get_web_dir
15
16
  from reflex.utils.registry import get_npm_registry
@@ -192,7 +193,11 @@ def _compile_vite_config(config: Config):
192
193
  base = "/"
193
194
  if frontend_path := config.frontend_path.strip("/"):
194
195
  base += frontend_path + "/"
195
- return templates.vite_config_template(base=base)
196
+ return templates.vite_config_template(
197
+ base=base,
198
+ hmr=environment.VITE_HMR.get(),
199
+ force_full_reload=environment.VITE_FORCE_FULL_RELOAD.get(),
200
+ )
196
201
 
197
202
 
198
203
  def initialize_vite_config():
reflex/utils/imports.py CHANGED
@@ -135,7 +135,7 @@ class ImportVar:
135
135
  if self.alias:
136
136
  return (
137
137
  self.alias
138
- if self.is_default
138
+ if self.is_default and self.tag != "*"
139
139
  else (self.tag + " as " + self.alias if self.tag else self.alias)
140
140
  )
141
141
  return self.tag or ""
@@ -248,6 +248,7 @@ def get_compiled_app(
248
248
  prerender_routes: bool = False,
249
249
  dry_run: bool = False,
250
250
  check_if_schema_up_to_date: bool = False,
251
+ use_rich: bool = True,
251
252
  ) -> ModuleType:
252
253
  """Get the app module based on the default config after first compiling it.
253
254
 
@@ -256,6 +257,7 @@ def get_compiled_app(
256
257
  prerender_routes: Whether to prerender routes.
257
258
  dry_run: If True, do not write the compiled app to disk.
258
259
  check_if_schema_up_to_date: If True, check if the schema is up to date.
260
+ use_rich: Whether to use rich progress bars.
259
261
 
260
262
  Returns:
261
263
  The compiled app based on the default config.
@@ -263,7 +265,7 @@ def get_compiled_app(
263
265
  app, app_module = get_and_validate_app(
264
266
  reload=reload, check_if_schema_up_to_date=check_if_schema_up_to_date
265
267
  )
266
- app._compile(prerender_routes=prerender_routes, dry_run=dry_run)
268
+ app._compile(prerender_routes=prerender_routes, dry_run=dry_run, use_rich=use_rich)
267
269
  return app_module
268
270
 
269
271
 
@@ -547,7 +547,7 @@ def _generate_component_create_functiondef(
547
547
  kwargs.extend(prop_kwargs)
548
548
 
549
549
  def figure_out_return_type(annotation: Any):
550
- if inspect.isclass(annotation) and issubclass(annotation, inspect._empty):
550
+ if isinstance(annotation, type) and issubclass(annotation, inspect._empty):
551
551
  return ast.Name(id="EventType[Any]")
552
552
 
553
553
  if not isinstance(annotation, str) and get_origin(annotation) is tuple:
@@ -1181,7 +1181,7 @@ class PyiGenerator:
1181
1181
  class_names = {
1182
1182
  name: obj
1183
1183
  for name, obj in vars(module).items()
1184
- if inspect.isclass(obj)
1184
+ if isinstance(obj, type)
1185
1185
  and (
1186
1186
  rx_types.safe_issubclass(obj, Component)
1187
1187
  or rx_types.safe_issubclass(obj, SimpleNamespace)
@@ -187,7 +187,7 @@ def get_serializer(type_: type) -> Serializer | None:
187
187
 
188
188
  # If the type is not registered, check if it is a subclass of a registered type.
189
189
  for registered_type, serializer in reversed(SERIALIZERS.items()):
190
- if types._issubclass(type_, registered_type):
190
+ if issubclass(type_, registered_type):
191
191
  return serializer
192
192
 
193
193
  # If there is no serializer, return None.
@@ -211,7 +211,7 @@ def get_serializer_type(type_: type) -> type | None:
211
211
 
212
212
  # If the type is not registered, check if it is a subclass of a registered type.
213
213
  for registered_type, serializer in reversed(SERIALIZER_TYPES.items()):
214
- if types._issubclass(type_, registered_type):
214
+ if issubclass(type_, registered_type):
215
215
  return serializer
216
216
 
217
217
  # If there is no serializer, return None.
@@ -244,11 +244,11 @@ def can_serialize(type_: type, into_type: type | None = None) -> bool:
244
244
  Returns:
245
245
  Whether there is a serializer for the type.
246
246
  """
247
- return has_serializer(type_, into_type) or (
247
+ return (
248
248
  isinstance(type_, type)
249
249
  and dataclasses.is_dataclass(type_)
250
250
  and (into_type is None or into_type is dict)
251
- )
251
+ ) or has_serializer(type_, into_type)
252
252
 
253
253
 
254
254
  @serializer(to=str)
reflex/utils/types.py CHANGED
@@ -52,11 +52,8 @@ UnionTypes = (Union, types.UnionType)
52
52
  GenericType = type | _GenericAlias
53
53
 
54
54
  # Valid state var types.
55
- JSONType = {str, int, float, bool}
56
- PrimitiveType = int | float | bool | str | list | dict | set | tuple
57
55
  PrimitiveTypes = (int, float, bool, str, list, dict, set, tuple)
58
- StateVar = PrimitiveType | Base | None
59
- StateIterVar = list | set | tuple
56
+ StateVarTypes = (*PrimitiveTypes, Base, type(None))
60
57
 
61
58
  if TYPE_CHECKING:
62
59
  from reflex.vars.base import Var
@@ -401,6 +398,8 @@ def get_field_type(cls: GenericType, field_name: str) -> GenericType | None:
401
398
  Returns:
402
399
  The type of the field, if it exists, else None.
403
400
  """
401
+ if (fields := getattr(cls, "_fields", None)) is not None and field_name in fields:
402
+ return fields[field_name].annotated_type
404
403
  if (
405
404
  hasattr(cls, "__fields__")
406
405
  and field_name in cls.__fields__
@@ -857,8 +856,15 @@ def is_valid_var_type(type_: type) -> bool:
857
856
 
858
857
  if is_union(type_):
859
858
  return all(is_valid_var_type(arg) for arg in get_args(type_))
859
+
860
+ if is_literal(type_):
861
+ types = {type(value) for value in get_args(type_)}
862
+ return all(is_valid_var_type(type_) for type_ in types)
863
+
864
+ type_ = origin if (origin := get_origin(type_)) is not None else type_
865
+
860
866
  return (
861
- _issubclass(type_, StateVar)
867
+ issubclass(type_, StateVarTypes)
862
868
  or serializers.has_serializer(type_)
863
869
  or dataclasses.is_dataclass(type_)
864
870
  )
@@ -993,11 +999,6 @@ def validate_literal(key: str, value: Any, expected_type: type, comp_name: str):
993
999
  raise ValueError(msg)
994
1000
 
995
1001
 
996
- # Store this here for performance.
997
- StateBases = get_base_class(StateVar)
998
- StateIterBases = get_base_class(StateIterVar)
999
-
1000
-
1001
1002
  def safe_issubclass(cls: Any, cls_check: Any | tuple[Any, ...]):
1002
1003
  """Check if a class is a subclass of another class. Returns False if internal error occurs.
1003
1004
 
reflex/vars/base.py CHANGED
@@ -366,7 +366,7 @@ def can_use_in_object_var(cls: GenericType) -> bool:
366
366
  if types.is_union(cls):
367
367
  return all(can_use_in_object_var(t) for t in types.get_args(cls))
368
368
  return (
369
- inspect.isclass(cls)
369
+ isinstance(cls, type)
370
370
  and not safe_issubclass(cls, Var)
371
371
  and serializers.can_serialize(cls, dict)
372
372
  )
@@ -516,6 +516,17 @@ class Var(Generic[VAR_TYPE], metaclass=MetaclassVar):
516
516
  """
517
517
  return self._var_data
518
518
 
519
+ def __deepcopy__(self, memo: dict[int, Any]) -> Self:
520
+ """Deepcopy the var.
521
+
522
+ Args:
523
+ memo: The memo dictionary to use for the deepcopy.
524
+
525
+ Returns:
526
+ A deepcopy of the var.
527
+ """
528
+ return self
529
+
519
530
  def equals(self, other: Var) -> bool:
520
531
  """Check if two vars are equal.
521
532
 
@@ -795,7 +806,7 @@ class Var(Generic[VAR_TYPE], metaclass=MetaclassVar):
795
806
  if can_use_in_object_var(output):
796
807
  return self.to(ObjectVar, output)
797
808
 
798
- if inspect.isclass(output):
809
+ if isinstance(output, type):
799
810
  for var_subclass in _var_subclasses[::-1]:
800
811
  if safe_issubclass(output, var_subclass.var_subclass):
801
812
  current_var_type = self._var_type
@@ -891,7 +902,7 @@ class Var(Generic[VAR_TYPE], metaclass=MetaclassVar):
891
902
  args = get_args(var_type)
892
903
  fixed_type = unionize(*(type(arg) for arg in args))
893
904
 
894
- if not inspect.isclass(fixed_type):
905
+ if not isinstance(fixed_type, type):
895
906
  msg = f"Unsupported type {var_type} for guess_type."
896
907
  raise TypeError(msg)
897
908
 
@@ -930,6 +941,7 @@ class Var(Generic[VAR_TYPE], metaclass=MetaclassVar):
930
941
  Returns:
931
942
  A function that that creates a setter for the var.
932
943
  """
944
+ setter_name = Var._get_setter_name_for_name(name)
933
945
 
934
946
  def setter(state: Any, value: Any):
935
947
  """Get the setter for the var.
@@ -951,7 +963,7 @@ class Var(Generic[VAR_TYPE], metaclass=MetaclassVar):
951
963
 
952
964
  setter.__annotations__["value"] = self._var_type
953
965
 
954
- setter.__qualname__ = Var._get_setter_name_for_name(name)
966
+ setter.__qualname__ = setter_name
955
967
 
956
968
  return setter
957
969
 
@@ -1153,18 +1165,6 @@ class Var(Generic[VAR_TYPE], metaclass=MetaclassVar):
1153
1165
  """
1154
1166
  return dataclasses.replace(self, _var_data=None)
1155
1167
 
1156
- def __get__(self, instance: Any, owner: Any):
1157
- """Get the var.
1158
-
1159
- Args:
1160
- instance: The instance to get the var from.
1161
- owner: The owner of the var.
1162
-
1163
- Returns:
1164
- The var.
1165
- """
1166
- return self
1167
-
1168
1168
  def _decode(self) -> Any:
1169
1169
  """Decode Var as a python value.
1170
1170
 
@@ -1409,7 +1409,7 @@ class LiteralVar(Var):
1409
1409
  bases = cls.__bases__
1410
1410
 
1411
1411
  bases_normalized = [
1412
- base if inspect.isclass(base) else get_origin(base) for base in bases
1412
+ base if isinstance(base, type) else get_origin(base) for base in bases
1413
1413
  ]
1414
1414
 
1415
1415
  possible_bases = [
@@ -1476,6 +1476,13 @@ class LiteralVar(Var):
1476
1476
  if isinstance(value, var_subclass.python_types):
1477
1477
  return literal_subclass.create(value, _var_data=_var_data)
1478
1478
 
1479
+ if (
1480
+ (as_var_method := getattr(value, "_as_var", None)) is not None
1481
+ and callable(as_var_method)
1482
+ and isinstance((resulting_var := as_var_method()), Var)
1483
+ ):
1484
+ return resulting_var
1485
+
1479
1486
  from reflex.event import EventHandler
1480
1487
  from reflex.utils.format import get_event_handler_parts
1481
1488
 
reflex/vars/object.py CHANGED
@@ -6,7 +6,6 @@ import collections.abc
6
6
  import dataclasses
7
7
  import typing
8
8
  from collections.abc import Mapping
9
- from inspect import isclass
10
9
  from typing import (
11
10
  Any,
12
11
  NoReturn,
@@ -328,7 +327,10 @@ class ObjectVar(Var[OBJECT_TYPE], python_types=Mapping):
328
327
 
329
328
  if (
330
329
  is_typeddict(fixed_type)
331
- or (isclass(fixed_type) and not safe_issubclass(fixed_type, Mapping))
330
+ or (
331
+ isinstance(fixed_type, type)
332
+ and not safe_issubclass(fixed_type, Mapping)
333
+ )
332
334
  or (fixed_type in types.UnionTypes)
333
335
  ):
334
336
  attribute_type = get_attribute_access_type(var_type, name)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reflex
3
- Version: 0.8.8a1
3
+ Version: 0.8.9
4
4
  Summary: Web apps in pure Python.
5
5
  Project-URL: homepage, https://reflex.dev
6
6
  Project-URL: repository, https://github.com/reflex-dev/reflex
@@ -2,20 +2,20 @@ reflex/__init__.py,sha256=_1PVYjDeA6_JyfXvL6OuKjjO6AX2oMiNcAq8AEHf6xw,10161
2
2
  reflex/__init__.pyi,sha256=0D46kHVUJPE_kgYL-BjraERu-MXNCPsQTZQShrijmeQ,10148
3
3
  reflex/__main__.py,sha256=6cVrGEyT3j3tEvlEVUatpaYfbB5EF3UVY-6vc_Z7-hw,108
4
4
  reflex/admin.py,sha256=Nbc38y-M8iaRBvh1W6DQu_D3kEhO8JFvxrog4q2cB_E,434
5
- reflex/app.py,sha256=7jJ5knRgpbh5XWqMD3rTIy0bjqOJm-DkdlnC1geOX6c,77713
5
+ reflex/app.py,sha256=PaoBHbIRPHAf5_nfEcRKDmANi77LTJfq5xuJZIUBCCU,77932
6
6
  reflex/assets.py,sha256=l5O_mlrTprC0lF7Rc_McOe3a0OtSLnRdNl_PqCpDCBA,3431
7
7
  reflex/base.py,sha256=Oh664QL3fZEHErhUasFqP7fE4olYf1y-9Oj6uZI2FCU,1173
8
- reflex/config.py,sha256=JhCChJ3WkOvC7sFIcKZ7T_JBobC0XiBlCPTlai6-fyU,20227
9
- reflex/environment.py,sha256=G-s20hBr-7K1_b6992XTgvNnBojcuL9Y33NAIUJLvT8,22940
10
- reflex/event.py,sha256=Yv9-tY-NH4q0Up72ljsABfBfnobnC0__DMvSWhFEo6M,74791
8
+ reflex/config.py,sha256=LsHAtdH4nkSn3q_Ie-KNdOGdflLXrFICUQov29oFjVk,21229
9
+ reflex/environment.py,sha256=7tfEPpUbelmOZ2B9zlqk0rgfHNkvz_HspGRIpod_AIQ,23126
10
+ reflex/event.py,sha256=0VHquGHwqfvsEFExJn8m1YFSaE__pg1j58Q8hOgiVmA,74797
11
11
  reflex/model.py,sha256=l1-6fm7NHRFWH-xK9oV9UzAVfvKeUXG1f-tCrF7vmfI,19403
12
12
  reflex/page.py,sha256=ssCbMVFuIy60vH-YhJUzN0OxzUwXFCCD3ej56dVjp3g,3525
13
13
  reflex/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
- reflex/reflex.py,sha256=KVlNh8nQGzuaYnpUtQ1D7Rcuqzp1TeKernlDucTXaQE,22578
14
+ reflex/reflex.py,sha256=qKpWvXuA55y519MWckr6oxKSf3pCQfRCrvzsyXSuAqk,22729
15
15
  reflex/route.py,sha256=TnS4m6Hm-b3LfGFpm37iAMEd-_JISAouPW5FqUxTAfU,7858
16
- reflex/state.py,sha256=3LuX6dejVnQL8m0e_db1K48iww3_xiE0jJD8ByNUFU4,93198
16
+ reflex/state.py,sha256=gqQNmLGdrG9sxivfbyE1bHrLSlYZarbQCt6PtPaWO2w,94991
17
17
  reflex/style.py,sha256=JxbXXA4MTnXrk0XHEoMBoNC7J-M2oL5Hl3W_QmXvmBg,13222
18
- reflex/testing.py,sha256=kR-imGVnWCp6xiryuZcJJIfogRg2tcNT4tw5mt0T3sY,39901
18
+ reflex/testing.py,sha256=wLhvUdvTa6jPDkfdWLOYt69piX1KFhYxZfEjQzWfJo0,39902
19
19
  reflex/.templates/apps/blank/assets/favicon.ico,sha256=baxxgDAQ2V4-G5Q4S2yK5uUJTUGkv-AOWBQ0xd6myUo,4286
20
20
  reflex/.templates/apps/blank/code/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
21
  reflex/.templates/apps/blank/code/blank.py,sha256=wry9E3VjC7qtt_gzqNOyo4KZAAlzVyNp3uhFkcLZmM0,898
@@ -30,7 +30,7 @@ reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js,sha2
30
30
  reflex/.templates/web/components/shiki/code.js,sha256=4Es1pxsr-lX4hTQ5mglrwwC6O_SI-z-O60k03z8VFzQ,1144
31
31
  reflex/.templates/web/styles/__reflex_style_reset.css,sha256=qbC6JIT643YEsvSQ0D7xBmWE5vXy94JGrKNihRuEjnA,8913
32
32
  reflex/.templates/web/utils/react-theme.js,sha256=Aa-RND3ooGCXW6Zavzitc-v0ciKlcQDTFlDtE4mPkFI,2713
33
- reflex/.templates/web/utils/state.js,sha256=hyd2XCme0vfTpW0FQHJmzlk7quXw8JrO3c3YkHhA6h4,36030
33
+ reflex/.templates/web/utils/state.js,sha256=-K0bu2X2wxUpfeieCuw14HQz3W1jvx1s7JK69S8b4R0,36060
34
34
  reflex/.templates/web/utils/helpers/dataeditor.js,sha256=pG6MgsHuStDR7-qPipzfiK32j9bKDBa-4hZ0JSUo4JM,1623
35
35
  reflex/.templates/web/utils/helpers/debounce.js,sha256=xGhtTRtS_xIcaeqnYVvYJNseLgQVk-DW-eFiHJYO9As,528
36
36
  reflex/.templates/web/utils/helpers/paste.js,sha256=ef30HsR83jRzzvZnl8yV79yqFP8TC_u8SlN99cCS_OM,1799
@@ -41,12 +41,12 @@ reflex/app_mixins/lifespan.py,sha256=a156ZUYVo2bN1Tv-4WmWSjojo90PP_2-V12BX0q8YNw
41
41
  reflex/app_mixins/middleware.py,sha256=BKhe0jUFO1_TylEC48LUZyaeYyPmAYW-NV4H5Rw221k,2848
42
42
  reflex/app_mixins/mixin.py,sha256=R1YncalqDrbdPZvpKVbm72ZKmQZxYAWfuFq9JknzTqQ,305
43
43
  reflex/compiler/__init__.py,sha256=r8jqmDSFf09iV2lHlNhfc9XrTLjNxfDNwPYlxS4cmHE,27
44
- reflex/compiler/compiler.py,sha256=mvGynpsmFI5de5vQcH7Urkv7l8eOO_ytUxB4_XigbyY,29125
45
- reflex/compiler/templates.py,sha256=PcFJpmFJ99OlQtgXd_UKVCUQ62LDWAwMnwL3QKZgXI0,20080
46
- reflex/compiler/utils.py,sha256=saz5INjH5C7WO1bS3FE1vRm5sKcSXrNnbmFpmLI0xyw,19128
44
+ reflex/compiler/compiler.py,sha256=MQ5SW5pcSeDL6Nsfvrcu0jWW26xaEXrR4EsSybzuW7k,29130
45
+ reflex/compiler/templates.py,sha256=91LCzfwCG_VdqZEEG9vXoYA7SVZvTYTXVlkBuL-zEa8,20579
46
+ reflex/compiler/utils.py,sha256=FM1KCuFMfcjveLmQAmwNMp6dTtaqhG3m2opo7rZs_iA,19158
47
47
  reflex/components/__init__.py,sha256=eWpgWFbSQDj2TpGp6StEbxU7roQgzY7ZM0XIcIc5RE8,588
48
48
  reflex/components/__init__.pyi,sha256=7VFHtJGIjvGtD3IiPk848IPWYSCcPRT1EyPGljLhYlU,736
49
- reflex/components/component.py,sha256=sv_zeiC8hZMn8DptUHgBzX2wffVNT3EzepWXxJd68R4,98628
49
+ reflex/components/component.py,sha256=64p7eWhFg6Q9ZikvPX9pOYNjQk9GUElwXaf2qUAJACc,98103
50
50
  reflex/components/dynamic.py,sha256=WfN1waxtRuuZ3-8MvooDi4SkFxem4R8wAHOLXx_9rCo,7422
51
51
  reflex/components/field.py,sha256=j5JZFzNlET3GAIW91m1L31RypXylMAxJNm0-CJbtykM,5745
52
52
  reflex/components/literals.py,sha256=hogLnwTJxFJODIvqihg-GD9kFZVsEBDoYzaRit56Nuk,501
@@ -93,7 +93,7 @@ reflex/components/core/html.pyi,sha256=yDzRQ10yf8ZzbP76C2rEG2gx6Vud_Ez3LcHDWMgyF
93
93
  reflex/components/core/match.py,sha256=xBB9vtWgVlotPHq6ssng8lzxwXDDQLp9k6Ew5RPPd3U,9888
94
94
  reflex/components/core/responsive.py,sha256=ACZdtJ4a4F8B3dm1k8h6J2_UJx0Z5LDB7XHQ2ty4wAc,1911
95
95
  reflex/components/core/sticky.py,sha256=2B3TxrwG2Rtp_lv1VkMOIF2bqSiT7qYGbqbiZiMKxKY,3856
96
- reflex/components/core/sticky.pyi,sha256=jtxJjHR8eZEq2yKHGr0U16Nof4OpDXMadf1JtA_6ofk,32750
96
+ reflex/components/core/sticky.pyi,sha256=5D-yT0LYs0ewOlUlInU7KCpuz49yKK7dirysUs1C2VI,32908
97
97
  reflex/components/core/upload.py,sha256=b4-ubt4dznL5LDA7UCKNdWcdCX9aLOX2vNFdv4GlRdg,13544
98
98
  reflex/components/core/upload.pyi,sha256=UqfcPGUs8xmnKHKuvqYV7CtOXeF_D1s9ooRe49w6C3E,15757
99
99
  reflex/components/core/window_events.py,sha256=opbuO20zVxt252kQLk49V7cltb_Um2oh7iePeGNJ538,3355
@@ -120,8 +120,8 @@ reflex/components/el/elements/forms.py,sha256=75RJqmw4vBEUeYFNZwza91BpiXnEVSSK3H
120
120
  reflex/components/el/elements/forms.pyi,sha256=NSmo68oksZkzOoSGA5XKNVzqU0K3WIzkFN82EDLC-f8,168115
121
121
  reflex/components/el/elements/inline.py,sha256=q3Ku_x8L9NaXrYQovCfkWwZ5AfXG0VyhGN_OT73kA0Y,4126
122
122
  reflex/components/el/elements/inline.pyi,sha256=0pjqiHH8DmFfghbM8MK5tqgiZGSnfT-o055GINU8xrA,231760
123
- reflex/components/el/elements/media.py,sha256=t5vDG5q8K_-YTu2tkyeC7bXb0O913Z5C74jPhDjIqmA,14586
124
- reflex/components/el/elements/media.pyi,sha256=g8stEbHH7qWoK0_x_ffqZRJdmElVmCo0iBekmxMWLJA,240566
123
+ reflex/components/el/elements/media.py,sha256=RxykHOcXrTPiInFXfmt_QfGTTNXQez_eurlpaobRoWw,26204
124
+ reflex/components/el/elements/media.pyi,sha256=g-IBcwsy4ilzlIHmVn4ZGTTVHf83gqMurCBiImslAH4,442547
125
125
  reflex/components/el/elements/metadata.py,sha256=Vf0D0dXqvwt76FkrvDQQpESJmxDh6e6Qxnk2GIRhOlM,2316
126
126
  reflex/components/el/elements/metadata.pyi,sha256=5pqPOzE-QbjiOQBitX_qWkcrCssotx-VaP-7x62dfjg,39675
127
127
  reflex/components/el/elements/other.py,sha256=WON35QviPNYsBeLQTNbeN7a6m6ixLYIVa4WsDzo9YBY,1378
@@ -138,8 +138,8 @@ reflex/components/gridjs/__init__.py,sha256=xJwDm1AZ70L5-t9LLqZwGUtDpijbf1KuMYDT
138
138
  reflex/components/gridjs/datatable.py,sha256=7JKrRw1zkpFB0_wwoaIhrVrldsm7-dyi3PASgqLq8Hc,4224
139
139
  reflex/components/gridjs/datatable.pyi,sha256=kFgv82vCgfdWZaUq4bZ73G8X3mkw6ecvSRkZ9G9-28E,5185
140
140
  reflex/components/lucide/__init__.py,sha256=EggTK2MuQKQeOBLKW-mF0VaDK9zdWBImu1HO2dvHZbE,73
141
- reflex/components/lucide/icon.py,sha256=Ow04V0M_9Ccgitp82NqaxTpMkTcIGYxTactJRZrrQMI,35214
142
- reflex/components/lucide/icon.pyi,sha256=aqYf3ax3GX7RH4BUIfIG-PIeFVwZe0P9SHbucfb7q1Y,38008
141
+ reflex/components/lucide/icon.py,sha256=GiNlTfoXE36J9ZAY9Kh7DogxM5jVliFi5VjZZ_8YObM,35292
142
+ reflex/components/lucide/icon.pyi,sha256=PtN6ysOxDRtwlpt-YsXAKZpKipXmZBtbAt-FaGI6i4Q,38086
143
143
  reflex/components/markdown/__init__.py,sha256=Dfl1At5uYoY7H4ufZU_RY2KOGQDLtj75dsZ2BTqqAns,87
144
144
  reflex/components/markdown/markdown.py,sha256=kzvO2VnfCbxV7AcIMBJbxLtAlQ6U5T_QB_JTh8l-HJ4,15450
145
145
  reflex/components/markdown/markdown.pyi,sha256=oOlXZItHB0TPWsFz1Qjvr3KzG8sssthBp40UO_KkRIA,4322
@@ -157,8 +157,8 @@ reflex/components/radix/primitives/accordion.py,sha256=yr_GtuU8cGiMyXmWXFx-Tz8P1
157
157
  reflex/components/radix/primitives/accordion.pyi,sha256=QuAwkB02qfJs8zqHfS25tpLYCjlnenEIMH61KKI8u1Q,28219
158
158
  reflex/components/radix/primitives/base.py,sha256=9OvGDI1to8XL_a2hr3fNBQUwTHZBUO424ea2-UTKD18,770
159
159
  reflex/components/radix/primitives/base.pyi,sha256=Cv5PCGNBO-QFXvBs5E5sxIkcQUgSHHUhSxQPl64T4ZU,4635
160
- reflex/components/radix/primitives/drawer.py,sha256=3-l8kUX9WZ-4SFbMIVOeU5CJWHHC5SMLpZk_kgd2o3I,9262
161
- reflex/components/radix/primitives/drawer.pyi,sha256=bdYaa6-WjH3kdFBFZc2IRwfSTrgqI3vFy5ueQuvAHEo,29735
160
+ reflex/components/radix/primitives/drawer.py,sha256=9x-8chrFxAfuQ79p09aubQp-hVJqTxvIq42JVypWv4Y,8830
161
+ reflex/components/radix/primitives/drawer.pyi,sha256=DG-Vu07qwj0utprcheNZrgGp3a3joZmXyfwlLDyFsHc,29883
162
162
  reflex/components/radix/primitives/form.py,sha256=jxCt0xZRE9Xx5tBIJNojYwyvhN631_aNdlFQSPgm2dU,4801
163
163
  reflex/components/radix/primitives/form.pyi,sha256=1g9IOcPDWPQDrdLYkeHgVXnF9Dcsng82yH8xKlOjrRw,47184
164
164
  reflex/components/radix/primitives/progress.py,sha256=UvuUn6eWEhnhqImDvYOwa9Z3CE5gu5EV28uPBbZAT4k,3988
@@ -312,11 +312,11 @@ reflex/components/tags/tagless.py,sha256=APeSG-6N5-ucWwkq_hUl7zfT_vpoKleQdP80wPE
312
312
  reflex/constants/__init__.py,sha256=q2Jf-LBbNcGrOmx5M7QotIAYW_t3m02TsmmdtJ5_IhM,2190
313
313
  reflex/constants/base.py,sha256=rZ2JFO3mu5fVpjIUbiPJ7YCbensCjefbzYtV9uEwqpw,7539
314
314
  reflex/constants/colors.py,sha256=n-FN7stNrvk5rCN0TAvE28dqwUeQZHue-b5q1CO0EyQ,2048
315
- reflex/constants/compiler.py,sha256=bzmC1OW6kWr06rV1Gwoa2AtQ4yPoGhEzeoqpiNY0jwU,5703
315
+ reflex/constants/compiler.py,sha256=1FXPYQNotaSrTwWcOspA1gCVmEdoiWkNMbbrz_qU0YU,5709
316
316
  reflex/constants/config.py,sha256=8OIjiBdZZJrRVHsNBheMwopE9AwBFFzau0SXqXKcrPg,1715
317
317
  reflex/constants/custom_components.py,sha256=joJt4CEt1yKy7wsBH6vYo7_QRW0O_fWXrrTf0VY2q14,1317
318
318
  reflex/constants/event.py,sha256=tgoynWQi2L0_Kqc3XhXo7XXL76A-OKhJGHRrNjm7gFw,2885
319
- reflex/constants/installer.py,sha256=VmTFvbevO5lk_t1KbY4Nq_uvnfnFzUChf4IJWfjBCbs,4191
319
+ reflex/constants/installer.py,sha256=iXxSCiOhHFMk1P3TL46zGkJbprZ9RxCePMf2TOBmbJc,4191
320
320
  reflex/constants/route.py,sha256=UBjqaAOxiUxlDZCSY4O2JJChKvA4MZrhUU0E5rNvKbM,2682
321
321
  reflex/constants/state.py,sha256=dkoVvO9JcJyHovHJlGsZx-dDxpM80OvS4cJEm_TUOiM,349
322
322
  reflex/constants/utils.py,sha256=e1ChEvbHfmE_V2UJvCSUhD_qTVAIhEGPpRJSqdSd6PA,780
@@ -326,7 +326,7 @@ reflex/experimental/__init__.py,sha256=P8fe8S2e2gy2HCwHFGQzr3lPMmh7qN5Ii2e8ukoPH
326
326
  reflex/experimental/client_state.py,sha256=adITjFmvzO081yaVgne2PZpG0hc_SrJHyLLbE-zfet0,10024
327
327
  reflex/experimental/hooks.py,sha256=CHYGrAE5t8riltrJmDFgJ4D2Vhmhw-y3B3MSGNlOQow,2366
328
328
  reflex/istate/__init__.py,sha256=afq_pCS5B_REC-Kl3Rbaa538uWi59xNz4INeuENcWnk,2039
329
- reflex/istate/data.py,sha256=KrANpAQFTZcfFWnxyykgK1FRNuXTwTin1WYpyqymV-U,7547
329
+ reflex/istate/data.py,sha256=8RydiarP7f5ET5a3dfGpuuXdYZ7KHEWS6aENVoxRxGc,7918
330
330
  reflex/istate/dynamic.py,sha256=xOQ9upZVPf6ngqcLQZ9HdAAYmoWwJ8kRFPH34Q5HTiM,91
331
331
  reflex/istate/manager.py,sha256=xQhvpTqnsVI5DmnZOq39IiQ-g1d-gtihQdEGKKM6-oQ,30531
332
332
  reflex/istate/proxy.py,sha256=Q8JrV1m6drVcTNJL9JuN-nKUXclazs96OHl_fhR0UBk,25928
@@ -339,49 +339,49 @@ reflex/plugins/__init__.py,sha256=jrMWQqMxCwDwgwQYTygeR_pIewMcvIFwAnngPbjSumQ,43
339
339
  reflex/plugins/_screenshot.py,sha256=CAOaRpbrpTTIswwCXqhv7WYShB86Ao9MVv6dcXJzRb4,3958
340
340
  reflex/plugins/base.py,sha256=5BgzCM7boj9kJ6FGzVzVlgQk-crJuVmOLCl1PXvv4-E,3372
341
341
  reflex/plugins/shared_tailwind.py,sha256=Zx1TDAjpXGI5aEjpB8NWS__xYRSNu_SEMTB6Z3ub120,7305
342
- reflex/plugins/sitemap.py,sha256=Jj47uSMnkxndl7awkl48EhlQylBfY00WuMBNyTBcZHA,6186
342
+ reflex/plugins/sitemap.py,sha256=X_CtH5B1w3CZno-gdPj1rp63WjOuNjFnX4B3fx_-VFQ,6135
343
343
  reflex/plugins/tailwind_v3.py,sha256=jCEZ5UYdr706Mw48L-WSHOUB6O55o1C3uG6AMwXqZoI,4810
344
344
  reflex/plugins/tailwind_v4.py,sha256=q6OxgWENu4fml4mKr8ncgjIU5ENgQCfNagtUOh51hik,5230
345
345
  reflex/utils/__init__.py,sha256=y-AHKiRQAhk2oAkvn7W8cRVTZVK625ff8tTwvZtO7S4,24
346
346
  reflex/utils/build.py,sha256=GLT2ycqgAe1cw__MFbfdlYrkzcTnY1oJ8cAv80jEcnQ,8641
347
347
  reflex/utils/codespaces.py,sha256=kEQ-j-jclTukFpXDlYgNp95kYMGDrQmP3VNEoYGZ1u4,3052
348
348
  reflex/utils/compat.py,sha256=aSJH_M6iomgHPQ4onQ153xh1MWqPi3HSYDzE68N6gZM,2635
349
- reflex/utils/console.py,sha256=QIOgyElaxSVM1Bbvz0zx77-MqkDZkfpu1d6l26VRkQ0,11580
349
+ reflex/utils/console.py,sha256=RkTNfOVozsuGmq9GFSUDzBvL80twBYLRIcOxh0zK-q0,13185
350
350
  reflex/utils/decorator.py,sha256=QUZntENupeW5FA5mNRTx0I1GzGKFQXhMjVg24_IIM5o,3957
351
351
  reflex/utils/exceptions.py,sha256=Wwu7Ji2xgq521bJKtU2NgjwhmFfnG8erirEVN2h8S-g,8884
352
352
  reflex/utils/exec.py,sha256=o0u81B6pHv5Yt982V1vFYEJDxgM-HxmM5KRUBbTYmZI,21965
353
353
  reflex/utils/export.py,sha256=Z2AHuhkxGQzOi9I90BejQ4qEcD0URr2i-ZU5qTJt7eQ,2562
354
- reflex/utils/format.py,sha256=ZgZndjYujTMiHaG2Yg3LPVqr7-yoZZTBvlCLNX07iEU,21109
355
- reflex/utils/frontend_skeleton.py,sha256=aCWJZN-xtZ9pOMrUwpx9RDXorCpTcNDeD9p3Meh-Q5U,8608
356
- reflex/utils/imports.py,sha256=3hBb_3UPRjHt90HiFEoAt1acJWQ29RU8PFA1rFLLVRo,4242
354
+ reflex/utils/format.py,sha256=-EC0tfx7VCIijcuJx9l-ArRnRnPKrrrW8RgsKwXIoBc,21115
355
+ reflex/utils/frontend_skeleton.py,sha256=8sXRmVsKUiWf6O5rA1RRR_E4YjEsqDdIQlkUByp3aOI,8774
356
+ reflex/utils/imports.py,sha256=SlQfMTbJasXHxrpcHdWKPWiIZ1Kn2-tulMF32_YA2ek,4262
357
357
  reflex/utils/js_runtimes.py,sha256=ipVrZCajiRcjow-nQeUuxPS_c6F_NpfvMtITOesbPjU,13153
358
358
  reflex/utils/lazy_loader.py,sha256=BiY9OvmAJDCz10qpuyTYv9duXgMFQa6RXKQmTO9hqKU,4453
359
359
  reflex/utils/misc.py,sha256=folEweZVCrhHNkkqut9KqQdTJ80HxwL_gI41m40FnNM,4592
360
360
  reflex/utils/monitoring.py,sha256=87fr9j6Y9Bvz2uF4tBxuX6CaU054h1UPx0ijcnyP_kw,5250
361
361
  reflex/utils/net.py,sha256=q3h5pNbAlFiqy8U15S9DTOvzy_OnenVVug5ROBTGRTA,4267
362
362
  reflex/utils/path_ops.py,sha256=_RS17IQDNr5vcoLLGZx2-z1E5WP-JgDHvaRAOgqrZiU,8154
363
- reflex/utils/prerequisites.py,sha256=LEQCGg_PpvrNOBiOMZUZRrqWXYAW1Zkp56tHAPrpL9s,18643
363
+ reflex/utils/prerequisites.py,sha256=CvvpWc3xrZv7vAnA4GW96X3wghx-ApfNWemrI21zB9s,18742
364
364
  reflex/utils/processes.py,sha256=t-ufWwu9RDsSMXCSsmjS2TILP5s7-AY94Rgx2O2gHMw,18178
365
- reflex/utils/pyi_generator.py,sha256=j-xzMg2XjjM7eJsdx5cG4tWpe__ef0a8Isv1AvawqpA,46393
365
+ reflex/utils/pyi_generator.py,sha256=IiNyiodH_xq8tRLD45phe2Le3sL6ZgloVMyg07xtT3o,46395
366
366
  reflex/utils/redir.py,sha256=E6lJ6UYGQs_uCyQAKHT_dDMplo5IRZ9JarWfvgGAgGo,1731
367
367
  reflex/utils/registry.py,sha256=omKh5rrsybDuuKmh4K88lwdwwcpGsu3Vc4pCko_djKY,2239
368
368
  reflex/utils/rename.py,sha256=qdE4SXHOaNs-TDGrnJz-h_nvLWA1C5osVrWb4wLSfyI,5262
369
- reflex/utils/serializers.py,sha256=sVLfbWIBKPpmo0CVVxoxXGu0K3R9mYMWgaI02LXZmcM,13952
369
+ reflex/utils/serializers.py,sha256=ZqQ2xrBIyOXaN0RIRZwy2oU5O0Y1R0SEGWx-kf5rXMs,13938
370
370
  reflex/utils/telemetry.py,sha256=KY54NmGWyJVSf9TMTcXw2V6gIbEqut1JkAXmmtIlRfw,10776
371
371
  reflex/utils/templates.py,sha256=tWo3jO6laQX8b0gUsqHkio_hUQGIvFbmXC-lxiGcdRo,14251
372
372
  reflex/utils/token_manager.py,sha256=o_HGbqT9WfYRmek2iY9nem4vDZMz8Q4Dra-eW1lKmuA,6999
373
- reflex/utils/types.py,sha256=jFHfd2-yHWV61L7YP2gc9Zj2ZLwdthHOOfRIc_PAWH0,38390
373
+ reflex/utils/types.py,sha256=Xh9jXSMBgwrR-Whn_5qAnjqQWzHiIJbm1b8qwMG4QmY,38511
374
374
  reflex/vars/__init__.py,sha256=85eXMt32bFoKtMdH3KxYRMD8mtnKyYiQcThPxJLoW1k,1359
375
- reflex/vars/base.py,sha256=8tRs__Pp0qvtlV3b-_-u_9dhwbJ2y0IUoHpnpbWexhQ,112984
375
+ reflex/vars/base.py,sha256=hfcJ3x-BSFLgN85oBS0dPJb2IaoKJqQjguP1sy50NRY,113256
376
376
  reflex/vars/datetime.py,sha256=F2Jv_bfydipFSkIQ1F6x5MnSgFEyES9Vq5RG_uGH81E,5118
377
377
  reflex/vars/dep_tracking.py,sha256=LfDGgAGlqfC0DeiVcitRBcA1uCe1C3fNRARRekLgCz4,13738
378
378
  reflex/vars/function.py,sha256=0i-VkxHkDJmZtfQUwUfaF0rlS6WM8azjwQ8k7rEOkyk,13944
379
379
  reflex/vars/number.py,sha256=tO7pnvFaBsedq1HWT4skytnSqHWMluGEhUbjAUMx8XQ,28190
380
- reflex/vars/object.py,sha256=BDmeiwG8v97s_BnR1Egq3NxOKVjv9TfnREB3cz0zZtk,17322
380
+ reflex/vars/object.py,sha256=YblDxQYMajR19a7qjavXcM7-9A6MweAH1giw5fjPci4,17349
381
381
  reflex/vars/sequence.py,sha256=1kBrqihspyjyQ1XDqFPC8OpVGtZs_EVkOdIKBro5ilA,55249
382
382
  scripts/hatch_build.py,sha256=-4pxcLSFmirmujGpQX9UUxjhIC03tQ_fIQwVbHu9kc0,1861
383
- reflex-0.8.8a1.dist-info/METADATA,sha256=YRd_uiDbOXgskGwb-csfoXMKBmyglU9xxt-k4lnguYY,12507
384
- reflex-0.8.8a1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
385
- reflex-0.8.8a1.dist-info/entry_points.txt,sha256=Rxt4dXc7MLBNt5CSHTehVPuSe9Xqow4HLX55nD9tQQ0,45
386
- reflex-0.8.8a1.dist-info/licenses/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
387
- reflex-0.8.8a1.dist-info/RECORD,,
383
+ reflex-0.8.9.dist-info/METADATA,sha256=grD51hghizQeANCTg9lYqako9l8tXK1sYtwYg4qGOCA,12505
384
+ reflex-0.8.9.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
385
+ reflex-0.8.9.dist-info/entry_points.txt,sha256=Rxt4dXc7MLBNt5CSHTehVPuSe9Xqow4HLX55nD9tQQ0,45
386
+ reflex-0.8.9.dist-info/licenses/LICENSE,sha256=dw3zLrp9f5ObD7kqS32vWfhcImfO52PMmRqvtxq_YEE,11358
387
+ reflex-0.8.9.dist-info/RECORD,,