streamlit 1.45.1__py3-none-any.whl → 1.46.0__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 (335) hide show
  1. streamlit/__init__.py +5 -1
  2. streamlit/auth_util.py +12 -12
  3. streamlit/cli_util.py +4 -3
  4. streamlit/column_config.py +11 -9
  5. streamlit/commands/echo.py +6 -4
  6. streamlit/commands/execution_control.py +33 -32
  7. streamlit/commands/experimental_query_params.py +2 -2
  8. streamlit/commands/logo.py +9 -4
  9. streamlit/commands/navigation.py +61 -18
  10. streamlit/commands/page_config.py +57 -47
  11. streamlit/components/types/base_custom_component.py +7 -7
  12. streamlit/components/v1/component_registry.py +7 -3
  13. streamlit/components/v1/components.py +1 -1
  14. streamlit/components/v1/custom_component.py +8 -8
  15. streamlit/config.py +289 -144
  16. streamlit/config_option.py +19 -15
  17. streamlit/config_util.py +29 -23
  18. streamlit/connections/__init__.py +2 -2
  19. streamlit/connections/base_connection.py +5 -5
  20. streamlit/connections/snowflake_connection.py +13 -11
  21. streamlit/connections/snowpark_connection.py +3 -3
  22. streamlit/connections/sql_connection.py +20 -18
  23. streamlit/connections/util.py +2 -2
  24. streamlit/cursor.py +6 -6
  25. streamlit/dataframe_util.py +52 -52
  26. streamlit/delta_generator.py +46 -48
  27. streamlit/delta_generator_singletons.py +3 -3
  28. streamlit/deprecation_util.py +6 -6
  29. streamlit/elements/alert.py +37 -29
  30. streamlit/elements/arrow.py +40 -22
  31. streamlit/elements/code.py +46 -13
  32. streamlit/elements/deck_gl_json_chart.py +38 -27
  33. streamlit/elements/dialog_decorator.py +3 -4
  34. streamlit/elements/doc_string.py +64 -58
  35. streamlit/elements/exception.py +23 -27
  36. streamlit/elements/form.py +41 -0
  37. streamlit/elements/graphviz_chart.py +1 -1
  38. streamlit/elements/heading.py +60 -9
  39. streamlit/elements/html.py +3 -4
  40. streamlit/elements/image.py +8 -9
  41. streamlit/elements/json.py +21 -2
  42. streamlit/elements/layouts.py +120 -31
  43. streamlit/elements/lib/built_in_chart_utils.py +96 -73
  44. streamlit/elements/lib/color_util.py +3 -3
  45. streamlit/elements/lib/column_config_utils.py +2 -4
  46. streamlit/elements/lib/column_types.py +14 -8
  47. streamlit/elements/lib/dialog.py +9 -5
  48. streamlit/elements/lib/image_utils.py +39 -40
  49. streamlit/elements/lib/js_number.py +4 -4
  50. streamlit/elements/lib/layout_utils.py +65 -1
  51. streamlit/elements/lib/mutable_status_container.py +14 -3
  52. streamlit/elements/lib/options_selector_utils.py +22 -12
  53. streamlit/elements/lib/pandas_styler_utils.py +25 -21
  54. streamlit/elements/lib/policies.py +6 -5
  55. streamlit/elements/lib/streamlit_plotly_theme.py +54 -53
  56. streamlit/elements/lib/subtitle_utils.py +6 -9
  57. streamlit/elements/lib/utils.py +20 -5
  58. streamlit/elements/map.py +32 -56
  59. streamlit/elements/markdown.py +101 -12
  60. streamlit/elements/media.py +78 -21
  61. streamlit/elements/metric.py +32 -16
  62. streamlit/elements/plotly_chart.py +15 -15
  63. streamlit/elements/progress.py +33 -15
  64. streamlit/elements/spinner.py +31 -6
  65. streamlit/elements/text.py +21 -1
  66. streamlit/elements/toast.py +1 -2
  67. streamlit/elements/vega_charts.py +54 -23
  68. streamlit/elements/widgets/audio_input.py +24 -7
  69. streamlit/elements/widgets/button.py +26 -19
  70. streamlit/elements/widgets/button_group.py +10 -15
  71. streamlit/elements/widgets/camera_input.py +27 -7
  72. streamlit/elements/widgets/chat.py +91 -38
  73. streamlit/elements/widgets/checkbox.py +45 -4
  74. streamlit/elements/widgets/color_picker.py +40 -17
  75. streamlit/elements/widgets/data_editor.py +76 -37
  76. streamlit/elements/widgets/file_uploader.py +42 -13
  77. streamlit/elements/widgets/multiselect.py +7 -10
  78. streamlit/elements/widgets/number_input.py +123 -47
  79. streamlit/elements/widgets/radio.py +59 -13
  80. streamlit/elements/widgets/select_slider.py +35 -30
  81. streamlit/elements/widgets/selectbox.py +56 -9
  82. streamlit/elements/widgets/slider.py +190 -99
  83. streamlit/elements/widgets/text_widgets.py +54 -8
  84. streamlit/elements/widgets/time_widgets.py +53 -14
  85. streamlit/elements/write.py +5 -8
  86. streamlit/env_util.py +2 -7
  87. streamlit/error_util.py +16 -9
  88. streamlit/errors.py +69 -48
  89. streamlit/external/langchain/streamlit_callback_handler.py +10 -5
  90. streamlit/file_util.py +27 -10
  91. streamlit/git_util.py +29 -24
  92. streamlit/hello/animation_demo.py +9 -9
  93. streamlit/hello/dataframe_demo.py +5 -5
  94. streamlit/hello/hello.py +1 -0
  95. streamlit/hello/mapping_demo.py +7 -8
  96. streamlit/hello/plotting_demo.py +3 -3
  97. streamlit/hello/streamlit_app.py +28 -26
  98. streamlit/hello/utils.py +2 -1
  99. streamlit/logger.py +10 -11
  100. streamlit/navigation/page.py +11 -8
  101. streamlit/proto/Audio_pb2.py +4 -3
  102. streamlit/proto/Audio_pb2.pyi +8 -1
  103. streamlit/proto/Block_pb2.py +38 -29
  104. streamlit/proto/Block_pb2.pyi +72 -4
  105. streamlit/proto/ClientState_pb2.py +4 -4
  106. streamlit/proto/ClientState_pb2.pyi +7 -2
  107. streamlit/proto/Code_pb2.py +4 -2
  108. streamlit/proto/Code_pb2.pyi +1 -0
  109. streamlit/proto/DataFrame_pb2.pyi +1 -1
  110. streamlit/proto/DeckGlJsonChart_pb2.pyi +1 -1
  111. streamlit/proto/Element_pb2.py +5 -3
  112. streamlit/proto/Element_pb2.pyi +20 -3
  113. streamlit/proto/GapSize_pb2.py +29 -0
  114. streamlit/proto/GapSize_pb2.pyi +70 -0
  115. streamlit/proto/HeightConfig_pb2.py +27 -0
  116. streamlit/proto/HeightConfig_pb2.pyi +48 -0
  117. streamlit/proto/NamedDataSet_pb2.pyi +1 -1
  118. streamlit/proto/Navigation_pb2.py +3 -3
  119. streamlit/proto/Navigation_pb2.pyi +4 -0
  120. streamlit/proto/NewSession_pb2.py +18 -16
  121. streamlit/proto/NewSession_pb2.pyi +29 -3
  122. streamlit/proto/PageConfig_pb2.py +7 -7
  123. streamlit/proto/PageConfig_pb2.pyi +21 -1
  124. streamlit/proto/Video_pb2.py +8 -7
  125. streamlit/proto/Video_pb2.pyi +8 -1
  126. streamlit/proto/WidthConfig_pb2.py +2 -2
  127. streamlit/proto/WidthConfig_pb2.pyi +15 -1
  128. streamlit/runtime/__init__.py +1 -1
  129. streamlit/runtime/app_session.py +53 -40
  130. streamlit/runtime/caching/__init__.py +9 -9
  131. streamlit/runtime/caching/cache_data_api.py +36 -30
  132. streamlit/runtime/caching/cache_errors.py +4 -4
  133. streamlit/runtime/caching/cache_resource_api.py +8 -8
  134. streamlit/runtime/caching/cache_utils.py +15 -14
  135. streamlit/runtime/caching/cached_message_replay.py +14 -8
  136. streamlit/runtime/caching/hashing.py +91 -97
  137. streamlit/runtime/caching/legacy_cache_api.py +2 -2
  138. streamlit/runtime/caching/storage/cache_storage_protocol.py +1 -1
  139. streamlit/runtime/caching/storage/dummy_cache_storage.py +1 -1
  140. streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py +12 -14
  141. streamlit/runtime/caching/storage/local_disk_cache_storage.py +6 -6
  142. streamlit/runtime/connection_factory.py +36 -36
  143. streamlit/runtime/context.py +58 -9
  144. streamlit/runtime/credentials.py +29 -40
  145. streamlit/runtime/forward_msg_queue.py +11 -11
  146. streamlit/runtime/fragment.py +7 -7
  147. streamlit/runtime/media_file_manager.py +3 -4
  148. streamlit/runtime/memory_media_file_storage.py +6 -5
  149. streamlit/runtime/memory_uploaded_file_manager.py +2 -2
  150. streamlit/runtime/metrics_util.py +11 -12
  151. streamlit/runtime/pages_manager.py +4 -6
  152. streamlit/runtime/runtime.py +8 -6
  153. streamlit/runtime/runtime_util.py +7 -6
  154. streamlit/runtime/scriptrunner/__init__.py +4 -4
  155. streamlit/runtime/scriptrunner/exec_code.py +12 -5
  156. streamlit/runtime/scriptrunner/magic.py +16 -12
  157. streamlit/runtime/scriptrunner/script_cache.py +1 -1
  158. streamlit/runtime/scriptrunner/script_runner.py +53 -29
  159. streamlit/runtime/scriptrunner_utils/exceptions.py +1 -1
  160. streamlit/runtime/scriptrunner_utils/script_requests.py +7 -4
  161. streamlit/runtime/scriptrunner_utils/script_run_context.py +10 -23
  162. streamlit/runtime/secrets.py +40 -35
  163. streamlit/runtime/session_manager.py +2 -1
  164. streamlit/runtime/state/__init__.py +5 -5
  165. streamlit/runtime/state/common.py +2 -2
  166. streamlit/runtime/state/query_params.py +13 -15
  167. streamlit/runtime/state/query_params_proxy.py +17 -13
  168. streamlit/runtime/state/safe_session_state.py +2 -2
  169. streamlit/runtime/state/session_state.py +52 -34
  170. streamlit/runtime/stats.py +2 -2
  171. streamlit/runtime/uploaded_file_manager.py +1 -1
  172. streamlit/runtime/websocket_session_manager.py +10 -6
  173. streamlit/source_util.py +8 -6
  174. streamlit/static/index.html +3 -17
  175. streamlit/static/manifest.json +1180 -0
  176. streamlit/static/static/css/{index.DqDwtg6_.css → index.CJVRHjQZ.css} +1 -1
  177. streamlit/static/static/js/{ErrorOutline.esm.DU9IrB3M.js → ErrorOutline.esm.6PVAQvlT.js} +1 -1
  178. streamlit/static/static/js/{FileDownload.esm.P9rKwKo8.js → FileDownload.esm.BZQHC61b.js} +1 -1
  179. streamlit/static/static/js/{FileHelper.D7RMkx0e.js → FileHelper.Bn1VShMJ.js} +5 -5
  180. streamlit/static/static/js/{FormClearHelper.B67tgll0.js → FormClearHelper.CsFEiTNN.js} +1 -1
  181. streamlit/static/static/js/{Hooks.ncTJktu9.js → Hooks.DguOHQL1.js} +1 -1
  182. streamlit/static/static/js/{InputInstructions.D-Y8geDN.js → InputInstructions.CTYn2BJQ.js} +1 -1
  183. streamlit/static/static/js/{ProgressBar.B-kexwwD.js → ProgressBar.CPOGBKCi.js} +2 -2
  184. streamlit/static/static/js/{RenderInPortalIfExists.BgaoZgep.js → RenderInPortalIfExists.BYu_CZaF.js} +1 -1
  185. streamlit/static/static/js/Toolbar.gXKw7ANv.js +1 -0
  186. streamlit/static/static/js/UploadFileInfo.0DCkpDDf.js +6 -0
  187. streamlit/static/static/js/{base-input.BoAa1U94.js → base-input.DBYPj91R.js} +4 -4
  188. streamlit/static/static/js/{checkbox.Z6iSfe5F.js → checkbox.BUm2vnNv.js} +2 -2
  189. streamlit/static/static/js/{createSuper.B4oGDYRm.js → createSuper.KD4RuZ-W.js} +1 -1
  190. streamlit/static/static/js/{data-grid-overlay-editor.msYws2Ou.js → data-grid-overlay-editor.CUwpDfvI.js} +1 -1
  191. streamlit/static/static/js/{downloader.kc14n2Hv.js → downloader.CkDtclup.js} +1 -1
  192. streamlit/static/static/js/{es6.CxQz807-.js → es6.Dlcvh_r0.js} +2 -2
  193. streamlit/static/static/js/{iframeResizer.contentWindow.B19u0ONI.js → iframeResizer.contentWindow.DOXlFfve.js} +1 -1
  194. streamlit/static/static/js/{index.BGga-hcS.js → index.B0cuGMAB.js} +25 -25
  195. streamlit/static/static/js/index.BCWTclSV.js +73 -0
  196. streamlit/static/static/js/index.BJY_fap7.js +1 -0
  197. streamlit/static/static/js/index.BL3l6dnk.js +1 -0
  198. streamlit/static/static/js/{index.BFz9U2y0.js → index.BMZzRZjB.js} +1 -1
  199. streamlit/static/static/js/{index.-5ruC9At.js → index.BOzUTGDe.js} +1 -1
  200. streamlit/static/static/js/index.BYI5iO-o.js +1 -0
  201. streamlit/static/static/js/index.BYo0ywlm.js +783 -0
  202. streamlit/static/static/js/{index.CmTAF0dM.js → index.BYz9btsY.js} +1 -1
  203. streamlit/static/static/js/{index.BHGGDa8K.js → index.CCVzQz0Z.js} +2 -2
  204. streamlit/static/static/js/index.CD6FydK9.js +1 -0
  205. streamlit/static/static/js/index.CDYEqgC8.js +2 -0
  206. streamlit/static/static/js/{index.BRXmLIsC.js → index.CMP9c4xA.js} +1 -1
  207. streamlit/static/static/js/index.CN30QAPD.js +1 -0
  208. streamlit/static/static/js/{index.LaIasviC.js → index.CNqWQkTe.js} +1 -1
  209. streamlit/static/static/js/index.CaxS67Xz.js +1 -0
  210. streamlit/static/static/js/{index.xNQq3Ei5.js → index.CbsT4sGW.js} +1 -1
  211. streamlit/static/static/js/index.ChAVlxpQ.js +1 -0
  212. streamlit/static/static/js/{index.BqfdT8-Q.js → index.ClLMMmDd.js} +1 -1
  213. streamlit/static/static/js/{index.BHXxWdde.js → index.D-O9rQmV.js} +1 -1
  214. streamlit/static/static/js/{index.9V1KdxfP.js → index.D4k7VZZL.js} +1 -1
  215. streamlit/static/static/js/index.DLBi0Ar1.js +1 -0
  216. streamlit/static/static/js/index.DVq5XmJo.js +197 -0
  217. streamlit/static/static/js/{index.BoigZiu7.js → index.DZKmKXWw.js} +1 -1
  218. streamlit/static/static/js/index.DkaVx80F.js +1 -0
  219. streamlit/static/static/js/index.Dr968Klx.js +1 -0
  220. streamlit/static/static/js/{index.BpILzHf_.js → index.DtUYLn9j.js} +20 -20
  221. streamlit/static/static/js/index.DwjYSyhs.js +1 -0
  222. streamlit/static/static/js/index.DzrImxu4.js +1 -0
  223. streamlit/static/static/js/index.HyGsn4VM.js +1 -0
  224. streamlit/static/static/js/index.OwxC65od.js +12 -0
  225. streamlit/static/static/js/index.PZs7VZkC.js +1 -0
  226. streamlit/static/static/js/index.Voiqpj4q.js +1 -0
  227. streamlit/static/static/js/index.bSROvR-J.js +3 -0
  228. streamlit/static/static/js/index.oT9GD3l4.js +1 -0
  229. streamlit/static/static/js/{index.DeB9iKFW.js → index.qb-yAPH6.js} +255 -255
  230. streamlit/static/static/js/index.rJFy_Ygy.js +2 -0
  231. streamlit/static/static/js/{input.DsCfafm0.js → input.CwQtEnFN.js} +2 -2
  232. streamlit/static/static/js/{memory.nY_lMTtu.js → memory.C5XaFIjR.js} +1 -1
  233. streamlit/static/static/js/{mergeWith.B_7zmsM4.js → mergeWith.DzwwH6AG.js} +1 -1
  234. streamlit/static/static/js/{number-overlay-editor.CSeVhHRU.js → number-overlay-editor.Dx0XqCkD.js} +1 -1
  235. streamlit/static/static/js/{possibleConstructorReturn.nNhsvgRd.js → possibleConstructorReturn.CVfSu9Ws.js} +1 -1
  236. streamlit/static/static/js/{sandbox.Cgm3iuL6.js → sandbox.BT0gdMXk.js} +1 -1
  237. streamlit/static/static/js/{textarea.BR8rlyih.js → textarea.DNCbrtbM.js} +2 -2
  238. streamlit/static/static/js/{timepicker.w4XhAenH.js → timepicker.4UYJD9Ts.js} +1 -1
  239. streamlit/static/static/js/{toConsumableArray.CgkEPBwD.js → toConsumableArray.DUmnaVWV.js} +1 -1
  240. streamlit/static/static/js/{uniqueId.j-1rlNNH.js → uniqueId.DUvh-GL8.js} +1 -1
  241. streamlit/static/static/js/{useBasicWidgetState.zXY9CjFS.js → useBasicWidgetState.Cwd7-jJa.js} +1 -1
  242. streamlit/static/static/js/useOnInputChange.DvemQrOM.js +1 -0
  243. streamlit/static/static/js/{withFullScreenWrapper.Ov13692o.js → withFullScreenWrapper.CiQ10ByU.js} +1 -1
  244. streamlit/static/static/media/SourceCodeVF-Italic.ttf.Ba1oaZG1.woff2 +0 -0
  245. streamlit/static/static/media/SourceCodeVF-Upright.ttf.BjWn63N-.woff2 +0 -0
  246. streamlit/static/static/media/SourceSansVF-Italic.ttf.Bt9VkdQ3.woff2 +0 -0
  247. streamlit/static/static/media/SourceSansVF-Upright.ttf.BsWL4Kly.woff2 +0 -0
  248. streamlit/static/static/media/SourceSerifVariable-Italic.ttf.CVdzAtxO.woff2 +0 -0
  249. streamlit/static/static/media/SourceSerifVariable-Roman.ttf.mdpVL9bi.woff2 +0 -0
  250. streamlit/string_util.py +14 -19
  251. streamlit/temporary_directory.py +13 -4
  252. streamlit/testing/v1/app_test.py +15 -10
  253. streamlit/testing/v1/element_tree.py +157 -178
  254. streamlit/testing/v1/local_script_runner.py +11 -15
  255. streamlit/testing/v1/util.py +11 -4
  256. streamlit/type_util.py +8 -12
  257. streamlit/url_util.py +1 -1
  258. streamlit/user_info.py +6 -5
  259. streamlit/util.py +25 -1
  260. streamlit/vendor/pympler/asizeof.py +3 -2
  261. streamlit/watcher/event_based_path_watcher.py +15 -1
  262. streamlit/watcher/folder_black_list.py +2 -2
  263. streamlit/watcher/local_sources_watcher.py +64 -18
  264. streamlit/watcher/path_watcher.py +6 -10
  265. streamlit/watcher/polling_path_watcher.py +8 -7
  266. streamlit/watcher/util.py +7 -6
  267. streamlit/web/bootstrap.py +16 -14
  268. streamlit/web/cli.py +52 -45
  269. streamlit/web/server/__init__.py +7 -3
  270. streamlit/web/server/app_static_file_handler.py +1 -1
  271. streamlit/web/server/authlib_tornado_integration.py +9 -4
  272. streamlit/web/server/browser_websocket_handler.py +8 -2
  273. streamlit/web/server/component_request_handler.py +14 -10
  274. streamlit/web/server/media_file_handler.py +14 -7
  275. streamlit/web/server/oauth_authlib_routes.py +41 -9
  276. streamlit/web/server/oidc_mixin.py +35 -17
  277. streamlit/web/server/routes.py +32 -22
  278. streamlit/web/server/server.py +6 -18
  279. streamlit/web/server/server_util.py +19 -9
  280. streamlit/web/server/stats_request_handler.py +7 -5
  281. streamlit/web/server/upload_file_request_handler.py +22 -19
  282. streamlit/web/server/websocket_headers.py +1 -1
  283. {streamlit-1.45.1.dist-info → streamlit-1.46.0.dist-info}/METADATA +4 -4
  284. streamlit-1.46.0.dist-info/RECORD +559 -0
  285. {streamlit-1.45.1.dist-info → streamlit-1.46.0.dist-info}/WHEEL +1 -1
  286. streamlit/elements/lib/event_utils.py +0 -39
  287. streamlit/static/static/js/Toolbar.D9RUZv9G.js +0 -1
  288. streamlit/static/static/js/UploadFileInfo.C-jY39rj.js +0 -1
  289. streamlit/static/static/js/index.8jhZBWF2.js +0 -3
  290. streamlit/static/static/js/index.BCx3C6e_.js +0 -1
  291. streamlit/static/static/js/index.BRuTz_S4.js +0 -1
  292. streamlit/static/static/js/index.Bcru_ti-.js +0 -1
  293. streamlit/static/static/js/index.Bl1FMJRd.js +0 -1
  294. streamlit/static/static/js/index.C1z8KpLA.js +0 -779
  295. streamlit/static/static/js/index.C32I2PUe.js +0 -2
  296. streamlit/static/static/js/index.C5GnDRB7.js +0 -1
  297. streamlit/static/static/js/index.CG4qPaaW.js +0 -2
  298. streamlit/static/static/js/index.C_msmT1u.js +0 -1
  299. streamlit/static/static/js/index.CbeNTdd6.js +0 -1
  300. streamlit/static/static/js/index.CnGQVJcw.js +0 -12
  301. streamlit/static/static/js/index.CopVVq4l.js +0 -1
  302. streamlit/static/static/js/index.CtXupx4d.js +0 -197
  303. streamlit/static/static/js/index.DGmCchO7.js +0 -1
  304. streamlit/static/static/js/index.DH6zBk0e.js +0 -1
  305. streamlit/static/static/js/index.DHVlVWsm.js +0 -1
  306. streamlit/static/static/js/index.DRKIVBoi.js +0 -1
  307. streamlit/static/static/js/index.DUd-lFXx.js +0 -73
  308. streamlit/static/static/js/index.D_uRBA4B.js +0 -1
  309. streamlit/static/static/js/index.QHNfgPJd.js +0 -1
  310. streamlit/static/static/js/index.a-RJocYL.js +0 -1
  311. streamlit/static/static/js/index.cvz4B1gy.js +0 -1
  312. streamlit/static/static/js/index.t--hEgTQ.js +0 -6
  313. streamlit/static/static/js/useOnInputChange.z04u96A8.js +0 -1
  314. streamlit/static/static/media/SourceCodePro-Bold.CFEfr7-q.woff2 +0 -0
  315. streamlit/static/static/media/SourceCodePro-BoldItalic.C-LkFXxa.woff2 +0 -0
  316. streamlit/static/static/media/SourceCodePro-Italic.CxFOx7N-.woff2 +0 -0
  317. streamlit/static/static/media/SourceCodePro-Regular.CBOlD63d.woff2 +0 -0
  318. streamlit/static/static/media/SourceCodePro-SemiBold.CFHwW3Wd.woff2 +0 -0
  319. streamlit/static/static/media/SourceCodePro-SemiBoldItalic.Cg2yRu82.woff2 +0 -0
  320. streamlit/static/static/media/SourceSansPro-Bold.-6c9oR8J.woff2 +0 -0
  321. streamlit/static/static/media/SourceSansPro-BoldItalic.DmM_grLY.woff2 +0 -0
  322. streamlit/static/static/media/SourceSansPro-Italic.I1ipWe7Q.woff2 +0 -0
  323. streamlit/static/static/media/SourceSansPro-Regular.DZLUzqI4.woff2 +0 -0
  324. streamlit/static/static/media/SourceSansPro-SemiBold.sKQIyTMz.woff2 +0 -0
  325. streamlit/static/static/media/SourceSansPro-SemiBoldItalic.C0wP0icr.woff2 +0 -0
  326. streamlit/static/static/media/SourceSerifPro-Bold.8TUnKj4x.woff2 +0 -0
  327. streamlit/static/static/media/SourceSerifPro-BoldItalic.CBVO7Ve7.woff2 +0 -0
  328. streamlit/static/static/media/SourceSerifPro-Italic.DkFgL2HZ.woff2 +0 -0
  329. streamlit/static/static/media/SourceSerifPro-Regular.CNJNET2S.woff2 +0 -0
  330. streamlit/static/static/media/SourceSerifPro-SemiBold.CHyh9GC5.woff2 +0 -0
  331. streamlit/static/static/media/SourceSerifPro-SemiBoldItalic.CBtz8sWN.woff2 +0 -0
  332. streamlit-1.45.1.dist-info/RECORD +0 -568
  333. {streamlit-1.45.1.data → streamlit-1.46.0.data}/scripts/streamlit.cmd +0 -0
  334. {streamlit-1.45.1.dist-info → streamlit-1.46.0.dist-info}/entry_points.txt +0 -0
  335. {streamlit-1.45.1.dist-info → streamlit-1.46.0.dist-info}/top_level.txt +0 -0
