reactpy 1.0.2__tar.gz → 1.1.0__tar.gz

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.
Files changed (101) hide show
  1. {reactpy-1.0.2 → reactpy-1.1.0}/.gitignore +1 -0
  2. {reactpy-1.0.2 → reactpy-1.1.0}/PKG-INFO +19 -4
  3. {reactpy-1.0.2 → reactpy-1.1.0}/pyproject.toml +26 -44
  4. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/__init__.py +8 -8
  5. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/_console/rewrite_camel_case_props.py +1 -1
  6. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/_console/rewrite_keys.py +1 -1
  7. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/_option.py +6 -1
  8. reactpy-1.0.2/reactpy/_static/app/dist/assets/index.a1f87a11.js → reactpy-1.1.0/reactpy/_static/assets/index.1a2d86bf.js +1 -1
  9. {reactpy-1.0.2/reactpy/_static/app/dist → reactpy-1.1.0/reactpy/_static}/index.html +1 -1
  10. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/backend/_common.py +35 -37
  11. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/backend/default.py +19 -13
  12. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/backend/fastapi.py +11 -11
  13. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/backend/flask.py +26 -21
  14. reactpy-1.1.0/reactpy/backend/hooks.py +45 -0
  15. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/backend/sanic.py +44 -36
  16. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/backend/starlette.py +34 -21
  17. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/backend/tornado.py +17 -9
  18. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/backend/types.py +2 -2
  19. reactpy-1.1.0/reactpy/backend/utils.py +87 -0
  20. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/config.py +8 -0
  21. reactpy-1.1.0/reactpy/core/_life_cycle_hook.py +244 -0
  22. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/core/events.py +3 -5
  23. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/core/hooks.py +59 -275
  24. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/core/layout.py +138 -80
  25. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/core/serve.py +10 -2
  26. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/core/types.py +36 -23
  27. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/core/vdom.py +3 -6
  28. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/testing/backend.py +8 -11
  29. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/testing/common.py +2 -3
  30. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/types.py +3 -3
  31. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/utils.py +1 -1
  32. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/web/module.py +4 -6
  33. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/web/templates/react.js +3 -2
  34. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/web/utils.py +7 -3
  35. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/widgets.py +3 -4
  36. reactpy-1.0.2/reactpy/backend/hooks.py +0 -29
  37. reactpy-1.0.2/reactpy/backend/utils.py +0 -98
  38. reactpy-1.0.2/tests/__init__.py +0 -0
  39. reactpy-1.0.2/tests/conftest.py +0 -80
  40. reactpy-1.0.2/tests/test__console/__init__.py +0 -0
  41. reactpy-1.0.2/tests/test__console/test_rewrite_camel_case_props.py +0 -118
  42. reactpy-1.0.2/tests/test__console/test_rewrite_keys.py +0 -237
  43. reactpy-1.0.2/tests/test__option.py +0 -137
  44. reactpy-1.0.2/tests/test_backend/__init__.py +0 -0
  45. reactpy-1.0.2/tests/test_backend/test__common.py +0 -70
  46. reactpy-1.0.2/tests/test_backend/test_all.py +0 -174
  47. reactpy-1.0.2/tests/test_backend/test_utils.py +0 -46
  48. reactpy-1.0.2/tests/test_client.py +0 -161
  49. reactpy-1.0.2/tests/test_config.py +0 -53
  50. reactpy-1.0.2/tests/test_core/__init__.py +0 -0
  51. reactpy-1.0.2/tests/test_core/test_component.py +0 -73
  52. reactpy-1.0.2/tests/test_core/test_events.py +0 -223
  53. reactpy-1.0.2/tests/test_core/test_hooks.py +0 -1259
  54. reactpy-1.0.2/tests/test_core/test_layout.py +0 -1252
  55. reactpy-1.0.2/tests/test_core/test_serve.py +0 -139
  56. reactpy-1.0.2/tests/test_core/test_vdom.py +0 -315
  57. reactpy-1.0.2/tests/test_html.py +0 -160
  58. reactpy-1.0.2/tests/test_sample.py +0 -8
  59. reactpy-1.0.2/tests/test_testing.py +0 -218
  60. reactpy-1.0.2/tests/test_utils.py +0 -270
  61. reactpy-1.0.2/tests/test_web/__init__.py +0 -0
  62. reactpy-1.0.2/tests/test_web/js_fixtures/component-can-have-child.js +0 -27
  63. reactpy-1.0.2/tests/test_web/js_fixtures/export-resolution/index.js +0 -2
  64. reactpy-1.0.2/tests/test_web/js_fixtures/export-resolution/one.js +0 -5
  65. reactpy-1.0.2/tests/test_web/js_fixtures/export-resolution/two.js +0 -2
  66. reactpy-1.0.2/tests/test_web/js_fixtures/exports-syntax.js +0 -23
  67. reactpy-1.0.2/tests/test_web/js_fixtures/exports-two-components.js +0 -20
  68. reactpy-1.0.2/tests/test_web/js_fixtures/set-flag-when-unmount-is-called.js +0 -31
  69. reactpy-1.0.2/tests/test_web/js_fixtures/simple-button.js +0 -25
  70. reactpy-1.0.2/tests/test_web/test_module.py +0 -235
  71. reactpy-1.0.2/tests/test_web/test_utils.py +0 -152
  72. reactpy-1.0.2/tests/test_widgets.py +0 -141
  73. reactpy-1.0.2/tests/tooling/__init__.py +0 -0
  74. reactpy-1.0.2/tests/tooling/asserts.py +0 -5
  75. reactpy-1.0.2/tests/tooling/common.py +0 -14
  76. reactpy-1.0.2/tests/tooling/hooks.py +0 -15
  77. reactpy-1.0.2/tests/tooling/layout.py +0 -44
  78. reactpy-1.0.2/tests/tooling/loop.py +0 -91
  79. reactpy-1.0.2/tests/tooling/select.py +0 -107
  80. {reactpy-1.0.2 → reactpy-1.1.0}/MANIFEST.in +0 -0
  81. {reactpy-1.0.2 → reactpy-1.1.0}/README.md +0 -0
  82. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/__main__.py +0 -0
  83. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/_console/__init__.py +0 -0
  84. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/_console/ast_utils.py +0 -0
  85. {reactpy-1.0.2/reactpy/_static/app/dist → reactpy-1.1.0/reactpy/_static}/assets/reactpy-logo.ico +0 -0
  86. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/_warnings.py +0 -0
  87. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/backend/__init__.py +0 -0
  88. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/core/__init__.py +0 -0
  89. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/core/_f_back.py +0 -0
  90. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/core/_thread_local.py +0 -0
  91. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/core/component.py +0 -0
  92. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/future.py +0 -0
  93. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/html.py +0 -0
  94. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/logging.py +0 -0
  95. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/py.typed +0 -0
  96. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/sample.py +0 -0
  97. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/svg.py +0 -0
  98. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/testing/__init__.py +0 -0
  99. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/testing/display.py +0 -0
  100. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/testing/logs.py +0 -0
  101. {reactpy-1.0.2 → reactpy-1.1.0}/reactpy/web/__init__.py +0 -0
@@ -2,3 +2,4 @@
2
2
 
3
3
  # --- Build Artifacts ---
4
4
  reactpy/_static
5
+ js
@@ -1,12 +1,12 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.3
2
2
  Name: reactpy
3
- Version: 1.0.2
3
+ Version: 1.1.0
4
4
  Summary: Reactive user interfaces with pure Python
5
5
  Project-URL: Source, https://github.com/reactive-python/reactpy
6
6
  Project-URL: Documentation, https://github.com/reactive-python/reactpy#readme
7
7
  Project-URL: Issues, https://github.com/reactive-python/reactpy/discussions
8
8
  Author-email: Ryan Morshead <ryan.morshead@gmail.com>
9
- License-Expression: MIT
9
+ License: MIT
10
10
  Keywords: component,javascript,react,reactpy
11
11
  Classifier: Development Status :: 4 - Beta
12
12
  Classifier: Programming Language :: Python
@@ -19,6 +19,7 @@ Requires-Python: >=3.9
19
19
  Requires-Dist: anyio>=3
20
20
  Requires-Dist: asgiref>=3
21
21
  Requires-Dist: colorlog>=6
22
+ Requires-Dist: exceptiongroup>=1.0
22
23
  Requires-Dist: fastjsonschema>=2.14.5
23
24
  Requires-Dist: jsonpatch>=1.32
24
25
  Requires-Dist: lxml>=4
@@ -26,7 +27,19 @@ Requires-Dist: mypy-extensions>=0.4.3
26
27
  Requires-Dist: requests>=2
27
28
  Requires-Dist: typing-extensions>=3.10
28
29
  Provides-Extra: all
29
- Requires-Dist: reactpy[fastapi,flask,sanic,starlette,testing,tornado]; extra == 'all'
30
+ Requires-Dist: fastapi>=0.63.0; extra == 'all'
31
+ Requires-Dist: flask; extra == 'all'
32
+ Requires-Dist: flask-cors; extra == 'all'
33
+ Requires-Dist: flask-sock; extra == 'all'
34
+ Requires-Dist: markupsafe<2.1,>=1.1.1; extra == 'all'
35
+ Requires-Dist: playwright; extra == 'all'
36
+ Requires-Dist: sanic-cors; extra == 'all'
37
+ Requires-Dist: sanic>=21; extra == 'all'
38
+ Requires-Dist: setuptools; extra == 'all'
39
+ Requires-Dist: starlette>=0.13.6; extra == 'all'
40
+ Requires-Dist: tornado; extra == 'all'
41
+ Requires-Dist: tracerite>=1.1.1; extra == 'all'
42
+ Requires-Dist: uvicorn[standard]>=0.19.0; extra == 'all'
30
43
  Provides-Extra: fastapi
31
44
  Requires-Dist: fastapi>=0.63.0; extra == 'fastapi'
32
45
  Requires-Dist: uvicorn[standard]>=0.19.0; extra == 'fastapi'
@@ -38,6 +51,8 @@ Requires-Dist: markupsafe<2.1,>=1.1.1; extra == 'flask'
38
51
  Provides-Extra: sanic
39
52
  Requires-Dist: sanic-cors; extra == 'sanic'
40
53
  Requires-Dist: sanic>=21; extra == 'sanic'
54
+ Requires-Dist: setuptools; extra == 'sanic'
55
+ Requires-Dist: tracerite>=1.1.1; extra == 'sanic'
41
56
  Requires-Dist: uvicorn[standard]>=0.19.0; extra == 'sanic'
42
57
  Provides-Extra: starlette
43
58
  Requires-Dist: starlette>=0.13.6; extra == 'starlette'
@@ -12,9 +12,7 @@ readme = "README.md"
12
12
  requires-python = ">=3.9"
13
13
  license = "MIT"
14
14
  keywords = ["react", "javascript", "reactpy", "component"]
