streamlit 1.45.1__py3-none-any.whl → 1.46.1__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.DitPpe1Y.js} +1 -1
  178. streamlit/static/static/js/{FileDownload.esm.P9rKwKo8.js → FileDownload.esm.AI3watX9.js} +1 -1
  179. streamlit/static/static/js/{FileHelper.D7RMkx0e.js → FileHelper.kt7mhnu8.js} +5 -5
  180. streamlit/static/static/js/{FormClearHelper.B67tgll0.js → FormClearHelper.D1M9GM_c.js} +1 -1
  181. streamlit/static/static/js/{Hooks.ncTJktu9.js → Hooks.BGwHKeUc.js} +1 -1
  182. streamlit/static/static/js/{InputInstructions.D-Y8geDN.js → InputInstructions.DaZ89mzH.js} +1 -1
  183. streamlit/static/static/js/{ProgressBar.B-kexwwD.js → ProgressBar.C0zPMe-p.js} +2 -2
  184. streamlit/static/static/js/{RenderInPortalIfExists.BgaoZgep.js → RenderInPortalIfExists.Ox8gQvdz.js} +1 -1
  185. streamlit/static/static/js/Toolbar.KhlcEc0K.js +1 -0
  186. streamlit/static/static/js/UploadFileInfo.0DCkpDDf.js +6 -0
  187. streamlit/static/static/js/{base-input.BoAa1U94.js → base-input.BJ4qsfSq.js} +4 -4
  188. streamlit/static/static/js/{checkbox.Z6iSfe5F.js → checkbox.DSDh78Xz.js} +2 -2
  189. streamlit/static/static/js/{createSuper.B4oGDYRm.js → createSuper.wQ9SIXEJ.js} +1 -1
  190. streamlit/static/static/js/{data-grid-overlay-editor.msYws2Ou.js → data-grid-overlay-editor.DvbdPJ15.js} +1 -1
  191. streamlit/static/static/js/{downloader.kc14n2Hv.js → downloader.CD9rzih5.js} +1 -1
  192. streamlit/static/static/js/{es6.CxQz807-.js → es6.48Q9Qjgb.js} +2 -2
  193. streamlit/static/static/js/{iframeResizer.contentWindow.B19u0ONI.js → iframeResizer.contentWindow.CKdem3Bn.js} +1 -1
  194. streamlit/static/static/js/{index.LaIasviC.js → index.6md5Qhod.js} +1 -1
  195. streamlit/static/static/js/index.7hy6AeJ1.js +1 -0
  196. streamlit/static/static/js/index.B4CGJiBW.js +1 -0
  197. streamlit/static/static/js/index.B8oW0ZTD.js +1 -0
  198. streamlit/static/static/js/index.BU6RnlHI.js +73 -0
  199. streamlit/static/static/js/index.BUq9Wcf8.js +197 -0
  200. streamlit/static/static/js/{index.BFz9U2y0.js → index.BXXo-Yoj.js} +1 -1
  201. streamlit/static/static/js/index.Bae9H0OS.js +1 -0
  202. streamlit/static/static/js/{index.-5ruC9At.js → index.BhTl2Uyb.js} +1 -1
  203. streamlit/static/static/js/{index.BpILzHf_.js → index.BiSaCB1o.js} +20 -20
  204. streamlit/static/static/js/{index.xNQq3Ei5.js → index.BulSAJ9z.js} +1 -1
  205. streamlit/static/static/js/{index.9V1KdxfP.js → index.Bv-EuTKR.js} +1 -1
  206. streamlit/static/static/js/index.BvMLYCHi.js +1 -0
  207. streamlit/static/static/js/index.C1NIn1Y2.js +783 -0
  208. streamlit/static/static/js/index.CP-fthOJ.js +2 -0
  209. streamlit/static/static/js/{index.BoigZiu7.js → index.CS9guO3p.js} +1 -1
  210. streamlit/static/static/js/index.CYTBHth8.js +1 -0
  211. streamlit/static/static/js/{index.CmTAF0dM.js → index.CcJufcuD.js} +1 -1
  212. streamlit/static/static/js/index.CnENU1yn.js +1 -0
  213. streamlit/static/static/js/index.Cns13qBb.js +1 -0
  214. streamlit/static/static/js/index.Ct_xXq7w.js +1 -0
  215. streamlit/static/static/js/{index.BqfdT8-Q.js → index.CxGSemHL.js} +1 -1
  216. streamlit/static/static/js/index.D5S0ldVb.js +1 -0
  217. streamlit/static/static/js/index.D72B_ksb.js +2 -0
  218. streamlit/static/static/js/index.DI4yZ27M.js +1 -0
  219. streamlit/static/static/js/index.DN51vLxR.js +1 -0
  220. streamlit/static/static/js/index.DRtq5dka.js +1 -0
  221. streamlit/static/static/js/{index.BHXxWdde.js → index.DX-oiXlb.js} +1 -1
  222. streamlit/static/static/js/index.DlFE4_Aq.js +12 -0
  223. streamlit/static/static/js/{index.BHGGDa8K.js → index.J7BJwXOi.js} +2 -2
  224. streamlit/static/static/js/index.Jg38kJPP.js +1 -0
  225. streamlit/static/static/js/index.JhIO6abf.js +3 -0
  226. streamlit/static/static/js/{index.DeB9iKFW.js → index.NkRcWwc5.js} +255 -255
  227. streamlit/static/static/js/{index.BGga-hcS.js → index.prekPLrm.js} +25 -25
  228. streamlit/static/static/js/{index.BRXmLIsC.js → index.wyzngKUE.js} +1 -1
  229. streamlit/static/static/js/index.xW7mVdI8.js +1 -0
  230. streamlit/static/static/js/index.yk07dYGx.js +1 -0
  231. streamlit/static/static/js/{input.DsCfafm0.js → input.CxKZ5Wrc.js} +2 -2
  232. streamlit/static/static/js/{memory.nY_lMTtu.js → memory.DeZ9VUvl.js} +1 -1
  233. streamlit/static/static/js/{mergeWith.B_7zmsM4.js → mergeWith.CVkhrWUb.js} +1 -1
  234. streamlit/static/static/js/{number-overlay-editor.CSeVhHRU.js → number-overlay-editor.Bpkm3nTq.js} +1 -1
  235. streamlit/static/static/js/{possibleConstructorReturn.nNhsvgRd.js → possibleConstructorReturn.CIDCId52.js} +1 -1
  236. streamlit/static/static/js/{sandbox.Cgm3iuL6.js → sandbox.TrkMaokR.js} +1 -1
  237. streamlit/static/static/js/{textarea.BR8rlyih.js → textarea.QKjxR64N.js} +2 -2
  238. streamlit/static/static/js/{timepicker.w4XhAenH.js → timepicker.DJYmE1dK.js} +1 -1
  239. streamlit/static/static/js/{toConsumableArray.CgkEPBwD.js → toConsumableArray.BZoworE-.js} +1 -1
  240. streamlit/static/static/js/{uniqueId.j-1rlNNH.js → uniqueId.O0UbJ2Bu.js} +1 -1
  241. streamlit/static/static/js/{useBasicWidgetState.zXY9CjFS.js → useBasicWidgetState.Ci89jaH5.js} +1 -1
  242. streamlit/static/static/js/useOnInputChange.Cxh6ExEn.js +1 -0
  243. streamlit/static/static/js/{withFullScreenWrapper.Ov13692o.js → withFullScreenWrapper.iW37lS8Z.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 +21 -2
  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 +13 -24
  279. streamlit/web/server/server_util.py +43 -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.1.dist-info}/METADATA +4 -4
  284. streamlit-1.46.1.dist-info/RECORD +559 -0
  285. {streamlit-1.45.1.dist-info → streamlit-1.46.1.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.1.data}/scripts/streamlit.cmd +0 -0
  334. {streamlit-1.45.1.dist-info → streamlit-1.46.1.dist-info}/entry_points.txt +0 -0
  335. {streamlit-1.45.1.dist-info → streamlit-1.46.1.dist-info}/top_level.txt +0 -0
