streamlit-nightly 1.45.2.dev20250606__py3-none-any.whl → 1.45.2.dev20250610__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 (113) hide show
  1. streamlit/commands/execution_control.py +1 -0
  2. streamlit/elements/code.py +2 -2
  3. streamlit/elements/lib/pandas_styler_utils.py +9 -1
  4. streamlit/elements/map.py +5 -25
  5. streamlit/elements/spinner.py +17 -1
  6. streamlit/elements/widgets/radio.py +21 -1
  7. streamlit/runtime/scriptrunner/script_runner.py +2 -0
  8. streamlit/static/index.html +5 -5
  9. streamlit/static/manifest.json +287 -287
  10. streamlit/static/static/css/{index.C6rq3aMZ.css → index.B57yoT8i.css} +1 -1
  11. streamlit/static/static/js/{ErrorOutline.esm.BPlheRUg.js → ErrorOutline.esm.BFmVpS9Y.js} +1 -1
  12. streamlit/static/static/js/{FileDownload.esm.DBPvJlIO.js → FileDownload.esm.CUwGnb6l.js} +1 -1
  13. streamlit/static/static/js/{FileHelper.D7hqm1rs.js → FileHelper.7jhiJzN9.js} +1 -1
  14. streamlit/static/static/js/{FormClearHelper.CiuGPbiw.js → FormClearHelper.DHx8ahLp.js} +1 -1
  15. streamlit/static/static/js/{Hooks.i-LEuQVS.js → Hooks.BDCbPb9Z.js} +1 -1
  16. streamlit/static/static/js/{InputInstructions.DiyV2lfI.js → InputInstructions.B29VfaHu.js} +1 -1
  17. streamlit/static/static/js/{ProgressBar.DsZbmX1F.js → ProgressBar.DCvzFED3.js} +1 -1
  18. streamlit/static/static/js/{RenderInPortalIfExists.BMEXbaG1.js → RenderInPortalIfExists.Dum6Yo4x.js} +1 -1
  19. streamlit/static/static/js/{Toolbar.DOqF9PKk.js → Toolbar.BKJU0yem.js} +1 -1
  20. streamlit/static/static/js/{base-input.BYC-_bsx.js → base-input.B5D5SCDU.js} +1 -1
  21. streamlit/static/static/js/{checkbox.DnegvBUn.js → checkbox.eyyRCmXH.js} +1 -1
  22. streamlit/static/static/js/{createSuper.Dcf6Du3v.js → createSuper.Bfw-n2CW.js} +1 -1
  23. streamlit/static/static/js/{data-grid-overlay-editor.ODa6iMNd.js → data-grid-overlay-editor.Ic_-1uWB.js} +1 -1
  24. streamlit/static/static/js/{downloader.CUFbUoPx.js → downloader.BrOujhsH.js} +1 -1
  25. streamlit/static/static/js/{es6.BX8MS_9G.js → es6.Da9PSRiO.js} +2 -2
  26. streamlit/static/static/js/{iframeResizer.contentWindow.Bu7_8x8S.js → iframeResizer.contentWindow.-m9KEHjj.js} +1 -1
  27. streamlit/static/static/js/{index.Bf7OiFUq.js → index.B2Wwybqa.js} +1 -1
  28. streamlit/static/static/js/{index.5kO-eVzI.js → index.B6hFQ_0c.js} +1 -1
  29. streamlit/static/static/js/{index.UEvOImwt.js → index.B9Hmg5tY.js} +1 -1
  30. streamlit/static/static/js/{index.DT_2un9f.js → index.B9zQe0Ch.js} +12 -12
  31. streamlit/static/static/js/{index.x6To5k1N.js → index.BCuDY7Wq.js} +1 -1
  32. streamlit/static/static/js/{index.CxgTbOOW.js → index.BFvBq9Ky.js} +1 -1
  33. streamlit/static/static/js/{index.-reZVx4t.js → index.B_hrvDfD.js} +1 -1
  34. streamlit/static/static/js/{index.6U8xZd9t.js → index.Bkc0rVhi.js} +1 -1
  35. streamlit/static/static/js/{index.HnTahnXx.js → index.BxCeuwGy.js} +11 -11
  36. streamlit/static/static/js/{index.cClaHld2.js → index.C2jhjPwI.js} +1 -1
  37. streamlit/static/static/js/{index.CF6QAdiF.js → index.C8Tx_yNT.js} +1 -1
  38. streamlit/static/static/js/{index.pJ5b-MCg.js → index.CVnrNDsY.js} +1 -1
  39. streamlit/static/static/js/{index.ClhWXWt6.js → index.CZ7DfyLC.js} +1 -1
  40. streamlit/static/static/js/{index.CfYt2tbH.js → index.CsG3cY4S.js} +1 -1
  41. streamlit/static/static/js/{index.DoOOYKo6.js → index.CsRqF1UT.js} +1 -1
  42. streamlit/static/static/js/{index.BSLU45nm.js → index.Cy5cgtmd.js} +1 -1
  43. streamlit/static/static/js/{index.kmRXFfH8.js → index.D-xYY77h.js} +1 -1
  44. streamlit/static/static/js/{index.DZvJRRXE.js → index.DD4IkJLw.js} +6 -6
  45. streamlit/static/static/js/{index.BSvv4neZ.js → index.DHyANL2t.js} +1 -1
  46. streamlit/static/static/js/{index.BpQQaYsH.js → index.DKRwWqPL.js} +1 -1
  47. streamlit/static/static/js/{index.D45QkWY6.js → index.DM31JZhq.js} +1 -1
  48. streamlit/static/static/js/{index.C1Ax3fWo.js → index.DVX3m8nA.js} +1 -1
  49. streamlit/static/static/js/{index.C5MN-1yU.js → index.DWZy7E8v.js} +1 -1
  50. streamlit/static/static/js/{index.D3prumL7.js → index.Da6TsobW.js} +1 -1
  51. streamlit/static/static/js/{index.DK6Kov-Y.js → index.DkDFCkmE.js} +1 -1
  52. streamlit/static/static/js/{index.htD_aLlM.js → index.DpjOn_mW.js} +1 -1
  53. streamlit/static/static/js/{index.Dupfq6Y_.js → index.Dv1JTAEg.js} +1 -1
  54. streamlit/static/static/js/{index.1wqJoatM.js → index.Dzd6lYTb.js} +1 -1
  55. streamlit/static/static/js/{index.BTofb2AK.js → index.E46WZGKk.js} +1 -1
  56. streamlit/static/static/js/{index.BaPm_YQ4.js → index.Ff_iBwit.js} +1 -1
  57. streamlit/static/static/js/{index.ChqQHZSD.js → index.LVLiaAG5.js} +1 -1
  58. streamlit/static/static/js/{index.Ctp7gmwv.js → index.X0NCujg7.js} +1 -1
  59. streamlit/static/static/js/{index.C35iYNLZ.js → index.bgJFjVuq.js} +20 -20
  60. streamlit/static/static/js/{index.CF1yxAvR.js → index.hHS2hw5y.js} +1 -1
  61. streamlit/static/static/js/{index.CzjTnGFD.js → index.lfluHnyb.js} +1 -1
  62. streamlit/static/static/js/{index.BRC4CPJr.js → index.rCHgixxf.js} +1 -1
  63. streamlit/static/static/js/{index.D9XODeBi.js → index.tgnkrUS7.js} +1 -1
  64. streamlit/static/static/js/{input.BbTx2QYD.js → input.CcBKvzV7.js} +1 -1
  65. streamlit/static/static/js/{memory.B6iT9_rU.js → memory.Dy3vhhGd.js} +1 -1
  66. streamlit/static/static/js/{mergeWith.DixCnRNB.js → mergeWith.Br7ttj2E.js} +1 -1
  67. streamlit/static/static/js/{number-overlay-editor.Q7y8nwGm.js → number-overlay-editor.Dp8qIE2c.js} +1 -1
  68. streamlit/static/static/js/{possibleConstructorReturn.BIBtSx1r.js → possibleConstructorReturn.DrBKFKPb.js} +1 -1
  69. streamlit/static/static/js/{sandbox.C2ZPzr_l.js → sandbox._fV6ffVT.js} +1 -1
  70. streamlit/static/static/js/{textarea.BMQ_ba_z.js → textarea.CG3YusUv.js} +1 -1
  71. streamlit/static/static/js/{timepicker.dDYgD4FB.js → timepicker.CgWFbpop.js} +1 -1
  72. streamlit/static/static/js/{toConsumableArray.D25TFALF.js → toConsumableArray.COmxQMZV.js} +1 -1
  73. streamlit/static/static/js/{uniqueId.D0Y_FD3n.js → uniqueId.Cp7qO6qN.js} +1 -1
  74. streamlit/static/static/js/{useBasicWidgetState.mCO15TrK.js → useBasicWidgetState.CunX1Hmv.js} +1 -1
  75. streamlit/static/static/js/{useOnInputChange.D2L-eHJs.js → useOnInputChange.DCd-U4SE.js} +1 -1
  76. streamlit/static/static/js/{withFullScreenWrapper.D8Fqz3rF.js → withFullScreenWrapper.C9CPnWj9.js} +1 -1
  77. streamlit/static/static/media/SourceSans-Bold.ttf.gn7Db9ke.woff2 +0 -0
  78. streamlit/static/static/media/SourceSans-BoldIt.ttf.Bp6Ygjgu.woff2 +0 -0
  79. streamlit/static/static/media/SourceSans-It.ttf.CKnmOrYX.woff2 +0 -0
  80. streamlit/static/static/media/SourceSans-Regular.ttf.BqTI-3mA.woff2 +0 -0
  81. streamlit/static/static/media/SourceSans-Semibold.ttf.BQV5CVwD.woff2 +0 -0
  82. streamlit/static/static/media/SourceSans-SemiboldIt.ttf.C62jiOej.woff2 +0 -0
  83. streamlit/static/static/media/SourceSerif-Bold.ttf.Csh8T7yr.woff2 +0 -0
  84. streamlit/static/static/media/SourceSerif-BoldIt.ttf.1j4hxMHI.woff2 +0 -0
  85. streamlit/static/static/media/SourceSerif-It.ttf.Cr-UUpZM.woff2 +0 -0
  86. streamlit/static/static/media/SourceSerif-Regular.ttf.BNbBs0kC.woff2 +0 -0
  87. streamlit/static/static/media/SourceSerif-Semibold.ttf.CL4HK1l8.woff2 +0 -0
  88. streamlit/static/static/media/SourceSerif-SemiboldIt.ttf.C2G1sf1n.woff2 +0 -0
  89. streamlit/watcher/local_sources_watcher.py +11 -3
  90. {streamlit_nightly-1.45.2.dev20250606.dist-info → streamlit_nightly-1.45.2.dev20250610.dist-info}/METADATA +1 -1
  91. {streamlit_nightly-1.45.2.dev20250606.dist-info → streamlit_nightly-1.45.2.dev20250610.dist-info}/RECORD +101 -101
  92. streamlit/static/static/media/SourceSansPro-Bold.-6c9oR8J.woff2 +0 -0
  93. streamlit/static/static/media/SourceSansPro-BoldItalic.DmM_grLY.woff2 +0 -0
  94. streamlit/static/static/media/SourceSansPro-Italic.I1ipWe7Q.woff2 +0 -0
  95. streamlit/static/static/media/SourceSansPro-Regular.DZLUzqI4.woff2 +0 -0
  96. streamlit/static/static/media/SourceSansPro-SemiBold.sKQIyTMz.woff2 +0 -0
  97. streamlit/static/static/media/SourceSansPro-SemiBoldItalic.C0wP0icr.woff2 +0 -0
  98. streamlit/static/static/media/SourceSerifPro-Bold.8TUnKj4x.woff2 +0 -0
  99. streamlit/static/static/media/SourceSerifPro-BoldItalic.CBVO7Ve7.woff2 +0 -0
  100. streamlit/static/static/media/SourceSerifPro-Italic.DkFgL2HZ.woff2 +0 -0
  101. streamlit/static/static/media/SourceSerifPro-Regular.CNJNET2S.woff2 +0 -0
  102. streamlit/static/static/media/SourceSerifPro-SemiBold.CHyh9GC5.woff2 +0 -0
  103. streamlit/static/static/media/SourceSerifPro-SemiBoldItalic.CBtz8sWN.woff2 +0 -0
  104. /streamlit/static/static/media/{SourceCodePro-Bold.CFEfr7-q.woff2 → SourceCode-Bold.ttf.CFEfr7-q.woff2} +0 -0
  105. /streamlit/static/static/media/{SourceCodePro-BoldItalic.C-LkFXxa.woff2 → SourceCode-BoldIt.ttf.C-LkFXxa.woff2} +0 -0
  106. /streamlit/static/static/media/{SourceCodePro-Italic.CxFOx7N-.woff2 → SourceCode-It.ttf.CxFOx7N-.woff2} +0 -0
  107. /streamlit/static/static/media/{SourceCodePro-Regular.CBOlD63d.woff2 → SourceCode-Regular.ttf.CBOlD63d.woff2} +0 -0
  108. /streamlit/static/static/media/{SourceCodePro-SemiBold.CFHwW3Wd.woff2 → SourceCode-Semibold.ttf.CFHwW3Wd.woff2} +0 -0
  109. /streamlit/static/static/media/{SourceCodePro-SemiBoldItalic.Cg2yRu82.woff2 → SourceCode-SemiboldIt.ttf.Cg2yRu82.woff2} +0 -0
  110. {streamlit_nightly-1.45.2.dev20250606.data → streamlit_nightly-1.45.2.dev20250610.data}/scripts/streamlit.cmd +0 -0
  111. {streamlit_nightly-1.45.2.dev20250606.dist-info → streamlit_nightly-1.45.2.dev20250610.dist-info}/WHEEL +0 -0
  112. {streamlit_nightly-1.45.2.dev20250606.dist-info → streamlit_nightly-1.45.2.dev20250610.dist-info}/entry_points.txt +0 -0
  113. {streamlit_nightly-1.45.2.dev20250606.dist-info → streamlit_nightly-1.45.2.dev20250610.dist-info}/top_level.txt +0 -0
