streamlit-nightly 1.38.1.dev20240922__py2.py3-none-any.whl → 1.38.1.dev20240924__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 (34) hide show
  1. streamlit/__init__.py +0 -1
  2. streamlit/elements/deck_gl_json_chart.py +260 -36
  3. streamlit/elements/widgets/button_group.py +1 -1
  4. streamlit/proto/DeckGlJsonChart_pb2.py +4 -2
  5. streamlit/proto/DeckGlJsonChart_pb2.pyi +40 -2
  6. streamlit/runtime/state/common.py +2 -0
  7. streamlit/runtime/state/widgets.py +2 -1
  8. streamlit/static/asset-manifest.json +12 -12
  9. streamlit/static/index.html +1 -1
  10. streamlit/static/static/js/195.8e0d331c.chunk.js +2 -0
  11. streamlit/static/static/js/238.f9bc20d9.chunk.js +1 -0
  12. streamlit/static/static/js/245.f99079b1.chunk.js +1 -0
  13. streamlit/static/static/js/3710.a5101ccc.chunk.js +1 -0
  14. streamlit/static/static/js/{5625.fe6c22ad.chunk.js → 5625.d9509933.chunk.js} +1 -1
  15. streamlit/static/static/js/{6088.c137d543.chunk.js → 6088.1164e19b.chunk.js} +1 -1
  16. streamlit/static/static/js/8642.58110d15.chunk.js +2 -0
  17. streamlit/static/static/js/{8815.0284d089.chunk.js → 8815.9d336691.chunk.js} +1 -1
  18. streamlit/static/static/js/{9943.d18fdff1.chunk.js → 9943.2d62e2c4.chunk.js} +1 -1
  19. streamlit/static/static/js/{main.829dd23b.js → main.133ce9b9.js} +4 -4
  20. {streamlit_nightly-1.38.1.dev20240922.dist-info → streamlit_nightly-1.38.1.dev20240924.dist-info}/METADATA +1 -1
  21. {streamlit_nightly-1.38.1.dev20240922.dist-info → streamlit_nightly-1.38.1.dev20240924.dist-info}/RECORD +29 -29
  22. streamlit/static/static/js/2055.bca43613.chunk.js +0 -1
  23. streamlit/static/static/js/245.68a062da.chunk.js +0 -1
  24. streamlit/static/static/js/6789.f8dde736.chunk.js +0 -2
  25. streamlit/static/static/js/8485.81bdf474.chunk.js +0 -1
  26. streamlit/static/static/js/8642.dfef7dcb.chunk.js +0 -2
  27. /streamlit/static/static/css/{6789.81b3d18f.chunk.css → 195.81b3d18f.chunk.css} +0 -0
  28. /streamlit/static/static/js/{6789.f8dde736.chunk.js.LICENSE.txt → 195.8e0d331c.chunk.js.LICENSE.txt} +0 -0
  29. /streamlit/static/static/js/{8642.dfef7dcb.chunk.js.LICENSE.txt → 8642.58110d15.chunk.js.LICENSE.txt} +0 -0
  30. /streamlit/static/static/js/{main.829dd23b.js.LICENSE.txt → main.133ce9b9.js.LICENSE.txt} +0 -0
  31. {streamlit_nightly-1.38.1.dev20240922.data → streamlit_nightly-1.38.1.dev20240924.data}/scripts/streamlit.cmd +0 -0
  32. {streamlit_nightly-1.38.1.dev20240922.dist-info → streamlit_nightly-1.38.1.dev20240924.dist-info}/WHEEL +0 -0
  33. {streamlit_nightly-1.38.1.dev20240922.dist-info → streamlit_nightly-1.38.1.dev20240924.dist-info}/entry_points.txt +0 -0
  34. {streamlit_nightly-1.38.1.dev20240922.dist-info → streamlit_nightly-1.38.1.dev20240924.dist-info}/top_level.txt +0 -0
streamlit/__init__.py CHANGED
@@ -204,7 +204,6 @@ metric = _main.metric
204
204
  multiselect = _main.multiselect
205
205
  number_input = _main.number_input
206
206
  page_link = _main.page_link
207
- pills = _main.pills
208
207
  plotly_chart = _main.plotly_chart
209
208
  popover = _main.popover
210
209
  progress = _main.progress