@@ -37,7 +37,6 @@ from streamlit.elements.lib.column_config_utils import (
37
37
  process_config_mapping,
38
38
  update_column_config,
39
39
  )
40
- from streamlit.elements.lib.event_utils import AttributeDictionary
41
40
  from streamlit.elements.lib.form_utils import current_form_id
42
41
  from streamlit.elements.lib.pandas_styler_utils import marshall_styler
43
42
  from streamlit.elements.lib.policies import check_widget_policies
@@ -51,6 +50,7 @@ from streamlit.runtime.scriptrunner_utils.script_run_context import (
51
50
  get_script_run_ctx,
52
51
  )
53
52
  from streamlit.runtime.state import WidgetCallback, register_widget
53
+ from streamlit.util import AttributeDictionary
54
54
 
55
55
  if TYPE_CHECKING:
56
56
  from collections.abc import Hashable, Iterable
@@ -93,7 +93,7 @@ class DataframeSelectionState(TypedDict, total=False):
93
93
  The selected rows, identified by their integer position. The integer
94
94
  positions match the original dataframe, even if the user sorts the
95
95
  dataframe in their browser. For a ``pandas.DataFrame``, you can
96
- retrieve data from its interger position using methods like ``.iloc[]``
96
+ retrieve data from its integer position using methods like ``.iloc[]``
97
97
  or ``.iat[]``.
