reflex 0.4.5a1__py3-none-any.whl → 0.4.6__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 (199) hide show
  1. reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +5 -15
  2. reflex/.templates/jinja/web/pages/index.js.jinja2 +4 -0
  3. reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +4 -0
  4. reflex/.templates/web/utils/state.js +3 -0
  5. reflex/__init__.py +12 -2
  6. reflex/__init__.pyi +4 -0
  7. reflex/app.py +23 -3
  8. reflex/base.py +16 -4
  9. reflex/compiler/compiler.py +1 -0
  10. reflex/compiler/utils.py +11 -2
  11. reflex/components/base/app_wrap.pyi +1 -1
  12. reflex/components/base/bare.py +3 -4
  13. reflex/components/base/body.pyi +1 -1
  14. reflex/components/base/document.pyi +1 -1
  15. reflex/components/base/fragment.pyi +1 -1
  16. reflex/components/base/head.pyi +1 -1
  17. reflex/components/base/link.pyi +1 -1
  18. reflex/components/base/meta.pyi +1 -1
  19. reflex/components/base/script.pyi +1 -1
  20. reflex/components/chakra/base.pyi +1 -1
  21. reflex/components/chakra/datadisplay/badge.pyi +1 -1
  22. reflex/components/chakra/datadisplay/code.pyi +1 -1
  23. reflex/components/chakra/datadisplay/divider.pyi +1 -1
  24. reflex/components/chakra/datadisplay/keyboard_key.pyi +1 -1
  25. reflex/components/chakra/datadisplay/list.pyi +1 -1
  26. reflex/components/chakra/datadisplay/stat.pyi +1 -1
  27. reflex/components/chakra/datadisplay/table.pyi +1 -1
  28. reflex/components/chakra/datadisplay/tag.pyi +1 -1
  29. reflex/components/chakra/disclosure/accordion.pyi +1 -1
  30. reflex/components/chakra/disclosure/tabs.pyi +1 -1
  31. reflex/components/chakra/disclosure/transition.pyi +1 -1
  32. reflex/components/chakra/disclosure/visuallyhidden.pyi +1 -1
  33. reflex/components/chakra/feedback/alert.pyi +1 -1
  34. reflex/components/chakra/feedback/circularprogress.pyi +1 -1
  35. reflex/components/chakra/feedback/progress.pyi +1 -1
  36. reflex/components/chakra/feedback/skeleton.pyi +1 -1
  37. reflex/components/chakra/feedback/spinner.pyi +1 -1
  38. reflex/components/chakra/forms/button.pyi +1 -1
  39. reflex/components/chakra/forms/checkbox.pyi +1 -1
  40. reflex/components/chakra/forms/colormodeswitch.pyi +1 -1
  41. reflex/components/chakra/forms/date_picker.pyi +1 -1
  42. reflex/components/chakra/forms/date_time_picker.pyi +1 -1
  43. reflex/components/chakra/forms/editable.pyi +1 -1
  44. reflex/components/chakra/forms/email.pyi +1 -1
  45. reflex/components/chakra/forms/form.pyi +1 -1
  46. reflex/components/chakra/forms/iconbutton.pyi +1 -1
  47. reflex/components/chakra/forms/input.pyi +1 -1
  48. reflex/components/chakra/forms/numberinput.pyi +1 -1
  49. reflex/components/chakra/forms/password.pyi +1 -1
  50. reflex/components/chakra/forms/pininput.pyi +1 -1
  51. reflex/components/chakra/forms/radio.pyi +1 -1
  52. reflex/components/chakra/forms/rangeslider.pyi +1 -1
  53. reflex/components/chakra/forms/select.pyi +1 -1
  54. reflex/components/chakra/forms/slider.pyi +1 -1
  55. reflex/components/chakra/forms/switch.pyi +1 -1
  56. reflex/components/chakra/forms/textarea.pyi +1 -1
  57. reflex/components/chakra/forms/time_picker.pyi +1 -1
  58. reflex/components/chakra/layout/aspect_ratio.pyi +1 -1
  59. reflex/components/chakra/layout/box.pyi +1 -1
  60. reflex/components/chakra/layout/card.pyi +1 -1
  61. reflex/components/chakra/layout/center.pyi +1 -1
  62. reflex/components/chakra/layout/container.pyi +1 -1
  63. reflex/components/chakra/layout/flex.pyi +1 -1
  64. reflex/components/chakra/layout/grid.pyi +1 -1
  65. reflex/components/chakra/layout/spacer.pyi +1 -1
  66. reflex/components/chakra/layout/stack.pyi +1 -1
  67. reflex/components/chakra/layout/wrap.pyi +1 -1
  68. reflex/components/chakra/media/avatar.pyi +1 -1
  69. reflex/components/chakra/media/icon.pyi +1 -1
  70. reflex/components/chakra/media/image.pyi +1 -1
  71. reflex/components/chakra/navigation/breadcrumb.pyi +1 -1
  72. reflex/components/chakra/navigation/link.pyi +1 -1
  73. reflex/components/chakra/navigation/linkoverlay.pyi +1 -1
  74. reflex/components/chakra/navigation/stepper.pyi +1 -1
  75. reflex/components/chakra/overlay/alertdialog.pyi +1 -1
  76. reflex/components/chakra/overlay/drawer.pyi +1 -1
  77. reflex/components/chakra/overlay/menu.pyi +1 -1
  78. reflex/components/chakra/overlay/modal.pyi +1 -1
  79. reflex/components/chakra/overlay/popover.pyi +1 -1
  80. reflex/components/chakra/overlay/tooltip.pyi +1 -1
  81. reflex/components/chakra/typography/heading.pyi +1 -1
  82. reflex/components/chakra/typography/highlight.pyi +1 -1
  83. reflex/components/chakra/typography/span.pyi +1 -1
  84. reflex/components/chakra/typography/text.pyi +1 -1
  85. reflex/components/component.py +82 -30
  86. reflex/components/core/banner.py +1 -2
  87. reflex/components/core/banner.pyi +1 -2
  88. reflex/components/core/client_side_routing.pyi +1 -1
  89. reflex/components/core/cond.py +1 -1
  90. reflex/components/core/debounce.pyi +1 -1
  91. reflex/components/core/html.pyi +1 -1
  92. reflex/components/core/responsive.py +1 -1
  93. reflex/components/core/upload.pyi +1 -1
  94. reflex/components/datadisplay/code.py +17 -9
  95. reflex/components/datadisplay/code.pyi +3 -1
  96. reflex/components/datadisplay/dataeditor.pyi +1 -1
  97. reflex/components/el/element.pyi +1 -1
  98. reflex/components/el/elements/base.pyi +1 -1
  99. reflex/components/el/elements/forms.py +78 -1
  100. reflex/components/el/elements/forms.pyi +10 -2
  101. reflex/components/el/elements/inline.pyi +1 -1
  102. reflex/components/el/elements/media.pyi +1 -1
  103. reflex/components/el/elements/metadata.pyi +1 -1
  104. reflex/components/el/elements/other.pyi +1 -1
  105. reflex/components/el/elements/scripts.pyi +1 -1
  106. reflex/components/el/elements/sectioning.pyi +1 -1
  107. reflex/components/el/elements/tables.pyi +1 -1
  108. reflex/components/el/elements/typography.pyi +1 -1
  109. reflex/components/gridjs/datatable.pyi +1 -1
  110. reflex/components/lucide/icon.py +275 -115
  111. reflex/components/lucide/icon.pyi +259 -114
  112. reflex/components/markdown/markdown.pyi +1 -1
  113. reflex/components/moment/moment.pyi +1 -1
  114. reflex/components/next/base.pyi +1 -1
  115. reflex/components/next/image.pyi +1 -1
  116. reflex/components/next/link.pyi +1 -1
  117. reflex/components/next/video.pyi +1 -1
  118. reflex/components/plotly/plotly.pyi +1 -1
  119. reflex/components/radix/primitives/accordion.pyi +1 -1
  120. reflex/components/radix/primitives/base.pyi +1 -1
  121. reflex/components/radix/primitives/drawer.pyi +1 -1
  122. reflex/components/radix/primitives/form.pyi +1 -1
  123. reflex/components/radix/primitives/progress.pyi +1 -1
  124. reflex/components/radix/primitives/slider.pyi +1 -1
  125. reflex/components/radix/themes/base.pyi +1 -1
  126. reflex/components/radix/themes/color_mode.pyi +1 -1
  127. reflex/components/radix/themes/components/alert_dialog.pyi +1 -1
  128. reflex/components/radix/themes/components/aspect_ratio.pyi +1 -1
  129. reflex/components/radix/themes/components/avatar.pyi +1 -1
  130. reflex/components/radix/themes/components/badge.pyi +1 -1
  131. reflex/components/radix/themes/components/button.pyi +1 -1
  132. reflex/components/radix/themes/components/callout.pyi +1 -1
  133. reflex/components/radix/themes/components/card.pyi +1 -1
  134. reflex/components/radix/themes/components/checkbox.pyi +1 -1
  135. reflex/components/radix/themes/components/context_menu.pyi +1 -1
  136. reflex/components/radix/themes/components/dialog.pyi +1 -1
  137. reflex/components/radix/themes/components/dropdown_menu.pyi +1 -1
  138. reflex/components/radix/themes/components/hover_card.pyi +1 -1
  139. reflex/components/radix/themes/components/icon_button.pyi +1 -1
  140. reflex/components/radix/themes/components/inset.pyi +1 -1
  141. reflex/components/radix/themes/components/popover.pyi +1 -1
  142. reflex/components/radix/themes/components/radio_group.pyi +1 -1
  143. reflex/components/radix/themes/components/scroll_area.pyi +1 -1
  144. reflex/components/radix/themes/components/select.py +4 -1
  145. reflex/components/radix/themes/components/select.pyi +5 -1
  146. reflex/components/radix/themes/components/separator.pyi +1 -1
  147. reflex/components/radix/themes/components/slider.pyi +1 -1
  148. reflex/components/radix/themes/components/switch.pyi +1 -1
  149. reflex/components/radix/themes/components/table.pyi +1 -1
  150. reflex/components/radix/themes/components/tabs.pyi +1 -1
  151. reflex/components/radix/themes/components/text_area.pyi +5 -1
  152. reflex/components/radix/themes/components/text_field.pyi +1 -1
  153. reflex/components/radix/themes/components/tooltip.pyi +1 -1
  154. reflex/components/radix/themes/layout/__init__.py +5 -4
  155. reflex/components/radix/themes/layout/base.pyi +1 -1
  156. reflex/components/radix/themes/layout/box.pyi +1 -1
  157. reflex/components/radix/themes/layout/center.pyi +1 -1
  158. reflex/components/radix/themes/layout/container.pyi +1 -1
  159. reflex/components/radix/themes/layout/flex.pyi +1 -1
  160. reflex/components/radix/themes/layout/grid.pyi +1 -1
  161. reflex/components/radix/themes/layout/list.py +21 -13
  162. reflex/components/radix/themes/layout/list.pyi +139 -481
  163. reflex/components/radix/themes/layout/section.pyi +1 -1
  164. reflex/components/radix/themes/layout/spacer.pyi +1 -1
  165. reflex/components/radix/themes/layout/stack.pyi +1 -1
  166. reflex/components/radix/themes/typography/blockquote.pyi +1 -1
  167. reflex/components/radix/themes/typography/code.pyi +1 -1
  168. reflex/components/radix/themes/typography/heading.pyi +1 -1
  169. reflex/components/radix/themes/typography/link.pyi +1 -1
  170. reflex/components/radix/themes/typography/text.pyi +1 -1
  171. reflex/components/react_player/audio.pyi +1 -1
  172. reflex/components/react_player/react_player.pyi +1 -1
  173. reflex/components/react_player/video.pyi +1 -1
  174. reflex/components/recharts/cartesian.pyi +1 -1
  175. reflex/components/recharts/charts.pyi +1 -1
  176. reflex/components/recharts/general.pyi +1 -1
  177. reflex/components/recharts/polar.pyi +1 -1
  178. reflex/components/recharts/recharts.pyi +1 -1
  179. reflex/components/suneditor/editor.pyi +1 -1
  180. reflex/config.py +12 -2
  181. reflex/custom_components/custom_components.py +305 -21
  182. reflex/event.py +36 -46
  183. reflex/reflex.py +19 -13
  184. reflex/state.py +184 -39
  185. reflex/testing.py +15 -11
  186. reflex/utils/console.py +15 -7
  187. reflex/utils/exec.py +9 -0
  188. reflex/utils/prerequisites.py +12 -1
  189. reflex/utils/processes.py +8 -25
  190. reflex/utils/pyi_generator.py +842 -0
  191. reflex/utils/telemetry.py +18 -1
  192. reflex/utils/types.py +14 -2
  193. reflex/vars.py +33 -3
  194. {reflex-0.4.5a1.dist-info → reflex-0.4.6.dist-info}/METADATA +31 -29
  195. {reflex-0.4.5a1.dist-info → reflex-0.4.6.dist-info}/RECORD +198 -198
  196. reflex/page.pyi +0 -17
  197. {reflex-0.4.5a1.dist-info → reflex-0.4.6.dist-info}/LICENSE +0 -0
  198. {reflex-0.4.5a1.dist-info → reflex-0.4.6.dist-info}/WHEEL +0 -0
  199. {reflex-0.4.5a1.dist-info → reflex-0.4.6.dist-info}/entry_points.txt +0 -0
