reflex 0.7.14a6__py3-none-any.whl → 0.8.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 (211) hide show
  1. reflex/.templates/jinja/app/rxconfig.py.jinja2 +4 -1
  2. reflex/.templates/jinja/web/package.json.jinja2 +1 -1
  3. reflex/.templates/jinja/web/pages/_app.js.jinja2 +16 -10
  4. reflex/.templates/jinja/web/pages/_document.js.jinja2 +1 -1
  5. reflex/.templates/jinja/web/pages/base_page.js.jinja2 +0 -1
  6. reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +4 -0
  7. reflex/.templates/jinja/web/utils/context.js.jinja2 +25 -8
  8. reflex/.templates/web/app/entry.client.js +8 -0
  9. reflex/.templates/web/app/routes.js +10 -0
  10. reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +12 -37
  11. reflex/.templates/web/postcss.config.js +1 -1
  12. reflex/.templates/web/react-router.config.js +6 -0
  13. reflex/.templates/web/utils/client_side_routing.js +21 -19
  14. reflex/.templates/web/utils/react-theme.js +92 -0
  15. reflex/.templates/web/utils/state.js +160 -67
  16. reflex/.templates/web/vite.config.js +32 -0
  17. reflex/__init__.py +1 -6
  18. reflex/__init__.pyi +0 -4
  19. reflex/app.py +53 -116
  20. reflex/base.py +1 -87
  21. reflex/compiler/compiler.py +41 -8
  22. reflex/compiler/templates.py +3 -3
  23. reflex/compiler/utils.py +73 -33
  24. reflex/components/__init__.py +0 -2
  25. reflex/components/__init__.pyi +0 -3
  26. reflex/components/base/__init__.py +1 -5
  27. reflex/components/base/__init__.pyi +4 -6
  28. reflex/components/base/app_wrap.pyi +5 -4
  29. reflex/components/base/body.pyi +5 -4
  30. reflex/components/base/document.py +18 -14
  31. reflex/components/base/document.pyi +83 -27
  32. reflex/components/base/error_boundary.pyi +5 -4
  33. reflex/components/base/fragment.pyi +5 -4
  34. reflex/components/base/link.pyi +9 -7
  35. reflex/components/base/meta.pyi +17 -13
  36. reflex/components/base/script.py +60 -58
  37. reflex/components/base/script.pyi +246 -31
  38. reflex/components/base/strict_mode.pyi +5 -4
  39. reflex/components/component.py +146 -217
  40. reflex/components/core/__init__.py +1 -0
  41. reflex/components/core/__init__.pyi +1 -0
  42. reflex/components/core/auto_scroll.pyi +5 -4
  43. reflex/components/core/banner.pyi +25 -19
  44. reflex/components/core/client_side_routing.py +7 -6
  45. reflex/components/core/client_side_routing.pyi +6 -56
  46. reflex/components/core/clipboard.pyi +5 -4
  47. reflex/components/core/debounce.py +1 -0
  48. reflex/components/core/debounce.pyi +5 -4
  49. reflex/components/core/foreach.py +3 -2
  50. reflex/components/core/helmet.py +14 -0
  51. reflex/components/{next/base.pyi → core/helmet.pyi} +10 -7
  52. reflex/components/core/html.pyi +5 -4
  53. reflex/components/core/sticky.pyi +17 -13
  54. reflex/components/core/upload.py +2 -1
  55. reflex/components/core/upload.pyi +21 -16
  56. reflex/components/datadisplay/code.py +2 -72
  57. reflex/components/datadisplay/code.pyi +9 -10
  58. reflex/components/datadisplay/dataeditor.pyi +11 -6
  59. reflex/components/datadisplay/shiki_code_block.pyi +13 -10
  60. reflex/components/dynamic.py +5 -5
  61. reflex/components/el/element.pyi +5 -4
  62. reflex/components/el/elements/base.pyi +5 -4
  63. reflex/components/el/elements/forms.pyi +69 -52
  64. reflex/components/el/elements/inline.pyi +113 -85
  65. reflex/components/el/elements/media.pyi +105 -79
  66. reflex/components/el/elements/metadata.pyi +25 -19
  67. reflex/components/el/elements/other.pyi +29 -22
  68. reflex/components/el/elements/scripts.pyi +13 -10
  69. reflex/components/el/elements/sectioning.pyi +61 -46
  70. reflex/components/el/elements/tables.pyi +41 -31
  71. reflex/components/el/elements/typography.pyi +61 -46
  72. reflex/components/field.py +175 -0
  73. reflex/components/gridjs/datatable.py +2 -2
  74. reflex/components/gridjs/datatable.pyi +11 -9
  75. reflex/components/lucide/icon.py +6 -2
  76. reflex/components/lucide/icon.pyi +15 -10
  77. reflex/components/markdown/markdown.pyi +5 -4
  78. reflex/components/moment/moment.pyi +5 -4
  79. reflex/components/plotly/plotly.pyi +19 -10
  80. reflex/components/props.py +376 -27
  81. reflex/components/radix/primitives/accordion.py +8 -1
  82. reflex/components/radix/primitives/accordion.pyi +29 -22
  83. reflex/components/radix/primitives/base.pyi +9 -7
  84. reflex/components/radix/primitives/drawer.pyi +45 -34
  85. reflex/components/radix/primitives/form.pyi +41 -31
  86. reflex/components/radix/primitives/progress.pyi +21 -16
  87. reflex/components/radix/primitives/slider.pyi +21 -16
  88. reflex/components/radix/themes/base.py +3 -3
  89. reflex/components/radix/themes/base.pyi +33 -25
  90. reflex/components/radix/themes/color_mode.pyi +13 -10
  91. reflex/components/radix/themes/components/alert_dialog.pyi +29 -22
  92. reflex/components/radix/themes/components/aspect_ratio.pyi +5 -4
  93. reflex/components/radix/themes/components/avatar.pyi +5 -4
  94. reflex/components/radix/themes/components/badge.pyi +5 -4
  95. reflex/components/radix/themes/components/button.pyi +5 -4
  96. reflex/components/radix/themes/components/callout.pyi +21 -16
  97. reflex/components/radix/themes/components/card.pyi +5 -4
  98. reflex/components/radix/themes/components/checkbox.pyi +13 -10
  99. reflex/components/radix/themes/components/checkbox_cards.pyi +9 -7
  100. reflex/components/radix/themes/components/checkbox_group.pyi +9 -7
  101. reflex/components/radix/themes/components/context_menu.pyi +53 -40
  102. reflex/components/radix/themes/components/data_list.pyi +17 -13
  103. reflex/components/radix/themes/components/dialog.pyi +29 -22
  104. reflex/components/radix/themes/components/dropdown_menu.pyi +33 -25
  105. reflex/components/radix/themes/components/hover_card.pyi +17 -13
  106. reflex/components/radix/themes/components/icon_button.pyi +5 -4
  107. reflex/components/radix/themes/components/inset.pyi +5 -4
  108. reflex/components/radix/themes/components/popover.pyi +17 -13
  109. reflex/components/radix/themes/components/progress.pyi +5 -4
  110. reflex/components/radix/themes/components/radio.pyi +5 -4
  111. reflex/components/radix/themes/components/radio_cards.pyi +9 -7
  112. reflex/components/radix/themes/components/radio_group.pyi +17 -13
  113. reflex/components/radix/themes/components/scroll_area.pyi +5 -4
  114. reflex/components/radix/themes/components/segmented_control.pyi +9 -7
  115. reflex/components/radix/themes/components/select.pyi +37 -28
  116. reflex/components/radix/themes/components/separator.pyi +5 -4
  117. reflex/components/radix/themes/components/skeleton.pyi +5 -4
  118. reflex/components/radix/themes/components/slider.pyi +5 -4
  119. reflex/components/radix/themes/components/spinner.pyi +5 -4
  120. reflex/components/radix/themes/components/switch.pyi +5 -4
  121. reflex/components/radix/themes/components/table.pyi +29 -22
  122. reflex/components/radix/themes/components/tabs.pyi +21 -16
  123. reflex/components/radix/themes/components/text_area.pyi +5 -4
  124. reflex/components/radix/themes/components/text_field.pyi +13 -10
  125. reflex/components/radix/themes/components/tooltip.pyi +5 -4
  126. reflex/components/radix/themes/layout/base.pyi +5 -4
  127. reflex/components/radix/themes/layout/box.pyi +5 -4
  128. reflex/components/radix/themes/layout/center.pyi +5 -4
  129. reflex/components/radix/themes/layout/container.pyi +5 -4
  130. reflex/components/radix/themes/layout/flex.pyi +5 -4
  131. reflex/components/radix/themes/layout/grid.pyi +5 -4
  132. reflex/components/radix/themes/layout/list.pyi +21 -16
  133. reflex/components/radix/themes/layout/section.pyi +5 -4
  134. reflex/components/radix/themes/layout/spacer.pyi +5 -4
  135. reflex/components/radix/themes/layout/stack.pyi +13 -10
  136. reflex/components/radix/themes/typography/blockquote.pyi +5 -4
  137. reflex/components/radix/themes/typography/code.pyi +5 -4
  138. reflex/components/radix/themes/typography/heading.pyi +5 -4
  139. reflex/components/radix/themes/typography/link.py +46 -11
  140. reflex/components/radix/themes/typography/link.pyi +311 -6
  141. reflex/components/radix/themes/typography/text.pyi +29 -22
  142. reflex/components/react_player/audio.pyi +5 -4
  143. reflex/components/react_player/react_player.pyi +5 -4
  144. reflex/components/react_player/video.pyi +5 -4
  145. reflex/components/recharts/cartesian.py +2 -1
  146. reflex/components/recharts/cartesian.pyi +65 -46
  147. reflex/components/recharts/charts.py +4 -2
  148. reflex/components/recharts/charts.pyi +36 -24
  149. reflex/components/recharts/general.pyi +24 -18
  150. reflex/components/recharts/polar.py +8 -4
  151. reflex/components/recharts/polar.pyi +16 -10
  152. reflex/components/recharts/recharts.pyi +9 -7
  153. reflex/components/sonner/toast.py +2 -2
  154. reflex/components/sonner/toast.pyi +10 -8
  155. reflex/config.py +3 -77
  156. reflex/constants/__init__.py +2 -2
  157. reflex/constants/base.py +28 -11
  158. reflex/constants/compiler.py +5 -3
  159. reflex/constants/event.py +1 -0
  160. reflex/constants/installer.py +22 -16
  161. reflex/constants/route.py +19 -7
  162. reflex/constants/state.py +2 -0
  163. reflex/custom_components/custom_components.py +0 -14
  164. reflex/environment.py +1 -1
  165. reflex/event.py +178 -81
  166. reflex/experimental/__init__.py +0 -30
  167. reflex/istate/proxy.py +5 -3
  168. reflex/page.py +0 -27
  169. reflex/plugins/__init__.py +3 -2
  170. reflex/plugins/base.py +5 -1
  171. reflex/plugins/shared_tailwind.py +158 -0
  172. reflex/plugins/sitemap.py +206 -0
  173. reflex/plugins/tailwind_v3.py +13 -106
  174. reflex/plugins/tailwind_v4.py +15 -108
  175. reflex/reflex.py +1 -0
  176. reflex/route.py +15 -21
  177. reflex/state.py +134 -140
  178. reflex/testing.py +58 -10
  179. reflex/utils/build.py +38 -82
  180. reflex/utils/exec.py +59 -161
  181. reflex/utils/export.py +2 -2
  182. reflex/utils/imports.py +0 -4
  183. reflex/utils/misc.py +28 -0
  184. reflex/utils/prerequisites.py +65 -62
  185. reflex/utils/processes.py +8 -7
  186. reflex/utils/pyi_generator.py +21 -9
  187. reflex/utils/serializers.py +14 -1
  188. reflex/utils/types.py +196 -61
  189. reflex/vars/__init__.py +2 -0
  190. reflex/vars/base.py +367 -134
  191. {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/METADATA +12 -5
  192. {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/RECORD +195 -202
  193. reflex/.templates/web/next.config.js +0 -7
  194. reflex/components/base/head.py +0 -20
  195. reflex/components/base/head.pyi +0 -116
  196. reflex/components/next/__init__.py +0 -10
  197. reflex/components/next/base.py +0 -7
  198. reflex/components/next/image.py +0 -117
  199. reflex/components/next/image.pyi +0 -94
  200. reflex/components/next/link.py +0 -20
  201. reflex/components/next/link.pyi +0 -67
  202. reflex/components/next/video.py +0 -38
  203. reflex/components/next/video.pyi +0 -68
  204. reflex/components/suneditor/__init__.py +0 -5
  205. reflex/components/suneditor/editor.py +0 -269
  206. reflex/components/suneditor/editor.pyi +0 -199
  207. reflex/experimental/layout.py +0 -254
  208. reflex/experimental/layout.pyi +0 -814
  209. {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/WHEEL +0 -0
  210. {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/entry_points.txt +0 -0
  211. {reflex-0.7.14a6.dist-info → reflex-0.8.0a2.dist-info}/licenses/LICENSE +0 -0
@@ -14,7 +14,7 @@ class Bun(SimpleNamespace):
14
14
  """Bun constants."""
15
15
 
16
16
  # The Bun version.
17
- VERSION = "1.2.15"
17
+ VERSION = "1.2.16"
18
18
 
19
19
  # Min Bun Version
20
20
  MIN_VERSION = "1.2.8"
@@ -63,7 +63,7 @@ class Node(SimpleNamespace):
63
63
  """Node/ NPM constants."""
64
64
 
65
65
  # The minimum required node version.
66
- MIN_VERSION = "18.18.0"
66
+ MIN_VERSION = "20.0.0"
67
67
 
68
68
  # Path of the node config file.
69
69
  CONFIG_PATH = ".npmrc"
@@ -74,13 +74,13 @@ fetch-retries=0
74
74
  """
75
75
 
76
76
 
77
- def _determine_nextjs_version() -> str:
78
- default_version = "15.3.2"
79
- if (version := os.getenv("NEXTJS_VERSION")) and version != default_version:
77
+ def _determine_react_router_version() -> str:
78
+ default_version = "7.6.2"
79
+ if (version := os.getenv("REACT_ROUTER_VERSION")) and version != default_version:
80
80
  from reflex.utils import console
81
81
 
82
82
  console.warn(
83
- f"You have requested next@{version} but the supported version is {default_version}, abandon all hope ye who enter here."
83
+ f"You have requested react-router@{version} but the supported version is {default_version}, abandon all hope ye who enter here."
84
84
  )
85
85
  return version
86
86
  return default_version
@@ -104,15 +104,16 @@ class PackageJson(SimpleNamespace):
104
104
  class Commands(SimpleNamespace):
105
105
  """The commands to define in package.json."""
106
106
 
107
- DEV = "next dev {flags}"
108
- EXPORT = "next build {flags}"
109
- EXPORT_SITEMAP = "next build {flags} && next-sitemap"
110
- PROD = "next start"
107
+ DEV = "react-router dev"
108
+ EXPORT = "react-router build"
109
+ PROD = "serve ./build/client"
111
110
 
112
111
  PATH = "package.json"
113
112
 
114
113
  _react_version = _determine_react_version()
115
114
 
115
+ _react_router_version = _determine_react_router_version()
116
+
116
117
  @classproperty
117
118
  @classmethod
118
119
  def DEPENDENCIES(cls) -> dict[str, str]:
@@ -122,25 +123,30 @@ class PackageJson(SimpleNamespace):
122
123
  A dictionary of dependencies with their versions.
123
124
  """
124
125
  return {
125
- "@emotion/react": "11.14.0",
126
126
  "axios": "1.9.0",
127
127
  "json5": "2.2.3",
128
- "next": _determine_nextjs_version(),
129
- "next-sitemap": "4.2.3",
130
- "next-themes": "0.4.6",
128
+ "react-router": cls._react_router_version,
129
+ "react-router-dom": cls._react_router_version,
130
+ "@react-router/node": cls._react_router_version,
131
+ "serve": "14.2.4",
131
132
  "react": cls._react_version,
132
133
  "react-dom": cls._react_version,
133
- "react-focus-lock": "2.13.6",
134
+ "isbot": "5.1.26",
134
135
  "socket.io-client": "4.8.1",
135
136
  "universal-cookie": "7.2.2",
136
137
  }
137
138
 
138
139
  DEV_DEPENDENCIES = {
140
+ "@emotion/react": "11.14.0",
139
141
  "autoprefixer": "10.4.21",
140
142
  "postcss": "8.5.4",
141
143
  "postcss-import": "16.1.0",
144
+ "@react-router/dev": _react_router_version,
145
+ "@react-router/fs-routes": _react_router_version,
146
+ "rolldown-vite": "6.3.19",
142
147
  }
143
148
  OVERRIDES = {
144
149
  # This should always match the `react` version in DEPENDENCIES for recharts compatibility.
145
- "react-is": _react_version
150
+ "react-is": _react_version,
151
+ "cookie": "1.0.2",
146
152
  }
reflex/constants/route.py CHANGED
@@ -36,13 +36,25 @@ ROUTER_DATA_INCLUDE = {RouteVar.PATH, RouteVar.ORIGIN, RouteVar.QUERY}
36
36
  class RouteRegex(SimpleNamespace):
37
37
  """Regex used for extracting route args in route."""
38
38
 
39
- ARG = re.compile(r"\[(?!\.)([^\[\]]+)\]")
40
- # group return the catchall pattern (i.e. "[[..slug]]")
41
- CATCHALL = re.compile(r"(\[?\[\.{3}(?![0-9]).*\]?\])")
42
- # group return the arg name (i.e. "slug")
43
- STRICT_CATCHALL = re.compile(r"\[\.{3}([a-zA-Z_][\w]*)\]")
44
- # group return the arg name (i.e. "slug") (optional arg can be empty)
45
- OPT_CATCHALL = re.compile(r"\[\[\.{3}([a-zA-Z_][\w]*)\]\]")
39
+ _DOT_DOT_DOT = r"\.\.\."
40
+ _OPENING_BRACKET = r"\["
41
+ _CLOSING_BRACKET = r"\]"
42
+ _ARG_NAME = r"[a-zA-Z_]\w*"
43
+
44
+ # match a single arg (i.e. "[slug]"), returns the name of the arg
45
+ ARG = re.compile(rf"{_OPENING_BRACKET}({_ARG_NAME}){_CLOSING_BRACKET}")
46
+ # match a single catch-all arg (i.e. "[...slug]" or "[[...slug]]"), returns the name of the arg
47
+ CATCHALL = re.compile(
48
+ rf"({_OPENING_BRACKET}?{_OPENING_BRACKET}{_DOT_DOT_DOT}[^[{_CLOSING_BRACKET}]*{_CLOSING_BRACKET}?{_CLOSING_BRACKET})"
49
+ )
50
+ # match a single non-optional catch-all arg (i.e. "[...slug]"), returns the name of the arg
51
+ STRICT_CATCHALL = re.compile(
52
+ rf"{_OPENING_BRACKET}{_DOT_DOT_DOT}({_ARG_NAME}){_CLOSING_BRACKET}"
53
+ )
54
+ # match a snigle optional catch-all arg (i.e. "[[...slug]]"), returns the name of the arg
55
+ OPT_CATCHALL = re.compile(
56
+ rf"{_OPENING_BRACKET * 2}{_DOT_DOT_DOT}({_ARG_NAME}){_CLOSING_BRACKET * 2}"
57
+ )
46
58
  SINGLE_SEGMENT = "__SINGLE_SEGMENT__"
47
59
  DOUBLE_SEGMENT = "__DOUBLE_SEGMENT__"
48
60
  SINGLE_CATCHALL_SEGMENT = "__SINGLE_CATCHALL_SEGMENT__"
reflex/constants/state.py CHANGED
@@ -13,3 +13,5 @@ class StateManagerMode(str, Enum):
13
13
 
14
14
  # Used for things like console_log, etc.
15
15
  FRONTEND_EVENT_STATE = "__reflex_internal_frontend_event_state"
16
+
17
+ FIELD_MARKER = "_rx_state_"
@@ -461,20 +461,6 @@ def build():
461
461
  _run_build()
462
462
 
463
463
 
464
- @custom_components_cli.command(name="publish", deprecated=True)
465
- def publish():
466
- """Publish a custom component. This command is deprecated and will be removed in future releases.
467
-
468
- Raises:
469
- Exit: If the publish command fails.
470
- """
471
- console.error(
472
- "The publish command is deprecated. You can use `reflex component build` followed by `twine upload` or a similar publishing command to publish your custom component."
473
- "\nIf you want to share your custom component with the Reflex community, please use `reflex component share`."
474
- )
475
- raise click.exceptions.Exit(code=1)
476
-
477
-
478
464
  def _collect_details_for_gallery():
479
465
  """Helper to collect details on the custom component to be included in the gallery.
480
466
 
reflex/environment.py CHANGED
@@ -475,7 +475,7 @@ class EnvironmentVariables:
475
475
  # Whether to use the system installed bun. If set to false, bun will be bundled with the app.
476
476
  REFLEX_USE_SYSTEM_BUN: EnvVar[bool] = env_var(False)
477
477
 
478
- # The working directory for the next.js commands.
478
+ # The working directory for the frontend directory.
479
479
  REFLEX_WEB_WORKDIR: EnvVar[Path] = env_var(Path(constants.Dirs.WEB))
480
480
 
481
481
  # The working directory for the states directory.