@@ -15,11 +15,35 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  import json
18
- from typing import TYPE_CHECKING, Any, Dict, Final, Mapping, cast
18
+ from dataclasses import dataclass
19
+ from typing import (
20
+ TYPE_CHECKING,
21
+ Any,
22
+ Dict,
23
+ Final,
24
+ Iterable,
25
+ Literal,
26
+ Mapping,
27
+ TypedDict,
28
+ cast,
29
+ overload,
30
+ )
31
+
32
+ from typing_extensions import TypeAlias
19
33
 
20
34
  from streamlit import config
35
+ from streamlit.elements.lib.event_utils import AttributeDictionary
36
+ from streamlit.elements.lib.form_utils import current_form_id
37
+ from streamlit.elements.lib.policies import check_widget_policies
38
+ from streamlit.elements.lib.utils import Key, compute_and_register_element_id, to_key
39
+ from streamlit.errors import StreamlitAPIException
21
40
  from streamlit.proto.DeckGlJsonChart_pb2 import DeckGlJsonChart as PydeckProto
22
41
  from streamlit.runtime.metrics_util import gather_metrics
42
+ from streamlit.runtime.scriptrunner_utils.script_run_context import get_script_run_ctx
43
+ from streamlit.runtime.state import (
44
+ WidgetCallback,
45
+ register_widget,
46
+ )
23
47
 
24
48
  if TYPE_CHECKING:
25
49
  from pydeck import Deck
@@ -32,16 +56,146 @@ EMPTY_MAP: Final[Mapping[str, Any]] = {
32
56
  "initialViewState": {"latitude": 0, "longitude": 0, "pitch": 0, "zoom": 1},
33
57
  }
34
58
 
59
+ SelectionMode: TypeAlias = Literal["single-object", "multi-object"]
60
+ _SELECTION_MODES: Final[set[SelectionMode]] = {
61
+ "single-object",
62
+ "multi-object",
63
+ }
64
+
65
+
66
+ def parse_selection_mode(
67
+ selection_mode: SelectionMode | Iterable[SelectionMode],
68
+ ) -> set[PydeckProto.SelectionMode.ValueType]:
69
+ """Parse and check the user provided selection modes."""
70
+ if isinstance(selection_mode, str):
71
+ # Only a single selection mode was passed
72
+ selection_mode_set = {selection_mode}
73
+ else:
74
+ # Multiple selection modes were passed.
75
+ # This is not yet supported as a functionality, but the infra is here to
76
+ # support it in the future!
77
+ # @see DeckGlJsonChart.tsx
78
+ raise StreamlitAPIException(
79
+ f"Invalid selection mode: {selection_mode}. ",
80
+ "Selection mode must be a single value, but got a set instead.",
81
+ )
82
+
83
+ if not selection_mode_set.issubset(_SELECTION_MODES):
84
+ raise StreamlitAPIException(
85
+ f"Invalid selection mode: {selection_mode}. "
86
+ f"Valid options are: {_SELECTION_MODES}"
87
+ )
88
+
89
+ if selection_mode_set.issuperset({"single-object", "multi-object"}):
90
+ raise StreamlitAPIException(
91
+ "Only one of `single-object` or `multi-object` can be selected as selection mode."
92
+ )
93
+
94
+ parsed_selection_modes = []
95
+ for selection_mode in selection_mode_set:
96
+ if selection_mode == "single-object":
97
+ parsed_selection_modes.append(PydeckProto.SelectionMode.SINGLE_OBJECT)
98
+ elif selection_mode == "multi-object":
99
+ parsed_selection_modes.append(PydeckProto.SelectionMode.MULTI_OBJECT)
100
+ return set(parsed_selection_modes)
101
+
102
+
103
+ class LayerSelectionState(TypedDict, total=False):
104
+ """
105
+ The schema for the PyDeck Layer Selection State
106
+
107
+ Attributes
108
+ ----------
109
+ indices : dict[str, list[int]]
110
+ Dictionary where keys are the layer id and values are lists of indices
111
+ of selected objects.
112
+ objects : dict[str, list[dict[str, Any]]]
113
+ Dictionary where keys are the layer id and values are lists of metadata
114
+ objects for the selected items.
115
+ """
116
+
117
+ indices: dict[str, list[int]]
118
+ objects: dict[str, list[dict[str, Any]]]
119
+
120
+
121
+ class PydeckState(TypedDict, total=False):
122
+ """
123
+ The schema for the PyDeck State
124
+
125
+ Attributes
126
+ ----------
127
+ selection : LayerSelectionState
128
+ The selection state of the PyDeck layers.
129
+ """
130
+
131
+ selection: LayerSelectionState
132
+
133
+
134
+ @dataclass
135
+ class PydeckSelectionSerde:
136
+ """PydeckSelectionSerde is used to serialize and deserialize the Pydeck selection state."""
137
+
138
+ def deserialize(self, ui_value: str | None, widget_id: str = "") -> PydeckState:
139
+ empty_selection_state: PydeckState = {
140
+ "selection": {
141
+ "indices": {},
142
+ "objects": {},
143
+ }
144
+ }
145
+
146
+ selection_state = (
147
+ empty_selection_state if ui_value is None else json.loads(ui_value)
148
+ )
149
+
150
+ # We have seen some situations where the ui_value was just an empty
151
+ # dict, so we want to ensure that it always returns the empty state in
152
+ # case this happens.
153
+ if "selection" not in selection_state:
154
+ selection_state = empty_selection_state
155
+
156
+ return cast(PydeckState, AttributeDictionary(selection_state))
157
+
158
+ def serialize(self, selection_state: PydeckState) -> str:
159
+ return json.dumps(selection_state, default=str)
160
+
35
161
 
