reactpy 2.0.0b4__py3-none-any.whl → 2.0.0b5__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.
reactpy/types.py CHANGED
@@ -1,22 +1,24 @@
1
1
  from __future__ import annotations
2
2
 
3
- from collections.abc import Awaitable, Mapping, Sequence
3
+ import inspect
4
+ from collections.abc import Awaitable, Callable, Mapping, Sequence
4
5
  from dataclasses import dataclass
5
6
  from pathlib import Path
6
7
  from types import TracebackType
7
8
  from typing import (
8
9
  Any,
9
- Callable,
10
10
  Generic,
11
11
  Literal,
12
+ NamedTuple,
13
+ NotRequired,
12
14
  Protocol,
15
+ TypeAlias,
16
+ TypedDict,
13
17
  TypeVar,
18
+ Unpack,
14
19
  overload,
15
- runtime_checkable,
16
20
  )
17
21
 
18
- from typing_extensions import NamedTuple, NotRequired, TypeAlias, TypedDict, Unpack
19
-
20
22
  CarrierType = TypeVar("CarrierType")
21
23
  _Type = TypeVar("_Type")
22
24
 
@@ -26,54 +28,84 @@ class State(NamedTuple, Generic[_Type]):
26
28
  set_value: Callable[[_Type | Callable[[_Type], _Type]], None]
27
29
 
28
30
 
29
- ComponentConstructor = Callable[..., "ComponentType"]
31
+ ComponentConstructor = Callable[..., "Component"]
30
32
  """Simple function returning a new component"""
31
33
 
32
- RootComponentConstructor = Callable[[], "ComponentType"]
34
+ RootComponentConstructor = Callable[[], "Component"]
33
35
  """The root component should be constructed by a function accepting no arguments."""
34
36
 
35
37
 
36
38
  Key: TypeAlias = str | int
37
39
 
38
40
 
39
- @runtime_checkable
40
- class ComponentType(Protocol):
41
- """The expected interface for all component-like objects"""
42
-
43
- key: Key | None
44
- """An identifier which is unique amongst a component's immediate siblings"""
41
+ class Component:
42
+ """An object for rending component models."""
45
43
 
46
- type: Any
47
- """The function or class defining the behavior of this component
44
+ __slots__ = "__weakref__", "_args", "_func", "_kwargs", "_sig", "key", "type"
48
45
 
49
- This is used to see if two component instances share the same definition.
50
- """
46
+ def __init__(
47
+ self,
48
+ function: Callable[..., Component | VdomDict | str | None],
49
+ key: Any | None,
50
+ args: tuple[Any, ...],
51
+ kwargs: dict[str, Any],
52
+ sig: inspect.Signature,
53
+ ) -> None:
54
+ self.key = key
55
+ self.type = function
56
+ self._args = args
57
+ self._kwargs = kwargs
58
+ self._sig = sig
59
+
60
+ def render(self) -> Component | VdomDict | str | None:
61
+ return self.type(*self._args, **self._kwargs)
51
62
 
52
- def render(self) -> VdomDict | ComponentType | str | None:
53
- """Render the component's view model."""
63
+ def __repr__(self) -> str:
64
+ try:
65
+ args = self._sig.bind(*self._args, **self._kwargs).arguments
66
+ except TypeError:
67
+ return f"{self.type.__name__}(...)"
68
+ else:
69
+ items = ", ".join(f"{k}={v!r}" for k, v in args.items())
70
+ if items:
71
+ return f"{self.type.__name__}({id(self):02x}, {items})"
72
+ else:
73
+ return f"{self.type.__name__}({id(self):02x})"
54
74
 
55
75
 
56
76
  _Render_co = TypeVar("_Render_co", covariant=True)
57
77
  _Event_contra = TypeVar("_Event_contra", contravariant=True)
58
78
 
59
79
 
60
- @runtime_checkable
61
- class LayoutType(Protocol[_Render_co, _Event_contra]):
62
- """Renders and delivers, updates to views and events to handlers, respectively"""
80
+ class BaseLayout(Protocol[_Render_co, _Event_contra]):
81
+ """Renders and delivers views, and submits events to handlers."""
82
+
83
+ __slots__: tuple[str, ...] = (
84
+ "__weakref__",
85
+ "_event_handlers",
86
+ "_model_states_by_life_cycle_state_id",
87
+ "_render_tasks",
88
+ "_render_tasks_ready",
89
+ "_rendering_queue",
90
+ "_root_life_cycle_state_id",
91
+ "root",
92
+ )
63
93
 
