streamlit 1.53.1__py3-none-any.whl → 1.54.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 (309) hide show
  1. streamlit/__init__.py +1 -31
  2. streamlit/auth_util.py +91 -2
  3. streamlit/cli_util.py +3 -2
  4. streamlit/commands/echo.py +2 -2
  5. streamlit/commands/execution_control.py +1 -1
  6. streamlit/commands/logo.py +76 -24
  7. streamlit/commands/navigation.py +1 -1
  8. streamlit/components/types/base_custom_component.py +0 -2
  9. streamlit/components/v1/custom_component.py +0 -2
  10. streamlit/components/v2/bidi_component/main.py +2 -2
  11. streamlit/components/v2/component_path_utils.py +17 -29
  12. streamlit/components/v2/manifest_scanner.py +8 -3
  13. streamlit/components/v2/presentation.py +1 -1
  14. streamlit/config.py +57 -13
  15. streamlit/config_util.py +5 -5
  16. streamlit/connections/snowflake_connection.py +5 -3
  17. streamlit/dataframe_util.py +10 -10
  18. streamlit/deprecation_util.py +19 -1
  19. streamlit/elements/arrow.py +18 -8
  20. streamlit/elements/deck_gl_json_chart.py +6 -2
  21. streamlit/elements/exception.py +4 -2
  22. streamlit/elements/form.py +1 -1
  23. streamlit/elements/layouts.py +1 -1
  24. streamlit/elements/lib/built_in_chart_utils.py +36 -13
  25. streamlit/elements/lib/color_util.py +21 -2
  26. streamlit/elements/lib/column_config_utils.py +9 -7
  27. streamlit/elements/lib/dialog.py +1 -1
  28. streamlit/elements/lib/image_utils.py +5 -5
  29. streamlit/elements/lib/layout_utils.py +1 -1
  30. streamlit/elements/lib/options_selector_utils.py +72 -22
  31. streamlit/elements/lib/policies.py +1 -1
  32. streamlit/elements/lib/streamlit_plotly_theme.py +9 -11
  33. streamlit/elements/lib/utils.py +1 -1
  34. streamlit/elements/map.py +6 -6
  35. streamlit/elements/plotly_chart.py +2 -2
  36. streamlit/elements/toast.py +1 -1
  37. streamlit/elements/vega_charts.py +30 -7
  38. streamlit/elements/widgets/button.py +3 -3
  39. streamlit/elements/widgets/button_group.py +3 -3
  40. streamlit/elements/widgets/chat.py +1 -1
  41. streamlit/elements/widgets/data_editor.py +6 -6
  42. streamlit/elements/widgets/multiselect.py +1 -1
  43. streamlit/elements/widgets/number_input.py +1 -1
  44. streamlit/elements/widgets/radio.py +91 -31
  45. streamlit/elements/widgets/select_slider.py +123 -37
  46. streamlit/elements/widgets/slider.py +5 -5
  47. streamlit/elements/widgets/time_widgets.py +150 -18
  48. streamlit/elements/write.py +2 -3
  49. streamlit/env_util.py +1 -1
  50. streamlit/errors.py +2 -14
  51. streamlit/external/langchain/streamlit_callback_handler.py +1 -1
  52. streamlit/hello/dataframe_demo.py +1 -1
  53. streamlit/hello/plotting_demo.py +19 -12
  54. streamlit/path_security.py +98 -0
  55. streamlit/proto/Alert_pb2.py +2 -3
  56. streamlit/proto/AppPage_pb2.py +2 -3
  57. streamlit/proto/ArrowData_pb2.py +2 -3
  58. streamlit/proto/ArrowNamedDataSet_pb2.py +2 -3
  59. streamlit/proto/ArrowVegaLiteChart_pb2.py +2 -3
  60. streamlit/proto/Arrow_pb2.py +2 -3
  61. streamlit/proto/AudioInput_pb2.py +2 -3
  62. streamlit/proto/Audio_pb2.py +2 -3
  63. streamlit/proto/AuthRedirect_pb2.py +2 -3
  64. streamlit/proto/AutoRerun_pb2.py +2 -3
  65. streamlit/proto/BackMsg_pb2.py +2 -3
  66. streamlit/proto/Balloons_pb2.py +2 -3
  67. streamlit/proto/BidiComponent_pb2.py +2 -3
  68. streamlit/proto/Block_pb2.py +2 -3
  69. streamlit/proto/BokehChart_pb2.py +2 -3
  70. streamlit/proto/ButtonGroup_pb2.py +2 -3
  71. streamlit/proto/ButtonLikeIconPosition_pb2.py +2 -3
  72. streamlit/proto/Button_pb2.py +2 -3
  73. streamlit/proto/CameraInput_pb2.py +2 -3
  74. streamlit/proto/ChatInput_pb2.py +2 -3
  75. streamlit/proto/Checkbox_pb2.py +2 -3
  76. streamlit/proto/ClientState_pb2.py +2 -3
  77. streamlit/proto/Code_pb2.py +2 -3
  78. streamlit/proto/ColorPicker_pb2.py +2 -3
  79. streamlit/proto/Common_pb2.py +2 -3
  80. streamlit/proto/Components_pb2.py +2 -3
  81. streamlit/proto/DataFrame_pb2.py +2 -3
  82. streamlit/proto/DateInput_pb2.py +2 -3
  83. streamlit/proto/DateTimeInput_pb2.py +2 -3
  84. streamlit/proto/DeckGlJsonChart_pb2.py +2 -3
  85. streamlit/proto/Delta_pb2.py +2 -3
  86. streamlit/proto/DocString_pb2.py +2 -3
  87. streamlit/proto/DownloadButton_pb2.py +2 -3
  88. streamlit/proto/Element_pb2.py +2 -3
  89. streamlit/proto/Empty_pb2.py +2 -3
  90. streamlit/proto/Exception_pb2.py +2 -3
  91. streamlit/proto/Favicon_pb2.py +2 -3
  92. streamlit/proto/FileUploader_pb2.py +2 -3
  93. streamlit/proto/ForwardMsg_pb2.py +2 -3
  94. streamlit/proto/GapSize_pb2.py +2 -3
  95. streamlit/proto/GitInfo_pb2.py +2 -3
  96. streamlit/proto/GraphVizChart_pb2.py +2 -3
  97. streamlit/proto/Heading_pb2.py +2 -3
  98. streamlit/proto/HeightConfig_pb2.py +2 -3
  99. streamlit/proto/Html_pb2.py +2 -3
  100. streamlit/proto/IFrame_pb2.py +2 -3
  101. streamlit/proto/Image_pb2.py +2 -3
  102. streamlit/proto/Json_pb2.py +2 -3
  103. streamlit/proto/LabelVisibilityMessage_pb2.py +2 -3
  104. streamlit/proto/LinkButton_pb2.py +2 -3
  105. streamlit/proto/Logo_pb2.py +6 -5
  106. streamlit/proto/Logo_pb2.pyi +25 -1
  107. streamlit/proto/Markdown_pb2.py +2 -3
  108. streamlit/proto/Metric_pb2.py +2 -3
  109. streamlit/proto/MetricsEvent_pb2.py +2 -3
  110. streamlit/proto/MultiSelect_pb2.py +2 -3
  111. streamlit/proto/NamedDataSet_pb2.py +2 -3
  112. streamlit/proto/Navigation_pb2.py +2 -3
  113. streamlit/proto/NewSession_pb2.py +25 -24
  114. streamlit/proto/NewSession_pb2.pyi +28 -2
  115. streamlit/proto/NumberInput_pb2.py +2 -3
  116. streamlit/proto/PageConfig_pb2.py +2 -3
  117. streamlit/proto/PageInfo_pb2.py +2 -3
  118. streamlit/proto/PageLink_pb2.py +2 -3
  119. streamlit/proto/PageNotFound_pb2.py +2 -3
  120. streamlit/proto/PageProfile_pb2.py +2 -3
  121. streamlit/proto/PagesChanged_pb2.py +2 -3
  122. streamlit/proto/ParentMessage_pb2.py +2 -3
  123. streamlit/proto/PlotlyChart_pb2.py +2 -3
  124. streamlit/proto/Progress_pb2.py +2 -3
  125. streamlit/proto/Radio_pb2.py +5 -4
  126. streamlit/proto/Radio_pb2.pyi +20 -3
  127. streamlit/proto/RootContainer_pb2.py +2 -3
  128. streamlit/proto/Selectbox_pb2.py +2 -3
  129. streamlit/proto/SessionEvent_pb2.py +2 -3
  130. streamlit/proto/SessionStatus_pb2.py +2 -3
  131. streamlit/proto/Skeleton_pb2.py +2 -3
  132. streamlit/proto/Slider_pb2.py +7 -8
  133. streamlit/proto/Slider_pb2.pyi +9 -1
  134. streamlit/proto/Snow_pb2.py +2 -3
  135. streamlit/proto/Space_pb2.py +2 -3
  136. streamlit/proto/Spinner_pb2.py +2 -3
  137. streamlit/proto/TextAlignmentConfig_pb2.py +2 -3
  138. streamlit/proto/TextArea_pb2.py +2 -3
  139. streamlit/proto/TextInput_pb2.py +2 -3
  140. streamlit/proto/Text_pb2.py +2 -3
  141. streamlit/proto/TimeInput_pb2.py +2 -3
  142. streamlit/proto/Toast_pb2.py +2 -3
  143. streamlit/proto/Transient_pb2.py +2 -3
  144. streamlit/proto/VegaLiteChart_pb2.py +2 -3
  145. streamlit/proto/Video_pb2.py +2 -3
  146. streamlit/proto/WidgetStates_pb2.py +2 -3
  147. streamlit/proto/WidthConfig_pb2.py +2 -3
  148. streamlit/proto/openmetrics_data_model_pb2.py +2 -3
  149. streamlit/runtime/app_session.py +106 -60
  150. streamlit/runtime/caching/cache_data_api.py +3 -3
  151. streamlit/runtime/caching/cache_errors.py +0 -2
  152. streamlit/runtime/caching/cache_resource_api.py +1 -1
  153. streamlit/runtime/caching/cache_utils.py +2 -2
  154. streamlit/runtime/caching/hashing.py +1 -3
  155. streamlit/runtime/caching/storage/cache_storage_protocol.py +0 -3
  156. streamlit/runtime/connection_factory.py +1 -1
  157. streamlit/runtime/credentials.py +2 -2
  158. streamlit/runtime/metrics_util.py +3 -3
  159. streamlit/runtime/runtime.py +6 -6
  160. streamlit/runtime/scriptrunner/script_runner.py +17 -0
  161. streamlit/runtime/scriptrunner_utils/exceptions.py +0 -4
  162. streamlit/runtime/scriptrunner_utils/script_run_context.py +13 -31
  163. streamlit/runtime/secrets.py +3 -4
  164. streamlit/runtime/state/__init__.py +7 -1
  165. streamlit/runtime/state/common.py +13 -0
  166. streamlit/runtime/state/query_params.py +493 -24
  167. streamlit/runtime/state/session_state.py +179 -4
  168. streamlit/runtime/state/widgets.py +26 -1
  169. streamlit/runtime/stats.py +1 -10
  170. streamlit/static/index.html +1 -1
  171. streamlit/static/manifest.json +304 -304
  172. streamlit/static/static/js/{ErrorOutline.esm.CScZvf44.js → ErrorOutline.esm.BWk6F-Tz.js} +1 -1
  173. streamlit/static/static/js/{FileDownload.esm.COCxTZxP.js → FileDownload.esm.AllYUuOW.js} +1 -1
  174. streamlit/static/static/js/{FileHelper.Bhs-iVRI.js → FileHelper.BvVTNdmy.js} +1 -1
  175. streamlit/static/static/js/{FormClearHelper.CA_5b-Ut.js → FormClearHelper.C__r5Llk.js} +1 -1
  176. streamlit/static/static/js/{InputInstructions.Bzb0MCfv.js → InputInstructions.DOtkdOMV.js} +1 -1
  177. streamlit/static/static/js/Particles.DCsqQZlE.js +1 -0
  178. streamlit/static/static/js/{ProgressBar.DyQNhVsJ.js → ProgressBar.DLCRvt4m.js} +2 -2
  179. streamlit/static/static/js/{StreamlitSyntaxHighlighter.BOkJThtV.js → StreamlitSyntaxHighlighter.CYFWoZHb.js} +1 -1
  180. streamlit/static/static/js/{TableChart.esm.a60nntBC.js → TableChart.esm.D6ydHcIm.js} +1 -1
  181. streamlit/static/static/js/Toolbar.BHDNzWBx.js +1 -0
  182. streamlit/static/static/js/{WidgetLabelHelpIconInline.BjIku2ic.js → WidgetLabelHelpIconInline.DEXBrVlc.js} +1 -1
  183. streamlit/static/static/js/{base-input.avGkArOc.js → base-input.TSQjctlq.js} +4 -4
  184. streamlit/static/static/js/{checkbox.Q8mCuqps.js → checkbox.BKgfzJZV.js} +1 -1
  185. streamlit/static/static/js/{createDownloadLinkElement.CfqHRpxo.js → createDownloadLinkElement.CG7nr2a4.js} +1 -1
  186. streamlit/static/static/js/{data-grid-overlay-editor.PuoMl3yV.js → data-grid-overlay-editor.ChXO__lP.js} +1 -1
  187. streamlit/static/static/js/{downloader.CjG2csSm.js → downloader.DJ3R_zWA.js} +1 -1
  188. streamlit/static/static/js/embed.u3PPfLkw.js +193 -0
  189. streamlit/static/static/js/{es6.CQD6uUK7.js → es6.C5Mfy8nd.js} +2 -2
  190. streamlit/static/static/js/{formatNumber.CtjUO-if.js → formatNumber.CMRgW9EJ.js} +1 -1
  191. streamlit/static/static/js/{iconPosition.7Qt6oUiI.js → iconPosition.B4EEXI3E.js} +1 -1
  192. streamlit/static/static/js/{iframeResizer.contentWindow._oj2Xh0v.js → iframeResizer.contentWindow.WSvOiTW0.js} +1 -1
  193. streamlit/static/static/js/index.-FOBV3nz.js +1 -0
  194. streamlit/static/static/js/{index.BuBkymZd.js → index.-NF8OSF5.js} +1 -1
  195. streamlit/static/static/js/{index.B-XrnnK6.js → index.4cBg8kn5.js} +1 -1
  196. streamlit/static/static/js/{index.B_ylV_tl.js → index.B0pzzCsH.js} +1 -1
  197. streamlit/static/static/js/{index.BhJwyXH6.js → index.BID6ND5j.js} +2 -2
  198. streamlit/static/static/js/index.BMp5bGjh.js +1 -0
  199. streamlit/static/static/js/{index.Cptu1tS-.js → index.BQcmlvas.js} +1 -1
  200. streamlit/static/static/js/{index.DXQ_Fvpt.js → index.BRcmclgI.js} +1 -1
  201. streamlit/static/static/js/index.BaUZR4IG.js +1 -0
  202. streamlit/static/static/js/{index.CMBgAPh6.js → index.BbMJj4PN.js} +1 -1
  203. streamlit/static/static/js/{index.CVRgrLT-.js → index.BdCTJtq3.js} +2 -2
  204. streamlit/static/static/js/index.BdETLMuI.js +1 -0
  205. streamlit/static/static/js/index.BnKMWhs1.js +1 -0
  206. streamlit/static/static/js/index.Br1kXwQW.js +2 -0
  207. streamlit/static/static/js/{index.XGft6-dq.js → index.Bt2olRE4.js} +1 -1
  208. streamlit/static/static/js/{index.B2fAYU1N.js → index.Bxwsv5T8.js} +1 -1
  209. streamlit/static/static/js/index.C4KskYz6.js +1 -0
  210. streamlit/static/static/js/{index.DZE_91Ym.js → index.C6bmbXk0.js} +1 -1
  211. streamlit/static/static/js/{index.Egabyb7u.js → index.CEfKfbta.js} +1 -1
  212. streamlit/static/static/js/index.CIuaA8q0.js +2 -0
  213. streamlit/static/static/js/{index.DVtfSohT.js → index.CV1sObFX.js} +1 -1
  214. streamlit/static/static/js/{index.BlJhnb4M.js → index.CbR6dgaV.js} +1 -1
  215. streamlit/static/static/js/index.Cq6szKqJ.js +1 -0
  216. streamlit/static/static/js/index.CyouXqCz.js +1 -0
  217. streamlit/static/static/js/{index.B5wmZkRW.js → index.D1NUgMFI.js} +1 -1
  218. streamlit/static/static/js/{index.euRMkmNi.js → index.D7SWG4Om.js} +1 -1
  219. streamlit/static/static/js/{index.Bg-9YNUa.js → index.DAYPEwLI.js} +1 -1
  220. streamlit/static/static/js/index.DKS75Vfg.js +11 -0
  221. streamlit/static/static/js/{index.CIizdLeb.js → index.DOXrMIxB.js} +1 -1
  222. streamlit/static/static/js/{index.BRegnbUa.js → index.DOzYX8yS.js} +3 -3
  223. streamlit/static/static/js/{index.BksGMsW0.js → index.DRFMYcC4.js} +4 -4
  224. streamlit/static/static/js/{index.B8PovXCX.js → index.Divl5FCY.js} +1 -1
  225. streamlit/static/static/js/{index.DxQuXlXH.js → index.DjAJ_CUa.js} +1 -1
  226. streamlit/static/static/js/{index.BrRuSP42.js → index.Dncue2pm.js} +33 -33
  227. streamlit/static/static/js/{index.DSTThs-t.js → index.Drusyo5m.js} +47 -47
  228. streamlit/static/static/js/{index.BOafPwIE.js → index.DuUyDGnP.js} +1 -1
  229. streamlit/static/static/js/{index.D1bkwsLT.js → index.DvgT2rB2.js} +223 -223
  230. streamlit/static/static/js/{index.BmDXWfgx.js → index.DzutABu5.js} +2 -2
  231. streamlit/static/static/js/index.Dzw2iPzi.js +3 -0
  232. streamlit/static/static/js/{index.DJsqD2Sc.js → index.FsTmxLbT.js} +1 -1
  233. streamlit/static/static/js/{index.BOTEMJfV.js → index.OIwPqGYN.js} +1 -1
  234. streamlit/static/static/js/{index.CBqST2Yj.js → index.RXLN7YFT.js} +2 -2
  235. streamlit/static/static/js/{index.Ft2Zxbhr.js → index.YYb2u0jk.js} +2 -2
  236. streamlit/static/static/js/{index.BWCFtBS4.js → index.h8ejt-W3.js} +1 -1
  237. streamlit/static/static/js/{index.KuLql7H0.js → index.lFMCi9am.js} +1 -1
  238. streamlit/static/static/js/{index.D8t7R4QQ.js → index.pOgf4cEj.js} +1 -1
  239. streamlit/static/static/js/{index.CsoN0h7K.js → index.s_E0s7LB.js} +51 -51
  240. streamlit/static/static/js/{index.BVX_bqnf.js → index.xLCbzoqj.js} +1 -1
  241. streamlit/static/static/js/{input.Cf97CQME.js → input.BLG7kWaj.js} +2 -2
  242. streamlit/static/static/js/{main.Ccuk53yQ.js → main.D_CmqChN.js} +1 -1
  243. streamlit/static/static/js/{memory.Bng6Ij0g.js → memory.T8u9KqIQ.js} +1 -1
  244. streamlit/static/static/js/{number-overlay-editor.CFLv-CWC.js → number-overlay-editor.BKBSXkAM.js} +2 -2
  245. streamlit/static/static/js/{pandasStylerUtils.C2hcAKiv.js → pandasStylerUtils.B4tLYMwS.js} +1 -1
  246. streamlit/static/static/js/{sandbox.BXdeD-wA.js → sandbox.jRlkcPem.js} +1 -1
  247. streamlit/static/static/js/{styled-components.Br04Ogac.js → styled-components.D2QhNwzd.js} +1 -1
  248. streamlit/static/static/js/{throttle.mI9ItGre.js → throttle.Cyw_V0Dq.js} +1 -1
  249. streamlit/static/static/js/{timepicker.poFdB0sd.js → timepicker.PzyuDDWl.js} +1 -1
  250. streamlit/static/static/js/{toConsumableArray.92-fANS-.js → toConsumableArray.gE9fMkLj.js} +1 -1
  251. streamlit/static/static/js/uniqueId.B1GeHnT1.js +1 -0
  252. streamlit/static/static/js/{useBasicWidgetState.DzKGLAv_.js → useBasicWidgetState.DFklfao0.js} +1 -1
  253. streamlit/static/static/js/{useIntlLocale.BMma2iiY.js → useIntlLocale.C3tUGWTU.js} +8 -8
  254. streamlit/static/static/js/{useTextInputAutoExpand.DQbIhdma.js → useTextInputAutoExpand.D9nU_y-e.js} +1 -1
  255. streamlit/static/static/js/useUpdateUiValue.ClTdrkJN.js +1 -0
  256. streamlit/static/static/js/{useWaveformController.AH0ggRyc.js → useWaveformController.lzTbjMW2.js} +1 -1
  257. streamlit/static/static/js/{withCalculatedWidth.G5xJ-MbS.js → withCalculatedWidth.Dxs9I5Oe.js} +1 -1
  258. streamlit/static/static/js/{withFullScreenWrapper.rdRu6zZ4.js → withFullScreenWrapper.DfpAcJxf.js} +1 -1
  259. streamlit/string_util.py +2 -2
  260. streamlit/testing/v1/app_test.py +1 -1
  261. streamlit/testing/v1/element_tree.py +33 -20
  262. streamlit/type_util.py +2 -2
  263. streamlit/url_util.py +2 -2
  264. streamlit/user_info.py +2 -41
  265. streamlit/util.py +1 -1
  266. streamlit/watcher/event_based_path_watcher.py +37 -7
  267. streamlit/watcher/path_watcher.py +61 -2
  268. streamlit/watcher/util.py +26 -10
  269. streamlit/web/bootstrap.py +16 -4
  270. streamlit/web/cli.py +1 -4
  271. streamlit/web/server/app_discovery.py +2 -1
  272. streamlit/web/server/app_static_file_handler.py +9 -0
  273. streamlit/web/server/bidi_component_request_handler.py +4 -4
  274. streamlit/web/server/component_file_utils.py +14 -6
  275. streamlit/web/server/component_request_handler.py +2 -2
  276. streamlit/web/server/oauth_authlib_routes.py +14 -42
  277. streamlit/web/server/server.py +1 -1
  278. streamlit/web/server/server_util.py +23 -1
  279. streamlit/web/server/starlette/starlette_app.py +7 -1
  280. streamlit/web/server/starlette/starlette_auth_routes.py +94 -16
  281. streamlit/web/server/starlette/starlette_path_security_middleware.py +97 -0
  282. streamlit/web/server/starlette/starlette_routes.py +16 -9
  283. streamlit/web/server/starlette/starlette_server.py +2 -2
  284. streamlit/web/server/starlette/starlette_static_routes.py +14 -4
  285. streamlit/web/server/stats_request_handler.py +1 -3
  286. {streamlit-1.53.1.dist-info → streamlit-1.54.0.dist-info}/METADATA +10 -25
  287. {streamlit-1.53.1.dist-info → streamlit-1.54.0.dist-info}/RECORD +290 -290
  288. {streamlit-1.53.1.dist-info → streamlit-1.54.0.dist-info}/WHEEL +1 -1
  289. streamlit/commands/experimental_query_params.py +0 -169
  290. streamlit/static/static/js/Particles.ix5_l22I.js +0 -1
  291. streamlit/static/static/js/Toolbar.CxkcuBQ8.js +0 -1
  292. streamlit/static/static/js/embed.DZ-CLCPz.js +0 -195
  293. streamlit/static/static/js/index.B6ZAXv47.js +0 -1
  294. streamlit/static/static/js/index.BDm-Ia27.js +0 -1
  295. streamlit/static/static/js/index.BeCZLkzg.js +0 -1
  296. streamlit/static/static/js/index.BuEBeckn.js +0 -11
  297. streamlit/static/static/js/index.CL2eCR01.js +0 -1
  298. streamlit/static/static/js/index.CdLlbsiN.js +0 -1
  299. streamlit/static/static/js/index.CwIIk90V.js +0 -1
  300. streamlit/static/static/js/index.DDk0U8rh.js +0 -2
  301. streamlit/static/static/js/index.DNB79dOd.js +0 -3
  302. streamlit/static/static/js/index.DNj5S4tY.js +0 -1
  303. streamlit/static/static/js/index.DOY0ZriT.js +0 -2
  304. streamlit/static/static/js/index.r0gCrMFP.js +0 -1
  305. streamlit/static/static/js/uniqueId.BUj-C6GA.js +0 -1
  306. streamlit/static/static/js/useUpdateUiValue.Bk5OIXup.js +0 -1
  307. streamlit-1.53.1.data/scripts/streamlit.cmd +0 -16
  308. {streamlit-1.53.1.dist-info → streamlit-1.54.0.dist-info}/entry_points.txt +0 -0
  309. {streamlit-1.53.1.dist-info → streamlit-1.54.0.dist-info}/top_level.txt +0 -0