@@ -127,6 +127,11 @@ def get_fnm_version() -> version.Version | None:
127
127
  return version.parse(result.stdout.split(" ")[1]) # type: ignore
128
128
  except (FileNotFoundError, TypeError):
129
129
  return None
130
+ except version.InvalidVersion as e:
131
+ console.warn(
132
+ f"The detected fnm version ({e.args[0]}) is not valid. Defaulting to None."
133
+ )
134
+ return None
130
135
 
131
136
 
132
137
  def get_bun_version() -> version.Version | None:
@@ -141,6 +146,11 @@ def get_bun_version() -> version.Version | None:
141
146
  return version.parse(result.stdout) # type: ignore
142
147
  except FileNotFoundError:
143
148
  return None
149
+ except version.InvalidVersion as e:
150
+ console.warn(
151
+ f"The detected bun version ({e.args[0]}) is not valid. Defaulting to None."
152
+ )
153
+ return None
144
154
 
145
155
 
146
156
  def get_install_package_manager() -> str | None:
@@ -448,7 +458,7 @@ def get_project_hash(raise_on_fail: bool = False) -> int | None:
448
458
  # Open and read the file
449
459
  with open(constants.Reflex.JSON, "r") as file:
450
460
  data = json.load(file)
451
- return data["project_hash"]
461
+ return data.get("project_hash")
452
462
 
