reflex 0.6.8a2__py3-none-any.whl → 0.7.0a2__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 (246) hide show
  1. reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +1 -1
  2. reflex/.templates/jinja/web/pages/_app.js.jinja2 +7 -7
  3. reflex/.templates/jinja/web/pages/utils.js.jinja2 +3 -3
  4. reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +1 -4
  5. reflex/.templates/web/utils/state.js +65 -36
  6. reflex/__init__.py +4 -17
  7. reflex/__init__.pyi +1 -2
  8. reflex/app.py +249 -116
  9. reflex/app_mixins/lifespan.py +9 -9
  10. reflex/app_mixins/middleware.py +6 -6
  11. reflex/app_module_for_backend.py +3 -7
  12. reflex/base.py +7 -7
  13. reflex/compiler/compiler.py +8 -0
  14. reflex/compiler/utils.py +35 -6
  15. reflex/components/base/app_wrap.pyi +16 -16
  16. reflex/components/base/bare.py +1 -1
  17. reflex/components/base/body.pyi +16 -16
  18. reflex/components/base/document.pyi +76 -76
  19. reflex/components/base/error_boundary.py +2 -1
  20. reflex/components/base/error_boundary.pyi +19 -22
  21. reflex/components/base/fragment.pyi +16 -16
  22. reflex/components/base/head.pyi +31 -31
  23. reflex/components/base/link.pyi +31 -31
  24. reflex/components/base/meta.py +2 -2
  25. reflex/components/base/meta.pyi +61 -61
  26. reflex/components/base/script.pyi +19 -19
  27. reflex/components/base/strict_mode.py +10 -0
  28. reflex/components/base/strict_mode.pyi +57 -0
  29. reflex/components/component.py +38 -77
  30. reflex/components/core/banner.py +159 -4
  31. reflex/components/core/banner.pyi +162 -76
  32. reflex/components/core/breakpoints.py +3 -1
  33. reflex/components/core/client_side_routing.py +1 -1
  34. reflex/components/core/client_side_routing.pyi +32 -32
  35. reflex/components/core/clipboard.pyi +17 -20
  36. reflex/components/core/cond.py +9 -10
  37. reflex/components/core/debounce.py +1 -1
  38. reflex/components/core/debounce.pyi +17 -17
  39. reflex/components/core/foreach.py +28 -3
  40. reflex/components/core/html.py +1 -1
  41. reflex/components/core/html.pyi +16 -16
  42. reflex/components/core/match.py +5 -5
  43. reflex/components/core/sticky.py +160 -0
  44. reflex/components/core/sticky.pyi +449 -0
  45. reflex/components/core/upload.py +2 -2
  46. reflex/components/core/upload.pyi +80 -88
  47. reflex/components/datadisplay/code.py +5 -14
  48. reflex/components/datadisplay/code.pyi +31 -31
  49. reflex/components/datadisplay/dataeditor.py +7 -4
  50. reflex/components/datadisplay/dataeditor.pyi +40 -54
  51. reflex/components/datadisplay/logo.py +13 -8
  52. reflex/components/datadisplay/shiki_code_block.py +14 -9
  53. reflex/components/datadisplay/shiki_code_block.pyi +46 -46
  54. reflex/components/dynamic.py +22 -3
  55. reflex/components/el/constants/reflex.py +1 -1
  56. reflex/components/el/element.py +1 -1
  57. reflex/components/el/element.pyi +16 -16
  58. reflex/components/el/elements/base.pyi +16 -16
  59. reflex/components/el/elements/forms.py +4 -4
  60. reflex/components/el/elements/forms.pyi +224 -258
  61. reflex/components/el/elements/inline.pyi +421 -421
  62. reflex/components/el/elements/media.pyi +376 -376
  63. reflex/components/el/elements/metadata.pyi +91 -91
  64. reflex/components/el/elements/other.pyi +106 -106
  65. reflex/components/el/elements/scripts.pyi +46 -46
  66. reflex/components/el/elements/sectioning.pyi +226 -226
  67. reflex/components/el/elements/tables.pyi +151 -151
  68. reflex/components/el/elements/typography.pyi +226 -226
  69. reflex/components/gridjs/datatable.pyi +31 -31
  70. reflex/components/lucide/icon.py +46 -8
  71. reflex/components/lucide/icon.pyi +85 -31
  72. reflex/components/markdown/markdown.py +10 -8
  73. reflex/components/markdown/markdown.pyi +16 -16
  74. reflex/components/moment/moment.py +2 -2
  75. reflex/components/moment/moment.pyi +17 -19
  76. reflex/components/next/base.pyi +16 -16
  77. reflex/components/next/image.py +16 -4
  78. reflex/components/next/image.pyi +22 -20
  79. reflex/components/next/link.py +1 -1
  80. reflex/components/next/link.pyi +16 -16
  81. reflex/components/next/video.pyi +16 -16
  82. reflex/components/plotly/plotly.py +5 -5
  83. reflex/components/plotly/plotly.pyi +34 -44
  84. reflex/components/props.py +3 -3
  85. reflex/components/radix/__init__.pyi +1 -1
  86. reflex/components/radix/primitives/accordion.py +9 -5
  87. reflex/components/radix/primitives/accordion.pyi +110 -108
  88. reflex/components/radix/primitives/base.pyi +31 -31
  89. reflex/components/radix/primitives/drawer.py +5 -2
  90. reflex/components/radix/primitives/drawer.pyi +179 -187
  91. reflex/components/radix/primitives/form.pyi +160 -172
  92. reflex/components/radix/primitives/progress.py +1 -1
  93. reflex/components/radix/primitives/progress.pyi +76 -76
  94. reflex/components/radix/primitives/slider.py +1 -1
  95. reflex/components/radix/primitives/slider.pyi +78 -82
  96. reflex/components/radix/themes/base.pyi +121 -121
  97. reflex/components/radix/themes/color_mode.py +11 -9
  98. reflex/components/radix/themes/color_mode.pyi +47 -49
  99. reflex/components/radix/themes/components/alert_dialog.py +3 -0
  100. reflex/components/radix/themes/components/alert_dialog.pyi +110 -112
  101. reflex/components/radix/themes/components/aspect_ratio.pyi +16 -16
  102. reflex/components/radix/themes/components/avatar.pyi +16 -16
  103. reflex/components/radix/themes/components/badge.pyi +16 -16
  104. reflex/components/radix/themes/components/button.pyi +16 -16
  105. reflex/components/radix/themes/components/callout.pyi +76 -76
  106. reflex/components/radix/themes/components/card.py +1 -1
  107. reflex/components/radix/themes/components/card.pyi +17 -17
  108. reflex/components/radix/themes/components/checkbox.pyi +49 -55
  109. reflex/components/radix/themes/components/checkbox_cards.pyi +31 -31
  110. reflex/components/radix/themes/components/checkbox_group.pyi +31 -31
  111. reflex/components/radix/themes/components/context_menu.py +5 -0
  112. reflex/components/radix/themes/components/context_menu.pyi +149 -155
  113. reflex/components/radix/themes/components/data_list.pyi +61 -61
  114. reflex/components/radix/themes/components/dialog.py +3 -0
  115. reflex/components/radix/themes/components/dialog.pyi +113 -117
  116. reflex/components/radix/themes/components/dropdown_menu.py +5 -0
  117. reflex/components/radix/themes/components/dropdown_menu.pyi +133 -137
  118. reflex/components/radix/themes/components/hover_card.py +3 -0
  119. reflex/components/radix/themes/components/hover_card.pyi +63 -67
  120. reflex/components/radix/themes/components/icon_button.py +2 -2
  121. reflex/components/radix/themes/components/icon_button.pyi +17 -16
  122. reflex/components/radix/themes/components/inset.pyi +16 -16
  123. reflex/components/radix/themes/components/popover.py +3 -0
  124. reflex/components/radix/themes/components/popover.pyi +68 -70
  125. reflex/components/radix/themes/components/progress.pyi +16 -16
  126. reflex/components/radix/themes/components/radio.pyi +16 -16
  127. reflex/components/radix/themes/components/radio_cards.py +2 -0
  128. reflex/components/radix/themes/components/radio_cards.pyi +32 -34
  129. reflex/components/radix/themes/components/radio_group.py +1 -1
  130. reflex/components/radix/themes/components/radio_group.pyi +62 -64
  131. reflex/components/radix/themes/components/scroll_area.pyi +16 -16
  132. reflex/components/radix/themes/components/segmented_control.pyi +32 -35
  133. reflex/components/radix/themes/components/select.py +4 -0
  134. reflex/components/radix/themes/components/select.pyi +145 -157
  135. reflex/components/radix/themes/components/separator.pyi +16 -16
  136. reflex/components/radix/themes/components/skeleton.py +3 -0
  137. reflex/components/radix/themes/components/skeleton.pyi +16 -16
  138. reflex/components/radix/themes/components/slider.pyi +22 -28
  139. reflex/components/radix/themes/components/spinner.pyi +16 -16
  140. reflex/components/radix/themes/components/switch.pyi +17 -19
  141. reflex/components/radix/themes/components/table.pyi +106 -106
  142. reflex/components/radix/themes/components/tabs.py +3 -0
  143. reflex/components/radix/themes/components/tabs.pyi +78 -82
  144. reflex/components/radix/themes/components/text_area.py +12 -0
  145. reflex/components/radix/themes/components/text_area.pyi +21 -33
  146. reflex/components/radix/themes/components/text_field.py +1 -1
  147. reflex/components/radix/themes/components/text_field.pyi +52 -80
  148. reflex/components/radix/themes/components/tooltip.py +6 -1
  149. reflex/components/radix/themes/components/tooltip.pyi +20 -21
  150. reflex/components/radix/themes/layout/__init__.pyi +1 -1
  151. reflex/components/radix/themes/layout/base.pyi +16 -16
  152. reflex/components/radix/themes/layout/box.pyi +16 -16
  153. reflex/components/radix/themes/layout/center.pyi +16 -16
  154. reflex/components/radix/themes/layout/container.pyi +16 -16
  155. reflex/components/radix/themes/layout/flex.pyi +16 -16
  156. reflex/components/radix/themes/layout/grid.pyi +16 -16
  157. reflex/components/radix/themes/layout/list.py +2 -2
  158. reflex/components/radix/themes/layout/list.pyi +76 -76
  159. reflex/components/radix/themes/layout/section.pyi +16 -16
  160. reflex/components/radix/themes/layout/spacer.pyi +16 -16
  161. reflex/components/radix/themes/layout/stack.py +2 -2
  162. reflex/components/radix/themes/layout/stack.pyi +46 -46
  163. reflex/components/radix/themes/typography/blockquote.pyi +16 -16
  164. reflex/components/radix/themes/typography/code.pyi +16 -16
  165. reflex/components/radix/themes/typography/heading.pyi +16 -16
  166. reflex/components/radix/themes/typography/link.py +1 -1
  167. reflex/components/radix/themes/typography/link.pyi +16 -16
  168. reflex/components/radix/themes/typography/text.py +2 -2
  169. reflex/components/radix/themes/typography/text.pyi +106 -106
  170. reflex/components/react_player/audio.pyi +33 -39
  171. reflex/components/react_player/react_player.py +1 -1
  172. reflex/components/react_player/react_player.pyi +32 -38
  173. reflex/components/react_player/video.pyi +33 -39
  174. reflex/components/recharts/__init__.py +2 -0
  175. reflex/components/recharts/__init__.pyi +2 -0
  176. reflex/components/recharts/cartesian.pyi +282 -282
  177. reflex/components/recharts/charts.py +15 -15
  178. reflex/components/recharts/charts.pyi +164 -164
  179. reflex/components/recharts/general.py +19 -4
  180. reflex/components/recharts/general.pyi +132 -81
  181. reflex/components/recharts/polar.py +2 -2
  182. reflex/components/recharts/polar.pyi +55 -55
  183. reflex/components/recharts/recharts.py +4 -4
  184. reflex/components/recharts/recharts.pyi +31 -31
  185. reflex/components/sonner/toast.py +15 -13
  186. reflex/components/sonner/toast.pyi +22 -22
  187. reflex/components/suneditor/editor.py +6 -4
  188. reflex/components/suneditor/editor.pyi +26 -40
  189. reflex/components/tags/iter_tag.py +3 -3
  190. reflex/components/tags/tag.py +25 -3
  191. reflex/config.py +48 -15
  192. reflex/constants/__init__.py +1 -0
  193. reflex/constants/base.py +4 -1
  194. reflex/constants/compiler.py +5 -2
  195. reflex/constants/config.py +8 -1
  196. reflex/constants/installer.py +9 -9
  197. reflex/constants/style.py +1 -1
  198. reflex/custom_components/custom_components.py +9 -7
  199. reflex/event.py +215 -208
  200. reflex/experimental/__init__.py +19 -11
  201. reflex/experimental/client_state.py +53 -28
  202. reflex/experimental/hooks.py +5 -5
  203. reflex/experimental/layout.py +8 -5
  204. reflex/experimental/layout.pyi +79 -83
  205. reflex/experimental/misc.py +3 -3
  206. reflex/istate/wrappers.py +1 -1
  207. reflex/middleware/hydrate_middleware.py +2 -2
  208. reflex/model.py +11 -6
  209. reflex/page.py +5 -5
  210. reflex/reflex.py +90 -19
  211. reflex/route.py +1 -1
  212. reflex/state.py +358 -401
  213. reflex/style.py +27 -3
  214. reflex/testing.py +29 -23
  215. reflex/utils/build.py +6 -2
  216. reflex/utils/codespaces.py +1 -4
  217. reflex/utils/compat.py +6 -5
  218. reflex/utils/console.py +52 -16
  219. reflex/utils/exceptions.py +89 -26
  220. reflex/utils/exec.py +69 -74
  221. reflex/utils/export.py +6 -1
  222. reflex/utils/format.py +8 -40
  223. reflex/utils/imports.py +2 -2
  224. reflex/utils/lazy_loader.py +7 -1
  225. reflex/utils/path_ops.py +28 -14
  226. reflex/utils/prerequisites.py +326 -67
  227. reflex/utils/processes.py +45 -32
  228. reflex/utils/pyi_generator.py +39 -33
  229. reflex/utils/registry.py +4 -4
  230. reflex/utils/serializers.py +1 -1
  231. reflex/utils/telemetry.py +5 -4
  232. reflex/utils/types.py +42 -18
  233. reflex/vars/base.py +656 -333
  234. reflex/vars/datetime.py +6 -7
  235. reflex/vars/dep_tracking.py +344 -0
  236. reflex/vars/function.py +11 -5
  237. reflex/vars/number.py +31 -43
  238. reflex/vars/object.py +63 -62
  239. reflex/vars/sequence.py +79 -67
  240. {reflex-0.6.8a2.dist-info → reflex-0.7.0a2.dist-info}/METADATA +7 -8
  241. reflex-0.7.0a2.dist-info/RECORD +401 -0
  242. {reflex-0.6.8a2.dist-info → reflex-0.7.0a2.dist-info}/WHEEL +1 -1
  243. reflex/experimental/assets.py +0 -37
  244. reflex-0.6.8a2.dist-info/RECORD +0 -397
  245. {reflex-0.6.8a2.dist-info → reflex-0.7.0a2.dist-info}/LICENSE +0 -0
  246. {reflex-0.6.8a2.dist-info → reflex-0.7.0a2.dist-info}/entry_points.txt +0 -0
