reflex 0.6.0__py3-none-any.whl → 0.6.0a1__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 (253) hide show
  1. reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +2 -2
  2. reflex/.templates/jinja/web/pages/_app.js.jinja2 +1 -1
  3. reflex/.templates/jinja/web/pages/utils.js.jinja2 +2 -2
  4. reflex/.templates/web/components/reflex/chakra_color_mode_provider.js +36 -0
  5. reflex/.templates/web/utils/state.js +1 -3
  6. reflex/__init__.py +2 -8
  7. reflex/__init__.pyi +1 -2
  8. reflex/app.py +2 -4
  9. reflex/app_module_for_backend.py +1 -1
  10. reflex/base.py +1 -1
  11. reflex/compiler/compiler.py +2 -2
  12. reflex/compiler/utils.py +3 -3
  13. reflex/components/base/app_wrap.py +2 -2
  14. reflex/components/base/app_wrap.pyi +27 -17
  15. reflex/components/base/bare.py +5 -4
  16. reflex/components/base/body.pyi +27 -17
  17. reflex/components/base/document.pyi +131 -81
  18. reflex/components/base/error_boundary.py +7 -6
  19. reflex/components/base/error_boundary.pyi +33 -20
  20. reflex/components/base/fragment.pyi +27 -17
  21. reflex/components/base/head.pyi +53 -33
  22. reflex/components/base/link.py +1 -1
  23. reflex/components/base/link.pyi +54 -33
  24. reflex/components/base/meta.pyi +105 -65
  25. reflex/components/base/script.py +2 -1
  26. reflex/components/base/script.pyi +38 -21
  27. reflex/components/component.py +47 -53
  28. reflex/components/core/banner.py +27 -23
  29. reflex/components/core/banner.pyi +171 -134
  30. reflex/components/core/client_side_routing.py +3 -2
  31. reflex/components/core/client_side_routing.pyi +54 -33
  32. reflex/components/core/clipboard.py +1 -2
  33. reflex/components/core/clipboard.pyi +33 -20
  34. reflex/components/core/cond.py +5 -5
  35. reflex/components/core/debounce.py +5 -5
  36. reflex/components/core/debounce.pyi +33 -20
  37. reflex/components/core/foreach.py +4 -3
  38. reflex/components/core/html.py +1 -1
  39. reflex/components/core/html.pyi +46 -35
  40. reflex/components/core/match.py +17 -17
  41. reflex/components/core/upload.py +23 -17
  42. reflex/components/core/upload.pyi +124 -78
  43. reflex/components/datadisplay/code.py +10 -9
  44. reflex/components/datadisplay/code.pyi +409 -299
  45. reflex/components/datadisplay/dataeditor.py +10 -8
  46. reflex/components/datadisplay/dataeditor.pyi +53 -40
  47. reflex/components/el/element.pyi +27 -17
  48. reflex/components/el/elements/base.py +1 -1
  49. reflex/components/el/elements/base.pyi +45 -34
  50. reflex/components/el/elements/forms.py +16 -16
  51. reflex/components/el/elements/forms.pyi +707 -554
  52. reflex/components/el/elements/inline.py +1 -1
  53. reflex/components/el/elements/inline.pyi +1218 -937
  54. reflex/components/el/elements/media.py +1 -1
  55. reflex/components/el/elements/media.pyi +997 -786
  56. reflex/components/el/elements/metadata.py +6 -3
  57. reflex/components/el/elements/metadata.pyi +242 -181
  58. reflex/components/el/elements/other.py +1 -1
  59. reflex/components/el/elements/other.pyi +306 -235
  60. reflex/components/el/elements/scripts.py +1 -1
  61. reflex/components/el/elements/scripts.pyi +140 -109
  62. reflex/components/el/elements/sectioning.py +2 -0
  63. reflex/components/el/elements/sectioning.pyi +647 -496
  64. reflex/components/el/elements/tables.py +1 -1
  65. reflex/components/el/elements/tables.pyi +452 -351
  66. reflex/components/el/elements/typography.py +1 -1
  67. reflex/components/el/elements/typography.pyi +657 -506
  68. reflex/components/gridjs/datatable.py +9 -6
  69. reflex/components/gridjs/datatable.pyi +56 -35
  70. reflex/components/lucide/icon.py +1 -1
  71. reflex/components/lucide/icon.pyi +54 -33
  72. reflex/components/markdown/markdown.py +31 -26
  73. reflex/components/markdown/markdown.pyi +37 -27
  74. reflex/components/moment/moment.py +12 -13
  75. reflex/components/moment/moment.pyi +35 -23
  76. reflex/components/next/base.pyi +27 -17
  77. reflex/components/next/image.py +1 -1
  78. reflex/components/next/image.pyi +37 -22
  79. reflex/components/next/link.py +1 -1
  80. reflex/components/next/link.pyi +28 -17
  81. reflex/components/next/video.py +1 -1
  82. reflex/components/next/video.pyi +28 -17
  83. reflex/components/plotly/plotly.py +13 -12
  84. reflex/components/plotly/plotly.pyi +54 -39
  85. reflex/components/props.py +1 -1
  86. reflex/components/radix/__init__.pyi +0 -1
  87. reflex/components/radix/primitives/__init__.pyi +0 -1
  88. reflex/components/radix/primitives/accordion.py +4 -4
  89. reflex/components/radix/primitives/accordion.pyi +495 -424
  90. reflex/components/radix/primitives/base.py +1 -1
  91. reflex/components/radix/primitives/base.pyi +54 -33
  92. reflex/components/radix/primitives/drawer.py +1 -1
  93. reflex/components/radix/primitives/drawer.pyi +273 -172
  94. reflex/components/radix/primitives/form.py +1 -1
  95. reflex/components/radix/primitives/form.pyi +364 -257
  96. reflex/components/radix/primitives/progress.py +1 -1
  97. reflex/components/radix/primitives/progress.pyi +282 -231
  98. reflex/components/radix/primitives/slider.py +1 -1
  99. reflex/components/radix/primitives/slider.pyi +138 -87
  100. reflex/components/radix/themes/base.py +24 -3
  101. reflex/components/radix/themes/base.pyi +250 -178
  102. reflex/components/radix/themes/color_mode.py +5 -5
  103. reflex/components/radix/themes/color_mode.pyi +220 -187
  104. reflex/components/radix/themes/components/alert_dialog.py +1 -1
  105. reflex/components/radix/themes/components/alert_dialog.pyi +207 -136
  106. reflex/components/radix/themes/components/aspect_ratio.py +1 -1
  107. reflex/components/radix/themes/components/aspect_ratio.pyi +28 -17
  108. reflex/components/radix/themes/components/avatar.py +1 -1
  109. reflex/components/radix/themes/components/avatar.pyi +81 -70
  110. reflex/components/radix/themes/components/badge.py +1 -1
  111. reflex/components/radix/themes/components/badge.pyi +99 -88
  112. reflex/components/radix/themes/components/button.py +1 -1
  113. reflex/components/radix/themes/components/button.pyi +109 -98
  114. reflex/components/radix/themes/components/callout.py +1 -1
  115. reflex/components/radix/themes/components/callout.pyi +373 -322
  116. reflex/components/radix/themes/components/card.py +1 -1
  117. reflex/components/radix/themes/components/card.pyi +49 -38
  118. reflex/components/radix/themes/components/checkbox.py +2 -1
  119. reflex/components/radix/themes/components/checkbox.pyi +245 -208
  120. reflex/components/radix/themes/components/checkbox_cards.py +1 -1
  121. reflex/components/radix/themes/components/checkbox_cards.pyi +115 -94
  122. reflex/components/radix/themes/components/checkbox_group.py +1 -1
  123. reflex/components/radix/themes/components/checkbox_group.pyi +107 -86
  124. reflex/components/radix/themes/components/context_menu.py +1 -1
  125. reflex/components/radix/themes/components/context_menu.pyi +319 -238
  126. reflex/components/radix/themes/components/data_list.py +1 -1
  127. reflex/components/radix/themes/components/data_list.pyi +171 -130
  128. reflex/components/radix/themes/components/dialog.py +1 -1
  129. reflex/components/radix/themes/components/dialog.pyi +210 -139
  130. reflex/components/radix/themes/components/dropdown_menu.py +1 -1
  131. reflex/components/radix/themes/components/dropdown_menu.pyi +332 -249
  132. reflex/components/radix/themes/components/hover_card.py +1 -1
  133. reflex/components/radix/themes/components/hover_card.pyi +131 -90
  134. reflex/components/radix/themes/components/icon_button.py +3 -2
  135. reflex/components/radix/themes/components/icon_button.pyi +109 -98
  136. reflex/components/radix/themes/components/inset.py +1 -1
  137. reflex/components/radix/themes/components/inset.pyi +58 -47
  138. reflex/components/radix/themes/components/popover.py +1 -1
  139. reflex/components/radix/themes/components/popover.pyi +136 -95
  140. reflex/components/radix/themes/components/progress.py +1 -1
  141. reflex/components/radix/themes/components/progress.pyi +82 -71
  142. reflex/components/radix/themes/components/radio.py +1 -1
  143. reflex/components/radix/themes/components/radio.pyi +80 -69
  144. reflex/components/radix/themes/components/radio_cards.py +1 -1
  145. reflex/components/radix/themes/components/radio_cards.pyi +119 -98
  146. reflex/components/radix/themes/components/radio_group.py +11 -8
  147. reflex/components/radix/themes/components/radio_group.pyi +271 -228
  148. reflex/components/radix/themes/components/scroll_area.py +1 -1
  149. reflex/components/radix/themes/components/scroll_area.pyi +32 -21
  150. reflex/components/radix/themes/components/segmented_control.py +1 -1
  151. reflex/components/radix/themes/components/segmented_control.pyi +113 -90
  152. reflex/components/radix/themes/components/select.py +3 -2
  153. reflex/components/radix/themes/components/select.pyi +471 -374
  154. reflex/components/radix/themes/components/separator.py +2 -1
  155. reflex/components/radix/themes/components/separator.pyi +80 -69
  156. reflex/components/radix/themes/components/skeleton.py +1 -1
  157. reflex/components/radix/themes/components/skeleton.pyi +34 -23
  158. reflex/components/radix/themes/components/slider.py +3 -2
  159. reflex/components/radix/themes/components/slider.pyi +88 -75
  160. reflex/components/radix/themes/components/spinner.py +1 -1
  161. reflex/components/radix/themes/components/spinner.pyi +30 -19
  162. reflex/components/radix/themes/components/switch.py +1 -1
  163. reflex/components/radix/themes/components/switch.pyi +84 -71
  164. reflex/components/radix/themes/components/table.py +1 -1
  165. reflex/components/radix/themes/components/table.pyi +332 -261
  166. reflex/components/radix/themes/components/tabs.py +1 -1
  167. reflex/components/radix/themes/components/tabs.pyi +194 -139
  168. reflex/components/radix/themes/components/text_area.py +1 -1
  169. reflex/components/radix/themes/components/text_area.pyi +111 -96
  170. reflex/components/radix/themes/components/text_field.py +1 -1
  171. reflex/components/radix/themes/components/text_field.pyi +286 -247
  172. reflex/components/radix/themes/components/tooltip.py +1 -1
  173. reflex/components/radix/themes/components/tooltip.pyi +37 -26
  174. reflex/components/radix/themes/layout/__init__.pyi +0 -1
  175. reflex/components/radix/themes/layout/base.py +1 -1
  176. reflex/components/radix/themes/layout/base.pyi +67 -56
  177. reflex/components/radix/themes/layout/box.pyi +45 -34
  178. reflex/components/radix/themes/layout/center.pyi +67 -56
  179. reflex/components/radix/themes/layout/container.py +2 -1
  180. reflex/components/radix/themes/layout/container.pyi +47 -36
  181. reflex/components/radix/themes/layout/flex.py +1 -1
  182. reflex/components/radix/themes/layout/flex.pyi +67 -56
  183. reflex/components/radix/themes/layout/grid.py +1 -1
  184. reflex/components/radix/themes/layout/grid.pyi +75 -64
  185. reflex/components/radix/themes/layout/list.py +6 -5
  186. reflex/components/radix/themes/layout/list.pyi +244 -193
  187. reflex/components/radix/themes/layout/section.py +2 -1
  188. reflex/components/radix/themes/layout/section.pyi +47 -36
  189. reflex/components/radix/themes/layout/spacer.pyi +67 -56
  190. reflex/components/radix/themes/layout/stack.py +1 -1
  191. reflex/components/radix/themes/layout/stack.pyi +159 -128
  192. reflex/components/radix/themes/typography/blockquote.py +1 -1
  193. reflex/components/radix/themes/typography/blockquote.pyi +100 -89
  194. reflex/components/radix/themes/typography/code.py +1 -1
  195. reflex/components/radix/themes/typography/code.pyi +101 -90
  196. reflex/components/radix/themes/typography/heading.py +1 -1
  197. reflex/components/radix/themes/typography/heading.pyi +107 -96
  198. reflex/components/radix/themes/typography/link.py +1 -1
  199. reflex/components/radix/themes/typography/link.pyi +113 -102
  200. reflex/components/radix/themes/typography/text.py +1 -1
  201. reflex/components/radix/themes/typography/text.pyi +572 -501
  202. reflex/components/react_player/audio.pyi +60 -33
  203. reflex/components/react_player/react_player.py +1 -1
  204. reflex/components/react_player/react_player.pyi +60 -33
  205. reflex/components/react_player/video.pyi +60 -33
  206. reflex/components/recharts/cartesian.py +3 -2
  207. reflex/components/recharts/cartesian.pyi +861 -678
  208. reflex/components/recharts/charts.py +5 -4
  209. reflex/components/recharts/charts.pyi +357 -252
  210. reflex/components/recharts/general.py +2 -1
  211. reflex/components/recharts/general.pyi +231 -180
  212. reflex/components/recharts/polar.py +5 -4
  213. reflex/components/recharts/polar.pyi +181 -144
  214. reflex/components/recharts/recharts.pyi +53 -33
  215. reflex/components/sonner/toast.py +17 -16
  216. reflex/components/sonner/toast.pyi +47 -36
  217. reflex/components/suneditor/editor.py +3 -2
  218. reflex/components/suneditor/editor.pyi +78 -55
  219. reflex/components/tags/cond_tag.py +4 -6
  220. reflex/components/tags/iter_tag.py +16 -28
  221. reflex/components/tags/match_tag.py +4 -6
  222. reflex/components/tags/tag.py +23 -40
  223. reflex/custom_components/custom_components.py +1 -3
  224. reflex/event.py +65 -113
  225. reflex/experimental/client_state.py +24 -25
  226. reflex/experimental/hooks.py +16 -16
  227. reflex/experimental/layout.py +5 -5
  228. reflex/experimental/layout.pyi +187 -136
  229. reflex/{vars → ivars}/__init__.py +2 -6
  230. reflex/{vars → ivars}/base.py +216 -599
  231. reflex/{vars → ivars}/function.py +19 -15
  232. reflex/{vars → ivars}/number.py +20 -41
  233. reflex/{vars → ivars}/object.py +30 -28
  234. reflex/{vars → ivars}/sequence.py +50 -53
  235. reflex/middleware/hydrate_middleware.py +0 -2
  236. reflex/middleware/middleware.py +3 -3
  237. reflex/state.py +82 -148
  238. reflex/style.py +22 -21
  239. reflex/utils/exceptions.py +0 -20
  240. reflex/utils/format.py +34 -54
  241. reflex/utils/imports.py +73 -16
  242. reflex/utils/prerequisites.py +15 -35
  243. reflex/utils/pyi_generator.py +8 -13
  244. reflex/utils/serializers.py +22 -12
  245. reflex/utils/telemetry.py +2 -3
  246. reflex/utils/types.py +5 -10
  247. reflex/vars.py +501 -0
  248. {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/METADATA +5 -4
  249. reflex-0.6.0a1.dist-info/RECORD +384 -0
  250. reflex-0.6.0.dist-info/RECORD +0 -382
  251. {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/LICENSE +0 -0
  252. {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/WHEEL +0 -0
  253. {reflex-0.6.0.dist-info → reflex-0.6.0a1.dist-info}/entry_points.txt +0 -0
@@ -8,11 +8,11 @@ version = "0.0.1"
8
8
  description = "Reflex custom component {{ module_name }}"
9
9
  readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
11
- requires-python = ">=3.9"
11
+ requires-python = ">=3.8"
12
12
  authors = [{ name = "", email = "YOUREMAIL@domain.com" }]
13
13
  keywords = ["reflex","reflex-custom-components"]
14
14
 
15
- dependencies = ["reflex>={{ reflex_version }}"]
15
+ dependencies = ["reflex>=0.4.2"]
16
16
 
17
17
  classifiers = ["Development Status :: 4 - Beta"]
18
18
 
@@ -27,7 +27,7 @@ function AppWrap({children}) {
27
27
 
28
28
  export default function MyApp({ Component, pageProps }) {
29
29
  return (
30
- <ThemeProvider defaultTheme={ defaultColorMode } attribute="class">
30
+ <ThemeProvider defaultTheme={ defaultColorMode } storageKey="chakra-ui-color-mode" attribute="class">
31
31
  <AppWrap>
32
32
  <StateProvider>
33
33
  <EventLoopProvider>
@@ -85,10 +85,10 @@
85
85
  {% macro render_match_tag(component) %}
86
86
  {
87
87
  (() => {
88
- switch (JSON.stringify({{ component.cond._js_expr }})) {
88
+ switch (JSON.stringify({{ component.cond._var_name }})) {
89
89
  {% for case in component.match_cases %}
90
90
  {% for condition in case[:-1] %}
91
- case JSON.stringify({{ condition._js_expr }}):
91
+ case JSON.stringify({{ condition._var_name }}):
92
92
  {% endfor %}
93
93
  return {{ case[-1] }};
94
94
  break;
@@ -0,0 +1,36 @@
1
+ import { useColorMode as chakraUseColorMode } from "@chakra-ui/react";
2
+ import { useTheme } from "next-themes";
3
+ import { useEffect, useState } from "react";
4
+ import { ColorModeContext, defaultColorMode } from "/utils/context.js";
5
+
6
+ export default function ChakraColorModeProvider({ children }) {
7
+ const { theme, resolvedTheme, setTheme } = useTheme();
8
+ const { colorMode, toggleColorMode } = chakraUseColorMode();
9
+ const [resolvedColorMode, setResolvedColorMode] = useState(colorMode);
10
+
11
+ useEffect(() => {
12
+ if (colorMode != resolvedTheme) {
13
+ toggleColorMode();
14
+ }
15
+ setResolvedColorMode(resolvedTheme);
16
+ }, [theme, resolvedTheme]);
17
+
18
+ const rawColorMode = colorMode;
19
+ const setColorMode = (mode) => {
20
+ const allowedModes = ["light", "dark", "system"];
21
+ if (!allowedModes.includes(mode)) {
22
+ console.error(
23
+ `Invalid color mode "${mode}". Defaulting to "${defaultColorMode}".`
24
+ );
25
+ mode = defaultColorMode;
26
+ }
27
+ setTheme(mode);
28
+ };
29
+ return (
30
+ <ColorModeContext.Provider
31
+ value={{ rawColorMode, resolvedColorMode, toggleColorMode, setColorMode }}
32
+ >
33
+ {children}
34
+ </ColorModeContext.Provider>
35
+ );
36
+ }
@@ -805,9 +805,7 @@ export const useEventLoop = (
805
805
  * @returns True if the value is truthy, false otherwise.
806
806
  */
807
807
  export const isTrue = (val) => {
808
- if (Array.isArray(val)) return val.length > 0;
809
- if (val === Object(val)) return Object.keys(val).length > 0;
810
- return Boolean(val);
808
+ return Array.isArray(val) ? val.length > 0 : !!val;
811
809
  };
812
810
 
813
811
  /**
reflex/__init__.py CHANGED
@@ -206,13 +206,6 @@ RADIX_PRIMITIVES_MAPPING: dict = {
206
206
  "components.radix.primitives.form": [
207
207
  "form",
208
208
  ],
209
- "components.radix.primitives.progress": [
210
- "progress",
211
- ],
212
- }
213
-
214
- RADIX_PRIMITIVES_SHORTCUT_MAPPING: dict = {
215
- k: v for k, v in RADIX_PRIMITIVES_MAPPING.items() if "progress" not in k
216
209
  }
217
210
 
218
211
  COMPONENTS_CORE_MAPPING: dict = {
@@ -255,7 +248,7 @@ RADIX_MAPPING: dict = {
255
248
  **RADIX_THEMES_COMPONENTS_MAPPING,
256
249
  **RADIX_THEMES_TYPOGRAPHY_MAPPING,
257
250
  **RADIX_THEMES_LAYOUT_MAPPING,
258
- **RADIX_PRIMITIVES_SHORTCUT_MAPPING,
251
+ **RADIX_PRIMITIVES_MAPPING,
259
252
  }
260
253
 
261
254
  _MAPPING: dict = {
@@ -345,6 +338,7 @@ _SUBMODULES: set[str] = {
345
338
  "testing",
346
339
  "utils",
347
340
  "vars",
341
+ "ivars",
348
342
  "config",
349
343
  "compiler",
350
344
  }
reflex/__init__.pyi CHANGED
@@ -12,6 +12,7 @@ from . import compiler as compiler
12
12
  from . import components as components
13
13
  from . import config as config
14
14
  from . import event as event
15
+ from . import ivars as ivars
15
16
  from . import model as model
16
17
  from . import style as style
17
18
  from . import testing as testing
@@ -131,7 +132,6 @@ from .components.radix.themes.layout.container import container as container
131
132
  from .components.radix.themes.layout.flex import flex as flex
132
133
  from .components.radix.themes.layout.grid import grid as grid
133
134
  from .components.radix.themes.layout.list import list_item as list_item
134
- from .components.radix.themes.layout.list import list_ns as list # noqa
135
135
  from .components.radix.themes.layout.list import ordered_list as ordered_list
136
136
  from .components.radix.themes.layout.list import unordered_list as unordered_list
137
137
  from .components.radix.themes.layout.section import section as section
@@ -197,7 +197,6 @@ RADIX_THEMES_COMPONENTS_MAPPING: dict
197
197
  RADIX_THEMES_LAYOUT_MAPPING: dict
198
198
  RADIX_THEMES_TYPOGRAPHY_MAPPING: dict
199
199
  RADIX_PRIMITIVES_MAPPING: dict
200
- RADIX_PRIMITIVES_SHORTCUT_MAPPING: dict
201
200
  COMPONENTS_CORE_MAPPING: dict
202
201
  COMPONENTS_BASE_MAPPING: dict
203
202
  RADIX_MAPPING: dict
reflex/app.py CHANGED
@@ -9,7 +9,6 @@ import copy
9
9
  import functools
10
10
  import inspect
11
11
  import io
12
- import json
13
12
  import multiprocessing
14
13
  import os
15
14
  import platform
@@ -824,7 +823,7 @@ class App(MiddlewareMixin, LifespanMixin, Base):
824
823
  for dep in deps:
825
824
  if dep not in state.vars and dep not in state.backend_vars:
826
825
  raise exceptions.VarDependencyError(
827
- f"ComputedVar {var._js_expr} on state {state.__name__} has an invalid dependency {dep}"
826
+ f"ComputedVar {var._var_name} on state {state.__name__} has an invalid dependency {dep}"
828
827
  )
829
828
 
830
829
  for substate in state.class_subclasses:
@@ -1532,9 +1531,8 @@ class EventNamespace(AsyncNamespace):
1532
1531
  sid: The Socket.IO session id.
1533
1532
  data: The event data.
1534
1533
  """
1535
- fields = json.loads(data)
1536
1534
  # Get the event.
1537
- event = Event(**{k: v for k, v in fields.items() if k != "handler"})
1535
+ event = Event.parse_raw(data)
1538
1536
 
1539
1537
  self.token_to_sid[event.token] = sid
1540
1538
  self.sid_to_token[sid] = event.token
@@ -15,7 +15,7 @@ if constants.CompileVars.APP != "app":
15
15
  telemetry.send("compile")
16
16
  app_module = get_app(reload=False)
17
17
  app = getattr(app_module, constants.CompileVars.APP)
18
- # For py3.9 compatibility when redis is used, we MUST add any decorator pages
18
+ # For py3.8 and py3.9 compatibility when redis is used, we MUST add any decorator pages
19
19
  # before compiling the app in a thread to avoid event loop error (REF-2172).
20
20
  app._apply_decorated_pages()
21
21
  compile_future = ThreadPoolExecutor(max_workers=1).submit(app._compile)
reflex/base.py CHANGED
@@ -110,7 +110,7 @@ class Base(BaseModel): # pyright: ignore [reportUnboundVariable]
110
110
  var: The variable to add a pydantic field for.
111
111
  default_value: The default value of the field
112
112
  """
113
- var_name = var._js_expr.split(".")[-1]
113
+ var_name = var._var_name.split(".")[-1]
114
114
  new_field = ModelField.infer(
115
115
  name=var_name,
116
116
  value=default_value,
@@ -17,12 +17,12 @@ from reflex.components.component import (
17
17
  StatefulComponent,
18
18
  )
19
19
  from reflex.config import get_config
20
+ from reflex.ivars.base import ImmutableVar, LiteralVar
20
21
  from reflex.state import BaseState
21
22
  from reflex.style import SYSTEM_COLOR_MODE
22
23
  from reflex.utils.exec import is_prod_mode
23
24
  from reflex.utils.imports import ImportVar
24
25
  from reflex.utils.prerequisites import get_web_dir
25
- from reflex.vars.base import LiteralVar, Var
26
26
 
27
27
 
28
28
  def _compile_document_root(root: Component) -> str:
@@ -320,7 +320,7 @@ def _compile_tailwind(
320
320
  def compile_document_root(
321
321
  head_components: list[Component],
322
322
  html_lang: Optional[str] = None,
323
- html_custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
323
+ html_custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
324
324
  ) -> tuple[str, str]:
325
325
  """Compile the document root.
326
326
 
reflex/compiler/utils.py CHANGED
@@ -7,8 +7,8 @@ from pathlib import Path
7
7
  from typing import Any, Callable, Dict, Optional, Type, Union
8
8
  from urllib.parse import urlparse
9
9
 
10
+ from reflex.ivars.base import ImmutableVar
10
11
  from reflex.utils.prerequisites import get_web_dir
11
- from reflex.vars.base import Var
12
12
 
13
13
  try:
14
14
  from pydantic.v1.fields import ModelField
@@ -268,7 +268,7 @@ def compile_custom_component(
268
268
  }
269
269
 
270
270
  # Concatenate the props.
271
- props = [prop._js_expr for prop in component.get_prop_vars()]
271
+ props = [prop._var_name for prop in component.get_prop_vars()]
272
272
 
273
273
  # Compile the component.
274
274
  return (
@@ -286,7 +286,7 @@ def compile_custom_component(
286
286
  def create_document_root(
287
287
  head_components: list[Component] | None = None,
288
288
  html_lang: Optional[str] = None,
289
- html_custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
289
+ html_custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
290
290
  ) -> Component:
291
291
  """Create the document root.
292
292
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  from reflex.components.base.fragment import Fragment
4
4
  from reflex.components.component import Component
5
- from reflex.vars.base import Var
5
+ from reflex.ivars.base import ImmutableVar
6
6
 
7
7
 
8
8
  class AppWrap(Fragment):
@@ -15,4 +15,4 @@ class AppWrap(Fragment):
15
15
  Returns:
16
16
  A new AppWrap component containing {children}.
17
17
  """
18
- return super().create(Var(_js_expr="children"))
18
+ return super().create(ImmutableVar.create("children"))
@@ -7,8 +7,8 @@ from typing import Any, Callable, Dict, Optional, Union, overload
7
7
 
8
8
  from reflex.components.base.fragment import Fragment
9
9
  from reflex.event import EventHandler, EventSpec
10
+ from reflex.ivars.base import ImmutableVar
10
11
  from reflex.style import Style
11
- from reflex.vars.base import Var
12
12
 
13
13
  class AppWrap(Fragment):
14
14
  @overload
@@ -21,41 +21,51 @@ class AppWrap(Fragment):
21
21
  id: Optional[Any] = None,
22
22
  class_name: Optional[Any] = None,
23
23
  autofocus: Optional[bool] = None,
24
- custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
25
- on_blur: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
26
- on_click: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
24
+ custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
25
+ on_blur: Optional[
26
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
27
+ ] = None,
28
+ on_click: Optional[
29
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
30
+ ] = None,
27
31
  on_context_menu: Optional[
28
- Union[EventHandler, EventSpec, list, Callable, Var]
32
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
29
33
  ] = None,
30
34
  on_double_click: Optional[
31
- Union[EventHandler, EventSpec, list, Callable, Var]
35
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
36
+ ] = None,
37
+ on_focus: Optional[
38
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
39
+ ] = None,
40
+ on_mount: Optional[
41
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
32
42
  ] = None,
33
- on_focus: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
34
- on_mount: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
35
43
  on_mouse_down: Optional[
36
- Union[EventHandler, EventSpec, list, Callable, Var]
44
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
37
45
  ] = None,
38
46
  on_mouse_enter: Optional[
39
- Union[EventHandler, EventSpec, list, Callable, Var]
47
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
40
48
  ] = None,
41
49
  on_mouse_leave: Optional[
42
- Union[EventHandler, EventSpec, list, Callable, Var]
50
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
43
51
  ] = None,
44
52
  on_mouse_move: Optional[
45
- Union[EventHandler, EventSpec, list, Callable, Var]
53
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
46
54
  ] = None,
47
55
  on_mouse_out: Optional[
48
- Union[EventHandler, EventSpec, list, Callable, Var]
56
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
49
57
  ] = None,
50
58
  on_mouse_over: Optional[
51
- Union[EventHandler, EventSpec, list, Callable, Var]
59
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
52
60
  ] = None,
53
61
  on_mouse_up: Optional[
54
- Union[EventHandler, EventSpec, list, Callable, Var]
62
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
63
+ ] = None,
64
+ on_scroll: Optional[
65
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
55
66
  ] = None,
56
- on_scroll: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
57
67
  on_unmount: Optional[
58
- Union[EventHandler, EventSpec, list, Callable, Var]
68
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
59
69
  ] = None,
60
70
  **props,
61
71
  ) -> "AppWrap":
@@ -7,7 +7,8 @@ from typing import Any, Iterator
7
7
  from reflex.components.component import Component
8
8
  from reflex.components.tags import Tag
9
9
  from reflex.components.tags.tagless import Tagless
10
- from reflex.vars.base import Var
10
+ from reflex.ivars.base import ImmutableVar
11
+ from reflex.vars import Var
11
12
 
12
13
 
13
14
  class Bare(Component):
@@ -25,18 +26,18 @@ class Bare(Component):
25
26
  Returns:
26
27
  The component.
27
28
  """
28
- if isinstance(contents, Var):
29
+ if isinstance(contents, ImmutableVar):
29
30
  return cls(contents=contents)
30
31
  else:
31
32
  contents = str(contents) if contents is not None else ""
32
33
  return cls(contents=contents) # type: ignore
33
34
 
34
35
  def _render(self) -> Tag:
35
- if isinstance(self.contents, Var):
36
+ if isinstance(self.contents, ImmutableVar):
36
37
  return Tagless(contents=f"{{{str(self.contents)}}}")
37
38
  return Tagless(contents=str(self.contents))
38
39
 
39
- def _get_vars(self, include_children: bool = False) -> Iterator[Var]:
40
+ def _get_vars(self, include_children: bool = False) -> Iterator[ImmutableVar]:
40
41
  """Walk all Vars used in this component.
41
42
 
42
43
  Args:
@@ -7,8 +7,8 @@ from typing import Any, Callable, Dict, Optional, Union, overload
7
7
 
8
8
  from reflex.components.component import Component
9
9
  from reflex.event import EventHandler, EventSpec
10
+ from reflex.ivars.base import ImmutableVar
10
11
  from reflex.style import Style
11
- from reflex.vars.base import Var
12
12
 
13
13
  class Body(Component):
14
14
  @overload
@@ -21,41 +21,51 @@ class Body(Component):
21
21
  id: Optional[Any] = None,
22
22
  class_name: Optional[Any] = None,
23
23
  autofocus: Optional[bool] = None,
24
- custom_attrs: Optional[Dict[str, Union[Var, str]]] = None,
25
- on_blur: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
26
- on_click: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
24
+ custom_attrs: Optional[Dict[str, Union[ImmutableVar, str]]] = None,
25
+ on_blur: Optional[
26
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
27
+ ] = None,
28
+ on_click: Optional[
29
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
30
+ ] = None,
27
31
  on_context_menu: Optional[
28
- Union[EventHandler, EventSpec, list, Callable, Var]
32
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
29
33
  ] = None,
30
34
  on_double_click: Optional[
31
- Union[EventHandler, EventSpec, list, Callable, Var]
35
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
36
+ ] = None,
37
+ on_focus: Optional[
38
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
39
+ ] = None,
40
+ on_mount: Optional[
41
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
32
42
  ] = None,
33
- on_focus: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
34
- on_mount: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
35
43
  on_mouse_down: Optional[
36
- Union[EventHandler, EventSpec, list, Callable, Var]
44
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
37
45
  ] = None,
38
46
  on_mouse_enter: Optional[
39
- Union[EventHandler, EventSpec, list, Callable, Var]
47
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
40
48
  ] = None,
41
49
  on_mouse_leave: Optional[
42
- Union[EventHandler, EventSpec, list, Callable, Var]
50
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
43
51
  ] = None,
44
52
  on_mouse_move: Optional[
45
- Union[EventHandler, EventSpec, list, Callable, Var]
53
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
46
54
  ] = None,
47
55
  on_mouse_out: Optional[
48
- Union[EventHandler, EventSpec, list, Callable, Var]
56
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
49
57
  ] = None,
50
58
  on_mouse_over: Optional[
51
- Union[EventHandler, EventSpec, list, Callable, Var]
59
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
52
60
  ] = None,
53
61
  on_mouse_up: Optional[
54
- Union[EventHandler, EventSpec, list, Callable, Var]
62
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
63
+ ] = None,
64
+ on_scroll: Optional[
65
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
55
66
  ] = None,
56
- on_scroll: Optional[Union[EventHandler, EventSpec, list, Callable, Var]] = None,
57
67
  on_unmount: Optional[
58
- Union[EventHandler, EventSpec, list, Callable, Var]
68
+ Union[EventHandler, EventSpec, list, Callable, ImmutableVar]
59
69
  ] = None,
60
70
  **props,
61
71
  ) -> "Body":