@@ -297,6 +297,7 @@ def validate_and_sync_value_with_options(
297
297
  This function has a side-effect: if the value is not found in the options
298
298
  and a key is provided, it will update session state with the new value.
299
299
 
300
+
300
301
  Parameters
301
302
  ----------
302
303
  current_value
@@ -321,29 +322,16 @@ def validate_and_sync_value_with_options(
321
322
  if current_value is None:
322
323
  return current_value, False
323
324
 
324
- # For Enum values, use the original index_() approach which uses == comparison.
325
- # This correctly handles enum class identity - enums from different classes
326
- # (e.g., after script rerun) should NOT be considered equal, which is important
327
- # for enum coercion to work correctly when coercion is disabled.
328
- if isinstance(current_value, Enum):
329
- try:
330
- index_(opt, current_value)
331
- return current_value, False
332
- except ValueError:
333
- pass # Fall through to reset logic below
334
- else:
335
- # For non-Enum values, use format_func comparison. This handles custom objects
336
- # without __eq__ where widget values are deepcopied and the deepcopied instances
337
- # would fail identity comparison with ==.
338
- try:
339
- formatted_value = format_func(current_value)
340
- except Exception:
341
- # format_func failed - value is invalid
342
- formatted_value = None
343
-
344
- formatted_options_set = {format_func(o) for o in opt}
345
- if formatted_value is not None and formatted_value in formatted_options_set:
325
+ # Use format_func comparison for all values. This correctly handles:
326
+ # - Custom objects without __eq__ (deepcopied instances)
327
+ # - Enum values (already from current class due to serde deserialization)
328
+ formatted_options_set = {format_func(o) for o in opt}
329
+ try:
330
+ formatted_value = format_func(current_value)
331
+ if formatted_value in formatted_options_set:
346
332
  return current_value, False
333
+ except Exception: # noqa: S110
334
+ pass # format_func failed - value is invalid, fall through to reset
347
335
 
348
336
  # Value not in options - reset to default
349
337
  if default_index is not None and len(opt) > 0:
@@ -424,3 +412,65 @@ def validate_and_sync_multiselect_value_with_options(
424
412
  get_session_state().reset_state_value(str(key), valid_values)
425
413
 
426
414
  return valid_values, True
415
+
416
+
417
+ def validate_and_sync_range_value_with_options(
418
+ current_value: tuple[T, T],
419
+ opt: Sequence[T],
420
+ default_indices: list[int],
421
+ key: str | int | None,
422
+ format_func: Callable[[Any], str] = str,
423
+ ) -> tuple[tuple[T, T], bool]:
424
+ """Validate a range value (tuple of two values) against options.
425
+
426
+ If either value in the range is not found in options, the entire range is
427
+ reset to the default. This function has a side-effect: if the values are
428
+ invalid and a key is provided, it will update session state with the new value.
429
+
430
+ Parameters
431
+ ----------
432
+ current_value
433
+ The current range value (tuple of two values) to validate.
434
+ opt
435
+ The sequence of valid options.
436
+ default_indices
437
+ The default indices to reset to if value is invalid. Should contain
438
+ at least one index; if only one index is provided, the second default
439
+ will be the last option.
440
+ key
441
+ The widget key for session state updates.
442
+ format_func
443
+ Function to format options for comparison. Used to compare values by their
444
+ string representation instead of using == directly.
445
+
446
+ Returns
447
+ -------
448
+ tuple[tuple[T, T], bool]
449
+ A tuple of (validated_value, value_was_reset).
450
+ """
451
+ if len(opt) == 0:
452
+ return current_value, False
453
+
454
+ formatted_options_set = {format_func(o) for o in opt}
455
+
456
+ def is_valid(val: Any) -> bool:
457
+ """Check if a value exists in options via format_func comparison."""
458
+ try:
459
+ return format_func(val) in formatted_options_set
460
+ except Exception:
461
+ return False
462
+
463
+ def get_default_range() -> tuple[T, T]:
464
+ """Get the default range value."""
465
+ end_idx = default_indices[1] if len(default_indices) > 1 else len(opt) - 1
466
+ return (opt[default_indices[0]], opt[end_idx])
467
+
468
+ # Validate both values in the range.
469
+ if is_valid(current_value[0]) and is_valid(current_value[1]):
470
+ return current_value, False
471
+
472
+ # Either value is invalid - reset entire range.
473
+ new_value = get_default_range()
474
+ if key is not None:
475
+ get_session_state().reset_state_value(str(key), new_value)
476
+ return new_value, True
@@ -188,7 +188,7 @@ def maybe_raise_label_warnings(label: str | None, label_visibility: str | None)
188
188
  "if needed.",
189
189
  stack_info=True,
190
190
  )
191
- if label_visibility not in ("visible", "hidden", "collapsed"):
191
+ if label_visibility not in {"visible", "hidden", "collapsed"}:
192
192
  raise errors.StreamlitAPIException(
193
193
  f"Unsupported label_visibility option '{label_visibility}'. "
194
194
  f"Valid values are 'visible', 'hidden' or 'collapsed'."
@@ -58,7 +58,6 @@ DIVERGING_6: Final = "#000027"
58
58
  DIVERGING_7: Final = "#000028"
59
59
  DIVERGING_8: Final = "#000029"
60
60
  DIVERGING_9: Final = "#000030"
61
- DIVERGING_10: Final = "#000031"
62
61
 
63
62
  INCREASING: Final = "#000032"
64
63
  DECREASING: Final = "#000033"
@@ -189,16 +188,15 @@ def configure_streamlit_plotly_theme() -> None:
189
188
  sequentialminus=streamlit_colorscale,
190
189
  diverging=[
191
190
  [0.0, DIVERGING_0],
192
- [0.1, DIVERGING_1],
193
- [0.2, DIVERGING_2],
194
- [0.3, DIVERGING_3],
195
- [0.4, DIVERGING_4],
196
- [0.5, DIVERGING_5],
197
- [0.6, DIVERGING_6],
198
- [0.7, DIVERGING_7],
199
- [0.8, DIVERGING_8],
200
- [0.9, DIVERGING_9],
201
- [1.0, DIVERGING_10],
191
+ [0.1111111111111111, DIVERGING_1],
192
+ [0.2222222222222222, DIVERGING_2],
193
+ [0.3333333333333333, DIVERGING_3],
194
+ [0.4444444444444444, DIVERGING_4],
195
+ [0.5555555555555556, DIVERGING_5],
196
+ [0.6666666666666666, DIVERGING_6],
197
+ [0.7777777777777778, DIVERGING_7],
198
+ [0.8888888888888888, DIVERGING_8],
199
+ [1.0, DIVERGING_9],
202
200
  ],
203
201
  ),
204
202
  coloraxis=go.layout.Coloraxis(colorscale=streamlit_colorscale),
@@ -59,10 +59,10 @@ SAFE_VALUES: TypeAlias = Union[
59
59
  time,
60
60
  datetime,
61
61
  timedelta,
62
- None,
63
62
  "ellipsis",
64
63
  Message,
65
64
  PROTO_SCALAR_VALUE,
65
+ None,
66
66
  ]
67
67
 
68
68
 
streamlit/elements/map.py CHANGED
@@ -93,8 +93,8 @@ class MapMixin:
93
93
  *,
94
94
  latitude: str | None = None,
95
95
  longitude: str | None = None,
96
- color: None | str | Color = None,
97
- size: None | str | float = None,
96
+ color: str | Color | None = None,
97
+ size: str | float | None = None,
98
98
  zoom: int | None = None,
99
99
  width: WidthWithoutContent = "stretch",
100
100
  height: HeightWithoutContent = 500,
@@ -296,8 +296,8 @@ def to_deckgl_json(
296
296
  data: Data,
297
297
  lat: str | None,
298
298
  lon: str | None,
299
- size: None | str | float,
300
- color: None | str | Collection[float],
299
+ size: str | float | None,
300
+ color: str | Collection[float] | None,
301
301
  zoom: int | None,
302
302
  ) -> str:
303
303
  if data is None:
@@ -432,7 +432,7 @@ def _convert_color_arg_or_column(
432
432
  data: DataFrame,
433
433
  color_arg: str,
434
434
  color_col_name: str | None,
435
- ) -> None | str | IntColorTuple:
435
+ ) -> str | IntColorTuple | None:
436
436
  """Converts color to a format accepted by PyDeck.
437
437
 
438
438
  For example:
@@ -443,7 +443,7 @@ def _convert_color_arg_or_column(
443
443
  NOTE: This function mutates the data argument.
444
444
  """
445
445
 
446
- color_arg_out: None | str | IntColorTuple = None
446
+ color_arg_out: str | IntColorTuple | None = None
447
447
 
448
448
  if color_col_name is not None:
449
449
  # Convert color column to the right format.
@@ -677,14 +677,14 @@ class PlotlyMixin:
677
677
  "options."
678
678
  )