36
162
  class PydeckMixin:
163
+ @overload
164
+ def pydeck_chart(
165
+ self,
166
+ pydeck_obj: Deck | None = None,
167
+ *,
168
+ use_container_width: bool = False,
169
+ selection_mode: Literal[
170
+ "single-object"
171
+ ], # Selection mode will only be activated by on_select param, this is a default value here to make it work with mypy
172
+ on_select: Literal["ignore"], # No default value here to make it work with mypy
173
+ key: Key | None = None,
174
+ ) -> DeltaGenerator: ...
175
+
176
+ @overload
177
+ def pydeck_chart(
178
+ self,
179
+ pydeck_obj: Deck | None = None,
180
+ *,
181
+ use_container_width: bool = False,
182
+ selection_mode: SelectionMode = "single-object",
183
+ on_select: Literal["rerun"] | WidgetCallback = "rerun",
184
+ key: Key | None = None,
185
+ ) -> PydeckState: ...
186
+
37
187
  @gather_metrics("pydeck_chart")
38
188
  def pydeck_chart(
39
189
  self,
40
190
  pydeck_obj: Deck | None = None,
191
+ *,
41
192
  use_container_width: bool = False,
42
193
  width: int | None = None,
43
194
  height: int | None = None,
44
- ) -> DeltaGenerator:
195
+ selection_mode: SelectionMode = "single-object",
196
+ on_select: Literal["rerun", "ignore"] | WidgetCallback = "ignore",
197
+ key: Key | None = None,
198
+ ) -> DeltaGenerator | PydeckState:
45
199
  """Draw a chart using the PyDeck library.
46
200
 
47
201
  This supports 3D maps, point clouds, and more! More info about PyDeck
@@ -92,6 +246,37 @@ class PydeckMixin:
92
246
  Desired height of the chart expressed in pixels. If ``height`` is
93
247
  ``None`` (default), Streamlit sets the height of the chart to fit
94
248
  its contents according to the plotting library.
249
+ on_select : "ignore" or "rerun" or callable
250
+ How the chart should respond to user selection events. This controls
251
+ whether or not the dataframe behaves like an input widget.
252
+ ``on_select`` can be one of the following:
253
+
254
+ - ``"ignore"`` (default): Streamlit will not react to any selection
255
+ events in the dataframe. The dataframe will not behave like an
256
+ input widget.
257
+ - ``"rerun"``: Rerun the script when a selection is made.
258
+ - callable: A Python callable that will be called when a selection
259
+ is made. The callable will be passed the selection state as a
260
+ dictionary.
261
+
262
+ If ``on_select`` is not ``"ignore"``, ensure that the layers given
263
+ to the ``pydeck_obj`` have stable IDs so that selection state can be
264
+ maintained across reruns.
265
+ selection_mode : "single-object" or "multi-object"
266
+ The types of selections Streamlit should allow. This can be one of
267
+ the following:
268
+
269
+ - ``"single-object"`` (default): Only one object can be selected at
270
+ a time.
271
+ - ``"multi-object"``: Multiple objects can be selected at a time.
272
+ key : str
273
+ An optional string to use for giving this element a stable
274
+ identity. If ``key`` is ``None`` (default), this element's identity
275
+ will be determined based on the values of the other parameters.
276
+
277
+ Additionally, if selections are activated and ``key`` is provided,
278
+ Streamlit will register the key in Session State to store the
279
+ selection state. The selection state is read-only.
95
280
 
96
281
  Example
97
282
  -------
@@ -149,9 +334,79 @@ class PydeckMixin:
149
334
 
150
335
  """
