streamlit-nightly 1.33.1.dev20240408__py2.py3-none-any.whl → 1.33.1.dev20240412__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. streamlit/__init__.py +4 -1
  2. streamlit/components/lib/__init__.py +13 -0
  3. streamlit/components/lib/local_component_registry.py +82 -0
  4. streamlit/components/types/__init__.py +13 -0
  5. streamlit/components/types/base_component_registry.py +98 -0
  6. streamlit/components/types/base_custom_component.py +137 -0
  7. streamlit/components/v1/__init__.py +7 -3
  8. streamlit/components/v1/component_registry.py +103 -0
  9. streamlit/components/v1/components.py +9 -375
  10. streamlit/components/v1/custom_component.py +241 -0
  11. streamlit/delta_generator.py +54 -36
  12. streamlit/elements/dialog_decorator.py +166 -0
  13. streamlit/elements/image.py +5 -3
  14. streamlit/elements/layouts.py +19 -0
  15. streamlit/elements/lib/dialog.py +148 -0
  16. streamlit/errors.py +6 -0
  17. streamlit/proto/Block_pb2.py +26 -22
  18. streamlit/proto/Block_pb2.pyi +43 -3
  19. streamlit/proto/Common_pb2.py +1 -1
  20. streamlit/runtime/runtime.py +12 -0
  21. streamlit/runtime/scriptrunner/script_run_context.py +3 -0
  22. streamlit/runtime/scriptrunner/script_runner.py +16 -0
  23. streamlit/runtime/state/query_params.py +28 -11
  24. streamlit/runtime/state/query_params_proxy.py +51 -3
  25. streamlit/runtime/state/session_state.py +3 -0
  26. streamlit/static/asset-manifest.json +4 -4
  27. streamlit/static/index.html +1 -1
  28. streamlit/static/static/js/{1168.3029456a.chunk.js → 1168.1d6408e6.chunk.js} +1 -1
  29. streamlit/static/static/js/8427.d30dffe1.chunk.js +1 -0
  30. streamlit/static/static/js/main.46540eaf.js +2 -0
  31. streamlit/web/server/component_request_handler.py +2 -2
  32. streamlit/web/server/server.py +1 -2
  33. {streamlit_nightly-1.33.1.dev20240408.dist-info → streamlit_nightly-1.33.1.dev20240412.dist-info}/METADATA +1 -1
  34. {streamlit_nightly-1.33.1.dev20240408.dist-info → streamlit_nightly-1.33.1.dev20240412.dist-info}/RECORD +39 -30
  35. streamlit/static/static/js/8427.b0ed496b.chunk.js +0 -1
  36. streamlit/static/static/js/main.285df334.js +0 -2
  37. /streamlit/static/static/js/{main.285df334.js.LICENSE.txt → main.46540eaf.js.LICENSE.txt} +0 -0
  38. {streamlit_nightly-1.33.1.dev20240408.data → streamlit_nightly-1.33.1.dev20240412.data}/scripts/streamlit.cmd +0 -0
  39. {streamlit_nightly-1.33.1.dev20240408.dist-info → streamlit_nightly-1.33.1.dev20240412.dist-info}/WHEEL +0 -0
  40. {streamlit_nightly-1.33.1.dev20240408.dist-info → streamlit_nightly-1.33.1.dev20240412.dist-info}/entry_points.txt +0 -0
  41. {streamlit_nightly-1.33.1.dev20240408.dist-info → streamlit_nightly-1.33.1.dev20240412.dist-info}/top_level.txt +0 -0
@@ -22,6 +22,8 @@ from enum import Enum
22
22
  from typing import TYPE_CHECKING, Awaitable, Final, NamedTuple
23
23
 
24
24
  from streamlit import config
25
+ from streamlit.components.lib.local_component_registry import LocalComponentRegistry
26
+ from streamlit.components.types.base_component_registry import BaseComponentRegistry
25
27
  from streamlit.logger import get_logger
26
28
  from streamlit.proto.BackMsg_pb2 import BackMsg
27
29
  from streamlit.proto.ForwardMsg_pb2 import ForwardMsg
@@ -96,6 +98,11 @@ class RuntimeConfig:
96
98
  default_factory=LocalDiskCacheStorageManager
97
99
  )
98
100
 
101
+ # The ComponentRegistry instance to use.
102
+ component_registry: BaseComponentRegistry = field(
103
+ default_factory=LocalComponentRegistry
104
+ )
105
+
99
106
  # The SessionManager class to be used.
100
107
  session_manager_class: type[SessionManager] = WebsocketSessionManager
101
108
 
@@ -195,6 +202,7 @@ class Runtime:
195
202
  self._state = RuntimeState.INITIAL
196
203
 
197
204
  # Initialize managers
205
+ self._component_registry = config.component_registry
198
206
  self._message_cache = ForwardMsgCache()
199
207
  self._uploaded_file_mgr = config.uploaded_file_manager
200
208
  self._media_file_mgr = MediaFileManager(storage=config.media_file_storage)
@@ -220,6 +228,10 @@ class Runtime:
220
228
  def state(self) -> RuntimeState:
221
229
  return self._state
222
230
 
231
+ @property
232
+ def component_registry(self) -> BaseComponentRegistry:
233
+ return self._component_registry
234
+
223
235
  @property
224
236
  def message_cache(self) -> ForwardMsgCache:
225
237
  return self._message_cache
