reflex 0.7.14a5__py3-none-any.whl → 0.8.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 (205) 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/utils/context.js.jinja2 +25 -6
  7. reflex/.templates/web/app/entry.client.js +8 -0
  8. reflex/.templates/web/app/routes.js +10 -0
  9. reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +12 -32
  10. reflex/.templates/web/postcss.config.js +1 -1
  11. reflex/.templates/web/react-router.config.js +6 -0
  12. reflex/.templates/web/utils/client_side_routing.js +21 -19
  13. reflex/.templates/web/utils/react-theme.js +89 -0
  14. reflex/.templates/web/utils/state.js +155 -67
  15. reflex/.templates/web/vite.config.js +32 -0
  16. reflex/__init__.py +1 -6
  17. reflex/__init__.pyi +0 -4
  18. reflex/app.py +69 -132
  19. reflex/base.py +1 -87
  20. reflex/compiler/compiler.py +40 -3
  21. reflex/compiler/utils.py +54 -28
  22. reflex/components/__init__.py +0 -2
  23. reflex/components/__init__.pyi +0 -3
  24. reflex/components/base/__init__.py +1 -5
  25. reflex/components/base/__init__.pyi +4 -6
  26. reflex/components/base/app_wrap.pyi +5 -4
  27. reflex/components/base/body.pyi +5 -4
  28. reflex/components/base/document.py +18 -14
  29. reflex/components/base/document.pyi +83 -27
  30. reflex/components/base/error_boundary.pyi +5 -4
  31. reflex/components/base/fragment.pyi +5 -4
  32. reflex/components/base/link.pyi +9 -7
  33. reflex/components/base/meta.pyi +17 -13
  34. reflex/components/base/script.py +60 -58
  35. reflex/components/base/script.pyi +246 -31
  36. reflex/components/base/strict_mode.pyi +5 -4
  37. reflex/components/component.py +109 -194
  38. reflex/components/core/__init__.py +1 -0
  39. reflex/components/core/__init__.pyi +1 -0
  40. reflex/components/core/auto_scroll.pyi +5 -4
  41. reflex/components/core/banner.pyi +25 -19
  42. reflex/components/core/client_side_routing.py +7 -6
  43. reflex/components/core/client_side_routing.pyi +6 -56
  44. reflex/components/core/clipboard.pyi +5 -4
  45. reflex/components/core/debounce.py +1 -0
  46. reflex/components/core/debounce.pyi +5 -4
  47. reflex/components/core/foreach.py +3 -2
  48. reflex/components/core/helmet.py +14 -0
  49. reflex/components/{next/base.pyi → core/helmet.pyi} +10 -7
  50. reflex/components/core/html.pyi +5 -4
  51. reflex/components/core/sticky.pyi +17 -13
  52. reflex/components/core/upload.py +2 -1
  53. reflex/components/core/upload.pyi +21 -16
  54. reflex/components/datadisplay/code.pyi +9 -7
  55. reflex/components/datadisplay/dataeditor.pyi +5 -4
  56. reflex/components/datadisplay/shiki_code_block.pyi +13 -10
  57. reflex/components/dynamic.py +4 -5
  58. reflex/components/el/element.pyi +5 -4
  59. reflex/components/el/elements/base.pyi +5 -4
  60. reflex/components/el/elements/forms.pyi +69 -52
  61. reflex/components/el/elements/inline.pyi +113 -85
  62. reflex/components/el/elements/media.pyi +105 -79
  63. reflex/components/el/elements/metadata.pyi +25 -19
  64. reflex/components/el/elements/other.pyi +29 -22
  65. reflex/components/el/elements/scripts.pyi +13 -10
  66. reflex/components/el/elements/sectioning.pyi +61 -46
  67. reflex/components/el/elements/tables.pyi +41 -31
  68. reflex/components/el/elements/typography.pyi +61 -46
  69. reflex/components/field.py +175 -0
  70. reflex/components/gridjs/datatable.py +2 -2
  71. reflex/components/gridjs/datatable.pyi +11 -9
  72. reflex/components/lucide/icon.py +6 -2
  73. reflex/components/lucide/icon.pyi +15 -10
  74. reflex/components/markdown/markdown.pyi +5 -4
  75. reflex/components/moment/moment.pyi +5 -4
  76. reflex/components/plotly/plotly.pyi +19 -10
  77. reflex/components/props.py +376 -27
  78. reflex/components/radix/primitives/accordion.py +8 -1
  79. reflex/components/radix/primitives/accordion.pyi +29 -22
  80. reflex/components/radix/primitives/base.pyi +9 -7
  81. reflex/components/radix/primitives/drawer.pyi +45 -34
  82. reflex/components/radix/primitives/form.pyi +41 -31
  83. reflex/components/radix/primitives/progress.pyi +21 -16
  84. reflex/components/radix/primitives/slider.pyi +21 -16
  85. reflex/components/radix/themes/base.py +3 -3
  86. reflex/components/radix/themes/base.pyi +33 -25
  87. reflex/components/radix/themes/color_mode.pyi +13 -10
  88. reflex/components/radix/themes/components/alert_dialog.pyi +29 -22
  89. reflex/components/radix/themes/components/aspect_ratio.pyi +5 -4
  90. reflex/components/radix/themes/components/avatar.pyi +5 -4
  91. reflex/components/radix/themes/components/badge.pyi +5 -4
  92. reflex/components/radix/themes/components/button.pyi +5 -4
  93. reflex/components/radix/themes/components/callout.pyi +21 -16
  94. reflex/components/radix/themes/components/card.pyi +5 -4
  95. reflex/components/radix/themes/components/checkbox.pyi +13 -10
  96. reflex/components/radix/themes/components/checkbox_cards.pyi +9 -7
  97. reflex/components/radix/themes/components/checkbox_group.pyi +9 -7
  98. reflex/components/radix/themes/components/context_menu.pyi +53 -40
  99. reflex/components/radix/themes/components/data_list.pyi +17 -13
  100. reflex/components/radix/themes/components/dialog.pyi +29 -22
  101. reflex/components/radix/themes/components/dropdown_menu.pyi +33 -25
  102. reflex/components/radix/themes/components/hover_card.pyi +17 -13
  103. reflex/components/radix/themes/components/icon_button.pyi +5 -4
  104. reflex/components/radix/themes/components/inset.pyi +5 -4
  105. reflex/components/radix/themes/components/popover.pyi +17 -13
  106. reflex/components/radix/themes/components/progress.pyi +5 -4
  107. reflex/components/radix/themes/components/radio.pyi +5 -4
  108. reflex/components/radix/themes/components/radio_cards.pyi +9 -7
  109. reflex/components/radix/themes/components/radio_group.pyi +17 -13
  110. reflex/components/radix/themes/components/scroll_area.pyi +5 -4
  111. reflex/components/radix/themes/components/segmented_control.pyi +9 -7
  112. reflex/components/radix/themes/components/select.pyi +37 -28
  113. reflex/components/radix/themes/components/separator.pyi +5 -4
  114. reflex/components/radix/themes/components/skeleton.pyi +5 -4
  115. reflex/components/radix/themes/components/slider.pyi +5 -4
  116. reflex/components/radix/themes/components/spinner.pyi +5 -4
  117. reflex/components/radix/themes/components/switch.pyi +5 -4
  118. reflex/components/radix/themes/components/table.pyi +29 -22
  119. reflex/components/radix/themes/components/tabs.pyi +21 -16
  120. reflex/components/radix/themes/components/text_area.pyi +5 -4
  121. reflex/components/radix/themes/components/text_field.pyi +13 -10
  122. reflex/components/radix/themes/components/tooltip.pyi +5 -4
  123. reflex/components/radix/themes/layout/base.pyi +5 -4
  124. reflex/components/radix/themes/layout/box.pyi +5 -4
  125. reflex/components/radix/themes/layout/center.pyi +5 -4
  126. reflex/components/radix/themes/layout/container.pyi +5 -4
  127. reflex/components/radix/themes/layout/flex.pyi +5 -4
  128. reflex/components/radix/themes/layout/grid.pyi +5 -4
  129. reflex/components/radix/themes/layout/list.pyi +21 -16
  130. reflex/components/radix/themes/layout/section.pyi +5 -4
  131. reflex/components/radix/themes/layout/spacer.pyi +5 -4
  132. reflex/components/radix/themes/layout/stack.pyi +13 -10
  133. reflex/components/radix/themes/typography/blockquote.pyi +5 -4
  134. reflex/components/radix/themes/typography/code.pyi +5 -4
  135. reflex/components/radix/themes/typography/heading.pyi +5 -4
  136. reflex/components/radix/themes/typography/link.py +42 -9
  137. reflex/components/radix/themes/typography/link.pyi +311 -6
  138. reflex/components/radix/themes/typography/text.pyi +29 -22
  139. reflex/components/react_player/audio.pyi +5 -4
  140. reflex/components/react_player/react_player.pyi +5 -4
  141. reflex/components/react_player/video.pyi +5 -4
  142. reflex/components/recharts/cartesian.py +2 -1
  143. reflex/components/recharts/cartesian.pyi +65 -46
  144. reflex/components/recharts/charts.py +4 -2
  145. reflex/components/recharts/charts.pyi +36 -24
  146. reflex/components/recharts/general.pyi +24 -18
  147. reflex/components/recharts/polar.py +8 -4
  148. reflex/components/recharts/polar.pyi +16 -10
  149. reflex/components/recharts/recharts.pyi +9 -7
  150. reflex/components/sonner/toast.py +2 -2
  151. reflex/components/sonner/toast.pyi +7 -6
  152. reflex/config.py +3 -77
  153. reflex/constants/__init__.py +1 -0
  154. reflex/constants/base.py +38 -8
  155. reflex/constants/compiler.py +4 -2
  156. reflex/constants/event.py +1 -0
  157. reflex/constants/installer.py +23 -16
  158. reflex/constants/state.py +2 -0
  159. reflex/custom_components/custom_components.py +0 -14
  160. reflex/environment.py +1 -1
  161. reflex/event.py +178 -81
  162. reflex/experimental/__init__.py +0 -30
  163. reflex/istate/proxy.py +5 -3
  164. reflex/page.py +0 -27
  165. reflex/plugins/__init__.py +3 -2
  166. reflex/plugins/base.py +5 -1
  167. reflex/plugins/shared_tailwind.py +158 -0
  168. reflex/plugins/sitemap.py +206 -0
  169. reflex/plugins/tailwind_v3.py +13 -106
  170. reflex/plugins/tailwind_v4.py +15 -108
  171. reflex/reflex.py +1 -0
  172. reflex/state.py +134 -140
  173. reflex/testing.py +57 -9
  174. reflex/utils/build.py +9 -69
  175. reflex/utils/exec.py +59 -161
  176. reflex/utils/export.py +1 -1
  177. reflex/utils/imports.py +0 -4
  178. reflex/utils/misc.py +28 -0
  179. reflex/utils/prerequisites.py +62 -59
  180. reflex/utils/processes.py +6 -6
  181. reflex/utils/pyi_generator.py +21 -9
  182. reflex/utils/serializers.py +14 -1
  183. reflex/utils/types.py +196 -61
  184. reflex/vars/__init__.py +2 -0
  185. reflex/vars/base.py +367 -134
  186. {reflex-0.7.14a5.dist-info → reflex-0.8.0a1.dist-info}/METADATA +12 -5
  187. {reflex-0.7.14a5.dist-info → reflex-0.8.0a1.dist-info}/RECORD +190 -196
  188. reflex/.templates/web/next.config.js +0 -7
  189. reflex/components/base/head.py +0 -20
  190. reflex/components/base/head.pyi +0 -116
  191. reflex/components/next/__init__.py +0 -10
  192. reflex/components/next/base.py +0 -7
  193. reflex/components/next/image.py +0 -117
  194. reflex/components/next/image.pyi +0 -94
  195. reflex/components/next/link.py +0 -20
  196. reflex/components/next/link.pyi +0 -67
  197. reflex/components/next/video.py +0 -38
  198. reflex/components/next/video.pyi +0 -68
  199. reflex/components/suneditor/__init__.py +0 -5
  200. reflex/components/suneditor/editor.py +0 -269
  201. reflex/components/suneditor/editor.pyi +0 -199
  202. reflex/experimental/layout.py +0 -254
  203. {reflex-0.7.14a5.dist-info → reflex-0.8.0a1.dist-info}/WHEEL +0 -0
  204. {reflex-0.7.14a5.dist-info → reflex-0.8.0a1.dist-info}/entry_points.txt +0 -0
  205. {reflex-0.7.14a5.dist-info → reflex-0.8.0a1.dist-info}/licenses/LICENSE +0 -0