15
- authors = [
16
- { name = "Ryan Morshead", email = "ryan.morshead@gmail.com" },
17
- ]
15
+ authors = [{ name = "Ryan Morshead", email = "ryan.morshead@gmail.com" }]
18
16
  classifiers = [
19
17
  "Development Status :: 4 - Beta",
20
18
  "Programming Language :: Python",
@@ -25,6 +23,7 @@ classifiers = [
25
23
  "Programming Language :: Python :: Implementation :: PyPy",
26
24
  ]
27
25
  dependencies = [
26
+ "exceptiongroup >=1.0",
28
27
  "typing-extensions >=3.10",
29
28
  "mypy-extensions >=0.4.3",
30
29
  "anyio >=3",
@@ -38,31 +37,18 @@ dependencies = [
38
37
  [project.optional-dependencies]
39
38
  all = ["reactpy[starlette,sanic,fastapi,flask,tornado,testing]"]
40
39
 
41
- starlette = [
42
- "starlette >=0.13.6",
43
- "uvicorn[standard] >=0.19.0",
44
- ]
40
+ starlette = ["starlette >=0.13.6", "uvicorn[standard] >=0.19.0"]
45
41
  sanic = [
46
42
  "sanic >=21",
47
43
  "sanic-cors",
44
+ "tracerite>=1.1.1",
45
+ "setuptools",
48
46
  "uvicorn[standard] >=0.19.0",
49
47
  ]
50
- fastapi = [
51
- "fastapi >=0.63.0",
52
- "uvicorn[standard] >=0.19.0",
53
- ]
54
- flask = [
55
- "flask",
56
- "markupsafe>=1.1.1,<2.1",
57
- "flask-cors",
58
- "flask-sock",
59
- ]
60
- tornado = [
61
- "tornado",
62
- ]
63
- testing = [
64
- "playwright",
65
- ]
48
+ fastapi = ["fastapi >=0.63.0", "uvicorn[standard] >=0.19.0"]
49
+ flask = ["flask", "markupsafe>=1.1.1,<2.1", "flask-cors", "flask-sock"]
50
+ tornado = ["tornado"]
51
+ testing = ["playwright"]
66
52
 
67
53
  [project.urls]
68
54
  Source = "https://github.com/reactive-python/reactpy"
@@ -80,7 +66,7 @@ pre-install-command = "hatch build --hooks-only"
80
66
  dependencies = [
81
67
  "coverage[toml]>=6.5",
82
68
  "pytest",
83
- "pytest-asyncio>=0.17",
69
+ "pytest-asyncio>=0.23",
84
70
  "pytest-mock",
85
71
  "pytest-rerunfailures",
86
72
  "pytest-timeout",
@@ -98,21 +84,17 @@ cov-report = [
98
84
  # "- coverage combine",
99
85
  "coverage report",
100
86
  ]
101
- cov = [
102
- "test-cov {args}",
103
- "cov-report",
104
- ]
87
+ cov = ["test-cov {args}", "cov-report"]
105
88
 
106
89
  [tool.hatch.envs.default.env-vars]
107
- REACTPY_DEBUG_MODE="1"
90
+ REACTPY_DEBUG_MODE = "1"
108
91
 
109
92
  [tool.hatch.envs.lint]
110
93
  features = ["all"]
111
94
  dependencies = [
112
- "mypy>=1.0.0",
95
+ "mypy==1.8",
113
96
  "types-click",
114
97
  "types-tornado",
115
- "types-pkg-resources",
116
98
  "types-flask",
117
99
  "types-requests",
118
100
  ]
@@ -121,16 +103,20 @@ dependencies = [
121
103
  types = "mypy --strict reactpy"
122
104
  all = ["types"]
123
105
 
106
+ [tool.hatch.build.targets.sdist]
107
+ artifacts = ["_static"]
108
+ exclude = ["scripts/", "tests/"]
109
+
110
+ [tool.hatch.build.targets.wheel]
111
+ artifacts = ["_static"]
112
+ exclude = ["scripts/", "tests/"]
113
+
124
114
  [[tool.hatch.build.hooks.build-scripts.scripts]]
125
- work_dir = "../../js"
126
- out_dir = "reactpy/_static"
127
115
  commands = [
128
- "npm ci",
129
- "npm run build"
130
- ]
131
- artifacts = [
132
- "app/dist/"
116
+ "cd .. && cd .. && cd js && npm install && npm run build",
117
+ "cd scripts && python copy_js_output.py",
133
118
  ]
119
+ artifacts = []
134
120
 
135
121
  # --- Pytest ---------------------------------------------------------------------------
136
122
 
@@ -156,9 +142,7 @@ warn_unused_ignores = true
156
142
  source_pkgs = ["reactpy"]
157
143
  branch = false
158
144
  parallel = false
159
- omit = [
160
- "reactpy/__init__.py",
161
- ]
145
+ omit = ["reactpy/__init__.py"]
162
146
 
163
147
  [tool.coverage.report]
164
148
  fail_under = 100
@@ -171,6 +155,4 @@ exclude_lines = [
171
155
  "if __name__ == .__main__.:",
172
156
  "if TYPE_CHECKING:",
173
157
  ]
174
- omit = [
175
- "reactpy/__main__.py",
176
- ]
158
+ omit = ["reactpy/__main__.py"]
@@ -1,5 +1,4 @@
1
1
  from reactpy import backend, config, html, logging, sample, svg, types, web, widgets
2
- from reactpy.backend.hooks import use_connection, use_location, use_scope
3
2
  from reactpy.backend.utils import run
4
3
  from reactpy.core import hooks
5
4
  from reactpy.core.component import component
@@ -7,37 +6,38 @@ from reactpy.core.events import event
7
6
  from reactpy.core.hooks import (
8
7
  create_context,
9
8
  use_callback,
9
+ use_connection,
10
10
  use_context,
11
11
  use_debug_value,
12
12
  use_effect,
13
+ use_location,
13
14
  use_memo,
14
15
  use_reducer,
15
16
  use_ref,
17
+ use_scope,
16
18
  use_state,
17
19
  )
18
20
  from reactpy.core.layout import Layout
19
- from reactpy.core.serve import Stop
20
21
  from reactpy.core.vdom import vdom
21
22
  from reactpy.utils import Ref, html_to_vdom, vdom_to_html
22
23
 
23
24
  __author__ = "The Reactive Python Team"
24
- __version__ = "1.0.2" # DO NOT MODIFY
25
+ __version__ = "1.1.0"
25
26
 
26
27
  __all__ = [
28
+ "Layout",
29
+ "Ref",
27
30
  "backend",
28
31
  "component",
29
32
  "config",
30
33
  "create_context",
31
34
  "event",
32
35
  "hooks",
33
- "html_to_vdom",
34
36
  "html",
35
- "Layout",
37
+ "html_to_vdom",
36
38
  "logging",
37
- "Ref",
38
39
  "run",
39
40
  "sample",
40
- "Stop",
41
41
  "svg",
42
42
  "types",
43
43
  "use_callback",
@@ -51,8 +51,8 @@ __all__ = [
51
51
  "use_ref",
52
52
  "use_scope",
53
53
  "use_state",
54
- "vdom_to_html",
55
54
  "vdom",
55
+ "vdom_to_html",
56
56
  "web",
57
57
  "widgets",
58
58
  ]
@@ -29,7 +29,7 @@ def rewrite_camel_case_props(paths: list[str]) -> None:
29
29
 
30
30
  for p in map(Path, paths):
31
31
  for f in [p] if p.is_file() else p.rglob("*.py"):
32
- result = generate_rewrite(file=f, source=f.read_text())
32
+ result = generate_rewrite(file=f, source=f.read_text(encoding="utf-8"))
33
33
  if result is not None:
34
34
  f.write_text(result)
35
35
 
@@ -51,7 +51,7 @@ def rewrite_keys(paths: list[str]) -> None:
51
51
 
52
52
  for p in map(Path, paths):
53
53
  for f in [p] if p.is_file() else p.rglob("*.py"):
54
- result = generate_rewrite(file=f, source=f.read_text())
54
+ result = generate_rewrite(file=f, source=f.read_text(encoding="utf-8"))
55
55
  if result is not None:
56
56
  f.write_text(result)
57
57
 
@@ -68,6 +68,10 @@ class Option(Generic[_O]):
68
68
  def current(self, new: _O) -> None:
69
69
  self.set_current(new)
70
70
 
71
+ @current.deleter
72
+ def current(self) -> None:
73
+ self.unset()
74
+
71
75
  def subscribe(self, handler: Callable[[_O], None]) -> Callable[[_O], None]:
72
76
  """Register a callback that will be triggered when this option changes"""
73
77
  if not self.mutable:
@@ -123,7 +127,8 @@ class Option(Generic[_O]):
123
127
  msg = f"{self} cannot be modified after initial load"
124
128
  raise TypeError(msg)
125
129
  old = self.current
126
- delattr(self, "_current")
130
+ if hasattr(self, "_current"):
131
+ delattr(self, "_current")
127
132
  if self.current != old:
128
133
  for sub_func in self._subscribers:
129
134
  sub_func(self.current)
@@ -1 +1 @@
1
- var we=Object.defineProperty;var Pe=(ee,te,ne)=>te in ee?we(ee,te,{enumerable:!0,configurable:!0,writable:!0,value:ne}):ee[te]=ne;var ge=(ee,te,ne)=>(Pe(ee,typeof te!="symbol"?te+"":te,ne),ne);(function(){const te=document.createElement("link").relList;if(te&&te.supports&&te.supports("modulepreload"))return;for(const ie of document.querySelectorAll('link[rel="modulepreload"]'))re(ie);new MutationObserver(ie=>{for(const oe of ie)if(oe.type==="childList")for(const le of oe.addedNodes)le.tagName==="LINK"&&le.rel==="modulepreload"&&re(le)}).observe(document,{childList:!0,subtree:!0});function ne(ie){const oe={};return ie.integrity&&(oe.integrity=ie.integrity),ie.referrerpolicy&&(oe.referrerPolicy=ie.referrerpolicy),ie.crossorigin==="use-credentials"?oe.credentials="include":ie.crossorigin==="anonymous"?oe.credentials="omit":oe.credentials="same-origin",oe}function re(ie){if(ie.ep)return;ie.ep=!0;const oe=ne(ie);fetch(ie.href,oe)}})();var n,l$1,u$1,t$1,o$1,r$1,f$1,e$1,c$1={},s$1=[],a$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,v$1=Array.isArray;function h$1(ee,te){for(var ne in te)ee[ne]=te[ne];return ee}function p$1(ee){var te=ee.parentNode;te&&te.removeChild(ee)}function y$1(ee,te,ne){var re,ie,oe,le={};for(oe in te)oe=="key"?re=te[oe]:oe=="ref"?ie=te[oe]:le[oe]=te[oe];if(arguments.length>2&&(le.children=arguments.length>3?n.call(arguments,2):ne),typeof ee=="function"&&ee.defaultProps!=null)for(oe in ee.defaultProps)le[oe]===void 0&&(le[oe]=ee.defaultProps[oe]);return d$1(ee,le,re,ie,null)}function d$1(ee,te,ne,re,ie){var oe={type:ee,props:te,key:ne,ref:re,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:ie==null?++u$1:ie};return ie==null&&l$1.vnode!=null&&l$1.vnode(oe),oe}function _$1(){return{current:null}}function k$2(ee){return ee.children}function b$1(ee,te){this.props=ee,this.context=te}function g$2(ee,te){if(te==null)return ee.__?g$2(ee.__,ee.__.__k.indexOf(ee)+1):null;for(var ne;te<ee.__k.length;te++)if((ne=ee.__k[te])!=null&&ne.__e!=null)return ne.__e;return typeof ee.type=="function"?g$2(ee):null}function m$1(ee){var te,ne;if((ee=ee.__)!=null&&ee.__c!=null){for(ee.__e=ee.__c.base=null,te=0;te<ee.__k.length;te++)if((ne=ee.__k[te])!=null&&ne.__e!=null){ee.__e=ee.__c.base=ne.__e;break}return m$1(ee)}}function w$2(ee){(!ee.__d&&(ee.__d=!0)&&t$1.push(ee)&&!x$2.__r++||o$1!==l$1.debounceRendering)&&((o$1=l$1.debounceRendering)||r$1)(x$2)}function x$2(){var ee,te,ne,re,ie,oe,le,ue;for(t$1.sort(f$1);ee=t$1.shift();)ee.__d&&(te=t$1.length,re=void 0,ie=void 0,le=(oe=(ne=ee).__v).__e,(ue=ne.__P)&&(re=[],(ie=h$1({},oe)).__v=oe.__v+1,L$1(ue,oe,ie,ne.__n,ue.ownerSVGElement!==void 0,oe.__h!=null?[le]:null,re,le==null?g$2(oe):le,oe.__h),M$1(re,oe),oe.__e!=le&&m$1(oe)),t$1.length>te&&t$1.sort(f$1));x$2.__r=0}function P$1(ee,te,ne,re,ie,oe,le,ue,se,fe){var ce,pe,_e,ae,de,$e,ve,me=re&&re.__k||s$1,ye=me.length;for(ne.__k=[],ce=0;ce<te.length;ce++)if((ae=ne.__k[ce]=(ae=te[ce])==null||typeof ae=="boolean"||typeof ae=="function"?null:typeof ae=="string"||typeof ae=="number"||typeof ae=="bigint"?d$1(null,ae,null,null,ae):v$1(ae)?d$1(k$2,{children:ae},null,null,null):ae.__b>0?d$1(ae.type,ae.props,ae.key,ae.ref?ae.ref:null,ae.__v):ae)!=null){if(ae.__=ne,ae.__b=ne.__b+1,(_e=me[ce])===null||_e&&ae.key==_e.key&&ae.type===_e.type)me[ce]=void 0;else for(pe=0;pe<ye;pe++){if((_e=me[pe])&&ae.key==_e.key&&ae.type===_e.type){me[pe]=void 0;break}_e=null}L$1(ee,ae,_e=_e||c$1,ie,oe,le,ue,se,fe),de=ae.__e,(pe=ae.ref)&&_e.ref!=pe&&(ve||(ve=[]),_e.ref&&ve.push(_e.ref,null,ae),ve.push(pe,ae.__c||de,ae)),de!=null?($e==null&&($e=de),typeof ae.type=="function"&&ae.__k===_e.__k?ae.__d=se=C$1(ae,se,ee):se=$$1(ee,ae,_e,me,de,se),typeof ne.type=="function"&&(ne.__d=se)):se&&_e.__e==se&&se.parentNode!=ee&&(se=g$2(_e))}for(ne.__e=$e,ce=ye;ce--;)me[ce]!=null&&(typeof ne.type=="function"&&me[ce].__e!=null&&me[ce].__e==ne.__d&&(ne.__d=A$2(re).nextSibling),q$2(me[ce],me[ce]));if(ve)for(ce=0;ce<ve.length;ce++)O$1(ve[ce],ve[++ce],ve[++ce])}function C$1(ee,te,ne){for(var re,ie=ee.__k,oe=0;ie&&oe<ie.length;oe++)(re=ie[oe])&&(re.__=ee,te=typeof re.type=="function"?C$1(re,te,ne):$$1(ne,re,re,ie,re.__e,te));return te}function S(ee,te){return te=te||[],ee==null||typeof ee=="boolean"||(v$1(ee)?ee.some(function(ne){S(ne,te)}):te.push(ee)),te}function $$1(ee,te,ne,re,ie,oe){var le,ue,se;if(te.__d!==void 0)le=te.__d,te.__d=void 0;else if(ne==null||ie!=oe||ie.parentNode==null)e:if(oe==null||oe.parentNode!==ee)ee.appendChild(ie),le=null;else{for(ue=oe,se=0;(ue=ue.nextSibling)&&se<re.length;se+=1)if(ue==ie)break e;ee.insertBefore(ie,oe),le=oe}return le!==void 0?le:ie.nextSibling}function A$2(ee){var te,ne,re;if(ee.type==null||typeof ee.type=="string")return ee.__e;if(ee.__k){for(te=ee.__k.length-1;te>=0;te--)if((ne=ee.__k[te])&&(re=A$2(ne)))return re}return null}function H$1(ee,te,ne,re,ie){var oe;for(oe in ne)oe==="children"||oe==="key"||oe in te||T$2(ee,oe,null,ne[oe],re);for(oe in te)ie&&typeof te[oe]!="function"||oe==="children"||oe==="key"||oe==="value"||oe==="checked"||ne[oe]===te[oe]||T$2(ee,oe,te[oe],ne[oe],re)}function I$1(ee,te,ne){te[0]==="-"?ee.setProperty(te,ne==null?"":ne):ee[te]=ne==null?"":typeof ne!="number"||a$1.test(te)?ne:ne+"px"}function T$2(ee,te,ne,re,ie){var oe;e:if(te==="style")if(typeof ne=="string")ee.style.cssText=ne;else{if(typeof re=="string"&&(ee.style.cssText=re=""),re)for(te in re)ne&&te in ne||I$1(ee.style,te,"");if(ne)for(te in ne)re&&ne[te]===re[te]||I$1(ee.style,te,ne[te])}else if(te[0]==="o"&&te[1]==="n")oe=te!==(te=te.replace(/Capture$/,"")),te=te.toLowerCase()in ee?te.toLowerCase().slice(2):te.slice(2),ee.l||(ee.l={}),ee.l[te+oe]=ne,ne?re||ee.addEventListener(te,oe?z$2:j$2,oe):ee.removeEventListener(te,oe?z$2:j$2,oe);else if(te!=="dangerouslySetInnerHTML"){if(ie)te=te.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(te!=="width"&&te!=="height"&&te!=="href"&&te!=="list"&&te!=="form"&&te!=="tabIndex"&&te!=="download"&&te!=="rowSpan"&&te!=="colSpan"&&te in ee)try{ee[te]=ne==null?"":ne;break e}catch{}typeof ne=="function"||(ne==null||ne===!1&&te[4]!=="-"?ee.removeAttribute(te):ee.setAttribute(te,ne))}}function j$2(ee){return this.l[ee.type+!1](l$1.event?l$1.event(ee):ee)}function z$2(ee){return this.l[ee.type+!0](l$1.event?l$1.event(ee):ee)}function L$1(ee,te,ne,re,ie,oe,le,ue,se){var fe,ce,pe,_e,ae,de,$e,ve,me,ye,be,Ee,ke,Ce,Te,he=te.type;if(te.constructor!==void 0)return null;ne.__h!=null&&(se=ne.__h,ue=te.__e=ne.__e,te.__h=null,oe=[ue]),(fe=l$1.__b)&&fe(te);try{e:if(typeof he=="function"){if(ve=te.props,me=(fe=he.contextType)&&re[fe.__c],ye=fe?me?me.props.value:fe.__:re,ne.__c?$e=(ce=te.__c=ne.__c).__=ce.__E:("prototype"in he&&he.prototype.render?te.__c=ce=new he(ve,ye):(te.__c=ce=new b$1(ve,ye),ce.constructor=he,ce.render=B$2),me&&me.sub(ce),ce.props=ve,ce.state||(ce.state={}),ce.context=ye,ce.__n=re,pe=ce.__d=!0,ce.__h=[],ce._sb=[]),ce.__s==null&&(ce.__s=ce.state),he.getDerivedStateFromProps!=null&&(ce.__s==ce.state&&(ce.__s=h$1({},ce.__s)),h$1(ce.__s,he.getDerivedStateFromProps(ve,ce.__s))),_e=ce.props,ae=ce.state,ce.__v=te,pe)he.getDerivedStateFromProps==null&&ce.componentWillMount!=null&&ce.componentWillMount(),ce.componentDidMount!=null&&ce.__h.push(ce.componentDidMount);else{if(he.getDerivedStateFromProps==null&&ve!==_e&&ce.componentWillReceiveProps!=null&&ce.componentWillReceiveProps(ve,ye),!ce.__e&&ce.shouldComponentUpdate!=null&&ce.shouldComponentUpdate(ve,ce.__s,ye)===!1||te.__v===ne.__v){for(te.__v!==ne.__v&&(ce.props=ve,ce.state=ce.__s,ce.__d=!1),ce.__e=!1,te.__e=ne.__e,te.__k=ne.__k,te.__k.forEach(function(Se){Se&&(Se.__=te)}),be=0;be<ce._sb.length;be++)ce.__h.push(ce._sb[be]);ce._sb=[],ce.__h.length&&le.push(ce);break e}ce.componentWillUpdate!=null&&ce.componentWillUpdate(ve,ce.__s,ye),ce.componentDidUpdate!=null&&ce.__h.push(function(){ce.componentDidUpdate(_e,ae,de)})}if(ce.context=ye,ce.props=ve,ce.__P=ee,Ee=l$1.__r,ke=0,"prototype"in he&&he.prototype.render){for(ce.state=ce.__s,ce.__d=!1,Ee&&Ee(te),fe=ce.render(ce.props,ce.state,ce.context),Ce=0;Ce<ce._sb.length;Ce++)ce.__h.push(ce._sb[Ce]);ce._sb=[]}else do ce.__d=!1,Ee&&Ee(te),fe=ce.render(ce.props,ce.state,ce.context),ce.state=ce.__s;while(ce.__d&&++ke<25);ce.state=ce.__s,ce.getChildContext!=null&&(re=h$1(h$1({},re),ce.getChildContext())),pe||ce.getSnapshotBeforeUpdate==null||(de=ce.getSnapshotBeforeUpdate(_e,ae)),P$1(ee,v$1(Te=fe!=null&&fe.type===k$2&&fe.key==null?fe.props.children:fe)?Te:[Te],te,ne,re,ie,oe,le,ue,se),ce.base=te.__e,te.__h=null,ce.__h.length&&le.push(ce),$e&&(ce.__E=ce.__=null),ce.__e=!1}else oe==null&&te.__v===ne.__v?(te.__k=ne.__k,te.__e=ne.__e):te.__e=N$1(ne.__e,te,ne,re,ie,oe,le,se);(fe=l$1.diffed)&&fe(te)}catch(Se){te.__v=null,(se||oe!=null)&&(te.__e=ue,te.__h=!!se,oe[oe.indexOf(ue)]=null),l$1.__e(Se,te,ne)}}function M$1(ee,te){l$1.__c&&l$1.__c(te,ee),ee.some(function(ne){try{ee=ne.__h,ne.__h=[],ee.some(function(re){re.call(ne)})}catch(re){l$1.__e(re,ne.__v)}})}function N$1(ee,te,ne,re,ie,oe,le,ue){var se,fe,ce,pe=ne.props,_e=te.props,ae=te.type,de=0;if(ae==="svg"&&(ie=!0),oe!=null){for(;de<oe.length;de++)if((se=oe[de])&&"setAttribute"in se==!!ae&&(ae?se.localName===ae:se.nodeType===3)){ee=se,oe[de]=null;break}}if(ee==null){if(ae===null)return document.createTextNode(_e);ee=ie?document.createElementNS("http://www.w3.org/2000/svg",ae):document.createElement(ae,_e.is&&_e),oe=null,ue=!1}if(ae===null)pe===_e||ue&&ee.data===_e||(ee.data=_e);else{if(oe=oe&&n.call(ee.childNodes),fe=(pe=ne.props||c$1).dangerouslySetInnerHTML,ce=_e.dangerouslySetInnerHTML,!ue){if(oe!=null)for(pe={},de=0;de<ee.attributes.length;de++)pe[ee.attributes[de].name]=ee.attributes[de].value;(ce||fe)&&(ce&&(fe&&ce.__html==fe.__html||ce.__html===ee.innerHTML)||(ee.innerHTML=ce&&ce.__html||""))}if(H$1(ee,_e,pe,ie,ue),ce)te.__k=[];else if(P$1(ee,v$1(de=te.props.children)?de:[de],te,ne,re,ie&&ae!=="foreignObject",oe,le,oe?oe[0]:ne.__k&&g$2(ne,0),ue),oe!=null)for(de=oe.length;de--;)oe[de]!=null&&p$1(oe[de]);ue||("value"in _e&&(de=_e.value)!==void 0&&(de!==ee.value||ae==="progress"&&!de||ae==="option"&&de!==pe.value)&&T$2(ee,"value",de,pe.value,!1),"checked"in _e&&(de=_e.checked)!==void 0&&de!==ee.checked&&T$2(ee,"checked",de,pe.checked,!1))}return ee}function O$1(ee,te,ne){try{typeof ee=="function"?ee(te):ee.current=te}catch(re){l$1.__e(re,ne)}}function q$2(ee,te,ne){var re,ie;if(l$1.unmount&&l$1.unmount(ee),(re=ee.ref)&&(re.current&&re.current!==ee.__e||O$1(re,null,te)),(re=ee.__c)!=null){if(re.componentWillUnmount)try{re.componentWillUnmount()}catch(oe){l$1.__e(oe,te)}re.base=re.__P=null,ee.__c=void 0}if(re=ee.__k)for(ie=0;ie<re.length;ie++)re[ie]&&q$2(re[ie],te,ne||typeof ee.type!="function");ne||ee.__e==null||p$1(ee.__e),ee.__=ee.__e=ee.__d=void 0}function B$2(ee,te,ne){return this.constructor(ee,ne)}function D$1(ee,te,ne){var re,ie,oe;l$1.__&&l$1.__(ee,te),ie=(re=typeof ne=="function")?null:ne&&ne.__k||te.__k,oe=[],L$1(te,ee=(!re&&ne||te).__k=y$1(k$2,null,[ee]),ie||c$1,c$1,te.ownerSVGElement!==void 0,!re&&ne?[ne]:ie?null:te.firstChild?n.call(te.childNodes):null,oe,!re&&ne?ne:ie?ie.__e:te.firstChild,re),M$1(oe,ee)}function E$1(ee,te){D$1(ee,te,E$1)}function F$2(ee,te,ne){var re,ie,oe,le,ue=h$1({},ee.props);for(oe in ee.type&&ee.type.defaultProps&&(le=ee.type.defaultProps),te)oe=="key"?re=te[oe]:oe=="ref"?ie=te[oe]:ue[oe]=te[oe]===void 0&&le!==void 0?le[oe]:te[oe];return arguments.length>2&&(ue.children=arguments.length>3?n.call(arguments,2):ne),d$1(ee.type,ue,re||ee.key,ie||ee.ref,null)}function G$1(ee,te){var ne={__c:te="__cC"+e$1++,__:ee,Consumer:function(re,ie){return re.children(ie)},Provider:function(re){var ie,oe;return this.getChildContext||(ie=[],(oe={})[te]=this,this.getChildContext=function(){return oe},this.shouldComponentUpdate=function(le){this.props.value!==le.value&&ie.some(function(ue){ue.__e=!0,w$2(ue)})},this.sub=function(le){ie.push(le);var ue=le.componentWillUnmount;le.componentWillUnmount=function(){ie.splice(ie.indexOf(le),1),ue&&ue.call(le)}}),re.children}};return ne.Provider.__=ne.Consumer.contextType=ne}n=s$1.slice,l$1={__e:function(ee,te,ne,re){for(var ie,oe,le;te=te.__;)if((ie=te.__c)&&!ie.__)try{if((oe=ie.constructor)&&oe.getDerivedStateFromError!=null&&(ie.setState(oe.getDerivedStateFromError(ee)),le=ie.__d),ie.componentDidCatch!=null&&(ie.componentDidCatch(ee,re||{}),le=ie.__d),le)return ie.__E=ie}catch(ue){ee=ue}throw ee}},u$1=0,b$1.prototype.setState=function(ee,te){var ne;ne=this.__s!=null&&this.__s!==this.state?this.__s:this.__s=h$1({},this.state),typeof ee=="function"&&(ee=ee(h$1({},ne),this.props)),ee&&h$1(ne,ee),ee!=null&&this.__v&&(te&&this._sb.push(te),w$2(this))},b$1.prototype.forceUpdate=function(ee){this.__v&&(this.__e=!0,ee&&this.__h.push(ee),w$2(this))},b$1.prototype.render=k$2,t$1=[],r$1=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f$1=function(ee,te){return ee.__v.__b-te.__v.__b},x$2.__r=0,e$1=0;var t,r,u,i,o=0,f=[],c=[],e=l$1.__b,a=l$1.__r,v=l$1.diffed,l=l$1.__c,m=l$1.unmount;function d(ee,te){l$1.__h&&l$1.__h(r,ee,o||te),o=0;var ne=r.__H||(r.__H={__:[],__h:[]});return ee>=ne.__.length&&ne.__.push({__V:c}),ne.__[ee]}function h(ee){return o=1,s(B$1,ee)}function s(ee,te,ne){var re=d(t++,2);if(re.t=ee,!re.__c&&(re.__=[ne?ne(te):B$1(void 0,te),function(ue){var se=re.__N?re.__N[0]:re.__[0],fe=re.t(se,ue);se!==fe&&(re.__N=[fe,re.__[1]],re.__c.setState({}))}],re.__c=r,!r.u)){var ie=function(ue,se,fe){if(!re.__c.__H)return!0;var ce=re.__c.__H.__.filter(function(_e){return _e.__c});if(ce.every(function(_e){return!_e.__N}))return!oe||oe.call(this,ue,se,fe);var pe=!1;return ce.forEach(function(_e){if(_e.__N){var ae=_e.__[0];_e.__=_e.__N,_e.__N=void 0,ae!==_e.__[0]&&(pe=!0)}}),!(!pe&&re.__c.props===ue)&&(!oe||oe.call(this,ue,se,fe))};r.u=!0;var oe=r.shouldComponentUpdate,le=r.componentWillUpdate;r.componentWillUpdate=function(ue,se,fe){if(this.__e){var ce=oe;oe=void 0,ie(ue,se,fe),oe=ce}le&&le.call(this,ue,se,fe)},r.shouldComponentUpdate=ie}return re.__N||re.__}function p(ee,te){var ne=d(t++,3);!l$1.__s&&z$1(ne.__H,te)&&(ne.__=ee,ne.i=te,r.__H.__h.push(ne))}function y(ee,te){var ne=d(t++,4);!l$1.__s&&z$1(ne.__H,te)&&(ne.__=ee,ne.i=te,r.__h.push(ne))}function _(ee){return o=5,F$1(function(){return{current:ee}},[])}function A$1(ee,te,ne){o=6,y(function(){return typeof ee=="function"?(ee(te()),function(){return ee(null)}):ee?(ee.current=te(),function(){return ee.current=null}):void 0},ne==null?ne:ne.concat(ee))}function F$1(ee,te){var ne=d(t++,7);return z$1(ne.__H,te)?(ne.__V=ee(),ne.i=te,ne.__h=ee,ne.__V):ne.__}function T$1(ee,te){return o=8,F$1(function(){return ee},te)}function q$1(ee){var te=r.context[ee.__c],ne=d(t++,9);return ne.c=ee,te?(ne.__==null&&(ne.__=!0,te.sub(r)),te.props.value):ee.__}function x$1(ee,te){l$1.useDebugValue&&l$1.useDebugValue(te?te(ee):ee)}function V$1(){var ee=d(t++,11);if(!ee.__){for(var te=r.__v;te!==null&&!te.__m&&te.__!==null;)te=te.__;var ne=te.__m||(te.__m=[0,0]);ee.__="P"+ne[0]+"-"+ne[1]++}return ee.__}function b(){for(var ee;ee=f.shift();)if(ee.__P&&ee.__H)try{ee.__H.__h.forEach(k$1),ee.__H.__h.forEach(w$1),ee.__H.__h=[]}catch(te){ee.__H.__h=[],l$1.__e(te,ee.__v)}}l$1.__b=function(ee){r=null,e&&e(ee)},l$1.__r=function(ee){a&&a(ee),t=0;var te=(r=ee.__c).__H;te&&(u===r?(te.__h=[],r.__h=[],te.__.forEach(function(ne){ne.__N&&(ne.__=ne.__N),ne.__V=c,ne.__N=ne.i=void 0})):(te.__h.forEach(k$1),te.__h.forEach(w$1),te.__h=[],t=0)),u=r},l$1.diffed=function(ee){v&&v(ee);var te=ee.__c;te&&te.__H&&(te.__H.__h.length&&(f.push(te)!==1&&i===l$1.requestAnimationFrame||((i=l$1.requestAnimationFrame)||j$1)(b)),te.__H.__.forEach(function(ne){ne.i&&(ne.__H=ne.i),ne.__V!==c&&(ne.__=ne.__V),ne.i=void 0,ne.__V=c})),u=r=null},l$1.__c=function(ee,te){te.some(function(ne){try{ne.__h.forEach(k$1),ne.__h=ne.__h.filter(function(re){return!re.__||w$1(re)})}catch(re){te.some(function(ie){ie.__h&&(ie.__h=[])}),te=[],l$1.__e(re,ne.__v)}}),l&&l(ee,te)},l$1.unmount=function(ee){m&&m(ee);var te,ne=ee.__c;ne&&ne.__H&&(ne.__H.__.forEach(function(re){try{k$1(re)}catch(ie){te=ie}}),ne.__H=void 0,te&&l$1.__e(te,ne.__v))};var g$1=typeof requestAnimationFrame=="function";function j$1(ee){var te,ne=function(){clearTimeout(re),g$1&&cancelAnimationFrame(te),setTimeout(ee)},re=setTimeout(ne,100);g$1&&(te=requestAnimationFrame(ne))}function k$1(ee){var te=r,ne=ee.__c;typeof ne=="function"&&(ee.__c=void 0,ne()),r=te}function w$1(ee){var te=r;ee.__c=ee.__(),r=te}function z$1(ee,te){return!ee||ee.length!==te.length||te.some(function(ne,re){return ne!==ee[re]})}function B$1(ee,te){return typeof te=="function"?te(ee):te}function g(ee,te){for(var ne in te)ee[ne]=te[ne];return ee}function C(ee,te){for(var ne in ee)if(ne!=="__source"&&!(ne in te))return!0;for(var re in te)if(re!=="__source"&&ee[re]!==te[re])return!0;return!1}function E(ee,te){return ee===te&&(ee!==0||1/ee==1/te)||ee!=ee&&te!=te}function w(ee){this.props=ee}function x(ee,te){function ne(ie){var oe=this.props.ref,le=oe==ie.ref;return!le&&oe&&(oe.call?oe(null):oe.current=null),te?!te(this.props,ie)||!le:C(this.props,ie)}function re(ie){return this.shouldComponentUpdate=ne,y$1(ee,ie)}return re.displayName="Memo("+(ee.displayName||ee.name)+")",re.prototype.isReactComponent=!0,re.__f=!0,re}(w.prototype=new b$1).isPureReactComponent=!0,w.prototype.shouldComponentUpdate=function(ee,te){return C(this.props,ee)||C(this.state,te)};var R=l$1.__b;l$1.__b=function(ee){ee.type&&ee.type.__f&&ee.ref&&(ee.props.ref=ee.ref,ee.ref=null),R&&R(ee)};var N=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function k(ee){function te(ne){var re=g({},ne);return delete re.ref,ee(re,ne.ref||null)}return te.$$typeof=N,te.render=te,te.prototype.isReactComponent=te.__f=!0,te.displayName="ForwardRef("+(ee.displayName||ee.name)+")",te}var A=function(ee,te){return ee==null?null:S(S(ee).map(te))},O={map:A,forEach:A,count:function(ee){return ee?S(ee).length:0},only:function(ee){var te=S(ee);if(te.length!==1)throw"Children.only";return te[0]},toArray:S},T=l$1.__e;l$1.__e=function(ee,te,ne,re){if(ee.then){for(var ie,oe=te;oe=oe.__;)if((ie=oe.__c)&&ie.__c)return te.__e==null&&(te.__e=ne.__e,te.__k=ne.__k),ie.__c(ee,te)}T(ee,te,ne,re)};var I=l$1.unmount;function L(ee,te,ne){return ee&&(ee.__c&&ee.__c.__H&&(ee.__c.__H.__.forEach(function(re){typeof re.__c=="function"&&re.__c()}),ee.__c.__H=null),(ee=g({},ee)).__c!=null&&(ee.__c.__P===ne&&(ee.__c.__P=te),ee.__c=null),ee.__k=ee.__k&&ee.__k.map(function(re){return L(re,te,ne)})),ee}function U(ee,te,ne){return ee&&(ee.__v=null,ee.__k=ee.__k&&ee.__k.map(function(re){return U(re,te,ne)}),ee.__c&&ee.__c.__P===te&&(ee.__e&&ne.insertBefore(ee.__e,ee.__d),ee.__c.__e=!0,ee.__c.__P=ne)),ee}function D(){this.__u=0,this.t=null,this.__b=null}function F(ee){var te=ee.__.__c;return te&&te.__a&&te.__a(ee)}function M(ee){var te,ne,re;function ie(oe){if(te||(te=ee()).then(function(le){ne=le.default||le},function(le){re=le}),re)throw re;if(!ne)throw te;return y$1(ne,oe)}return ie.displayName="Lazy",ie.__f=!0,ie}function V(){this.u=null,this.o=null}l$1.unmount=function(ee){var te=ee.__c;te&&te.__R&&te.__R(),te&&ee.__h===!0&&(ee.type=null),I&&I(ee)},(D.prototype=new b$1).__c=function(ee,te){var ne=te.__c,re=this;re.t==null&&(re.t=[]),re.t.push(ne);var ie=F(re.__v),oe=!1,le=function(){oe||(oe=!0,ne.__R=null,ie?ie(ue):ue())};ne.__R=le;var ue=function(){if(!--re.__u){if(re.state.__a){var fe=re.state.__a;re.__v.__k[0]=U(fe,fe.__c.__P,fe.__c.__O)}var ce;for(re.setState({__a:re.__b=null});ce=re.t.pop();)ce.forceUpdate()}},se=te.__h===!0;re.__u++||se||re.setState({__a:re.__b=re.__v.__k[0]}),ee.then(le,le)},D.prototype.componentWillUnmount=function(){this.t=[]},D.prototype.render=function(ee,te){if(this.__b){if(this.__v.__k){var ne=document.createElement("div"),re=this.__v.__k[0].__c;this.__v.__k[0]=L(this.__b,ne,re.__O=re.__P)}this.__b=null}var ie=te.__a&&y$1(k$2,null,ee.fallback);return ie&&(ie.__h=null),[y$1(k$2,null,te.__a?null:ee.children),ie]};var W=function(ee,te,ne){if(++ne[1]===ne[0]&&ee.o.delete(te),ee.props.revealOrder&&(ee.props.revealOrder[0]!=="t"||!ee.o.size))for(ne=ee.u;ne;){for(;ne.length>3;)ne.pop()();if(ne[1]<ne[0])break;ee.u=ne=ne[2]}};function P(ee){return this.getChildContext=function(){return ee.context},ee.children}function j(ee){var te=this,ne=ee.i;te.componentWillUnmount=function(){D$1(null,te.l),te.l=null,te.i=null},te.i&&te.i!==ne&&te.componentWillUnmount(),ee.__v?(te.l||(te.i=ne,te.l={nodeType:1,parentNode:ne,childNodes:[],appendChild:function(re){this.childNodes.push(re),te.i.appendChild(re)},insertBefore:function(re,ie){this.childNodes.push(re),te.i.appendChild(re)},removeChild:function(re){this.childNodes.splice(this.childNodes.indexOf(re)>>>1,1),te.i.removeChild(re)}}),D$1(y$1(P,{context:te.context},ee.__v),te.l)):te.l&&te.componentWillUnmount()}function z(ee,te){var ne=y$1(j,{__v:ee,i:te});return ne.containerInfo=te,ne}(V.prototype=new b$1).__a=function(ee){var te=this,ne=F(te.__v),re=te.o.get(ee);return re[0]++,function(ie){var oe=function(){te.props.revealOrder?(re.push(ie),W(te,ee,re)):ie()};ne?ne(oe):oe()}},V.prototype.render=function(ee){this.u=null,this.o=new Map;var te=S(ee.children);ee.revealOrder&&ee.revealOrder[0]==="b"&&te.reverse();for(var ne=te.length;ne--;)this.o.set(te[ne],this.u=[1,0,this.u]);return ee.children},V.prototype.componentDidUpdate=V.prototype.componentDidMount=function(){var ee=this;this.o.forEach(function(te,ne){W(ee,ne,te)})};var B=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,H=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Z=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Y=/[A-Z0-9]/g,$=typeof document<"u",q=function(ee){return(typeof Symbol<"u"&&typeof Symbol()=="symbol"?/fil|che|rad/:/fil|che|ra/).test(ee)};function G(ee,te,ne){return te.__k==null&&(te.textContent=""),D$1(ee,te),typeof ne=="function"&&ne(),ee?ee.__c:null}function J(ee,te,ne){return E$1(ee,te),typeof ne=="function"&&ne(),ee?ee.__c:null}b$1.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(ee){Object.defineProperty(b$1.prototype,ee,{configurable:!0,get:function(){return this["UNSAFE_"+ee]},set:function(te){Object.defineProperty(this,ee,{configurable:!0,writable:!0,value:te})}})});var K=l$1.event;function Q(){}function X(){return this.cancelBubble}function nn(){return this.defaultPrevented}l$1.event=function(ee){return K&&(ee=K(ee)),ee.persist=Q,ee.isPropagationStopped=X,ee.isDefaultPrevented=nn,ee.nativeEvent=ee};var tn,en={enumerable:!1,configurable:!0,get:function(){return this.class}},rn=l$1.vnode;l$1.vnode=function(ee){typeof ee.type=="string"&&function(te){var ne=te.props,re=te.type,ie={};for(var oe in ne){var le=ne[oe];if(!(oe==="value"&&"defaultValue"in ne&&le==null||$&&oe==="children"&&re==="noscript"||oe==="class"||oe==="className")){var ue=oe.toLowerCase();oe==="defaultValue"&&"value"in ne&&ne.value==null?oe="value":oe==="download"&&le===!0?le="":ue==="ondoubleclick"?oe="ondblclick":ue!=="onchange"||re!=="input"&&re!=="textarea"||q(ne.type)?ue==="onfocus"?oe="onfocusin":ue==="onblur"?oe="onfocusout":Z.test(oe)?oe=ue:re.indexOf("-")===-1&&H.test(oe)?oe=oe.replace(Y,"-$&").toLowerCase():le===null&&(le=void 0):ue=oe="oninput",ue==="oninput"&&ie[oe=ue]&&(oe="oninputCapture"),ie[oe]=le}}re=="select"&&ie.multiple&&Array.isArray(ie.value)&&(ie.value=S(ne.children).forEach(function(se){se.props.selected=ie.value.indexOf(se.props.value)!=-1})),re=="select"&&ie.defaultValue!=null&&(ie.value=S(ne.children).forEach(function(se){se.props.selected=ie.multiple?ie.defaultValue.indexOf(se.props.value)!=-1:ie.defaultValue==se.props.value})),ne.class&&!ne.className?(ie.class=ne.class,Object.defineProperty(ie,"className",en)):(ne.className&&!ne.class||ne.class&&ne.className)&&(ie.class=ie.className=ne.className),te.props=ie}(ee),ee.$$typeof=B,rn&&rn(ee)};var un=l$1.__r;l$1.__r=function(ee){un&&un(ee),tn=ee.__c};var on=l$1.diffed;l$1.diffed=function(ee){on&&on(ee);var te=ee.props,ne=ee.__e;ne!=null&&ee.type==="textarea"&&"value"in te&&te.value!==ne.value&&(ne.value=te.value==null?"":te.value),tn=null};var ln={ReactCurrentDispatcher:{current:{readContext:function(ee){return tn.__n[ee.__c].props.value}}}};function fn(ee){return y$1.bind(null,ee)}function an(ee){return!!ee&&ee.$$typeof===B}function sn(ee){return an(ee)?F$2.apply(null,arguments):ee}function hn(ee){return!!ee.__k&&(D$1(null,ee),!0)}function vn(ee){return ee&&(ee.base||ee.nodeType===1&&ee)||null}var dn=function(ee,te){return ee(te)},pn=function(ee,te){return ee(te)},mn=k$2;function yn(ee){ee()}function _n(ee){return ee}function bn(){return[!1,yn]}var Sn=y;function gn(ee,te){var ne=te(),re=h({h:{__:ne,v:te}}),ie=re[0].h,oe=re[1];return y(function(){ie.__=ne,ie.v=te,E(ie.__,te())||oe({h:ie})},[ee,ne,te]),p(function(){return E(ie.__,ie.v())||oe({h:ie}),ee(function(){E(ie.__,ie.v())||oe({h:ie})})},[ee]),ne}var Cn={useState:h,useId:V$1,useReducer:s,useEffect:p,useLayoutEffect:y,useInsertionEffect:Sn,useTransition:bn,useDeferredValue:_n,useSyncExternalStore:gn,startTransition:yn,useRef:_,useImperativeHandle:A$1,useMemo:F$1,useCallback:T$1,useContext:q$1,useDebugValue:x$1,version:"17.0.2",Children:O,render:G,hydrate:J,unmountComponentAtNode:hn,createPortal:z,createElement:y$1,createContext:G$1,createFactory:fn,cloneElement:sn,createRef:_$1,Fragment:k$2,isValidElement:an,findDOMNode:vn,Component:b$1,PureComponent:w,memo:x,forwardRef:k,flushSync:pn,unstable_batchedUpdates:dn,StrictMode:mn,Suspense:D,SuspenseList:V,lazy:M,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:ln},hasOwn=Object.prototype.hasOwnProperty,toString=Object.prototype.toString,foreach=function(te,ne,re){if(toString.call(ne)!=="[object Function]")throw new TypeError("iterator must be a function");var ie=te.length;if(ie===+ie)for(var oe=0;oe<ie;oe++)ne.call(re,te[oe],oe,te);else for(var le in te)hasOwn.call(te,le)&&ne.call(re,te[le],le,te)},each=foreach,jsonPointer=api;function api(ee,te,ne){if(arguments.length===3)return api.set(ee,te,ne);if(arguments.length===2)return api.get(ee,te);var re=api.bind(api,ee);for(var ie in api)api.hasOwnProperty(ie)&&(re[ie]=api[ie].bind(re,ee));return re}api.get=function(te,ne){for(var re=Array.isArray(ne)?ne:api.parse(ne),ie=0;ie<re.length;++ie){var oe=re[ie];if(!(typeof te=="object"&&oe in te))throw new Error("Invalid reference token: "+oe);te=te[oe]}return te};api.set=function(te,ne,re){var ie=Array.isArray(ne)?ne:api.parse(ne),oe=ie[0];if(ie.length===0)throw Error("Can not set the root object");for(var le=0;le<ie.length-1;++le){var ue=ie[le];typeof ue!="string"&&typeof ue!="number"&&(ue=String(ue)),!(ue==="__proto__"||ue==="constructor"||ue==="prototype")&&(ue==="-"&&Array.isArray(te)&&(ue=te.length),oe=ie[le+1],ue in te||(oe.match(/^(\d+|-)$/)?te[ue]=[]:te[ue]={}),te=te[ue])}return oe==="-"&&Array.isArray(te)&&(oe=te.length),te[oe]=re,this};api.remove=function(ee,te){var ne=Array.isArray(te)?te:api.parse(te),re=ne[ne.length-1];if(re===void 0)throw new Error('Invalid JSON pointer for remove: "'+te+'"');var ie=api.get(ee,ne.slice(0,-1));if(Array.isArray(ie)){var oe=+re;if(re===""&&isNaN(oe))throw new Error('Invalid array index: "'+re+'"');Array.prototype.splice.call(ie,oe,1)}else delete ie[re]};api.dict=function(te,ne){var re={};return api.walk(te,function(ie,oe){re[oe]=ie},ne),re};api.walk=function(te,ne,re){var ie=[];re=re||function(oe){var le=Object.prototype.toString.call(oe);return le==="[object Object]"||le==="[object Array]"},function oe(le){each(le,function(ue,se){ie.push(String(se)),re(ue)?oe(ue):ne(ue,api.compile(ie)),ie.pop()})}(te)};api.has=function(te,ne){try{api.get(te,ne)}catch{return!1}return!0};api.escape=function(te){return te.toString().replace(/~/g,"~0").replace(/\//g,"~1")};api.unescape=function(te){return te.replace(/~1/g,"/").replace(/~0/g,"~")};api.parse=function(te){if(te==="")return[];if(te.charAt(0)!=="/")throw new Error("Invalid JSON pointer: "+te);return te.substring(1).split(/\//).map(api.unescape)};api.compile=function(te){return te.length===0?"":"/"+te.map(api.escape).join("/")};const scriptRel="modulepreload",assetsURL=function(ee){return"/_reactpy/"+ee},seen={},__vitePreload=function(te,ne,re){if(!ne||ne.length===0)return te();const ie=document.getElementsByTagName("link");return Promise.all(ne.map(oe=>{if(oe=assetsURL(oe),oe in seen)return;seen[oe]=!0;const le=oe.endsWith(".css"),ue=le?'[rel="stylesheet"]':"";if(!!re)for(let ce=ie.length-1;ce>=0;ce--){const pe=ie[ce];if(pe.href===oe&&(!le||pe.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${oe}"]${ue}`))return;const fe=document.createElement("link");if(fe.rel=le?"stylesheet":scriptRel,le||(fe.as="script",fe.crossOrigin=""),fe.href=oe,document.head.appendChild(fe),le)return new Promise((ce,pe)=>{fe.addEventListener("load",ce),fe.addEventListener("error",()=>pe(new Error(`Unable to preload CSS for ${oe}`)))})})).then(()=>te())};function convert(ee){return ee.type in eventConverters?eventConverters[ee.type](ee):convertEvent(ee)}const convertEvent=ee=>({bubbles:ee.bubbles,composed:ee.composed,currentTarget:convertElement(ee.currentTarget),defaultPrevented:ee.defaultPrevented,eventPhase:ee.eventPhase,isTrusted:ee.isTrusted,target:convertElement(ee.target),timeStamp:ee.timeStamp,type:ee.type,selection:convertSelection(window.getSelection())}),convertClipboardEvent=ee=>({...convertEvent(ee),clipboardData:convertDataTransferObject(ee.clipboardData)}),convertCompositionEvent=ee=>({...convertUiEvent(ee),data:ee.data}),convertInputEvent=ee=>({...convertUiEvent(ee),data:ee.data,inputType:ee.inputType,dataTransfer:convertDataTransferObject(ee.dataTransfer),isComposing:ee.isComposing}),convertKeyboardEvent=ee=>({...convertUiEvent(ee),code:ee.code,isComposing:ee.isComposing,altKey:ee.altKey,ctrlKey:ee.ctrlKey,key:ee.key,location:ee.location,metaKey:ee.metaKey,repeat:ee.repeat,shiftKey:ee.shiftKey}),convertMouseEvent=ee=>({...convertEvent(ee),altKey:ee.altKey,button:ee.button,buttons:ee.buttons,clientX:ee.clientX,clientY:ee.clientY,ctrlKey:ee.ctrlKey,metaKey:ee.metaKey,pageX:ee.pageX,pageY:ee.pageY,screenX:ee.screenX,screenY:ee.screenY,shiftKey:ee.shiftKey,movementX:ee.movementX,movementY:ee.movementY,offsetX:ee.offsetX,offsetY:ee.offsetY,x:ee.x,y:ee.y,relatedTarget:convertElement(ee.relatedTarget)}),convertTouchEvent=ee=>({...convertUiEvent(ee),altKey:ee.altKey,ctrlKey:ee.ctrlKey,metaKey:ee.metaKey,shiftKey:ee.shiftKey,touches:Array.from(ee.touches).map(convertTouch),changedTouches:Array.from(ee.changedTouches).map(convertTouch),targetTouches:Array.from(ee.targetTouches).map(convertTouch)}),convertUiEvent=ee=>({...convertEvent(ee),detail:ee.detail}),convertAnimationEvent=ee=>({...convertEvent(ee),animationName:ee.animationName,pseudoElement:ee.pseudoElement,elapsedTime:ee.elapsedTime}),convertTransitionEvent=ee=>({...convertEvent(ee),propertyName:ee.propertyName,pseudoElement:ee.pseudoElement,elapsedTime:ee.elapsedTime}),convertFocusEvent=ee=>({...convertUiEvent(ee),relatedTarget:convertElement(ee.relatedTarget)}),convertDeviceOrientationEvent=ee=>({...convertEvent(ee),absolute:ee.absolute,alpha:ee.alpha,beta:ee.beta,gamma:ee.gamma}),convertDragEvent=ee=>({...convertMouseEvent(ee),dataTransfer:convertDataTransferObject(ee.dataTransfer)}),convertGamepadEvent=ee=>({...convertEvent(ee),gamepad:convertGamepad(ee.gamepad)}),convertPointerEvent=ee=>({...convertMouseEvent(ee),pointerId:ee.pointerId,width:ee.width,height:ee.height,pressure:ee.pressure,tiltX:ee.tiltX,tiltY:ee.tiltY,pointerType:ee.pointerType,isPrimary:ee.isPrimary,tangentialPressure:ee.tangentialPressure,twist:ee.twist}),convertWheelEvent=ee=>({...convertMouseEvent(ee),deltaMode:ee.deltaMode,deltaX:ee.deltaX,deltaY:ee.deltaY,deltaZ:ee.deltaZ}),convertSubmitEvent=ee=>({...convertEvent(ee),submitter:convertElement(ee.submitter)}),eventConverters={animationcancel:convertAnimationEvent,animationend:convertAnimationEvent,animationiteration:convertAnimationEvent,animationstart:convertAnimationEvent,beforeinput:convertInputEvent,compositionend:convertCompositionEvent,compositionstart:convertCompositionEvent,compositionupdate:convertCompositionEvent,copy:convertClipboardEvent,cut:convertClipboardEvent,paste:convertClipboardEvent,deviceorientation:convertDeviceOrientationEvent,drag:convertDragEvent,dragend:convertDragEvent,dragenter:convertDragEvent,dragleave:convertDragEvent,dragover:convertDragEvent,dragstart:convertDragEvent,drop:convertDragEvent,error:convertUiEvent,blur:convertFocusEvent,focus:convertFocusEvent,focusin:convertFocusEvent,focusout:convertFocusEvent,gamepadconnected:convertGamepadEvent,gamepaddisconnected:convertGamepadEvent,keydown:convertKeyboardEvent,keypress:convertKeyboardEvent,keyup:convertKeyboardEvent,auxclick:convertMouseEvent,click:convertMouseEvent,dblclick:convertMouseEvent,contextmenu:convertMouseEvent,mousedown:convertMouseEvent,mouseenter:convertMouseEvent,mouseleave:convertMouseEvent,mousemove:convertMouseEvent,mouseout:convertMouseEvent,mouseover:convertMouseEvent,mouseup:convertMouseEvent,scroll:convertMouseEvent,gotpointercapture:convertPointerEvent,lostpointercapture:convertPointerEvent,pointercancel:convertPointerEvent,pointerdown:convertPointerEvent,pointerenter:convertPointerEvent,pointerleave:convertPointerEvent,pointerlockchange:convertPointerEvent,pointerlockerror:convertPointerEvent,pointermove:convertPointerEvent,pointerout:convertPointerEvent,pointerover:convertPointerEvent,pointerup:convertPointerEvent,submit:convertSubmitEvent,touchcancel:convertTouchEvent,touchend:convertTouchEvent,touchmove:convertTouchEvent,touchstart:convertTouchEvent,transitioncancel:convertTransitionEvent,transitionend:convertTransitionEvent,transitionrun:convertTransitionEvent,transitionstart:convertTransitionEvent,wheel:convertWheelEvent};function convertElement(ee){if(!ee||!("tagName"in ee))return null;const te=ee;return{...convertGenericElement(te),...te.tagName in elementConverters?elementConverters[te.tagName](te):{}}}const convertGenericElement=ee=>({tagName:ee.tagName,boundingClientRect:{...ee.getBoundingClientRect()}}),convertMediaElement=ee=>({currentTime:ee.currentTime,duration:ee.duration,ended:ee.ended,error:ee.error,seeking:ee.seeking,volume:ee.volume}),elementConverters={AUDIO:convertMediaElement,BUTTON:ee=>({value:ee.value}),DATA:ee=>({value:ee.value}),DATALIST:ee=>({options:Array.from(ee.options).map(elementConverters.OPTION)}),DIALOG:ee=>({returnValue:ee.returnValue}),FIELDSET:ee=>({elements:Array.from(ee.elements).map(convertElement)}),FORM:ee=>({elements:Array.from(ee.elements).map(convertElement)}),INPUT:ee=>({value:ee.value}),METER:ee=>({value:ee.value}),OPTION:ee=>({value:ee.value}),OUTPUT:ee=>({value:ee.value}),PROGRESS:ee=>({value:ee.value}),SELECT:ee=>({value:ee.value}),TEXTAREA:ee=>({value:ee.value}),VIDEO:convertMediaElement},convertGamepad=ee=>({axes:Array.from(ee.axes),buttons:Array.from(ee.buttons).map(convertGamepadButton),connected:ee.connected,id:ee.id,index:ee.index,mapping:ee.mapping,timestamp:ee.timestamp,hapticActuators:Array.from(ee.hapticActuators).map(convertGamepadHapticActuator)}),convertGamepadButton=ee=>({pressed:ee.pressed,touched:ee.touched,value:ee.value}),convertGamepadHapticActuator=ee=>({type:ee.type}),convertFile=ee=>({lastModified:ee.lastModified,name:ee.name,size:ee.size,type:ee.type});function convertDataTransferObject(ee){if(!ee)return null;const{dropEffect:te,effectAllowed:ne,files:re,items:ie,types:oe}=ee;return{dropEffect:te,effectAllowed:ne,files:Array.from(re).map(convertFile),items:Array.from(ie).map(le=>({kind:le.kind,type:le.type})),types:Array.from(oe)}}function convertSelection(ee){if(!ee)return null;const{type:te,anchorNode:ne,anchorOffset:re,focusNode:ie,focusOffset:oe,isCollapsed:le,rangeCount:ue}=ee;return te==="None"?null:{type:te,anchorNode:convertElement(ne),anchorOffset:re,focusNode:convertElement(ie),focusOffset:oe,isCollapsed:le,rangeCount:ue,selectedText:ee.toString()}}function convertTouch({identifier:ee,pageX:te,pageY:ne,screenX:re,screenY:ie,clientX:oe,clientY:le,force:ue,radiusX:se,radiusY:fe,rotationAngle:ce,target:pe}){return{identifier:ee,pageX:te,pageY:ne,screenX:re,screenY:ie,clientX:oe,clientY:le,force:ue,radiusX:se,radiusY:fe,rotationAngle:ce,target:convertElement(pe)}}async function loadImportSource(ee,te){let ne;if(ee.sourceType==="URL"?ne=await __vitePreload(()=>import(ee.source),[]):ne=await te.loadModule(ee.source),typeof ne.bind!="function")throw new Error(`${ee.source} did not export a function 'bind'`);return re=>{const ie=ne.bind(re,{sendMessage:te.sendMessage,onMessage:te.onMessage});return typeof ie.create=="function"&&typeof ie.render=="function"&&typeof ie.unmount=="function"?{render:oe=>ie.render(createImportSourceElement({client:te,module:ne,binding:ie,model:oe,currentImportSource:ee})),unmount:ie.unmount}:(console.error(`${ee.source} returned an impropper binding`),null)}}function createImportSourceElement(ee){let te;if(ee.model.importSource)if(isImportSourceEqual(ee.currentImportSource,ee.model.importSource))if(ee.module[ee.model.tagName])te=ee.module[ee.model.tagName];else return console.error("Module from source "+stringifyImportSource(ee.currentImportSource)+` does not export ${ee.model.tagName}`),null;else return console.error("Parent element import source "+stringifyImportSource(ee.currentImportSource)+" does not match child's import source "+stringifyImportSource(ee.model.importSource)),null;else te=ee.model.tagName;return ee.binding.create(te,createAttributes(ee.model,ee.client),createChildren(ee.model,ne=>createImportSourceElement({...ee,model:ne})))}function isImportSourceEqual(ee,te){return ee.source===te.source&&ee.sourceType===te.sourceType}function stringifyImportSource(ee){return JSON.stringify({source:ee.source,sourceType:ee.sourceType})}function createChildren(ee,te){return ee.children?ee.children.map(ne=>{switch(typeof ne){case"object":return te(ne);case"string":return ne}}):[]}function createAttributes(ee,te){return Object.fromEntries(Object.entries({...ee.attributes,...Object.fromEntries(Object.entries(ee.eventHandlers||{}).map(([ne,re])=>createEventHandler(te,ne,re)))}).map(normalizeAttribute))}function createEventHandler(ee,te,{target:ne,preventDefault:re,stopPropagation:ie}){return[te,function(){const oe=Array.from(arguments).map(le=>{if(!(typeof le=="object"&&le.nativeEvent))return le;const ue=le;return re&&ue.preventDefault(),ie&&ue.stopPropagation(),convert(ue.nativeEvent)});ee.sendMessage({type:"layout-event",data:oe,target:ne})}]}function normalizeAttribute([ee,te]){let ne=ee,re=te;return ee==="style"&&typeof te=="object"?re=Object.fromEntries(Object.entries(te).map(([ie,oe])=>[snakeToCamel(ie),oe])):ee.startsWith("data_")||ee.startsWith("aria_")||DASHED_HTML_ATTRS.includes(ee)?ne=ee.split("_").join("-"):ne=snakeToCamel(ee),[ne,re]}function snakeToCamel(ee){return ee.replace(/([_][a-z])/g,te=>te.toUpperCase().replace("_",""))}const DASHED_HTML_ATTRS=["accept_charset","http_equiv"],ClientContext=G$1(null);function Layout(ee){const te=h({tagName:""})[0],ne=useForceUpdate();return p(()=>(ee.client.onMessage("layout-update",({path:re,model:ie})=>{re===""?Object.assign(te,ie):jsonPointer.set(te,re,ie),ne()}),ee.client.start(),()=>ee.client.stop()),[te,ee.client]),Cn.createElement(ClientContext.Provider,{value:ee.client},Cn.createElement(Element,{model:te}))}function Element({model:ee}){if(ee.error!==void 0)return ee.error?Cn.createElement("pre",null,ee.error):null;let te;return ee.tagName in SPECIAL_ELEMENTS?te=SPECIAL_ELEMENTS[ee.tagName]:ee.importSource?te=ImportedElement:te=StandardElement,Cn.createElement(te,{model:ee})}function StandardElement({model:ee}){const te=Cn.useContext(ClientContext);return y$1(ee.tagName===""?k$2:ee.tagName,createAttributes(ee,te),...createChildren(ee,ne=>Cn.createElement(Element,{model:ne,key:ne.key})))}function UserInputElement({model:ee}){const te=q$1(ClientContext),ne=createAttributes(ee,te),[re,ie]=Cn.useState(ne.value);Cn.useEffect(()=>ie(ne.value),[ne.value]);const oe=ne.onChange;return typeof oe=="function"&&(ne.onChange=le=>{ie(le.target.value),oe(le)}),y$1(ee.tagName,{...ne,value:re},...createChildren(ee,le=>Cn.createElement(Element,{model:le,key:le.key})))}function ScriptElement({model}){const ref=_(null);return Cn.useEffect(()=>{var ee;if(!ref.current)return;const scriptContent=(ee=model==null?void 0:model.children)==null?void 0:ee.filter(te=>typeof te=="string")[0];let scriptElement;if(model.attributes){scriptElement=document.createElement("script");for(const[te,ne]of Object.entries(model.attributes))scriptElement.setAttribute(te,ne);scriptContent&&scriptElement.appendChild(document.createTextNode(scriptContent)),ref.current.appendChild(scriptElement)}else if(scriptContent){let scriptResult=eval(scriptContent);if(typeof scriptResult=="function")return scriptResult()}},[model.key,ref.current]),Cn.createElement("div",{ref})}function ImportedElement({model:ee}){const te=ee.importSource,ne=useImportSource(ee);if(!te)return null;const re=te.fallback;return te?Cn.createElement("div",{ref:ne}):re?typeof re=="string"?Cn.createElement("div",null,re):Cn.createElement(StandardElement,{model:re}):null}function useForceUpdate(){const[,ee]=h(!1);return()=>ee(te=>!te)}function useImportSource(ee){const te=ee.importSource,ne=_(null),re=Cn.useContext(ClientContext),[ie,oe]=h(null);return Cn.useEffect(()=>{let le=!1;return te&&loadImportSource(te,re).then(ue=>{!le&&ne.current&&oe(ue(ne.current))}),()=>{le=!0,ie&&te&&!te.unmountBeforeUpdate&&ie.unmount()}},[re,te,oe,ne.current]),p(()=>{if(!!(ie&&te)&&(ie.render(ee),te.unmountBeforeUpdate))return ie.unmount}),ne}const SPECIAL_ELEMENTS={input:UserInputElement,script:ScriptElement,select:UserInputElement,textarea:UserInputElement};function mount(ee,te){G(Cn.createElement(Layout,{client:te}),ee)}const logger={log:(...ee)=>console.log("[ReactPy]",...ee),warn:(...ee)=>console.warn("[ReactPy]",...ee),error:(...ee)=>console.error("[ReactPy]",...ee)};class SimpleReactPyClient{constructor(te){ge(this,"resolveShouldOpen");ge(this,"resolveShouldClose");ge(this,"urls");ge(this,"handlers");ge(this,"socket");this.handlers={"connection-open":[],"connection-close":[],"layout-update":[]},this.urls=getServerUrls(te.serverLocation||{url:document.location.origin,route:document.location.pathname,query:document.location.search}),this.resolveShouldOpen=()=>{throw new Error("Could not start client")},this.resolveShouldClose=()=>{throw new Error("Could not stop client")};const ne=new Promise(ie=>this.resolveShouldOpen=ie),re=new Promise(ie=>this.resolveShouldClose=ie);this.socket=startReconnectingWebSocket({shouldOpen:ne,shouldClose:re,url:this.urls.stream,onOpen:()=>this.handleIncoming({type:"connection-open"}),onMessage:async({data:ie})=>this.handleIncoming(JSON.parse(ie)),onClose:()=>this.handleIncoming({type:"connection-close"}),...te.reconnectOptions})}start(){logger.log("starting client..."),this.resolveShouldOpen(void 0)}stop(){logger.log("stopping client..."),this.resolveShouldClose(void 0)}onMessage(te,ne){this.handlers[te].push(ne)}sendMessage(te){var ne;(ne=this.socket.current)==null||ne.send(JSON.stringify(te))}loadModule(te){return __vitePreload(()=>import(`${this.urls.modules}/${te}`),[])}handleIncoming(te){if(!te.type){logger.warn("Received message without type",te);return}const ne=this.handlers[te.type];if(!ne){logger.warn("Received message without handler",te);return}ne.forEach(re=>re(te))}}function getServerUrls(ee){const te=new URL(`${ee.url||document.location.origin}/_reactpy`),ne=`${te}/modules`,re=`${te}/assets`,ie=`ws${te.protocol==="https:"?"s":""}`,oe=rtrim(`${te.pathname}/stream${ee.route||""}`,"/"),le=`${ie}://${te.host}${oe}${ee.query}`;return{base:te,modules:ne,assets:re,stream:le}}function startReconnectingWebSocket(ee){const{maxInterval:te=6e4,maxRetries:ne=50,backoffRate:re=1.1,intervalJitter:ie=.1}=ee,oe=750;let le=0,ue=oe,se=!1,fe=!1;const ce={},pe=()=>{se||(ce.current=new WebSocket(ee.url),ce.current.onopen=()=>{fe=!0,logger.log("client connected"),ue=oe,le=0,ee.onOpen()},ce.current.onmessage=ee.onMessage,ce.current.onclose=()=>{if(!fe){logger.log("failed to connect");return}if(logger.log("client disconnected"),ee.onClose(),le>=ne)return;const _e=addJitter(ue,ie);logger.log(`reconnecting in ${(_e/1e3).toPrecision(4)} seconds...`),setTimeout(pe,_e),ue=nextInterval(ue,re,te),le++})};return ee.shouldOpen.then(pe),ee.shouldClose.then(()=>{var _e;se=!0,(_e=ce.current)==null||_e.close()}),ce}function nextInterval(ee,te,ne){return Math.min(ee*te,ne)}function addJitter(ee,te){return ee+(Math.random()*te*ee*2-te*ee)}function rtrim(ee,te){return ee.replace(new RegExp(`${te}+$`),"")}function app(ee){const te=new SimpleReactPyClient({serverLocation:{url:document.location.origin,route:document.location.pathname,query:document.location.search}});mount(ee,te)}app(document.getElementById("app"));
1
+ var Pe=Object.defineProperty;var we=(ee,te,ne)=>te in ee?Pe(ee,te,{enumerable:!0,configurable:!0,writable:!0,value:ne}):ee[te]=ne;var ge=(ee,te,ne)=>(we(ee,typeof te!="symbol"?te+"":te,ne),ne);(function(){const te=document.createElement("link").relList;if(te&&te.supports&&te.supports("modulepreload"))return;for(const ie of document.querySelectorAll('link[rel="modulepreload"]'))re(ie);new MutationObserver(ie=>{for(const oe of ie)if(oe.type==="childList")for(const ae of oe.addedNodes)ae.tagName==="LINK"&&ae.rel==="modulepreload"&&re(ae)}).observe(document,{childList:!0,subtree:!0});function ne(ie){const oe={};return ie.integrity&&(oe.integrity=ie.integrity),ie.referrerpolicy&&(oe.referrerPolicy=ie.referrerpolicy),ie.crossorigin==="use-credentials"?oe.credentials="include":ie.crossorigin==="anonymous"?oe.credentials="omit":oe.credentials="same-origin",oe}function re(ie){if(ie.ep)return;ie.ep=!0;const oe=ne(ie);fetch(ie.href,oe)}})();var n,l$1,u$1,t$1,o$1,r$1,f$1,e$1,c$1={},s$1=[],a$1=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,v$1=Array.isArray;function h$1(ee,te){for(var ne in te)ee[ne]=te[ne];return ee}function p$1(ee){var te=ee.parentNode;te&&te.removeChild(ee)}function y$1(ee,te,ne){var re,ie,oe,ae={};for(oe in te)oe=="key"?re=te[oe]:oe=="ref"?ie=te[oe]:ae[oe]=te[oe];if(arguments.length>2&&(ae.children=arguments.length>3?n.call(arguments,2):ne),typeof ee=="function"&&ee.defaultProps!=null)for(oe in ee.defaultProps)ae[oe]===void 0&&(ae[oe]=ee.defaultProps[oe]);return d$1(ee,ae,re,ie,null)}function d$1(ee,te,ne,re,ie){var oe={type:ee,props:te,key:ne,ref:re,__k:null,__:null,__b:0,__e:null,__d:void 0,__c:null,__h:null,constructor:void 0,__v:ie==null?++u$1:ie};return ie==null&&l$1.vnode!=null&&l$1.vnode(oe),oe}function _$1(){return{current:null}}function k$2(ee){return ee.children}function b$1(ee,te){this.props=ee,this.context=te}function g$2(ee,te){if(te==null)return ee.__?g$2(ee.__,ee.__.__k.indexOf(ee)+1):null;for(var ne;te<ee.__k.length;te++)if((ne=ee.__k[te])!=null&&ne.__e!=null)return ne.__e;return typeof ee.type=="function"?g$2(ee):null}function m$1(ee){var te,ne;if((ee=ee.__)!=null&&ee.__c!=null){for(ee.__e=ee.__c.base=null,te=0;te<ee.__k.length;te++)if((ne=ee.__k[te])!=null&&ne.__e!=null){ee.__e=ee.__c.base=ne.__e;break}return m$1(ee)}}function w$2(ee){(!ee.__d&&(ee.__d=!0)&&t$1.push(ee)&&!x$2.__r++||o$1!==l$1.debounceRendering)&&((o$1=l$1.debounceRendering)||r$1)(x$2)}function x$2(){var ee,te,ne,re,ie,oe,ae,le;for(t$1.sort(f$1);ee=t$1.shift();)ee.__d&&(te=t$1.length,re=void 0,ie=void 0,ae=(oe=(ne=ee).__v).__e,(le=ne.__P)&&(re=[],(ie=h$1({},oe)).__v=oe.__v+1,L$1(le,oe,ie,ne.__n,le.ownerSVGElement!==void 0,oe.__h!=null?[ae]:null,re,ae==null?g$2(oe):ae,oe.__h),M$1(re,oe),oe.__e!=ae&&m$1(oe)),t$1.length>te&&t$1.sort(f$1));x$2.__r=0}function P$1(ee,te,ne,re,ie,oe,ae,le,ue,_e){var ce,pe,fe,se,de,$e,ve,me=re&&re.__k||s$1,ye=me.length;for(ne.__k=[],ce=0;ce<te.length;ce++)if((se=ne.__k[ce]=(se=te[ce])==null||typeof se=="boolean"||typeof se=="function"?null:typeof se=="string"||typeof se=="number"||typeof se=="bigint"?d$1(null,se,null,null,se):v$1(se)?d$1(k$2,{children:se},null,null,null):se.__b>0?d$1(se.type,se.props,se.key,se.ref?se.ref:null,se.__v):se)!=null){if(se.__=ne,se.__b=ne.__b+1,(fe=me[ce])===null||fe&&se.key==fe.key&&se.type===fe.type)me[ce]=void 0;else for(pe=0;pe<ye;pe++){if((fe=me[pe])&&se.key==fe.key&&se.type===fe.type){me[pe]=void 0;break}fe=null}L$1(ee,se,fe=fe||c$1,ie,oe,ae,le,ue,_e),de=se.__e,(pe=se.ref)&&fe.ref!=pe&&(ve||(ve=[]),fe.ref&&ve.push(fe.ref,null,se),ve.push(pe,se.__c||de,se)),de!=null?($e==null&&($e=de),typeof se.type=="function"&&se.__k===fe.__k?se.__d=ue=C$1(se,ue,ee):ue=$$1(ee,se,fe,me,de,ue),typeof ne.type=="function"&&(ne.__d=ue)):ue&&fe.__e==ue&&ue.parentNode!=ee&&(ue=g$2(fe))}for(ne.__e=$e,ce=ye;ce--;)me[ce]!=null&&(typeof ne.type=="function"&&me[ce].__e!=null&&me[ce].__e==ne.__d&&(ne.__d=A$2(re).nextSibling),q$2(me[ce],me[ce]));if(ve)for(ce=0;ce<ve.length;ce++)O$1(ve[ce],ve[++ce],ve[++ce])}function C$1(ee,te,ne){for(var re,ie=ee.__k,oe=0;ie&&oe<ie.length;oe++)(re=ie[oe])&&(re.__=ee,te=typeof re.type=="function"?C$1(re,te,ne):$$1(ne,re,re,ie,re.__e,te));return te}function S(ee,te){return te=te||[],ee==null||typeof ee=="boolean"||(v$1(ee)?ee.some(function(ne){S(ne,te)}):te.push(ee)),te}function $$1(ee,te,ne,re,ie,oe){var ae,le,ue;if(te.__d!==void 0)ae=te.__d,te.__d=void 0;else if(ne==null||ie!=oe||ie.parentNode==null)e:if(oe==null||oe.parentNode!==ee)ee.appendChild(ie),ae=null;else{for(le=oe,ue=0;(le=le.nextSibling)&&ue<re.length;ue+=1)if(le==ie)break e;ee.insertBefore(ie,oe),ae=oe}return ae!==void 0?ae:ie.nextSibling}function A$2(ee){var te,ne,re;if(ee.type==null||typeof ee.type=="string")return ee.__e;if(ee.__k){for(te=ee.__k.length-1;te>=0;te--)if((ne=ee.__k[te])&&(re=A$2(ne)))return re}return null}function H$1(ee,te,ne,re,ie){var oe;for(oe in ne)oe==="children"||oe==="key"||oe in te||T$2(ee,oe,null,ne[oe],re);for(oe in te)ie&&typeof te[oe]!="function"||oe==="children"||oe==="key"||oe==="value"||oe==="checked"||ne[oe]===te[oe]||T$2(ee,oe,te[oe],ne[oe],re)}function I$1(ee,te,ne){te[0]==="-"?ee.setProperty(te,ne==null?"":ne):ee[te]=ne==null?"":typeof ne!="number"||a$1.test(te)?ne:ne+"px"}function T$2(ee,te,ne,re,ie){var oe;e:if(te==="style")if(typeof ne=="string")ee.style.cssText=ne;else{if(typeof re=="string"&&(ee.style.cssText=re=""),re)for(te in re)ne&&te in ne||I$1(ee.style,te,"");if(ne)for(te in ne)re&&ne[te]===re[te]||I$1(ee.style,te,ne[te])}else if(te[0]==="o"&&te[1]==="n")oe=te!==(te=te.replace(/Capture$/,"")),te=te.toLowerCase()in ee?te.toLowerCase().slice(2):te.slice(2),ee.l||(ee.l={}),ee.l[te+oe]=ne,ne?re||ee.addEventListener(te,oe?z$2:j$2,oe):ee.removeEventListener(te,oe?z$2:j$2,oe);else if(te!=="dangerouslySetInnerHTML"){if(ie)te=te.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(te!=="width"&&te!=="height"&&te!=="href"&&te!=="list"&&te!=="form"&&te!=="tabIndex"&&te!=="download"&&te!=="rowSpan"&&te!=="colSpan"&&te in ee)try{ee[te]=ne==null?"":ne;break e}catch{}typeof ne=="function"||(ne==null||ne===!1&&te[4]!=="-"?ee.removeAttribute(te):ee.setAttribute(te,ne))}}function j$2(ee){return this.l[ee.type+!1](l$1.event?l$1.event(ee):ee)}function z$2(ee){return this.l[ee.type+!0](l$1.event?l$1.event(ee):ee)}function L$1(ee,te,ne,re,ie,oe,ae,le,ue){var _e,ce,pe,fe,se,de,$e,ve,me,ye,be,Ee,Te,Ce,ke,he=te.type;if(te.constructor!==void 0)return null;ne.__h!=null&&(ue=ne.__h,le=te.__e=ne.__e,te.__h=null,oe=[le]),(_e=l$1.__b)&&_e(te);try{e:if(typeof he=="function"){if(ve=te.props,me=(_e=he.contextType)&&re[_e.__c],ye=_e?me?me.props.value:_e.__:re,ne.__c?$e=(ce=te.__c=ne.__c).__=ce.__E:("prototype"in he&&he.prototype.render?te.__c=ce=new he(ve,ye):(te.__c=ce=new b$1(ve,ye),ce.constructor=he,ce.render=B$2),me&&me.sub(ce),ce.props=ve,ce.state||(ce.state={}),ce.context=ye,ce.__n=re,pe=ce.__d=!0,ce.__h=[],ce._sb=[]),ce.__s==null&&(ce.__s=ce.state),he.getDerivedStateFromProps!=null&&(ce.__s==ce.state&&(ce.__s=h$1({},ce.__s)),h$1(ce.__s,he.getDerivedStateFromProps(ve,ce.__s))),fe=ce.props,se=ce.state,ce.__v=te,pe)he.getDerivedStateFromProps==null&&ce.componentWillMount!=null&&ce.componentWillMount(),ce.componentDidMount!=null&&ce.__h.push(ce.componentDidMount);else{if(he.getDerivedStateFromProps==null&&ve!==fe&&ce.componentWillReceiveProps!=null&&ce.componentWillReceiveProps(ve,ye),!ce.__e&&ce.shouldComponentUpdate!=null&&ce.shouldComponentUpdate(ve,ce.__s,ye)===!1||te.__v===ne.__v){for(te.__v!==ne.__v&&(ce.props=ve,ce.state=ce.__s,ce.__d=!1),ce.__e=!1,te.__e=ne.__e,te.__k=ne.__k,te.__k.forEach(function(Se){Se&&(Se.__=te)}),be=0;be<ce._sb.length;be++)ce.__h.push(ce._sb[be]);ce._sb=[],ce.__h.length&&ae.push(ce);break e}ce.componentWillUpdate!=null&&ce.componentWillUpdate(ve,ce.__s,ye),ce.componentDidUpdate!=null&&ce.__h.push(function(){ce.componentDidUpdate(fe,se,de)})}if(ce.context=ye,ce.props=ve,ce.__P=ee,Ee=l$1.__r,Te=0,"prototype"in he&&he.prototype.render){for(ce.state=ce.__s,ce.__d=!1,Ee&&Ee(te),_e=ce.render(ce.props,ce.state,ce.context),Ce=0;Ce<ce._sb.length;Ce++)ce.__h.push(ce._sb[Ce]);ce._sb=[]}else do ce.__d=!1,Ee&&Ee(te),_e=ce.render(ce.props,ce.state,ce.context),ce.state=ce.__s;while(ce.__d&&++Te<25);ce.state=ce.__s,ce.getChildContext!=null&&(re=h$1(h$1({},re),ce.getChildContext())),pe||ce.getSnapshotBeforeUpdate==null||(de=ce.getSnapshotBeforeUpdate(fe,se)),P$1(ee,v$1(ke=_e!=null&&_e.type===k$2&&_e.key==null?_e.props.children:_e)?ke:[ke],te,ne,re,ie,oe,ae,le,ue),ce.base=te.__e,te.__h=null,ce.__h.length&&ae.push(ce),$e&&(ce.__E=ce.__=null),ce.__e=!1}else oe==null&&te.__v===ne.__v?(te.__k=ne.__k,te.__e=ne.__e):te.__e=N$1(ne.__e,te,ne,re,ie,oe,ae,ue);(_e=l$1.diffed)&&_e(te)}catch(Se){te.__v=null,(ue||oe!=null)&&(te.__e=le,te.__h=!!ue,oe[oe.indexOf(le)]=null),l$1.__e(Se,te,ne)}}function M$1(ee,te){l$1.__c&&l$1.__c(te,ee),ee.some(function(ne){try{ee=ne.__h,ne.__h=[],ee.some(function(re){re.call(ne)})}catch(re){l$1.__e(re,ne.__v)}})}function N$1(ee,te,ne,re,ie,oe,ae,le){var ue,_e,ce,pe=ne.props,fe=te.props,se=te.type,de=0;if(se==="svg"&&(ie=!0),oe!=null){for(;de<oe.length;de++)if((ue=oe[de])&&"setAttribute"in ue==!!se&&(se?ue.localName===se:ue.nodeType===3)){ee=ue,oe[de]=null;break}}if(ee==null){if(se===null)return document.createTextNode(fe);ee=ie?document.createElementNS("http://www.w3.org/2000/svg",se):document.createElement(se,fe.is&&fe),oe=null,le=!1}if(se===null)pe===fe||le&&ee.data===fe||(ee.data=fe);else{if(oe=oe&&n.call(ee.childNodes),_e=(pe=ne.props||c$1).dangerouslySetInnerHTML,ce=fe.dangerouslySetInnerHTML,!le){if(oe!=null)for(pe={},de=0;de<ee.attributes.length;de++)pe[ee.attributes[de].name]=ee.attributes[de].value;(ce||_e)&&(ce&&(_e&&ce.__html==_e.__html||ce.__html===ee.innerHTML)||(ee.innerHTML=ce&&ce.__html||""))}if(H$1(ee,fe,pe,ie,le),ce)te.__k=[];else if(P$1(ee,v$1(de=te.props.children)?de:[de],te,ne,re,ie&&se!=="foreignObject",oe,ae,oe?oe[0]:ne.__k&&g$2(ne,0),le),oe!=null)for(de=oe.length;de--;)oe[de]!=null&&p$1(oe[de]);le||("value"in fe&&(de=fe.value)!==void 0&&(de!==ee.value||se==="progress"&&!de||se==="option"&&de!==pe.value)&&T$2(ee,"value",de,pe.value,!1),"checked"in fe&&(de=fe.checked)!==void 0&&de!==ee.checked&&T$2(ee,"checked",de,pe.checked,!1))}return ee}function O$1(ee,te,ne){try{typeof ee=="function"?ee(te):ee.current=te}catch(re){l$1.__e(re,ne)}}function q$2(ee,te,ne){var re,ie;if(l$1.unmount&&l$1.unmount(ee),(re=ee.ref)&&(re.current&&re.current!==ee.__e||O$1(re,null,te)),(re=ee.__c)!=null){if(re.componentWillUnmount)try{re.componentWillUnmount()}catch(oe){l$1.__e(oe,te)}re.base=re.__P=null,ee.__c=void 0}if(re=ee.__k)for(ie=0;ie<re.length;ie++)re[ie]&&q$2(re[ie],te,ne||typeof ee.type!="function");ne||ee.__e==null||p$1(ee.__e),ee.__=ee.__e=ee.__d=void 0}function B$2(ee,te,ne){return this.constructor(ee,ne)}function D$1(ee,te,ne){var re,ie,oe;l$1.__&&l$1.__(ee,te),ie=(re=typeof ne=="function")?null:ne&&ne.__k||te.__k,oe=[],L$1(te,ee=(!re&&ne||te).__k=y$1(k$2,null,[ee]),ie||c$1,c$1,te.ownerSVGElement!==void 0,!re&&ne?[ne]:ie?null:te.firstChild?n.call(te.childNodes):null,oe,!re&&ne?ne:ie?ie.__e:te.firstChild,re),M$1(oe,ee)}function E$1(ee,te){D$1(ee,te,E$1)}function F$2(ee,te,ne){var re,ie,oe,ae,le=h$1({},ee.props);for(oe in ee.type&&ee.type.defaultProps&&(ae=ee.type.defaultProps),te)oe=="key"?re=te[oe]:oe=="ref"?ie=te[oe]:le[oe]=te[oe]===void 0&&ae!==void 0?ae[oe]:te[oe];return arguments.length>2&&(le.children=arguments.length>3?n.call(arguments,2):ne),d$1(ee.type,le,re||ee.key,ie||ee.ref,null)}function G$1(ee,te){var ne={__c:te="__cC"+e$1++,__:ee,Consumer:function(re,ie){return re.children(ie)},Provider:function(re){var ie,oe;return this.getChildContext||(ie=[],(oe={})[te]=this,this.getChildContext=function(){return oe},this.shouldComponentUpdate=function(ae){this.props.value!==ae.value&&ie.some(function(le){le.__e=!0,w$2(le)})},this.sub=function(ae){ie.push(ae);var le=ae.componentWillUnmount;ae.componentWillUnmount=function(){ie.splice(ie.indexOf(ae),1),le&&le.call(ae)}}),re.children}};return ne.Provider.__=ne.Consumer.contextType=ne}n=s$1.slice,l$1={__e:function(ee,te,ne,re){for(var ie,oe,ae;te=te.__;)if((ie=te.__c)&&!ie.__)try{if((oe=ie.constructor)&&oe.getDerivedStateFromError!=null&&(ie.setState(oe.getDerivedStateFromError(ee)),ae=ie.__d),ie.componentDidCatch!=null&&(ie.componentDidCatch(ee,re||{}),ae=ie.__d),ae)return ie.__E=ie}catch(le){ee=le}throw ee}},u$1=0,b$1.prototype.setState=function(ee,te){var ne;ne=this.__s!=null&&this.__s!==this.state?this.__s:this.__s=h$1({},this.state),typeof ee=="function"&&(ee=ee(h$1({},ne),this.props)),ee&&h$1(ne,ee),ee!=null&&this.__v&&(te&&this._sb.push(te),w$2(this))},b$1.prototype.forceUpdate=function(ee){this.__v&&(this.__e=!0,ee&&this.__h.push(ee),w$2(this))},b$1.prototype.render=k$2,t$1=[],r$1=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,f$1=function(ee,te){return ee.__v.__b-te.__v.__b},x$2.__r=0,e$1=0;var t,r,u,i,o=0,f=[],c=[],e=l$1.__b,a=l$1.__r,v=l$1.diffed,l=l$1.__c,m=l$1.unmount;function d(ee,te){l$1.__h&&l$1.__h(r,ee,o||te),o=0;var ne=r.__H||(r.__H={__:[],__h:[]});return ee>=ne.__.length&&ne.__.push({__V:c}),ne.__[ee]}function h(ee){return o=1,s(B$1,ee)}function s(ee,te,ne){var re=d(t++,2);if(re.t=ee,!re.__c&&(re.__=[ne?ne(te):B$1(void 0,te),function(le){var ue=re.__N?re.__N[0]:re.__[0],_e=re.t(ue,le);ue!==_e&&(re.__N=[_e,re.__[1]],re.__c.setState({}))}],re.__c=r,!r.u)){var ie=function(le,ue,_e){if(!re.__c.__H)return!0;var ce=re.__c.__H.__.filter(function(fe){return fe.__c});if(ce.every(function(fe){return!fe.__N}))return!oe||oe.call(this,le,ue,_e);var pe=!1;return ce.forEach(function(fe){if(fe.__N){var se=fe.__[0];fe.__=fe.__N,fe.__N=void 0,se!==fe.__[0]&&(pe=!0)}}),!(!pe&&re.__c.props===le)&&(!oe||oe.call(this,le,ue,_e))};r.u=!0;var oe=r.shouldComponentUpdate,ae=r.componentWillUpdate;r.componentWillUpdate=function(le,ue,_e){if(this.__e){var ce=oe;oe=void 0,ie(le,ue,_e),oe=ce}ae&&ae.call(this,le,ue,_e)},r.shouldComponentUpdate=ie}return re.__N||re.__}function p(ee,te){var ne=d(t++,3);!l$1.__s&&z$1(ne.__H,te)&&(ne.__=ee,ne.i=te,r.__H.__h.push(ne))}function y(ee,te){var ne=d(t++,4);!l$1.__s&&z$1(ne.__H,te)&&(ne.__=ee,ne.i=te,r.__h.push(ne))}function _(ee){return o=5,F$1(function(){return{current:ee}},[])}function A$1(ee,te,ne){o=6,y(function(){return typeof ee=="function"?(ee(te()),function(){return ee(null)}):ee?(ee.current=te(),function(){return ee.current=null}):void 0},ne==null?ne:ne.concat(ee))}function F$1(ee,te){var ne=d(t++,7);return z$1(ne.__H,te)?(ne.__V=ee(),ne.i=te,ne.__h=ee,ne.__V):ne.__}function T$1(ee,te){return o=8,F$1(function(){return ee},te)}function q$1(ee){var te=r.context[ee.__c],ne=d(t++,9);return ne.c=ee,te?(ne.__==null&&(ne.__=!0,te.sub(r)),te.props.value):ee.__}function x$1(ee,te){l$1.useDebugValue&&l$1.useDebugValue(te?te(ee):ee)}function V$1(){var ee=d(t++,11);if(!ee.__){for(var te=r.__v;te!==null&&!te.__m&&te.__!==null;)te=te.__;var ne=te.__m||(te.__m=[0,0]);ee.__="P"+ne[0]+"-"+ne[1]++}return ee.__}function b(){for(var ee;ee=f.shift();)if(ee.__P&&ee.__H)try{ee.__H.__h.forEach(k$1),ee.__H.__h.forEach(w$1),ee.__H.__h=[]}catch(te){ee.__H.__h=[],l$1.__e(te,ee.__v)}}l$1.__b=function(ee){r=null,e&&e(ee)},l$1.__r=function(ee){a&&a(ee),t=0;var te=(r=ee.__c).__H;te&&(u===r?(te.__h=[],r.__h=[],te.__.forEach(function(ne){ne.__N&&(ne.__=ne.__N),ne.__V=c,ne.__N=ne.i=void 0})):(te.__h.forEach(k$1),te.__h.forEach(w$1),te.__h=[],t=0)),u=r},l$1.diffed=function(ee){v&&v(ee);var te=ee.__c;te&&te.__H&&(te.__H.__h.length&&(f.push(te)!==1&&i===l$1.requestAnimationFrame||((i=l$1.requestAnimationFrame)||j$1)(b)),te.__H.__.forEach(function(ne){ne.i&&(ne.__H=ne.i),ne.__V!==c&&(ne.__=ne.__V),ne.i=void 0,ne.__V=c})),u=r=null},l$1.__c=function(ee,te){te.some(function(ne){try{ne.__h.forEach(k$1),ne.__h=ne.__h.filter(function(re){return!re.__||w$1(re)})}catch(re){te.some(function(ie){ie.__h&&(ie.__h=[])}),te=[],l$1.__e(re,ne.__v)}}),l&&l(ee,te)},l$1.unmount=function(ee){m&&m(ee);var te,ne=ee.__c;ne&&ne.__H&&(ne.__H.__.forEach(function(re){try{k$1(re)}catch(ie){te=ie}}),ne.__H=void 0,te&&l$1.__e(te,ne.__v))};var g$1=typeof requestAnimationFrame=="function";function j$1(ee){var te,ne=function(){clearTimeout(re),g$1&&cancelAnimationFrame(te),setTimeout(ee)},re=setTimeout(ne,100);g$1&&(te=requestAnimationFrame(ne))}function k$1(ee){var te=r,ne=ee.__c;typeof ne=="function"&&(ee.__c=void 0,ne()),r=te}function w$1(ee){var te=r;ee.__c=ee.__(),r=te}function z$1(ee,te){return!ee||ee.length!==te.length||te.some(function(ne,re){return ne!==ee[re]})}function B$1(ee,te){return typeof te=="function"?te(ee):te}function g(ee,te){for(var ne in te)ee[ne]=te[ne];return ee}function C(ee,te){for(var ne in ee)if(ne!=="__source"&&!(ne in te))return!0;for(var re in te)if(re!=="__source"&&ee[re]!==te[re])return!0;return!1}function E(ee,te){return ee===te&&(ee!==0||1/ee==1/te)||ee!=ee&&te!=te}function w(ee){this.props=ee}function x(ee,te){function ne(ie){var oe=this.props.ref,ae=oe==ie.ref;return!ae&&oe&&(oe.call?oe(null):oe.current=null),te?!te(this.props,ie)||!ae:C(this.props,ie)}function re(ie){return this.shouldComponentUpdate=ne,y$1(ee,ie)}return re.displayName="Memo("+(ee.displayName||ee.name)+")",re.prototype.isReactComponent=!0,re.__f=!0,re}(w.prototype=new b$1).isPureReactComponent=!0,w.prototype.shouldComponentUpdate=function(ee,te){return C(this.props,ee)||C(this.state,te)};var R=l$1.__b;l$1.__b=function(ee){ee.type&&ee.type.__f&&ee.ref&&(ee.props.ref=ee.ref,ee.ref=null),R&&R(ee)};var N=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.forward_ref")||3911;function k(ee){function te(ne){var re=g({},ne);return delete re.ref,ee(re,ne.ref||null)}return te.$$typeof=N,te.render=te,te.prototype.isReactComponent=te.__f=!0,te.displayName="ForwardRef("+(ee.displayName||ee.name)+")",te}var A=function(ee,te){return ee==null?null:S(S(ee).map(te))},O={map:A,forEach:A,count:function(ee){return ee?S(ee).length:0},only:function(ee){var te=S(ee);if(te.length!==1)throw"Children.only";return te[0]},toArray:S},T=l$1.__e;l$1.__e=function(ee,te,ne,re){if(ee.then){for(var ie,oe=te;oe=oe.__;)if((ie=oe.__c)&&ie.__c)return te.__e==null&&(te.__e=ne.__e,te.__k=ne.__k),ie.__c(ee,te)}T(ee,te,ne,re)};var I=l$1.unmount;function L(ee,te,ne){return ee&&(ee.__c&&ee.__c.__H&&(ee.__c.__H.__.forEach(function(re){typeof re.__c=="function"&&re.__c()}),ee.__c.__H=null),(ee=g({},ee)).__c!=null&&(ee.__c.__P===ne&&(ee.__c.__P=te),ee.__c=null),ee.__k=ee.__k&&ee.__k.map(function(re){return L(re,te,ne)})),ee}function U(ee,te,ne){return ee&&(ee.__v=null,ee.__k=ee.__k&&ee.__k.map(function(re){return U(re,te,ne)}),ee.__c&&ee.__c.__P===te&&(ee.__e&&ne.insertBefore(ee.__e,ee.__d),ee.__c.__e=!0,ee.__c.__P=ne)),ee}function D(){this.__u=0,this.t=null,this.__b=null}function F(ee){var te=ee.__.__c;return te&&te.__a&&te.__a(ee)}function M(ee){var te,ne,re;function ie(oe){if(te||(te=ee()).then(function(ae){ne=ae.default||ae},function(ae){re=ae}),re)throw re;if(!ne)throw te;return y$1(ne,oe)}return ie.displayName="Lazy",ie.__f=!0,ie}function V(){this.u=null,this.o=null}l$1.unmount=function(ee){var te=ee.__c;te&&te.__R&&te.__R(),te&&ee.__h===!0&&(ee.type=null),I&&I(ee)},(D.prototype=new b$1).__c=function(ee,te){var ne=te.__c,re=this;re.t==null&&(re.t=[]),re.t.push(ne);var ie=F(re.__v),oe=!1,ae=function(){oe||(oe=!0,ne.__R=null,ie?ie(le):le())};ne.__R=ae;var le=function(){if(!--re.__u){if(re.state.__a){var _e=re.state.__a;re.__v.__k[0]=U(_e,_e.__c.__P,_e.__c.__O)}var ce;for(re.setState({__a:re.__b=null});ce=re.t.pop();)ce.forceUpdate()}},ue=te.__h===!0;re.__u++||ue||re.setState({__a:re.__b=re.__v.__k[0]}),ee.then(ae,ae)},D.prototype.componentWillUnmount=function(){this.t=[]},D.prototype.render=function(ee,te){if(this.__b){if(this.__v.__k){var ne=document.createElement("div"),re=this.__v.__k[0].__c;this.__v.__k[0]=L(this.__b,ne,re.__O=re.__P)}this.__b=null}var ie=te.__a&&y$1(k$2,null,ee.fallback);return ie&&(ie.__h=null),[y$1(k$2,null,te.__a?null:ee.children),ie]};var W=function(ee,te,ne){if(++ne[1]===ne[0]&&ee.o.delete(te),ee.props.revealOrder&&(ee.props.revealOrder[0]!=="t"||!ee.o.size))for(ne=ee.u;ne;){for(;ne.length>3;)ne.pop()();if(ne[1]<ne[0])break;ee.u=ne=ne[2]}};function P(ee){return this.getChildContext=function(){return ee.context},ee.children}function j(ee){var te=this,ne=ee.i;te.componentWillUnmount=function(){D$1(null,te.l),te.l=null,te.i=null},te.i&&te.i!==ne&&te.componentWillUnmount(),ee.__v?(te.l||(te.i=ne,te.l={nodeType:1,parentNode:ne,childNodes:[],appendChild:function(re){this.childNodes.push(re),te.i.appendChild(re)},insertBefore:function(re,ie){this.childNodes.push(re),te.i.appendChild(re)},removeChild:function(re){this.childNodes.splice(this.childNodes.indexOf(re)>>>1,1),te.i.removeChild(re)}}),D$1(y$1(P,{context:te.context},ee.__v),te.l)):te.l&&te.componentWillUnmount()}function z(ee,te){var ne=y$1(j,{__v:ee,i:te});return ne.containerInfo=te,ne}(V.prototype=new b$1).__a=function(ee){var te=this,ne=F(te.__v),re=te.o.get(ee);return re[0]++,function(ie){var oe=function(){te.props.revealOrder?(re.push(ie),W(te,ee,re)):ie()};ne?ne(oe):oe()}},V.prototype.render=function(ee){this.u=null,this.o=new Map;var te=S(ee.children);ee.revealOrder&&ee.revealOrder[0]==="b"&&te.reverse();for(var ne=te.length;ne--;)this.o.set(te[ne],this.u=[1,0,this.u]);return ee.children},V.prototype.componentDidUpdate=V.prototype.componentDidMount=function(){var ee=this;this.o.forEach(function(te,ne){W(ee,ne,te)})};var B=typeof Symbol<"u"&&Symbol.for&&Symbol.for("react.element")||60103,H=/^(?:accent|alignment|arabic|baseline|cap|clip(?!PathU)|color|dominant|fill|flood|font|glyph(?!R)|horiz|image(!S)|letter|lighting|marker(?!H|W|U)|overline|paint|pointer|shape|stop|strikethrough|stroke|text(?!L)|transform|underline|unicode|units|v|vector|vert|word|writing|x(?!C))[A-Z]/,Z=/^on(Ani|Tra|Tou|BeforeInp|Compo)/,Y=/[A-Z0-9]/g,$=typeof document<"u",q=function(ee){return(typeof Symbol<"u"&&typeof Symbol()=="symbol"?/fil|che|rad/:/fil|che|ra/).test(ee)};function G(ee,te,ne){return te.__k==null&&(te.textContent=""),D$1(ee,te),typeof ne=="function"&&ne(),ee?ee.__c:null}function J(ee,te,ne){return E$1(ee,te),typeof ne=="function"&&ne(),ee?ee.__c:null}b$1.prototype.isReactComponent={},["componentWillMount","componentWillReceiveProps","componentWillUpdate"].forEach(function(ee){Object.defineProperty(b$1.prototype,ee,{configurable:!0,get:function(){return this["UNSAFE_"+ee]},set:function(te){Object.defineProperty(this,ee,{configurable:!0,writable:!0,value:te})}})});var K=l$1.event;function Q(){}function X(){return this.cancelBubble}function nn(){return this.defaultPrevented}l$1.event=function(ee){return K&&(ee=K(ee)),ee.persist=Q,ee.isPropagationStopped=X,ee.isDefaultPrevented=nn,ee.nativeEvent=ee};var tn,en={enumerable:!1,configurable:!0,get:function(){return this.class}},rn=l$1.vnode;l$1.vnode=function(ee){typeof ee.type=="string"&&function(te){var ne=te.props,re=te.type,ie={};for(var oe in ne){var ae=ne[oe];if(!(oe==="value"&&"defaultValue"in ne&&ae==null||$&&oe==="children"&&re==="noscript"||oe==="class"||oe==="className")){var le=oe.toLowerCase();oe==="defaultValue"&&"value"in ne&&ne.value==null?oe="value":oe==="download"&&ae===!0?ae="":le==="ondoubleclick"?oe="ondblclick":le!=="onchange"||re!=="input"&&re!=="textarea"||q(ne.type)?le==="onfocus"?oe="onfocusin":le==="onblur"?oe="onfocusout":Z.test(oe)?oe=le:re.indexOf("-")===-1&&H.test(oe)?oe=oe.replace(Y,"-$&").toLowerCase():ae===null&&(ae=void 0):le=oe="oninput",le==="oninput"&&ie[oe=le]&&(oe="oninputCapture"),ie[oe]=ae}}re=="select"&&ie.multiple&&Array.isArray(ie.value)&&(ie.value=S(ne.children).forEach(function(ue){ue.props.selected=ie.value.indexOf(ue.props.value)!=-1})),re=="select"&&ie.defaultValue!=null&&(ie.value=S(ne.children).forEach(function(ue){ue.props.selected=ie.multiple?ie.defaultValue.indexOf(ue.props.value)!=-1:ie.defaultValue==ue.props.value})),ne.class&&!ne.className?(ie.class=ne.class,Object.defineProperty(ie,"className",en)):(ne.className&&!ne.class||ne.class&&ne.className)&&(ie.class=ie.className=ne.className),te.props=ie}(ee),ee.$$typeof=B,rn&&rn(ee)};var un=l$1.__r;l$1.__r=function(ee){un&&un(ee),tn=ee.__c};var on=l$1.diffed;l$1.diffed=function(ee){on&&on(ee);var te=ee.props,ne=ee.__e;ne!=null&&ee.type==="textarea"&&"value"in te&&te.value!==ne.value&&(ne.value=te.value==null?"":te.value),tn=null};var ln={ReactCurrentDispatcher:{current:{readContext:function(ee){return tn.__n[ee.__c].props.value}}}};function fn(ee){return y$1.bind(null,ee)}function an(ee){return!!ee&&ee.$$typeof===B}function sn(ee){return an(ee)?F$2.apply(null,arguments):ee}function hn(ee){return!!ee.__k&&(D$1(null,ee),!0)}function vn(ee){return ee&&(ee.base||ee.nodeType===1&&ee)||null}var dn=function(ee,te){return ee(te)},pn=function(ee,te){return ee(te)},mn=k$2;function yn(ee){ee()}function _n(ee){return ee}function bn(){return[!1,yn]}var Sn=y;function gn(ee,te){var ne=te(),re=h({h:{__:ne,v:te}}),ie=re[0].h,oe=re[1];return y(function(){ie.__=ne,ie.v=te,E(ie.__,te())||oe({h:ie})},[ee,ne,te]),p(function(){return E(ie.__,ie.v())||oe({h:ie}),ee(function(){E(ie.__,ie.v())||oe({h:ie})})},[ee]),ne}var Cn={useState:h,useId:V$1,useReducer:s,useEffect:p,useLayoutEffect:y,useInsertionEffect:Sn,useTransition:bn,useDeferredValue:_n,useSyncExternalStore:gn,startTransition:yn,useRef:_,useImperativeHandle:A$1,useMemo:F$1,useCallback:T$1,useContext:q$1,useDebugValue:x$1,version:"17.0.2",Children:O,render:G,hydrate:J,unmountComponentAtNode:hn,createPortal:z,createElement:y$1,createContext:G$1,createFactory:fn,cloneElement:sn,createRef:_$1,Fragment:k$2,isValidElement:an,findDOMNode:vn,Component:b$1,PureComponent:w,memo:x,forwardRef:k,flushSync:pn,unstable_batchedUpdates:dn,StrictMode:mn,Suspense:D,SuspenseList:V,lazy:M,__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED:ln},hasOwn=Object.prototype.hasOwnProperty,toString=Object.prototype.toString,foreach=function(te,ne,re){if(toString.call(ne)!=="[object Function]")throw new TypeError("iterator must be a function");var ie=te.length;if(ie===+ie)for(var oe=0;oe<ie;oe++)ne.call(re,te[oe],oe,te);else for(var ae in te)hasOwn.call(te,ae)&&ne.call(re,te[ae],ae,te)},each=foreach,jsonPointer=api;function api(ee,te,ne){if(arguments.length===3)return api.set(ee,te,ne);if(arguments.length===2)return api.get(ee,te);var re=api.bind(api,ee);for(var ie in api)api.hasOwnProperty(ie)&&(re[ie]=api[ie].bind(re,ee));return re}api.get=function(te,ne){for(var re=Array.isArray(ne)?ne:api.parse(ne),ie=0;ie<re.length;++ie){var oe=re[ie];if(!(typeof te=="object"&&oe in te))throw new Error("Invalid reference token: "+oe);te=te[oe]}return te};api.set=function(te,ne,re){var ie=Array.isArray(ne)?ne:api.parse(ne),oe=ie[0];if(ie.length===0)throw Error("Can not set the root object");for(var ae=0;ae<ie.length-1;++ae){var le=ie[ae];typeof le!="string"&&typeof le!="number"&&(le=String(le)),!(le==="__proto__"||le==="constructor"||le==="prototype")&&(le==="-"&&Array.isArray(te)&&(le=te.length),oe=ie[ae+1],le in te||(oe.match(/^(\d+|-)$/)?te[le]=[]:te[le]={}),te=te[le])}return oe==="-"&&Array.isArray(te)&&(oe=te.length),te[oe]=re,this};api.remove=function(ee,te){var ne=Array.isArray(te)?te:api.parse(te),re=ne[ne.length-1];if(re===void 0)throw new Error('Invalid JSON pointer for remove: "'+te+'"');var ie=api.get(ee,ne.slice(0,-1));if(Array.isArray(ie)){var oe=+re;if(re===""&&isNaN(oe))throw new Error('Invalid array index: "'+re+'"');Array.prototype.splice.call(ie,oe,1)}else delete ie[re]};api.dict=function(te,ne){var re={};return api.walk(te,function(ie,oe){re[oe]=ie},ne),re};api.walk=function(te,ne,re){var ie=[];re=re||function(oe){var ae=Object.prototype.toString.call(oe);return ae==="[object Object]"||ae==="[object Array]"},function oe(ae){each(ae,function(le,ue){ie.push(String(ue)),re(le)?oe(le):ne(le,api.compile(ie)),ie.pop()})}(te)};api.has=function(te,ne){try{api.get(te,ne)}catch{return!1}return!0};api.escape=function(te){return te.toString().replace(/~/g,"~0").replace(/\//g,"~1")};api.unescape=function(te){return te.replace(/~1/g,"/").replace(/~0/g,"~")};api.parse=function(te){if(te==="")return[];if(te.charAt(0)!=="/")throw new Error("Invalid JSON pointer: "+te);return te.substring(1).split(/\//).map(api.unescape)};api.compile=function(te){return te.length===0?"":"/"+te.map(api.escape).join("/")};const scriptRel="modulepreload",assetsURL=function(ee){return"/_reactpy/"+ee},seen={},__vitePreload=function(te,ne,re){if(!ne||ne.length===0)return te();const ie=document.getElementsByTagName("link");return Promise.all(ne.map(oe=>{if(oe=assetsURL(oe),oe in seen)return;seen[oe]=!0;const ae=oe.endsWith(".css"),le=ae?'[rel="stylesheet"]':"";if(!!re)for(let ce=ie.length-1;ce>=0;ce--){const pe=ie[ce];if(pe.href===oe&&(!ae||pe.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${oe}"]${le}`))return;const _e=document.createElement("link");if(_e.rel=ae?"stylesheet":scriptRel,ae||(_e.as="script",_e.crossOrigin=""),_e.href=oe,document.head.appendChild(_e),ae)return new Promise((ce,pe)=>{_e.addEventListener("load",ce),_e.addEventListener("error",()=>pe(new Error(`Unable to preload CSS for ${oe}`)))})})).then(()=>te())};function convert(ee){return ee.type in eventConverters?eventConverters[ee.type](ee):convertEvent(ee)}const convertEvent=ee=>({bubbles:ee.bubbles,composed:ee.composed,currentTarget:convertElement(ee.currentTarget),defaultPrevented:ee.defaultPrevented,eventPhase:ee.eventPhase,isTrusted:ee.isTrusted,target:convertElement(ee.target),timeStamp:ee.timeStamp,type:ee.type,selection:convertSelection(window.getSelection())}),convertClipboardEvent=ee=>({...convertEvent(ee),clipboardData:convertDataTransferObject(ee.clipboardData)}),convertCompositionEvent=ee=>({...convertUiEvent(ee),data:ee.data}),convertInputEvent=ee=>({...convertUiEvent(ee),data:ee.data,inputType:ee.inputType,dataTransfer:convertDataTransferObject(ee.dataTransfer),isComposing:ee.isComposing}),convertKeyboardEvent=ee=>({...convertUiEvent(ee),code:ee.code,isComposing:ee.isComposing,altKey:ee.altKey,ctrlKey:ee.ctrlKey,key:ee.key,location:ee.location,metaKey:ee.metaKey,repeat:ee.repeat,shiftKey:ee.shiftKey}),convertMouseEvent=ee=>({...convertEvent(ee),altKey:ee.altKey,button:ee.button,buttons:ee.buttons,clientX:ee.clientX,clientY:ee.clientY,ctrlKey:ee.ctrlKey,metaKey:ee.metaKey,pageX:ee.pageX,pageY:ee.pageY,screenX:ee.screenX,screenY:ee.screenY,shiftKey:ee.shiftKey,movementX:ee.movementX,movementY:ee.movementY,offsetX:ee.offsetX,offsetY:ee.offsetY,x:ee.x,y:ee.y,relatedTarget:convertElement(ee.relatedTarget)}),convertTouchEvent=ee=>({...convertUiEvent(ee),altKey:ee.altKey,ctrlKey:ee.ctrlKey,metaKey:ee.metaKey,shiftKey:ee.shiftKey,touches:Array.from(ee.touches).map(convertTouch),changedTouches:Array.from(ee.changedTouches).map(convertTouch),targetTouches:Array.from(ee.targetTouches).map(convertTouch)}),convertUiEvent=ee=>({...convertEvent(ee),detail:ee.detail}),convertAnimationEvent=ee=>({...convertEvent(ee),animationName:ee.animationName,pseudoElement:ee.pseudoElement,elapsedTime:ee.elapsedTime}),convertTransitionEvent=ee=>({...convertEvent(ee),propertyName:ee.propertyName,pseudoElement:ee.pseudoElement,elapsedTime:ee.elapsedTime}),convertFocusEvent=ee=>({...convertUiEvent(ee),relatedTarget:convertElement(ee.relatedTarget)}),convertDeviceOrientationEvent=ee=>({...convertEvent(ee),absolute:ee.absolute,alpha:ee.alpha,beta:ee.beta,gamma:ee.gamma}),convertDragEvent=ee=>({...convertMouseEvent(ee),dataTransfer:convertDataTransferObject(ee.dataTransfer)}),convertGamepadEvent=ee=>({...convertEvent(ee),gamepad:convertGamepad(ee.gamepad)}),convertPointerEvent=ee=>({...convertMouseEvent(ee),pointerId:ee.pointerId,width:ee.width,height:ee.height,pressure:ee.pressure,tiltX:ee.tiltX,tiltY:ee.tiltY,pointerType:ee.pointerType,isPrimary:ee.isPrimary,tangentialPressure:ee.tangentialPressure,twist:ee.twist}),convertWheelEvent=ee=>({...convertMouseEvent(ee),deltaMode:ee.deltaMode,deltaX:ee.deltaX,deltaY:ee.deltaY,deltaZ:ee.deltaZ}),convertSubmitEvent=ee=>({...convertEvent(ee),submitter:convertElement(ee.submitter)}),eventConverters={animationcancel:convertAnimationEvent,animationend:convertAnimationEvent,animationiteration:convertAnimationEvent,animationstart:convertAnimationEvent,beforeinput:convertInputEvent,compositionend:convertCompositionEvent,compositionstart:convertCompositionEvent,compositionupdate:convertCompositionEvent,copy:convertClipboardEvent,cut:convertClipboardEvent,paste:convertClipboardEvent,deviceorientation:convertDeviceOrientationEvent,drag:convertDragEvent,dragend:convertDragEvent,dragenter:convertDragEvent,dragleave:convertDragEvent,dragover:convertDragEvent,dragstart:convertDragEvent,drop:convertDragEvent,error:convertUiEvent,blur:convertFocusEvent,focus:convertFocusEvent,focusin:convertFocusEvent,focusout:convertFocusEvent,gamepadconnected:convertGamepadEvent,gamepaddisconnected:convertGamepadEvent,keydown:convertKeyboardEvent,keypress:convertKeyboardEvent,keyup:convertKeyboardEvent,auxclick:convertMouseEvent,click:convertMouseEvent,dblclick:convertMouseEvent,contextmenu:convertMouseEvent,mousedown:convertMouseEvent,mouseenter:convertMouseEvent,mouseleave:convertMouseEvent,mousemove:convertMouseEvent,mouseout:convertMouseEvent,mouseover:convertMouseEvent,mouseup:convertMouseEvent,scroll:convertMouseEvent,gotpointercapture:convertPointerEvent,lostpointercapture:convertPointerEvent,pointercancel:convertPointerEvent,pointerdown:convertPointerEvent,pointerenter:convertPointerEvent,pointerleave:convertPointerEvent,pointerlockchange:convertPointerEvent,pointerlockerror:convertPointerEvent,pointermove:convertPointerEvent,pointerout:convertPointerEvent,pointerover:convertPointerEvent,pointerup:convertPointerEvent,submit:convertSubmitEvent,touchcancel:convertTouchEvent,touchend:convertTouchEvent,touchmove:convertTouchEvent,touchstart:convertTouchEvent,transitioncancel:convertTransitionEvent,transitionend:convertTransitionEvent,transitionrun:convertTransitionEvent,transitionstart:convertTransitionEvent,wheel:convertWheelEvent};function convertElement(ee){if(!ee||!("tagName"in ee))return null;const te=ee;return{...convertGenericElement(te),...te.tagName in elementConverters?elementConverters[te.tagName](te):{}}}const convertGenericElement=ee=>({tagName:ee.tagName,boundingClientRect:{...ee.getBoundingClientRect()}}),convertMediaElement=ee=>({currentTime:ee.currentTime,duration:ee.duration,ended:ee.ended,error:ee.error,seeking:ee.seeking,volume:ee.volume}),elementConverters={AUDIO:convertMediaElement,BUTTON:ee=>({value:ee.value}),DATA:ee=>({value:ee.value}),DATALIST:ee=>({options:Array.from(ee.options).map(elementConverters.OPTION)}),DIALOG:ee=>({returnValue:ee.returnValue}),FIELDSET:ee=>({elements:Array.from(ee.elements).map(convertElement)}),FORM:ee=>({elements:Array.from(ee.elements).map(convertElement)}),INPUT:ee=>({value:ee.value,checked:ee.checked}),METER:ee=>({value:ee.value}),OPTION:ee=>({value:ee.value}),OUTPUT:ee=>({value:ee.value}),PROGRESS:ee=>({value:ee.value}),SELECT:ee=>({value:ee.value}),TEXTAREA:ee=>({value:ee.value}),VIDEO:convertMediaElement},convertGamepad=ee=>({axes:Array.from(ee.axes),buttons:Array.from(ee.buttons).map(convertGamepadButton),connected:ee.connected,id:ee.id,index:ee.index,mapping:ee.mapping,timestamp:ee.timestamp,hapticActuators:Array.from(ee.hapticActuators).map(convertGamepadHapticActuator)}),convertGamepadButton=ee=>({pressed:ee.pressed,touched:ee.touched,value:ee.value}),convertGamepadHapticActuator=ee=>({type:ee.type}),convertFile=ee=>({lastModified:ee.lastModified,name:ee.name,size:ee.size,type:ee.type});function convertDataTransferObject(ee){if(!ee)return null;const{dropEffect:te,effectAllowed:ne,files:re,items:ie,types:oe}=ee;return{dropEffect:te,effectAllowed:ne,files:Array.from(re).map(convertFile),items:Array.from(ie).map(ae=>({kind:ae.kind,type:ae.type})),types:Array.from(oe)}}function convertSelection(ee){if(!ee)return null;const{type:te,anchorNode:ne,anchorOffset:re,focusNode:ie,focusOffset:oe,isCollapsed:ae,rangeCount:le}=ee;return te==="None"?null:{type:te,anchorNode:convertElement(ne),anchorOffset:re,focusNode:convertElement(ie),focusOffset:oe,isCollapsed:ae,rangeCount:le,selectedText:ee.toString()}}function convertTouch({identifier:ee,pageX:te,pageY:ne,screenX:re,screenY:ie,clientX:oe,clientY:ae,force:le,radiusX:ue,radiusY:_e,rotationAngle:ce,target:pe}){return{identifier:ee,pageX:te,pageY:ne,screenX:re,screenY:ie,clientX:oe,clientY:ae,force:le,radiusX:ue,radiusY:_e,rotationAngle:ce,target:convertElement(pe)}}async function loadImportSource(ee,te){let ne;if(ee.sourceType==="URL"?ne=await __vitePreload(()=>import(ee.source),[]):ne=await te.loadModule(ee.source),typeof ne.bind!="function")throw new Error(`${ee.source} did not export a function 'bind'`);return re=>{const ie=ne.bind(re,{sendMessage:te.sendMessage,onMessage:te.onMessage});return typeof ie.create=="function"&&typeof ie.render=="function"&&typeof ie.unmount=="function"?{render:oe=>ie.render(createImportSourceElement({client:te,module:ne,binding:ie,model:oe,currentImportSource:ee})),unmount:ie.unmount}:(console.error(`${ee.source} returned an impropper binding`),null)}}function createImportSourceElement(ee){let te;if(ee.model.importSource)if(isImportSourceEqual(ee.currentImportSource,ee.model.importSource))if(ee.module[ee.model.tagName])te=ee.module[ee.model.tagName];else return console.error("Module from source "+stringifyImportSource(ee.currentImportSource)+` does not export ${ee.model.tagName}`),null;else return console.error("Parent element import source "+stringifyImportSource(ee.currentImportSource)+" does not match child's import source "+stringifyImportSource(ee.model.importSource)),null;else te=ee.model.tagName;return ee.binding.create(te,createAttributes(ee.model,ee.client),createChildren(ee.model,ne=>createImportSourceElement({...ee,model:ne})))}function isImportSourceEqual(ee,te){return ee.source===te.source&&ee.sourceType===te.sourceType}function stringifyImportSource(ee){return JSON.stringify({source:ee.source,sourceType:ee.sourceType})}function createChildren(ee,te){return ee.children?ee.children.map(ne=>{switch(typeof ne){case"object":return te(ne);case"string":return ne}}):[]}function createAttributes(ee,te){return Object.fromEntries(Object.entries({...ee.attributes,...Object.fromEntries(Object.entries(ee.eventHandlers||{}).map(([ne,re])=>createEventHandler(te,ne,re)))}).map(normalizeAttribute))}function createEventHandler(ee,te,{target:ne,preventDefault:re,stopPropagation:ie}){return[te,function(...oe){const ae=Array.from(oe).map(le=>{if(!(typeof le=="object"&&le.nativeEvent))return le;const ue=le;return re&&ue.preventDefault(),ie&&ue.stopPropagation(),convert(ue.nativeEvent)});ee.sendMessage({type:"layout-event",data:ae,target:ne})}]}function normalizeAttribute([ee,te]){let ne=ee,re=te;return ee==="style"&&typeof te=="object"?re=Object.fromEntries(Object.entries(te).map(([ie,oe])=>[snakeToCamel(ie),oe])):ee.startsWith("data_")||ee.startsWith("aria_")||DASHED_HTML_ATTRS.includes(ee)?ne=ee.split("_").join("-"):ne=snakeToCamel(ee),[ne,re]}function snakeToCamel(ee){return ee.replace(/([_][a-z])/g,te=>te.toUpperCase().replace("_",""))}const DASHED_HTML_ATTRS=["accept_charset","http_equiv"],ClientContext=G$1(null);function Layout(ee){const te=h({tagName:""})[0],ne=useForceUpdate();return p(()=>ee.client.onMessage("layout-update",({path:re,model:ie})=>{re===""?Object.assign(te,ie):jsonPointer.set(te,re,ie),ne()}),[te,ee.client]),Cn.createElement(ClientContext.Provider,{value:ee.client},Cn.createElement(Element,{model:te}))}function Element({model:ee}){if(ee.error!==void 0)return ee.error?Cn.createElement("pre",null,ee.error):null;let te;return ee.tagName in SPECIAL_ELEMENTS?te=SPECIAL_ELEMENTS[ee.tagName]:ee.importSource?te=ImportedElement:te=StandardElement,Cn.createElement(te,{model:ee})}function StandardElement({model:ee}){const te=Cn.useContext(ClientContext);return y$1(ee.tagName===""?k$2:ee.tagName,createAttributes(ee,te),...createChildren(ee,ne=>Cn.createElement(Element,{model:ne,key:ne.key})))}function UserInputElement({model:ee}){const te=q$1(ClientContext),ne=createAttributes(ee,te),[re,ie]=Cn.useState(ne.value);Cn.useEffect(()=>ie(ne.value),[ne.value]);const oe=ne.onChange;return typeof oe=="function"&&(ne.onChange=ae=>{ie(ae.target.value),oe(ae)}),y$1(ee.tagName,{...ne,value:re},...createChildren(ee,ae=>Cn.createElement(Element,{model:ae,key:ae.key})))}function ScriptElement({model}){const ref=_(null);return Cn.useEffect(()=>{var ee;if(!ref.current)return;const scriptContent=(ee=model==null?void 0:model.children)==null?void 0:ee.filter(te=>typeof te=="string")[0];let scriptElement;if(model.attributes){scriptElement=document.createElement("script");for(const[te,ne]of Object.entries(model.attributes))scriptElement.setAttribute(te,ne);scriptContent&&scriptElement.appendChild(document.createTextNode(scriptContent)),ref.current.appendChild(scriptElement)}else if(scriptContent){const scriptResult=eval(scriptContent);if(typeof scriptResult=="function")return scriptResult()}},[model.key,ref.current]),Cn.createElement("div",{ref})}function ImportedElement({model:ee}){const te=ee.importSource,ne=useImportSource(ee);if(!te)return null;const re=te.fallback;return te?Cn.createElement("span",{ref:ne}):re?typeof re=="string"?Cn.createElement("span",null,re):Cn.createElement(StandardElement,{model:re}):null}function useForceUpdate(){const[,ee]=h(!1);return()=>ee(te=>!te)}function useImportSource(ee){const te=ee.importSource,ne=JSON.stringify(te),re=_(null),ie=Cn.useContext(ClientContext),[oe,ae]=h(null);return Cn.useEffect(()=>{let le=!1;return te&&loadImportSource(te,ie).then(ue=>{!le&&re.current&&ae(ue(re.current))}),()=>{le=!0,oe&&te&&!te.unmountBeforeUpdate&&oe.unmount()}},[ie,ne,ae,re.current]),p(()=>{if(!!(oe&&te)&&(oe.render(ee),te.unmountBeforeUpdate))return oe.unmount}),re}const SPECIAL_ELEMENTS={input:UserInputElement,script:ScriptElement,select:UserInputElement,textarea:UserInputElement};function mount(ee,te){G(Cn.createElement(Layout,{client:te}),ee)}const logger={log:(...ee)=>console.log("[ReactPy]",...ee),warn:(...ee)=>console.warn("[ReactPy]",...ee),error:(...ee)=>console.error("[ReactPy]",...ee)};class BaseReactPyClient{constructor(){ge(this,"handlers",{});ge(this,"ready");ge(this,"resolveReady");this.resolveReady=()=>{},this.ready=new Promise(te=>this.resolveReady=te)}onMessage(te,ne){return(this.handlers[te]||(this.handlers[te]=[])).push(ne),this.resolveReady(void 0),()=>{this.handlers[te]=this.handlers[te].filter(re=>re!==ne)}}handleIncoming(te){if(!te.type){logger.warn("Received message without type",te);return}const ne=this.handlers[te.type];if(!ne){logger.warn("Received message without handler",te);return}ne.forEach(re=>re(te))}}class SimpleReactPyClient extends BaseReactPyClient{constructor(ne){super();ge(this,"urls");ge(this,"socket");this.urls=getServerUrls(ne.serverLocation||{url:document.location.origin,route:document.location.pathname,query:document.location.search}),this.socket=createReconnectingWebSocket({readyPromise:this.ready,url:this.urls.stream,onMessage:async({data:re})=>this.handleIncoming(JSON.parse(re)),...ne.reconnectOptions})}sendMessage(ne){var re;(re=this.socket.current)==null||re.send(JSON.stringify(ne))}loadModule(ne){return __vitePreload(()=>import(`${this.urls.modules}/${ne}`),[])}}function getServerUrls(ee){const te=new URL(`${ee.url||document.location.origin}/_reactpy`),ne=`${te}/modules`,re=`${te}/assets`,ie=`ws${te.protocol==="https:"?"s":""}`,oe=rtrim(`${te.pathname}/stream${ee.route||""}`,"/"),ae=`${ie}://${te.host}${oe}${ee.query}`;return{base:te,modules:ne,assets:re,stream:ae}}function createReconnectingWebSocket(ee){const{maxInterval:te=6e4,maxRetries:ne=50,backoffRate:re=1.1,intervalJitter:ie=.1}=ee,oe=750;let ae=0,le=oe,ue=!1;const _e={},ce=()=>{_e.current=new WebSocket(ee.url),_e.current.onopen=()=>{ue=!0,logger.log("client connected"),le=oe,ae=0,ee.onOpen&&ee.onOpen()},_e.current.onmessage=ee.onMessage,_e.current.onclose=()=>{if(!ue){logger.log("failed to connect");return}if(logger.log("client disconnected"),ee.onClose&&ee.onClose(),ae>=ne)return;const pe=addJitter(le,ie);logger.log(`reconnecting in ${(pe/1e3).toPrecision(4)} seconds...`),setTimeout(ce,pe),le=nextInterval(le,re,te),ae++}};return ee.readyPromise.then(()=>logger.log("starting client...")).then(ce),_e}function nextInterval(ee,te,ne){return Math.min(ee*te,ne)}function addJitter(ee,te){return ee+(Math.random()*te*ee*2-te*ee)}function rtrim(ee,te){return ee.replace(new RegExp(`${te}+$`),"")}function app(ee){const te=new SimpleReactPyClient({serverLocation:{url:document.location.origin,route:document.location.pathname,query:document.location.search}});mount(ee,te)}app(document.getElementById("app"));
@@ -5,7 +5,7 @@
5
5
 
6
6
  <!-- we replace this with user-provided head elements -->
7
7
  {__head__}
8
- <script type="module" crossorigin src="/_reactpy/assets/index.a1f87a11.js"></script>
8
+ <script type="module" crossorigin src="/_reactpy/assets/index.1a2d86bf.js"></script>
9
9
  </head>
10
10
  <body>
11
11
  <div id="app"></div>
@@ -14,53 +14,49 @@ from reactpy.core.types import VdomDict
14
14
  from reactpy.utils import vdom_to_html
15
15
 
16
16
  if TYPE_CHECKING:
17
+ import uvicorn
17
18
  from asgiref.typing import ASGIApplication
18
19
 
19
20
  PATH_PREFIX = PurePosixPath("/_reactpy")
20
21
  MODULES_PATH = PATH_PREFIX / "modules"
21
22
  ASSETS_PATH = PATH_PREFIX / "assets"
22
23
  STREAM_PATH = PATH_PREFIX / "stream"
24
+ CLIENT_BUILD_DIR = Path(_reactpy_file_path).parent / "_static"
23
25
 
24
- CLIENT_BUILD_DIR = Path(_reactpy_file_path).parent / "_static" / "app" / "dist"
25
26
 
26
- try:
27
+ async def serve_with_uvicorn(
28
+ app: ASGIApplication | Any,
29
+ host: str,
30
+ port: int,
31
+ started: asyncio.Event | None,
32
+ ) -> None:
33
+ """Run a development server for an ASGI application"""
27
34
  import uvicorn
28
- except ImportError: # nocov
29
- pass
30
- else:
31
-
32
- async def serve_development_asgi(
33
- app: ASGIApplication | Any,
34
- host: str,
35
- port: int,
36
- started: asyncio.Event | None,
37
- ) -> None:
38
- """Run a development server for an ASGI application"""
39
- server = uvicorn.Server(
40
- uvicorn.Config(
41
- app,
42
- host=host,
43
- port=port,
44
- loop="asyncio",
45
- reload=True,
46
- )
35
+
36
+ server = uvicorn.Server(
37
+ uvicorn.Config(
38
+ app,
39
+ host=host,
40
+ port=port,
41
+ loop="asyncio",
47
42
  )
48
- server.config.setup_event_loop()
49
- coros: list[Awaitable[Any]] = [server.serve()]
43
+ )
44
+ server.config.setup_event_loop()
45
+ coros: list[Awaitable[Any]] = [server.serve()]
50
46
 
51
- # If a started event is provided, then use it signal based on `server.started`
52
- if started:
53
- coros.append(_check_if_started(server, started))
47
+ # If a started event is provided, then use it signal based on `server.started`
48
+ if started:
49
+ coros.append(_check_if_started(server, started))
54
50
 
55
- try:
56
- await asyncio.gather(*coros)
57
- finally:
58
- # Since we aren't using the uvicorn's `run()` API, we can't guarantee uvicorn's
59
- # order of operations. So we need to make sure `shutdown()` always has an initialized
60
- # list of `self.servers` to use.
61
- if not hasattr(server, "servers"): # nocov
62
- server.servers = []
63
- await asyncio.wait_for(server.shutdown(), timeout=3)
51
+ try:
52
+ await asyncio.gather(*coros)
53
+ finally:
54
+ # Since we aren't using the uvicorn's `run()` API, we can't guarantee uvicorn's
55
+ # order of operations. So we need to make sure `shutdown()` always has an initialized
56
+ # list of `self.servers` to use.
57
+ if not hasattr(server, "servers"): # nocov
58
+ server.servers = []
59
+ await asyncio.wait_for(server.shutdown(), timeout=3)
64
60
 
65
61
 
66
62
  async def _check_if_started(server: uvicorn.Server, started: asyncio.Event) -> None:
@@ -72,8 +68,7 @@ async def _check_if_started(server: uvicorn.Server, started: asyncio.Event) -> N
72
68
  def safe_client_build_dir_path(path: str) -> Path:
73
69
  """Prevent path traversal out of :data:`CLIENT_BUILD_DIR`"""
74
70
  return traversal_safe_path(
75
- CLIENT_BUILD_DIR,
76
- *("index.html" if path in ("", "/") else path).split("/"),
71
+ CLIENT_BUILD_DIR, *("index.html" if path in {"", "/"} else path).split("/")
77
72
  )
78
73
 
79
74
 
@@ -140,6 +135,9 @@ class CommonOptions:
140
135
  url_prefix: str = ""
141
136
  """The URL prefix where ReactPy resources will be served from"""
142
137
 
138
+ serve_index_route: bool = True
139
+ """Automatically generate and serve the index route (``/``)"""
140
+
143
141
  def __post_init__(self) -> None:
144
142
  if self.url_prefix and not self.url_prefix.startswith("/"):
145
143
  msg = "Expected 'url_prefix' to start with '/'"