98
98
  columns : list[str]
99
99
  The selected columns, identified by their names.
@@ -160,7 +160,7 @@ class DataframeState(TypedDict, total=False):
160
160
  class DataframeSelectionSerde:
161
161
  """DataframeSelectionSerde is used to serialize and deserialize the dataframe selection state."""
162
162
 
163
- def deserialize(self, ui_value: str | None, widget_id: str = "") -> DataframeState:
163
+ def deserialize(self, ui_value: str | None) -> DataframeState:
164
164
  empty_selection_state: DataframeState = {
165
165
  "selection": {
166
166
  "rows": [],
@@ -208,14 +208,14 @@ def parse_selection_mode(
208
208
  )
209
209
 
210
210
  parsed_selection_modes = []
211
- for selection_mode in selection_mode_set:
212
- if selection_mode == "single-row":
211
+ for mode in selection_mode_set:
212
+ if mode == "single-row":
213
213
  parsed_selection_modes.append(ArrowProto.SelectionMode.SINGLE_ROW)
214
- elif selection_mode == "multi-row":
214
+ elif mode == "multi-row":
215
215
  parsed_selection_modes.append(ArrowProto.SelectionMode.MULTI_ROW)
216
- elif selection_mode == "single-column":
216
+ elif mode == "single-column":
217
217
  parsed_selection_modes.append(ArrowProto.SelectionMode.SINGLE_COLUMN)
218
- elif selection_mode == "multi-column":
218
+ elif mode == "multi-column":
219
219
  parsed_selection_modes.append(ArrowProto.SelectionMode.MULTI_COLUMN)
220
220
  return set(parsed_selection_modes)
221
221
 
@@ -327,7 +327,7 @@ class ArrowMixin:
327
327
  Desired height of the dataframe expressed in pixels. If ``height``
328
328
  is ``None`` (default), Streamlit sets the height to show at most
329
329
  ten rows. Vertical scrolling within the dataframe element is
330
- enabled when the height does not accomodate all rows.
330
+ enabled when the height does not accommodate all rows.
331
331
 
332
332
  use_container_width : bool
333
333
  Whether to override ``width`` with the width of the parent
@@ -370,7 +370,7 @@ class ArrowMixin:
370
370
 
371
371
  - A column type within ``st.column_config``: Streamlit applies the
372
372
  defined configuration to the column. For example, use
373
- ``st.column_config.NumberColumn("Dollar values”, format=”$ %d")``
373
+ ``st.column_config.NumberColumn("Dollar values", format="$ %d")``
374
374
  to change the displayed name of the column to "Dollar values"
375
375
  and add a "$" prefix in each cell. For more info on the
376
376
  available column types and config options, see
@@ -563,7 +563,7 @@ class ArrowMixin:
563
563
  if use_container_width is None:
564
564
  # If use_container_width was not explicitly set by the user, we set
565
565
  # it to True if width was not set explicitly, and False otherwise.
566
- use_container_width = True if width is None else False
566
+ use_container_width = width is None
567
567
 
568
568
  proto.use_container_width = use_container_width
569
569
 
@@ -623,6 +623,7 @@ class ArrowMixin:
623
623
  "dataframe",
624
624
  user_key=key,
625
625
  form_id=proto.form_id,
626
+ dg=self.dg,
626
627
  data=proto.data,
627
628
  width=width,
628
629
  height=height,
@@ -645,8 +646,7 @@ class ArrowMixin:
645
646
  )
646
647
  self.dg._enqueue("arrow_data_frame", proto)
647
648
  return cast("DataframeState", widget_state.value)
648
- else:
649
- return self.dg._enqueue("arrow_data_frame", proto)
649
+ return self.dg._enqueue("arrow_data_frame", proto)
650
650
 
651
651
  @gather_metrics("table")
652
652
  def table(self, data: Data = None) -> DeltaGenerator:
@@ -733,7 +733,7 @@ class ArrowMixin:
733
733
  return self.dg._enqueue("arrow_table", proto)
734
734
 
735
735
  @gather_metrics("add_rows")
736
- def add_rows(self, data: Data = None, **kwargs) -> DeltaGenerator | None:
736
+ def add_rows(self, data: Data = None, **kwargs: Any) -> DeltaGenerator | None:
737
737
  """Concatenate a dataframe to the bottom of the current one.
738
738
 
739
739
  Parameters
@@ -789,7 +789,7 @@ class ArrowMixin:
789
789
  ... )
790
790
  >>> my_chart.add_rows(some_fancy_name=df2) # <-- name used as keyword
791
791
 
792
- """
792
+ """ # noqa: E501
793
793
  return _arrow_add_rows(self.dg, data, **kwargs)
794
794
 
795
795
  @property
@@ -823,9 +823,7 @@ def _prep_data_for_add_rows(
823
823
  def _arrow_add_rows(
824
824
  dg: DeltaGenerator,
825
825
  data: Data = None,
826
- **kwargs: (
827
- DataFrame | npt.NDArray[Any] | Iterable[Any] | dict[Hashable, Any] | None
828
- ),
826
+ **kwargs: DataFrame | npt.NDArray[Any] | Iterable[Any] | dict[Hashable, Any] | None,
829
827
  ) -> DeltaGenerator | None:
830
828
  """Concatenate a dataframe to the bottom of the current one.
831
829
 
@@ -909,6 +907,25 @@ def _arrow_add_rows(
909
907
  and dg._cursor.props["add_rows_metadata"].last_index is None
910
908
  ):
911
909
  st_method = getattr(dg, dg._cursor.props["add_rows_metadata"].chart_command)
910
+ metadata = dg._cursor.props["add_rows_metadata"]
911
+
912
+ # Pass the styling properties stored in add_rows_metadata
913
+ # to the new element call.
914
+ kwargs = {}
915
+ if metadata.color is not None:
916
+ kwargs["color"] = metadata.color
917
+ if metadata.width is not None:
918
+ kwargs["width"] = metadata.width
919
+ if metadata.height is not None:
920
+ kwargs["height"] = metadata.height
921
+ if metadata.stack is not None:
922
+ kwargs["stack"] = metadata.stack
923
+
924
+ if metadata.chart_command == "bar_chart":
925
+ kwargs["horizontal"] = metadata.horizontal
926
+
927
+ kwargs["use_container_width"] = metadata.use_container_width
928
+
912
929
  st_method(data, **kwargs)
913
930
  return None
914
931
 
@@ -948,14 +965,15 @@ def marshall(proto: ArrowProto, data: Data, default_uuid: str | None = None) ->
948
965
  This attribute is optional and only used for pandas.Styler, other elements
949
966
  (e.g. charts) can ignore it.
950
967
 
951
- """
968
+ """ # noqa: E501
952
969
 
953
970
  if dataframe_util.is_pandas_styler(data):
954
971
  # default_uuid is a string only if the data is a `Styler`,
955
972
  # and `None` otherwise.
956
- assert isinstance(default_uuid, str), (
957
- "Default UUID must be a string for Styler data."
958
- )
973
+ if not isinstance(default_uuid, str):
974
+ raise StreamlitAPIException(
975
+ "Default UUID must be a string for Styler data."
976
+ )
959
977
  marshall_styler(proto, data, default_uuid)
960
978
 
961
979
  proto.data = dataframe_util.convert_anything_to_arrow_bytes(data)
@@ -14,11 +14,17 @@
14
14
 
15
15
  from __future__ import annotations
16
16
 
17
- from typing import TYPE_CHECKING, cast
18
-
17
+ import re
18
+ from typing import TYPE_CHECKING, Literal, cast
19
+
20
+ from streamlit.elements.lib.layout_utils import (
21
+ LayoutConfig,
22
+ WidthWithoutContent,
23
+ validate_height,
24
+ validate_width,
25
+ )
19
26
  from streamlit.proto.Code_pb2 import Code as CodeProto
20
27
  from streamlit.runtime.metrics_util import gather_metrics
21
- from streamlit.string_util import clean_text
22
28
 
23
29
  if TYPE_CHECKING:
24
30
  from streamlit.delta_generator import DeltaGenerator
@@ -34,7 +40,8 @@ class CodeMixin:
34
40
  *,
35
41
  line_numbers: bool = False,
36
42
  wrap_lines: bool = False,
37
- height: int | None = None,
43
+ height: int | Literal["content"] | None = "content",
44
+ width: WidthWithoutContent = "stretch",
38
45
  ) -> DeltaGenerator:
