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.

Files changed (246) hide show
  1. reflex/.templates/jinja/custom_components/pyproject.toml.jinja2 +1 -1
  2. reflex/.templates/jinja/web/pages/_app.js.jinja2 +7 -7
  3. reflex/.templates/jinja/web/pages/utils.js.jinja2 +3 -3
  4. reflex/.templates/web/components/reflex/radix_themes_color_mode_provider.js +1 -4
  5. reflex/.templates/web/utils/state.js +65 -36
  6. reflex/__init__.py +4 -17
  7. reflex/__init__.pyi +1 -2
  8. reflex/app.py +249 -116
  9. reflex/app_mixins/lifespan.py +9 -9
  10. reflex/app_mixins/middleware.py +6 -6
  11. reflex/app_module_for_backend.py +3 -7
  12. reflex/base.py +7 -7
  13. reflex/compiler/compiler.py +8 -0
  14. reflex/compiler/utils.py +35 -6
  15. reflex/components/base/app_wrap.pyi +16 -16
  16. reflex/components/base/bare.py +1 -1
  17. reflex/components/base/body.pyi +16 -16
  18. reflex/components/base/document.pyi +76 -76
  19. reflex/components/base/error_boundary.py +2 -1
  20. reflex/components/base/error_boundary.pyi +19 -22
  21. reflex/components/base/fragment.pyi +16 -16
  22. reflex/components/base/head.pyi +31 -31
  23. reflex/components/base/link.pyi +31 -31
  24. reflex/components/base/meta.py +2 -2
  25. reflex/components/base/meta.pyi +61 -61
  26. reflex/components/base/script.pyi +19 -19
  27. reflex/components/base/strict_mode.py +10 -0
  28. reflex/components/base/strict_mode.pyi +57 -0
  29. reflex/components/component.py +38 -77
  30. reflex/components/core/banner.py +159 -4
  31. reflex/components/core/banner.pyi +162 -76
  32. reflex/components/core/breakpoints.py +3 -1
  33. reflex/components/core/client_side_routing.py +1 -1
  34. reflex/components/core/client_side_routing.pyi +32 -32
  35. reflex/components/core/clipboard.pyi +17 -20
  36. reflex/components/core/cond.py +9 -10
  37. reflex/components/core/debounce.py +1 -1
  38. reflex/components/core/debounce.pyi +17 -17
  39. reflex/components/core/foreach.py +28 -3
  40. reflex/components/core/html.py +1 -1
  41. reflex/components/core/html.pyi +16 -16
  42. reflex/components/core/match.py +5 -5
  43. reflex/components/core/sticky.py +160 -0
  44. reflex/components/core/sticky.pyi +449 -0
  45. reflex/components/core/upload.py +2 -2
  46. reflex/components/core/upload.pyi +80 -88
  47. reflex/components/datadisplay/code.py +5 -14
  48. reflex/components/datadisplay/code.pyi +31 -31
  49. reflex/components/datadisplay/dataeditor.py +7 -4
  50. reflex/components/datadisplay/dataeditor.pyi +40 -54
  51. reflex/components/datadisplay/logo.py +13 -8
  52. reflex/components/datadisplay/shiki_code_block.py +14 -9
  53. reflex/components/datadisplay/shiki_code_block.pyi +46 -46
  54. reflex/components/dynamic.py +22 -3
  55. reflex/components/el/constants/reflex.py +1 -1
  56. reflex/components/el/element.py +1 -1
  57. reflex/components/el/element.pyi +16 -16
  58. reflex/components/el/elements/base.pyi +16 -16
  59. reflex/components/el/elements/forms.py +4 -4
  60. reflex/components/el/elements/forms.pyi +224 -258
  61. reflex/components/el/elements/inline.pyi +421 -421
  62. reflex/components/el/elements/media.pyi +376 -376
  63. reflex/components/el/elements/metadata.pyi +91 -91
  64. reflex/components/el/elements/other.pyi +106 -106
  65. reflex/components/el/elements/scripts.pyi +46 -46
  66. reflex/components/el/elements/sectioning.pyi +226 -226
  67. reflex/components/el/elements/tables.pyi +151 -151
  68. reflex/components/el/elements/typography.pyi +226 -226
  69. reflex/components/gridjs/datatable.pyi +31 -31
  70. reflex/components/lucide/icon.py +46 -8
  71. reflex/components/lucide/icon.pyi +85 -31
  72. reflex/components/markdown/markdown.py +10 -8
  73. reflex/components/markdown/markdown.pyi +16 -16
  74. reflex/components/moment/moment.py +2 -2
  75. reflex/components/moment/moment.pyi +17 -19
  76. reflex/components/next/base.pyi +16 -16
  77. reflex/components/next/image.py +16 -4
  78. reflex/components/next/image.pyi +22 -20
  79. reflex/components/next/link.py +1 -1
  80. reflex/components/next/link.pyi +16 -16
  81. reflex/components/next/video.pyi +16 -16
  82. reflex/components/plotly/plotly.py +5 -5
  83. reflex/components/plotly/plotly.pyi +34 -44
  84. reflex/components/props.py +3 -3
  85. reflex/components/radix/__init__.pyi +1 -1
  86. reflex/components/radix/primitives/accordion.py +9 -5
  87. reflex/components/radix/primitives/accordion.pyi +110 -108
  88. reflex/components/radix/primitives/base.pyi +31 -31
  89. reflex/components/radix/primitives/drawer.py +5 -2
  90. reflex/components/radix/primitives/drawer.pyi +179 -187
  91. reflex/components/radix/primitives/form.pyi +160 -172
  92. reflex/components/radix/primitives/progress.py +1 -1
  93. reflex/components/radix/primitives/progress.pyi +76 -76
  94. reflex/components/radix/primitives/slider.py +1 -1
  95. reflex/components/radix/primitives/slider.pyi +78 -82
  96. reflex/components/radix/themes/base.pyi +121 -121
  97. reflex/components/radix/themes/color_mode.py +11 -9
  98. reflex/components/radix/themes/color_mode.pyi +47 -49
  99. reflex/components/radix/themes/components/alert_dialog.py +3 -0
  100. reflex/components/radix/themes/components/alert_dialog.pyi +110 -112
  101. reflex/components/radix/themes/components/aspect_ratio.pyi +16 -16
  102. reflex/components/radix/themes/components/avatar.pyi +16 -16
  103. reflex/components/radix/themes/components/badge.pyi +16 -16
  104. reflex/components/radix/themes/components/button.pyi +16 -16
  105. reflex/components/radix/themes/components/callout.pyi +76 -76
  106. reflex/components/radix/themes/components/card.py +1 -1
  107. reflex/components/radix/themes/components/card.pyi +17 -17
  108. reflex/components/radix/themes/components/checkbox.pyi +49 -55
  109. reflex/components/radix/themes/components/checkbox_cards.pyi +31 -31
  110. reflex/components/radix/themes/components/checkbox_group.pyi +31 -31
  111. reflex/components/radix/themes/components/context_menu.py +5 -0
  112. reflex/components/radix/themes/components/context_menu.pyi +149 -155
  113. reflex/components/radix/themes/components/data_list.pyi +61 -61
  114. reflex/components/radix/themes/components/dialog.py +3 -0
  115. reflex/components/radix/themes/components/dialog.pyi +113 -117
  116. reflex/components/radix/themes/components/dropdown_menu.py +5 -0
  117. reflex/components/radix/themes/components/dropdown_menu.pyi +133 -137
  118. reflex/components/radix/themes/components/hover_card.py +3 -0
  119. reflex/components/radix/themes/components/hover_card.pyi +63 -67
  120. reflex/components/radix/themes/components/icon_button.py +2 -2
  121. reflex/components/radix/themes/components/icon_button.pyi +17 -16
  122. reflex/components/radix/themes/components/inset.pyi +16 -16
  123. reflex/components/radix/themes/components/popover.py +3 -0
  124. reflex/components/radix/themes/components/popover.pyi +68 -70
  125. reflex/components/radix/themes/components/progress.pyi +16 -16
  126. reflex/components/radix/themes/components/radio.pyi +16 -16
  127. reflex/components/radix/themes/components/radio_cards.py +2 -0
  128. reflex/components/radix/themes/components/radio_cards.pyi +32 -34
  129. reflex/components/radix/themes/components/radio_group.py +1 -1
  130. reflex/components/radix/themes/components/radio_group.pyi +62 -64
  131. reflex/components/radix/themes/components/scroll_area.pyi +16 -16
  132. reflex/components/radix/themes/components/segmented_control.pyi +32 -35
  133. reflex/components/radix/themes/components/select.py +4 -0
  134. reflex/components/radix/themes/components/select.pyi +145 -157
  135. reflex/components/radix/themes/components/separator.pyi +16 -16
  136. reflex/components/radix/themes/components/skeleton.py +3 -0
  137. reflex/components/radix/themes/components/skeleton.pyi +16 -16
  138. reflex/components/radix/themes/components/slider.pyi +22 -28
  139. reflex/components/radix/themes/components/spinner.pyi +16 -16
  140. reflex/components/radix/themes/components/switch.pyi +17 -19
  141. reflex/components/radix/themes/components/table.pyi +106 -106
  142. reflex/components/radix/themes/components/tabs.py +3 -0
  143. reflex/components/radix/themes/components/tabs.pyi +78 -82
  144. reflex/components/radix/themes/components/text_area.py +12 -0
  145. reflex/components/radix/themes/components/text_area.pyi +21 -33
  146. reflex/components/radix/themes/components/text_field.py +1 -1
  147. reflex/components/radix/themes/components/text_field.pyi +52 -80
  148. reflex/components/radix/themes/components/tooltip.py +6 -1
  149. reflex/components/radix/themes/components/tooltip.pyi +20 -21
  150. reflex/components/radix/themes/layout/__init__.pyi +1 -1
  151. reflex/components/radix/themes/layout/base.pyi +16 -16
  152. reflex/components/radix/themes/layout/box.pyi +16 -16
  153. reflex/components/radix/themes/layout/center.pyi +16 -16
  154. reflex/components/radix/themes/layout/container.pyi +16 -16
  155. reflex/components/radix/themes/layout/flex.pyi +16 -16
  156. reflex/components/radix/themes/layout/grid.pyi +16 -16
  157. reflex/components/radix/themes/layout/list.py +2 -2
  158. reflex/components/radix/themes/layout/list.pyi +76 -76
  159. reflex/components/radix/themes/layout/section.pyi +16 -16
  160. reflex/components/radix/themes/layout/spacer.pyi +16 -16
  161. reflex/components/radix/themes/layout/stack.py +2 -2
  162. reflex/components/radix/themes/layout/stack.pyi +46 -46
  163. reflex/components/radix/themes/typography/blockquote.pyi +16 -16
  164. reflex/components/radix/themes/typography/code.pyi +16 -16
  165. reflex/components/radix/themes/typography/heading.pyi +16 -16
  166. reflex/components/radix/themes/typography/link.py +1 -1
  167. reflex/components/radix/themes/typography/link.pyi +16 -16
  168. reflex/components/radix/themes/typography/text.py +2 -2
  169. reflex/components/radix/themes/typography/text.pyi +106 -106
  170. reflex/components/react_player/audio.pyi +33 -39
  171. reflex/components/react_player/react_player.py +1 -1
  172. reflex/components/react_player/react_player.pyi +32 -38
  173. reflex/components/react_player/video.pyi +33 -39
  174. reflex/components/recharts/__init__.py +2 -0
  175. reflex/components/recharts/__init__.pyi +2 -0
  176. reflex/components/recharts/cartesian.pyi +282 -282
  177. reflex/components/recharts/charts.py +15 -15
  178. reflex/components/recharts/charts.pyi +164 -164
  179. reflex/components/recharts/general.py +19 -4
  180. reflex/components/recharts/general.pyi +132 -81
  181. reflex/components/recharts/polar.py +2 -2
  182. reflex/components/recharts/polar.pyi +55 -55
  183. reflex/components/recharts/recharts.py +4 -4
  184. reflex/components/recharts/recharts.pyi +31 -31
  185. reflex/components/sonner/toast.py +15 -13
  186. reflex/components/sonner/toast.pyi +22 -22
  187. reflex/components/suneditor/editor.py +6 -4
  188. reflex/components/suneditor/editor.pyi +26 -40
  189. reflex/components/tags/iter_tag.py +3 -3
  190. reflex/components/tags/tag.py +25 -3
  191. reflex/config.py +48 -15
  192. reflex/constants/__init__.py +1 -0
  193. reflex/constants/base.py +4 -1
  194. reflex/constants/compiler.py +5 -2
  195. reflex/constants/config.py +8 -1
  196. reflex/constants/installer.py +9 -9
  197. reflex/constants/style.py +1 -1
  198. reflex/custom_components/custom_components.py +9 -7
  199. reflex/event.py +215 -208
  200. reflex/experimental/__init__.py +19 -11
  201. reflex/experimental/client_state.py +53 -28
  202. reflex/experimental/hooks.py +5 -5
  203. reflex/experimental/layout.py +8 -5
  204. reflex/experimental/layout.pyi +79 -83
  205. reflex/experimental/misc.py +3 -3
  206. reflex/istate/wrappers.py +1 -1
  207. reflex/middleware/hydrate_middleware.py +2 -2
  208. reflex/model.py +11 -6
  209. reflex/page.py +5 -5
  210. reflex/reflex.py +90 -19
  211. reflex/route.py +1 -1
  212. reflex/state.py +358 -401
  213. reflex/style.py +27 -3
  214. reflex/testing.py +29 -23
  215. reflex/utils/build.py +6 -2
  216. reflex/utils/codespaces.py +1 -4
  217. reflex/utils/compat.py +6 -5
  218. reflex/utils/console.py +52 -16
  219. reflex/utils/exceptions.py +89 -26
  220. reflex/utils/exec.py +69 -74
  221. reflex/utils/export.py +6 -1
  222. reflex/utils/format.py +8 -40
  223. reflex/utils/imports.py +2 -2
  224. reflex/utils/lazy_loader.py +7 -1
  225. reflex/utils/path_ops.py +28 -14
  226. reflex/utils/prerequisites.py +326 -67
  227. reflex/utils/processes.py +45 -32
  228. reflex/utils/pyi_generator.py +39 -33
  229. reflex/utils/registry.py +4 -4
  230. reflex/utils/serializers.py +1 -1
  231. reflex/utils/telemetry.py +5 -4
  232. reflex/utils/types.py +42 -18
  233. reflex/vars/base.py +656 -333
  234. reflex/vars/datetime.py +6 -7
  235. reflex/vars/dep_tracking.py +344 -0
  236. reflex/vars/function.py +11 -5
  237. reflex/vars/number.py +31 -43
  238. reflex/vars/object.py +63 -62
  239. reflex/vars/sequence.py +79 -67
  240. {reflex-0.6.8a2.dist-info → reflex-0.7.0a2.dist-info}/METADATA +7 -8
  241. reflex-0.7.0a2.dist-info/RECORD +401 -0
  242. {reflex-0.6.8a2.dist-info → reflex-0.7.0a2.dist-info}/WHEEL +1 -1
  243. reflex/experimental/assets.py +0 -37
  244. reflex-0.6.8a2.dist-info/RECORD +0 -397
  245. {reflex-0.6.8a2.dist-info → reflex-0.7.0a2.dist-info}/LICENSE +0 -0
  246. {reflex-0.6.8a2.dist-info → reflex-0.7.0a2.dist-info}/entry_points.txt +0 -0
