streamlit-nightly 1.38.1.dev20240923__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.
- streamlit/__init__.py +0 -1
- streamlit/elements/deck_gl_json_chart.py +260 -36
- streamlit/elements/widgets/button_group.py +1 -1
- streamlit/proto/DeckGlJsonChart_pb2.py +4 -2
- streamlit/proto/DeckGlJsonChart_pb2.pyi +40 -2
- streamlit/runtime/state/common.py +2 -0
- streamlit/runtime/state/widgets.py +2 -1
- streamlit/static/asset-manifest.json +12 -12
- streamlit/static/index.html +1 -1
- streamlit/static/static/js/195.8e0d331c.chunk.js +2 -0
- streamlit/static/static/js/238.f9bc20d9.chunk.js +1 -0
- streamlit/static/static/js/245.f99079b1.chunk.js +1 -0
- streamlit/static/static/js/3710.a5101ccc.chunk.js +1 -0
- streamlit/static/static/js/{5625.fe6c22ad.chunk.js → 5625.d9509933.chunk.js} +1 -1
- streamlit/static/static/js/{6088.c137d543.chunk.js → 6088.1164e19b.chunk.js} +1 -1
- streamlit/static/static/js/8642.58110d15.chunk.js +2 -0
- streamlit/static/static/js/{8815.0284d089.chunk.js → 8815.9d336691.chunk.js} +1 -1
- streamlit/static/static/js/{9943.d18fdff1.chunk.js → 9943.2d62e2c4.chunk.js} +1 -1
- streamlit/static/static/js/{main.829dd23b.js → main.133ce9b9.js} +4 -4
- {streamlit_nightly-1.38.1.dev20240923.dist-info → streamlit_nightly-1.38.1.dev20240924.dist-info}/METADATA +1 -1
- {streamlit_nightly-1.38.1.dev20240923.dist-info → streamlit_nightly-1.38.1.dev20240924.dist-info}/RECORD +29 -29
- streamlit/static/static/js/2055.bca43613.chunk.js +0 -1
- streamlit/static/static/js/245.68a062da.chunk.js +0 -1
- streamlit/static/static/js/6789.f8dde736.chunk.js +0 -2
- streamlit/static/static/js/8485.81bdf474.chunk.js +0 -1
- streamlit/static/static/js/8642.dfef7dcb.chunk.js +0 -2
- /streamlit/static/static/css/{6789.81b3d18f.chunk.css → 195.81b3d18f.chunk.css} +0 -0
- /streamlit/static/static/js/{6789.f8dde736.chunk.js.LICENSE.txt → 195.8e0d331c.chunk.js.LICENSE.txt} +0 -0
- /streamlit/static/static/js/{8642.dfef7dcb.chunk.js.LICENSE.txt → 8642.58110d15.chunk.js.LICENSE.txt} +0 -0
- /streamlit/static/static/js/{main.829dd23b.js.LICENSE.txt → main.133ce9b9.js.LICENSE.txt} +0 -0
- {streamlit_nightly-1.38.1.dev20240923.data → streamlit_nightly-1.38.1.dev20240924.data}/scripts/streamlit.cmd +0 -0
- {streamlit_nightly-1.38.1.dev20240923.dist-info → streamlit_nightly-1.38.1.dev20240924.dist-info}/WHEEL +0 -0
- {streamlit_nightly-1.38.1.dev20240923.dist-info → streamlit_nightly-1.38.1.dev20240924.dist-info}/entry_points.txt +0 -0
- {streamlit_nightly-1.38.1.dev20240923.dist-info → streamlit_nightly-1.38.1.dev20240924.dist-info}/top_level.txt +0 -0
streamlit/__init__.py
CHANGED
@@ -15,11 +15,35 @@
|
|
15
15
|
from __future__ import annotations
|
16
16
|
|
17
17
|
import json
|
18
|
-
from
|
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
|
-
|
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
|
-
|
153
|
-
|
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
|
@@ -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\"\
|
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=
|
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.
|
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.
|
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.
|
15
|
-
"static/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.
|
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.
|
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.
|
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.
|
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/
|
55
|
-
"static/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/
|
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.
|
157
|
+
"static/js/main.133ce9b9.js"
|
158
158
|
]
|
159
159
|
}
|
streamlit/static/index.html
CHANGED
@@ -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.
|
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>
|