679
679
 
680
- if theme not in ["streamlit", None]:
680
+ if theme not in {"streamlit", None}:
681
681
  raise StreamlitAPIException(
682
682
  f'You set theme="{theme}" while Streamlit charts only support '
683
683
  "theme=”streamlit” or theme=None to fallback to the default "
684
684
  "library theme."
685
685
  )
686
686
 
687
- if on_select not in ["ignore", "rerun"] and not callable(on_select):
687
+ if on_select not in {"ignore", "rerun"} and not callable(on_select):
688
688
  raise StreamlitAPIException(
689
689
  f"You have passed {on_select} to `on_select`. But only 'ignore', "
690
690
  "'rerun', or a callable is supported."
@@ -151,7 +151,7 @@ class ToastMixin:
151
151
  toast_proto.body = clean_text(validate_text(body))
152
152
  toast_proto.icon = validate_icon_or_emoji(icon)
153
153
 
154
- if duration in ["short", "long", "infinite"] or (
154
+ if duration in {"short", "long", "infinite"} or (
155
155
  isinstance(duration, int) and duration > 0
156
156
  ):
157
157
  if duration == "short":
@@ -725,6 +725,10 @@ class VegaChartsMixin:
725
725
  - An RGB or RGBA tuple with the red, green, blue, and alpha
726
726
  components specified as ints from 0 to 255 or floats from 0.0 to
727
727
  1.0.
728
+ - A built-in color name: "red", "orange", "yellow", "green",
729
+ "blue", "violet", "gray"/"grey", or "primary". These map to
730
+ theme colors that you can customize using ``theme.<color>Color``
731
+ configuration options.
728
732
 
729
733
  For a line chart with multiple lines, where the dataframe is in
730
734
  long format (that is, y is None or just one column), this can be:
@@ -753,7 +757,8 @@ class VegaChartsMixin:
753
757
  - A list of string colors or color tuples to be used for each of
754
758
  the lines in the chart. This list should have the same length
755
759
  as the number of y values (e.g. ``color=["#fd0", "#f0f", "#04f"]``
756
- for three lines).
760
+ for three lines). You can also use built-in color names in the
761
+ list (e.g. ``color=["red", "blue", "green"]``).
757
762
 
758
763
  You can set the default colors in the ``theme.chartCategoryColors``
759
764
  configuration option.
@@ -959,6 +964,10 @@ class VegaChartsMixin:
959
964
  - An RGB or RGBA tuple with the red, green, blue, and alpha
960
965
  components specified as ints from 0 to 255 or floats from 0.0 to
961
966
  1.0.
967
+ - A built-in color name: "red", "orange", "yellow", "green",
968
+ "blue", "violet", "gray"/"grey", or "primary". These map to
969
+ theme colors that you can customize using ``theme.<color>Color``
970
+ configuration options.
962
971
 
963
972
  For an area chart with multiple series, where the dataframe is in
964
973
  long format (that is, y is None or just one column), this can be:
@@ -987,7 +996,8 @@ class VegaChartsMixin:
987
996
  - A list of string colors or color tuples to be used for each of
988
997
  the series in the chart. This list should have the same length
989
998
  as the number of y values (e.g. ``color=["#fd0", "#f0f", "#04f"]``
990
- for three lines).
999
+ for three lines). You can also use built-in color names in the
1000
+ list (e.g. ``color=["red", "blue", "green"]``).
991
1001
 
