reflex 0.6.4a2__py3-none-any.whl → 0.6.5__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 (228) hide show
  1. reflex/.templates/jinja/web/pages/custom_component.js.jinja2 +0 -14
  2. reflex/.templates/jinja/web/pages/utils.js.jinja2 +4 -8
  3. reflex/.templates/web/components/shiki/code.js +16 -11
  4. reflex/.templates/web/utils/state.js +29 -21
  5. reflex/__init__.py +4 -0
  6. reflex/__init__.pyi +4 -0
  7. reflex/app.py +148 -154
  8. reflex/app_mixins/lifespan.py +5 -1
  9. reflex/app_mixins/middleware.py +3 -1
  10. reflex/app_mixins/mixin.py +3 -2
  11. reflex/base.py +2 -4
  12. reflex/compiler/compiler.py +111 -37
  13. reflex/components/base/app_wrap.pyi +17 -17
  14. reflex/components/base/bare.py +72 -3
  15. reflex/components/base/body.pyi +17 -17
  16. reflex/components/base/document.pyi +81 -81
  17. reflex/components/base/error_boundary.pyi +25 -18
  18. reflex/components/base/fragment.pyi +17 -17
  19. reflex/components/base/head.pyi +33 -33
  20. reflex/components/base/link.pyi +33 -33
  21. reflex/components/base/meta.pyi +65 -65
  22. reflex/components/base/script.py +4 -4
  23. reflex/components/base/script.pyi +23 -20
  24. reflex/components/component.py +250 -31
  25. reflex/components/core/banner.py +1 -1
  26. reflex/components/core/banner.pyi +81 -81
  27. reflex/components/core/client_side_routing.pyi +33 -33
  28. reflex/components/core/clipboard.py +2 -2
  29. reflex/components/core/clipboard.pyi +24 -18
  30. reflex/components/core/debounce.py +2 -2
  31. reflex/components/core/debounce.pyi +18 -18
  32. reflex/components/core/html.pyi +17 -17
  33. reflex/components/core/upload.py +90 -28
  34. reflex/components/core/upload.pyi +128 -72
  35. reflex/components/datadisplay/code.py +55 -40
  36. reflex/components/datadisplay/code.pyi +46 -44
  37. reflex/components/datadisplay/dataeditor.py +21 -20
  38. reflex/components/datadisplay/dataeditor.pyi +103 -35
  39. reflex/components/datadisplay/shiki_code_block.py +60 -27
  40. reflex/components/datadisplay/shiki_code_block.pyi +86 -65
  41. reflex/components/dynamic.py +9 -5
  42. reflex/components/el/element.pyi +17 -17
  43. reflex/components/el/elements/base.pyi +17 -17
  44. reflex/components/el/elements/forms.py +12 -3
  45. reflex/components/el/elements/forms.pyi +293 -233
  46. reflex/components/el/elements/inline.pyi +449 -449
  47. reflex/components/el/elements/media.pyi +401 -401
  48. reflex/components/el/elements/metadata.pyi +97 -97
  49. reflex/components/el/elements/other.pyi +113 -113
  50. reflex/components/el/elements/scripts.pyi +49 -49
  51. reflex/components/el/elements/sectioning.pyi +241 -241
  52. reflex/components/el/elements/tables.pyi +161 -161
  53. reflex/components/el/elements/typography.pyi +241 -241
  54. reflex/components/gridjs/datatable.pyi +33 -33
  55. reflex/components/lucide/icon.py +1 -1
  56. reflex/components/lucide/icon.pyi +33 -33
  57. reflex/components/markdown/markdown.py +180 -49
  58. reflex/components/markdown/markdown.pyi +36 -19
  59. reflex/components/moment/moment.py +17 -21
  60. reflex/components/moment/moment.pyi +26 -21
  61. reflex/components/next/base.pyi +17 -17
  62. reflex/components/next/image.py +3 -3
  63. reflex/components/next/image.pyi +21 -19
  64. reflex/components/next/link.pyi +17 -17
  65. reflex/components/next/video.pyi +17 -17
  66. reflex/components/plotly/plotly.py +79 -78
  67. reflex/components/plotly/plotly.pyi +91 -41
  68. reflex/components/props.py +34 -0
  69. reflex/components/radix/primitives/accordion.py +15 -8
  70. reflex/components/radix/primitives/accordion.pyi +121 -118
  71. reflex/components/radix/primitives/base.pyi +33 -33
  72. reflex/components/radix/primitives/drawer.py +41 -20
  73. reflex/components/radix/primitives/drawer.pyi +279 -190
  74. reflex/components/radix/primitives/form.py +2 -2
  75. reflex/components/radix/primitives/form.pyi +200 -167
  76. reflex/components/radix/primitives/progress.pyi +81 -81
  77. reflex/components/radix/primitives/slider.pyi +89 -83
  78. reflex/components/radix/themes/base.py +30 -1
  79. reflex/components/radix/themes/base.pyi +286 -113
  80. reflex/components/radix/themes/color_mode.py +17 -9
  81. reflex/components/radix/themes/color_mode.pyi +68 -56
  82. reflex/components/radix/themes/components/alert_dialog.py +8 -5
  83. reflex/components/radix/themes/components/alert_dialog.pyi +125 -117
  84. reflex/components/radix/themes/components/aspect_ratio.pyi +17 -17
  85. reflex/components/radix/themes/components/avatar.py +1 -5
  86. reflex/components/radix/themes/components/avatar.pyi +17 -17
  87. reflex/components/radix/themes/components/badge.py +1 -5
  88. reflex/components/radix/themes/components/badge.pyi +17 -17
  89. reflex/components/radix/themes/components/button.pyi +18 -21
  90. reflex/components/radix/themes/components/callout.py +1 -4
  91. reflex/components/radix/themes/components/callout.pyi +81 -81
  92. reflex/components/radix/themes/components/card.py +1 -3
  93. reflex/components/radix/themes/components/card.pyi +17 -17
  94. reflex/components/radix/themes/components/checkbox.py +4 -8
  95. reflex/components/radix/themes/components/checkbox.pyi +61 -52
  96. reflex/components/radix/themes/components/checkbox_cards.pyi +33 -33
  97. reflex/components/radix/themes/components/checkbox_group.pyi +33 -33
  98. reflex/components/radix/themes/components/context_menu.py +121 -28
  99. reflex/components/radix/themes/components/context_menu.pyi +250 -147
  100. reflex/components/radix/themes/components/data_list.pyi +65 -65
  101. reflex/components/radix/themes/components/dialog.py +11 -11
  102. reflex/components/radix/themes/components/dialog.pyi +135 -120
  103. reflex/components/radix/themes/components/dropdown_menu.py +14 -25
  104. reflex/components/radix/themes/components/dropdown_menu.pyi +157 -145
  105. reflex/components/radix/themes/components/hover_card.py +19 -7
  106. reflex/components/radix/themes/components/hover_card.pyi +102 -67
  107. reflex/components/radix/themes/components/icon_button.pyi +18 -21
  108. reflex/components/radix/themes/components/inset.py +1 -3
  109. reflex/components/radix/themes/components/inset.pyi +17 -17
  110. reflex/components/radix/themes/components/popover.py +22 -13
  111. reflex/components/radix/themes/components/popover.pyi +98 -72
  112. reflex/components/radix/themes/components/progress.pyi +17 -17
  113. reflex/components/radix/themes/components/radio.pyi +17 -17
  114. reflex/components/radix/themes/components/radio_cards.py +2 -2
  115. reflex/components/radix/themes/components/radio_cards.pyi +37 -34
  116. reflex/components/radix/themes/components/radio_group.py +3 -7
  117. reflex/components/radix/themes/components/radio_group.pyi +69 -66
  118. reflex/components/radix/themes/components/scroll_area.py +1 -3
  119. reflex/components/radix/themes/components/scroll_area.pyi +17 -17
  120. reflex/components/radix/themes/components/segmented_control.pyi +37 -34
  121. reflex/components/radix/themes/components/select.py +7 -11
  122. reflex/components/radix/themes/components/select.pyi +175 -154
  123. reflex/components/radix/themes/components/separator.py +1 -4
  124. reflex/components/radix/themes/components/separator.pyi +17 -17
  125. reflex/components/radix/themes/components/skeleton.pyi +17 -17
  126. reflex/components/radix/themes/components/slider.py +12 -21
  127. reflex/components/radix/themes/components/slider.pyi +47 -25
  128. reflex/components/radix/themes/components/spinner.py +1 -4
  129. reflex/components/radix/themes/components/spinner.pyi +17 -17
  130. reflex/components/radix/themes/components/switch.py +3 -6
  131. reflex/components/radix/themes/components/switch.pyi +21 -18
  132. reflex/components/radix/themes/components/table.py +21 -5
  133. reflex/components/radix/themes/components/table.pyi +392 -116
  134. reflex/components/radix/themes/components/tabs.py +3 -6
  135. reflex/components/radix/themes/components/tabs.pyi +89 -83
  136. reflex/components/radix/themes/components/text_area.py +1 -5
  137. reflex/components/radix/themes/components/text_area.pyi +43 -20
  138. reflex/components/radix/themes/components/text_field.py +1 -5
  139. reflex/components/radix/themes/components/text_field.pyi +101 -55
  140. reflex/components/radix/themes/components/tooltip.py +5 -7
  141. reflex/components/radix/themes/components/tooltip.pyi +25 -22
  142. reflex/components/radix/themes/layout/base.py +2 -27
  143. reflex/components/radix/themes/layout/base.pyi +82 -82
  144. reflex/components/radix/themes/layout/box.pyi +17 -17
  145. reflex/components/radix/themes/layout/center.pyi +17 -17
  146. reflex/components/radix/themes/layout/container.pyi +17 -17
  147. reflex/components/radix/themes/layout/flex.py +1 -6
  148. reflex/components/radix/themes/layout/flex.pyi +17 -17
  149. reflex/components/radix/themes/layout/grid.py +1 -6
  150. reflex/components/radix/themes/layout/grid.pyi +17 -17
  151. reflex/components/radix/themes/layout/list.py +20 -15
  152. reflex/components/radix/themes/layout/list.pyi +175 -92
  153. reflex/components/radix/themes/layout/section.pyi +17 -17
  154. reflex/components/radix/themes/layout/spacer.pyi +17 -17
  155. reflex/components/radix/themes/layout/stack.py +6 -6
  156. reflex/components/radix/themes/layout/stack.pyi +91 -62
  157. reflex/components/radix/themes/typography/blockquote.py +2 -8
  158. reflex/components/radix/themes/typography/blockquote.pyi +17 -17
  159. reflex/components/radix/themes/typography/code.py +4 -10
  160. reflex/components/radix/themes/typography/code.pyi +19 -18
  161. reflex/components/radix/themes/typography/heading.py +4 -11
  162. reflex/components/radix/themes/typography/heading.pyi +19 -18
  163. reflex/components/radix/themes/typography/link.py +4 -10
  164. reflex/components/radix/themes/typography/link.pyi +19 -18
  165. reflex/components/radix/themes/typography/text.py +4 -11
  166. reflex/components/radix/themes/typography/text.pyi +115 -114
  167. reflex/components/react_player/audio.pyi +58 -33
  168. reflex/components/react_player/react_player.py +17 -17
  169. reflex/components/react_player/react_player.pyi +55 -33
  170. reflex/components/react_player/video.pyi +58 -33
  171. reflex/components/recharts/cartesian.py +45 -45
  172. reflex/components/recharts/cartesian.pyi +389 -304
  173. reflex/components/recharts/charts.py +22 -22
  174. reflex/components/recharts/charts.pyi +226 -179
  175. reflex/components/recharts/general.py +26 -27
  176. reflex/components/recharts/general.pyi +106 -99
  177. reflex/components/recharts/polar.py +33 -33
  178. reflex/components/recharts/polar.pyi +70 -64
  179. reflex/components/recharts/recharts.pyi +33 -33
  180. reflex/components/sonner/toast.py +9 -36
  181. reflex/components/sonner/toast.pyi +20 -24
  182. reflex/components/suneditor/editor.py +8 -8
  183. reflex/components/suneditor/editor.pyi +50 -25
  184. reflex/components/tags/iter_tag.py +1 -10
  185. reflex/components/tags/tag.py +1 -4
  186. reflex/config.py +252 -41
  187. reflex/constants/__init__.py +4 -16
  188. reflex/constants/base.py +7 -14
  189. reflex/constants/colors.py +0 -1
  190. reflex/constants/installer.py +12 -7
  191. reflex/constants/state.py +4 -0
  192. reflex/custom_components/custom_components.py +6 -6
  193. reflex/event.py +486 -241
  194. reflex/experimental/client_state.py +9 -9
  195. reflex/experimental/layout.py +2 -2
  196. reflex/experimental/layout.pyi +95 -87
  197. reflex/experimental/misc.py +1 -1
  198. reflex/istate/__init__.py +1 -0
  199. reflex/istate/proxy.py +33 -0
  200. reflex/istate/wrappers.py +27 -0
  201. reflex/model.py +7 -7
  202. reflex/page.py +2 -1
  203. reflex/reflex.py +142 -8
  204. reflex/state.py +133 -46
  205. reflex/testing.py +9 -7
  206. reflex/utils/console.py +0 -1
  207. reflex/utils/exceptions.py +31 -3
  208. reflex/utils/exec.py +33 -14
  209. reflex/utils/format.py +15 -12
  210. reflex/utils/net.py +1 -1
  211. reflex/utils/path_ops.py +2 -2
  212. reflex/utils/prerequisites.py +82 -46
  213. reflex/utils/pyi_generator.py +63 -20
  214. reflex/utils/registry.py +1 -1
  215. reflex/utils/serializers.py +75 -36
  216. reflex/utils/telemetry.py +3 -2
  217. reflex/utils/types.py +125 -10
  218. reflex/vars/base.py +131 -119
  219. reflex/vars/function.py +59 -12
  220. reflex/vars/number.py +3 -1
  221. reflex/vars/object.py +30 -24
  222. reflex/vars/sequence.py +7 -7
  223. {reflex-0.6.4a2.dist-info → reflex-0.6.5.dist-info}/METADATA +3 -3
  224. reflex-0.6.5.dist-info/RECORD +394 -0
  225. reflex-0.6.4a2.dist-info/RECORD +0 -391
  226. {reflex-0.6.4a2.dist-info → reflex-0.6.5.dist-info}/LICENSE +0 -0
  227. {reflex-0.6.4a2.dist-info → reflex-0.6.5.dist-info}/WHEEL +0 -0
  228. {reflex-0.6.4a2.dist-info → reflex-0.6.5.dist-info}/entry_points.txt +0 -0