151
336
  pydeck_proto = PydeckProto()
152
- marshall(
153
- pydeck_proto, pydeck_obj, use_container_width, width=width, height=height
154
- )
337
+
338
+ ctx = get_script_run_ctx()
339
+
340
+ if pydeck_obj is None:
341
+ spec = json.dumps(EMPTY_MAP)
342
+ else:
343
+ spec = pydeck_obj.to_json()
344
+
345
+ pydeck_proto.json = spec
346
+ pydeck_proto.use_container_width = use_container_width
347
+
348
+ if width:
349
+ pydeck_proto.width = width
350
+ if height:
351
+ pydeck_proto.height = height
352
+
353
+ tooltip = _get_pydeck_tooltip(pydeck_obj)
354
+ if tooltip:
355
+ pydeck_proto.tooltip = json.dumps(tooltip)
356
+
357
+ mapbox_token = config.get_option("mapbox.token")
358
+ if mapbox_token:
359
+ pydeck_proto.mapbox_token = mapbox_token
360
+
361
+ key = to_key(key)
362
+ is_selection_activated = on_select != "ignore"
363
+
364
+ if on_select not in ["ignore", "rerun"] and not callable(on_select):
365
+ raise StreamlitAPIException(
366
+ f"You have passed {on_select} to `on_select`. But only 'ignore', 'rerun', or a callable is supported."
367
+ )
368
+
369
+ if is_selection_activated:
370
+ # Selections are activated, treat Pydeck as a widget:
371
+ pydeck_proto.selection_mode.extend(parse_selection_mode(selection_mode))
372
+
373
+ # Run some checks that are only relevant when selections are activated
374
+ is_callback = callable(on_select)
375
+ check_widget_policies(
376
+ self.dg,
377
+ key,
378
+ on_change=cast(WidgetCallback, on_select) if is_callback else None,
379
+ default_value=None,
380
+ writes_allowed=False,
381
+ enable_check_callback_rules=is_callback,
382
+ )
383
+ pydeck_proto.form_id = current_form_id(self.dg)
384
+
385
+ pydeck_proto.id = compute_and_register_element_id(
386
+ "deck_gl_json_chart",
387
+ user_key=key,
388
+ is_selection_activated=is_selection_activated,
389
+ selection_mode=selection_mode,
390
+ use_container_width=use_container_width,
391
+ spec=spec,
392
+ form_id=pydeck_proto.form_id,
393
+ )
394
+
395
+ serde = PydeckSelectionSerde()
396
+
397
+ widget_state = register_widget(
398
+ "deck_gl_json_chart",
399
+ pydeck_proto,
400
+ ctx=ctx,
401
+ deserializer=serde.deserialize,
402
+ on_change_handler=on_select if callable(on_select) else None,
403
+ serializer=serde.serialize,
404
+ )
405
+
406
+ self.dg._enqueue("deck_gl_json_chart", pydeck_proto)
407
+
408
+ return cast(PydeckState, widget_state.value)
409
+
155
410
  return self.dg._enqueue("deck_gl_json_chart", pydeck_proto)
156
411
 
157
412
  @property
@@ -176,34 +431,3 @@ def _get_pydeck_tooltip(pydeck_obj: Deck | None) -> dict[str, str] | None:
176
431
  return cast(Dict[str, str], tooltip)
177
432
 
178
433
  return None
179
-
180
-
181
- def marshall(
182
- pydeck_proto: PydeckProto,
183
- pydeck_obj: Deck | None,
184
- use_container_width: bool,
185
- width: int | None = None,
186
- height: int | None = None,
187
- ) -> None:
188
- if pydeck_obj is None:
189
- spec = json.dumps(EMPTY_MAP)
190
- else:
191
- spec = pydeck_obj.to_json()
192
-
193
- pydeck_proto.json = spec
194
- pydeck_proto.use_container_width = use_container_width
195
-
196
- if width:
197
- pydeck_proto.width = width
198
- if height:
199
- pydeck_proto.height = height
200
-
201
- pydeck_proto.id = ""
202
-
203
- tooltip = _get_pydeck_tooltip(pydeck_obj)
204
- if tooltip:
205
- pydeck_proto.tooltip = json.dumps(tooltip)
206
-
207
- mapbox_token = config.get_option("mapbox.token")
208
- if mapbox_token:
209
- pydeck_proto.mapbox_token = mapbox_token
@@ -389,7 +389,7 @@ class ButtonGroupMixin:
389
389
  return sentiment.value