@@ -236,6 +236,7 @@ def switch_page(page: str | Path | StreamlitPage) -> NoReturn: # type: ignore[m
236
236
  query_string=ctx.query_string,
237
237
  page_script_hash=page_script_hash,
238
238
  cached_message_hashes=ctx.cached_message_hashes,
239
+ context_info=ctx.context_info,
239
240
  )
240
241
  )
241
242
  # Force a yield point so the runner can do the rerun
@@ -14,6 +14,7 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
+ import re
17
18
  from typing import TYPE_CHECKING, cast
18
19
 
19
20
  from streamlit.elements.lib.layout_utils import (
@@ -25,7 +26,6 @@ from streamlit.elements.lib.layout_utils import (
25
26
  )
26
27
  from streamlit.proto.Code_pb2 import Code as CodeProto
27
28
  from streamlit.runtime.metrics_util import gather_metrics
28
- from streamlit.string_util import clean_text
29
29
 
30
30
  if TYPE_CHECKING:
31
31
  from streamlit.delta_generator import DeltaGenerator
@@ -113,7 +113,7 @@ class CodeMixin:
113
113
  height: 380px
114
114
  """
115
115
  code_proto = CodeProto()
116
- code_proto.code_text = clean_text(body)
116
+ code_proto.code_text = re.sub(r"\n\Z", "", re.sub(r"\A\n", "", str(body)))
117
117
  code_proto.language = language or "plaintext"
118
118
  code_proto.show_line_numbers = line_numbers
119
119
  code_proto.wrap_lines = wrap_lines
@@ -26,6 +26,8 @@ if TYPE_CHECKING:
26
26
 
27
27
  from streamlit.proto.Arrow_pb2 import Arrow as ArrowProto
28
28
 
29
+ from enum import Enum
30
+
29
31
 
30
32
  def marshall_styler(proto: ArrowProto, styler: Styler, default_uuid: str) -> None:
31
33
  """Marshall pandas.Styler into an Arrow proto.
@@ -265,6 +267,12 @@ def _use_display_values(df: DataFrame, styles: Mapping[str, Any]) -> DataFrame:
265
267
  for cell in row:
266
268
  if "id" in cell and (match := cell_selector_regex.match(cell["id"])):
267
269
  r, c = map(int, match.groups())
268
- new_df.iloc[r, c] = str(cell["display_value"])
270
+ # Check if the display value is an Enum type. Enum values need to be
271
+ # converted to their `.value` attribute to ensure proper serialization
272
+ # and display logic.
273
+ if isinstance(cell["display_value"], Enum):
274
+ new_df.iloc[r, c] = str(cell["display_value"].value)
275
+ else:
276
+ new_df.iloc[r, c] = str(cell["display_value"])
269
277
 
270
278
  return new_df
streamlit/elements/map.py CHANGED
@@ -230,23 +230,8 @@ class MapMixin:
230
230
  height: 600px
231
231
 
232
232
  """
233
- # This feature was turned off while we investigate why different
234
- # map styles cause DeckGL to crash.
235
- #
236
- # For reference, this was the docstring for map_style:
237
- #
238
- # map_style : str, None
239
- # One of Mapbox's map style URLs. A full list can be found here:
240
- # https://docs.mapbox.com/api/maps/styles/#mapbox-styles
241
- #
242
- # This feature requires a Mapbox token. See the top of these docs
243
- # for information on how to get one and set it up in Streamlit.
244
- #
245
- map_style = None
246
233
  map_proto = DeckGlJsonChartProto()
247
- deck_gl_json = to_deckgl_json(
248
- data, latitude, longitude, size, color, map_style, zoom
249
- )
234
+ deck_gl_json = to_deckgl_json(data, latitude, longitude, size, color, zoom)
250
235
  marshall(
251
236
  map_proto, deck_gl_json, use_container_width, width=width, height=height
252
237
  )
@@ -264,7 +249,6 @@ def to_deckgl_json(
264
249
  lon: str | None,
265
250
  size: None | str | float,
266
251
  color: None | str | Collection[float],
267
- map_style: str | None,
268
252
  zoom: int | None,
269
253
  ) -> str:
270
254
  if data is None:
@@ -318,14 +302,6 @@ def to_deckgl_json(
318
302
  }
319
303
  ]
320
304
 
321
- if map_style:
322
- if not config.get_option("mapbox.token"):
323
- raise StreamlitAPIException(
324
- "You need a Mapbox token in order to select a map type. "
325
- "Refer to the docs for st.map for more information."
326
- )
327
- default["mapStyle"] = map_style
328
-
329
305
  return json.dumps(default)
330
306
 
331
307
 
@@ -502,3 +478,7 @@ def marshall(
502
478
  pydeck_proto.height = height
503
479
 
504
480
  pydeck_proto.id = ""
481
+
482
+ mapbox_token = config.get_option("mapbox.token")
483
+ if mapbox_token:
484
+ pydeck_proto.mapbox_token = mapbox_token
@@ -19,6 +19,11 @@ import threading
19
19
  from typing import TYPE_CHECKING, Final
20
20
 
21
21
  import streamlit as st
22
+ from streamlit.elements.lib.layout_utils import (
23
+ LayoutConfig,
24
+ Width,
25
+ validate_width,
26
+ )
22
27
  from streamlit.runtime.scriptrunner import add_script_run_ctx
23
28
 
24
29
  if TYPE_CHECKING:
@@ -35,6 +40,7 @@ def spinner(
35
40
  *,
36
41
  show_time: bool = False,
37
42
  _cache: bool = False,
43
+ width: Width = "content",
38
44
  ) -> Iterator[None]:
39
45
  """Display a loading spinner while executing a block of code.
40
46
 
@@ -59,6 +65,11 @@ def spinner(
59
65
  elapsed time is displayed with a precision of 0.1 seconds. The time
60
66
  format is not configurable.
61
67
 
68
+ width : "content", "stretch", or int
69
+ The width of the spinner. Can be "content" (default) to size the spinner
70
+ to its content, "stretch" to fill the container width, or an integer
71
+ number of pixels.
72
+
62
73
  Example
63
74
  -------
64
75
  >>> import streamlit as st
@@ -77,6 +88,9 @@ def spinner(
77
88
  from streamlit.proto.Spinner_pb2 import Spinner as SpinnerProto
78
89
  from streamlit.string_util import clean_text
79
90
 
91
+ validate_width(width, allow_content=True)
92
+ layout_config = LayoutConfig(width=width)
93
+
80
94
  message = st.empty()
81
95
 
82
96
  display_message = True
@@ -91,7 +105,9 @@ def spinner(
91
105
  spinner_proto.text = clean_text(text)
92
106
  spinner_proto.cache = _cache
93
107
  spinner_proto.show_time = show_time
94
- message._enqueue("spinner", spinner_proto)
108
+ message._enqueue(
109
+ "spinner", spinner_proto, layout_config=layout_config
110
+ )
95
111
 
96
112
  add_script_run_ctx(threading.Timer(DELAY_SECS, set_message)).start()
97
113
 
@@ -22,6 +22,11 @@ from typing_extensions import Never
22
22
 
23
23
  from streamlit.dataframe_util import OptionSequence, convert_anything_to_list
24
24
  from streamlit.elements.lib.form_utils import current_form_id
25
+ from streamlit.elements.lib.layout_utils import (
26
+ LayoutConfig,
27
+ Width,
28
+ validate_width,
29
+ )
25
30
  from streamlit.elements.lib.options_selector_utils import index_, maybe_coerce_enum
26
31
  from streamlit.elements.lib.policies import (
27
32
  check_widget_policies,
@@ -98,6 +103,7 @@ class RadioMixin:
98
103
  horizontal: bool = False,
99
104
  captions: Sequence[str] | None = None,
100
105
  label_visibility: LabelVisibility = "visible",
106
+ width: Width = "content",
101
107
  ) -> None: ...
102
108
 
103
109
  @overload
@@ -117,6 +123,7 @@ class RadioMixin:
117
123
  horizontal: bool = False,
118
124
  captions: Sequence[str] | None = None,
119
125
  label_visibility: LabelVisibility = "visible",
126
+ width: Width = "content",
120
127
  ) -> T: ...
121
128
 
122
129
  @overload
@@ -136,6 +143,7 @@ class RadioMixin:
136
143
  horizontal: bool = False,
137
144
  captions: Sequence[str] | None = None,
138
145
  label_visibility: LabelVisibility = "visible",
146
+ width: Width = "content",
139
147
  ) -> T | None: ...
140
148
 
141
149
  @gather_metrics("radio")
@@ -155,6 +163,7 @@ class RadioMixin:
155
163
  horizontal: bool = False,
156
164
  captions: Sequence[str] | None = None,
157
165
  label_visibility: LabelVisibility = "visible",
166
+ width: Width = "content",
158
167
  ) -> T | None:
159
168
  r"""Display a radio button widget.
160
169
 
@@ -243,6 +252,11 @@ class RadioMixin:
243
252
  label, which can help keep the widget aligned with other widgets.
244
253
  If this is ``"collapsed"``, Streamlit displays no label or spacer.
245
254
 
255
+ width : "content", "stretch", or int
256
+ The width of the widget. Can be "content" (default) to size the widget
257
+ to its content, "stretch" to fill the container width, or an integer
258
+ number of pixels.
259
+
246
260
  Returns
247
261
  -------
248
262
  any
@@ -304,6 +318,7 @@ class RadioMixin:
304
318
  captions=captions,
305
319
  label_visibility=label_visibility,
306
320
  ctx=ctx,
321
+ width=width,
307
322
  )
308
323
 
309
324
  def _radio(
@@ -323,6 +338,7 @@ class RadioMixin:
323
338
  label_visibility: LabelVisibility = "visible",
324
339
  captions: Sequence[str] | None = None,
325
340
  ctx: ScriptRunContext | None,
341
+ width: Width = "content",
326
342
  ) -> T | None:
327
343
  key = to_key(key)
328
344
 
@@ -334,6 +350,9 @@ class RadioMixin:
334
350
  )
335
351
  maybe_raise_label_warnings(label, label_visibility)
336
352
 
353
+ validate_width(width, allow_content=True)
354
+ layout_config = LayoutConfig(width=width)
355
+
337
356
  opt = convert_anything_to_list(options)
338
357
  check_python_comparable(opt)
339
358
 
@@ -348,6 +367,7 @@ class RadioMixin:
348
367
  help=help,
349
368
  horizontal=horizontal,
350
369
  captions=captions,
370
+ width=width,
351
371
  )
352
372
 
353
373
  if not isinstance(index, int) and index is not None:
@@ -415,7 +435,7 @@ class RadioMixin:
415
435
 
416
436
  if ctx:
417
437
  save_for_app_testing(ctx, element_id, format_func)
418
- self.dg._enqueue("radio", radio_proto)
438
+ self.dg._enqueue("radio", radio_proto, layout_config=layout_config)
419
439
  return widget_state.value
420
440
 
421
441
  @property
@@ -388,6 +388,8 @@ class ScriptRunner:
388
388
  client_state = ClientState()
389
389
  client_state.query_string = ctx.query_string
390
390
  client_state.page_script_hash = ctx.page_script_hash
391
+ if ctx.context_info:
392
+ client_state.context_info.CopyFrom(ctx.context_info)
391
393
  self.on_event.send(
392
394
  self, event=ScriptRunnerEvent.SHUTDOWN, client_state=client_state
393
395
  )
@@ -25,21 +25,21 @@
25
25
  <link rel="shortcut icon" href="./favicon.png" />
26
26
  <link
27
27
  rel="preload"
28
- href="./static/media/SourceSansPro-Regular.DZLUzqI4.woff2"
28
+ href="./static/media/SourceSans-Regular.ttf.BqTI-3mA.woff2"
29
29
  as="font"
30
30
  type="font/woff2"
31
31
  crossorigin
32
32
  />
33
33
  <link
34
34
  rel="preload"
35
- href="./static/media/SourceSansPro-SemiBold.sKQIyTMz.woff2"
35
+ href="./static/media/SourceSans-Semibold.ttf.BQV5CVwD.woff2"
36
36
  as="font"
37
37
  type="font/woff2"
38
38
  crossorigin
39
39
  />
40
40
  <link
41
41
  rel="preload"
42
- href="./static/media/SourceSansPro-Bold.-6c9oR8J.woff2"
42
+ href="./static/media/SourceSans-Bold.ttf.gn7Db9ke.woff2"
43
43
  as="font"
44
44
  type="font/woff2"
45
45
  crossorigin
@@ -51,8 +51,8 @@
51
51
  <script>
52
52
  window.prerenderReady = false
53
53
  </script>
54
- <script type="module" crossorigin src="./static/js/index.HnTahnXx.js"></script>
55
- <link rel="stylesheet" crossorigin href="./static/css/index.C6rq3aMZ.css">
54
+ <script type="module" crossorigin src="./static/js/index.BxCeuwGy.js"></script>
55
+ <link rel="stylesheet" crossorigin href="./static/css/index.B57yoT8i.css">
56
56
  </head>
57
57
  <body>
58
58
  <noscript>You need to enable JavaScript to run this app.</noscript>