992
1002
  You can set the default colors in the ``theme.chartCategoryColors``
993
1003
  configuration option.
@@ -1248,6 +1258,10 @@ class VegaChartsMixin:
1248
1258
  - An RGB or RGBA tuple with the red, green, blue, and alpha
1249
1259
  components specified as ints from 0 to 255 or floats from 0.0 to
1250
1260
  1.0.
1261
+ - A built-in color name: "red", "orange", "yellow", "green",
1262
+ "blue", "violet", "gray"/"grey", or "primary". These map to
1263
+ theme colors that you can customize using ``theme.<color>Color``
1264
+ configuration options.
1251
1265
 
1252
1266
  For a bar chart with multiple series, where the dataframe is in
1253
1267
  long format (that is, y is None or just one column), this can be:
@@ -1276,7 +1290,8 @@ class VegaChartsMixin:
1276
1290
  - A list of string colors or color tuples to be used for each of
1277
1291
  the series in the chart. This list should have the same length
1278
1292
  as the number of y values (e.g. ``color=["#fd0", "#f0f", "#04f"]``
1279
- for three lines).
1293
+ for three lines). You can also use built-in color names in the
1294
+ list (e.g. ``color=["red", "blue", "green"]``).
1280
1295
 
1281
1296
  You can set the default colors in the ``theme.chartCategoryColors``