@@ -77,6 +77,8 @@ class ScriptRunContext:
77
77
  script_requests: ScriptRequests | None = None
78
78
  current_fragment_id: str | None = None
79
79
  fragment_ids_this_run: set[str] | None = None
80
+ # we allow only one dialog to be open at the same time
81
+ has_dialog_opened: bool = False
80
82
 
81
83
  # TODO(willhuang1997): Remove this variable when experimental query params are removed
82
84
  _experimental_query_params_used = False
@@ -102,6 +104,7 @@ class ScriptRunContext:
102
104
  self.tracked_commands_counter = collections.Counter()
103
105
  self.current_fragment_id = None
104
106
  self.fragment_ids_this_run = fragment_ids_this_run
107
+ self.has_dialog_opened = False
105
108
 
106
109
  parsed_query_params = parse.parse_qs(query_string, keep_blank_values=True)
107
110
  with self.session_state.query_params() as qp:
@@ -46,6 +46,7 @@ from streamlit.runtime.state import (
46
46
  SafeSessionState,
47
47
  SessionState,
48
48
  )
49
+ from streamlit.runtime.state.session_state import SCRIPT_RUN_PAGE_SCRIPT_HASH_KEY
49
50
  from streamlit.runtime.uploaded_file_manager import UploadedFileManager
50
51
  from streamlit.vendor.ipython.modified_sys_path import modified_sys_path
51
52
 
@@ -463,6 +464,18 @@ class ScriptRunner:
463
464
 
464
465
  fragment_ids_this_run = set(rerun_data.fragment_id_queue)
465
466
 
467
+ # Clear widget state on page change. This normally happens implicitly
468
+ # in the script run cleanup steps, but doing it explicitly ensures
469
+ # it happens even if a script run was interrupted.
470
+ try:
471
+ old_hash = self._session_state[SCRIPT_RUN_PAGE_SCRIPT_HASH_KEY]
472
+ except KeyError:
473
+ old_hash = None
474
+
475
+ if old_hash != page_script_hash:
476
+ # Page changed, reset widget state
477
+ self._session_state.on_script_finished(set())
478
+
466
479
  ctx = self._get_script_run_ctx()
467
480
  ctx.reset(
468
481
  query_string=rerun_data.query_string,
@@ -563,6 +576,9 @@ class ScriptRunner:
563
576
  rerun_data.widget_states
564
577
  )
565
578
 
579
+ self._session_state[
580
+ SCRIPT_RUN_PAGE_SCRIPT_HASH_KEY
581
+ ] = page_script_hash
566
582
  ctx.on_script_start()
567
583
  prep_time = timer() - start_time
568
584
 
@@ -65,6 +65,7 @@ class QueryParams(MutableMapping[str, str]):
65
65
  raise KeyError(missing_key_error_message(key))
66
66
 
67
67
  def __setitem__(self, key: str, value: str | Iterable[str]) -> None:
68
+ self._ensure_single_query_api_used()
68
69
  self.__set_item_internal(key, value)
69
70
  self._send_query_param_msg()
70
71
 
@@ -86,6 +87,7 @@ class QueryParams(MutableMapping[str, str]):
86
87
  self._query_params[key] = str(value)
87
88
 
88
89
  def __delitem__(self, key: str) -> None:
90
+ self._ensure_single_query_api_used()
89
91
  try:
90
92
  if key in EMBED_QUERY_PARAMS_KEYS:
91
93
  raise KeyError(missing_key_error_message(key))
@@ -100,13 +102,14 @@ class QueryParams(MutableMapping[str, str]):
100
102
  /,
101
103
  **kwds: str,
102
104
  ):
103
- # an update function that only sends one ForwardMsg
104
- # once all keys have been updated.
105
+ # This overrides the `update` provided by MutableMapping
106
+ # to ensure only one one ForwardMsg is sent.
107
+ self._ensure_single_query_api_used()
105
108
  if hasattr(other, "keys") and hasattr(other, "__getitem__"):
106
109
  for key in other.keys():
107
110
  self.__set_item_internal(key, other[key])
108
111
  else:
109
- for (key, value) in other:
112
+ for key, value in other:
110
113
  self.__set_item_internal(key, value)
111
114
  for key, value in kwds.items():
112
115
  self.__set_item_internal(key, value)
@@ -146,12 +149,8 @@ class QueryParams(MutableMapping[str, str]):
146
149
  ctx.enqueue(msg)
147
150
 
148
151
  def clear(self) -> None:
149
- new_query_params = {}
150
- for key, value in self._query_params.items():
151
- if key in EMBED_QUERY_PARAMS_KEYS:
152
- new_query_params[key] = value
153
- self._query_params = new_query_params
154
-
152
+ self._ensure_single_query_api_used()
153
+ self.clear_with_no_forward_msg(preserve_embed=True)
155
154
  self._send_query_param_msg()
156
155
 
157
156
  def to_dict(self) -> dict[str, str]:
@@ -163,11 +162,29 @@ class QueryParams(MutableMapping[str, str]):
163
162
  if key not in EMBED_QUERY_PARAMS_KEYS
164
163
  }
165
164
 
165
+ def from_dict(
166
+ self,
167
+ _dict: Iterable[tuple[str, str]] | SupportsKeysAndGetItem[str, str],
168
+ ):
169
+ self._ensure_single_query_api_used()
170
+ old_value = self._query_params.copy()
171
+ self.clear_with_no_forward_msg(preserve_embed=True)
172
+ try:
173
+ self.update(_dict)
174
+ except StreamlitAPIException:
175
+ # restore the original from before we made any changes.
176
+ self._query_params = old_value
177
+ raise
178
+
166
179
  def set_with_no_forward_msg(self, key: str, val: list[str] | str) -> None:
