Skip to content

Commit 45bd548

Browse files
authored
Merge branch 'main' into fix-import-error
2 parents a15fc84 + 309bd5a commit 45bd548

File tree

48 files changed

+79
-78
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+79
-78
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
@maintainers

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,5 +69,5 @@ Follow the links below to find out more about this project.
6969
- [Documentation](https://reactpy.dev/)
7070
- [GitHub Discussions](https://github.com/reactive-python/reactpy/discussions)
7171
- [Discord](https://discord.gg/uNb5P4hA9X)
72-
- [Contributor Guide](https://reactpy.dev/docs/developing-reactpy/contributor-guide.html)
72+
- [Contributor Guide](https://reactpy.dev/docs/about/contributor-guide.html)
7373
- [Code of Conduct](https://github.com/reactive-python/reactpy/blob/main/CODE_OF_CONDUCT.md)

docs/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
We provide two main ways to run the docs. Both use
44
[`nox`](https://pypi.org/project/nox/):
55

6-
- `nox -s docs` - displayes the docs and rebuilds when files are modified.
6+
- `nox -s docs` - displays the docs and rebuilds when files are modified.
77
- `nox -s docs-in-docker` - builds a docker image and runs the docs from there.
88

99
If any changes to the core of the documentation are made (i.e. to non-`*.rst` files),

docs/source/_custom_js/src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ function triggerIfInViewport(element, callback) {
8686
},
8787
{
8888
root: null,
89-
threshold: 0.1, // set offset 0.1 means trigger if atleast 10% of element in viewport
89+
threshold: 0.1, // set offset 0.1 means trigger if at least 10% of element in viewport
9090
},
9191
);
9292

docs/source/about/changelog.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ v1.0.0-a4
6262

6363
**Deprecated**
6464

65-
- :pull:`919` - Declaration of keys via keywork arguments in standard elements. A script
65+
- :pull:`919` - Declaration of keys via keyword arguments in standard elements. A script
6666
has been added to automatically convert old usages where possible.
6767

6868

@@ -590,7 +590,7 @@ v0.35.2
590590
This release includes several bug fixes. The most significant of which is the ability to
591591
change the type of an element in the try (i.e. to and from being a component) without
592592
getting an error. Originally the errors were introduced because it was though changing
593-
element type would not be desireable. This was not the case though - swapping types
593+
element type would not be desirable. This was not the case though - swapping types
594594
turns out to be quite common and useful.
595595

596596
**Closed Issues**

docs/source/guides/adding-interactivity/components-with-state/_examples/adding_state_variable/data.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
{
4545
"name": "Terracotta Army",
4646
"artist": "Unknown Artist",
47-
"description": "The Terracotta Army is a collection of terracotta sculptures depicting the armies of Qin Shi Huang, the first Emperor of China. The army consited of more than 8,000 soldiers, 130 chariots with 520 horses, and 150 cavalry horses.",
47+
"description": "The Terracotta Army is a collection of terracotta sculptures depicting the armies of Qin Shi Huang, the first Emperor of China. The army consisted of more than 8,000 soldiers, 130 chariots with 520 horses, and 150 cavalry horses.",
4848
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/2015-09-22-081415_-_Terrakotta-Armee%2C_Grosse_Halle.jpg/1920px-2015-09-22-081415_-_Terrakotta-Armee%2C_Grosse_Halle.jpg",
4949
"alt": "12 terracotta sculptures of solemn warriors, each with a unique facial expression and armor."
5050
},

docs/source/guides/adding-interactivity/components-with-state/_examples/isolated_state/data.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
{
4545
"name": "Terracotta Army",
4646
"artist": "Unknown Artist",
47-
"description": "The Terracotta Army is a collection of terracotta sculptures depicting the armies of Qin Shi Huang, the first Emperor of China. The army consited of more than 8,000 soldiers, 130 chariots with 520 horses, and 150 cavalry horses.",
47+
"description": "The Terracotta Army is a collection of terracotta sculptures depicting the armies of Qin Shi Huang, the first Emperor of China. The army consisted of more than 8,000 soldiers, 130 chariots with 520 horses, and 150 cavalry horses.",
4848
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/2015-09-22-081415_-_Terrakotta-Armee%2C_Grosse_Halle.jpg/1920px-2015-09-22-081415_-_Terrakotta-Armee%2C_Grosse_Halle.jpg",
4949
"alt": "12 terracotta sculptures of solemn warriors, each with a unique facial expression and armor."
5050
},

docs/source/guides/adding-interactivity/components-with-state/_examples/multiple_state_variables/data.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
{
4545
"name": "Terracotta Army",
4646
"artist": "Unknown Artist",
47-
"description": "The Terracotta Army is a collection of terracotta sculptures depicting the armies of Qin Shi Huang, the first Emperor of China. The army consited of more than 8,000 soldiers, 130 chariots with 520 horses, and 150 cavalry horses.",
47+
"description": "The Terracotta Army is a collection of terracotta sculptures depicting the armies of Qin Shi Huang, the first Emperor of China. The army consisted of more than 8,000 soldiers, 130 chariots with 520 horses, and 150 cavalry horses.",
4848
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/2015-09-22-081415_-_Terrakotta-Armee%2C_Grosse_Halle.jpg/1920px-2015-09-22-081415_-_Terrakotta-Armee%2C_Grosse_Halle.jpg",
4949
"alt": "12 terracotta sculptures of solemn warriors, each with a unique facial expression and armor."
5050
},

docs/source/guides/adding-interactivity/components-with-state/_examples/when_variables_are_not_enough/data.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
{
4545
"name": "Terracotta Army",
4646
"artist": "Unknown Artist",
47-
"description": "The Terracotta Army is a collection of terracotta sculptures depicting the armies of Qin Shi Huang, the first Emperor of China. The army consited of more than 8,000 soldiers, 130 chariots with 520 horses, and 150 cavalry horses.",
47+
"description": "The Terracotta Army is a collection of terracotta sculptures depicting the armies of Qin Shi Huang, the first Emperor of China. The army consisted of more than 8,000 soldiers, 130 chariots with 520 horses, and 150 cavalry horses.",
4848
"url": "https://upload.wikimedia.org/wikipedia/commons/thumb/9/9a/2015-09-22-081415_-_Terrakotta-Armee%2C_Grosse_Halle.jpg/1920px-2015-09-22-081415_-_Terrakotta-Armee%2C_Grosse_Halle.jpg",
4949
"alt": "12 terracotta sculptures of solemn warriors, each with a unique facial expression and armor."
5050
},

docs/source/guides/adding-interactivity/dangers-of-mutability/index.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -531,7 +531,7 @@ Removing Set Items
531531
s.difference_update(values)
532532
s -= values # "in-place" operators mutate!
533533
534-
s.symetric_difference_update(values)
534+
s.symmetric_difference_update(values)
535535
s ^= values # "in-place" operators mutate!
536536
537537
s.intersection_update(values)
@@ -547,7 +547,7 @@ Removing Set Items
547547
s.difference(values)
548548
s - values
549549
550-
s.symetric_difference(values)
550+
s.symmetric_difference(values)
551551
s ^ values
552552
553553
s.intersection(values)

docs/source/guides/adding-interactivity/index.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ Section 3: State as a Snapshot
111111
------------------------------
112112

113113
As we :ref:`learned earlier <Components with State>`, state setters behave a little
114-
differently than you might exepct at first glance. Instead of updating your current
114+
differently than you might expect at first glance. Instead of updating your current
115115
handle on the setter's corresponding variable, it schedules a re-render of the component
116116
which owns the state.
117117

@@ -133,7 +133,7 @@ actually sent?
133133
.. reactpy:: state-as-a-snapshot/_examples/print_chat_message
134134

135135
As it turns out, changing the message recipient after pressing send does not change
136-
where the message ulitmately goes. However, one could imagine a bug where the recipient
136+
where the message ultimately goes. However, one could imagine a bug where the recipient
137137
of a message is determined at the time the message is sent rather than at the time the
138138
"Send" button it clicked. Thus changing the recipient after pressing send would change
139139
where the message got sent.

docs/source/guides/adding-interactivity/multiple-state-updates/index.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ Batched Updates
1010
---------------
1111

1212
As we learned :ref:`previously <state as a snapshot>`, state variables remain fixed
13-
inside each render as if state were a snapshot taken at the begining of each render.
13+
inside each render as if state were a snapshot taken at the beginning of each render.
1414
This is why, in the example below, even though it might seem like clicking the
1515
"Increment" button would cause the ``number`` to increase by ``3``, it only does by
1616
``1``:
@@ -22,7 +22,7 @@ the event handler is not an ``async`` function), ReactPy waits until all the cod
2222
event handler has run before processing state and starting the next render. Thus, it's
2323
the last call to a given state setter that matters. In the example below, even though we
2424
set the color of the button to ``"orange"`` and then ``"pink"`` before ``"blue"``,
25-
the color does not quickly flash orange and pink before blue - it alway remains blue:
25+
the color does not quickly flash orange and pink before blue - it always remains blue:
2626

2727
.. reactpy:: _examples/set_color_3_times
2828

docs/source/guides/adding-interactivity/responding-to-events/_examples/stop_event_propagation.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ def DivInDiv():
3030
return html.div(
3131
html.button(
3232
{"on_click": lambda event: set_stop_propagatation(not stop_propagatation)},
33-
"Toggle Propogation",
33+
"Toggle Propagation",
3434
),
3535
html.pre(f"Will propagate: {not stop_propagatation}"),
3636
html.pre(f"Inner click count: {inner_count}"),

docs/source/guides/adding-interactivity/responding-to-events/index.rst

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,13 @@ Unfortunately this means you cannot conditionally prevent default behavior in re
131131
to event data without writing :ref:`Custom Javascript Components`.
132132

133133

134-
Stop Event Propogation
134+
Stop Event Propagation
135135
......................
136136

137137
Similarly to :ref:`preventing default behavior <Preventing Default Event Actions>`, you
138138
can use the :func:`~reactpy.core.events.event` decorator to prevent events originating in a
139139
child element from propagating to parent elements by setting ``stop_propagation``. In
140-
the example below we place a red ``div`` inside a parent blue ``div``. When propogation
140+
the example below we place a red ``div`` inside a parent blue ``div``. When propagation
141141
is turned on, clicking the red element will cause the handler for the outer blue one to
142142
trigger. Conversely, when it's off, only the handler for the red element will trigger.
143143

docs/source/guides/adding-interactivity/state-as-a-snapshot/index.rst

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ version of the view rather then mutating the existing one.
1717

1818
Given this, when ReactPy "renders" something, it's as if ReactPy has taken a snapshot of the
1919
UI where all the event handlers, local variables and the view itself were calculated
20-
using what state was present at the time of that render. Then, when user iteractions
20+
using what state was present at the time of that render. Then, when user interactions
2121
trigger state setters, ReactPy is made away of the newly set state and schedules a
2222
re-render. When this subsequent renders occurs it performs all the same calculations as
2323
before, but with this new state.
@@ -70,7 +70,7 @@ Even though, we called ``set_count`` three times with what might have seemed lik
7070
different values, every time we were actually just doing ``set_count(1)`` on each call.
7171
Only after the event handler returns will ReactPy actually perform the next render where
7272
count is ``1``. When it does, ``number`` will be ``1`` and we'll be able to perform the
73-
same subtitution as before to see what the next number will be after we click
73+
same substitution as before to see what the next number will be after we click
7474
"Increment":
7575

7676
.. code-block::
@@ -89,7 +89,7 @@ to reason about what should happen in the example below. What will be printed wh
8989

9090
.. reactpy:: _examples/print_count_after_set
9191

92-
If we use the same subtitution trick we saw before, we can rewrite these lines:
92+
If we use the same substitution trick we saw before, we can rewrite these lines:
9393

9494
.. code-block::
9595

docs/source/guides/creating-interfaces/html-with-reactpy/index.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ In ReactPy we add these attributes to elements using a dictionary:
9999

100100
.. raw:: html
101101

102-
<!-- no tabindex since that would ruin accesibility of the page -->
102+
<!-- no tabindex since that would ruin accessibility of the page -->
103103
<img
104104
src="https://picsum.photos/id/237/500/300"
105105
class="img-fluid"

docs/source/guides/escape-hatches/distributing-javascript.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ loaded with :func:`~reactpy.web.module.export`.
174174
# unique since it must share a namespace with all other javascript packages.
175175
name="YOUR-PACKAGE-NAME",
176176
file=_BUNDLE_PATH,
177-
# What to temporarilly display while the module is being loaded
177+
# What to temporarily display while the module is being loaded
178178
fallback="Loading...",
179179
)
180180

docs/source/guides/getting-started/_examples/debug_error_example.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ def App():
88

99
@component
1010
def GoodComponent():
11-
return html.p("This component rendered successfuly")
11+
return html.p("This component rendered successfully")
1212

1313

1414
@component

docs/source/guides/understanding-reactpy/representing-html.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ Representing HTML 🚧
77

88
Under construction 🚧
99

10-
We've already discussed how to contruct HTML with ReactPy in a :ref:`previous section <HTML
10+
We've already discussed how to construct HTML with ReactPy in a :ref:`previous section <HTML
1111
with ReactPy>`, but we skimmed over the question of the data structure we use to represent
1212
it. Let's reconsider the examples from before - on the top is some HTML and on the
1313
bottom is the corresponding code to create it in ReactPy:

docs/source/reference/_static/vdom-json-schema.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
},
6262
"type": ["object", "string"]
6363
},
64-
"eventHander": {
64+
"eventHandler": {
6565
"properties": {
6666
"preventDefault": {
6767
"type": "boolean"

docs/source/reference/html-attributes.rst

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ words. For example, ``tabindex`` and ``margin-left`` become ``tab_index`` and
1111
``margin_left`` respectively.
1212

1313

14-
Noteable Attributes
14+
Notable Attributes
1515
-------------------
1616

1717
Some attributes in ReactPy are renamed, have special meaning, or are used differently

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
[project]
44
name = "scripts"
55
version = "0.0.0"
6-
description = "Scripts for managing the ReactPy respository"
6+
description = "Scripts for managing the ReactPy repository"
77

88
# --- Hatch ----------------------------------------------------------------------------
99

src/js/packages/event-to-object/tests/event-to-object.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ const simpleTestCases: SimpleTestCase<any>[] = [
5757
},
5858
{
5959
types: ["copy", "cut", "paste"],
60-
description: "clipboad event",
60+
description: "clipboard event",
6161
givenEventType: window.ClipboardEvent,
6262
expectedConversion: { clipboardData: null },
6363
},

src/py/reactpy/reactpy/_console/ast_utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ def rewrite_changed_nodes(
4141
msg = "Failed to change code"
4242
raise RuntimeError(msg)
4343

44-
# check if an nodes to rewrite contain eachother, pick outermost nodes
44+
# check if an nodes to rewrite contain each other, pick outermost nodes
4545
current_outermost_node, *sorted_nodes_to_unparse = sorted(
4646
nodes_to_unparse, key=lambda n: n.lineno
4747
)

src/py/reactpy/reactpy/_console/rewrite_keys.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ def rewrite_keys(paths: list[str]) -> None:
4040
recommend running your code formatter like Black against your code after executing
4141
this command.
4242
43-
Additionally, We are unable to perserve the location of comments that lie within any
43+
Additionally, We are unable to preserve the location of comments that lie within any
4444
rewritten code. This command will place the comments in the code it plans to rewrite
4545
just above its changes. As such it requires manual intervention to put those
4646
comments back in their original location.

src/py/reactpy/reactpy/backend/flask.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ def run_server() -> None:
106106
try:
107107
await stopped.wait()
108108
finally:
109-
# we may have exitted because this task was cancelled
109+
# we may have exited because this task was cancelled
110110
server.current.shutdown()
111111
# the thread should eventually join
112112
thread.join(timeout=3)

src/py/reactpy/reactpy/config.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""
22
ReactPy provides a series of configuration options that can be set using environment
3-
variables or, for those which allow it, a programatic interface.
3+
variables or, for those which allow it, a programmatic interface.
44
"""
55

66
from pathlib import Path
@@ -49,7 +49,7 @@
4949
5050
This directory **MUST** be treated as a black box. Downstream applications **MUST NOT**
5151
assume anything about the structure of this directory see :mod:`reactpy.web.module` for a
52-
set of publically available APIs for working with the client.
52+
set of publicly available APIs for working with the client.
5353
"""
5454

5555
REACTPY_TESTING_DEFAULT_TIMEOUT = _Option(

src/py/reactpy/reactpy/core/events.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def event(
4444
element = reactpy.html.button({"onClick": my_callback})
4545
4646
You may want the ability to prevent the default action associated with the event
47-
from taking place, or stoping the event from propagating up the DOM. This decorator
47+
from taking place, or stopping the event from propagating up the DOM. This decorator
4848
allows you to add that functionality to your callbacks.
4949
5050
.. code-block:: python
@@ -191,7 +191,7 @@ def merge_event_handlers(
191191
or handler.prevent_default != prevent_default
192192
or handler.target != target
193193
):
194-
msg = "Cannot merge handlers - 'stop_propagation', 'prevent_default' or 'target' mistmatch."
194+
msg = "Cannot merge handlers - 'stop_propagation', 'prevent_default' or 'target' mismatch."
195195
raise ValueError(msg)
196196

197197
return EventHandler(

src/py/reactpy/reactpy/core/hooks.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ def use_callback(
341341
function:
342342
The function whose identity will be preserved
343343
dependencies:
344-
Dependencies of the callback. The identity the ``function`` will be udpated
344+
Dependencies of the callback. The identity the ``function`` will be updated
345345
if the identity of any value in the given sequence changes (i.e. their
346346
:func:`id` is different). By default these are inferred based on local
347347
variables that are referenced by the given function.
@@ -573,7 +573,7 @@ class LifeCycleHook:
573573
# given render have been completed.
574574
hook.affect_layout_did_render()
575575
576-
# Typically an event occurs and a new render is scheduled, thus begining
576+
# Typically an event occurs and a new render is scheduled, thus beginning
577577
# the render cycle anew.
578578
hook.schedule_render()
579579
@@ -626,7 +626,7 @@ def schedule_render(self) -> None:
626626

627627
def use_state(self, function: Callable[[], _Type]) -> _Type:
628628
if not self._rendered_atleast_once:
629-
# since we're not intialized yet we're just appending state
629+
# since we're not initialized yet we're just appending state
630630
result = function()
631631
self._state += (result,)
632632
else:
@@ -636,7 +636,7 @@ def use_state(self, function: Callable[[], _Type]) -> _Type:
636636
return result
637637

638638
def add_effect(self, effect_type: EffectType, function: Callable[[], None]) -> None:
639-
"""Trigger a function on the occurance of the given effect type"""
639+
"""Trigger a function on the occurrence of the given effect type"""
640640
self._event_effects[effect_type].append(function)
641641

642642
def set_context_provider(self, provider: ContextProvider[Any]) -> None:

src/py/reactpy/reactpy/core/layout.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -568,7 +568,7 @@ def __init__(
568568
"""The actual model of the element"""
569569

570570
self.patch_path = patch_path
571-
"""A "/" delimitted path to the element within the greater layout"""
571+
"""A "/" delimited path to the element within the greater layout"""
572572

573573
self.children_by_key = children_by_key
574574
"""Child model states indexed by their unique keys"""

src/py/reactpy/reactpy/core/types.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ class EventHandlerType(Protocol):
187187
"""Typically left as ``None`` except when a static target is useful.
188188
189189
When testing, it may be useful to specify a static target ID so events can be
190-
triggered programatically.
190+
triggered programmatically.
191191
192192
.. note::
193193

src/py/reactpy/reactpy/core/vdom.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@
5858
"elementEventHandlers": {
5959
"type": "object",
6060
"patternProperties": {
61-
".*": {"$ref": "#/definitions/eventHander"},
61+
".*": {"$ref": "#/definitions/eventHandler"},
6262
},
6363
},
64-
"eventHander": {
64+
"eventHandler": {
6565
"type": "object",
6666
"properties": {
6767
"target": {"type": "string"},
@@ -152,7 +152,7 @@ def vdom(
152152
iterables of children. The attribute mapping **must** precede the children,
153153
or children which will be merged into their respective parts of the model.
154154
key:
155-
A string idicating the identity of a particular element. This is significant
155+
A string indicating the identity of a particular element. This is significant
156156
to preserve event handlers across updates - without a key, a re-render would
157157
cause these handlers to be deleted, but with a key, they would be redirected
158158
to any newly defined handlers.

0 commit comments

Comments
 (0)