@@ -1,254 +0,0 @@
1
- """To experiment with layout component, move them to reflex/components later."""
2
-
3
- from __future__ import annotations
4
-
5
- from typing import Any
6
-
7
- from reflex import color, cond
8
- from reflex.components.base.fragment import Fragment
9
- from reflex.components.component import Component, ComponentNamespace, MemoizationLeaf
10
- from reflex.components.radix.primitives.drawer import DrawerRoot, drawer
11
- from reflex.components.radix.themes.components.icon_button import IconButton
12
- from reflex.components.radix.themes.layout.box import Box
13
- from reflex.components.radix.themes.layout.container import Container
14
- from reflex.components.radix.themes.layout.stack import HStack
15
- from reflex.constants.compiler import MemoizationMode
16
- from reflex.event import run_script
17
- from reflex.experimental import hooks
18
- from reflex.state import ComponentState
19
- from reflex.style import Style
20
- from reflex.vars.base import Var
21
-
22
-
23
- class Sidebar(Box, MemoizationLeaf):
24
- """A component that renders the sidebar."""
25
-
26
- @classmethod
27
- def create(cls, *children, **props):
28
- """Create the sidebar component.
29
-
30
- Args:
31
- children: The children components.
32
- props: The properties of the sidebar.
33
-
34
- Returns:
35
- The sidebar component.
36
- """
37
- return super().create(
38
- Box.create(*children, **props), # sidebar for content
39
- Box.create(width=props.get("width")), # spacer for layout
40
- )
41
-
42
- def add_style(self) -> dict[str, Any] | None:
43
- """Add style to the component.
44
-
45
- Returns:
46
- The style of the component.
47
- """
48
- sidebar: Component = self.children[-2] # pyright: ignore [reportAssignmentType]
49
- spacer: Component = self.children[-1] # pyright: ignore [reportAssignmentType]
50
- open = (
51
- self.State.open # pyright: ignore [reportAttributeAccessIssue]
52
- if self.State
53
- else Var(_js_expr="open")
54
- )
55
- sidebar.style["display"] = spacer.style["display"] = cond(open, "block", "none")
56
-
57
- return Style(
58
- {
59
- "position": "fixed",
60
- "border_right": f"1px solid {color('accent', 12)}",
61
- "background_color": color("accent", 1),
62
- "width": "20vw",
63
- "height": "100vh",
64
- }
65
- )
66
-
67
- def add_hooks(self) -> list[Var]:
68
- """Get the hooks to render.
69
-
70
- Returns:
71
- The hooks for the sidebar.
72
- """
73
- return [hooks.useState("open", "true")] if not self.State else []
74
-
75
-
76
- class StatefulSidebar(ComponentState):
77
- """Bind a state to a sidebar component."""
78
-
79
- open: bool = True
80
-
81
- def toggle(self):
82
- """Toggle the sidebar."""
83
- self.open = not self.open
84
-
85
- @classmethod
86
- def get_component(cls, *children, **props):
87
- """Get the stateful sidebar component.
88
-
89
- Args:
90
- children: The children components.
91
- props: The properties of the sidebar.
92
-
93
- Returns:
94
- The stateful sidebar component.
95
- """
96
- return Sidebar.create(*children, **props)
97
-
98
-
99
- class DrawerSidebar(DrawerRoot):
100
- """A component that renders a drawer sidebar."""
101
-
102
- @classmethod
103
- def create(cls, *children, **props):
104
- """Create the sidebar component.
105
-
106
- Args:
107
- children: The children components.
108
- props: The properties of the sidebar.
109
-
110
- Returns:
111
- The drawer sidebar component.
112
- """
113
- direction = props.pop("direction", "left")
114
- props.setdefault("border_right", f"1px solid {color('accent', 12)}")
115
- props.setdefault("background_color", color("accent", 1))
116
- props.setdefault("width", "20vw")
117
- props.setdefault("height", "100vh")
118
- return super().create(
119
- drawer.trigger(
120
- IconButton.create(
121
- "arrow-right-from-line",
122
- background_color="transparent",
123
- ),
124
- position="absolute",
125
- top="15",
126
- left="15",
127
- ),
128
- drawer.portal(
129
- drawer.content(
130
- *children,
131
- **props,
132
- )
133
- ),
134
- direction=direction,
135
- )
136
-
137
-
138
- sidebar_trigger_style = {
139
- "position": "fixed",
140
- "z_index": "15",
141
- "color": color("accent", 12),
142
- "background_color": "transparent",
143
- "padding": "0",
144
- }
145
-
146
-
147
- class SidebarTrigger(Fragment):
148
- """A component that renders the sidebar trigger."""
149
-
150
- _memoization_mode = MemoizationMode(recursive=False)
151
-
152
- @classmethod
153
- def create(cls, sidebar: Component, **props):
154
- """Create the sidebar trigger component.
155
-
156
- Args:
157
- sidebar: The sidebar component.
158
- props: The properties of the sidebar trigger.
159
-
160
- Returns:
161
- The sidebar trigger component.
162
- """
163
- trigger_props = {**props, **sidebar_trigger_style}
164
-
165
- inner_sidebar: Component = sidebar.children[0] # pyright: ignore [reportAssignmentType]
166
- sidebar_width = inner_sidebar.style.get("width")
167
-
168
- if sidebar.State:
169
- open, toggle = sidebar.State.open, sidebar.State.toggle # pyright: ignore [reportAttributeAccessIssue]
170
- else:
171
- open, toggle = (
172
- Var(_js_expr="open"),
173
- run_script("setOpen(!open)"),
174
- )
175
-
176
- trigger_props["left"] = cond(open, f"calc({sidebar_width} - 32px)", "0")
177
-
178
- trigger = cond(
179
- open,
180
- IconButton.create(
181
- "arrow-left-from-line",
182
- on_click=toggle,
183
- **trigger_props,
184
- ),
185
- IconButton.create(
186
- "arrow-right-from-line",
187
- on_click=toggle,
188
- **trigger_props,
189
- ),
190
- )
191
- return super().create(trigger)
192
-
193
-
194
- class Layout(Box):
195
- """A component that renders the layout."""
196
-
197
- @classmethod
198
- def create(
199
- cls,
200
- *content: Component,
201
- sidebar: Component | None = None,
202
- **props,
203
- ):
204
- """Create the layout component.
205
-
206
- Args:
207
- content: The content component.
208
- sidebar: The sidebar component.
209
- props: The properties of the layout.
210
-
211
- Returns:
212
- The layout component.
213
- """
214
- layout_root = HStack.create
215
-
216
- if sidebar is None:
217
- return Container.create(*content, **props)
218
-
219
- if isinstance(sidebar, DrawerSidebar):
220
- return super().create(
221
- sidebar,
222
- Container.create(*content, height="100%"),
223
- **props,
224
- width="100vw",
225
- min_height="100vh",
226
- )
227
-
228
- if not isinstance(sidebar, Sidebar):
229
- sidebar = Sidebar.create(sidebar)
230
-
231
- # Add the sidebar trigger to the sidebar as first child to not mess up the rendering.
232
- sidebar.children.insert(0, SidebarTrigger.create(sidebar))
233
-
234
- return super().create(
235
- layout_root(
236
- sidebar,
237
- Container.create(*content, height="100%"),
238
- **props,
239
- width="100vw",
240
- min_height="100vh",
241
- )
242
- )
243
-
244
-
245
- class LayoutNamespace(ComponentNamespace):
246
- """Namespace for layout components."""
247
-
248
- drawer_sidebar = staticmethod(DrawerSidebar.create)
249
- stateful_sidebar = staticmethod(StatefulSidebar.create)
250
- sidebar = staticmethod(Sidebar.create)
251
- __call__ = staticmethod(Layout.create)
252
-
253
-
254
- layout = LayoutNamespace()