reflex 0.4.5a1__py3-none-any.whl → 0.4.6__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.
- reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +5 -15
- reflex/.templates/jinja/web/pages/index.js.jinja2 +4 -0
- reflex/.templates/jinja/web/pages/stateful_component.js.jinja2 +4 -0
- reflex/.templates/web/utils/state.js +3 -0
- reflex/__init__.py +12 -2
- reflex/__init__.pyi +4 -0
- reflex/app.py +23 -3
- reflex/base.py +16 -4
- reflex/compiler/compiler.py +1 -0
- reflex/compiler/utils.py +11 -2
- reflex/components/base/app_wrap.pyi +1 -1
- reflex/components/base/bare.py +3 -4
- reflex/components/base/body.pyi +1 -1
- reflex/components/base/document.pyi +1 -1
- reflex/components/base/fragment.pyi +1 -1
- reflex/components/base/head.pyi +1 -1
- reflex/components/base/link.pyi +1 -1
- reflex/components/base/meta.pyi +1 -1
- reflex/components/base/script.pyi +1 -1
- reflex/components/chakra/base.pyi +1 -1
- reflex/components/chakra/datadisplay/badge.pyi +1 -1
- reflex/components/chakra/datadisplay/code.pyi +1 -1
- reflex/components/chakra/datadisplay/divider.pyi +1 -1
- reflex/components/chakra/datadisplay/keyboard_key.pyi +1 -1
- reflex/components/chakra/datadisplay/list.pyi +1 -1
- reflex/components/chakra/datadisplay/stat.pyi +1 -1
- reflex/components/chakra/datadisplay/table.pyi +1 -1
- reflex/components/chakra/datadisplay/tag.pyi +1 -1
- reflex/components/chakra/disclosure/accordion.pyi +1 -1
- reflex/components/chakra/disclosure/tabs.pyi +1 -1
- reflex/components/chakra/disclosure/transition.pyi +1 -1
- reflex/components/chakra/disclosure/visuallyhidden.pyi +1 -1
- reflex/components/chakra/feedback/alert.pyi +1 -1
- reflex/components/chakra/feedback/circularprogress.pyi +1 -1
- reflex/components/chakra/feedback/progress.pyi +1 -1
- reflex/components/chakra/feedback/skeleton.pyi +1 -1
- reflex/components/chakra/feedback/spinner.pyi +1 -1
- reflex/components/chakra/forms/button.pyi +1 -1
- reflex/components/chakra/forms/checkbox.pyi +1 -1
- reflex/components/chakra/forms/colormodeswitch.pyi +1 -1
- reflex/components/chakra/forms/date_picker.pyi +1 -1
- reflex/components/chakra/forms/date_time_picker.pyi +1 -1
- reflex/components/chakra/forms/editable.pyi +1 -1
- reflex/components/chakra/forms/email.pyi +1 -1
- reflex/components/chakra/forms/form.pyi +1 -1
- reflex/components/chakra/forms/iconbutton.pyi +1 -1
- reflex/components/chakra/forms/input.pyi +1 -1
- reflex/components/chakra/forms/numberinput.pyi +1 -1
- reflex/components/chakra/forms/password.pyi +1 -1
- reflex/components/chakra/forms/pininput.pyi +1 -1
- reflex/components/chakra/forms/radio.pyi +1 -1
- reflex/components/chakra/forms/rangeslider.pyi +1 -1
- reflex/components/chakra/forms/select.pyi +1 -1
- reflex/components/chakra/forms/slider.pyi +1 -1
- reflex/components/chakra/forms/switch.pyi +1 -1
- reflex/components/chakra/forms/textarea.pyi +1 -1
- reflex/components/chakra/forms/time_picker.pyi +1 -1
- reflex/components/chakra/layout/aspect_ratio.pyi +1 -1
- reflex/components/chakra/layout/box.pyi +1 -1
- reflex/components/chakra/layout/card.pyi +1 -1
- reflex/components/chakra/layout/center.pyi +1 -1
- reflex/components/chakra/layout/container.pyi +1 -1
- reflex/components/chakra/layout/flex.pyi +1 -1
- reflex/components/chakra/layout/grid.pyi +1 -1
- reflex/components/chakra/layout/spacer.pyi +1 -1
- reflex/components/chakra/layout/stack.pyi +1 -1
- reflex/components/chakra/layout/wrap.pyi +1 -1
- reflex/components/chakra/media/avatar.pyi +1 -1
- reflex/components/chakra/media/icon.pyi +1 -1
- reflex/components/chakra/media/image.pyi +1 -1
- reflex/components/chakra/navigation/breadcrumb.pyi +1 -1
- reflex/components/chakra/navigation/link.pyi +1 -1
- reflex/components/chakra/navigation/linkoverlay.pyi +1 -1
- reflex/components/chakra/navigation/stepper.pyi +1 -1
- reflex/components/chakra/overlay/alertdialog.pyi +1 -1
- reflex/components/chakra/overlay/drawer.pyi +1 -1
- reflex/components/chakra/overlay/menu.pyi +1 -1
- reflex/components/chakra/overlay/modal.pyi +1 -1
- reflex/components/chakra/overlay/popover.pyi +1 -1
- reflex/components/chakra/overlay/tooltip.pyi +1 -1
- reflex/components/chakra/typography/heading.pyi +1 -1
- reflex/components/chakra/typography/highlight.pyi +1 -1
- reflex/components/chakra/typography/span.pyi +1 -1
- reflex/components/chakra/typography/text.pyi +1 -1
- reflex/components/component.py +82 -30
- reflex/components/core/banner.py +1 -2
- reflex/components/core/banner.pyi +1 -2
- reflex/components/core/client_side_routing.pyi +1 -1
- reflex/components/core/cond.py +1 -1
- reflex/components/core/debounce.pyi +1 -1
- reflex/components/core/html.pyi +1 -1
- reflex/components/core/responsive.py +1 -1
- reflex/components/core/upload.pyi +1 -1
- reflex/components/datadisplay/code.py +17 -9
- reflex/components/datadisplay/code.pyi +3 -1
- reflex/components/datadisplay/dataeditor.pyi +1 -1
- reflex/components/el/element.pyi +1 -1
- reflex/components/el/elements/base.pyi +1 -1
- reflex/components/el/elements/forms.py +78 -1
- reflex/components/el/elements/forms.pyi +10 -2
- reflex/components/el/elements/inline.pyi +1 -1
- reflex/components/el/elements/media.pyi +1 -1
- reflex/components/el/elements/metadata.pyi +1 -1
- reflex/components/el/elements/other.pyi +1 -1
- reflex/components/el/elements/scripts.pyi +1 -1
- reflex/components/el/elements/sectioning.pyi +1 -1
- reflex/components/el/elements/tables.pyi +1 -1
- reflex/components/el/elements/typography.pyi +1 -1
- reflex/components/gridjs/datatable.pyi +1 -1
- reflex/components/lucide/icon.py +275 -115
- reflex/components/lucide/icon.pyi +259 -114
- reflex/components/markdown/markdown.pyi +1 -1
- reflex/components/moment/moment.pyi +1 -1
- reflex/components/next/base.pyi +1 -1
- reflex/components/next/image.pyi +1 -1
- reflex/components/next/link.pyi +1 -1
- reflex/components/next/video.pyi +1 -1
- reflex/components/plotly/plotly.pyi +1 -1
- reflex/components/radix/primitives/accordion.pyi +1 -1
- reflex/components/radix/primitives/base.pyi +1 -1
- reflex/components/radix/primitives/drawer.pyi +1 -1
- reflex/components/radix/primitives/form.pyi +1 -1
- reflex/components/radix/primitives/progress.pyi +1 -1
- reflex/components/radix/primitives/slider.pyi +1 -1
- reflex/components/radix/themes/base.pyi +1 -1
- reflex/components/radix/themes/color_mode.pyi +1 -1
- reflex/components/radix/themes/components/alert_dialog.pyi +1 -1
- reflex/components/radix/themes/components/aspect_ratio.pyi +1 -1
- reflex/components/radix/themes/components/avatar.pyi +1 -1
- reflex/components/radix/themes/components/badge.pyi +1 -1
- reflex/components/radix/themes/components/button.pyi +1 -1
- reflex/components/radix/themes/components/callout.pyi +1 -1
- reflex/components/radix/themes/components/card.pyi +1 -1
- reflex/components/radix/themes/components/checkbox.pyi +1 -1
- reflex/components/radix/themes/components/context_menu.pyi +1 -1
- reflex/components/radix/themes/components/dialog.pyi +1 -1
- reflex/components/radix/themes/components/dropdown_menu.pyi +1 -1
- reflex/components/radix/themes/components/hover_card.pyi +1 -1
- reflex/components/radix/themes/components/icon_button.pyi +1 -1
- reflex/components/radix/themes/components/inset.pyi +1 -1
- reflex/components/radix/themes/components/popover.pyi +1 -1
- reflex/components/radix/themes/components/radio_group.pyi +1 -1
- reflex/components/radix/themes/components/scroll_area.pyi +1 -1
- reflex/components/radix/themes/components/select.py +4 -1
- reflex/components/radix/themes/components/select.pyi +5 -1
- reflex/components/radix/themes/components/separator.pyi +1 -1
- reflex/components/radix/themes/components/slider.pyi +1 -1
- reflex/components/radix/themes/components/switch.pyi +1 -1
- reflex/components/radix/themes/components/table.pyi +1 -1
- reflex/components/radix/themes/components/tabs.pyi +1 -1
- reflex/components/radix/themes/components/text_area.pyi +5 -1
- reflex/components/radix/themes/components/text_field.pyi +1 -1
- reflex/components/radix/themes/components/tooltip.pyi +1 -1
- reflex/components/radix/themes/layout/__init__.py +5 -4
- reflex/components/radix/themes/layout/base.pyi +1 -1
- reflex/components/radix/themes/layout/box.pyi +1 -1
- reflex/components/radix/themes/layout/center.pyi +1 -1
- reflex/components/radix/themes/layout/container.pyi +1 -1
- reflex/components/radix/themes/layout/flex.pyi +1 -1
- reflex/components/radix/themes/layout/grid.pyi +1 -1
- reflex/components/radix/themes/layout/list.py +21 -13
- reflex/components/radix/themes/layout/list.pyi +139 -481
- reflex/components/radix/themes/layout/section.pyi +1 -1
- reflex/components/radix/themes/layout/spacer.pyi +1 -1
- reflex/components/radix/themes/layout/stack.pyi +1 -1
- reflex/components/radix/themes/typography/blockquote.pyi +1 -1
- reflex/components/radix/themes/typography/code.pyi +1 -1
- reflex/components/radix/themes/typography/heading.pyi +1 -1
- reflex/components/radix/themes/typography/link.pyi +1 -1
- reflex/components/radix/themes/typography/text.pyi +1 -1
- reflex/components/react_player/audio.pyi +1 -1
- reflex/components/react_player/react_player.pyi +1 -1
- reflex/components/react_player/video.pyi +1 -1
- reflex/components/recharts/cartesian.pyi +1 -1
- reflex/components/recharts/charts.pyi +1 -1
- reflex/components/recharts/general.pyi +1 -1
- reflex/components/recharts/polar.pyi +1 -1
- reflex/components/recharts/recharts.pyi +1 -1
- reflex/components/suneditor/editor.pyi +1 -1
- reflex/config.py +12 -2
- reflex/custom_components/custom_components.py +305 -21
- reflex/event.py +36 -46
- reflex/reflex.py +19 -13
- reflex/state.py +184 -39
- reflex/testing.py +15 -11
- reflex/utils/console.py +15 -7
- reflex/utils/exec.py +9 -0
- reflex/utils/prerequisites.py +12 -1
- reflex/utils/processes.py +8 -25
- reflex/utils/pyi_generator.py +842 -0
- reflex/utils/telemetry.py +18 -1
- reflex/utils/types.py +14 -2
- reflex/vars.py +33 -3
- {reflex-0.4.5a1.dist-info → reflex-0.4.6.dist-info}/METADATA +31 -29
- {reflex-0.4.5a1.dist-info → reflex-0.4.6.dist-info}/RECORD +198 -198
- reflex/page.pyi +0 -17
- {reflex-0.4.5a1.dist-info → reflex-0.4.6.dist-info}/LICENSE +0 -0
- {reflex-0.4.5a1.dist-info → reflex-0.4.6.dist-info}/WHEEL +0 -0
- {reflex-0.4.5a1.dist-info → reflex-0.4.6.dist-info}/entry_points.txt +0 -0
reflex/utils/telemetry.py
CHANGED
|
@@ -11,6 +11,7 @@ import psutil
|
|
|
11
11
|
|
|
12
12
|
from reflex import constants
|
|
13
13
|
from reflex.utils import console
|
|
14
|
+
from reflex.utils.exec import should_skip_compile
|
|
14
15
|
from reflex.utils.prerequisites import ensure_reflex_installation_id, get_project_hash
|
|
15
16
|
|
|
16
17
|
POSTHOG_API_URL: str = "https://app.posthog.com/capture/"
|
|
@@ -64,6 +65,22 @@ def get_memory() -> int:
|
|
|
64
65
|
return 0
|
|
65
66
|
|
|
66
67
|
|
|
68
|
+
def _raise_on_missing_project_hash() -> bool:
|
|
69
|
+
"""Check if an error should be raised when project hash is missing.
|
|
70
|
+
|
|
71
|
+
When running reflex with --backend-only, or doing database migration
|
|
72
|
+
operations, there is no requirement for a .web directory, so the reflex.json
|
|
73
|
+
file may not exist, and this should not be considered an error.
|
|
74
|
+
|
|
75
|
+
Returns:
|
|
76
|
+
False when compilation should be skipped (i.e. no .web directory is required).
|
|
77
|
+
Otherwise return True.
|
|
78
|
+
"""
|
|
79
|
+
if should_skip_compile():
|
|
80
|
+
return False
|
|
81
|
+
return True
|
|
82
|
+
|
|
83
|
+
|
|
67
84
|
def _prepare_event(event: str) -> dict:
|
|
68
85
|
"""Prepare the event to be sent to the PostHog server.
|
|
69
86
|
|
|
@@ -74,7 +91,7 @@ def _prepare_event(event: str) -> dict:
|
|
|
74
91
|
The event data.
|
|
75
92
|
"""
|
|
76
93
|
installation_id = ensure_reflex_installation_id()
|
|
77
|
-
project_hash = get_project_hash(raise_on_fail=
|
|
94
|
+
project_hash = get_project_hash(raise_on_fail=_raise_on_missing_project_hash())
|
|
78
95
|
|
|
79
96
|
if installation_id is None or project_hash is None:
|
|
80
97
|
console.debug(
|
reflex/utils/types.py
CHANGED
|
@@ -7,6 +7,7 @@ import inspect
|
|
|
7
7
|
import types
|
|
8
8
|
from functools import wraps
|
|
9
9
|
from typing import (
|
|
10
|
+
TYPE_CHECKING,
|
|
10
11
|
Any,
|
|
11
12
|
Callable,
|
|
12
13
|
Iterable,
|
|
@@ -22,7 +23,18 @@ from typing import (
|
|
|
22
23
|
)
|
|
23
24
|
|
|
24
25
|
import sqlalchemy
|
|
25
|
-
|
|
26
|
+
|
|
27
|
+
try:
|
|
28
|
+
# TODO The type checking guard can be removed once
|
|
29
|
+
# reflex-hosting-cli tools are compatible with pydantic v2
|
|
30
|
+
|
|
31
|
+
if not TYPE_CHECKING:
|
|
32
|
+
import pydantic.v1.fields as ModelField
|
|
33
|
+
else:
|
|
34
|
+
raise ModuleNotFoundError
|
|
35
|
+
except ModuleNotFoundError:
|
|
36
|
+
from pydantic.fields import ModelField
|
|
37
|
+
|
|
26
38
|
from sqlalchemy.ext.associationproxy import AssociationProxyInstance
|
|
27
39
|
from sqlalchemy.ext.hybrid import hybrid_property
|
|
28
40
|
from sqlalchemy.orm import DeclarativeBase, Mapped, QueryableAttribute, Relationship
|
|
@@ -202,7 +214,7 @@ def get_attribute_access_type(cls: GenericType, name: str) -> GenericType | None
|
|
|
202
214
|
attr.remote_attr.key, # type: ignore[attr-defined]
|
|
203
215
|
)
|
|
204
216
|
]
|
|
205
|
-
elif isinstance(cls, type) and issubclass(cls, Model):
|
|
217
|
+
elif isinstance(cls, type) and not is_generic_alias(cls) and issubclass(cls, Model):
|
|
206
218
|
# Check in the annotations directly (for sqlmodel.Relationship)
|
|
207
219
|
hints = get_type_hints(cls)
|
|
208
220
|
if name in hints:
|
reflex/vars.py
CHANGED
|
@@ -677,6 +677,33 @@ class Var:
|
|
|
677
677
|
_var_is_string=False,
|
|
678
678
|
)
|
|
679
679
|
|
|
680
|
+
def __getattribute__(self, name: str) -> Any:
|
|
681
|
+
"""Get a var attribute.
|
|
682
|
+
|
|
683
|
+
Args:
|
|
684
|
+
name: The name of the attribute.
|
|
685
|
+
|
|
686
|
+
Returns:
|
|
687
|
+
The var attribute.
|
|
688
|
+
|
|
689
|
+
Raises:
|
|
690
|
+
AttributeError: If the attribute cannot be found, or if __getattr__ fallback should be used.
|
|
691
|
+
"""
|
|
692
|
+
try:
|
|
693
|
+
var_attribute = super().__getattribute__(name)
|
|
694
|
+
if not name.startswith("_"):
|
|
695
|
+
# Check if the attribute should be accessed through the Var instead of
|
|
696
|
+
# accessing one of the Var operations
|
|
697
|
+
type_ = types.get_attribute_access_type(
|
|
698
|
+
super().__getattribute__("_var_type"), name
|
|
699
|
+
)
|
|
700
|
+
if type_ is not None:
|
|
701
|
+
raise AttributeError(f"{name} is being accessed through the Var.")
|
|
702
|
+
# Return the attribute as-is.
|
|
703
|
+
return var_attribute
|
|
704
|
+
except AttributeError:
|
|
705
|
+
raise # fall back to __getattr__ anyway
|
|
706
|
+
|
|
680
707
|
def __getattr__(self, name: str) -> Var:
|
|
681
708
|
"""Get a var attribute.
|
|
682
709
|
|
|
@@ -1861,6 +1888,8 @@ class ComputedVar(Var, property):
|
|
|
1861
1888
|
# handle caching
|
|
1862
1889
|
if not hasattr(instance, self._cache_attr):
|
|
1863
1890
|
setattr(instance, self._cache_attr, super().__get__(instance, owner))
|
|
1891
|
+
# Ensure the computed var gets serialized to redis.
|
|
1892
|
+
instance._was_touched = True
|
|
1864
1893
|
return getattr(instance, self._cache_attr)
|
|
1865
1894
|
|
|
1866
1895
|
def _deps(
|
|
@@ -1889,8 +1918,9 @@ class ComputedVar(Var, property):
|
|
|
1889
1918
|
"""
|
|
1890
1919
|
d = set()
|
|
1891
1920
|
if obj is None:
|
|
1892
|
-
|
|
1893
|
-
|
|
1921
|
+
fget = property.__getattribute__(self, "fget")
|
|
1922
|
+
if fget is not None:
|
|
1923
|
+
obj = cast(FunctionType, fget)
|
|
1894
1924
|
else:
|
|
1895
1925
|
return set()
|
|
1896
1926
|
with contextlib.suppress(AttributeError):
|
|
@@ -1974,7 +2004,7 @@ class ComputedVar(Var, property):
|
|
|
1974
2004
|
Returns:
|
|
1975
2005
|
The type of the var.
|
|
1976
2006
|
"""
|
|
1977
|
-
hints = get_type_hints(self
|
|
2007
|
+
hints = get_type_hints(property.__getattribute__(self, "fget"))
|
|
1978
2008
|
if "return" in hints:
|
|
1979
2009
|
return hints["return"]
|
|
1980
2010
|
return Any
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: reflex
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.6
|
|
4
4
|
Summary: Web apps in pure Python.
|
|
5
5
|
Home-page: https://reflex.dev
|
|
6
6
|
License: Apache-2.0
|
|
@@ -15,36 +15,38 @@ Classifier: Programming Language :: Python :: 3.8
|
|
|
15
15
|
Classifier: Programming Language :: Python :: 3.9
|
|
16
16
|
Classifier: Programming Language :: Python :: 3.10
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
-
Requires-Dist: alembic (>=1.11.1,<2.0
|
|
19
|
-
Requires-Dist: build (>=1.0.3,<2.0
|
|
20
|
-
Requires-Dist: charset-normalizer (>=3.3.2,<4.0
|
|
21
|
-
Requires-Dist:
|
|
22
|
-
Requires-Dist: distro (>=1.8.0,<2.0
|
|
23
|
-
Requires-Dist: fastapi (>=0.96.0,<
|
|
24
|
-
Requires-Dist: gunicorn (>=20.1.0,<
|
|
25
|
-
Requires-Dist: httpx (>=0.25.1)
|
|
26
|
-
Requires-Dist: jinja2 (>=3.1.2,<4.0
|
|
27
|
-
Requires-Dist: packaging (>=23.1,<
|
|
28
|
-
Requires-Dist: platformdirs (>=3.10.0,<
|
|
29
|
-
Requires-Dist: psutil (>=5.9.4,<6.0
|
|
30
|
-
Requires-Dist: pydantic (>=1.10.2,<
|
|
18
|
+
Requires-Dist: alembic (>=1.11.1,<2.0)
|
|
19
|
+
Requires-Dist: build (>=1.0.3,<2.0)
|
|
20
|
+
Requires-Dist: charset-normalizer (>=3.3.2,<4.0)
|
|
21
|
+
Requires-Dist: dill (>=0.3.8,<0.4)
|
|
22
|
+
Requires-Dist: distro (>=1.8.0,<2.0) ; sys_platform == "linux"
|
|
23
|
+
Requires-Dist: fastapi (>=0.96.0,<1.0)
|
|
24
|
+
Requires-Dist: gunicorn (>=20.1.0,<22.0)
|
|
25
|
+
Requires-Dist: httpx (>=0.25.1,<1.0)
|
|
26
|
+
Requires-Dist: jinja2 (>=3.1.2,<4.0)
|
|
27
|
+
Requires-Dist: packaging (>=23.1,<25.0)
|
|
28
|
+
Requires-Dist: platformdirs (>=3.10.0,<5.0)
|
|
29
|
+
Requires-Dist: psutil (>=5.9.4,<6.0)
|
|
30
|
+
Requires-Dist: pydantic (>=1.10.2,<3.0)
|
|
31
31
|
Requires-Dist: python-engineio (!=4.6.0)
|
|
32
|
-
Requires-Dist: python-multipart (>=0.0.5,<0.
|
|
33
|
-
Requires-Dist: python-socketio (>=5.7.0,<6.0
|
|
34
|
-
Requires-Dist: redis (>=4.3.5,<
|
|
35
|
-
Requires-Dist: reflex-hosting-cli (>=0.1.2)
|
|
36
|
-
Requires-Dist: rich (>=13.0.0,<14.0
|
|
37
|
-
Requires-Dist: setuptools (>=69.1.1,<70.0
|
|
38
|
-
Requires-Dist: sqlmodel (>=0.0.14,<0.
|
|
39
|
-
Requires-Dist: starlette-admin (>=0.
|
|
40
|
-
Requires-Dist:
|
|
32
|
+
Requires-Dist: python-multipart (>=0.0.5,<0.1)
|
|
33
|
+
Requires-Dist: python-socketio (>=5.7.0,<6.0)
|
|
34
|
+
Requires-Dist: redis (>=4.3.5,<6.0)
|
|
35
|
+
Requires-Dist: reflex-hosting-cli (>=0.1.2,<2.0)
|
|
36
|
+
Requires-Dist: rich (>=13.0.0,<14.0)
|
|
37
|
+
Requires-Dist: setuptools (>=69.1.1,<70.0)
|
|
38
|
+
Requires-Dist: sqlmodel (>=0.0.14,<0.1)
|
|
39
|
+
Requires-Dist: starlette-admin (>=0.11.0,<1.0)
|
|
40
|
+
Requires-Dist: tomlkit (>=0.12.4,<1.0)
|
|
41
|
+
Requires-Dist: twine (>=4.0.0,<6.0)
|
|
42
|
+
Requires-Dist: typer (>=0.4.2,<1.0)
|
|
41
43
|
Requires-Dist: uvicorn (>=0.20.0,<0.21.0) ; python_version < "3.12"
|
|
42
44
|
Requires-Dist: uvicorn (>=0.24.0,<0.25.0) ; python_version >= "3.12"
|
|
43
|
-
Requires-Dist: watchdog (>=2.3.1,<
|
|
44
|
-
Requires-Dist: watchfiles (>=0.19.0,<
|
|
45
|
-
Requires-Dist: wheel (>=0.42.0,<
|
|
46
|
-
Requires-Dist: wrapt (>=1.11.0,<2.0
|
|
47
|
-
Requires-Dist: wrapt (>=1.14.0,<2.0
|
|
45
|
+
Requires-Dist: watchdog (>=2.3.1,<5.0)
|
|
46
|
+
Requires-Dist: watchfiles (>=0.19.0,<1.0)
|
|
47
|
+
Requires-Dist: wheel (>=0.42.0,<1.0)
|
|
48
|
+
Requires-Dist: wrapt (>=1.11.0,<2.0) ; python_version < "3.11"
|
|
49
|
+
Requires-Dist: wrapt (>=1.14.0,<2.0) ; python_version >= "3.11"
|
|
48
50
|
Project-URL: Documentation, https://reflex.dev/docs/getting-started/introduction
|
|
49
51
|
Project-URL: Repository, https://github.com/reflex-dev/reflex
|
|
50
52
|
Description-Content-Type: text/markdown
|
|
@@ -256,7 +258,7 @@ You can create a multi-page app by adding more pages.
|
|
|
256
258
|
|
|
257
259
|
<div align="center">
|
|
258
260
|
|
|
259
|
-
📑 [Docs](https://reflex.dev/docs/getting-started/introduction) | 🗞️ [Blog](https://reflex.dev/blog) | 📱 [Component Library](https://reflex.dev/docs/library) | 🖼️ [Gallery](https://reflex.dev/docs/gallery) | 🛸 [Deployment](https://reflex.dev/docs/hosting/deploy)
|
|
261
|
+
📑 [Docs](https://reflex.dev/docs/getting-started/introduction) | 🗞️ [Blog](https://reflex.dev/blog) | 📱 [Component Library](https://reflex.dev/docs/library) | 🖼️ [Gallery](https://reflex.dev/docs/gallery) | 🛸 [Deployment](https://reflex.dev/docs/hosting/deploy-quick-start)
|
|
260
262
|
|
|
261
263
|
</div>
|
|
262
264
|
|