streamlit-nightly 1.38.1.dev20240830__py2.py3-none-any.whl → 1.38.1.dev20240901__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 (47) hide show
  1. streamlit/components/v1/component_registry.py +1 -1
  2. streamlit/components/v1/custom_component.py +3 -3
  3. streamlit/elements/arrow.py +2 -2
  4. streamlit/elements/iframe.py +2 -2
  5. streamlit/elements/layouts.py +20 -0
  6. streamlit/elements/media.py +3 -6
  7. streamlit/elements/plotly_chart.py +2 -2
  8. streamlit/elements/vega_charts.py +2 -2
  9. streamlit/elements/widgets/button.py +6 -6
  10. streamlit/elements/widgets/button_group.py +4 -4
  11. streamlit/elements/widgets/camera_input.py +3 -3
  12. streamlit/elements/widgets/chat.py +4 -4
  13. streamlit/elements/widgets/checkbox.py +3 -3
  14. streamlit/elements/widgets/color_picker.py +3 -3
  15. streamlit/elements/widgets/data_editor.py +8 -6
  16. streamlit/elements/widgets/file_uploader.py +3 -3
  17. streamlit/elements/widgets/multiselect.py +4 -4
  18. streamlit/elements/widgets/number_input.py +3 -3
  19. streamlit/elements/widgets/radio.py +4 -4
  20. streamlit/elements/widgets/select_slider.py +4 -4
  21. streamlit/elements/widgets/selectbox.py +4 -4
  22. streamlit/elements/widgets/slider.py +3 -3
  23. streamlit/elements/widgets/text_widgets.py +5 -5
  24. streamlit/elements/widgets/time_widgets.py +5 -5
  25. streamlit/proto/Block_pb2.py +7 -7
  26. streamlit/proto/Block_pb2.pyi +4 -1
  27. streamlit/runtime/state/common.py +24 -23
  28. streamlit/runtime/state/session_state.py +5 -5
  29. streamlit/runtime/state/widgets.py +2 -2
  30. streamlit/static/asset-manifest.json +5 -5
  31. streamlit/static/index.html +1 -1
  32. streamlit/static/static/js/583.61ac7fde.chunk.js +1 -0
  33. streamlit/static/static/js/6141.43a8fda3.chunk.js +1 -0
  34. streamlit/static/static/js/9060.1ec8dc2b.chunk.js +1 -0
  35. streamlit/static/static/js/main.f0eff620.js +28 -0
  36. streamlit/testing/v1/element_tree.py +2 -2
  37. {streamlit_nightly-1.38.1.dev20240830.dist-info → streamlit_nightly-1.38.1.dev20240901.dist-info}/METADATA +2 -2
  38. {streamlit_nightly-1.38.1.dev20240830.dist-info → streamlit_nightly-1.38.1.dev20240901.dist-info}/RECORD +43 -43
  39. streamlit/static/static/js/583.0933ee10.chunk.js +0 -1
  40. streamlit/static/static/js/6141.3a6bc340.chunk.js +0 -1
  41. streamlit/static/static/js/9060.d2bc110a.chunk.js +0 -1
  42. streamlit/static/static/js/main.f42f34e1.js +0 -28
  43. /streamlit/static/static/js/{main.f42f34e1.js.LICENSE.txt → main.f0eff620.js.LICENSE.txt} +0 -0
  44. {streamlit_nightly-1.38.1.dev20240830.data → streamlit_nightly-1.38.1.dev20240901.data}/scripts/streamlit.cmd +0 -0
  45. {streamlit_nightly-1.38.1.dev20240830.dist-info → streamlit_nightly-1.38.1.dev20240901.dist-info}/WHEEL +0 -0
  46. {streamlit_nightly-1.38.1.dev20240830.dist-info → streamlit_nightly-1.38.1.dev20240901.dist-info}/entry_points.txt +0 -0
  47. {streamlit_nightly-1.38.1.dev20240830.dist-info → streamlit_nightly-1.38.1.dev20240901.dist-info}/top_level.txt +0 -0
@@ -41,7 +41,7 @@ from streamlit.runtime.state import (
41
41
  get_session_state,
42
42
  register_widget,
43
43
  )
44
- from streamlit.runtime.state.common import compute_widget_id
44
+ from streamlit.runtime.state.common import compute_element_id
45
45
  from streamlit.type_util import (
46
46
  SupportsStr,
47
47
  )
@@ -275,7 +275,7 @@ class TextWidgetsMixin:
275
275
  # Make sure value is always string or None:
276
276
  value = str(value) if value is not None else None
277
277
 
278
- id = compute_widget_id(
278
+ element_id = compute_element_id(
279
279
  "text_input",
280
280
  user_key=key,
281
281
  label=label,
@@ -295,7 +295,7 @@ class TextWidgetsMixin:
295
295
  value = None
296
296
 
297
297
  text_input_proto = TextInputProto()
298
- text_input_proto.id = id
298
+ text_input_proto.id = element_id
299
299
  text_input_proto.label = label
300
300
  if value is not None:
301
301
  text_input_proto.default = value
@@ -548,7 +548,7 @@ class TextWidgetsMixin:
548
548
 
549
549
  value = str(value) if value is not None else None
550
550
 
551
- id = compute_widget_id(
551
+ element_id = compute_element_id(
552
552
  "text_area",
553
553
  user_key=key,
554
554
  label=label,
@@ -567,7 +567,7 @@ class TextWidgetsMixin:
567
567
  value = None
568
568
 
569
569
  text_area_proto = TextAreaProto()
570
- text_area_proto.id = id
570
+ text_area_proto.id = element_id
571
571
  text_area_proto.label = label
572
572
  if value is not None:
573
573
  text_area_proto.default = value
@@ -55,7 +55,7 @@ from streamlit.runtime.state import (
55
55
  get_session_state,
56
56
  register_widget,
57
57
  )
58
- from streamlit.runtime.state.common import compute_widget_id
58
+ from streamlit.runtime.state.common import compute_element_id
59
59
  from streamlit.time_util import adjust_years
60
60
 
61
61
  if TYPE_CHECKING:
@@ -454,7 +454,7 @@ class TimeWidgetsMixin:
454
454
  "The type of value should be one of datetime, time or None"
455
455
  )
456
456
 
457
- id = compute_widget_id(
457
+ element_id = compute_element_id(
458
458
  "time_input",
459
459
  user_key=key,
460
460
  label=label,
@@ -472,7 +472,7 @@ class TimeWidgetsMixin:
472
472
  parsed_time = None
473
473
 
474
474
  time_input_proto = TimeInputProto()
475
- time_input_proto.id = id
475
+ time_input_proto.id = element_id
476
476
  time_input_proto.label = label
477
477
  if parsed_time is not None:
478
478
  time_input_proto.default = time.strftime(parsed_time, "%H:%M")
@@ -730,7 +730,7 @@ class TimeWidgetsMixin:
730
730
 
731
731
  # TODO this is missing the error path, integrate with the dateinputvalues parsing
732
732
 
733
- id = compute_widget_id(
733
+ element_id = compute_element_id(
734
734
  "date_input",
735
735
  user_key=key,
736
736
  label=label,
@@ -775,7 +775,7 @@ class TimeWidgetsMixin:
775
775
  del value, min_value, max_value
776
776
 
777
777
  date_input_proto = DateInputProto()
778
- date_input_proto.id = id
778
+ date_input_proto.id = element_id
779
779
  date_input_proto.is_range = parsed_values.is_range
780
780
  date_input_proto.disabled = disabled
781
781
  date_input_proto.label_visibility.value = get_label_visibility_proto_value(
@@ -14,7 +14,7 @@ _sym_db = _symbol_database.Default()
14
14
 
15
15
 
16
16
 
17
- DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bstreamlit/proto/Block.proto\"\xb2\t\n\x05\x42lock\x12#\n\x08vertical\x18\x01 \x01(\x0b\x32\x0f.Block.VerticalH\x00\x12\'\n\nhorizontal\x18\x02 \x01(\x0b\x32\x11.Block.HorizontalH\x00\x12\x1f\n\x06\x63olumn\x18\x03 \x01(\x0b\x32\r.Block.ColumnH\x00\x12\'\n\nexpandable\x18\x04 \x01(\x0b\x32\x11.Block.ExpandableH\x00\x12\x1b\n\x04\x66orm\x18\x05 \x01(\x0b\x32\x0b.Block.FormH\x00\x12,\n\rtab_container\x18\x06 \x01(\x0b\x32\x13.Block.TabContainerH\x00\x12\x19\n\x03tab\x18\x07 \x01(\x0b\x32\n.Block.TabH\x00\x12*\n\x0c\x63hat_message\x18\t \x01(\x0b\x32\x12.Block.ChatMessageH\x00\x12!\n\x07popover\x18\n \x01(\x0b\x32\x0e.Block.PopoverH\x00\x12\x1f\n\x06\x64ialog\x18\x0b \x01(\x0b\x32\r.Block.DialogH\x00\x12\x13\n\x0b\x61llow_empty\x18\x08 \x01(\x08\x1a*\n\x08Vertical\x12\x0e\n\x06\x62order\x18\x01 \x01(\x08\x12\x0e\n\x06height\x18\x02 \x01(\r\x1a\x19\n\nHorizontal\x12\x0b\n\x03gap\x18\x01 \x01(\t\x1a\x98\x01\n\x06\x43olumn\x12\x0e\n\x06weight\x18\x01 \x01(\x01\x12\x0b\n\x03gap\x18\x02 \x01(\t\x12;\n\x12vertical_alignment\x18\x03 \x01(\x0e\x32\x1f.Block.Column.VerticalAlignment\"4\n\x11VerticalAlignment\x12\x07\n\x03TOP\x10\x00\x12\n\n\x06\x43\x45NTER\x10\x01\x12\n\n\x06\x42OTTOM\x10\x02\x1aM\n\nExpandable\x12\r\n\x05label\x18\x01 \x01(\t\x12\x15\n\x08\x65xpanded\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x0c\n\x04icon\x18\x03 \x01(\tB\x0b\n\t_expanded\x1a\x9d\x01\n\x06\x44ialog\x12\r\n\x05title\x18\x01 \x01(\t\x12\x13\n\x0b\x64ismissible\x18\x02 \x01(\x08\x12(\n\x05width\x18\x03 \x01(\x0e\x32\x19.Block.Dialog.DialogWidth\x12\x14\n\x07is_open\x18\x04 \x01(\x08H\x00\x88\x01\x01\"#\n\x0b\x44ialogWidth\x12\t\n\x05SMALL\x10\x00\x12\t\n\x05LARGE\x10\x01\x42\n\n\x08_is_open\x1a@\n\x04\x46orm\x12\x0f\n\x07\x66orm_id\x18\x01 \x01(\t\x12\x17\n\x0f\x63lear_on_submit\x18\x02 \x01(\x08\x12\x0e\n\x06\x62order\x18\x03 \x01(\x08\x1a\x0e\n\x0cTabContainer\x1a\x14\n\x03Tab\x12\r\n\x05label\x18\x01 \x01(\t\x1aU\n\x07Popover\x12\r\n\x05label\x18\x01 \x01(\t\x12\x1b\n\x13use_container_width\x18\x02 \x01(\x08\x12\x0c\n\x04help\x18\x03 \x01(\t\x12\x10\n\x08\x64isabled\x18\x04 \x01(\x08\x1a\x8d\x01\n\x0b\x43hatMessage\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06\x61vatar\x18\x02 \x01(\t\x12\x32\n\x0b\x61vatar_type\x18\x03 \x01(\x0e\x32\x1d.Block.ChatMessage.AvatarType\",\n\nAvatarType\x12\t\n\x05IMAGE\x10\x00\x12\t\n\x05\x45MOJI\x10\x01\x12\x08\n\x04ICON\x10\x02\x42\x06\n\x04typeB*\n\x1c\x63om.snowflake.apps.streamlitB\nBlockProtob\x06proto3')
17
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x1bstreamlit/proto/Block.proto\"\xc0\t\n\x05\x42lock\x12#\n\x08vertical\x18\x01 \x01(\x0b\x32\x0f.Block.VerticalH\x00\x12\'\n\nhorizontal\x18\x02 \x01(\x0b\x32\x11.Block.HorizontalH\x00\x12\x1f\n\x06\x63olumn\x18\x03 \x01(\x0b\x32\r.Block.ColumnH\x00\x12\'\n\nexpandable\x18\x04 \x01(\x0b\x32\x11.Block.ExpandableH\x00\x12\x1b\n\x04\x66orm\x18\x05 \x01(\x0b\x32\x0b.Block.FormH\x00\x12,\n\rtab_container\x18\x06 \x01(\x0b\x32\x13.Block.TabContainerH\x00\x12\x19\n\x03tab\x18\x07 \x01(\x0b\x32\n.Block.TabH\x00\x12*\n\x0c\x63hat_message\x18\t \x01(\x0b\x32\x12.Block.ChatMessageH\x00\x12!\n\x07popover\x18\n \x01(\x0b\x32\x0e.Block.PopoverH\x00\x12\x1f\n\x06\x64ialog\x18\x0b \x01(\x0b\x32\r.Block.DialogH\x00\x12\x13\n\x0b\x61llow_empty\x18\x08 \x01(\x08\x1a*\n\x08Vertical\x12\x0e\n\x06\x62order\x18\x01 \x01(\x08\x12\x0e\n\x06height\x18\x02 \x01(\r\x1a\x19\n\nHorizontal\x12\x0b\n\x03gap\x18\x01 \x01(\t\x1a\x98\x01\n\x06\x43olumn\x12\x0e\n\x06weight\x18\x01 \x01(\x01\x12\x0b\n\x03gap\x18\x02 \x01(\t\x12;\n\x12vertical_alignment\x18\x03 \x01(\x0e\x32\x1f.Block.Column.VerticalAlignment\"4\n\x11VerticalAlignment\x12\x07\n\x03TOP\x10\x00\x12\n\n\x06\x43\x45NTER\x10\x01\x12\n\n\x06\x42OTTOM\x10\x02\x1aM\n\nExpandable\x12\r\n\x05label\x18\x01 \x01(\t\x12\x15\n\x08\x65xpanded\x18\x02 \x01(\x08H\x00\x88\x01\x01\x12\x0c\n\x04icon\x18\x03 \x01(\tB\x0b\n\t_expanded\x1a\x9d\x01\n\x06\x44ialog\x12\r\n\x05title\x18\x01 \x01(\t\x12\x13\n\x0b\x64ismissible\x18\x02 \x01(\x08\x12(\n\x05width\x18\x03 \x01(\x0e\x32\x19.Block.Dialog.DialogWidth\x12\x14\n\x07is_open\x18\x04 \x01(\x08H\x00\x88\x01\x01\"#\n\x0b\x44ialogWidth\x12\t\n\x05SMALL\x10\x00\x12\t\n\x05LARGE\x10\x01\x42\n\n\x08_is_open\x1a@\n\x04\x46orm\x12\x0f\n\x07\x66orm_id\x18\x01 \x01(\t\x12\x17\n\x0f\x63lear_on_submit\x18\x02 \x01(\x08\x12\x0e\n\x06\x62order\x18\x03 \x01(\x08\x1a\x0e\n\x0cTabContainer\x1a\x14\n\x03Tab\x12\r\n\x05label\x18\x01 \x01(\t\x1a\x63\n\x07Popover\x12\r\n\x05label\x18\x01 \x01(\t\x12\x1b\n\x13use_container_width\x18\x02 \x01(\x08\x12\x0c\n\x04help\x18\x03 \x01(\t\x12\x10\n\x08\x64isabled\x18\x04 \x01(\x08\x12\x0c\n\x04icon\x18\x05 \x01(\t\x1a\x8d\x01\n\x0b\x43hatMessage\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06\x61vatar\x18\x02 \x01(\t\x12\x32\n\x0b\x61vatar_type\x18\x03 \x01(\x0e\x32\x1d.Block.ChatMessage.AvatarType\",\n\nAvatarType\x12\t\n\x05IMAGE\x10\x00\x12\t\n\x05\x45MOJI\x10\x01\x12\x08\n\x04ICON\x10\x02\x42\x06\n\x04typeB*\n\x1c\x63om.snowflake.apps.streamlitB\nBlockProtob\x06proto3')
18
18
 
19
19
  _globals = globals()
20
20
  _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, _globals)
@@ -23,7 +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\nBlockProto'
25
25
  _globals['_BLOCK']._serialized_start=32
26
- _globals['_BLOCK']._serialized_end=1234
26
+ _globals['_BLOCK']._serialized_end=1248
27
27
  _globals['_BLOCK_VERTICAL']._serialized_start=428
28
28
  _globals['_BLOCK_VERTICAL']._serialized_end=470
29
29
  _globals['_BLOCK_HORIZONTAL']._serialized_start=472
@@ -45,9 +45,9 @@ if not _descriptor._USE_C_DESCRIPTORS:
45
45
  _globals['_BLOCK_TAB']._serialized_start=975
46
46
  _globals['_BLOCK_TAB']._serialized_end=995
47
47
  _globals['_BLOCK_POPOVER']._serialized_start=997
48
- _globals['_BLOCK_POPOVER']._serialized_end=1082
49
- _globals['_BLOCK_CHATMESSAGE']._serialized_start=1085
50
- _globals['_BLOCK_CHATMESSAGE']._serialized_end=1226
51
- _globals['_BLOCK_CHATMESSAGE_AVATARTYPE']._serialized_start=1182
52
- _globals['_BLOCK_CHATMESSAGE_AVATARTYPE']._serialized_end=1226
48
+ _globals['_BLOCK_POPOVER']._serialized_end=1096
49
+ _globals['_BLOCK_CHATMESSAGE']._serialized_start=1099
50
+ _globals['_BLOCK_CHATMESSAGE']._serialized_end=1240
51
+ _globals['_BLOCK_CHATMESSAGE_AVATARTYPE']._serialized_start=1196
52
+ _globals['_BLOCK_CHATMESSAGE_AVATARTYPE']._serialized_end=1240
53
53
  # @@protoc_insertion_point(module_scope)
@@ -205,10 +205,12 @@ class Block(google.protobuf.message.Message):
205
205
  USE_CONTAINER_WIDTH_FIELD_NUMBER: builtins.int
206
206
  HELP_FIELD_NUMBER: builtins.int
207
207
  DISABLED_FIELD_NUMBER: builtins.int
208
+ ICON_FIELD_NUMBER: builtins.int
208
209
  label: builtins.str
209
210
  use_container_width: builtins.bool
210
211
  help: builtins.str
211
212
  disabled: builtins.bool
213
+ icon: builtins.str
212
214
  def __init__(
213
215
  self,
214
216
  *,
@@ -216,8 +218,9 @@ class Block(google.protobuf.message.Message):
216
218
  use_container_width: builtins.bool = ...,
217
219
  help: builtins.str = ...,
218
220
  disabled: builtins.bool = ...,
221
+ icon: builtins.str = ...,
219
222
  ) -> None: ...
220
- def ClearField(self, field_name: typing.Literal["disabled", b"disabled", "help", b"help", "label", b"label", "use_container_width", b"use_container_width"]) -> None: ...
223
+ def ClearField(self, field_name: typing.Literal["disabled", b"disabled", "help", b"help", "icon", b"icon", "label", b"label", "use_container_width", b"use_container_width"]) -> None: ...
221
224
 
222
225
  @typing.final
223
226
  class ChatMessage(google.protobuf.message.Message):
@@ -95,7 +95,7 @@ WidgetProto: TypeAlias = Union[
95
95
  TimeInput,
96
96
  ]
97
97
 
98
- GENERATED_WIDGET_ID_PREFIX: Final = "$$WIDGET_ID"
98
+ GENERATED_ELEMENT_ID_PREFIX: Final = "$$ID"
99
99
  TESTING_KEY = "$$STREAMLIT_INTERNAL_KEY_TESTING"
100
100
 
101
101
 
@@ -232,22 +232,22 @@ SAFE_VALUES = Union[
232
232
  ]
233
233
 
234
234
 
235
- def compute_widget_id(
235
+ def compute_element_id(
236
236
  element_type: str,
237
237
  user_key: str | None = None,
238
238
  **kwargs: SAFE_VALUES | Iterable[SAFE_VALUES],
239
239
  ) -> str:
240
- """Compute the widget id for the given widget. This id is stable: a given
241
- set of inputs to this function will always produce the same widget id output.
240
+ """Compute the id for the given element. This id is stable: a given
241
+ set of inputs to this function will always produce the same id output.
242
242
 
243
- Only stable, deterministic values should be used to compute widget ids. Using
244
- nondeterministic values as inputs can cause the resulting widget id to
243
+ Only stable, deterministic values should be used to compute element ids. Using
244
+ nondeterministic values as inputs can cause the resulting element id to
245
245
  change between runs.
246
246
 
247
- The widget id includes the user_key so widgets with identical arguments can
247
+ The element id includes the user_key so elements with identical arguments can
248
248
  use it to be distinct.
249
249
 
250
- The widget id includes an easily identified prefix, and the user_key as a
250
+ The element id includes an easily identified prefix, and the user_key as a
251
251
  suffix, to make it easy to identify it and know if a key maps to it.
252
252
  """
253
253
  h = hashlib.new("md5", **HASHLIB_KWARGS)
@@ -257,37 +257,38 @@ def compute_widget_id(
257
257
  for k, v in kwargs.items():
258
258
  h.update(str(k).encode("utf-8"))
259
259
  h.update(str(v).encode("utf-8"))
260
- return f"{GENERATED_WIDGET_ID_PREFIX}-{h.hexdigest()}-{user_key}"
260
+ return f"{GENERATED_ELEMENT_ID_PREFIX}-{h.hexdigest()}-{user_key}"
261
261
 
262
262
 
263
- def user_key_from_widget_id(widget_id: str) -> str | None:
264
- """Return the user key portion of a widget id, or None if the id does not
263
+ def user_key_from_element_id(element_id: str) -> str | None:
264
+ """Return the user key portion of a element id, or None if the id does not
265
265
  have a user key.
266
266
 
267
267
  TODO This will incorrectly indicate no user key if the user actually provides
268
268
  "None" as a key, but we can't avoid this kind of problem while storing the
269
- string representation of the no-user-key sentinel as part of the widget id.
269
+ string representation of the no-user-key sentinel as part of the element id.
270
270
  """
271
- user_key: str | None = widget_id.split("-", maxsplit=2)[-1]
272
- user_key = None if user_key == "None" else user_key
273
- return user_key
271
+ user_key: str | None = element_id.split("-", maxsplit=2)[-1]
272
+ return None if user_key == "None" else user_key
274
273
 
275
274
 
276
- def is_widget_id(key: str) -> bool:
277
- """True if the given session_state key has the structure of a widget ID."""
278
- return key.startswith(GENERATED_WIDGET_ID_PREFIX)
275
+ def is_element_id(key: str) -> bool:
276
+ """True if the given session_state key has the structure of a element ID."""
277
+ return key.startswith(GENERATED_ELEMENT_ID_PREFIX)
279
278
 
280
279
 
281
- def is_keyed_widget_id(key: str) -> bool:
282
- """True if the given session_state key has the structure of a widget ID with a user_key."""
283
- return is_widget_id(key) and not key.endswith("-None")
280
+ def is_keyed_element_id(key: str) -> bool:
281
+ """True if the given session_state key has the structure of a element ID
282
+ with a user_key.
283
+ """
284
+ return is_element_id(key) and not key.endswith("-None")
284
285
 
285
286
 
286
287
  def require_valid_user_key(key: str) -> None:
287
288
  """Raise an Exception if the given user_key is invalid."""
288
- if is_widget_id(key):
289
+ if is_element_id(key):
289
290
  raise StreamlitAPIException(
290
- f"Keys beginning with {GENERATED_WIDGET_ID_PREFIX} are reserved."
291
+ f"Keys beginning with {GENERATED_ELEMENT_ID_PREFIX} are reserved."
291
292
  )
292
293
 
293
294
 
@@ -44,8 +44,8 @@ from streamlit.runtime.state.common import (
44
44
  ValueFieldName,
45
45
  WidgetMetadata,
46
46
  is_array_value_field_name,
47
- is_keyed_widget_id,
48
- is_widget_id,
47
+ is_element_id,
48
+ is_keyed_element_id,
49
49
  )
50
50
  from streamlit.runtime.state.query_params import QueryParams
51
51
  from streamlit.runtime.stats import CacheStat, CacheStatsProvider, group_stats
@@ -353,9 +353,9 @@ class SessionState:
353
353
  # happens when the streamlit server restarted or the cache was cleared),
354
354
  # then we receive a widget's state from a browser.
355
355
  for k in self._keys():
356
- if not is_widget_id(k) and not _is_internal_key(k):
356
+ if not is_element_id(k) and not _is_internal_key(k):
357
357
  state[k] = self[k]
358
- elif is_keyed_widget_id(k):
358
+ elif is_keyed_element_id(k):
359
359
  try:
360
360
  key = wid_key_map[k]
361
361
  state[key] = self[k]
@@ -586,7 +586,7 @@ class SessionState:
586
586
  k: v
587
587
  for k, v in self._old_state.items()
588
588
  if (
589
- not is_widget_id(k)
589
+ not is_element_id(k)
590
590
  or not _is_stale_widget(
591
591
  self._new_widget_state.widget_metadata.get(k),
592
592
  active_widget_ids,
@@ -32,7 +32,7 @@ from streamlit.runtime.state.common import (
32
32
  WidgetMetadata,
33
33
  WidgetProto,
34
34
  WidgetSerializer,
35
- user_key_from_widget_id,
35
+ user_key_from_element_id,
36
36
  )
37
37
 
38
38
  if TYPE_CHECKING:
@@ -187,7 +187,7 @@ def register_widget_from_metadata(
187
187
  return RegisterWidgetResult.failure(deserializer=metadata.deserializer)
188
188
 
189
189
  widget_id = metadata.id
190
- user_key = user_key_from_widget_id(widget_id)
190
+ user_key = user_key_from_element_id(widget_id)
191
191
 
192
192
  # Ensure another widget with the same user key hasn't already been registered.
193
193
  if user_key is not None:
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "files": {
3
3
  "main.css": "./static/css/main.5513bd04.css",
4
- "main.js": "./static/js/main.f42f34e1.js",
4
+ "main.js": "./static/js/main.f0eff620.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.8a0d79f6.chunk.js": "./static/js/9077.8a0d79f6.chunk.js",
@@ -16,13 +16,13 @@
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",
19
- "static/js/583.0933ee10.chunk.js": "./static/js/583.0933ee10.chunk.js",
19
+ "static/js/583.61ac7fde.chunk.js": "./static/js/583.61ac7fde.chunk.js",
20
20
  "static/js/4827.f9cb5fa3.chunk.js": "./static/js/4827.f9cb5fa3.chunk.js",
21
21
  "static/js/8237.ed5d881b.chunk.js": "./static/js/8237.ed5d881b.chunk.js",
22
22
  "static/js/5828.f8572ba4.chunk.js": "./static/js/5828.f8572ba4.chunk.js",
23
- "static/js/9060.d2bc110a.chunk.js": "./static/js/9060.d2bc110a.chunk.js",
23
+ "static/js/9060.1ec8dc2b.chunk.js": "./static/js/9060.1ec8dc2b.chunk.js",
24
24
  "static/js/5625.0394ecdc.chunk.js": "./static/js/5625.0394ecdc.chunk.js",
25
- "static/js/6141.3a6bc340.chunk.js": "./static/js/6141.3a6bc340.chunk.js",
25
+ "static/js/6141.43a8fda3.chunk.js": "./static/js/6141.43a8fda3.chunk.js",
26
26
  "static/js/4103.2a961369.chunk.js": "./static/js/4103.2a961369.chunk.js",
27
27
  "static/js/1086.1bb52316.chunk.js": "./static/js/1086.1bb52316.chunk.js",
28
28
  "static/js/245.532167ed.chunk.js": "./static/js/245.532167ed.chunk.js",
@@ -153,6 +153,6 @@
153
153
  },
154
154
  "entrypoints": [
155
155
  "static/css/main.5513bd04.css",
156
- "static/js/main.f42f34e1.js"
156
+ "static/js/main.f0eff620.js"
157
157
  ]
158
158
  }
@@ -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.f42f34e1.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.f0eff620.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>
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_streamlit_app=self.webpackChunk_streamlit_app||[]).push([[583],{10583:(o,r,e)=>{e.r(r),e.d(r,{default:()=>h});e(58878);var i=e(84720),t=e(98350),l=e(88987),a=e(89653),s=e(32735);function d(o,r){switch(o){case i.Pj.XSMALL:return{padding:`${r.spacing.twoXS} ${r.spacing.sm}`,fontSize:r.fontSizes.sm};case i.Pj.SMALL:return{padding:`${r.spacing.twoXS} ${r.spacing.md}`};case i.Pj.LARGE:return{padding:`${r.spacing.md} ${r.spacing.md}`};default:return{padding:`${r.spacing.xs} ${r.spacing.md}`}}}const n=(0,a.A)("a",{target:"e16zdaao2"})((o=>{let{fluidWidth:r,size:e,theme:i}=o;const t="number"==typeof r?`${r}px`:"100%";return{display:"inline-flex",alignItems:"center",justifyContent:"center",fontWeight:i.fontWeights.normal,padding:`${i.spacing.xs} ${i.spacing.md}`,borderRadius:i.radii.default,minHeight:i.sizes.minElementHeight,margin:0,lineHeight:i.lineHeights.base,color:i.colors.primary,textDecoration:"none",width:r?t:"auto",userSelect:"none","&:visited":{color:i.colors.primary},"&:focus":{outline:"none"},"&:focus-visible":{boxShadow:`0 0 0 0.2rem ${(0,s.No)(i.colors.primary,.5)}`},"&:hover":{textDecoration:"none"},"&:active":{textDecoration:"none"},...d(e,i)}}),""),c=(0,a.A)(n,{target:"e16zdaao1"})((o=>{let{theme:r}=o;return{backgroundColor:r.colors.primary,color:r.colors.white,border:`${r.sizes.borderWidth} solid ${r.colors.primary}`,"&:hover":{backgroundColor:(0,s.e$)(r.colors.primary,.05),color:r.colors.white},"&:active":{backgroundColor:"transparent",color:r.colors.primary},"&:visited:not(:active)":{color:r.colors.white},"&[disabled], &[disabled]:hover, &[disabled]:active, &[disabled]:visited":{borderColor:r.colors.borderColor,backgroundColor:r.colors.transparent,color:r.colors.fadedText40,cursor:"not-allowed"}}}),""),u=(0,a.A)(n,{target:"e16zdaao0"})((o=>{let{theme:r}=o;return{backgroundColor:r.colors.lightenedBg05,color:r.colors.bodyText,border:`${r.sizes.borderWidth} solid ${r.colors.borderColor}`,"&:visited":{color:r.colors.bodyText},"&:hover":{borderColor:r.colors.primary,color:r.colors.primary},"&:active":{color:r.colors.white,borderColor:r.colors.primary,backgroundColor:r.colors.primary},"&:focus:not(:active)":{borderColor:r.colors.primary,color:r.colors.primary},"&[disabled], &[disabled]:hover, &[disabled]:active":{borderColor:r.colors.borderColor,backgroundColor:r.colors.transparent,color:r.colors.fadedText40,cursor:"not-allowed"}}}),"");var p=e(90782);const b=function(o){let{kind:r,size:e,disabled:t,fluidWidth:l,children:a,autoFocus:s,href:d,rel:n,target:b,onClick:h}=o,g=c;return r===i.KX.SECONDARY&&(g=u),(0,p.jsx)(g,{kind:r,size:e||i.Pj.MEDIUM,fluidWidth:l||!1,disabled:t||!1,autoFocus:s||!1,href:d,target:b,rel:n,onClick:h,tabIndex:t?-1:0,children:a})};const h=function(o){const{disabled:r,element:e,width:a}=o,s={width:a},d="primary"===e.type?i.KX.PRIMARY:i.KX.SECONDARY,n=!e.help||a;return(0,p.jsx)("div",{className:"stLinkButton","data-testid":"stLinkButton",style:s,children:(0,p.jsx)(t.F,{help:e.help,children:(0,p.jsx)(b,{kind:d,size:i.Pj.SMALL,disabled:r,onClick:r=>{o.disabled&&r.preventDefault()},fluidWidth:!!e.useContainerWidth&&n,href:e.url,target:"_blank",rel:"noreferrer","aria-disabled":r,children:(0,p.jsx)(l.Y,{icon:e.icon,label:e.label})})})})}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_streamlit_app=self.webpackChunk_streamlit_app||[]).push([[6141],{96141:(t,e,n)=>{n.r(e),n.d(e,{default:()=>u});var i=n(58878),l=n(84720),s=n(98350),a=n(36459),r=n(88987),d=n(84152),o=n(90782);const u=function(t){const{disabled:e,element:n,widgetMgr:u,width:c,endpoints:b,fragmentId:h}=t,p={width:c},{libConfig:{enforceDownloadInNewTab:f=!1}}=i.useContext(d.n),w="primary"===n.type?l.KX.PRIMARY:l.KX.SECONDARY,m=!n.help||c;return(0,o.jsx)("div",{className:"stDownloadButton","data-testid":"stDownloadButton",style:p,children:(0,o.jsx)(s.F,{help:n.help,children:(0,o.jsx)(a.Ay,{kind:w,size:l.Pj.SMALL,disabled:e,onClick:()=>{u.setTriggerValue(n,{fromUi:!0},h);const t=function(t,e,n){const i=document.createElement("a"),l=t.buildMediaURL(e);return i.setAttribute("href",l),n?i.setAttribute("target","_blank"):i.setAttribute("target","_self"),i.setAttribute("download",""),i}(b,n.url,f);t.click()},fluidWidth:!!n.useContainerWidth&&m,children:(0,o.jsx)(r.Y,{icon:n.icon,label:n.label})})})})}}}]);
@@ -0,0 +1 @@
1
+ "use strict";(self.webpackChunk_streamlit_app=self.webpackChunk_streamlit_app||[]).push([[9060],{79060:(e,t,i)=>{i.r(t),i.d(t,{default:()=>r});i(58878);var s=i(84720),l=i(98350),a=i(36459),d=i(88987),n=i(90782);const r=function(e){const{disabled:t,element:i,widgetMgr:r,width:c,fragmentId:h}=e,p={width:c},u="primary"===i.type?s.KX.PRIMARY:s.KX.SECONDARY,o=!i.help||c;return(0,n.jsx)("div",{className:"stButton","data-testid":"stButton",style:p,children:(0,n.jsx)(l.F,{help:i.help,children:(0,n.jsx)(a.Ay,{kind:u,size:s.Pj.SMALL,disabled:t,fluidWidth:!!i.useContainerWidth&&o,onClick:()=>r.setTriggerValue(i,{fromUi:!0},h),children:(0,n.jsx)(d.Y,{icon:i.icon,label:i.label})})})})}}}]);