@@ -16,8 +16,15 @@ from __future__ import annotations
16
16
  from textwrap import dedent
17
17
  from typing import TYPE_CHECKING, Any, Callable, Generic, Literal, cast, overload
18
18
 
19
+ from typing_extensions import Never
20
+
19
21
  from streamlit.dataframe_util import OptionSequence, convert_anything_to_list
20
22
  from streamlit.elements.lib.form_utils import current_form_id
23
+ from streamlit.elements.lib.layout_utils import (
24
+ LayoutConfig,
25
+ WidthWithoutContent,
26
+ validate_width,
27
+ )
21
28
  from streamlit.elements.lib.options_selector_utils import (
22
29
  create_mappings,
23
30
  index_,
@@ -70,7 +77,7 @@ class SelectboxSerde(Generic[T]):
70
77
  formatted_options: list[str],
71
78
  formatted_option_to_option_index: dict[str, int],
72
79
  default_option_index: int | None = None,
73
- ):
80
+ ) -> None:
74
81
  """Initialize the SelectboxSerde.
75
82
 
76
83
  We do not store an option_to_formatted_option mapping because the generic
@@ -115,11 +122,7 @@ class SelectboxSerde(Generic[T]):
115
122
  # options
116
123
  return cast("str", v)
117
124
 
118
- def deserialize(
119
- self,
120
- ui_value: str | None,
121
- widget_id: str = "",
122
- ) -> T | str | None:
125
+ def deserialize(self, ui_value: str | None) -> T | str | None:
123
126
  # check if the option is pointing to a generic option type T,
124
127
  # otherwise return the option itself
125
128
  if ui_value is None:
@@ -134,6 +137,26 @@ class SelectboxSerde(Generic[T]):
134
137
 
135
138
 
136
139
  class SelectboxMixin:
140
+ @overload
141
+ def selectbox(
142
+ self,
143
+ label: str,
144
+ options: Sequence[Never], # Type for empty or Never-inferred options
145
+ index: int = 0,
146
+ format_func: Callable[[Any], str] = str,
147
+ key: Key | None = None,
148
+ help: str | None = None,
149
+ on_change: WidgetCallback | None = None,
150
+ args: WidgetArgs | None = None,
151
+ kwargs: WidgetKwargs | None = None,
152
+ *, # keyword-only arguments:
153
+ placeholder: str | None = None,
154
+ disabled: bool = False,
155
+ label_visibility: LabelVisibility = "visible",
156
+ accept_new_options: Literal[False] = False,
157
+ width: WidthWithoutContent = "stretch",
158
+ ) -> None: ... # Returns None if options is empty and accept_new_options is False
159
+
137
160
  @overload
138
161
  def selectbox(
139
162
  self,
@@ -151,6 +174,7 @@ class SelectboxMixin:
151
174
  disabled: bool = False,
152
175
  label_visibility: LabelVisibility = "visible",
153
176
  accept_new_options: Literal[False] = False,
177
+ width: WidthWithoutContent = "stretch",
154
178
  ) -> T: ...
155
179
 
156
180
  @overload
@@ -170,6 +194,7 @@ class SelectboxMixin:
170
194
  disabled: bool = False,
171
195
  label_visibility: LabelVisibility = "visible",
172
196
  accept_new_options: Literal[True] = True,
197
+ width: WidthWithoutContent = "stretch",
173
198
  ) -> T | str: ...
174
199
 
175
200
  @overload
@@ -189,6 +214,7 @@ class SelectboxMixin:
189
214
  disabled: bool = False,
190
215
  label_visibility: LabelVisibility = "visible",
191
216
  accept_new_options: Literal[False] = False,
217
+ width: WidthWithoutContent = "stretch",
192
218
  ) -> T | None: ...
193
219
 
194
220
  @overload
@@ -208,6 +234,7 @@ class SelectboxMixin:
208
234
  disabled: bool = False,
209
235
  label_visibility: LabelVisibility = "visible",
210
236
  accept_new_options: Literal[True] = True,
237
+ width: WidthWithoutContent = "stretch",
211
238
  ) -> T | str | None: ...
212
239
 
213
240
  @overload
@@ -227,6 +254,7 @@ class SelectboxMixin:
227
254
  disabled: bool = False,
228
255
  label_visibility: LabelVisibility = "visible",
229
256
  accept_new_options: bool = False,
257
+ width: WidthWithoutContent = "stretch",
230
258
  ) -> T | str | None: ...
231
259
 
232
260
  @gather_metrics("selectbox")
@@ -246,6 +274,7 @@ class SelectboxMixin:
246
274
  disabled: bool = False,
247
275
  label_visibility: LabelVisibility = "visible",
248
276
  accept_new_options: bool = False,
277
+ width: WidthWithoutContent = "stretch",
249
278
  ) -> T | str | None:
250
279
  r"""Display a select widget.
