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
@@ -0,0 +1,175 @@
1
+ """Shared field infrastructure for components and props."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from collections.abc import Callable
6
+ from dataclasses import _MISSING_TYPE, MISSING
7
+ from typing import Annotated, Any, Generic, TypeVar, get_origin
8
+
9
+ FIELD_TYPE = TypeVar("FIELD_TYPE")
10
+
11
+
12
+ class BaseField(Generic[FIELD_TYPE]):
13
+ """Base field class used by internal metadata classes."""
14
+
15
+ def __init__(
16
+ self,
17
+ default: FIELD_TYPE | _MISSING_TYPE = MISSING,
18
+ default_factory: Callable[[], FIELD_TYPE] | None = None,
19
+ annotated_type: type[Any] | _MISSING_TYPE = MISSING,
20
+ ) -> None:
21
+ """Initialize the field.
22
+
23
+ Args:
24
+ default: The default value for the field.
25
+ default_factory: The default factory for the field.
26
+ annotated_type: The annotated type for the field.
27
+ """
28
+ self.default = default
29
+ self.default_factory = default_factory
30
+ self.outer_type_ = self.annotated_type = annotated_type
31
+
32
+ # Process type annotation
33
+ type_origin = get_origin(annotated_type) or annotated_type
34
+ if type_origin is Annotated:
35
+ type_origin = annotated_type.__origin__ # pyright: ignore [reportAttributeAccessIssue]
36
+ # For Annotated types, use the actual type inside the annotation
37
+ self.type_ = annotated_type
38
+ else:
39
+ # For other types (including Union), preserve the original type
40
+ self.type_ = annotated_type
41
+ self.type_origin = type_origin
42
+
43
+ def default_value(self) -> FIELD_TYPE:
44
+ """Get the default value for the field.
45
+
46
+ Returns:
47
+ The default value for the field.
48
+
49
+ Raises:
50
+ ValueError: If no default value or factory is provided.
51
+ """
52
+ if self.default is not MISSING:
53
+ return self.default
54
+ if self.default_factory is not None:
55
+ return self.default_factory()
56
+ msg = "No default value or factory provided."
57
+ raise ValueError(msg)
58
+
59
+
60
+ class FieldBasedMeta(type):
61
+ """Shared metaclass for field-based classes like components and props.
62
+
63
+ Provides common field inheritance and processing logic for both
64
+ PropsBaseMeta and BaseComponentMeta.
65
+ """
66
+
67
+ def __new__(cls, name: str, bases: tuple[type], namespace: dict[str, Any]) -> type:
68
+ """Create a new field-based class.
69
+
70
+ Args:
71
+ name: The name of the class.
72
+ bases: The base classes.
73
+ namespace: The class namespace.
74
+
75
+ Returns:
76
+ The new class.
77
+ """
78
+ # Collect inherited fields from base classes
79
+ inherited_fields = cls._collect_inherited_fields(bases)
80
+
81
+ # Get annotations from the namespace
82
+ annotations = cls._resolve_annotations(namespace, name)
83
+
84
+ # Process field overrides (fields with values but no annotations)
85
+ own_fields = cls._process_field_overrides(
86
+ namespace, annotations, inherited_fields
87
+ )
88
+
89
+ # Process annotated fields
90
+ own_fields.update(
91
+ cls._process_annotated_fields(namespace, annotations, inherited_fields)
92
+ )
93
+
94
+ # Finalize fields and store on class
95
+ cls._finalize_fields(namespace, inherited_fields, own_fields)
96
+
97
+ return super().__new__(cls, name, bases, namespace)
98
+
99
+ @classmethod
100
+ def _collect_inherited_fields(cls, bases: tuple[type]) -> dict[str, Any]:
101
+ inherited_fields: dict[str, Any] = {}
102
+
103
+ # Collect inherited fields from base classes
104
+ for base in bases[::-1]:
105
+ if hasattr(base, "_inherited_fields"):
106
+ inherited_fields.update(base._inherited_fields)
107
+ for base in bases[::-1]:
108
+ if hasattr(base, "_own_fields"):
109
+ inherited_fields.update(base._own_fields)
110
+
111
+ return inherited_fields
112
+
113
+ @classmethod
114
+ def _resolve_annotations(
115
+ cls, namespace: dict[str, Any], name: str
116
+ ) -> dict[str, Any]:
117
+ return namespace.get("__annotations__", {})
118
+
119
+ @classmethod
120
+ def _process_field_overrides(
121
+ cls,
122
+ namespace: dict[str, Any],
123
+ annotations: dict[str, Any],
124
+ inherited_fields: dict[str, Any],
125
+ ) -> dict[str, Any]:
126
+ own_fields: dict[str, Any] = {}
127
+
128
+ for key, value in namespace.items():
129
+ if key not in annotations and key in inherited_fields:
130
+ inherited_field = inherited_fields[key]
131
+ new_field = cls._create_field(
132
+ annotated_type=inherited_field.annotated_type,
133
+ default=value,
134
+ default_factory=None,
135
+ )
136
+ own_fields[key] = new_field
137
+
138
+ return own_fields
139
+
140
+ @classmethod
141
+ def _process_annotated_fields(
142
+ cls,
143
+ namespace: dict[str, Any],
144
+ annotations: dict[str, Any],
145
+ inherited_fields: dict[str, Any],
146
+ ) -> dict[str, Any]:
147
+ raise NotImplementedError
148
+
149
+ @classmethod
150
+ def _create_field(
151
+ cls,
152
+ annotated_type: Any,
153
+ default: Any = MISSING,
154
+ default_factory: Callable[[], Any] | None = None,
155
+ ) -> Any:
156
+ raise NotImplementedError
157
+
158
+ @classmethod
159
+ def _finalize_fields(
160
+ cls,
161
+ namespace: dict[str, Any],
162
+ inherited_fields: dict[str, Any],
163
+ own_fields: dict[str, Any],
164
+ ) -> None:
165
+ # Combine all fields
166
+ all_fields = inherited_fields | own_fields
167
+
168
+ # Set field names for compatibility
169
+ for field_name, field in all_fields.items():
170
+ field._name = field_name
171
+
172
+ # Store field mappings on the class
173
+ namespace["_own_fields"] = own_fields
174
+ namespace["_inherited_fields"] = inherited_fields
175
+ namespace["_fields"] = all_fields
@@ -5,7 +5,7 @@ from __future__ import annotations
5
5
  from collections.abc import Sequence
6
6
  from typing import Any
7
7
 
8
- from reflex.components.component import Component
8
+ from reflex.components.component import NoSSRComponent
9
9
  from reflex.components.tags import Tag
10
10
  from reflex.utils import types
11
11
  from reflex.utils.imports import ImportDict
@@ -13,7 +13,7 @@ from reflex.utils.serializers import serialize
13
13
  from reflex.vars.base import LiteralVar, Var, is_computed_var
14
14
 
15
15
 
16
- class Gridjs(Component):
16
+ class Gridjs(NoSSRComponent):
17
17
  """A component that wraps a nivo bar component."""
18
18
 
19
19
  library = "gridjs-react@6.1.1"
@@ -6,13 +6,13 @@
6
6
  from collections.abc import Mapping, Sequence
7
7
  from typing import Any, overload
8
8
 
9
- from reflex.components.component import Component
9
+ from reflex.components.component import NoSSRComponent
10
10
  from reflex.components.core.breakpoints import Breakpoints
11
- from reflex.event import EventType
11
+ from reflex.event import EventType, PointerEventInfo
12
12
  from reflex.utils.imports import ImportDict
13
13
  from reflex.vars.base import Var
14
14
 
15
- class Gridjs(Component):
15
+ class Gridjs(NoSSRComponent):
16
16
  @overload
17
17
  @classmethod
18
18
  def create( # type: ignore
@@ -30,9 +30,9 @@ class Gridjs(Component):
30
30
  autofocus: bool | None = None,
31
31
  custom_attrs: dict[str, Var | Any] | None = None,
32
32
  on_blur: EventType[()] | None = None,
33
- on_click: EventType[()] | None = None,
34
- on_context_menu: EventType[()] | None = None,
35
- on_double_click: EventType[()] | None = None,
33
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
34
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
35
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
36
36
  on_focus: EventType[()] | None = None,
37
37
  on_mount: EventType[()] | None = None,
38
38
  on_mouse_down: EventType[()] | None = None,
@@ -43,6 +43,7 @@ class Gridjs(Component):
43
43
  on_mouse_over: EventType[()] | None = None,
44
44
  on_mouse_up: EventType[()] | None = None,
45
45
  on_scroll: EventType[()] | None = None,
46
+ on_scroll_end: EventType[()] | None = None,
46
47
  on_unmount: EventType[()] | None = None,
47
48
  **props,
48
49
  ) -> Gridjs:
@@ -87,9 +88,9 @@ class DataTable(Gridjs):
87
88
  autofocus: bool | None = None,
88
89
  custom_attrs: dict[str, Var | Any] | None = None,
89
90
  on_blur: EventType[()] | None = None,
90
- on_click: EventType[()] | None = None,
91
- on_context_menu: EventType[()] | None = None,
92
- on_double_click: EventType[()] | None = None,
91
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
92
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
93
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
93
94
  on_focus: EventType[()] | None = None,
94
95
  on_mount: EventType[()] | None = None,
95
96
  on_mouse_down: EventType[()] | None = None,
@@ -100,6 +101,7 @@ class DataTable(Gridjs):
100
101
  on_mouse_over: EventType[()] | None = None,
101
102
  on_mouse_up: EventType[()] | None = None,
102
103
  on_scroll: EventType[()] | None = None,
104
+ on_scroll_end: EventType[()] | None = None,
103
105
  on_unmount: EventType[()] | None = None,
104
106
  **props,
105
107
  ) -> DataTable:
@@ -6,11 +6,13 @@ from reflex.utils.imports import ImportVar
6
6
  from reflex.vars.base import LiteralVar, Var
7
7
  from reflex.vars.sequence import LiteralStringVar, StringVar
8
8
 
9
+ LUCIDE_LIBRARY = "lucide-react@0.511.0"
10
+
9
11
 
10
12
  class LucideIconComponent(Component):
11
13
  """Lucide Icon Component."""
12
14
 
13
- library = "lucide-react@0.511.0"
15
+ library = LUCIDE_LIBRARY
14
16
 
15
17
 
16
18
  class Icon(LucideIconComponent):
@@ -96,7 +98,9 @@ class DynamicIcon(LucideIconComponent):
96
98
  _imports = super()._get_imports()
97
99
  if self.library:
98
100
  _imports.pop(self.library)
99
- _imports["lucide-react"] = [ImportVar("DynamicIcon", package_path="/dynamic")]
101
+ _imports[LUCIDE_LIBRARY] = [
102
+ ImportVar("DynamicIcon", package_path="/dynamic.mjs")
103
+ ]
100
104
  return _imports
101
105
 
102
106
 
@@ -8,9 +8,11 @@ from typing import Any, overload
8
8
 
9
9
  from reflex.components.component import Component
10
10
  from reflex.components.core.breakpoints import Breakpoints
11
- from reflex.event import EventType
11
+ from reflex.event import EventType, PointerEventInfo
12
12
  from reflex.vars.base import Var
13
13
 
14
+ LUCIDE_LIBRARY = "lucide-react@0.511.0"
15
+
14
16
  class LucideIconComponent(Component):
15
17
  @overload
16
18
  @classmethod
@@ -29,9 +31,9 @@ class LucideIconComponent(Component):
29
31
  autofocus: bool | None = None,
30
32
  custom_attrs: dict[str, Var | Any] | None = None,
31
33
  on_blur: EventType[()] | None = None,
32
- on_click: EventType[()] | None = None,
33
- on_context_menu: EventType[()] | None = None,
34
- on_double_click: EventType[()] | None = None,
34
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
35
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
36
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
35
37
  on_focus: EventType[()] | None = None,
36
38
  on_mount: EventType[()] | None = None,
37
39
  on_mouse_down: EventType[()] | None = None,
@@ -42,6 +44,7 @@ class LucideIconComponent(Component):
42
44
  on_mouse_over: EventType[()] | None = None,
43
45
  on_mouse_up: EventType[()] | None = None,
44
46
  on_scroll: EventType[()] | None = None,
47
+ on_scroll_end: EventType[()] | None = None,
45
48
  on_unmount: EventType[()] | None = None,
46
49
  **props,
47
50
  ) -> LucideIconComponent:
@@ -81,9 +84,9 @@ class Icon(LucideIconComponent):
81
84
  autofocus: bool | None = None,
82
85
  custom_attrs: dict[str, Var | Any] | None = None,
83
86
  on_blur: EventType[()] | None = None,
84
- on_click: EventType[()] | None = None,
85
- on_context_menu: EventType[()] | None = None,
86
- on_double_click: EventType[()] | None = None,
87
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
88
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
89
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
87
90
  on_focus: EventType[()] | None = None,
88
91
  on_mount: EventType[()] | None = None,
89
92
  on_mouse_down: EventType[()] | None = None,
@@ -94,6 +97,7 @@ class Icon(LucideIconComponent):
94
97
  on_mouse_over: EventType[()] | None = None,
95
98
  on_mouse_up: EventType[()] | None = None,
96
99
  on_scroll: EventType[()] | None = None,
100
+ on_scroll_end: EventType[()] | None = None,
97
101
  on_unmount: EventType[()] | None = None,
98
102
  **props,
99
103
  ) -> Icon:
@@ -140,9 +144,9 @@ class DynamicIcon(LucideIconComponent):
140
144
  autofocus: bool | None = None,
141
145
  custom_attrs: dict[str, Var | Any] | None = None,
142
146
  on_blur: EventType[()] | None = None,
143
- on_click: EventType[()] | None = None,
144
- on_context_menu: EventType[()] | None = None,
145
- on_double_click: EventType[()] | None = None,
147
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
148
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
149
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
146
150
  on_focus: EventType[()] | None = None,
147
151
  on_mount: EventType[()] | None = None,
148
152
  on_mouse_down: EventType[()] | None = None,
@@ -153,6 +157,7 @@ class DynamicIcon(LucideIconComponent):
153
157
  on_mouse_over: EventType[()] | None = None,
154
158
  on_mouse_up: EventType[()] | None = None,
155
159
  on_scroll: EventType[()] | None = None,
160
+ on_scroll_end: EventType[()] | None = None,
156
161
  on_unmount: EventType[()] | None = None,
157
162
  **props,
158
163
  ) -> DynamicIcon:
@@ -10,7 +10,7 @@ from typing import Any, overload
10
10
 
11
11
  from reflex.components.component import Component
12
12
  from reflex.components.core.breakpoints import Breakpoints
13
- from reflex.event import EventType
13
+ from reflex.event import EventType, PointerEventInfo
14
14
  from reflex.utils.imports import ImportDict
15
15
  from reflex.vars.base import LiteralVar, Var, VarData
16
16
 
@@ -67,9 +67,9 @@ class Markdown(Component):
67
67
  autofocus: bool | None = None,
68
68
  custom_attrs: dict[str, Var | Any] | None = None,
69
69
  on_blur: EventType[()] | None = None,
70
- on_click: EventType[()] | None = None,
71
- on_context_menu: EventType[()] | None = None,
72
- on_double_click: EventType[()] | None = None,
70
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
71
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
72
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
73
73
  on_focus: EventType[()] | None = None,
74
74
  on_mount: EventType[()] | None = None,
75
75
  on_mouse_down: EventType[()] | None = None,
@@ -80,6 +80,7 @@ class Markdown(Component):
80
80
  on_mouse_over: EventType[()] | None = None,
81
81
  on_mouse_up: EventType[()] | None = None,
82
82
  on_scroll: EventType[()] | None = None,
83
+ on_scroll_end: EventType[()] | None = None,
83
84
  on_unmount: EventType[()] | None = None,
84
85
  **props,
85
86
  ) -> Markdown:
@@ -10,7 +10,7 @@ from typing import Any, overload
10
10
 
11
11
  from reflex.components.component import NoSSRComponent
12
12
  from reflex.components.core.breakpoints import Breakpoints
13
- from reflex.event import EventType
13
+ from reflex.event import EventType, PointerEventInfo
14
14
  from reflex.utils.imports import ImportDict
15
15
  from reflex.vars.base import Var
16
16
 
@@ -73,9 +73,9 @@ class Moment(NoSSRComponent):
73
73
  custom_attrs: dict[str, Var | Any] | None = None,
74
74
  on_blur: EventType[()] | None = None,
75
75
  on_change: EventType[()] | EventType[str] | None = None,
76
- on_click: EventType[()] | None = None,
77
- on_context_menu: EventType[()] | None = None,
78
- on_double_click: EventType[()] | None = None,
76
+ on_click: EventType[()] | EventType[PointerEventInfo] | None = None,
77
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
78
+ on_double_click: EventType[()] | EventType[PointerEventInfo] | None = None,
79
79
  on_focus: EventType[()] | None = None,
80
80
  on_mount: EventType[()] | None = None,
81
81
  on_mouse_down: EventType[()] | None = None,
@@ -86,6 +86,7 @@ class Moment(NoSSRComponent):
86
86
  on_mouse_over: EventType[()] | None = None,
87
87
  on_mouse_up: EventType[()] | None = None,
88
88
  on_scroll: EventType[()] | None = None,
89
+ on_scroll_end: EventType[()] | None = None,
89
90
  on_unmount: EventType[()] | None = None,
90
91
  **props,
91
92
  ) -> Moment:
@@ -8,7 +8,7 @@ from typing import Any, TypedDict, TypeVar, overload
8
8
 
9
9
  from reflex.components.component import NoSSRComponent
10
10
  from reflex.components.core.breakpoints import Breakpoints
11
- from reflex.event import EventType
11
+ from reflex.event import EventType, PointerEventInfo
12
12
  from reflex.utils import console
13
13
  from reflex.utils.imports import ImportDict
14
14
  from reflex.vars.base import Var
@@ -78,7 +78,7 @@ class Plotly(NoSSRComponent):
78
78
  on_blur: EventType[()] | None = None,
79
79
  on_button_clicked: EventType[()] | None = None,
80
80
  on_click: EventType[()] | EventType[list[Point]] | None = None,
81
- on_context_menu: EventType[()] | None = None,
81
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
82
82
  on_deselect: EventType[()] | None = None,
83
83
  on_double_click: EventType[()] | None = None,
84
84
  on_focus: EventType[()] | None = None,
@@ -96,6 +96,7 @@ class Plotly(NoSSRComponent):
96
96
  on_relayouting: EventType[()] | None = None,
97
97
  on_restyle: EventType[()] | None = None,
98
98
  on_scroll: EventType[()] | None = None,
99
+ on_scroll_end: EventType[()] | None = None,
99
100
  on_selected: EventType[()] | EventType[list[Point]] | None = None,
100
101
  on_selecting: EventType[()] | EventType[list[Point]] | None = None,
101
102
  on_transition_interrupted: EventType[()] | None = None,
@@ -182,7 +183,7 @@ class PlotlyBasic(Plotly):
182
183
  on_blur: EventType[()] | None = None,
183
184
  on_button_clicked: EventType[()] | None = None,
184
185
  on_click: EventType[()] | EventType[list[Point]] | None = None,
185
- on_context_menu: EventType[()] | None = None,
186
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
186
187
  on_deselect: EventType[()] | None = None,
187
188
  on_double_click: EventType[()] | None = None,
188
189
  on_focus: EventType[()] | None = None,
@@ -200,6 +201,7 @@ class PlotlyBasic(Plotly):
200
201
  on_relayouting: EventType[()] | None = None,
201
202
  on_restyle: EventType[()] | None = None,
202
203
  on_scroll: EventType[()] | None = None,
204
+ on_scroll_end: EventType[()] | None = None,
203
205
  on_selected: EventType[()] | EventType[list[Point]] | None = None,
204
206
  on_selecting: EventType[()] | EventType[list[Point]] | None = None,
205
207
  on_transition_interrupted: EventType[()] | None = None,
@@ -282,7 +284,7 @@ class PlotlyCartesian(Plotly):
282
284
  on_blur: EventType[()] | None = None,
283
285
  on_button_clicked: EventType[()] | None = None,
284
286
  on_click: EventType[()] | EventType[list[Point]] | None = None,
285
- on_context_menu: EventType[()] | None = None,
287
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
286
288
  on_deselect: EventType[()] | None = None,
287
289
  on_double_click: EventType[()] | None = None,
288
290
  on_focus: EventType[()] | None = None,
@@ -300,6 +302,7 @@ class PlotlyCartesian(Plotly):
300
302
  on_relayouting: EventType[()] | None = None,
301
303
  on_restyle: EventType[()] | None = None,
302
304
  on_scroll: EventType[()] | None = None,
305
+ on_scroll_end: EventType[()] | None = None,
303
306
  on_selected: EventType[()] | EventType[list[Point]] | None = None,
304
307
  on_selecting: EventType[()] | EventType[list[Point]] | None = None,
305
308
  on_transition_interrupted: EventType[()] | None = None,
@@ -382,7 +385,7 @@ class PlotlyGeo(Plotly):
382
385
  on_blur: EventType[()] | None = None,
383
386
  on_button_clicked: EventType[()] | None = None,
384
387
  on_click: EventType[()] | EventType[list[Point]] | None = None,
385
- on_context_menu: EventType[()] | None = None,
388
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
386
389
  on_deselect: EventType[()] | None = None,
387
390
  on_double_click: EventType[()] | None = None,
388
391
  on_focus: EventType[()] | None = None,
@@ -400,6 +403,7 @@ class PlotlyGeo(Plotly):
400
403
  on_relayouting: EventType[()] | None = None,
401
404
  on_restyle: EventType[()] | None = None,
402
405
  on_scroll: EventType[()] | None = None,
406
+ on_scroll_end: EventType[()] | None = None,
403
407
  on_selected: EventType[()] | EventType[list[Point]] | None = None,
404
408
  on_selecting: EventType[()] | EventType[list[Point]] | None = None,
405
409
  on_transition_interrupted: EventType[()] | None = None,
@@ -482,7 +486,7 @@ class PlotlyGl3d(Plotly):
482
486
  on_blur: EventType[()] | None = None,
483
487
  on_button_clicked: EventType[()] | None = None,
484
488
  on_click: EventType[()] | EventType[list[Point]] | None = None,
485
- on_context_menu: EventType[()] | None = None,
489
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
486
490
  on_deselect: EventType[()] | None = None,
487
491
  on_double_click: EventType[()] | None = None,
488
492
  on_focus: EventType[()] | None = None,
@@ -500,6 +504,7 @@ class PlotlyGl3d(Plotly):
500
504
  on_relayouting: EventType[()] | None = None,
501
505
  on_restyle: EventType[()] | None = None,
502
506
  on_scroll: EventType[()] | None = None,
507
+ on_scroll_end: EventType[()] | None = None,
503
508
  on_selected: EventType[()] | EventType[list[Point]] | None = None,
504
509
  on_selecting: EventType[()] | EventType[list[Point]] | None = None,
505
510
  on_transition_interrupted: EventType[()] | None = None,
@@ -582,7 +587,7 @@ class PlotlyGl2d(Plotly):
582
587
  on_blur: EventType[()] | None = None,
583
588
  on_button_clicked: EventType[()] | None = None,
584
589
  on_click: EventType[()] | EventType[list[Point]] | None = None,
585
- on_context_menu: EventType[()] | None = None,
590
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
586
591
  on_deselect: EventType[()] | None = None,
587
592
  on_double_click: EventType[()] | None = None,
588
593
  on_focus: EventType[()] | None = None,
@@ -600,6 +605,7 @@ class PlotlyGl2d(Plotly):
600
605
  on_relayouting: EventType[()] | None = None,
601
606
  on_restyle: EventType[()] | None = None,
602
607
  on_scroll: EventType[()] | None = None,
608
+ on_scroll_end: EventType[()] | None = None,
603
609
  on_selected: EventType[()] | EventType[list[Point]] | None = None,
604
610
  on_selecting: EventType[()] | EventType[list[Point]] | None = None,
605
611
  on_transition_interrupted: EventType[()] | None = None,
@@ -682,7 +688,7 @@ class PlotlyMapbox(Plotly):
682
688
  on_blur: EventType[()] | None = None,
683
689
  on_button_clicked: EventType[()] | None = None,
684
690
  on_click: EventType[()] | EventType[list[Point]] | None = None,
685
- on_context_menu: EventType[()] | None = None,
691
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
686
692
  on_deselect: EventType[()] | None = None,
687
693
  on_double_click: EventType[()] | None = None,
688
694
  on_focus: EventType[()] | None = None,
@@ -700,6 +706,7 @@ class PlotlyMapbox(Plotly):
700
706
  on_relayouting: EventType[()] | None = None,
701
707
  on_restyle: EventType[()] | None = None,
702
708
  on_scroll: EventType[()] | None = None,
709
+ on_scroll_end: EventType[()] | None = None,
703
710
  on_selected: EventType[()] | EventType[list[Point]] | None = None,
704
711
  on_selecting: EventType[()] | EventType[list[Point]] | None = None,
705
712
  on_transition_interrupted: EventType[()] | None = None,
@@ -782,7 +789,7 @@ class PlotlyFinance(Plotly):
782
789
  on_blur: EventType[()] | None = None,
783
790
  on_button_clicked: EventType[()] | None = None,
784
791
  on_click: EventType[()] | EventType[list[Point]] | None = None,
785
- on_context_menu: EventType[()] | None = None,
792
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
786
793
  on_deselect: EventType[()] | None = None,
787
794
  on_double_click: EventType[()] | None = None,
788
795
  on_focus: EventType[()] | None = None,
@@ -800,6 +807,7 @@ class PlotlyFinance(Plotly):
800
807
  on_relayouting: EventType[()] | None = None,
801
808
  on_restyle: EventType[()] | None = None,
802
809
  on_scroll: EventType[()] | None = None,
810
+ on_scroll_end: EventType[()] | None = None,
803
811
  on_selected: EventType[()] | EventType[list[Point]] | None = None,
804
812
  on_selecting: EventType[()] | EventType[list[Point]] | None = None,
805
813
  on_transition_interrupted: EventType[()] | None = None,
@@ -882,7 +890,7 @@ class PlotlyStrict(Plotly):
882
890
  on_blur: EventType[()] | None = None,
883
891
  on_button_clicked: EventType[()] | None = None,
884
892
  on_click: EventType[()] | EventType[list[Point]] | None = None,
885
- on_context_menu: EventType[()] | None = None,
893
+ on_context_menu: EventType[()] | EventType[PointerEventInfo] | None = None,
886
894
  on_deselect: EventType[()] | None = None,
887
895
  on_double_click: EventType[()] | None = None,
888
896
  on_focus: EventType[()] | None = None,
@@ -900,6 +908,7 @@ class PlotlyStrict(Plotly):
900
908
  on_relayouting: EventType[()] | None = None,
901
909
  on_restyle: EventType[()] | None = None,
902
910
  on_scroll: EventType[()] | None = None,
911
+ on_scroll_end: EventType[()] | None = None,
903
912
  on_selected: EventType[()] | EventType[list[Point]] | None = None,
904
913
  on_selecting: EventType[()] | EventType[list[Point]] | None = None,
905
914
  on_transition_interrupted: EventType[()] | None = None,