167
180
  self._query_params[key] = val
168
181
 
169
- def clear_with_no_forward_msg(self) -> None:
170
- self._query_params.clear()
182
+ def clear_with_no_forward_msg(self, preserve_embed: bool = False) -> None:
183
+ self._query_params = {
184
+ key: value
185
+ for key, value in self._query_params.items()
186
+ if key in EMBED_QUERY_PARAMS_KEYS and preserve_embed
187
+ }
171
188
 
172
189
  def _ensure_single_query_api_used(self):
173
190
  # Avoid circular imports
@@ -72,18 +72,33 @@ class QueryParamsProxy(MutableMapping[str, str]):
72
72
  raise AttributeError(missing_key_error_message(key))
73
73
 
74
74
  @overload
75
- def update(self, mapping: SupportsKeysAndGetItem[str, str], /, **kwds: str):
75
+ def update(self, mapping: SupportsKeysAndGetItem[str, str], /, **kwds: str) -> None:
76
76
  ...
77
77
 
78
78
  @overload
79
- def update(self, keys_and_values: Iterable[tuple[str, str]], /, **kwds: str):
79
+ def update(
80
+ self, keys_and_values: Iterable[tuple[str, str]], /, **kwds: str
81
+ ) -> None:
80
82
  ...
81
83
 
82
84
  @overload
83
- def update(self, **kwds: str):
85
+ def update(self, **kwds: str) -> None:
84
86
  ...
85
87
 
86
88
  def update(self, other=(), /, **kwds):
89
+ """
90
+ Update one or more values in query_params at once from a dictionary or
91
+ dictionary-like object.
92
+
93
+ See `Mapping.update()` from Python's `collections` library.
94
+
95
+ Parameters
96
+ ----------
97
+ other: SupportsKeysAndGetItem[str, str] | Iterable[tuple[str, str]]
98
+ A dictionary or mapping of strings to strings.
99
+ **kwds: str
100
+ Additional key/value pairs to update passed as keyword arguments.
101
+ """
87
102
  with get_session_state().query_params() as qp:
88
103
  qp.update(other, **kwds)
89
104
 