251
280
 
@@ -330,7 +359,7 @@ class SelectboxMixin:
330
359
  label_visibility : "visible", "hidden", or "collapsed"
331
360
  The visibility of the label. The default is ``"visible"``. If this
332
361
  is ``"hidden"``, Streamlit displays an empty spacer instead of the
333
- label, which can help keep the widget alligned with other widgets.
362
+ label, which can help keep the widget aligned with other widgets.
334
363
  If this is ``"collapsed"``, Streamlit displays no label or spacer.
335
364
 
336
365
  accept_new_options : bool
@@ -344,6 +373,17 @@ class SelectboxMixin:
344
373
  Streamlit will use a case-insensitive match from ``options`` before
345
374
  adding a new item.
346
375
 
376
+ width : "stretch" or int
377
+ The width of the selectbox widget. This can be one of the
378
+ following:
379
+
380
+ - ``"stretch"`` (default): The width of the widget matches the
381
+ width of the parent container.
382
+ - An integer specifying the width in pixels: The widget has a
383
+ fixed width. If the specified width is greater than the width of
384
+ the parent container, the width of the widget matches the width
385
+ of the parent container.
386
+
347
387
  Returns
348
388
  -------
349
389
  any
@@ -425,6 +465,7 @@ class SelectboxMixin:
425
465
  disabled=disabled,