reflex/reflex.py CHANGED
@@ -17,7 +17,7 @@ from reflex.state import reset_disk_state_manager
17
17
  from reflex.utils import console, telemetry
18
18
 
19
19
  # Disable typer+rich integration for help panels
20
- typer.core.rich = None # type: ignore
20
+ typer.core.rich = None # pyright: ignore [reportPrivateImportUsage]
21
21
 
22
22
  # Create the app.
23
23
  try:
@@ -26,6 +26,8 @@ except TypeError:
26
26
  # Fallback for older typer versions.
27
27
  cli = typer.Typer(add_completion=False)
28
28
 
29
+ SHOW_BUILT_WITH_REFLEX_INFO = "https://reflex.dev/docs/hosting/reflex-branding/"
30
+
29
31
  # Get the config.
30
32
  config = get_config()
31
33
 
@@ -125,8 +127,8 @@ def _run(
125
127
  env: constants.Env = constants.Env.DEV,
126
128
  frontend: bool = True,
127
129
  backend: bool = True,
128
- frontend_port: str = str(config.frontend_port),
129
- backend_port: str = str(config.backend_port),
130
+ frontend_port: int = config.frontend_port,
131
+ backend_port: int = config.backend_port,
130
132
  backend_host: str = config.backend_host,
131
133
  loglevel: constants.LogLevel = config.loglevel,
132
134
  ):