390
390
 
391
391
  @gather_metrics("pills")
392
- def pills(
392
+ def _pills(
393
393
  self,
394
394
  label: str,
395
395
  options: OptionSequence[V],
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%streamlit/proto/DeckGlJsonChart.proto\"\x8e\x01\n\x0f\x44\x65\x63kGlJsonChart\x12\x0c\n\x04json\x18\x01 \x01(\t\x12\x0f\n\x07tooltip\x18\x02 \x01(\t\x12\x1b\n\x13use_container_width\x18\x04 \x01(\x08\x12\n\n\x02id\x18\x05 \x01(\t\x12\x14\n\x0cmapbox_token\x18\x06 \x01(\t\x12\r\n\x05width\x18\x07 \x01(\r\x12\x0e\n\x06height\x18\x08 \x01(\rB4\n\x1c\x63om.snowflake.apps.streamlitB\x14\x44\x65\x63kGlJsonChartProtob\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n%streamlit/proto/DeckGlJsonChart.proto\"\x8d\x02\n\x0f\x44\x65\x63kGlJsonChart\x12\x0c\n\x04json\x18\x01 \x01(\t\x12\x0f\n\x07tooltip\x18\x02 \x01(\t\x12\x1b\n\x13use_container_width\x18\x04 \x01(\x08\x12\n\n\x02id\x18\x05 \x01(\t\x12\x14\n\x0cmapbox_token\x18\x06 \x01(\t\x12\r\n\x05width\x18\x07 \x01(\r\x12\x0e\n\x06height\x18\x08 \x01(\r\x12\x36\n\x0eselection_mode\x18\t \x03(\x0e\x32\x1e.DeckGlJsonChart.SelectionMode\x12\x0f\n\x07\x66orm_id\x18\n \x01(\t\"4\n\rSelectionMode\x12\x11\n\rSINGLE_OBJECT\x10\x00\x12\x10\n\x0cMULTI_OBJECT\x10\x01\x42\x34\n\x1c\x63om.snowflake.apps.streamlitB\x14\x44\x65\x63kGlJsonChartProtob\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -23,5 +23,7 @@ if not _descriptor._USE_C_DESCRIPTORS:
23
23
  _globals['DESCRIPTOR']._loaded_options = None
24
24
  _globals['DESCRIPTOR']._serialized_options = b'\n\034com.snowflake.apps.streamlitB\024DeckGlJsonChartProto'
25
25
  _globals['_DECKGLJSONCHART']._serialized_start=42
26
- _globals['_DECKGLJSONCHART']._serialized_end=184
26
+ _globals['_DECKGLJSONCHART']._serialized_end=311
27
+ _globals['_DECKGLJSONCHART_SELECTIONMODE']._serialized_start=259
28
+ _globals['_DECKGLJSONCHART_SELECTIONMODE']._serialized_end=311
27
29
  # @@protoc_insertion_point(module_scope)
@@ -18,16 +18,44 @@ limitations under the License.
18
18
  """
19
19
 
20
20
  import builtins
21
+ import collections.abc
21
22
  import google.protobuf.descriptor
23
+ import google.protobuf.internal.containers
24
+ import google.protobuf.internal.enum_type_wrapper
22
25
  import google.protobuf.message
26
+ import sys
23
27
  import typing
24
28
 
29
+ if sys.version_info >= (3, 10):
30
+ import typing as typing_extensions
31
+ else:
32
+ import typing_extensions
33
+
25
34
  DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
26
35
 
27
36
  @typing.final
28
37
  class DeckGlJsonChart(google.protobuf.message.Message):
29
38
  DESCRIPTOR: google.protobuf.descriptor.Descriptor
30
39
 
40
+ class _SelectionMode:
41
+ ValueType = typing.NewType("ValueType", builtins.int)
42
+ V: typing_extensions.TypeAlias = ValueType
43
+
44
+ class _SelectionModeEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[DeckGlJsonChart._SelectionMode.ValueType], builtins.type):
45
+ DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
46
+ SINGLE_OBJECT: DeckGlJsonChart._SelectionMode.ValueType # 0
47
+ """Only one object can be selected at a time."""
48
+ MULTI_OBJECT: DeckGlJsonChart._SelectionMode.ValueType # 1
49
+ """Multiple objects can be selected at a time."""
50
+
51
+ class SelectionMode(_SelectionMode, metaclass=_SelectionModeEnumTypeWrapper):
52
+ """Available selection modes:"""
53
+
54
+ SINGLE_OBJECT: DeckGlJsonChart.SelectionMode.ValueType # 0
55
+ """Only one object can be selected at a time."""
56
+ MULTI_OBJECT: DeckGlJsonChart.SelectionMode.ValueType # 1
57
+ """Multiple objects can be selected at a time."""
58
+
31
59
  JSON_FIELD_NUMBER: builtins.int
32
60
  TOOLTIP_FIELD_NUMBER: builtins.int
33
61
  USE_CONTAINER_WIDTH_FIELD_NUMBER: builtins.int
@@ -35,19 +63,27 @@ class DeckGlJsonChart(google.protobuf.message.Message):
35
63
  MAPBOX_TOKEN_FIELD_NUMBER: builtins.int
36
64
  WIDTH_FIELD_NUMBER: builtins.int
37
65
  HEIGHT_FIELD_NUMBER: builtins.int
66
+ SELECTION_MODE_FIELD_NUMBER: builtins.int
67
+ FORM_ID_FIELD_NUMBER: builtins.int
38
68
  json: builtins.str
39
69
  """The json of the pydeck object (https://deckgl.readthedocs.io/en/latest/deck.html)"""
40
70
  tooltip: builtins.str
41
71
  use_container_width: builtins.bool
42
72
  """If True, will overwrite the chart width spec to fit to container."""
43
73
  id: builtins.str
44
- """ID"""
74
+ """ID, required for selection events."""
45
75
  mapbox_token: builtins.str
46
76
  """The user-configured Mapbox token. If empty, the token id fetched from https://data.streamlit.io/tokens.json"""
47
77
  width: builtins.int
48
78
  """Width in pixels"""
49
79
  height: builtins.int
50
80
  """Height in pixels"""
81
+ form_id: builtins.str
82
+ """The form ID of the widget, this is required if the chart has selection events"""
83
+ @property
84
+ def selection_mode(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[global___DeckGlJsonChart.SelectionMode.ValueType]:
85
+ """If non-empty, treat this instance as a Widget"""
86
+
51
87
  def __init__(
52
88
  self,
53
89
  *,
@@ -58,7 +94,9 @@ class DeckGlJsonChart(google.protobuf.message.Message):
58
94
  mapbox_token: builtins.str = ...,
59
95
  width: builtins.int = ...,
60
96
  height: builtins.int = ...,
97
+ selection_mode: collections.abc.Iterable[global___DeckGlJsonChart.SelectionMode.ValueType] | None = ...,
98
+ form_id: builtins.str = ...,
61
99
  ) -> None: ...
62
- def ClearField(self, field_name: typing.Literal["height", b"height", "id", b"id", "json", b"json", "mapbox_token", b"mapbox_token", "tooltip", b"tooltip", "use_container_width", b"use_container_width", "width", b"width"]) -> None: ...
100
+ def ClearField(self, field_name: typing.Literal["form_id", b"form_id", "height", b"height", "id", b"id", "json", b"json", "mapbox_token", b"mapbox_token", "selection_mode", b"selection_mode", "tooltip", b"tooltip", "use_container_width", b"use_container_width", "width", b"width"]) -> None: ...
63
101
 
64
102
  global___DeckGlJsonChart = DeckGlJsonChart
@@ -47,6 +47,7 @@ from streamlit.proto.Checkbox_pb2 import Checkbox
47
47
  from streamlit.proto.ColorPicker_pb2 import ColorPicker
48
48
  from streamlit.proto.Components_pb2 import ComponentInstance
49
49
  from streamlit.proto.DateInput_pb2 import DateInput
50
+ from streamlit.proto.DeckGlJsonChart_pb2 import DeckGlJsonChart
50
51
  from streamlit.proto.DownloadButton_pb2 import DownloadButton
51
52
  from streamlit.proto.FileUploader_pb2 import FileUploader
52
53
  from streamlit.proto.MultiSelect_pb2 import MultiSelect
@@ -71,6 +72,7 @@ WidgetProto: TypeAlias = Union[
71
72
  ColorPicker,
72
73
  ComponentInstance,
73
74
  DateInput,
75
+ DeckGlJsonChart,
74
76
  DownloadButton,
75
77
  FileUploader,
76
78
  MultiSelect,
@@ -51,13 +51,14 @@ ELEMENT_TYPE_TO_VALUE_TYPE: Final[Mapping[ElementType, ValueFieldName]] = (
51
51
  "button": "trigger_value",
52
52
  "button_group": "int_array_value",
53
53
  "camera_input": "file_uploader_state_value",
54
- "checkbox": "bool_value",
55
54
  "chat_input": "string_trigger_value",
55
+ "checkbox": "bool_value",
56
56
  "color_picker": "string_value",
57
57
  "component_instance": "json_value",
58
58
  "data_editor": "string_value",
59
59
  "dataframe": "string_value",
60
60
  "date_input": "string_array_value",
61
+ "deck_gl_json_chart": "string_value",
61
62
  "download_button": "trigger_value",
62
63
  "file_uploader": "file_uploader_state_value",
63
64
  "multiselect": "int_array_value",
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "./static/css/main.5513bd04.css",
4
- "main.js": "./static/js/main.829dd23b.js",
4
+ "main.js": "./static/js/main.133ce9b9.js",
5
5
  "static/js/6679.265ca09c.chunk.js": "./static/js/6679.265ca09c.chunk.js",
6
6
  "static/js/9464.7e9a3c0a.chunk.js": "./static/js/9464.7e9a3c0a.chunk.js",
7
7
  "static/js/9077.e0a8db2a.chunk.js": "./static/js/9077.e0a8db2a.chunk.js",
8
8
  "static/js/3391.663b9d47.chunk.js": "./static/js/3391.663b9d47.chunk.js",
9
9
  "static/css/9943.93909c7e.chunk.css": "./static/css/9943.93909c7e.chunk.css",
10
- "static/js/9943.d18fdff1.chunk.js": "./static/js/9943.d18fdff1.chunk.js",
10
+ "static/js/9943.2d62e2c4.chunk.js": "./static/js/9943.2d62e2c4.chunk.js",
11
11
  "static/css/5711.c24b25fa.chunk.css": "./static/css/5711.c24b25fa.chunk.css",
12
12
  "static/js/5711.229cb7d0.chunk.js": "./static/js/5711.229cb7d0.chunk.js",
13
13
  "static/js/3861.0dedcd19.chunk.js": "./static/js/3861.0dedcd19.chunk.js",
14
- "static/js/8642.dfef7dcb.chunk.js": "./static/js/8642.dfef7dcb.chunk.js",
15
- "static/js/8485.81bdf474.chunk.js": "./static/js/8485.81bdf474.chunk.js",
14
+ "static/js/8642.58110d15.chunk.js": "./static/js/8642.58110d15.chunk.js",
15
+ "static/js/3710.a5101ccc.chunk.js": "./static/js/3710.a5101ccc.chunk.js",
16
16
  "static/js/8148.f51df66c.chunk.js": "./static/js/8148.f51df66c.chunk.js",
17
17
  "static/js/84.414fa87b.chunk.js": "./static/js/84.414fa87b.chunk.js",
18
18
  "static/js/9923.7061d124.chunk.js": "./static/js/9923.7061d124.chunk.js",
@@ -21,18 +21,18 @@
21
21
  "static/js/8237.210a5ac4.chunk.js": "./static/js/8237.210a5ac4.chunk.js",
22
22
  "static/js/5828.f8572ba4.chunk.js": "./static/js/5828.f8572ba4.chunk.js",
23
23
  "static/js/9060.1ec8dc2b.chunk.js": "./static/js/9060.1ec8dc2b.chunk.js",
24
- "static/js/5625.fe6c22ad.chunk.js": "./static/js/5625.fe6c22ad.chunk.js",
24
+ "static/js/5625.d9509933.chunk.js": "./static/js/5625.d9509933.chunk.js",
25
25
  "static/js/6141.43a8fda3.chunk.js": "./static/js/6141.43a8fda3.chunk.js",
26
26
  "static/js/4103.d863052a.chunk.js": "./static/js/4103.d863052a.chunk.js",
27
27
  "static/js/1086.464de8f9.chunk.js": "./static/js/1086.464de8f9.chunk.js",
28
- "static/js/245.68a062da.chunk.js": "./static/js/245.68a062da.chunk.js",
28
+ "static/js/245.f99079b1.chunk.js": "./static/js/245.f99079b1.chunk.js",
29
29
  "static/js/7193.2594a18c.chunk.js": "./static/js/7193.2594a18c.chunk.js",
30
30
  "static/js/6360.6d7cfa35.chunk.js": "./static/js/6360.6d7cfa35.chunk.js",
31
31
  "static/js/8790.0b98f286.chunk.js": "./static/js/8790.0b98f286.chunk.js",
32
- "static/js/8815.0284d089.chunk.js": "./static/js/8815.0284d089.chunk.js",
32
+ "static/js/8815.9d336691.chunk.js": "./static/js/8815.9d336691.chunk.js",
33
33
  "static/js/9528.746f7a0e.chunk.js": "./static/js/9528.746f7a0e.chunk.js",
34
34
  "static/js/7809.063e3004.chunk.js": "./static/js/7809.063e3004.chunk.js",
35
- "static/js/6088.c137d543.chunk.js": "./static/js/6088.c137d543.chunk.js",
35
+ "static/js/6088.1164e19b.chunk.js": "./static/js/6088.1164e19b.chunk.js",
36
36
  "static/js/8166.11abccb8.chunk.js": "./static/js/8166.11abccb8.chunk.js",
37
37
  "static/js/9114.1ee3d4dd.chunk.js": "./static/js/9114.1ee3d4dd.chunk.js",
38
38
  "static/js/5180.e826dd46.chunk.js": "./static/js/5180.e826dd46.chunk.js",
@@ -51,8 +51,8 @@
51
51
  "static/js/766.e3700e32.chunk.js": "./static/js/766.e3700e32.chunk.js",
52
52
  "static/js/783.788bb3ab.chunk.js": "./static/js/783.788bb3ab.chunk.js",
53
53
  "static/js/5544.2769497c.chunk.js": "./static/js/5544.2769497c.chunk.js",
54
- "static/css/6789.81b3d18f.chunk.css": "./static/css/6789.81b3d18f.chunk.css",
55
- "static/js/6789.f8dde736.chunk.js": "./static/js/6789.f8dde736.chunk.js",
54
+ "static/css/195.81b3d18f.chunk.css": "./static/css/195.81b3d18f.chunk.css",
55
+ "static/js/195.8e0d331c.chunk.js": "./static/js/195.8e0d331c.chunk.js",
56
56
  "static/js/7612.39e7938b.chunk.js": "./static/js/7612.39e7938b.chunk.js",
57
57
  "static/js/3389.71902a75.chunk.js": "./static/js/3389.71902a75.chunk.js",
58
58
  "static/js/4297.3afbdd03.chunk.js": "./static/js/4297.3afbdd03.chunk.js",
@@ -63,7 +63,7 @@
63
63
  "static/js/6198.956025ac.chunk.js": "./static/js/6198.956025ac.chunk.js",
64
64
  "static/js/1674.86aea8e0.chunk.js": "./static/js/1674.86aea8e0.chunk.js",
65
65
  "static/js/7591.b3928443.chunk.js": "./static/js/7591.b3928443.chunk.js",
66
- "static/js/2055.bca43613.chunk.js": "./static/js/2055.bca43613.chunk.js",
66
+ "static/js/238.f9bc20d9.chunk.js": "./static/js/238.f9bc20d9.chunk.js",
67
67
  "static/media/MaterialSymbols-Rounded.woff2": "./static/media/MaterialSymbols-Rounded.ec07649f7a20048d5730.woff2",
68
68
  "static/media/fireworks.gif": "./static/media/fireworks.0906f02ea43f1018a6d2.gif",
69
69
  "static/media/flake-2.png": "./static/media/flake-2.e3f07d06933dd0e84c24.png",
@@ -154,6 +154,6 @@
154
154
  },
155
155
  "entrypoints": [
156
156
  "static/css/main.5513bd04.css",
157
- "static/js/main.829dd23b.js"
157
+ "static/js/main.133ce9b9.js"
158
158
  ]
159
159
  }
@@ -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.829dd23b.js"></script><link href="./static/css/main.5513bd04.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.133ce9b9.js"></script><link href="./static/css/main.5513bd04.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div></body></html>