426
466
  label_visibility=label_visibility,
427
467
  accept_new_options=accept_new_options,
468
+ width=width,
428
469
  ctx=ctx,
429
470
  )
430
471
 
@@ -444,6 +485,7 @@ class SelectboxMixin:
444
485
  disabled: bool = False,
445
486
  label_visibility: LabelVisibility = "visible",
446
487
  accept_new_options: bool = False,
488
+ width: WidthWithoutContent = "stretch",
447
489
  ctx: ScriptRunContext | None = None,
448
490
  ) -> T | str | None:
449
491
  key = to_key(key)
@@ -461,7 +503,7 @@ class SelectboxMixin:
461
503
 
462
504
  if not isinstance(index, int) and index is not None:
463
505
  raise StreamlitAPIException(
464
- "Selectbox Value has invalid type: %s" % type(index).__name__
506
+ f"Selectbox Value has invalid type: {type(index).__name__}"
465
507
  )
466
508
 
467
509
  if index is not None and len(opt) > 0 and not 0 <= index < len(opt):
@@ -485,12 +527,14 @@ class SelectboxMixin:
485
527
  "selectbox",
486
528
  user_key=key,
487
529
  form_id=current_form_id(self.dg),
530
+ dg=self.dg,
488
531
  label=label,
489
532
  options=formatted_options,
490
533
  index=index,
491
534
  help=help,
492
535
  placeholder=placeholder,
493
536
  accept_new_options=accept_new_options,
537
+ width=width,
494
538
  )
495
539
 
496
540
  session_state = get_session_state().filtered_state
@@ -538,9 +582,12 @@ class SelectboxMixin:
538
582
  selectbox_proto.raw_value = serialized_value
539
583
  selectbox_proto.set_value = True
540
584
 
585
+ validate_width(width)
586
+ layout_config = LayoutConfig(width=width)
587
+
541
588
  if ctx:
542
589
  save_for_app_testing(ctx, element_id, format_func)
543
- self.dg._enqueue("selectbox", selectbox_proto)
590
+ self.dg._enqueue("selectbox", selectbox_proto, layout_config=layout_config)
544
591
  return widget_state.value
545
592
 
546
593
  @property