39
46
  """Display a code block with optional syntax highlighting.
40
47
 
@@ -61,11 +68,31 @@ class CodeMixin:
61
68
  An optional boolean indicating whether to wrap lines. This defaults
62
69
  to ``False``.
63
70
 
64
- height : int or None
65
- Desired height of the code block expressed in pixels. If ``height``
66
- is ``None`` (default), Streamlit sets the element's height to fit
67
- its content. Vertical scrolling within the element is enabled when
68
- the height does not accomodate all lines.
71
+ height : "content" or int
72
+ The height of the code block element. This can be one of the following:
73
+
74
+ - ``"content"`` (default): The height of the element matches the
75
+ height of its content.
76
+ - An integer specifying the height in pixels: The element has a
77
+ fixed height. If the content is larger than the specified
78
+ height, scrolling is enabled.
79
+
80
+ .. note::
81
+ Use scrolling containers sparingly. If you use scrolling
82
+ containers, avoid heights that exceed 500 pixels. Otherwise,
83
+ the scroll surface of the container might cover the majority of
84
+ the screen on mobile devices, which makes it hard to scroll the
85
+ rest of the app.
86
+
87
+ width : "stretch" or int
88
+ The width of the code block element. This can be one of the following:
89
+
90
+ - ``"stretch"`` (default): The width of the element matches the
91
+ width of the parent container.
92
+ - An integer specifying the width in pixels: The element has a
93
+ fixed width. If the specified width is greater than the width of
94
+ the parent container, the width of the element matches the width
95
+ of the parent container.
69
96
 
70
97
  Examples
71
98
  --------
@@ -100,13 +127,19 @@ class CodeMixin:
100
127
  height: 380px
101
128
  """