1282
1297
  configuration option.
@@ -1575,6 +1590,10 @@ class VegaChartsMixin:
1575
1590
  - An RGB or RGBA tuple with the red, green, blue, and alpha
1576
1591
  components specified as ints from 0 to 255 or floats from 0.0 to
1577
1592
  1.0.
1593
+ - A built-in color name: "red", "orange", "yellow", "green",
1594
+ "blue", "violet", "gray"/"grey", or "primary". These map to
1595
+ theme colors that you can customize using ``theme.<color>Color``
1596
+ configuration options.
1578
1597
  - The name of a column in the dataset where the color of that
1579
1598
  datapoint will come from.
1580
1599
 
@@ -1602,7 +1621,8 @@ class VegaChartsMixin:
1602
1621
  - A list of string colors or color tuples to be used for each of
1603
1622
  the series in the chart. This list should have the same length
1604
1623
  as the number of y values (e.g. ``color=["#fd0", "#f0f", "#04f"]``
1605
- for three series).
1624
+ for three series). You can also use built-in color names in the
1625
+ list (e.g. ``color=["red", "blue", "green"]``).
1606
1626
 
1607
1627
  size : str, float, int, or None
1608
1628
  The size of the circles representing each point.
@@ -2282,14 +2302,14 @@ class VegaChartsMixin:
2282
2302
 