453
463
 
454
464
  def initialize_web_directory():
@@ -854,6 +864,7 @@ def validate_bun():
854
864
  # This is specific to non-FHS OS
855
865
  bun_path = get_config().bun_path
856
866
  if bun_path != constants.Bun.DEFAULT_PATH:
867
+ console.info(f"Using custom Bun path: {bun_path}")
857
868
  bun_version = get_bun_version()
858
869
  if not bun_version:
859
870
  console.error(
reflex/utils/processes.py CHANGED
@@ -87,41 +87,24 @@ def kill_process_on_port(port):
87
87
  get_process_on_port(port).kill() # type: ignore
88
88
 
89
89
 
90
- def change_or_terminate_port(port, _type) -> str:
91
- """Terminate or change the port.
90
+ def change_port(port: str, _type: str) -> str:
91
+ """Change the port.
92
92
 
93
93
  Args:
94
94
  port: The port.
95
95
  _type: The type of the port.
96
96
 
97
97
  Returns:
98
- The new port or the current one.
98
+ The new port.
99
99
 
100
-
101
- Raises:
102
- Exit: If the user wants to exit.
103
100
  """
101
+ new_port = str(int(port) + 1)
102
+ if is_process_on_port(new_port):
103
+ return change_port(new_port, _type)
104
104
  console.info(
105
- f"Something is already running on port [bold underline]{port}[/bold underline]. This is the port the {_type} runs on."
105
+ f"The {_type} will run on port [bold underline]{new_port}[/bold underline]."
106
106
  )
107
- frontend_action = console.ask("Kill or change it?", choices=["k", "c", "n"])
108
- if frontend_action == "k":
109
- kill_process_on_port(port)
110
- return port
111
- elif frontend_action == "c":
112
- new_port = console.ask("Specify the new port")
113
-
114
- # Check if also the new port is used
115
- if is_process_on_port(new_port):
116
- return change_or_terminate_port(new_port, _type)
117
- else:
118
- console.info(
119
- f"The {_type} will run on port [bold underline]{new_port}[/bold underline]."
120
- )
121
- return new_port
122
- else:
123
- console.log("Exiting...")
124
- raise typer.Exit()
107
+ return new_port
125
108
 
126
109
 
127
110
  def new_process(args, run: bool = False, show_logs: bool = False, **kwargs):