@@ -8,20 +8,6 @@
8
8
  {% endfor %}
9
9
 
10
10
  export const {{component.name}} = memo(({ {{-component.props|join(", ")-}} }) => {
11
- {% if component.name == "CodeBlock" and "language" in component.props %}
12
- if (language) {
13
- (async () => {
14
- try {
15
- const module = await import(`react-syntax-highlighter/dist/cjs/languages/prism/${language}`);
16
- SyntaxHighlighter.registerLanguage(language, module.default);
17
- } catch (error) {
18
- console.error(`Error importing language module for ${language}:`, error);
19
- }
20
- })();
21
-
22
-
23
- }
24
- {% endif %}
25
11
  {% for hook in component.hooks %}
26
12
  {{ hook }}
27
13
  {% endfor %}
@@ -36,14 +36,10 @@
36
36
  {# component: component dictionary #}
37
37
  {% macro render_tag(component) %}
38
38
  <{{component.name}} {{- render_props(component.props) }}>
39
- {%- if component.args is not none -%}
40
- {{- render_arg_content(component) }}
41
- {%- else -%}
42
- {{ component.contents }}
43
- {% for child in component.children %}
44
- {{ render(child) }}
45
- {% endfor %}
46
- {%- endif -%}
39
+ {{ component.contents }}
40
+ {% for child in component.children %}
41
+ {{ render(child) }}
42
+ {% endfor %}
47
43
  </{{component.name}}>
48
44
  {%- endmacro %}
49
45
 
@@ -1,26 +1,31 @@
1
1
  import { useEffect, useState } from "react"
2
2
  import { codeToHtml} from "shiki"
3
3
 
4
- export function Code ({code, theme, language, transformers, ...divProps}) {
4
+ /**
5
+ * Code component that uses Shiki to convert code to HTML and render it.
6
+ *
7
+ * @param code - The code to be highlighted.
8
+ * @param theme - The theme to be used for highlighting.
9
+ * @param language - The language of the code.
10
+ * @param transformers - The transformers to be applied to the code.
11
+ * @param decorations - The decorations to be applied to the code.
12
+ * @param divProps - Additional properties to be passed to the div element.
13
+ * @returns The rendered code block.
14
+ */
15
+ export function Code ({code, theme, language, transformers, decorations, ...divProps}) {
5
16
  const [codeResult, setCodeResult] = useState("")
6
17
  useEffect(() => {
7
18
  async function fetchCode() {
8
- let final_code;
9
-
10
- if (Array.isArray(code)) {
11
- final_code = code[0];
12
- } else {
13
- final_code = code;
14
- }
15
- const result = await codeToHtml(final_code, {
19
+ const result = await codeToHtml(code, {
16
20
  lang: language,
17
21
  theme,
18
- transformers
22
+ transformers,
23
+ decorations
19
24
  });
20
25
  setCodeResult(result);
21
26
  }
22
27
  fetchCode();
23
- }, [code, language, theme, transformers]
28
+ }, [code, language, theme, transformers, decorations]
24
29
 
25
30
  )
26
31
  return (
@@ -15,7 +15,6 @@ import {
15
15
  } from "$/utils/context.js";
16
16
  import debounce from "$/utils/helpers/debounce";
17
17
  import throttle from "$/utils/helpers/throttle";
18
- import * as Babel from "@babel/standalone";
19
18
 
20
19
  // Endpoint URLs.
21
20
  const EVENTURL = env.EVENT;
@@ -139,8 +138,7 @@ export const evalReactComponent = async (component) => {
139
138
  if (!window.React && window.__reflex) {
140
139
  window.React = window.__reflex.react;
141
140
  }
142
- const output = Babel.transform(component, { presets: ["react"] }).code;
143
- const encodedJs = encodeURIComponent(output);
141
+ const encodedJs = encodeURIComponent(component);
144
142
  const dataUri = "data:text/javascript;charset=utf-8," + encodedJs;
145
143
  const module = await eval(`import(dataUri)`);
146
144
  return module.default;
@@ -180,11 +178,6 @@ export const applyEvent = async (event, socket) => {
180
178
  return false;
181
179
  }
182
180
 
183
- if (event.name == "_console") {
184
- console.log(event.payload.message);
185
- return false;
186
- }
187
-
188
181
  if (event.name == "_remove_cookie") {
189
182
  cookies.remove(event.payload.key, { ...event.payload.options });
190
183
  queueEventIfSocketExists(initialEvents(), socket);
@@ -215,12 +208,6 @@ export const applyEvent = async (event, socket) => {
215
208
  return false;
216
209
  }
217
210
 
218
- if (event.name == "_set_clipboard") {
219
- const content = event.payload.content;
220
- navigator.clipboard.writeText(content);
221
- return false;
222
- }
223
-
224
211
  if (event.name == "_download") {
225
212
  const a = document.createElement("a");
226
213
  a.hidden = true;
@@ -235,11 +222,6 @@ export const applyEvent = async (event, socket) => {
235
222
  return false;
236
223
  }
237
224
 
238
- if (event.name == "_alert") {
239
- alert(event.payload.message);
240
- return false;
241
- }
242
-
243
225
  if (event.name == "_set_focus") {
244
226
  const ref =
245
227
  event.payload.ref in refs ? refs[event.payload.ref] : event.payload.ref;
@@ -256,9 +238,35 @@ export const applyEvent = async (event, socket) => {
256
238
  return false;
257
239
  }
258
240
 
259
- if (event.name == "_call_script") {
241
+ if (
242
+ event.name == "_call_function" &&
243
+ typeof event.payload.function !== "string"
244
+ ) {
245
+ try {
246
+ const eval_result = event.payload.function();
247
+ if (event.payload.callback) {
248
+ if (!!eval_result && typeof eval_result.then === "function") {
249
+ event.payload.callback(await eval_result);
250
+ } else {
251
+ event.payload.callback(eval_result);
252
+ }
253
+ }
254
+ } catch (e) {
255
+ console.log("_call_function", e);
256
+ if (window && window?.onerror) {
257
+ window.onerror(e.message, null, null, null, e);
258
+ }
259
+ }
260
+ return false;
261
+ }
262
+
263
+ if (event.name == "_call_script" || event.name == "_call_function") {
260
264
  try {
261
- const eval_result = eval(event.payload.javascript_code);
265
+ const eval_result =
266
+ event.name == "_call_script"
267
+ ? eval(event.payload.javascript_code)
268
+ : eval(event.payload.function)();
269
+
262
270
  if (event.payload.callback) {
263
271
  if (!!eval_result && typeof eval_result.then === "function") {
264
272
  eval(event.payload.callback)(await eval_result);
reflex/__init__.py CHANGED
@@ -303,10 +303,13 @@ _MAPPING: dict = {
303
303
  "EventHandler",
304
304
  "background",
305
305
  "call_script",
306
+ "call_function",
307
+ "run_script",
306
308
  "clear_local_storage",
307
309
  "clear_session_storage",
308
310
  "console_log",
309
311
  "download",
312
+ "noop",
310
313
  "prevent_default",
311
314
  "redirect",
312
315
  "remove_cookie",
@@ -333,6 +336,7 @@ _MAPPING: dict = {
333
336
  "State",
334
337
  "dynamic",
335
338
  ],
339
+ "istate.wrappers": ["get_state"],
336
340
  "style": ["Style", "toggle_color_mode"],
337
341
  "utils.imports": ["ImportVar"],
338
342
  "utils.serializers": ["serializer"],
reflex/__init__.pyi CHANGED
@@ -155,17 +155,20 @@ from .constants import Env as Env
155
155
  from .event import EventChain as EventChain
156
156
  from .event import EventHandler as EventHandler
157
157
  from .event import background as background
158
+ from .event import call_function as call_function
158
159
  from .event import call_script as call_script
159
160
  from .event import clear_local_storage as clear_local_storage
160
161
  from .event import clear_session_storage as clear_session_storage
161
162
  from .event import console_log as console_log
162
163
  from .event import download as download
163
164
  from .event import event as event
165
+ from .event import noop as noop
164
166
  from .event import prevent_default as prevent_default
165
167
  from .event import redirect as redirect
166
168
  from .event import remove_cookie as remove_cookie
167
169
  from .event import remove_local_storage as remove_local_storage
168
170
  from .event import remove_session_storage as remove_session_storage
171
+ from .event import run_script as run_script
169
172
  from .event import scroll_to as scroll_to
170
173
  from .event import set_clipboard as set_clipboard
171
174
  from .event import set_focus as set_focus
@@ -177,6 +180,7 @@ from .experimental import _x as _x
177
180
  from .istate.storage import Cookie as Cookie
178
181
  from .istate.storage import LocalStorage as LocalStorage
179
182
  from .istate.storage import SessionStorage as SessionStorage
183
+ from .istate.wrappers import get_state as get_state
180
184
  from .middleware import Middleware as Middleware
181
185
  from .middleware import middleware as middleware
182
186
  from .model import Model as Model