2283
2303
  See the `vega_lite_chart` method docstring for more information.
2284
2304
  """
2285
- if theme not in ["streamlit", None]:
2305
+ if theme not in {"streamlit", None}:
2286
2306
  raise StreamlitAPIException(
2287
2307
  f'You set theme="{theme}" while Streamlit charts only support '
2288
2308
  "theme=”streamlit” or theme=None to fallback to the default "
2289
2309
  "library theme."
2290
2310
  )
2291
2311
 
2292
- if on_select not in ["ignore", "rerun"] and not callable(on_select):
2312
+ if on_select not in {"ignore", "rerun"} and not callable(on_select):
2293
2313
  raise StreamlitAPIException(
2294
2314
  f"You have passed {on_select} to `on_select`. But only 'ignore', "
2295
2315
  "'rerun', or a callable is supported."
@@ -2404,7 +2424,10 @@ class VegaChartsMixin:
2404
2424
  vega_lite_proto.id = compute_and_register_element_id(
2405
2425
  "arrow_vega_lite_chart",
2406
2426
  user_key=key,
2407
- key_as_main_identity=False,
2427
+ # There are some edge cases where selections can become orphaned when the data changes.
2428
+ # The frontend can handle this without errors, but it might be a nice enhancement
2429
+ # to automatically reset the backend & frontend selection state in this case.
2430
+ key_as_main_identity={"selection_mode"},
2408
2431
  dg=self.dg,
2409
2432
  vega_lite_spec=vega_lite_proto.spec,
2410
2433
  # The data is either in vega_lite_proto.data.data
@@ -356,7 +356,7 @@ class ButtonMixin:
356
356
  width = "stretch" if use_container_width else "content"
357
357
 
358
358
  # Checks whether the entered button type is one of the allowed options
359
- if type not in ["primary", "secondary", "tertiary"]:
359
+ if type not in {"primary", "secondary", "tertiary"}:
360
360
  raise StreamlitAPIException(
361
361
  'The type argument to st.button must be "primary", "secondary", or "tertiary". '
362
362
  f'\nThe argument passed was "{type}".'
@@ -736,7 +736,7 @@ class ButtonMixin:
736
736
  if use_container_width is not None:
737
737
  width = "stretch" if use_container_width else "content"
738
738
 
739
- if type not in ["primary", "secondary", "tertiary"]:
739
+ if type not in {"primary", "secondary", "tertiary"}:
740
740
  raise StreamlitAPIException(
741
741
  'The type argument to st.download_button must be "primary", "secondary", or "tertiary". \n'
742
742
  f'The argument passed was "{type}".'
@@ -915,7 +915,7 @@ class ButtonMixin:
915
915
 
916
916
  """