@@ -14,7 +14,7 @@ class Html(Div):
14
14
  """
15
15
 
16
16
  # The HTML to render.
17
- dangerouslySetInnerHTML: Var[Dict[str, str]]
17
+ dangerouslySetInnerHTML: Var[Dict[str, str]] # noqa: N815
18
18
 
19
19
  @classmethod
20
20
  def create(cls, *children, **props):
@@ -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 BASE_STATE, EventType
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[[], BASE_STATE]] = None,
53
- on_click: Optional[EventType[[], BASE_STATE]] = None,
54
- on_context_menu: Optional[EventType[[], BASE_STATE]] = None,
55
- on_double_click: Optional[EventType[[], BASE_STATE]] = None,
56
- on_focus: Optional[EventType[[], BASE_STATE]] = None,
57
- on_mount: Optional[EventType[[], BASE_STATE]] = None,
58
- on_mouse_down: Optional[EventType[[], BASE_STATE]] = None,
59
- on_mouse_enter: Optional[EventType[[], BASE_STATE]] = None,
60
- on_mouse_leave: Optional[EventType[[], BASE_STATE]] = None,
61
- on_mouse_move: Optional[EventType[[], BASE_STATE]] = None,
62
- on_mouse_out: Optional[EventType[[], BASE_STATE]] = None,
63
- on_mouse_over: Optional[EventType[[], BASE_STATE]] = None,
64
- on_mouse_up: Optional[EventType[[], BASE_STATE]] = None,
65
- on_scroll: Optional[EventType[[], BASE_STATE]] = None,
66
- on_unmount: Optional[EventType[[], BASE_STATE]] = None,
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.
@@ -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], # type: ignore
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, # type: ignore
239
+ default=default, # pyright: ignore [reportArgumentType]
240
240
  ),
241
- _var_type=default._var_type, # type: ignore
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(), # type: ignore
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()