64
94
  async def render(
65
95
  self,
66
- ) -> _Render_co: ... # Render an update to a view
96
+ ) -> _Render_co:
97
+ """Render an update to a view"""
98
+ ...
67
99
 
68
- async def deliver(
69
- self, event: _Event_contra
70
- ) -> None: ... # Relay an event to its respective handler
100
+ async def deliver(self, event: _Event_contra) -> None:
101
+ """Relay an event to its respective handler"""
102
+ ...
71
103
 
72
104
  async def __aenter__(
73
105
  self,
74
- ) -> LayoutType[
75
- _Render_co, _Event_contra
76
- ]: ... # Prepare the layout for its first render
106
+ ) -> BaseLayout[_Render_co, _Event_contra]:
107
+ """Prepare the layout for its first render"""
108
+ ...
77
109
 
78
110
  async def __aexit__(
79
111
  self,
@@ -82,6 +114,7 @@ class LayoutType(Protocol[_Render_co, _Event_contra]):
82
114
  traceback: TracebackType,
83
115
  ) -> bool | None:
84
116
  """Clean up the view after its final render"""
117
+ ...
85
118
 
86
119
 
87
120
  class CssStyleTypeDict(TypedDict, total=False):
@@ -787,7 +820,7 @@ class VdomTypeDict(TypedDict):
787
820
 
788
821
  tagName: str
789
822
  key: NotRequired[Key | None]
790
- children: NotRequired[Sequence[ComponentType | VdomChild]]
823
+ children: NotRequired[Sequence[Component | VdomChild]]
791
824
  attributes: NotRequired[VdomAttributes]
792
825
  eventHandlers: NotRequired[EventHandlerDict]
793
826
  inlineJavaScript: NotRequired[InlineJavaScriptDict]
@@ -815,7 +848,7 @@ class VdomDict(dict):
815
848
  @overload
816
849
  def __getitem__(
817
850
  self, key: Literal["children"]
818
- ) -> Sequence[ComponentType | VdomChild]: ...
851
+ ) -> Sequence[Component | VdomChild]: ...
819
852
  @overload
820
853
  def __getitem__(self, key: Literal["attributes"]) -> VdomAttributes: ...
821
854
  @overload
@@ -833,7 +866,7 @@ class VdomDict(dict):
833
866
  def __setitem__(self, key: Literal["key"], value: Key | None) -> None: ...
834
867
  @overload
835
868
  def __setitem__(
836
- self, key: Literal["children"], value: Sequence[ComponentType | VdomChild]
869
+ self, key: Literal["children"], value: Sequence[Component | VdomChild]
837
870
  ) -> None: ...
838
871
  @overload
839
872
  def __setitem__(
@@ -857,7 +890,7 @@ class VdomDict(dict):
857
890
  super().__setitem__(key, value)
858
891
 
859
892
 
860
- VdomChild: TypeAlias = ComponentType | VdomDict | str | None | Any
893
+ VdomChild: TypeAlias = Component | VdomDict | str | None | Any
861
894
  """A single child element of a :class:`VdomDict`"""
862
895
 
863
896
  VdomChildren: TypeAlias = Sequence[VdomChild] | VdomChild
@@ -907,19 +940,26 @@ class EventHandlerFunc(Protocol):
907
940
  async def __call__(self, data: Sequence[Any]) -> None: ...
908
941
 
909
942
 
910
- @runtime_checkable
911
- class EventHandlerType(Protocol):
943
+ class BaseEventHandler:
912
944
  """Defines a handler for some event"""
913
945
 
946
+ __slots__ = (
947
+ "__weakref__",
948
+ "function",
949
+ "prevent_default",
950
+ "stop_propagation",
951
+ "target",
952
+ )
953
+
954
+ function: EventHandlerFunc
955
+ """A coroutine which can respond to an event and its data"""
956
+
914
957
  prevent_default: bool
915
958
  """Whether to block the event from propagating further up the DOM"""
916
959
 
917
960
  stop_propagation: bool
918
961
  """Stops the default action associate with the event from taking place."""
919
962
 
920
- function: EventHandlerFunc
921
- """A coroutine which can respond to an event and its data"""
922
-
923
963
  target: str | None
924
964
  """Typically left as ``None`` except when a static target is useful.
925
965
 
@@ -932,10 +972,10 @@ class EventHandlerType(Protocol):
932
972
  """
933
973
 
934
974
 
935
- EventHandlerMapping = Mapping[str, EventHandlerType]
975
+ EventHandlerMapping = Mapping[str, BaseEventHandler]
936
976
  """A generic mapping between event names to their handlers"""
937
977
 
938
- EventHandlerDict: TypeAlias = dict[str, EventHandlerType]
978
+ EventHandlerDict: TypeAlias = dict[str, BaseEventHandler]
939
979
  """A dict mapping between event names to their handlers"""
940
980
 
941
981
  InlineJavaScriptMapping = Mapping[str, InlineJavaScript]
@@ -991,17 +1031,30 @@ class Context(Protocol[_Type]):
991
1031
  *children: Any,
992
1032
  value: _Type = ...,
993
1033
  key: Key | None = ...,
994
- ) -> ContextProviderType[_Type]: ...
1034
+ ) -> ContextProvider[_Type]: ...
995
1035
 