@@ -146,3 +161,36 @@ class QueryParamsProxy(MutableMapping[str, str]):
146
161
  """
147
162
  with get_session_state().query_params() as qp:
148
163
  return qp.to_dict()
164
+
165
+ @overload
166
+ def from_dict(self, keys_and_values: Iterable[tuple[str, str]]) -> None:
167
+ ...
168
+
169
+ @overload
170
+ def from_dict(self, mapping: SupportsKeysAndGetItem[str, str]) -> None:
171
+ ...
172
+
173
+ @gather_metrics("query_params.from_dict")
174
+ def from_dict(self, other):
175
+ """
176
+ Set all of the query parameters from a dictionary or dictionary-like object.
177
+
178
+ This method primarily exists for advanced users who want to be able to control
179
+ multiple query string parameters in a single update. To set individual
180
+ query string parameters you should still use `st.query_params["parameter"] = "value"`
181
+ or `st.query_params.parameter = "value"`.
182
+
183
+ `embed` and `embed_options` may not be set via this method and may not be keys in the
184
+ `other` dictionary.
185
+
186
+ Note that this method is NOT a direct inverse of `st.query_params.to_dict()` when
187
+ the URL query string contains multiple values for a single key. A true inverse
188
+ operation for from_dict is `{key: st.query_params.get_all(key) for key st.query_params}`.
189
+
190
+ Parameters
191
+ -------
192
+ other: SupportsKeysAndGetItem[str, str] | Iterable[tuple[str, str]]
193
+ A dictionary used to replace the current query_params.
194
+ """
195
+ with get_session_state().query_params() as qp:
196
+ return qp.from_dict(other)
@@ -56,6 +56,9 @@ STREAMLIT_INTERNAL_KEY_PREFIX: Final = "$$STREAMLIT_INTERNAL_KEY"
56
56
  SCRIPT_RUN_WITHOUT_ERRORS_KEY: Final = (
57
57
  f"{STREAMLIT_INTERNAL_KEY_PREFIX}_SCRIPT_RUN_WITHOUT_ERRORS"
58
58
  )
59
+ SCRIPT_RUN_PAGE_SCRIPT_HASH_KEY: Final = (
60
+ f"{STREAMLIT_INTERNAL_KEY_PREFIX}_PAGE_SCRIPT_HASH"
61
+ )
59
62
 
60
63
 
61
64
  @dataclass(frozen=True)
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "./static/css/main.bf304093.css",
4
- "main.js": "./static/js/main.285df334.js",
4
+ "main.js": "./static/js/main.46540eaf.js",
5
5
  "static/js/9336.2d95d840.chunk.js": "./static/js/9336.2d95d840.chunk.js",
6
6
  "static/js/9330.d29313d4.chunk.js": "./static/js/9330.d29313d4.chunk.js",
7
7
  "static/js/7217.d970c074.chunk.js": "./static/js/7217.d970c074.chunk.js",
@@ -10,7 +10,7 @@
10
10
  "static/js/3092.ad569cc8.chunk.js": "./static/js/3092.ad569cc8.chunk.js",
11
11
  "static/css/43.e3b876c5.chunk.css": "./static/css/43.e3b876c5.chunk.css",
12
12
  "static/js/43.9ae03282.chunk.js": "./static/js/43.9ae03282.chunk.js",
13
- "static/js/8427.b0ed496b.chunk.js": "./static/js/8427.b0ed496b.chunk.js",
13
+ "static/js/8427.d30dffe1.chunk.js": "./static/js/8427.d30dffe1.chunk.js",
14
14
  "static/js/7323.2808d029.chunk.js": "./static/js/7323.2808d029.chunk.js",
15
15
  "static/js/4185.78230b2a.chunk.js": "./static/js/4185.78230b2a.chunk.js",
16
16
  "static/js/7805.51638fbc.chunk.js": "./static/js/7805.51638fbc.chunk.js",
@@ -18,7 +18,7 @@
18
18
  "static/js/1307.8ea033f1.chunk.js": "./static/js/1307.8ea033f1.chunk.js",
19
19
  "static/js/2469.3e9c3ce9.chunk.js": "./static/js/2469.3e9c3ce9.chunk.js",
20
20
  "static/js/4113.1e7eff4d.chunk.js": "./static/js/4113.1e7eff4d.chunk.js",
21
- "static/js/1168.3029456a.chunk.js": "./static/js/1168.3029456a.chunk.js",
21
+ "static/js/1168.1d6408e6.chunk.js": "./static/js/1168.1d6408e6.chunk.js",
22
22
  "static/js/178.b5384fd0.chunk.js": "./static/js/178.b5384fd0.chunk.js",
23
23
  "static/js/1792.b8efa879.chunk.js": "./static/js/1792.b8efa879.chunk.js",
24
24
  "static/js/3513.e3e7300a.chunk.js": "./static/js/3513.e3e7300a.chunk.js",
@@ -152,6 +152,6 @@
152
152
  },
153
153
  "entrypoints": [
154
154
  "static/css/main.bf304093.css",
155
- "static/js/main.285df334.js"
155
+ "static/js/main.46540eaf.js"
156
156
  ]
157
157
  }
@@ -1 +1 @@
1
- <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><link rel="shortcut icon" href="./favicon.png"/><link rel="preload" href="./static/media/SourceSansPro-Regular.0d69e5ff5e92ac64a0c9.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="./static/media/SourceSansPro-SemiBold.abed79cd0df1827e18cf.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="./static/media/SourceSansPro-Bold.118dea98980e20a81ced.woff2" as="font" type="font/woff2" crossorigin><title>Streamlit</title><script>window.prerenderReady=!1</script><script defer="defer" src="./static/js/main.285df334.js"></script><link href="./static/css/main.bf304093.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
1
+ <!doctype html><html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"/><link rel="shortcut icon" href="./favicon.png"/><link rel="preload" href="./static/media/SourceSansPro-Regular.0d69e5ff5e92ac64a0c9.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="./static/media/SourceSansPro-SemiBold.abed79cd0df1827e18cf.woff2" as="font" type="font/woff2" crossorigin><link rel="preload" href="./static/media/SourceSansPro-Bold.118dea98980e20a81ced.woff2" as="font" type="font/woff2" crossorigin><title>Streamlit</title><script>window.prerenderReady=!1</script><script defer="defer" src="./static/js/main.46540eaf.js"></script><link href="./static/css/main.bf304093.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>
@@ -1 +1 @@
1
- "use strict";(self.webpackChunk_streamlit_app=self.webpackChunk_streamlit_app||[]).push([[1168],{71168:(l,e,o)=>{o.r(e),o.d(e,{default:()=>h});var r=o(66845),t=o(25621),c=o(62622),a=o(42736),n=o(96825),i=o.n(n),p=o(92627),s=o(63765),f=o(23849);function y(l,e,o){return l=function(l,e){return(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll("#000032",(0,p.By)(e))).replaceAll("#000033",(0,p.He)(e))).replaceAll("#000034",(0,p.Iy)(e)?e.colors.blue80:e.colors.blue40)).replaceAll("#000035",(0,p.ny)(e))).replaceAll("#000036",(0,p.Xy)(e))).replaceAll("#000037",(0,p.yq)(e))).replaceAll("#000038",e.colors.bgColor)).replaceAll("#000039",e.colors.fadedText05)).replaceAll("#000040",e.colors.bgMix)}(l,e),l=function(l,e,o){const r="#000001",t="#000002",c="#000003",a="#000004",n="#000005",i="#000006",s="#000007",f="#000008",y="#000009",d="#000010";if("streamlit"===o){const o=(0,p.iY)(e);l=(l=(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll(r,o[0])).replaceAll(t,o[1])).replaceAll(c,o[2])).replaceAll(a,o[3])).replaceAll(n,o[4])).replaceAll(i,o[5])).replaceAll(s,o[6])).replaceAll(f,o[7])).replaceAll(y,o[8])).replaceAll(d,o[9])}else l=(l=(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll(r,"#636efa")).replaceAll(t,"#EF553B")).replaceAll(c,"#00cc96")).replaceAll(a,"#ab63fa")).replaceAll(n,"#FFA15A")).replaceAll(i,"#19d3f3")).replaceAll(s,"#FF6692")).replaceAll(f,"#B6E880")).replaceAll(y,"#FF97FF")).replaceAll(d,"#FECB52");return l}(l,e,o),l=function(l,e,o){const r="#000011",t="#000012",c="#000013",a="#000014",n="#000015",i="#000016",s="#000017",f="#000018",y="#000019",d="#000020";if("streamlit"===o){const o=(0,p.Gy)(e);l=(l=(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll(r,o[0])).replaceAll(t,o[1])).replaceAll(c,o[2])).replaceAll(a,o[3])).replaceAll(n,o[4])).replaceAll(i,o[5])).replaceAll(s,o[6])).replaceAll(f,o[7])).replaceAll(y,o[8])).replaceAll(d,o[9])}else l=(l=(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll(r,"#0d0887")).replaceAll(t,"#46039f")).replaceAll(c,"#7201a8")).replaceAll(a,"#9c179e")).replaceAll(n,"#bd3786")).replaceAll(i,"#d8576b")).replaceAll(s,"#ed7953")).replaceAll(f,"#fb9f3a")).replaceAll(y,"#fdca26")).replaceAll(d,"#f0f921");return l}(l,e,o),l=function(l,e,o){const r="#000021",t="#000022",c="#000023",a="#000024",n="#000025",i="#000026",s="#000027",f="#000028",y="#000029",d="#000030",A="#000031";if("streamlit"===o){const o=(0,p.ru)(e);l=(l=(l=(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll(r,o[0])).replaceAll(t,o[1])).replaceAll(c,o[2])).replaceAll(a,o[3])).replaceAll(n,o[4])).replaceAll(i,o[5])).replaceAll(s,o[6])).replaceAll(f,o[7])).replaceAll(y,o[8])).replaceAll(d,o[9])).replaceAll(A,o[10])}else l=(l=(l=(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll(r,"#8e0152")).replaceAll(t,"#c51b7d")).replaceAll(c,"#de77ae")).replaceAll(a,"#f1b6da")).replaceAll(n,"#fde0ef")).replaceAll(i,"#f7f7f7")).replaceAll(s,"#e6f5d0")).replaceAll(f,"#b8e186")).replaceAll(y,"#7fbc41")).replaceAll(d,"#4d9221")).replaceAll(A,"#276419");return l}(l,e,o),l}function d(l,e){try{!function(l,e){const{genericFonts:o,colors:r,fontSizes:t}=e,c={font:{color:(0,p.Xy)(e),family:o.bodyFont,size:t.twoSmPx},title:{color:r.headingColor,subtitleColor:r.bodyText,font:{family:o.headingFont,size:t.mdPx,color:r.headingColor},pad:{l:e.spacing.twoXSPx},xanchor:"left",x:0},legend:{title:{font:{size:t.twoSmPx,color:(0,p.Xy)(e)},side:"top"},valign:"top",bordercolor:r.transparent,borderwidth:e.spacing.nonePx,font:{size:t.twoSmPx,color:(0,p.yq)(e)}},paper_bgcolor:r.bgColor,plot_bgcolor:r.bgColor,yaxis:{ticklabelposition:"outside",zerolinecolor:(0,p.ny)(e),title:{font:{color:(0,p.Xy)(e),size:t.smPx},standoff:e.spacing.twoXLPx},tickcolor:(0,p.ny)(e),tickfont:{color:(0,p.Xy)(e),size:t.twoSmPx},gridcolor:(0,p.ny)(e),minor:{gridcolor:(0,p.ny)(e)},automargin:!0},xaxis:{zerolinecolor:(0,p.ny)(e),gridcolor:(0,p.ny)(e),showgrid:!1,tickfont:{color:(0,p.Xy)(e),size:t.twoSmPx},tickcolor:(0,p.ny)(e),title:{font:{color:(0,p.Xy)(e),size:t.smPx},standoff:e.spacing.xlPx},minor:{gridcolor:(0,p.ny)(e)},zeroline:!1,automargin:!0,rangeselector:{bgcolor:r.bgColor,bordercolor:(0,p.ny)(e),borderwidth:1,x:0}},margin:{pad:e.spacing.smPx,r:e.spacing.nonePx,l:e.spacing.nonePx},hoverlabel:{bgcolor:r.bgColor,bordercolor:r.fadedText10,font:{color:(0,p.Xy)(e),family:o.bodyFont,size:t.twoSmPx}},coloraxis:{colorbar:{thickness:16,xpad:e.spacing.twoXLPx,ticklabelposition:"outside",outlinecolor:r.transparent,outlinewidth:8,len:.75,y:.5745,title:{font:{color:(0,p.Xy)(e),size:t.smPx}},tickfont:{color:(0,p.Xy)(e),size:t.twoSmPx}}},ternary:{gridcolor:(0,p.Xy)(e),bgcolor:r.bgColor,title:{font:{family:o.bodyFont,size:t.smPx}},color:(0,p.Xy)(e),aaxis:{gridcolor:(0,p.Xy)(e),linecolor:(0,p.Xy)(e),tickfont:{family:o.bodyFont,size:t.twoSmPx}},baxis:{linecolor:(0,p.Xy)(e),gridcolor:(0,p.Xy)(e),tickfont:{family:o.bodyFont,size:t.twoSmPx}},caxis:{linecolor:(0,p.Xy)(e),gridcolor:(0,p.Xy)(e),tickfont:{family:o.bodyFont,size:t.twoSmPx}}}};i()(l,c)}(l.layout.template.layout,e)}catch(o){const l=(0,s.b)(o);(0,f.H)(l)}"title"in l.layout&&(l.layout.title=i()(l.layout.title,{text:"<b>".concat(l.layout.title.text,"</b>")}))}var A=o(40864);const u=450;function g(l){return!!l}function b(l){let{element:e,width:o,height:c}=l;const n=e.figure,i=(0,t.u)(),p=(0,r.useCallback)((()=>{const l=JSON.parse(y(n.spec,i,e.theme)),r=l.layout.height,t=l.layout.width;return g(c)?(l.layout.width=o,l.layout.height=c):e.useContainerWidth?l.layout.width=o:(l.layout.width=t,l.layout.height=r),"streamlit"===e.theme?d(l,i):l.layout=function(l,e){const{colors:o,genericFonts:r}=e,t={font:{color:o.bodyText,family:r.bodyFont},paper_bgcolor:o.bgColor,plot_bgcolor:o.secondaryBg};return{...l,font:{...t.font,...l.font},paper_bgcolor:l.paper_bgcolor||t.paper_bgcolor,plot_bgcolor:l.plot_bgcolor||t.plot_bgcolor}}(l.layout,i),l}),[e.theme,e.useContainerWidth,n.spec,c,i,o]),[s,f]=(0,r.useState)(JSON.parse(n.config)),[u,b]=(0,r.useState)(p());(0,r.useLayoutEffect)((()=>{f(JSON.parse(n.config)),b(p())}),[e,i,c,o,n.config,p]);const{data:h,layout:m,frames:x}=u;return(0,A.jsx)(a.Z,{className:"stPlotlyChart",data:h,layout:m,config:s,frames:x},g(c)?"fullscreen":"original")}const h=(0,c.Z)((function(l){let{width:e,element:o,height:r}=l;switch(o.chart){case"url":return function(l){let{url:e,width:o,height:r}=l;const t=r||u;return(0,A.jsx)("iframe",{title:"Plotly",src:e,style:{width:o,height:t,colorScheme:"normal"}})}({url:o.url,height:r,width:e});case"figure":return(0,A.jsx)(b,{width:e,element:o,height:r});default:throw new Error("Unrecognized PlotlyChart type: ".concat(o.chart))}}))}}]);
1
+ "use strict";(self.webpackChunk_streamlit_app=self.webpackChunk_streamlit_app||[]).push([[1168],{71168:(l,e,o)=>{o.r(e),o.d(e,{default:()=>b});var r=o(66845),t=o(25621),c=o(62622),a=o(42736),n=o(96825),i=o.n(n),p=o(92627),s=o(63765),f=o(23849);function y(l,e,o){return l=function(l,e){return(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll("#000032",(0,p.By)(e))).replaceAll("#000033",(0,p.He)(e))).replaceAll("#000034",(0,p.Iy)(e)?e.colors.blue80:e.colors.blue40)).replaceAll("#000035",(0,p.ny)(e))).replaceAll("#000036",(0,p.Xy)(e))).replaceAll("#000037",(0,p.yq)(e))).replaceAll("#000038",e.colors.bgColor)).replaceAll("#000039",e.colors.fadedText05)).replaceAll("#000040",e.colors.bgMix)}(l,e),l=function(l,e,o){const r="#000001",t="#000002",c="#000003",a="#000004",n="#000005",i="#000006",s="#000007",f="#000008",y="#000009",d="#000010";if("streamlit"===o){const o=(0,p.iY)(e);l=(l=(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll(r,o[0])).replaceAll(t,o[1])).replaceAll(c,o[2])).replaceAll(a,o[3])).replaceAll(n,o[4])).replaceAll(i,o[5])).replaceAll(s,o[6])).replaceAll(f,o[7])).replaceAll(y,o[8])).replaceAll(d,o[9])}else l=(l=(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll(r,"#636efa")).replaceAll(t,"#EF553B")).replaceAll(c,"#00cc96")).replaceAll(a,"#ab63fa")).replaceAll(n,"#FFA15A")).replaceAll(i,"#19d3f3")).replaceAll(s,"#FF6692")).replaceAll(f,"#B6E880")).replaceAll(y,"#FF97FF")).replaceAll(d,"#FECB52");return l}(l,e,o),l=function(l,e,o){const r="#000011",t="#000012",c="#000013",a="#000014",n="#000015",i="#000016",s="#000017",f="#000018",y="#000019",d="#000020";if("streamlit"===o){const o=(0,p.Gy)(e);l=(l=(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll(r,o[0])).replaceAll(t,o[1])).replaceAll(c,o[2])).replaceAll(a,o[3])).replaceAll(n,o[4])).replaceAll(i,o[5])).replaceAll(s,o[6])).replaceAll(f,o[7])).replaceAll(y,o[8])).replaceAll(d,o[9])}else l=(l=(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll(r,"#0d0887")).replaceAll(t,"#46039f")).replaceAll(c,"#7201a8")).replaceAll(a,"#9c179e")).replaceAll(n,"#bd3786")).replaceAll(i,"#d8576b")).replaceAll(s,"#ed7953")).replaceAll(f,"#fb9f3a")).replaceAll(y,"#fdca26")).replaceAll(d,"#f0f921");return l}(l,e,o),l=function(l,e,o){const r="#000021",t="#000022",c="#000023",a="#000024",n="#000025",i="#000026",s="#000027",f="#000028",y="#000029",d="#000030",u="#000031";if("streamlit"===o){const o=(0,p.ru)(e);l=(l=(l=(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll(r,o[0])).replaceAll(t,o[1])).replaceAll(c,o[2])).replaceAll(a,o[3])).replaceAll(n,o[4])).replaceAll(i,o[5])).replaceAll(s,o[6])).replaceAll(f,o[7])).replaceAll(y,o[8])).replaceAll(d,o[9])).replaceAll(u,o[10])}else l=(l=(l=(l=(l=(l=(l=(l=(l=(l=(l=l.replaceAll(r,"#8e0152")).replaceAll(t,"#c51b7d")).replaceAll(c,"#de77ae")).replaceAll(a,"#f1b6da")).replaceAll(n,"#fde0ef")).replaceAll(i,"#f7f7f7")).replaceAll(s,"#e6f5d0")).replaceAll(f,"#b8e186")).replaceAll(y,"#7fbc41")).replaceAll(d,"#4d9221")).replaceAll(u,"#276419");return l}(l,e,o),l}function d(l,e){try{!function(l,e){const{genericFonts:o,colors:r,fontSizes:t}=e,c={font:{color:(0,p.Xy)(e),family:o.bodyFont,size:t.twoSmPx},title:{color:r.headingColor,subtitleColor:r.bodyText,font:{family:o.headingFont,size:t.mdPx,color:r.headingColor},pad:{l:e.spacing.twoXSPx},xanchor:"left",x:0},legend:{title:{font:{size:t.twoSmPx,color:(0,p.Xy)(e)},side:"top"},valign:"top",bordercolor:r.transparent,borderwidth:e.spacing.nonePx,font:{size:t.twoSmPx,color:(0,p.yq)(e)}},paper_bgcolor:r.bgColor,plot_bgcolor:r.bgColor,yaxis:{ticklabelposition:"outside",zerolinecolor:(0,p.ny)(e),title:{font:{color:(0,p.Xy)(e),size:t.smPx},standoff:e.spacing.twoXLPx},tickcolor:(0,p.ny)(e),tickfont:{color:(0,p.Xy)(e),size:t.twoSmPx},gridcolor:(0,p.ny)(e),minor:{gridcolor:(0,p.ny)(e)},automargin:!0},xaxis:{zerolinecolor:(0,p.ny)(e),gridcolor:(0,p.ny)(e),showgrid:!1,tickfont:{color:(0,p.Xy)(e),size:t.twoSmPx},tickcolor:(0,p.ny)(e),title:{font:{color:(0,p.Xy)(e),size:t.smPx},standoff:e.spacing.xlPx},minor:{gridcolor:(0,p.ny)(e)},zeroline:!1,automargin:!0,rangeselector:{bgcolor:r.bgColor,bordercolor:(0,p.ny)(e),borderwidth:1,x:0}},margin:{pad:e.spacing.smPx,r:e.spacing.nonePx,l:e.spacing.nonePx},hoverlabel:{bgcolor:r.bgColor,bordercolor:r.fadedText10,font:{color:(0,p.Xy)(e),family:o.bodyFont,size:t.twoSmPx}},coloraxis:{colorbar:{thickness:16,xpad:e.spacing.twoXLPx,ticklabelposition:"outside",outlinecolor:r.transparent,outlinewidth:8,len:.75,y:.5745,title:{font:{color:(0,p.Xy)(e),size:t.smPx}},tickfont:{color:(0,p.Xy)(e),size:t.twoSmPx}}},ternary:{gridcolor:(0,p.Xy)(e),bgcolor:r.bgColor,title:{font:{family:o.bodyFont,size:t.smPx}},color:(0,p.Xy)(e),aaxis:{gridcolor:(0,p.Xy)(e),linecolor:(0,p.Xy)(e),tickfont:{family:o.bodyFont,size:t.twoSmPx}},baxis:{linecolor:(0,p.Xy)(e),gridcolor:(0,p.Xy)(e),tickfont:{family:o.bodyFont,size:t.twoSmPx}},caxis:{linecolor:(0,p.Xy)(e),gridcolor:(0,p.Xy)(e),tickfont:{family:o.bodyFont,size:t.twoSmPx}}}};i()(l,c)}(l.layout.template.layout,e)}catch(o){const l=(0,s.b)(o);(0,f.H)(l)}"title"in l.layout&&(l.layout.title=i()(l.layout.title,{text:"<b>".concat(l.layout.title.text,"</b>")}))}var u=o(40864);const A=450;function g(l){let{element:e,width:o,height:c,isFullScreen:n}=l;const i=e.figure,p=(0,t.u)(),s=(0,r.useCallback)((()=>{const l=JSON.parse(y(i.spec,p,e.theme)),r=l.layout.height,t=l.layout.width;return n?(l.layout.width=o,l.layout.height=c):e.useContainerWidth?l.layout.width=o:(l.layout.width=t,l.layout.height=r),"streamlit"===e.theme?d(l,p):l.layout=function(l,e){const{colors:o,genericFonts:r}=e,t={font:{color:o.bodyText,family:r.bodyFont},paper_bgcolor:o.bgColor,plot_bgcolor:o.secondaryBg};return{...l,font:{...t.font,...l.font},paper_bgcolor:l.paper_bgcolor||t.paper_bgcolor,plot_bgcolor:l.plot_bgcolor||t.plot_bgcolor}}(l.layout,p),l}),[e.theme,e.useContainerWidth,i.spec,c,p,o,n]),[f,A]=(0,r.useState)(JSON.parse(i.config)),[g,b]=(0,r.useState)(s());(0,r.useLayoutEffect)((()=>{A(JSON.parse(i.config)),b(s())}),[e,p,c,o,i.config,s]);const{data:h,layout:m,frames:x}=g;return(0,u.jsx)(a.Z,{className:"stPlotlyChart",data:h,layout:m,config:f,frames:x},n?"fullscreen":"original")}const b=(0,c.Z)((function(l){let{width:e,element:o,height:r,isFullScreen:t}=l;switch(o.chart){case"url":return function(l){let{url:e,width:o,height:r}=l;const t=r||A;return(0,u.jsx)("iframe",{title:"Plotly",src:e,style:{width:o,height:t,colorScheme:"normal"}})}({url:o.url,height:r,width:e});case"figure":return(0,u.jsx)(g,{width:e,element:o,height:r,isFullScreen:t});default:throw new Error("Unrecognized PlotlyChart type: ".concat(o.chart))}}))}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_streamlit_app=self.webpackChunk_streamlit_app||[]).push([[8427],{18427:(e,t,o)=>{o.r(t),o.d(t,{default:()=>b});var i=o(66845),r=o(25621),s=o(69021),n=o(92627),a=o(21e3),l=o(59033),d=o(36989),c=o(1515);const g=(0,c.Z)("button",{target:"elibz2u3"})((e=>{let{theme:t}=e;return{fontSize:t.fontSizes.sm,lineHeight:"1.4rem",color:t.colors.fadedText60,backgroundColor:t.colors.transparent,border:"none",boxShadow:"none",padding:"0px","&:hover, &:active, &:focus":{border:"none",outline:"none",boxShadow:"none"},"&:hover":{color:t.colors.primary}}}),""),p=(0,c.Z)("div",{target:"elibz2u2"})((e=>{let{theme:t}=e;return{display:"flex",flexDirection:"row",gap:t.spacing.lg}}),""),u=(0,c.Z)("div",{target:"elibz2u1"})((e=>{let{theme:t}=e;return{fontSize:t.fontSizes.xl}}),""),h=(0,c.Z)("div",{target:"elibz2u0"})((e=>{let{theme:t}=e;return{display:"flex",flexDirection:"column",gap:t.spacing.sm,alignItems:"start",justifyContent:"center",overflow:"hidden",minHeight:"100%",fontSize:t.fontSizes.sm,lineHeight:t.lineHeights.base}}),"");var f=o(40864);const b=(0,r.b)((function(e){let{theme:t,body:o,icon:r,width:c}=e;const b=function(e){if(e.length>109){let t=e.replace(/^(.{109}[^\s]*).*/,"$1");return t.length>109&&(t=t.substring(0,109).split(" ").slice(0,-1).join(" ")),t.trim()}return e}(o),m=o!==b,[x,w]=(0,i.useState)(!m),[y,S]=(0,i.useState)(0),v=(0,i.useCallback)((()=>{w(!x)}),[x]),z=(0,i.useMemo)((()=>function(e){const t=(0,n.Iy)(e);return{Body:{props:{"data-testid":"stToast"},style:{display:"flex",flexDirection:"row",gap:e.spacing.md,width:e.sizes.sidebar,marginTop:"8px",borderTopLeftRadius:e.radii.lg,borderTopRightRadius:e.radii.lg,borderBottomLeftRadius:e.radii.lg,borderBottomRightRadius:e.radii.lg,paddingTop:e.spacing.lg,paddingBottom:e.spacing.lg,paddingLeft:e.spacing.twoXL,paddingRight:e.spacing.twoXL,backgroundColor:t?e.colors.gray10:e.colors.gray90,color:e.colors.bodyText,boxShadow:t?"0px 4px 16px rgba(0, 0, 0, 0.16)":"0px 4px 16px rgba(0, 0, 0, 0.7)"}},CloseIcon:{style:{color:e.colors.fadedText40,width:e.fontSizes.lg,height:e.fontSizes.lg,marginRight:"calc(-1 * ".concat(e.spacing.lg," / 2)"),":hover":{color:e.colors.bodyText}}}}}(t)),[t]),R=(0,i.useMemo)((()=>(0,f.jsx)(f.Fragment,{children:(0,f.jsxs)(p,{expanded:x,children:[(0,f.jsx)(u,{children:r}),(0,f.jsxs)(h,{children:[(0,f.jsx)(a.ZP,{source:x?o:b,allowHTML:!1,isToast:!0}),m&&(0,f.jsx)(g,{"data-testid":"toastViewButton",className:"toastViewButton",onClick:v,children:x?"view less":"view more"})]})]})})),[m,x,o,r,b,v]);(0,i.useEffect)((()=>{if(t.inSidebar)return;const e=s.Z.info(R,{overrides:{...z}});return S(e),()=>{s.Z.update(e,{overrides:{Body:{style:{transitionDuration:0}}}}),s.Z.clear(e)}}),[]),(0,i.useEffect)((()=>{s.Z.update(y,{children:R,overrides:{...z}})}),[y,R,z]);const T=(0,f.jsx)(d.Z,{kind:l.h.ERROR,body:"Streamlit API Error: `st.toast` cannot be called directly on the sidebar with `st.sidebar.toast`. See our `st.toast` API [docs](https://docs.streamlit.io/library/api-reference/status/st.toast) for more information.",width:c});return(0,f.jsx)(f.Fragment,{children:t.inSidebar&&T})}))}}]);