reflex 0.6.8a2__py3-none-any.whl → 0.7.0a2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of reflex might be problematic. Click here for more details.
- reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +1 -1
- reflex/.templates/jinja/web/pages/_app.js.jinja2 +7 -7
- reflex/.templates/jinja/web/pages/utils.js.jinja2 +3 -3
- reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +1 -4
- reflex/.templates/web/utils/state.js +65 -36
- reflex/__init__.py +4 -17
- reflex/__init__.pyi +1 -2
- reflex/app.py +249 -116
- reflex/app_mixins/lifespan.py +9 -9
- reflex/app_mixins/middleware.py +6 -6
- reflex/app_module_for_backend.py +3 -7
- reflex/base.py +7 -7
- reflex/compiler/compiler.py +8 -0
- reflex/compiler/utils.py +35 -6
- reflex/components/base/app_wrap.pyi +16 -16
- reflex/components/base/bare.py +1 -1
- reflex/components/base/body.pyi +16 -16
- reflex/components/base/document.pyi +76 -76
- reflex/components/base/error_boundary.py +2 -1
- reflex/components/base/error_boundary.pyi +19 -22
- reflex/components/base/fragment.pyi +16 -16
- reflex/components/base/head.pyi +31 -31
- reflex/components/base/link.pyi +31 -31
- reflex/components/base/meta.py +2 -2
- reflex/components/base/meta.pyi +61 -61
- reflex/components/base/script.pyi +19 -19
- reflex/components/base/strict_mode.py +10 -0
- reflex/components/base/strict_mode.pyi +57 -0
- reflex/components/component.py +38 -77
- reflex/components/core/banner.py +159 -4
- reflex/components/core/banner.pyi +162 -76
- reflex/components/core/breakpoints.py +3 -1
- reflex/components/core/client_side_routing.py +1 -1
- reflex/components/core/client_side_routing.pyi +32 -32
- reflex/components/core/clipboard.pyi +17 -20
- reflex/components/core/cond.py +9 -10
- reflex/components/core/debounce.py +1 -1
- reflex/components/core/debounce.pyi +17 -17
- reflex/components/core/foreach.py +28 -3
- reflex/components/core/html.py +1 -1
- reflex/components/core/html.pyi +16 -16
- reflex/components/core/match.py +5 -5
- reflex/components/core/sticky.py +160 -0
- reflex/components/core/sticky.pyi +449 -0
- reflex/components/core/upload.py +2 -2
- reflex/components/core/upload.pyi +80 -88
- reflex/components/datadisplay/code.py +5 -14
- reflex/components/datadisplay/code.pyi +31 -31
- reflex/components/datadisplay/dataeditor.py +7 -4
- reflex/components/datadisplay/dataeditor.pyi +40 -54
- reflex/components/datadisplay/logo.py +13 -8
- reflex/components/datadisplay/shiki_code_block.py +14 -9
- reflex/components/datadisplay/shiki_code_block.pyi +46 -46
- reflex/components/dynamic.py +22 -3
- reflex/components/el/constants/reflex.py +1 -1
- reflex/components/el/element.py +1 -1
- reflex/components/el/element.pyi +16 -16
- reflex/components/el/elements/base.pyi +16 -16
- reflex/components/el/elements/forms.py +4 -4
- reflex/components/el/elements/forms.pyi +224 -258
- reflex/components/el/elements/inline.pyi +421 -421
- reflex/components/el/elements/media.pyi +376 -376
- reflex/components/el/elements/metadata.pyi +91 -91
- reflex/components/el/elements/other.pyi +106 -106
- reflex/components/el/elements/scripts.pyi +46 -46
- reflex/components/el/elements/sectioning.pyi +226 -226
- reflex/components/el/elements/tables.pyi +151 -151
- reflex/components/el/elements/typography.pyi +226 -226
- reflex/components/gridjs/datatable.pyi +31 -31
- reflex/components/lucide/icon.py +46 -8
- reflex/components/lucide/icon.pyi +85 -31
- reflex/components/markdown/markdown.py +10 -8
- reflex/components/markdown/markdown.pyi +16 -16
- reflex/components/moment/moment.py +2 -2
- reflex/components/moment/moment.pyi +17 -19
- reflex/components/next/base.pyi +16 -16
- reflex/components/next/image.py +16 -4
- reflex/components/next/image.pyi +22 -20
- reflex/components/next/link.py +1 -1
- reflex/components/next/link.pyi +16 -16
- reflex/components/next/video.pyi +16 -16
- reflex/components/plotly/plotly.py +5 -5
- reflex/components/plotly/plotly.pyi +34 -44
- reflex/components/props.py +3 -3
- reflex/components/radix/__init__.pyi +1 -1
- reflex/components/radix/primitives/accordion.py +9 -5
- reflex/components/radix/primitives/accordion.pyi +110 -108
- reflex/components/radix/primitives/base.pyi +31 -31
- reflex/components/radix/primitives/drawer.py +5 -2
- reflex/components/radix/primitives/drawer.pyi +179 -187
- reflex/components/radix/primitives/form.pyi +160 -172
- reflex/components/radix/primitives/progress.py +1 -1
- reflex/components/radix/primitives/progress.pyi +76 -76
- reflex/components/radix/primitives/slider.py +1 -1
- reflex/components/radix/primitives/slider.pyi +78 -82
- reflex/components/radix/themes/base.pyi +121 -121
- reflex/components/radix/themes/color_mode.py +11 -9
- reflex/components/radix/themes/color_mode.pyi +47 -49
- reflex/components/radix/themes/components/alert_dialog.py +3 -0
- reflex/components/radix/themes/components/alert_dialog.pyi +110 -112
- reflex/components/radix/themes/components/aspect_ratio.pyi +16 -16
- reflex/components/radix/themes/components/avatar.pyi +16 -16
- reflex/components/radix/themes/components/badge.pyi +16 -16
- reflex/components/radix/themes/components/button.pyi +16 -16
- reflex/components/radix/themes/components/callout.pyi +76 -76
- reflex/components/radix/themes/components/card.py +1 -1
- reflex/components/radix/themes/components/card.pyi +17 -17
- reflex/components/radix/themes/components/checkbox.pyi +49 -55
- reflex/components/radix/themes/components/checkbox_cards.pyi +31 -31
- reflex/components/radix/themes/components/checkbox_group.pyi +31 -31
- reflex/components/radix/themes/components/context_menu.py +5 -0
- reflex/components/radix/themes/components/context_menu.pyi +149 -155
- reflex/components/radix/themes/components/data_list.pyi +61 -61
- reflex/components/radix/themes/components/dialog.py +3 -0
- reflex/components/radix/themes/components/dialog.pyi +113 -117
- reflex/components/radix/themes/components/dropdown_menu.py +5 -0
- reflex/components/radix/themes/components/dropdown_menu.pyi +133 -137
- reflex/components/radix/themes/components/hover_card.py +3 -0
- reflex/components/radix/themes/components/hover_card.pyi +63 -67
- reflex/components/radix/themes/components/icon_button.py +2 -2
- reflex/components/radix/themes/components/icon_button.pyi +17 -16
- reflex/components/radix/themes/components/inset.pyi +16 -16
- reflex/components/radix/themes/components/popover.py +3 -0
- reflex/components/radix/themes/components/popover.pyi +68 -70
- reflex/components/radix/themes/components/progress.pyi +16 -16
- reflex/components/radix/themes/components/radio.pyi +16 -16
- reflex/components/radix/themes/components/radio_cards.py +2 -0
- reflex/components/radix/themes/components/radio_cards.pyi +32 -34
- reflex/components/radix/themes/components/radio_group.py +1 -1
- reflex/components/radix/themes/components/radio_group.pyi +62 -64
- reflex/components/radix/themes/components/scroll_area.pyi +16 -16
- reflex/components/radix/themes/components/segmented_control.pyi +32 -35
- reflex/components/radix/themes/components/select.py +4 -0
- reflex/components/radix/themes/components/select.pyi +145 -157
- reflex/components/radix/themes/components/separator.pyi +16 -16
- reflex/components/radix/themes/components/skeleton.py +3 -0
- reflex/components/radix/themes/components/skeleton.pyi +16 -16
- reflex/components/radix/themes/components/slider.pyi +22 -28
- reflex/components/radix/themes/components/spinner.pyi +16 -16
- reflex/components/radix/themes/components/switch.pyi +17 -19
- reflex/components/radix/themes/components/table.pyi +106 -106
- reflex/components/radix/themes/components/tabs.py +3 -0
- reflex/components/radix/themes/components/tabs.pyi +78 -82
- reflex/components/radix/themes/components/text_area.py +12 -0
- reflex/components/radix/themes/components/text_area.pyi +21 -33
- reflex/components/radix/themes/components/text_field.py +1 -1
- reflex/components/radix/themes/components/text_field.pyi +52 -80
- reflex/components/radix/themes/components/tooltip.py +6 -1
- reflex/components/radix/themes/components/tooltip.pyi +20 -21
- reflex/components/radix/themes/layout/__init__.pyi +1 -1
- reflex/components/radix/themes/layout/base.pyi +16 -16
- reflex/components/radix/themes/layout/box.pyi +16 -16
- reflex/components/radix/themes/layout/center.pyi +16 -16
- reflex/components/radix/themes/layout/container.pyi +16 -16
- reflex/components/radix/themes/layout/flex.pyi +16 -16
- reflex/components/radix/themes/layout/grid.pyi +16 -16
- reflex/components/radix/themes/layout/list.py +2 -2
- reflex/components/radix/themes/layout/list.pyi +76 -76
- reflex/components/radix/themes/layout/section.pyi +16 -16
- reflex/components/radix/themes/layout/spacer.pyi +16 -16
- reflex/components/radix/themes/layout/stack.py +2 -2
- reflex/components/radix/themes/layout/stack.pyi +46 -46
- reflex/components/radix/themes/typography/blockquote.pyi +16 -16
- reflex/components/radix/themes/typography/code.pyi +16 -16
- reflex/components/radix/themes/typography/heading.pyi +16 -16
- reflex/components/radix/themes/typography/link.py +1 -1
- reflex/components/radix/themes/typography/link.pyi +16 -16
- reflex/components/radix/themes/typography/text.py +2 -2
- reflex/components/radix/themes/typography/text.pyi +106 -106
- reflex/components/react_player/audio.pyi +33 -39
- reflex/components/react_player/react_player.py +1 -1
- reflex/components/react_player/react_player.pyi +32 -38
- reflex/components/react_player/video.pyi +33 -39
- reflex/components/recharts/__init__.py +2 -0
- reflex/components/recharts/__init__.pyi +2 -0
- reflex/components/recharts/cartesian.pyi +282 -282
- reflex/components/recharts/charts.py +15 -15
- reflex/components/recharts/charts.pyi +164 -164
- reflex/components/recharts/general.py +19 -4
- reflex/components/recharts/general.pyi +132 -81
- reflex/components/recharts/polar.py +2 -2
- reflex/components/recharts/polar.pyi +55 -55
- reflex/components/recharts/recharts.py +4 -4
- reflex/components/recharts/recharts.pyi +31 -31
- reflex/components/sonner/toast.py +15 -13
- reflex/components/sonner/toast.pyi +22 -22
- reflex/components/suneditor/editor.py +6 -4
- reflex/components/suneditor/editor.pyi +26 -40
- reflex/components/tags/iter_tag.py +3 -3
- reflex/components/tags/tag.py +25 -3
- reflex/config.py +48 -15
- reflex/constants/__init__.py +1 -0
- reflex/constants/base.py +4 -1
- reflex/constants/compiler.py +5 -2
- reflex/constants/config.py +8 -1
- reflex/constants/installer.py +9 -9
- reflex/constants/style.py +1 -1
- reflex/custom_components/custom_components.py +9 -7
- reflex/event.py +215 -208
- reflex/experimental/__init__.py +19 -11
- reflex/experimental/client_state.py +53 -28
- reflex/experimental/hooks.py +5 -5
- reflex/experimental/layout.py +8 -5
- reflex/experimental/layout.pyi +79 -83
- reflex/experimental/misc.py +3 -3
- reflex/istate/wrappers.py +1 -1
- reflex/middleware/hydrate_middleware.py +2 -2
- reflex/model.py +11 -6
- reflex/page.py +5 -5
- reflex/reflex.py +90 -19
- reflex/route.py +1 -1
- reflex/state.py +358 -401
- reflex/style.py +27 -3
- reflex/testing.py +29 -23
- reflex/utils/build.py +6 -2
- reflex/utils/codespaces.py +1 -4
- reflex/utils/compat.py +6 -5
- reflex/utils/console.py +52 -16
- reflex/utils/exceptions.py +89 -26
- reflex/utils/exec.py +69 -74
- reflex/utils/export.py +6 -1
- reflex/utils/format.py +8 -40
- reflex/utils/imports.py +2 -2
- reflex/utils/lazy_loader.py +7 -1
- reflex/utils/path_ops.py +28 -14
- reflex/utils/prerequisites.py +326 -67
- reflex/utils/processes.py +45 -32
- reflex/utils/pyi_generator.py +39 -33
- reflex/utils/registry.py +4 -4
- reflex/utils/serializers.py +1 -1
- reflex/utils/telemetry.py +5 -4
- reflex/utils/types.py +42 -18
- reflex/vars/base.py +656 -333
- reflex/vars/datetime.py +6 -7
- reflex/vars/dep_tracking.py +344 -0
- reflex/vars/function.py +11 -5
- reflex/vars/number.py +31 -43
- reflex/vars/object.py +63 -62
- reflex/vars/sequence.py +79 -67
- {reflex-0.6.8a2.dist-info → reflex-0.7.0a2.dist-info}/METADATA +7 -8
- reflex-0.7.0a2.dist-info/RECORD +401 -0
- {reflex-0.6.8a2.dist-info → reflex-0.7.0a2.dist-info}/WHEEL +1 -1
- reflex/experimental/assets.py +0 -37
- reflex-0.6.8a2.dist-info/RECORD +0 -397
- {reflex-0.6.8a2.dist-info → reflex-0.7.0a2.dist-info}/LICENSE +0 -0
- {reflex-0.6.8a2.dist-info → reflex-0.7.0a2.dist-info}/entry_points.txt +0 -0
reflex/components/core/html.py
CHANGED
reflex/components/core/html.pyi
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from typing import Any, Dict, Optional, Union, overload
|
|
7
7
|
|
|
8
8
|
from reflex.components.el.elements.typography import Div
|
|
9
|
-
from reflex.event import
|
|
9
|
+
from reflex.event import EventType
|
|
10
10
|
from reflex.style import Style
|
|
11
11
|
from reflex.vars.base import Var
|
|
12
12
|
|
|
@@ -49,21 +49,21 @@ class Html(Div):
|
|
|
49
49
|
class_name: Optional[Any] = None,
|
|
50
50
|
autofocus: Optional[bool] = None,
|
|
51
51
|
custom_attrs: Optional[Dict[str, Union[Var, Any]]] = None,
|
|
52
|
-
on_blur: Optional[EventType[
|
|
53
|
-
on_click: Optional[EventType[
|
|
54
|
-
on_context_menu: Optional[EventType[
|
|
55
|
-
on_double_click: Optional[EventType[
|
|
56
|
-
on_focus: Optional[EventType[
|
|
57
|
-
on_mount: Optional[EventType[
|
|
58
|
-
on_mouse_down: Optional[EventType[
|
|
59
|
-
on_mouse_enter: Optional[EventType[
|
|
60
|
-
on_mouse_leave: Optional[EventType[
|
|
61
|
-
on_mouse_move: Optional[EventType[
|
|
62
|
-
on_mouse_out: Optional[EventType[
|
|
63
|
-
on_mouse_over: Optional[EventType[
|
|
64
|
-
on_mouse_up: Optional[EventType[
|
|
65
|
-
on_scroll: Optional[EventType[
|
|
66
|
-
on_unmount: Optional[EventType[
|
|
52
|
+
on_blur: Optional[EventType[()]] = None,
|
|
53
|
+
on_click: Optional[EventType[()]] = None,
|
|
54
|
+
on_context_menu: Optional[EventType[()]] = None,
|
|
55
|
+
on_double_click: Optional[EventType[()]] = None,
|
|
56
|
+
on_focus: Optional[EventType[()]] = None,
|
|
57
|
+
on_mount: Optional[EventType[()]] = None,
|
|
58
|
+
on_mouse_down: Optional[EventType[()]] = None,
|
|
59
|
+
on_mouse_enter: Optional[EventType[()]] = None,
|
|
60
|
+
on_mouse_leave: Optional[EventType[()]] = None,
|
|
61
|
+
on_mouse_move: Optional[EventType[()]] = None,
|
|
62
|
+
on_mouse_out: Optional[EventType[()]] = None,
|
|
63
|
+
on_mouse_over: Optional[EventType[()]] = None,
|
|
64
|
+
on_mouse_up: Optional[EventType[()]] = None,
|
|
65
|
+
on_scroll: Optional[EventType[()]] = None,
|
|
66
|
+
on_unmount: Optional[EventType[()]] = None,
|
|
67
67
|
**props,
|
|
68
68
|
) -> "Html":
|
|
69
69
|
"""Create a html component.
|
reflex/components/core/match.py
CHANGED
|
@@ -109,7 +109,7 @@ class Match(MemoizationLeaf):
|
|
|
109
109
|
return cases, default
|
|
110
110
|
|
|
111
111
|
@classmethod
|
|
112
|
-
def _create_case_var_with_var_data(cls, case_element):
|
|
112
|
+
def _create_case_var_with_var_data(cls, case_element: Any) -> Var:
|
|
113
113
|
"""Convert a case element into a Var.If the case
|
|
114
114
|
is a Style type, we extract the var data and merge it with the
|
|
115
115
|
newly created Var.
|
|
@@ -222,7 +222,7 @@ class Match(MemoizationLeaf):
|
|
|
222
222
|
cond=match_cond_var,
|
|
223
223
|
match_cases=match_cases,
|
|
224
224
|
default=default,
|
|
225
|
-
children=[case[-1] for case in match_cases] + [default], #
|
|
225
|
+
children=[case[-1] for case in match_cases] + [default], # pyright: ignore [reportArgumentType]
|
|
226
226
|
)
|
|
227
227
|
)
|
|
228
228
|
|
|
@@ -236,13 +236,13 @@ class Match(MemoizationLeaf):
|
|
|
236
236
|
_js_expr=format.format_match(
|
|
237
237
|
cond=str(match_cond_var),
|
|
238
238
|
match_cases=match_cases,
|
|
239
|
-
default=default, #
|
|
239
|
+
default=default, # pyright: ignore [reportArgumentType]
|
|
240
240
|
),
|
|
241
|
-
_var_type=default._var_type, #
|
|
241
|
+
_var_type=default._var_type, # pyright: ignore [reportAttributeAccessIssue,reportOptionalMemberAccess]
|
|
242
242
|
_var_data=VarData.merge(
|
|
243
243
|
match_cond_var._get_all_var_data(),
|
|
244
244
|
*[el._get_all_var_data() for case in match_cases for el in case],
|
|
245
|
-
default._get_all_var_data(), #
|
|
245
|
+
default._get_all_var_data(), # pyright: ignore [reportAttributeAccessIssue, reportOptionalMemberAccess]
|
|
246
246
|
),
|
|
247
247
|
)
|
|
248
248
|
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"""Components for displaying the Reflex sticky logo."""
|
|
2
|
+
|
|
3
|
+
from reflex.components.component import ComponentNamespace
|
|
4
|
+
from reflex.components.core.colors import color
|
|
5
|
+
from reflex.components.core.cond import color_mode_cond, cond
|
|
6
|
+
from reflex.components.core.responsive import tablet_and_desktop
|
|
7
|
+
from reflex.components.el.elements.inline import A
|
|
8
|
+
from reflex.components.el.elements.media import Path, Rect, Svg
|
|
9
|
+
from reflex.components.radix.themes.typography.text import Text
|
|
10
|
+
from reflex.experimental.client_state import ClientStateVar
|
|
11
|
+
from reflex.style import Style
|
|
12
|
+
from reflex.vars.base import Var, VarData
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class StickyLogo(Svg):
|
|
16
|
+
"""A simple Reflex logo SVG with only the letter R."""
|
|
17
|
+
|
|
18
|
+
@classmethod
|
|
19
|
+
def create(cls):
|
|
20
|
+
"""Create the simple Reflex logo SVG.
|
|
21
|
+
|
|
22
|
+
Returns:
|
|
23
|
+
The simple Reflex logo SVG.
|
|
24
|
+
"""
|
|
25
|
+
return super().create(
|
|
26
|
+
Rect.create(width="16", height="16", rx="2", fill="#6E56CF"),
|
|
27
|
+
Path.create(d="M10 9V13H12V9H10Z", fill="white"),
|
|
28
|
+
Path.create(d="M4 3V13H6V9H10V7H6V5H10V7H12V3H4Z", fill="white"),
|
|
29
|
+
width="16",
|
|
30
|
+
height="16",
|
|
31
|
+
viewBox="0 0 16 16",
|
|
32
|
+
xmlns="http://www.w3.org/2000/svg",
|
|
33
|
+
)
|
|
34
|
+
|
|
35
|
+
def add_style(self):
|
|
36
|
+
"""Add the style to the component.
|
|
37
|
+
|
|
38
|
+
Returns:
|
|
39
|
+
The style of the component.
|
|
40
|
+
"""
|
|
41
|
+
return Style(
|
|
42
|
+
{
|
|
43
|
+
"fill": "white",
|
|
44
|
+
}
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class StickyLabel(Text):
|
|
49
|
+
"""A label that displays the Reflex sticky."""
|
|
50
|
+
|
|
51
|
+
@classmethod
|
|
52
|
+
def create(cls):
|
|
53
|
+
"""Create the sticky label.
|
|
54
|
+
|
|
55
|
+
Returns:
|
|
56
|
+
The sticky label.
|
|
57
|
+
"""
|
|
58
|
+
return super().create("Built with Reflex")
|
|
59
|
+
|
|
60
|
+
def add_style(self):
|
|
61
|
+
"""Add the style to the component.
|
|
62
|
+
|
|
63
|
+
Returns:
|
|
64
|
+
The style of the component.
|
|
65
|
+
"""
|
|
66
|
+
return Style(
|
|
67
|
+
{
|
|
68
|
+
"color": color("slate", 1),
|
|
69
|
+
"font_weight": "600",
|
|
70
|
+
"font_family": "'Instrument Sans', sans-serif",
|
|
71
|
+
"font_size": "0.875rem",
|
|
72
|
+
"line_height": "1rem",
|
|
73
|
+
"letter_spacing": "-0.00656rem",
|
|
74
|
+
}
|
|
75
|
+
)
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
class StickyBadge(A):
|
|
79
|
+
"""A badge that displays the Reflex sticky logo."""
|
|
80
|
+
|
|
81
|
+
@classmethod
|
|
82
|
+
def create(cls):
|
|
83
|
+
"""Create the sticky badge.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
The sticky badge.
|
|
87
|
+
"""
|
|
88
|
+
return super().create(
|
|
89
|
+
StickyLogo.create(),
|
|
90
|
+
tablet_and_desktop(StickyLabel.create()),
|
|
91
|
+
href="https://reflex.dev",
|
|
92
|
+
target="_blank",
|
|
93
|
+
width="auto",
|
|
94
|
+
padding="0.375rem",
|
|
95
|
+
align="center",
|
|
96
|
+
text_align="center",
|
|
97
|
+
)
|
|
98
|
+
|
|
99
|
+
def add_style(self):
|
|
100
|
+
"""Add the style to the component.
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
The style of the component.
|
|
104
|
+
"""
|
|
105
|
+
is_localhost_cs = ClientStateVar.create(
|
|
106
|
+
"is_localhost",
|
|
107
|
+
default=True,
|
|
108
|
+
global_ref=False,
|
|
109
|
+
)
|
|
110
|
+
localhost_hostnames = Var.create(
|
|
111
|
+
["localhost", "127.0.0.1", "[::1]"]
|
|
112
|
+
).guess_type()
|
|
113
|
+
is_localhost_expr = localhost_hostnames.contains(
|
|
114
|
+
Var("window.location.hostname", _var_type=str).guess_type(),
|
|
115
|
+
)
|
|
116
|
+
check_is_localhost = Var(
|
|
117
|
+
f"useEffect(({is_localhost_cs}) => {is_localhost_cs.set}({is_localhost_expr}), [])",
|
|
118
|
+
_var_data=VarData(
|
|
119
|
+
imports={"react": "useEffect"},
|
|
120
|
+
),
|
|
121
|
+
)
|
|
122
|
+
is_localhost = is_localhost_cs.value._replace(
|
|
123
|
+
merge_var_data=VarData.merge(
|
|
124
|
+
check_is_localhost._get_all_var_data(),
|
|
125
|
+
VarData(hooks={str(check_is_localhost): None}),
|
|
126
|
+
),
|
|
127
|
+
)
|
|
128
|
+
return Style(
|
|
129
|
+
{
|
|
130
|
+
"position": "fixed",
|
|
131
|
+
"bottom": "1rem",
|
|
132
|
+
"right": "1rem",
|
|
133
|
+
# Do not show the badge on localhost.
|
|
134
|
+
"display": cond(is_localhost, "none", "flex"),
|
|
135
|
+
"flex-direction": "row",
|
|
136
|
+
"gap": "0.375rem",
|
|
137
|
+
"align-items": "center",
|
|
138
|
+
"width": "auto",
|
|
139
|
+
"border-radius": "0.5rem",
|
|
140
|
+
"color": color_mode_cond("#E5E7EB", "#27282B"),
|
|
141
|
+
"border": color_mode_cond("1px solid #27282B", "1px solid #E5E7EB"),
|
|
142
|
+
"background-color": color_mode_cond("#151618", "#FCFCFD"),
|
|
143
|
+
"padding": "0.375rem",
|
|
144
|
+
"transition": "background-color 0.2s ease-in-out",
|
|
145
|
+
"box-shadow": "0 1px 2px 0 rgba(0, 0, 0, 0.05)",
|
|
146
|
+
"z-index": "9998",
|
|
147
|
+
"cursor": "pointer",
|
|
148
|
+
},
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
class StickyNamespace(ComponentNamespace):
|
|
153
|
+
"""Sticky components namespace."""
|
|
154
|
+
|
|
155
|
+
__call__ = staticmethod(StickyBadge.create)
|
|
156
|
+
label = staticmethod(StickyLabel.create)
|
|
157
|
+
logo = staticmethod(StickyLogo.create)
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
sticky = StickyNamespace()
|