996
1036
 
997
- class ContextProviderType(ComponentType, Protocol[_Type]):
998
- """A component which provides a context value to its children"""
1037
+ class ContextProvider(Component, Generic[_Type]):
1038
+ def __init__(
1039
+ self,
1040
+ *children: Any,
1041
+ value: _Type,
1042
+ key: Key | None,
1043
+ type: Context[_Type],
1044
+ ) -> None:
1045
+ self.children = children
1046
+ self.key = key
1047
+ self.type = type
1048
+ self.value = value
999
1049
 
1000
- type: Context[_Type]
1001
- """The context type"""
1050
+ def render(self) -> VdomDict:
1051
+ from reactpy.core.hooks import HOOK_STACK
1002
1052
 
1003
- @property
1004
- def value(self) -> _Type: ... # Current context value
1053
+ HOOK_STACK.current_hook().set_context_provider(self)
1054
+ return VdomDict(tagName="", children=self.children)
1055
+
1056
+ def __repr__(self) -> str:
1057
+ return f"ContextProvider({self.type})"
1005
1058
 
1006
1059
 
1007
1060
  @dataclass
reactpy/utils.py CHANGED
@@ -1,17 +1,17 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import re
4
- from collections.abc import Iterable
4
+ from collections.abc import Callable, Iterable
5
5
  from importlib import import_module
6
6
  from itertools import chain
7
- from typing import Any, Callable, Generic, TypeVar, cast
7
+ from typing import Any, Generic, TypeVar, cast
8
8
 
9
9
  from lxml import etree
10
10
  from lxml.html import fromstring
11
11
 
12
12
  from reactpy import html
13
13
  from reactpy.transforms import RequiredTransforms, attributes_to_reactjs
14
- from reactpy.types import ComponentType, VdomDict
14
+ from reactpy.types import Component, VdomDict
15
15
 
16
16
  _RefValue = TypeVar("_RefValue")
17
17
  _ModelTransform = Callable[[VdomDict], Any]
@@ -63,7 +63,7 @@ class Ref(Generic[_RefValue]):
63
63
  return f"{type(self).__name__}({current})"
64
64
 
65
65
 
66
- def reactpy_to_string(root: VdomDict | ComponentType) -> str:
66
+ def reactpy_to_string(root: VdomDict | Component) -> str:
67
67
  """Convert a ReactPy component or `reactpy.html` element into an HTML string.
68
68
 
69
69
  Parameters:
@@ -186,7 +186,7 @@ def _add_vdom_to_etree(parent: etree._Element, vdom: VdomDict | dict[str, Any])
186
186
 
187
187
  for c in vdom.get("children", []):
188
188
  if hasattr(c, "render"):
189
- c = component_to_vdom(cast(ComponentType, c))
189
+ c = component_to_vdom(cast(Component, c))
190
190
  if isinstance(c, dict):
191
191
  _add_vdom_to_etree(element, c)
192
192
 
@@ -232,14 +232,14 @@ def _generate_vdom_children(
232
232
  )
233
233
 
234
234
 
235
- def component_to_vdom(component: ComponentType) -> VdomDict:
235
+ def component_to_vdom(component: Component) -> VdomDict:
236
236
  """Convert the first render of a component into a VDOM dictionary"""
237
237
  result = component.render()
238
238
 
239
239
  if isinstance(result, dict):
240
240
  return result
241
241
  if hasattr(result, "render"):
242
- return component_to_vdom(cast(ComponentType, result))
242
+ return component_to_vdom(cast(Component, result))
243
243
  elif isinstance(result, str):
244
244
  return html.div(result)
245
245
  return html.fragment()
reactpy/web/module.py CHANGED
@@ -1,6 +1,7 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import filecmp
4
+ import hashlib
4
5
  import logging
5
6
  import shutil
6
7
  from dataclasses import dataclass
@@ -106,9 +107,9 @@ def reactjs_component_from_url(
106
107
 
107
108
  @overload
108
109
  def reactjs_component_from_file(
109
- name: str,
110
110
  file: str | Path,
111
111
  import_names: str,
112
+ name: str = "",
112
113
  fallback: Any | None = ...,
113
114
  resolve_imports: bool | None = ...,
114
115
  resolve_imports_depth: int = ...,
@@ -120,9 +121,9 @@ def reactjs_component_from_file(
120
121
 
121
122
  @overload
122
123
  def reactjs_component_from_file(
123
- name: str,
124
124
  file: str | Path,
125
125
  import_names: list[str] | tuple[str, ...],
126
+ name: str = "",
126
127
  fallback: Any | None = ...,
127
128
  resolve_imports: bool | None = ...,
128
129
  resolve_imports_depth: int = ...,
@@ -133,9 +134,9 @@ def reactjs_component_from_file(
133
134
 
134
135
 
135
136
  def reactjs_component_from_file(
136
- name: str,
137
137
  file: str | Path,
138
138
  import_names: str | list[str] | tuple[str, ...],
139
+ name: str = "",
139
140
  fallback: Any | None = None,
140
141
  resolve_imports: bool | None = None,
141
142
  resolve_imports_depth: int = 5,
@@ -146,14 +147,14 @@ def reactjs_component_from_file(
146
147
  """Import a component from a file.