917
917
  # Checks whether the entered button type is one of the allowed options - either "primary" or "secondary"
918
- if type not in ["primary", "secondary", "tertiary"]:
918
+ if type not in {"primary", "secondary", "tertiary"}:
919
919
  raise StreamlitAPIException(
920
920
  'The type argument to st.link_button must be "primary", "secondary", or "tertiary". '
921
921
  f'\nThe argument passed was "{type}".'
@@ -255,7 +255,7 @@ def _build_proto(
255
255
 
256
256
  def _maybe_raise_selection_mode_warning(selection_mode: SelectionMode) -> None:
257
257
  """Check if the selection_mode value is valid or raise exception otherwise."""
258
- if selection_mode not in ["single", "multi"]:
258
+ if selection_mode not in {"single", "multi"}:
259
259
  raise StreamlitAPIException(
260
260
  "The selection_mode argument must be one of ['single', 'multi']. "
261
261
  f"The argument passed was '{selection_mode}'."
@@ -410,7 +410,7 @@ class ButtonGroupMixin:
410
410
 
411
411
  """
412
412
 
413
- if options not in ["thumbs", "faces", "stars"]:
413
+ if options not in {"thumbs", "faces", "stars"}:
414
414
  raise StreamlitAPIException(
415
415
  "The options argument to st.feedback must be one of "
416
416
  "['thumbs', 'faces', 'stars']. "
@@ -1062,7 +1062,7 @@ class ButtonGroupMixin:
1062
1062
  "`selection_mode='single'`."
1063
1063
  )
1064
1064
 
1065
- if style not in ["borderless", "pills", "segmented_control"]:
1065
+ if style not in {"borderless", "pills", "segmented_control"}:
1066
1066
  raise StreamlitAPIException(
1067
1067
  "The style argument must be one of ['borderless', 'pills', 'segmented_control']. "
1068
1068
  f"The argument passed was '{style}'."
@@ -223,7 +223,7 @@ def _process_avatar_input(
223
223
  AvatarType.ICON,
224
224
  (
225
225
  "assistant"
226
- if avatar in [PresetNames.AI, PresetNames.ASSISTANT]
226
+ if avatar in {PresetNames.AI, PresetNames.ASSISTANT}
227
227
  else "user"
228
228
  ),
229
229
  )
@@ -238,11 +238,11 @@ def _parse_value(
238
238
  if column_data_kind == ColumnDataKind.TIMEDELTA:
239
239
  return pd.Timedelta(value)
240
240
 
241
- if column_data_kind in [
241
+ if column_data_kind in {
242
242
  ColumnDataKind.DATETIME,
243
243
  ColumnDataKind.DATE,
244
244
  ColumnDataKind.TIME,
245
- ]:
245
+ }:
246
246
  datetime_value = pd.Timestamp(value)
247
247
 
248
248
  if pd.isna(datetime_value):
@@ -481,7 +481,7 @@ def _is_supported_index(df_index: pd.Index[Any]) -> bool:
481
481
 
482
482
  return (
483
483
  type(df_index)
484
- in [
484
+ in {
485
485
  pd.RangeIndex,
486
486
  pd.Index,
487
487
  pd.DatetimeIndex,
@@ -490,7 +490,7 @@ def _is_supported_index(df_index: pd.Index[Any]) -> bool:
490
490
  # pd.IntervalIndex,
491
491
  # Period type isn't editable currently:
492
492
  # pd.PeriodIndex,
493
- ]
493
+ }
494
494
  # We need to check these index types without importing, since they are
495
495
  # deprecated and planned to be removed soon.
496
496
  or is_type(df_index, "pandas.core.indexes.numeric.Int64Index")
@@ -1029,7 +1029,7 @@ class DataEditorMixin:
1029
1029
  update_column_config(
1030
1030
  column_config_mapping, INDEX_IDENTIFIER, {"required": True}
1031
1031
  )
1032
- if num_rows in ("dynamic", "add") and hide_index is True:
1032
+ if num_rows in {"dynamic", "add"} and hide_index is True:
1033
1033
  _LOGGER.warning(
1034
1034
  "Setting `hide_index=True` in data editor with a non-range index will not have any effect "
1035
1035
  "when `num_rows` is '%s'. It is required for the user to fill in index values for "
@@ -1038,7 +1038,7 @@ class DataEditorMixin:
1038
1038
  num_rows,
1039
1039
  )
1040
1040
 
1041
- if hide_index is None and has_range_index and num_rows in ("dynamic", "add"):
1041
+ if hide_index is None and has_range_index and num_rows in {"dynamic", "add"}:
1042
1042
  # Temporary workaround:
1043
1043
  # We hide range indices if num_rows allows adding rows.
1044
1044
  # since the current way of handling this index during editing is a
@@ -270,7 +270,7 @@ class MultiSelectMixin:
270
270
  placeholder: str | None = None,
271
271
  disabled: bool = False,
272
272
  label_visibility: LabelVisibility = "visible",
273
- accept_new_options: Literal[False, True] | bool = False,
273
+ accept_new_options: bool = False,
274
274
  width: WidthWithoutContent = "stretch",
275
275
  ) -> list[T] | list[T | str]:
276
276
  r"""Display a multiselect widget.
@@ -512,7 +512,7 @@ class NumberInputMixin:
512
512
  number_format = ("%d" if int_value else "%0.2f") if format is None else format
513
513
 
514
514
  # Warn user if they format an int type as a float or vice versa.
515
- if number_format in ["%d", "%u", "%i"] and float_value:
515
+ if number_format in {"%d", "%u", "%i"} and float_value:
516
516
  import streamlit as st
517
517
 
518
518
  st.warning(