102
129
  code_proto = CodeProto()
103
- code_proto.code_text = clean_text(body)
130
+ code_proto.code_text = re.sub(r"\n\Z", "", re.sub(r"\A\n", "", str(body)))
104
131
  code_proto.language = language or "plaintext"
105
132
  code_proto.show_line_numbers = line_numbers
106
133
  code_proto.wrap_lines = wrap_lines
107
- if height:
108
- code_proto.height = height
109
- return self.dg._enqueue("code", code_proto)
134
+
135
+ if height is None:
136
+ height = "content"
137
+ else:
138
+ validate_height(height, allow_content=True)
139
+ validate_width(width)
140
+ layout_config = LayoutConfig(height=height, width=width)
141
+
142
+ return self.dg._enqueue("code", code_proto, layout_config=layout_config)
110
143
 
111
144
  @property
112
145
  def dg(self) -> DeltaGenerator:
@@ -29,7 +29,6 @@ from typing import (
29
29
  from typing_extensions import TypeAlias
30
30
 
31
31
  from streamlit import config
32
- from streamlit.elements.lib.event_utils import AttributeDictionary
33
32
  from streamlit.elements.lib.form_utils import current_form_id
34
33
  from streamlit.elements.lib.policies import check_widget_policies
35
34
  from streamlit.elements.lib.utils import Key, compute_and_register_element_id, to_key
@@ -41,6 +40,7 @@ from streamlit.runtime.state import (
41
40
  WidgetCallback,
42
41
  register_widget,
43
42
  )
43
+ from streamlit.util import AttributeDictionary
44
44
 
45
45
  if TYPE_CHECKING:
46
46
  from collections.abc import Iterable, Mapping
@@ -91,10 +91,10 @@ def parse_selection_mode(
91
91
  )
92
92
 
93
93
  parsed_selection_modes = []
94
- for selection_mode in selection_mode_set:
95
- if selection_mode == "single-object":
94
+ for mode in selection_mode_set:
95
+ if mode == "single-object":
96
96
  parsed_selection_modes.append(PydeckProto.SelectionMode.SINGLE_OBJECT)
97
- elif selection_mode == "multi-object":
97
+ elif mode == "multi-object":
98
98
  parsed_selection_modes.append(PydeckProto.SelectionMode.MULTI_OBJECT)
99
99
  return set(parsed_selection_modes)
100
100
 
@@ -233,7 +233,7 @@ class PydeckState(TypedDict, total=False):
233
233
  class PydeckSelectionSerde:
234
234
  """PydeckSelectionSerde is used to serialize and deserialize the Pydeck selection state."""
235
235
 
236
- def deserialize(self, ui_value: str | None, widget_id: str = "") -> PydeckState:
236
+ def deserialize(self, ui_value: str | None) -> PydeckState:
237
237
  empty_selection_state: PydeckState = {
238
238
  "selection": {
239
239
  "indices": {},
@@ -268,8 +268,9 @@ class PydeckMixin:
268
268
  height: int | None = None,
269
269
  selection_mode: Literal[
270
270
  "single-object"
271
- ], # Selection mode will only be activated by on_select param, this is a default value here to make it work with mypy
272
- on_select: Literal["ignore"], # No default value here to make it work with mypy
271
+ ], # Selection mode will only be activated by on_select param; default value here to make it work with mypy
272
+ # No default value here to make it work with mypy
273
+ on_select: Literal["ignore"],
273
274
  key: Key | None = None,
274
275
  ) -> DeltaGenerator: ...
275
276
 
@@ -308,21 +309,26 @@ class PydeckMixin:
308
309
  - DeckGL docs: https://github.com/uber/deck.gl/tree/master/docs
309
310
  - DeckGL JSON docs: https://github.com/uber/deck.gl/tree/master/modules/json
310
311
 
311
- When using this command, Mapbox provides the map tiles to render map
312
- content. Note that Mapbox is a third-party product and Streamlit accepts
313
- no responsibility or liability of any kind for Mapbox or for any content
314
- or information made available by Mapbox.
312
+ When using this command, a service called Carto_ provides the map tiles to render
313
+ map content. If you're using advanced PyDeck features you may need to obtain
314
+ an API key from Carto first. You can do that as
315
+ ``pydeck.Deck(api_keys={"carto": YOUR_KEY})`` or by setting the CARTO_API_KEY
316
+ environment variable. See `PyDeck's documentation`_ for more information.
315
317
 
316
- Mapbox requires users to register and provide a token before users can
317
- request map tiles. Currently, Streamlit provides this token for you, but
318
- this could change at any time. We strongly recommend all users create and
319
- use their own personal Mapbox token to avoid any disruptions to their
320
- experience. You can do this with the ``mapbox.token`` config option. The
321
- use of Mapbox is governed by Mapbox's Terms of Use.
318
+ Another common provider for map tiles is Mapbox_. If you prefer to use that,
319
+ you'll need to create an account at https://mapbox.com and specify your Mapbox
320
+ key when creating the ``pydeck.Deck`` object. You can do that as
321
+ ``pydeck.Deck(api_keys={"mapbox": YOUR_KEY})`` or by setting the MAPBOX_API_KEY
322
+ environment variable.
322
323
 
323
- To get a token for yourself, create an account at https://mapbox.com.
324
- For more info on how to set config options, see
325
- https://docs.streamlit.io/develop/api-reference/configuration/config.toml.
324
+ .. _Carto: https://carto.com
325
+ .. _Mapbox: https://mapbox.com
326
+ .. _PyDeck's documentation: https://deckgl.readthedocs.io/en/latest/deck.html
327
+
328
+ Carto and Mapbox are third-party products and Streamlit accepts no responsibility
329
+ or liability of any kind for Carto or Mapbox, or for any content or information
330
+ made available by Carto or Mapbox. The use of Carto or Mapbox is governed by
331
+ their respective Terms of Use.
326
332
 
327
333
  Parameters
328
334
  ----------
@@ -408,7 +414,7 @@ class PydeckMixin:
408
414
  >>>
409
415
  >>> st.pydeck_chart(
410
416
  ... pdk.Deck(
411
- ... map_style=None,
417
+ ... map_style=None, # Use Streamlit theme to pick map style
412
418
  ... initial_view_state=pdk.ViewState(
413
419
  ... latitude=37.76,
414
420
  ... longitude=-122.4,
@@ -450,10 +456,7 @@ class PydeckMixin:
450
456
 
451
457
  ctx = get_script_run_ctx()
452
458
 
453
- if pydeck_obj is None:
454
- spec = json.dumps(EMPTY_MAP)
455
- else:
456
- spec = pydeck_obj.to_json()
459
+ spec = json.dumps(EMPTY_MAP) if pydeck_obj is None else pydeck_obj.to_json()
457
460
 
458
461
  pydeck_proto.json = spec
459
462
  pydeck_proto.use_container_width = use_container_width
@@ -467,7 +470,13 @@ class PydeckMixin:
467
470
  if tooltip:
468
471
  pydeck_proto.tooltip = json.dumps(tooltip)
469
472
 
470
- mapbox_token = config.get_option("mapbox.token")
473
+ # Get the Mapbox key from the PyDeck object first, and then fallback to the
474
+ # old mapbox.token config option.
475
+
476
+ mapbox_token = getattr(pydeck_obj, "mapbox_key", None)
477
+ if mapbox_token is None or mapbox_token == "":
478
+ mapbox_token = config.get_option("mapbox.token")
479
+
471
480
  if mapbox_token:
472
481
  pydeck_proto.mapbox_token = mapbox_token
473
482
 
@@ -476,7 +485,8 @@ class PydeckMixin:
476
485
 
477
486
  if on_select not in ["ignore", "rerun"] and not callable(on_select):
478
487
  raise StreamlitAPIException(
479
- f"You have passed {on_select} to `on_select`. But only 'ignore', 'rerun', or a callable is supported."
488
+ f"You have passed {on_select} to `on_select`. "
489
+ "But only 'ignore', 'rerun', or a callable is supported."
480
490
  )
481
491
 
482
492
  if is_selection_activated:
@@ -498,6 +508,7 @@ class PydeckMixin:
498
508
  pydeck_proto.id = compute_and_register_element_id(
499
509
  "deck_gl_json_chart",
500
510
  user_key=key,
511
+ dg=self.dg,
501
512
  is_selection_activated=is_selection_activated,
502
513
  selection_mode=selection_mode,
503
514
  use_container_width=use_container_width,
@@ -15,7 +15,7 @@
15
15
  from __future__ import annotations
16
16
 
17
17
  from functools import wraps
18
- from typing import TYPE_CHECKING, Callable, TypeVar, cast, overload
18
+ from typing import TYPE_CHECKING, Any, Callable, TypeVar, cast, overload
19
19
 
20
20
  from streamlit.delta_generator_singletons import (
21
21
  get_dg_singleton_instance,
@@ -74,7 +74,7 @@ def _dialog_decorator(
74
74
  )
75
75
 
76
76
  @wraps(non_optional_func)
77
- def wrap(*args, **kwargs) -> None:
77
+ def wrap(*args: Any, **kwargs: Any) -> None:
78
78
  _assert_no_nested_dialogs()
79
79
  # Call the Dialog on the event_dg because it lives outside of the normal
80
80
  # Streamlit UI flow. For example, if it is called from the sidebar, it should
@@ -97,7 +97,6 @@ def _dialog_decorator(
97
97
  # if the dialog should be closed, st.rerun() has to be called
98
98
  # (same behavior as with st.fragment)
99
99
  _ = non_optional_func(*args, **kwargs)
100
- return None
101
100
 
102
101
  # the fragment decorator has multiple return types so that you can pass
103
102
  # arguments to it. Here we know the return type, so we cast
@@ -110,7 +109,7 @@ def _dialog_decorator(
110
109
 
111
110
  with dialog:
112
111
  fragmented_dialog_content()
113
- return None
112
+ return
114
113
 
115
114
  return cast("F", wrap)
116
115