147
148
 
148
149
  Parameters:
149
- name:
150
- The name of the package
151
150
  file:
152
151
  The file from which the content of the web module will be created.
153
152
  import_names:
154
153
  One or more component names to import. If given as a string, a single component
155
154
  will be returned. If a list is given, then a list of components will be
156
155
  returned.
156
+ name:
157
+ The human-readable name of the ReactJS package
157
158
  fallback:
158
159
  What to temporarily display while the module is being loaded.
159
160
  resolve_imports:
@@ -170,6 +171,7 @@ def reactjs_component_from_file(
170
171
  allow_children:
171
172
  Whether or not these components can have children.
172
173
  """
174
+ name = name or hashlib.sha256(str(file).encode()).hexdigest()[:10]
173
175
  key = f"{name}{resolve_imports}{resolve_imports_depth}{unmount_before_update}"
174
176
  if key in _FILE_WEB_MODULE_CACHE:
175
177
  module = _FILE_WEB_MODULE_CACHE[key]
@@ -189,9 +191,9 @@ def reactjs_component_from_file(
189
191
 
190
192
  @overload
191
193
  def reactjs_component_from_string(
192
- name: str,
193
194
  content: str,
194
195
  import_names: str,
196
+ name: str = "",
195
197
  fallback: Any | None = ...,
196
198
  resolve_imports: bool | None = ...,
197
199
  resolve_imports_depth: int = ...,
@@ -202,9 +204,9 @@ def reactjs_component_from_string(
202
204
 
203
205
  @overload
204
206
  def reactjs_component_from_string(
205
- name: str,
206
207
  content: str,
207
208
  import_names: list[str] | tuple[str, ...],
209
+ name: str = "",
208
210
  fallback: Any | None = ...,
209
211
  resolve_imports: bool | None = ...,
210
212
  resolve_imports_depth: int = ...,
@@ -214,9 +216,9 @@ def reactjs_component_from_string(
214
216
 
215
217
 
216
218
  def reactjs_component_from_string(
217
- name: str,
218
219
  content: str,
219
220
  import_names: str | list[str] | tuple[str, ...],
221
+ name: str = "",
220
222
  fallback: Any | None = None,
221
223
  resolve_imports: bool | None = None,
222
224
  resolve_imports_depth: int = 5,
@@ -226,14 +228,14 @@ def reactjs_component_from_string(
226
228
  """Import a component from a string.
227
229
 
228
230
  Parameters:
229
- name:
230
- The name of the package
231
231
  content:
232
232
  The contents of the web module
233
233
  import_names:
234
234
  One or more component names to import. If given as a string, a single component
235
235
  will be returned. If a list is given, then a list of components will be
236
236
  returned.
237
+ name:
238
+ The human-readable name of the ReactJS package
237
239
  fallback:
238
240
  What to temporarily display while the module is being loaded.
239
241
  resolve_imports:
@@ -248,6 +250,7 @@ def reactjs_component_from_string(
248
250
  allow_children:
249
251
  Whether or not these components can have children.
250
252
  """
253
+ name = name or hashlib.sha256(content.encode()).hexdigest()[:10]
251
254
  key = f"{name}{resolve_imports}{resolve_imports_depth}{unmount_before_update}"
252
255
  if key in _STRING_WEB_MODULE_CACHE:
253
256
  module = _STRING_WEB_MODULE_CACHE[key]
reactpy/widgets.py CHANGED
@@ -1,8 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  from base64 import b64encode
4
- from collections.abc import Sequence
5
- from typing import Any, Callable, Protocol, TypeVar
4
+ from collections.abc import Callable, Sequence
5
+ from typing import Any, Protocol, TypeVar
6
6
 
7
7
  import reactpy
8
8
  from reactpy._html import html
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: reactpy
3
- Version: 2.0.0b4
3
+ Version: 2.0.0b5
4
4
  Summary: It's React, but in Python.
5
5
  Project-URL: Changelog, https://reactpy.dev/docs/about/changelog.html
6
6
  Project-URL: Documentation, https://reactpy.dev/
@@ -8,28 +8,26 @@ Project-URL: Source, https://github.com/reactive-python/reactpy
8
8
  Author-email: Mark Bakhit <archiethemonger@gmail.com>, Ryan Morshead <ryan.morshead@gmail.com>
9
9
  License-Expression: MIT
10
10
  License-File: LICENSE
11
- Keywords: component,javascript,react,reactpy
11
+ Keywords: asgi,components,interactive,javascript,react,reactive,reactjs,reactpy,server,website,wsgi
12
12
  Classifier: Development Status :: 5 - Production/Stable
13
13
  Classifier: Programming Language :: Python
14
- Classifier: Programming Language :: Python :: 3.10
15
14
  Classifier: Programming Language :: Python :: 3.11
16
15
  Classifier: Programming Language :: Python :: 3.12
17
16
  Classifier: Programming Language :: Python :: 3.13
17
+ Classifier: Programming Language :: Python :: 3.14
18
18
  Classifier: Programming Language :: Python :: Implementation :: CPython
19
19
  Classifier: Programming Language :: Python :: Implementation :: PyPy
20
- Requires-Python: >=3.9
20
+ Requires-Python: >=3.11
21
21
  Requires-Dist: anyio>=3
22
22
  Requires-Dist: fastjsonschema>=2.14.5
23
23
  Requires-Dist: lxml>=4
24
24
  Requires-Dist: requests>=2
25
- Requires-Dist: typing-extensions>=3.10
26
25
  Provides-Extra: all
27
26
  Requires-Dist: asgi-tools; extra == 'all'
28
27
  Requires-Dist: asgiref; extra == 'all'
29
28
  Requires-Dist: jinja2-simple-tags; extra == 'all'
30
29
  Requires-Dist: jinja2>=3; extra == 'all'
31
30
  Requires-Dist: orjson; extra == 'all'
32
- Requires-Dist: pip; extra == 'all'
33
31
  Requires-Dist: playwright; extra == 'all'
34
32
  Requires-Dist: servestatic; extra == 'all'
35
33
  Requires-Dist: uvicorn[standard]; extra == 'all'
@@ -37,7 +35,6 @@ Provides-Extra: asgi
37
35
  Requires-Dist: asgi-tools; extra == 'asgi'
38
36
  Requires-Dist: asgiref; extra == 'asgi'
39
37
  Requires-Dist: orjson; extra == 'asgi'
40
- Requires-Dist: pip; extra == 'asgi'
41
38
  Requires-Dist: servestatic; extra == 'asgi'
42
39
  Provides-Extra: jinja
43
40
  Requires-Dist: jinja2-simple-tags; extra == 'jinja'
@@ -1,43 +1,43 @@
1
- reactpy/__init__.py,sha256=Mz3B-HReWf6koCC_HL2anGCDkJoKwy8vhPivouSaH-E,1179
1
+ reactpy/__init__.py,sha256=-JzXcLiay8bWxSlRerOIjXe9XLdFM5SZudRUerLTaAM,1179
2
2
  reactpy/_html.py,sha256=SNDqr_ovXYFruC7ZWYFGCCCN9S4UTYGTsLnM-8VCz0o,11368
3
- reactpy/_option.py,sha256=GK3Msnaqhcgkbx-RStbiMSeC9Qocf8Y6JbdxcO6f6ZI,5088
3
+ reactpy/_option.py,sha256=T4rQa_YIGLEVlYmqLDD-a2hQBfM5OHVGjFycTQUP4sI,5115
4
4
  reactpy/_warnings.py,sha256=DR1YGzTS8ijaH0Wqh2V3TWDeDlkBwEb9dSsEYYuW-RI,933
5
- reactpy/config.py,sha256=s3iWAQu9BAxidd5enacJm0b86cBaoVs-iTtWQrYpDy4,3835
5
+ reactpy/config.py,sha256=qLEOO2QQ_wq8qVaiPRujuc1nVVfwmJkHAAUTxvvQsTk,3791
6
6
  reactpy/logging.py,sha256=VEQWQIjgAfAKj1qdvcT9PoMiRZ5iCfd0GPkhI5vmjxA,857
7
7
  reactpy/py.typed,sha256=8PjyZ1aVoQpRVvt71muvuq5qE-jTFZkK-GLHkhdebmc,26
8
8
  reactpy/transforms.py,sha256=hgIiMriflwPsMZhtZkqUm5Qj_eR5hrLrp0yTJ7NnC_c,11837
9
- reactpy/types.py,sha256=gMolX9rL02FryH7DGTQoOPgenKNNT5w3dRGNc3bYDao,32475
10
- reactpy/utils.py,sha256=JSrSrA3JWJwGAK5vRx5jcgJ7kigTOJ41NjmUlNVi1ds,10891
11
- reactpy/widgets.py,sha256=OoDO7HqTMRyqEK1y3RWVx_3vbfX8tsADZDvw6Umib1I,2623
9
+ reactpy/types.py,sha256=xF8QvkNgzJZXgKOnRAL_NA82UIDQk594qzkdUXjY1Go,33739
10
+ reactpy/utils.py,sha256=pCPLpqnS8PhTsWnUROVOOLuQC_dzGo6fTiDd-ATVOEc,10871
11
+ reactpy/widgets.py,sha256=xLfjTqvDg96jQa-mApex7QGcikt216DeTcDFc_9pwAU,2623
12
12
  reactpy/_console/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  reactpy/_console/ast_utils.py,sha256=bBQ0hNP5-p5CbQFRK0-f-z1c1cVReNBFR0BAcN30vTg,6340
14
14
  reactpy/_console/cli.py,sha256=r-6tOyK8nJw7RF0JLJrjdKkQIM-36ZZsuUmR5Opxo6M,346
15
15
  reactpy/_console/rewrite_keys.py,sha256=Ydnbfxp8Sv6OnCwLCLQp6aTurAOLW9w1fOFVPWSudbc,3505
16
- reactpy/_console/rewrite_props.py,sha256=JMPJQWdq837saZjccKMB4iogngoRCehwogIKmkPrr_M,4768
16
+ reactpy/_console/rewrite_props.py,sha256=bnGjLBOLQJNgIWBbilQ6Df_nJBuPDODk93bAQUwgC4s,4791
17
17
  reactpy/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  reactpy/core/_f_back.py,sha256=hVVbAjfaGO7oTh3VGdDziThuspYftfQICtWSv_0i1yc,605
19
- reactpy/core/_life_cycle_hook.py,sha256=z-kV9l6Nc8lZZyaG4t-_FXGgCxdaB6TfQo_h1ESqFL0,9583
20
- reactpy/core/_thread_local.py,sha256=AW1T7z4M4DH92EyYCmfAH_gxxW51ZCqZBFfZdEO6u54,800
21
- reactpy/core/component.py,sha256=1lRXyIKgpGz-Nl-Nz9dq0i972ZiYd-AuZPgoQjIOqVQ,2042
22
- reactpy/core/events.py,sha256=zrzTQYWDUOIfZPKK7xPgwmYv_KtdGapnd3qaBvIS0wg,7726
23
- reactpy/core/hooks.py,sha256=fhyI96Y8YrKpbbMIT7fl96MFq_ELaTPsT2vOTUGfNv4,19287
24
- reactpy/core/layout.py,sha256=9Zfhhp414WJJ_L88SzBHCD6mZtPd3BbVcLjb0s9dwoI,26837
25
- reactpy/core/serve.py,sha256=vZUOsDuUHkcfVrFvqjWceR7dDxscsVZUC0XqVxUIftM,2544
26
- reactpy/core/vdom.py,sha256=J7uHx35SHQakspnZkeD2Z1OvIu2yKt3yJHVBSIr1vdo,9918
19
+ reactpy/core/_life_cycle_hook.py,sha256=T8R3BMi7QaEsi1la1nywwfG_h4ts1JEe4MdsBTskGdU,9568
20
+ reactpy/core/_thread_local.py,sha256=nqvmSQhTrFgh34RUhzSTPEy1AaW3_j82Ji96BTz7hu0,827
21
+ reactpy/core/component.py,sha256=zASYlRhBrT6JZ-_uTU7N_UOhVSIsnnky4S8xoz5OY98,969
22
+ reactpy/core/events.py,sha256=HK8SHvl6uQS4H1AqfoK4Mj_YCaMaX3JvSFJ6Bqc4eMI,8594
23
+ reactpy/core/hooks.py,sha256=GtEG1bFubMUR1BLW_k5cBz1-mCy6XxKUkoR1x_tv2mk,19034
24
+ reactpy/core/layout.py,sha256=nNO4y6vxhEpmcw3JHDGxPENDr_y_KegBYO_UyUmdswY,25842
25
+ reactpy/core/serve.py,sha256=KU71UlAITA_b3ahz93rZTlqX0uHOXCYpR09GDsAWrmk,2544
26
+ reactpy/core/vdom.py,sha256=porm5xYGiKJSYM5rFd4jkzC-csAx5S4n1ZgWMo60pxI,9910
27
27
  reactpy/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
28
28
  reactpy/executors/utils.py,sha256=ikhv0MvsOKq45Gm7auLh6PbxvUH2ZgC5HLFXI9vBcLc,2779
29
- reactpy/executors/asgi/__init__.py,sha256=3a2x9izF5MmZrI70wdy3Z8CsSZhhM2_CFxoSI6B4eiI,231
30
- reactpy/executors/asgi/middleware.py,sha256=ysxMMHGSpnELNvx4HLCe81H2NvvfNS99x76ph4VrTFQ,11457
31
- reactpy/executors/asgi/pyscript.py,sha256=w2BwHB1eV_EguWPsriYMkPevte6vOcrgdsU8pe1Veeo,5329
32
- reactpy/executors/asgi/standalone.py,sha256=gH-gYhicMxlwvPcpklKx8ZpFpp8LWYoQALNTUi-4czo,8736
33
- reactpy/executors/asgi/types.py,sha256=IzWrukH7U7QCnVdpVXUcxIDh9FZzJwo9YthBrh8Rcjk,3362
29
+ reactpy/executors/asgi/__init__.py,sha256=eneHZqUxGxTUkTrrpXhq_YBqfA_mig-9YBTNNVFzXC0,405
30
+ reactpy/executors/asgi/middleware.py,sha256=AgXs7VxBjS01v1Fq4WkU6ORmNr7-pd7eEzaybRYig3o,11428
31
+ reactpy/executors/asgi/pyscript.py,sha256=W-5E5RNVsE5zNKF9iU0zs0M37DKbuGWTKUZiOwoVbWs,5263
32
+ reactpy/executors/asgi/standalone.py,sha256=dh1BqFwDOcsXeAjgWH2cw2Wn3vp4KK7x8uwhX_cb3BM,8698
33
+ reactpy/executors/asgi/types.py,sha256=jCIU8mJx1CMvYtmV3Lq7iIET8uiSwAeMJOwTsosHBKs,3362
34
34
  reactpy/pyscript/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
35
35
  reactpy/pyscript/component_template.py,sha256=jYzQ7YwfJ6RA3A1BcKs_1udUTt7dT3Qct7Bm73BsZdU,778
36
- reactpy/pyscript/components.py,sha256=BJ8qx8qEUYO4Hus_QSBsMakMxkJ9BstTES2HztgVwmU,1927
36
+ reactpy/pyscript/components.py,sha256=1ZUM3o11cbb4QC1eSCSo1euJeV6uaKAleB3Ie7ntyoU,1915
37
37
  reactpy/pyscript/layout_handler.py,sha256=aBrnBeiEMudUvRqbhW7KoJW-RkwS_wQ2KZl6m47vcNA,6289
38
- reactpy/pyscript/utils.py,sha256=MSrW-SPPw0lkocazN0sHIo-GdJsWoDSad1sqGsmlM4k,8718
39
- reactpy/static/index.js,sha256=WDjRua1rk4HI0ku8SnpmD5cFSZLiC27ylmcRZTMOh18,32374
40
- reactpy/static/index.js.map,sha256=fLT5BZonDGihwPQ3Q688E49k3i45hsXFpZd_Vz42CMQ,104592
38
+ reactpy/pyscript/utils.py,sha256=VX13umrX-d9qvSdxBfS6_RiXPjD5DGYJQA25PpEpn5Q,8854
39
+ reactpy/static/index.js,sha256=wgV9C8lXoR0DjQRLplUlSqC7Xz0piLJWCcVjdQQOvq4,32495
40
+ reactpy/static/index.js.map,sha256=oYBPFgYcxsgDIAaKEADBkrRVSm9v4lzrpp8PvdhS5bo,105332
41
41
  reactpy/static/pyscript-hide-debug.css,sha256=TSVmdOQVWwN-L9C0g0JmvvHoOfN4NlXvom0SXrIEmXg,33
42
42
  reactpy/static/morphdom/morphdom-esm.js,sha256=SOgEV5tSt-D2pjMeZDbV0cLiHCT4FVKNipG8NQmE7Do,28610
43
43
  reactpy/static/morphdom/morphdom-factory.js,sha256=iDCdYf_nbCiXC-_NKcp6nihq980NzgMZE6NX4HDgy74,26492
@@ -100,17 +100,17 @@ reactpy/static/pyscript/zip-pccs084i.js.map,sha256=HiY9HOwFsPc-R9viM6qN0QVf1PQBE
100
100
  reactpy/templatetags/__init__.py,sha256=slwD8UiXJ8WQAGxDsGy1_fpX-9mbwNAU17cTL0bktMo,80
101
101
  reactpy/templatetags/jinja.py,sha256=YHKZhf6i6tsd0IwsS4SBb7kR9MbUjSKwuEH3xdtF6-Y,1541
102
102
  reactpy/testing/__init__.py,sha256=f8JhesjRwOConigrCKd-XHRDAmpIA7xRU5oVIxLG4Fw,643
103
- reactpy/testing/backend.py,sha256=21D8QfJYI70ezsEO4knBb8wzugUg7BvPN9fLqCoLtxw,7101
104
- reactpy/testing/common.py,sha256=rPURV28pQSoMUFx46WtStTzF1e3APytOJTrov408qic,7080
103
+ reactpy/testing/backend.py,sha256=cH9LD0KeiM3eWFs-0MkAkrsNgUrZweL9Ts8PAZs8G3M,7128
104
+ reactpy/testing/common.py,sha256=gkcEJDAel-6nsOtuL628WoB1eSmzhLKp6RFwtN84TR8,7042
105
105
  reactpy/testing/display.py,sha256=9XbQ6qVrsbDXWIJ-LXemspGFqxmtzzIy5Ojed6J71-c,2170
106
106
  reactpy/testing/logs.py,sha256=40MGuZIlwT6c_ziziwLCsH1Y032ROAFcLvd8g9lRvAc,5672
107
107
  reactpy/testing/utils.py,sha256=b4s1hpLqdl_Z8G_hHAx3ELlr4x1oI9iuazOdS43wkZI,1071
108
108
  reactpy/web/__init__.py,sha256=gJuI9-GMoMSV6KrA3idYRIWmFu6wtnwnIWU2IA8PJS0,422
109
- reactpy/web/module.py,sha256=fHPsaZJ5J93x7huNHHcH9ZMIHVEriM-q2_8aIxxUpLs,17866
109
+ reactpy/web/module.py,sha256=hpm60GbUMimIPY7_7-AJ7CCZesVxEE1Ur9Vrra6bzQg,18097
110
110
  reactpy/web/utils.py,sha256=gAlR_rIIB0ezPZCb8bYKd8hSPb95RTAjcQmozkUqMhY,5172
111
111
  reactpy/web/templates/react.js,sha256=VIwJfl8S3b53PazgFdaWpgHLhTYpcmNdSQfpl9LPQdM,1950
112
- reactpy-2.0.0b4.dist-info/METADATA,sha256=knWAEL89NbqlPqmGjXSXUf5jdcZJxzM-SoFR9pM3L-U,5052
113
- reactpy-2.0.0b4.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
114
- reactpy-2.0.0b4.dist-info/entry_points.txt,sha256=WRit3ZrLVh7iDEhUMAPE3A9bcaa7TsolCdAdkxGmv0U,61
115
- reactpy-2.0.0b4.dist-info/licenses/LICENSE,sha256=-8yQb3G5cW-IBhxyIe-uoQzI9lPEu7-6Yi5wJSO1ous,1093
116
- reactpy-2.0.0b4.dist-info/RECORD,,
112
+ reactpy-2.0.0b5.dist-info/METADATA,sha256=XFAsLQjc7T6iaZ7G9u7e-o3uIBLz8F9OCh0o43U39bI,4998
113
+ reactpy-2.0.0b5.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
114
+ reactpy-2.0.0b5.dist-info/entry_points.txt,sha256=WRit3ZrLVh7iDEhUMAPE3A9bcaa7TsolCdAdkxGmv0U,61
115
+ reactpy-2.0.0b5.dist-info/licenses/LICENSE,sha256=-8yQb3G5cW-IBhxyIe-uoQzI9lPEu7-6Yi5wJSO1ous,1093
116
+ reactpy-2.0.0b5.dist-info/RECORD,,