@@ -160,18 +162,22 @@ def _run(
160
162
  # Find the next available open port if applicable.
161
163
  if frontend:
162
164
  frontend_port = processes.handle_port(
163
- "frontend", frontend_port, str(constants.DefaultPorts.FRONTEND_PORT)
165
+ "frontend",
166
+ frontend_port,
167
+ constants.DefaultPorts.FRONTEND_PORT,
164
168
  )
165
169
 
166
170
  if backend:
167
171
  backend_port = processes.handle_port(
168
- "backend", backend_port, str(constants.DefaultPorts.BACKEND_PORT)
172
+ "backend",
173
+ backend_port,
174
+ constants.DefaultPorts.BACKEND_PORT,
169
175
  )
170
176
 
171
177
  # Apply the new ports to the config.
172
- if frontend_port != str(config.frontend_port):
178
+ if frontend_port != config.frontend_port:
173
179
  config._set_persistent(frontend_port=frontend_port)
174
- if backend_port != str(config.backend_port):
180
+ if backend_port != config.backend_port:
175
181
  config._set_persistent(backend_port=backend_port)
176
182
 
177
183
  # Reload the config to make sure the env vars are persistent.
@@ -182,6 +188,15 @@ def _run(
182
188
  prerequisites.check_latest_package_version(constants.Reflex.MODULE_NAME)
183
189
 
184
190
  if frontend:
191
+ if not config.show_built_with_reflex:
192
+ # The sticky badge may be disabled at runtime for team/enterprise tiers.
193
+ prerequisites.check_config_option_in_tier(
194
+ option_name="show_built_with_reflex",
195
+ allowed_tiers=["team", "enterprise"],
196
+ fallback_value=True,
197
+ help_link=SHOW_BUILT_WITH_REFLEX_INFO,
198
+ )
199
+
185
200
  # Get the app module.
186
201
  prerequisites.get_compiled_app()
187
202
 
@@ -262,10 +277,10 @@ def run(
262
277
  help="Execute only backend.",
263
278
  envvar=environment.REFLEX_BACKEND_ONLY.name,
264
279
  ),
265
- frontend_port: str = typer.Option(
280
+ frontend_port: int = typer.Option(
266
281
  config.frontend_port, help="Specify a different frontend port."
267
282
  ),
268
- backend_port: str = typer.Option(
283
+ backend_port: int = typer.Option(
269
284
  config.backend_port, help="Specify a different backend port."
270
285
  ),
271
286
  backend_host: str = typer.Option(
@@ -306,6 +321,9 @@ def export(
306
321
  help="Whether to exclude sqlite db files when exporting backend.",
307
322
  hidden=True,
308
323
  ),
324
+ env: constants.Env = typer.Option(
325
+ constants.Env.PROD, help="The environment to export the app in."
326
+ ),
309
327
  loglevel: constants.LogLevel = typer.Option(
310
328
  config.loglevel, help="The log level to use."
311
329
  ),
@@ -317,12 +335,22 @@ def export(
317
335
  if prerequisites.needs_reinit(frontend=True):
318
336
  _init(name=config.app_name, loglevel=loglevel)
319
337
 
338
+ if frontend and not config.show_built_with_reflex:
339
+ # The sticky badge may be disabled on export for team/enterprise tiers.
340
+ prerequisites.check_config_option_in_tier(
341
+ option_name="show_built_with_reflex",
342
+ allowed_tiers=["team", "enterprise"],
343
+ fallback_value=False,
344
+ help_link=SHOW_BUILT_WITH_REFLEX_INFO,
345
+ )
346
+
320
347
  export_utils.export(
321
348
  zipping=zipping,
322
349
  frontend=frontend,
323
350
  backend=backend,
324
351
  zip_dest_dir=zip_dest_dir,
325
352
  upload_db_file=upload_db_file,
353
+ env=env,
326
354
  loglevel=loglevel.subprocess_level(),
327
355
  )
328
356
 
@@ -351,7 +379,7 @@ def logout(
351
379
 
352
380
  check_version()
353
381
 
354
- logout(loglevel) # type: ignore
382
+ logout(loglevel) # pyright: ignore [reportArgumentType]
355
383
 
356
384
 
357
385
  db_cli = typer.Typer()
@@ -440,7 +468,11 @@ def deploy(
440
468
  config.app_name,
441
469
  "--app-name",
442
470
  help="The name of the App to deploy under.",
443
- hidden=True,
471
+ ),
472
+ app_id: str = typer.Option(
473
+ None,
474
+ "--app-id",
475
+ help="The ID of the App to deploy over.",
444
476
  ),
445
477
  regions: List[str] = typer.Option(
446
478
  [],
@@ -480,6 +512,11 @@ def deploy(
480
512
  "--project",
481
513
  help="project id to deploy to",
482
514
  ),
515
+ project_name: Optional[str] = typer.Option(
516
+ None,
517
+ "--project-name",
518
+ help="The name of the project to deploy to.",
519
+ ),
483
520
  token: Optional[str] = typer.Option(
484
521
  None,
485
522
  "--token",
@@ -492,6 +529,7 @@ def deploy(
492
529
  ),
493
530
  ):
494
531
  """Deploy the app to the Reflex hosting service."""
532
+ from reflex_cli.constants.base import LogLevel as HostingLogLevel
495
533
  from reflex_cli.utils import dependency
496
534
  from reflex_cli.v2 import cli as hosting_cli
497
535
 
@@ -500,15 +538,32 @@ def deploy(
500
538
 
501
539
  check_version()
502
540
 
541
+ if not config.show_built_with_reflex:
542
+ # The sticky badge may be disabled on deploy for pro/team/enterprise tiers.
543
+ prerequisites.check_config_option_in_tier(
544
+ option_name="show_built_with_reflex",
545
+ allowed_tiers=["pro", "team", "enterprise"],
546
+ fallback_value=True,
547
+ help_link=SHOW_BUILT_WITH_REFLEX_INFO,
548
+ )
549
+
503
550
  # Set the log level.
504
551
  console.set_log_level(loglevel)
505
552
 
506
- if not token:
507
- # make sure user is logged in.
508
- if interactive:
509
- hosting_cli.login()
510
- else:
511
- raise SystemExit("Token is required for non-interactive mode.")
553
+ def convert_reflex_loglevel_to_reflex_cli_loglevel(
554
+ loglevel: constants.LogLevel,
555
+ ) -> HostingLogLevel:
556
+ if loglevel == constants.LogLevel.DEBUG:
557
+ return HostingLogLevel.DEBUG
558
+ if loglevel == constants.LogLevel.INFO:
559
+ return HostingLogLevel.INFO
560
+ if loglevel == constants.LogLevel.WARNING:
561
+ return HostingLogLevel.WARNING
562
+ if loglevel == constants.LogLevel.ERROR:
563
+ return HostingLogLevel.ERROR
564
+ if loglevel == constants.LogLevel.CRITICAL:
565
+ return HostingLogLevel.CRITICAL
566
+ return HostingLogLevel.INFO
512
567
 
513
568
  # Only check requirements if interactive.
514
569
  # There is user interaction for requirements update.
@@ -522,6 +577,7 @@ def deploy(
522
577
 
523
578
  hosting_cli.deploy(
524
579
  app_name=app_name,
580
+ app_id=app_id,
525
581
  export_fn=lambda zip_dest_dir,
526
582
  api_url,
527
583
  deploy_url,
@@ -542,13 +598,28 @@ def deploy(
542
598
  envfile=envfile,
543
599
  hostname=hostname,
544
600
  interactive=interactive,
545
- loglevel=type(loglevel).INFO, # type: ignore
601
+ loglevel=convert_reflex_loglevel_to_reflex_cli_loglevel(loglevel),
546
602
  token=token,
547
603
  project=project,
548
- config_path=config_path,
604
+ project_name=project_name,
605
+ **({"config_path": config_path} if config_path is not None else {}),
549
606
  )
550
607
 
551
608
 
609
+ @cli.command()
610
+ def rename(
611
+ new_name: str = typer.Argument(..., help="The new name for the app."),
612
+ loglevel: constants.LogLevel = typer.Option(
613
+ config.loglevel, help="The log level to use."
614
+ ),
615
+ ):
616
+ """Rename the app in the current directory."""
617
+ from reflex.utils import prerequisites
618
+
619
+ prerequisites.validate_app_name(new_name)
620
+ prerequisites.rename_app(new_name, loglevel)
621
+
622
+
552
623
  cli.add_typer(db_cli, name="db", help="Subcommands for managing the database schema.")
553
624
  cli.add_typer(script_cli, name="script", help="Subcommands running helper scripts.")
554
625
  cli.add_typer(
reflex/route.py CHANGED
@@ -103,7 +103,7 @@ def catchall_prefix(route: str) -> str:
103
103
  return route.replace(pattern, "") if pattern else ""
104
104
 
105
105
 
106
- def replace_brackets_with_keywords(input_string):
106
+ def replace_brackets_with_keywords(input_string: str) -> str:
107
107
  """Replace brackets and everything inside it in a string with a keyword.
108
108
 
109
109
  Args: