streamlit 1.50.0__py3-none-any.whl → 1.52.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.
- streamlit/__init__.py +5 -1
- streamlit/commands/execution_control.py +89 -14
- streamlit/commands/navigation.py +4 -6
- streamlit/commands/page_config.py +4 -6
- streamlit/components/v1/component_arrow.py +7 -7
- streamlit/components/v2/__init__.py +514 -0
- streamlit/components/v2/bidi_component/__init__.py +20 -0
- streamlit/components/v2/bidi_component/constants.py +29 -0
- streamlit/components/v2/bidi_component/main.py +534 -0
- streamlit/components/v2/bidi_component/serialization.py +272 -0
- streamlit/components/v2/bidi_component/state.py +92 -0
- streamlit/components/v2/component_definition_resolver.py +143 -0
- streamlit/components/v2/component_file_watcher.py +403 -0
- streamlit/components/v2/component_manager.py +439 -0
- streamlit/components/v2/component_manifest_handler.py +122 -0
- streamlit/components/v2/component_path_utils.py +245 -0
- streamlit/components/v2/component_registry.py +426 -0
- streamlit/components/v2/get_bidi_component_manager.py +51 -0
- streamlit/components/v2/manifest_scanner.py +615 -0
- streamlit/components/v2/presentation.py +198 -0
- streamlit/components/v2/types.py +324 -0
- streamlit/config.py +456 -53
- streamlit/config_option.py +4 -1
- streamlit/config_util.py +650 -1
- streamlit/connections/snowflake_connection.py +1 -1
- streamlit/connections/snowpark_connection.py +1 -1
- streamlit/dataframe_util.py +33 -26
- streamlit/delta_generator.py +13 -4
- streamlit/delta_generator_singletons.py +11 -15
- streamlit/deprecation_util.py +17 -6
- streamlit/elements/alert.py +16 -0
- streamlit/elements/arrow.py +68 -10
- streamlit/elements/bokeh_chart.py +10 -78
- streamlit/elements/code.py +2 -2
- streamlit/elements/deck_gl_json_chart.py +98 -40
- streamlit/elements/dialog_decorator.py +2 -1
- streamlit/elements/exception.py +4 -2
- streamlit/elements/form.py +27 -0
- streamlit/elements/graphviz_chart.py +1 -3
- streamlit/elements/heading.py +63 -10
- streamlit/elements/html.py +13 -2
- streamlit/elements/image.py +3 -5
- streamlit/elements/layouts.py +59 -33
- streamlit/elements/lib/built_in_chart_utils.py +50 -19
- streamlit/elements/lib/color_util.py +9 -19
- streamlit/elements/lib/column_config_utils.py +9 -12
- streamlit/elements/lib/column_types.py +40 -12
- streamlit/elements/lib/dialog.py +2 -2
- streamlit/elements/lib/image_utils.py +3 -5
- streamlit/elements/lib/layout_utils.py +100 -13
- streamlit/elements/lib/mutable_status_container.py +2 -2
- streamlit/elements/lib/options_selector_utils.py +2 -2
- streamlit/elements/lib/pandas_styler_utils.py +17 -9
- streamlit/elements/lib/shortcut_utils.py +152 -0
- streamlit/elements/lib/utils.py +4 -4
- streamlit/elements/map.py +80 -37
- streamlit/elements/markdown.py +50 -3
- streamlit/elements/media.py +5 -7
- streamlit/elements/metric.py +34 -6
- streamlit/elements/pdf.py +2 -4
- streamlit/elements/plotly_chart.py +197 -20
- streamlit/elements/progress.py +2 -4
- streamlit/elements/space.py +113 -0
- streamlit/elements/spinner.py +1 -1
- streamlit/elements/text.py +20 -3
- streamlit/elements/toast.py +2 -0
- streamlit/elements/vega_charts.py +356 -149
- streamlit/elements/widgets/audio_input.py +12 -11
- streamlit/elements/widgets/button.py +280 -43
- streamlit/elements/widgets/button_group.py +60 -9
- streamlit/elements/widgets/camera_input.py +3 -5
- streamlit/elements/widgets/chat.py +307 -43
- streamlit/elements/widgets/color_picker.py +8 -1
- streamlit/elements/widgets/data_editor.py +88 -44
- streamlit/elements/widgets/file_uploader.py +9 -11
- streamlit/elements/widgets/multiselect.py +4 -3
- streamlit/elements/widgets/number_input.py +4 -4
- streamlit/elements/widgets/radio.py +10 -3
- streamlit/elements/widgets/select_slider.py +8 -5
- streamlit/elements/widgets/selectbox.py +6 -3
- streamlit/elements/widgets/slider.py +38 -42
- streamlit/elements/widgets/text_widgets.py +2 -0
- streamlit/elements/widgets/time_widgets.py +587 -21
- streamlit/elements/write.py +27 -6
- streamlit/emojis.py +1 -1
- streamlit/errors.py +137 -0
- streamlit/git_util.py +1 -1
- streamlit/hello/hello.py +8 -0
- streamlit/hello/utils.py +2 -1
- streamlit/material_icon_names.py +1 -1
- streamlit/navigation/page.py +11 -1
- streamlit/net_util.py +2 -2
- streamlit/proto/Alert_pb2.pyi +3 -3
- streamlit/proto/AppPage_pb2.pyi +7 -1
- streamlit/proto/ArrowData_pb2.py +27 -0
- streamlit/proto/ArrowData_pb2.pyi +52 -0
- streamlit/proto/ArrowNamedDataSet_pb2.pyi +7 -1
- streamlit/proto/ArrowVegaLiteChart_pb2.pyi +7 -1
- streamlit/proto/Arrow_pb2.py +10 -10
- streamlit/proto/Arrow_pb2.pyi +19 -12
- streamlit/proto/AudioInput_pb2.pyi +7 -1
- streamlit/proto/Audio_pb2.pyi +7 -1
- streamlit/proto/AuthRedirect_pb2.pyi +7 -1
- streamlit/proto/AutoRerun_pb2.pyi +7 -1
- streamlit/proto/BackMsg_pb2.py +4 -2
- streamlit/proto/BackMsg_pb2.pyi +34 -4
- streamlit/proto/Balloons_pb2.pyi +7 -1
- streamlit/proto/BidiComponent_pb2.py +34 -0
- streamlit/proto/BidiComponent_pb2.pyi +159 -0
- streamlit/proto/Block_pb2.py +7 -7
- streamlit/proto/Block_pb2.pyi +39 -36
- streamlit/proto/BokehChart_pb2.pyi +7 -1
- streamlit/proto/ButtonGroup_pb2.pyi +9 -9
- streamlit/proto/Button_pb2.py +2 -2
- streamlit/proto/Button_pb2.pyi +11 -2
- streamlit/proto/CameraInput_pb2.pyi +7 -1
- streamlit/proto/ChatInput_pb2.py +6 -6
- streamlit/proto/ChatInput_pb2.pyi +18 -6
- streamlit/proto/Checkbox_pb2.pyi +3 -3
- streamlit/proto/ClientState_pb2.pyi +10 -4
- streamlit/proto/Code_pb2.pyi +7 -1
- streamlit/proto/ColorPicker_pb2.pyi +7 -1
- streamlit/proto/Common_pb2.py +3 -3
- streamlit/proto/Common_pb2.pyi +35 -23
- streamlit/proto/Components_pb2.pyi +19 -13
- streamlit/proto/DataFrame_pb2.pyi +55 -49
- streamlit/proto/DateInput_pb2.pyi +7 -1
- streamlit/proto/DateTimeInput_pb2.py +28 -0
- streamlit/proto/DateTimeInput_pb2.pyi +92 -0
- streamlit/proto/DeckGlJsonChart_pb2.py +10 -4
- streamlit/proto/DeckGlJsonChart_pb2.pyi +12 -6
- streamlit/proto/Delta_pb2.pyi +7 -1
- streamlit/proto/DocString_pb2.pyi +10 -4
- streamlit/proto/DownloadButton_pb2.py +2 -2
- streamlit/proto/DownloadButton_pb2.pyi +16 -2
- streamlit/proto/Element_pb2.py +7 -3
- streamlit/proto/Element_pb2.pyi +33 -5
- streamlit/proto/Empty_pb2.pyi +7 -1
- streamlit/proto/Exception_pb2.pyi +7 -1
- streamlit/proto/Favicon_pb2.pyi +7 -1
- streamlit/proto/FileUploader_pb2.pyi +7 -1
- streamlit/proto/ForwardMsg_pb2.py +12 -10
- streamlit/proto/ForwardMsg_pb2.pyi +42 -15
- streamlit/proto/GapSize_pb2.pyi +4 -4
- streamlit/proto/GitInfo_pb2.pyi +3 -3
- streamlit/proto/GraphVizChart_pb2.pyi +7 -1
- streamlit/proto/Heading_pb2.pyi +7 -1
- streamlit/proto/HeightConfig_pb2.py +2 -2
- streamlit/proto/HeightConfig_pb2.pyi +13 -4
- streamlit/proto/Html_pb2.py +2 -2
- streamlit/proto/Html_pb2.pyi +11 -2
- streamlit/proto/IFrame_pb2.pyi +7 -1
- streamlit/proto/Image_pb2.pyi +10 -4
- streamlit/proto/Json_pb2.pyi +7 -1
- streamlit/proto/LabelVisibilityMessage_pb2.pyi +3 -3
- streamlit/proto/LinkButton_pb2.py +2 -2
- streamlit/proto/LinkButton_pb2.pyi +15 -2
- streamlit/proto/Logo_pb2.pyi +7 -1
- streamlit/proto/Markdown_pb2.pyi +3 -3
- streamlit/proto/Metric_pb2.pyi +7 -7
- streamlit/proto/MetricsEvent_pb2.pyi +10 -4
- streamlit/proto/MultiSelect_pb2.pyi +7 -1
- streamlit/proto/NamedDataSet_pb2.pyi +7 -1
- streamlit/proto/Navigation_pb2.pyi +3 -3
- streamlit/proto/NewSession_pb2.py +18 -18
- streamlit/proto/NewSession_pb2.pyi +59 -40
- streamlit/proto/NumberInput_pb2.pyi +3 -3
- streamlit/proto/PageConfig_pb2.pyi +7 -7
- streamlit/proto/PageInfo_pb2.pyi +7 -1
- streamlit/proto/PageLink_pb2.py +2 -2
- streamlit/proto/PageLink_pb2.pyi +11 -2
- streamlit/proto/PageNotFound_pb2.pyi +7 -1
- streamlit/proto/PageProfile_pb2.pyi +13 -7
- streamlit/proto/PagesChanged_pb2.pyi +7 -1
- streamlit/proto/ParentMessage_pb2.pyi +7 -1
- streamlit/proto/PlotlyChart_pb2.py +8 -6
- streamlit/proto/PlotlyChart_pb2.pyi +9 -7
- streamlit/proto/Progress_pb2.pyi +7 -1
- streamlit/proto/Radio_pb2.pyi +7 -1
- streamlit/proto/RootContainer_pb2.pyi +1 -1
- streamlit/proto/Selectbox_pb2.pyi +7 -1
- streamlit/proto/SessionEvent_pb2.pyi +7 -1
- streamlit/proto/SessionStatus_pb2.pyi +7 -1
- streamlit/proto/Skeleton_pb2.pyi +3 -3
- streamlit/proto/Slider_pb2.pyi +5 -5
- streamlit/proto/Snow_pb2.pyi +7 -1
- streamlit/proto/Space_pb2.py +27 -0
- streamlit/proto/Space_pb2.pyi +48 -0
- streamlit/proto/Spinner_pb2.pyi +7 -1
- streamlit/proto/TextAlignmentConfig_pb2.py +29 -0
- streamlit/proto/TextAlignmentConfig_pb2.pyi +68 -0
- streamlit/proto/TextArea_pb2.pyi +7 -1
- streamlit/proto/TextInput_pb2.pyi +3 -3
- streamlit/proto/Text_pb2.pyi +7 -1
- streamlit/proto/TimeInput_pb2.pyi +7 -1
- streamlit/proto/Toast_pb2.pyi +7 -1
- streamlit/proto/VegaLiteChart_pb2.pyi +7 -1
- streamlit/proto/Video_pb2.pyi +6 -6
- streamlit/proto/WidgetStates_pb2.py +2 -2
- streamlit/proto/WidgetStates_pb2.pyi +23 -7
- streamlit/proto/WidthConfig_pb2.py +2 -2
- streamlit/proto/WidthConfig_pb2.pyi +13 -4
- streamlit/proto/openmetrics_data_model_pb2.pyi +52 -52
- streamlit/runtime/app_session.py +65 -2
- streamlit/runtime/caching/cache_data_api.py +5 -5
- streamlit/runtime/caching/cache_errors.py +4 -1
- streamlit/runtime/caching/cache_resource_api.py +5 -4
- streamlit/runtime/caching/cache_utils.py +3 -2
- streamlit/runtime/caching/cached_message_replay.py +3 -3
- streamlit/runtime/caching/hashing.py +4 -5
- streamlit/runtime/caching/legacy_cache_api.py +2 -1
- streamlit/runtime/connection_factory.py +1 -3
- streamlit/runtime/download_data_util.py +53 -0
- streamlit/runtime/forward_msg_queue.py +5 -1
- streamlit/runtime/fragment.py +2 -1
- streamlit/runtime/media_file_manager.py +178 -2
- streamlit/runtime/memory_media_file_storage.py +1 -1
- streamlit/runtime/metrics_util.py +91 -3
- streamlit/runtime/runtime.py +14 -0
- streamlit/runtime/scriptrunner/exec_code.py +2 -1
- streamlit/runtime/scriptrunner/script_runner.py +5 -3
- streamlit/runtime/scriptrunner_utils/script_run_context.py +3 -6
- streamlit/runtime/secrets.py +2 -4
- streamlit/runtime/session_manager.py +3 -1
- streamlit/runtime/state/common.py +30 -5
- streamlit/runtime/state/presentation.py +85 -0
- streamlit/runtime/state/query_params.py +80 -29
- streamlit/runtime/state/safe_session_state.py +2 -2
- streamlit/runtime/state/session_state.py +221 -17
- streamlit/runtime/state/widgets.py +19 -3
- streamlit/runtime/websocket_session_manager.py +3 -1
- streamlit/source_util.py +2 -2
- streamlit/static/index.html +2 -2
- streamlit/static/manifest.json +557 -239
- streamlit/static/static/css/{index.CIiu7Ygf.css → index.BpABIXK9.css} +1 -1
- streamlit/static/static/css/index.DgR7E2CV.css +1 -0
- streamlit/static/static/js/{ErrorOutline.esm.DUpR0_Ka.js → ErrorOutline.esm.ZJDbmVTx.js} +1 -1
- streamlit/static/static/js/{FileDownload.esm.CN4j9-1w.js → FileDownload.esm.Dx0vI3vH.js} +1 -1
- streamlit/static/static/js/{FileHelper.CaIUKG91.js → FileHelper.B7Ero7qQ.js} +3 -3
- streamlit/static/static/js/{FormClearHelper.DTcdrasw.js → FormClearHelper.CG2XN1_g.js} +1 -1
- streamlit/static/static/js/IFrameUtil.DefezniK.js +1 -0
- streamlit/static/static/js/InputInstructions.Cj5-1zf6.js +1 -0
- streamlit/static/static/js/Particles.BfWfv0Aw.js +1 -0
- streamlit/static/static/js/{ProgressBar.DetlP5aY.js → ProgressBar.CGQ8OgfO.js} +2 -2
- streamlit/static/static/js/StreamlitSyntaxHighlighter.DTKLpwhl.js +20 -0
- streamlit/static/static/js/{Toolbar.C77ar7rq.js → Toolbar.B2qFUmd9.js} +1 -1
- streamlit/static/static/js/_arrayIncludes.B19Iyn2B.js +1 -0
- streamlit/static/static/js/_baseIndexOf.BTknn6Gb.js +1 -0
- streamlit/static/static/js/{base-input.BQft14La.js → base-input.o9tL8MDP.js} +4 -4
- streamlit/static/static/js/{checkbox.yZOfXCeX.js → checkbox.0BeV1IBL.js} +1 -1
- streamlit/static/static/js/{createSuper.Dh9w1cs8.js → createSuper.RBO59fEm.js} +1 -1
- streamlit/static/static/js/data-grid-overlay-editor.CiTkUy0t.js +1 -0
- streamlit/static/static/js/{downloader.MeHtkq8r.js → downloader.DwNZg3Mw.js} +1 -1
- streamlit/static/static/js/embed.XT9xNd3F.js +195 -0
- streamlit/static/static/js/{es6.VpBPGCnM.js → es6.x9KsYQg-.js} +2 -2
- streamlit/static/static/js/{iframeResizer.contentWindow.yMw_ARIL.js → iframeResizer.contentWindow.ZVXpMPi0.js} +1 -1
- streamlit/static/static/js/index.5VPOamri.js +1 -0
- streamlit/static/static/js/index.8HslT92O.js +14 -0
- streamlit/static/static/js/index.AnXMIBz3.js +7 -0
- streamlit/static/static/js/index.B0yp3bM1.js +6 -0
- streamlit/static/static/js/index.B1fRb5wF.js +1 -0
- streamlit/static/static/js/index.B527JZdO.js +3 -0
- streamlit/static/static/js/index.BHgV-yW4.js +1 -0
- streamlit/static/static/js/index.BQr-XwGV.js +1 -0
- streamlit/static/static/js/index.BTtmaLDB.js +1 -0
- streamlit/static/static/js/index.BWB_91TA.js +1 -0
- streamlit/static/static/js/index.BfEKaEmw.js +1 -0
- streamlit/static/static/js/index.BfXjTO8b.js +1 -0
- streamlit/static/static/js/index.Bjy4NRu9.js +3 -0
- streamlit/static/static/js/index.Bu5JWpT_.js +1 -0
- streamlit/static/static/js/index.BuCx76ZV.js +1 -0
- streamlit/static/static/js/index.BxjzhVUb.js +2 -0
- streamlit/static/static/js/index.By55VdPY.js +1 -0
- streamlit/static/static/js/index.CF5MxTbK.js +1 -0
- streamlit/static/static/js/index.CLmq_z9K.js +1 -0
- streamlit/static/static/js/index.CNH4rdSz.js +1 -0
- streamlit/static/static/js/{index.B0H9IXUJ.js → index.CTgm_-jO.js} +10 -41
- streamlit/static/static/js/index.C_rK-Swb.js +188 -0
- streamlit/static/static/js/index.CjozwSzS.js +1 -0
- streamlit/static/static/js/{index.CH1tqnSs.js → index.CkGVt6-G.js} +1 -1
- streamlit/static/static/js/index.CuvXOyER.js +2 -0
- streamlit/static/static/js/{index.FFOzOWzC.js → index.CyUHWoCC.js} +2 -2
- streamlit/static/static/js/index.CyroQtI4.js +2 -0
- streamlit/static/static/js/index.D6HmkoDm.js +263 -0
- streamlit/static/static/js/index.DAqCNvsO.js +1 -0
- streamlit/static/static/js/index.DB_w_CZQ.js +1 -0
- streamlit/static/static/js/index.DBalctjj.js +2 -0
- streamlit/static/static/js/index.DK0RFJUG.js +11 -0
- streamlit/static/static/js/index.DMxc2XFp.js +151 -0
- streamlit/static/static/js/index.DO5utP74.js +2 -0
- streamlit/static/static/js/index.DS7lf09n.js +1 -0
- streamlit/static/static/js/index.DWexTVLY.js +1 -0
- streamlit/static/static/js/index.DXxnU5ej.js +1 -0
- streamlit/static/static/js/index.DcU3uDvB.js +2 -0
- streamlit/static/static/js/index.DlltaH7J.js +1 -0
- streamlit/static/static/js/index.DpNTZz82.js +27 -0
- streamlit/static/static/js/index.Dr9HIhQw.js +1 -0
- streamlit/static/static/js/index.DsgAU5lc.js +1 -0
- streamlit/static/static/js/{index.64ejlaaT.js → index.KfXqjDYy.js} +1 -1
- streamlit/static/static/js/index.PaidgjCs.js +1 -0
- streamlit/static/static/js/index.RJZuWCGA.js +1 -0
- streamlit/static/static/js/{index.Ctn27_AE.js → index.hbeqcRTn.js} +53 -122
- streamlit/static/static/js/index.q5hIQwAY.js +1 -0
- streamlit/static/static/js/index.rORSX6IW.js +1 -0
- streamlit/static/static/js/index.uSX757_v.js +1 -0
- streamlit/static/static/js/index.x_QRaLMd.js +1 -0
- streamlit/static/static/js/{input.s6pjQ49A.js → input.D5oh9-aB.js} +2 -2
- streamlit/static/static/js/main.q9oGOg0H.js +13 -0
- streamlit/static/static/js/{memory.Cuvsdfrl.js → memory.5kCSFUJS.js} +1 -1
- streamlit/static/static/js/moment.C3j7ZXd7.js +4 -0
- streamlit/static/static/js/number-overlay-editor.Cn_LsK8N.js +9 -0
- streamlit/static/static/js/pandasStylerUtils.BqhXt51_.js +1 -0
- streamlit/static/static/js/{possibleConstructorReturn.CqidKeei.js → possibleConstructorReturn.DD9NK1Z8.js} +1 -1
- streamlit/static/static/js/record.B-tDciZb.js +1 -0
- streamlit/static/static/js/{sandbox.CCQREcJx.js → sandbox.DACSyz29.js} +1 -1
- streamlit/static/static/js/styled-components.C3R090At.js +1 -0
- streamlit/static/static/js/threshold.Q1mXg5rX.js +1 -0
- streamlit/static/static/js/throttle.B0GR3Iyz.js +1 -0
- streamlit/static/static/js/{timepicker.mkJF97Bb.js → timepicker.BdhzPxrv.js} +1 -1
- streamlit/static/static/js/timer.C2hYhUse.js +1 -0
- streamlit/static/static/js/{toConsumableArray.De7I7KVR.js → toConsumableArray.Db2pdqM2.js} +1 -1
- streamlit/static/static/js/uniqueId.CtqIr-Yh.js +1 -0
- streamlit/static/static/js/urls.BwSlolu9.js +1 -0
- streamlit/static/static/js/{useBasicWidgetState.CedkNjUW.js → useBasicWidgetState.Bfp6TnSw.js} +1 -1
- streamlit/static/static/js/useIntlLocale.hRV75Xgj.js +12 -0
- streamlit/static/static/js/{useTextInputAutoExpand.Ca7w8dVs.js → useTextInputAutoExpand.QepX7n8Y.js} +1 -1
- streamlit/static/static/js/useUpdateUiValue.DHx8TzX6.js +1 -0
- streamlit/static/static/js/useWaveformController.WxVzpzEX.js +1 -0
- streamlit/static/static/js/value.B4vHRSi7.js +1 -0
- streamlit/static/static/js/wavesurfer.esm.vI8Eid4k.js +73 -0
- streamlit/static/static/js/withCalculatedWidth.DcKeRSWJ.js +1 -0
- streamlit/static/static/js/withFullScreenWrapper.CrHddARq.js +1 -0
- streamlit/static/static/media/MaterialSymbols-Rounded.C7IFxh57.woff2 +0 -0
- streamlit/string_util.py +9 -4
- streamlit/testing/v1/app_test.py +17 -2
- streamlit/testing/v1/element_tree.py +85 -9
- streamlit/testing/v1/util.py +2 -2
- streamlit/type_util.py +3 -4
- streamlit/url_util.py +1 -3
- streamlit/user_info.py +1 -2
- streamlit/util.py +3 -1
- streamlit/watcher/event_based_path_watcher.py +23 -12
- streamlit/watcher/local_sources_watcher.py +11 -1
- streamlit/watcher/path_watcher.py +9 -6
- streamlit/watcher/polling_path_watcher.py +4 -1
- streamlit/watcher/util.py +2 -2
- streamlit/web/bootstrap.py +24 -0
- streamlit/web/cli.py +51 -22
- streamlit/web/server/bidi_component_request_handler.py +193 -0
- streamlit/web/server/component_file_utils.py +97 -0
- streamlit/web/server/component_request_handler.py +8 -21
- streamlit/web/server/oauth_authlib_routes.py +5 -2
- streamlit/web/server/oidc_mixin.py +3 -1
- streamlit/web/server/routes.py +2 -2
- streamlit/web/server/server.py +9 -0
- streamlit/web/server/server_util.py +3 -1
- streamlit/web/server/upload_file_request_handler.py +19 -1
- {streamlit-1.50.0.dist-info → streamlit-1.52.0.dist-info}/METADATA +10 -7
- streamlit-1.52.0.dist-info/RECORD +620 -0
- streamlit/static/static/css/index.CHEnSPGk.css +0 -1
- streamlit/static/static/js/Hooks.BRba_Own.js +0 -1
- streamlit/static/static/js/InputInstructions.xnSDuYeQ.js +0 -1
- streamlit/static/static/js/Particles.CElH0XX2.js +0 -1
- streamlit/static/static/js/data-grid-overlay-editor.DcuHuCyW.js +0 -1
- streamlit/static/static/js/index.6xX1278W.js +0 -975
- streamlit/static/static/js/index.B-hiXRzw.js +0 -1
- streamlit/static/static/js/index.B4cAbHP6.js +0 -1
- streamlit/static/static/js/index.B4dUQfni.js +0 -1
- streamlit/static/static/js/index.BPQo7BKk.js +0 -1
- streamlit/static/static/js/index.Baqa90pe.js +0 -2
- streamlit/static/static/js/index.Bj9JgOEC.js +0 -1
- streamlit/static/static/js/index.BjCwMzj4.js +0 -3
- streamlit/static/static/js/index.Bm3VbPB5.js +0 -1
- streamlit/static/static/js/index.Bxz2yX3P.js +0 -1
- streamlit/static/static/js/index.BycLveZ4.js +0 -1
- streamlit/static/static/js/index.C9BdUqTi.js +0 -1
- streamlit/static/static/js/index.CFMf5_ez.js +0 -197
- streamlit/static/static/js/index.CGYqqs6j.js +0 -1
- streamlit/static/static/js/index.CMItVsFA.js +0 -1
- streamlit/static/static/js/index.CTBk8Vk2.js +0 -1
- streamlit/static/static/js/index.CiAQIz1H.js +0 -7
- streamlit/static/static/js/index.Cj7DSzVR.js +0 -73
- streamlit/static/static/js/index.Ck8rQ9OL.js +0 -1
- streamlit/static/static/js/index.ClELlchS.js +0 -1617
- streamlit/static/static/js/index.Cnpi3o3E.js +0 -1
- streamlit/static/static/js/index.D2QEXQq_.js +0 -1
- streamlit/static/static/js/index.DH71Ezyj.js +0 -1
- streamlit/static/static/js/index.DHh-U0dK.js +0 -3
- streamlit/static/static/js/index.DK7hD7_w.js +0 -1
- streamlit/static/static/js/index.DKv_lNO7.js +0 -2
- streamlit/static/static/js/index.DNLrMXgm.js +0 -12
- streamlit/static/static/js/index.DW0Grddz.js +0 -1
- streamlit/static/static/js/index.Dbe-Q3C-.js +0 -2
- streamlit/static/static/js/index.DcPNYEUo.js +0 -1
- streamlit/static/static/js/index.DuxqVQpd.js +0 -1
- streamlit/static/static/js/index.GRUzrudl.js +0 -1
- streamlit/static/static/js/number-overlay-editor.DdgVR5m3.js +0 -9
- streamlit/static/static/js/uniqueId.RI1LJdtz.js +0 -1
- streamlit/static/static/js/useUpdateUiValue.DeXelfRH.js +0 -1
- streamlit/static/static/js/withFullScreenWrapper.C3561XxJ.js +0 -1
- streamlit/static/static/media/MaterialSymbols-Rounded.DeCZgS-4.woff2 +0 -0
- streamlit-1.50.0.dist-info/RECORD +0 -557
- {streamlit-1.50.0.data → streamlit-1.52.0.data}/scripts/streamlit.cmd +0 -0
- {streamlit-1.50.0.dist-info → streamlit-1.52.0.dist-info}/WHEEL +0 -0
- {streamlit-1.50.0.dist-info → streamlit-1.52.0.dist-info}/entry_points.txt +0 -0
- {streamlit-1.50.0.dist-info → streamlit-1.52.0.dist-info}/top_level.txt +0 -0
|
@@ -12,8 +12,6 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
"""Streamlit support for Plotly charts."""
|
|
16
|
-
|
|
17
15
|
from __future__ import annotations
|
|
18
16
|
|
|
19
17
|
import json
|
|
@@ -23,23 +21,35 @@ from typing import (
|
|
|
23
21
|
Any,
|
|
24
22
|
Final,
|
|
25
23
|
Literal,
|
|
24
|
+
TypeAlias,
|
|
26
25
|
TypedDict,
|
|
27
26
|
Union,
|
|
28
27
|
cast,
|
|
29
28
|
overload,
|
|
30
29
|
)
|
|
31
30
|
|
|
32
|
-
from typing_extensions import Required
|
|
31
|
+
from typing_extensions import Required
|
|
33
32
|
|
|
34
33
|
from streamlit import type_util
|
|
35
|
-
from streamlit.deprecation_util import
|
|
34
|
+
from streamlit.deprecation_util import (
|
|
35
|
+
make_deprecated_name_warning,
|
|
36
|
+
show_deprecation_warning,
|
|
37
|
+
)
|
|
36
38
|
from streamlit.elements.lib.form_utils import current_form_id
|
|
39
|
+
from streamlit.elements.lib.layout_utils import (
|
|
40
|
+
Height,
|
|
41
|
+
LayoutConfig,
|
|
42
|
+
Width,
|
|
43
|
+
validate_height,
|
|
44
|
+
validate_width,
|
|
45
|
+
)
|
|
37
46
|
from streamlit.elements.lib.policies import check_widget_policies
|
|
38
47
|
from streamlit.elements.lib.streamlit_plotly_theme import (
|
|
39
48
|
configure_streamlit_plotly_theme,
|
|
40
49
|
)
|
|
41
50
|
from streamlit.elements.lib.utils import Key, compute_and_register_element_id, to_key
|
|
42
51
|
from streamlit.errors import StreamlitAPIException
|
|
52
|
+
from streamlit.logger import get_logger
|
|
43
53
|
from streamlit.proto.PlotlyChart_pb2 import PlotlyChart as PlotlyChartProto
|
|
44
54
|
from streamlit.runtime.metrics_util import gather_metrics
|
|
45
55
|
from streamlit.runtime.scriptrunner_utils.script_run_context import get_script_run_ctx
|
|
@@ -76,6 +86,8 @@ FigureOrData: TypeAlias = Union[
|
|
|
76
86
|
SelectionMode: TypeAlias = Literal["lasso", "points", "box"]
|
|
77
87
|
_SELECTION_MODES: Final[set[SelectionMode]] = {"lasso", "points", "box"}
|
|
78
88
|
|
|
89
|
+
_LOGGER: Final = get_logger(__name__)
|
|
90
|
+
|
|
79
91
|
|
|
80
92
|
class PlotlySelectionState(TypedDict, total=False):
|
|
81
93
|
"""
|
|
@@ -267,13 +279,109 @@ def parse_selection_mode(
|
|
|
267
279
|
return set(parsed_selection_modes)
|
|
268
280
|
|
|
269
281
|
|
|
282
|
+
def _resolve_content_width(width: Width, figure: Any) -> Width:
|
|
283
|
+
"""Resolve "content" width by inspecting the figure's layout width.
|
|
284
|
+
|
|
285
|
+
For content width, we check if the plotly figure has an explicit width
|
|
286
|
+
in its layout. If so, we use that as a pixel width. If not, we default
|
|
287
|
+
to 700 pixels which matches the plotly.js default width.
|
|
288
|
+
|
|
289
|
+
Args
|
|
290
|
+
----
|
|
291
|
+
width : Width
|
|
292
|
+
The original width parameter
|
|
293
|
+
figure : Any
|
|
294
|
+
The plotly figure object (Figure, dict, or other supported formats)
|
|
295
|
+
|
|
296
|
+
Returns
|
|
297
|
+
-------
|
|
298
|
+
Width
|
|
299
|
+
The resolved width (either original width, figure width as pixels, or 700)
|
|
300
|
+
"""
|
|
301
|
+
|
|
302
|
+
if width != "content":
|
|
303
|
+
return width
|
|
304
|
+
|
|
305
|
+
# Extract width from the figure's layout
|
|
306
|
+
# plotly.tools.mpl_to_plotly() returns Figure objects with .layout attribute
|
|
307
|
+
# plotly.tools.return_figure_from_figure_or_data() returns dictionaries
|
|
308
|
+
figure_width = None
|
|
309
|
+
if isinstance(figure, dict):
|
|
310
|
+
figure_width = figure.get("layout", {}).get("width")
|
|
311
|
+
else:
|
|
312
|
+
# Handle Figure objects from matplotlib conversion
|
|
313
|
+
try:
|
|
314
|
+
figure_width = figure.layout.width
|
|
315
|
+
except (AttributeError, TypeError):
|
|
316
|
+
_LOGGER.debug("Could not parse width from figure")
|
|
317
|
+
|
|
318
|
+
if (
|
|
319
|
+
figure_width is not None
|
|
320
|
+
and isinstance(figure_width, (int, float))
|
|
321
|
+
and figure_width > 0
|
|
322
|
+
):
|
|
323
|
+
return int(figure_width)
|
|
324
|
+
|
|
325
|
+
# Default to 700 pixels (plotly.js default) when no width is specified
|
|
326
|
+
return 700
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
def _resolve_content_height(height: Height, figure: Any) -> Height:
|
|
330
|
+
"""Resolve "content" height by inspecting the figure's layout height.
|
|
331
|
+
|
|
332
|
+
For content height, we check if the plotly figure has an explicit height
|
|
333
|
+
in its layout. If so, we use that as a pixel height. If not, we default
|
|
334
|
+
to 450 pixels which matches the plotly.js default height.
|
|
335
|
+
|
|
336
|
+
Args
|
|
337
|
+
----
|
|
338
|
+
height : Height
|
|
339
|
+
The original height parameter
|
|
340
|
+
figure : Any
|
|
341
|
+
The plotly figure object (Figure, dict, or other supported formats)
|
|
342
|
+
|
|
343
|
+
Returns
|
|
344
|
+
-------
|
|
345
|
+
Height
|
|
346
|
+
The resolved height (either original height, figure height as pixels, or 450)
|
|
347
|
+
"""
|
|
348
|
+
|
|
349
|
+
if height != "content":
|
|
350
|
+
return height
|
|
351
|
+
|
|
352
|
+
# Extract height from the figure's layout
|
|
353
|
+
# plotly.tools.mpl_to_plotly() returns Figure objects with .layout attribute
|
|
354
|
+
# plotly.tools.return_figure_from_figure_or_data() returns dictionaries
|
|
355
|
+
figure_height = None
|
|
356
|
+
if isinstance(figure, dict):
|
|
357
|
+
figure_height = figure.get("layout", {}).get("height")
|
|
358
|
+
else:
|
|
359
|
+
# Handle Figure objects from matplotlib conversion
|
|
360
|
+
try:
|
|
361
|
+
figure_height = figure.layout.height
|
|
362
|
+
except (AttributeError, TypeError):
|
|
363
|
+
_LOGGER.debug("Could not parse height from figure")
|
|
364
|
+
|
|
365
|
+
if (
|
|
366
|
+
figure_height is not None
|
|
367
|
+
and isinstance(figure_height, (int, float))
|
|
368
|
+
and figure_height > 0
|
|
369
|
+
):
|
|
370
|
+
return int(figure_height)
|
|
371
|
+
|
|
372
|
+
# Default to 450 pixels (plotly.js default) when no height is specified
|
|
373
|
+
return 450
|
|
374
|
+
|
|
375
|
+
|
|
270
376
|
class PlotlyMixin:
|
|
271
377
|
@overload
|
|
272
378
|
def plotly_chart(
|
|
273
379
|
self,
|
|
274
380
|
figure_or_data: FigureOrData,
|
|
275
|
-
use_container_width: bool =
|
|
381
|
+
use_container_width: bool | None = None,
|
|
276
382
|
*,
|
|
383
|
+
width: Width = "stretch",
|
|
384
|
+
height: Height = "content",
|
|
277
385
|
theme: Literal["streamlit"] | None = "streamlit",
|
|
278
386
|
key: Key | None = None,
|
|
279
387
|
on_select: Literal["ignore"], # No default value here to make it work with mypy
|
|
@@ -289,8 +397,10 @@ class PlotlyMixin:
|
|
|
289
397
|
def plotly_chart(
|
|
290
398
|
self,
|
|
291
399
|
figure_or_data: FigureOrData,
|
|
292
|
-
use_container_width: bool =
|
|
400
|
+
use_container_width: bool | None = None,
|
|
293
401
|
*,
|
|
402
|
+
width: Width = "stretch",
|
|
403
|
+
height: Height = "content",
|
|
294
404
|
theme: Literal["streamlit"] | None = "streamlit",
|
|
295
405
|
key: Key | None = None,
|
|
296
406
|
on_select: Literal["rerun"] | WidgetCallback = "rerun",
|
|
@@ -306,8 +416,10 @@ class PlotlyMixin:
|
|
|
306
416
|
def plotly_chart(
|
|
307
417
|
self,
|
|
308
418
|
figure_or_data: FigureOrData,
|
|
309
|
-
use_container_width: bool =
|
|
419
|
+
use_container_width: bool | None = None,
|
|
310
420
|
*,
|
|
421
|
+
width: Width = "stretch",
|
|
422
|
+
height: Height = "content",
|
|
311
423
|
theme: Literal["streamlit"] | None = "streamlit",
|
|
312
424
|
key: Key | None = None,
|
|
313
425
|
on_select: Literal["rerun", "ignore"] | WidgetCallback = "ignore",
|
|
@@ -357,13 +469,46 @@ class PlotlyMixin:
|
|
|
357
469
|
render in SVG mode when passed to ``st.plotly_chart``:
|
|
358
470
|
``px.line(df, x="x", y="y", render_mode="svg")``.
|
|
359
471
|
|
|
360
|
-
|
|
472
|
+
width : "stretch", "content", or int
|
|
473
|
+
The width of the chart element. This can be one of the following:
|
|
474
|
+
|
|
475
|
+
- ``"stretch"`` (default): The width of the element matches the
|
|
476
|
+
width of the parent container.
|
|
477
|
+
- ``"content"``: The width of the element matches the width of its
|
|
478
|
+
content, but doesn't exceed the width of the parent container.
|
|
479
|
+
- An integer specifying the width in pixels: The element has a
|
|
480
|
+
fixed width. If the specified width is greater than the width of
|
|
481
|
+
the parent container, the width of the element matches the width
|
|
482
|
+
of the parent container.
|
|
483
|
+
|
|
484
|
+
height : "content", "stretch", or int
|
|
485
|
+
The height of the chart element. This can be one of the following:
|
|
486
|
+
|
|
487
|
+
- ``"content"`` (default): The height of the element matches the
|
|
488
|
+
height of its content.
|
|
489
|
+
- ``"stretch"``: The height of the element matches the height of
|
|
490
|
+
its content or the height of the parent container, whichever is
|
|
491
|
+
larger. If the element is not in a parent container, the height
|
|
492
|
+
of the element matches the height of its content.
|
|
493
|
+
- An integer specifying the height in pixels: The element has a
|
|
494
|
+
fixed height. If the content is larger than the specified
|
|
495
|
+
height, scrolling is enabled.
|
|
496
|
+
|
|
497
|
+
use_container_width : bool or None
|
|
361
498
|
Whether to override the figure's native width with the width of
|
|
362
|
-
the parent container.
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
499
|
+
the parent container. This can be one of the following:
|
|
500
|
+
|
|
501
|
+
- ``None`` (default): Streamlit will use the value of ``width``.
|
|
502
|
+
- ``True``: Streamlit sets the width of the figure to match the
|
|
503
|
+
width of the parent container.
|
|
504
|
+
- ``False``: Streamlit sets the width of the figure to fit its
|
|
505
|
+
contents according to the plotting library, up to the width of
|
|
506
|
+
the parent container.
|
|
507
|
+
|
|
508
|
+
.. deprecated::
|
|
509
|
+
``use_container_width`` is deprecated and will be removed in a
|
|
510
|
+
future release. For ``use_container_width=True``, use
|
|
511
|
+
``width="stretch"``.
|
|
367
512
|
|
|
368
513
|
theme : "streamlit" or None
|
|
369
514
|
The theme of the chart. If ``theme`` is ``"streamlit"`` (default),
|
|
@@ -497,6 +642,26 @@ class PlotlyMixin:
|
|
|
497
642
|
height: 550px
|
|
498
643
|
|
|
499
644
|
"""
|
|
645
|
+
if use_container_width is not None:
|
|
646
|
+
show_deprecation_warning(
|
|
647
|
+
make_deprecated_name_warning(
|
|
648
|
+
"use_container_width",
|
|
649
|
+
"width",
|
|
650
|
+
"2025-12-31",
|
|
651
|
+
"For `use_container_width=True`, use `width='stretch'`. "
|
|
652
|
+
"For `use_container_width=False`, use `width='content'`.",
|
|
653
|
+
include_st_prefix=False,
|
|
654
|
+
),
|
|
655
|
+
show_in_browser=False,
|
|
656
|
+
)
|
|
657
|
+
if use_container_width:
|
|
658
|
+
width = "stretch"
|
|
659
|
+
elif not isinstance(width, int):
|
|
660
|
+
width = "content"
|
|
661
|
+
|
|
662
|
+
validate_width(width, allow_content=True)
|
|
663
|
+
validate_height(height, allow_content=True)
|
|
664
|
+
|
|
500
665
|
import plotly.io
|
|
501
666
|
import plotly.tools
|
|
502
667
|
|
|
@@ -506,9 +671,10 @@ class PlotlyMixin:
|
|
|
506
671
|
|
|
507
672
|
if kwargs:
|
|
508
673
|
show_deprecation_warning(
|
|
509
|
-
"
|
|
510
|
-
"in a future release. Use
|
|
511
|
-
"configuration
|
|
674
|
+
"Variable keyword arguments for `st.plotly_chart` have been "
|
|
675
|
+
"deprecated and will be removed in a future release. Use the "
|
|
676
|
+
"`config` argument instead to specify Plotly configuration "
|
|
677
|
+
"options."
|
|
512
678
|
)
|
|
513
679
|
|
|
514
680
|
if theme not in ["streamlit", None]:
|
|
@@ -549,7 +715,6 @@ class PlotlyMixin:
|
|
|
549
715
|
)
|
|
550
716
|
|
|
551
717
|
plotly_chart_proto = PlotlyChartProto()
|
|
552
|
-
plotly_chart_proto.use_container_width = use_container_width
|
|
553
718
|
plotly_chart_proto.theme = theme or ""
|
|
554
719
|
plotly_chart_proto.form_id = current_form_id(self.dg)
|
|
555
720
|
|
|
@@ -572,9 +737,14 @@ class PlotlyMixin:
|
|
|
572
737
|
selection_mode=selection_mode,
|
|
573
738
|
is_selection_activated=is_selection_activated,
|
|
574
739
|
theme=theme,
|
|
575
|
-
|
|
740
|
+
width=width,
|
|
741
|
+
height=height,
|
|
576
742
|
)
|
|
577
743
|
|
|
744
|
+
# Handle "content" width and height by inspecting the figure's natural dimensions
|
|
745
|
+
final_width = _resolve_content_width(width, figure)
|
|
746
|
+
final_height = _resolve_content_height(height, figure)
|
|
747
|
+
|
|
578
748
|
if is_selection_activated:
|
|
579
749
|
# Selections are activated, treat plotly chart as a widget:
|
|
580
750
|
plotly_chart_proto.selection_mode.extend(
|
|
@@ -592,9 +762,16 @@ class PlotlyMixin:
|
|
|
592
762
|
value_type="string_value",
|
|
593
763
|
)
|
|
594
764
|
|
|
595
|
-
|
|
765
|
+
layout_config = LayoutConfig(width=final_width, height=final_height)
|
|
766
|
+
self.dg._enqueue(
|
|
767
|
+
"plotly_chart", plotly_chart_proto, layout_config=layout_config
|
|
768
|
+
)
|
|
596
769
|
return widget_state.value
|
|
597
|
-
|
|
770
|
+
|
|
771
|
+
layout_config = LayoutConfig(width=final_width, height=final_height)
|
|
772
|
+
return self.dg._enqueue(
|
|
773
|
+
"plotly_chart", plotly_chart_proto, layout_config=layout_config
|
|
774
|
+
)
|
|
598
775
|
|
|
599
776
|
@property
|
|
600
777
|
def dg(self) -> DeltaGenerator:
|
streamlit/elements/progress.py
CHANGED
|
@@ -15,9 +15,7 @@
|
|
|
15
15
|
from __future__ import annotations
|
|
16
16
|
|
|
17
17
|
import math
|
|
18
|
-
from typing import TYPE_CHECKING,
|
|
19
|
-
|
|
20
|
-
from typing_extensions import TypeAlias
|
|
18
|
+
from typing import TYPE_CHECKING, TypeAlias, cast
|
|
21
19
|
|
|
22
20
|
from streamlit.elements.lib.layout_utils import LayoutConfig, validate_width
|
|
23
21
|
from streamlit.errors import StreamlitAPIException
|
|
@@ -31,7 +29,7 @@ if TYPE_CHECKING:
|
|
|
31
29
|
|
|
32
30
|
# Currently, equates to just float, but we can't use `numbers.Real` due to
|
|
33
31
|
# https://github.com/python/mypy/issues/3186
|
|
34
|
-
FloatOrInt: TypeAlias =
|
|
32
|
+
FloatOrInt: TypeAlias = int | float
|
|
35
33
|
|
|
36
34
|
|
|
37
35
|
def _check_float_between(value: float, low: float = 0.0, high: float = 1.0) -> bool:
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2025)
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
from __future__ import annotations
|
|
16
|
+
|
|
17
|
+
from typing import TYPE_CHECKING, cast
|
|
18
|
+
|
|
19
|
+
from streamlit.elements.lib.layout_utils import (
|
|
20
|
+
LayoutConfig,
|
|
21
|
+
SpaceSize,
|
|
22
|
+
validate_space_size,
|
|
23
|
+
)
|
|
24
|
+
from streamlit.proto.Space_pb2 import Space as SpaceProto
|
|
25
|
+
from streamlit.runtime.metrics_util import gather_metrics
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from streamlit.delta_generator import DeltaGenerator
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class SpaceMixin:
|
|
32
|
+
@gather_metrics("space")
|
|
33
|
+
def space(
|
|
34
|
+
self,
|
|
35
|
+
size: SpaceSize = "small",
|
|
36
|
+
) -> DeltaGenerator:
|
|
37
|
+
"""Add vertical or horizontal space.
|
|
38
|
+
|
|
39
|
+
This command adds space in the direction of its parent container. In
|
|
40
|
+
a vertical layout, it adds vertical space. In a horizontal layout, it
|
|
41
|
+
adds horizontal space.
|
|
42
|
+
|
|
43
|
+
Parameters
|
|
44
|
+
----------
|
|
45
|
+
size : "small", "medium", "large", "stretch", or int
|
|
46
|
+
The size of the space. This can be one of the following values:
|
|
47
|
+
|
|
48
|
+
- ``"small"`` (default): 0.75rem, which is the height of a widget
|
|
49
|
+
label. This is useful for aligning buttons with labeled widgets.
|
|
50
|
+
- ``"medium"``: 2.5rem, which is the height of a button or
|
|
51
|
+
(unlabeled) input field.
|
|
52
|
+
- ``"large"``: 4.25rem, which is the height of a labeled input
|
|
53
|
+
field or unlabeled media widget, like `st.file_uploader`.
|
|
54
|
+
- ``"stretch"``: Expands to fill remaining space in the container.
|
|
55
|
+
- An integer: Fixed size in pixels.
|
|
56
|
+
|
|
57
|
+
Examples
|
|
58
|
+
--------
|
|
59
|
+
**Example 1: Use vertical space to align elements**
|
|
60
|
+
|
|
61
|
+
Use small spaces to replace label heights. Use medium spaces to replace
|
|
62
|
+
two label heights or a button.
|
|
63
|
+
|
|
64
|
+
>>> import streamlit as st
|
|
65
|
+
>>>
|
|
66
|
+
>>> left, middle, right = st.columns(3)
|
|
67
|
+
>>>
|
|
68
|
+
>>> left.space("medium")
|
|
69
|
+
>>> left.button("Left button", width="stretch")
|
|
70
|
+
>>>
|
|
71
|
+
>>> middle.space("small")
|
|
72
|
+
>>> middle.text_input("Middle input")
|
|
73
|
+
>>>
|
|
74
|
+
>>> right.audio_input("Right uploader")
|
|
75
|
+
|
|
76
|
+
.. output::
|
|
77
|
+
https://doc-space-vertical.streamlit.app/
|
|
78
|
+
height: 260px
|
|
79
|
+
|
|
80
|
+
**Example 2: Add horizontal space in a container**
|
|
81
|
+
|
|
82
|
+
Use stretch space to float elements left and right.
|
|
83
|
+
|
|
84
|
+
>>> import streamlit as st
|
|
85
|
+
>>>
|
|
86
|
+
>>> with st.container(horizontal=True):
|
|
87
|
+
... st.button("Left")
|
|
88
|
+
... st.space("stretch")
|
|
89
|
+
... st.button("Right")
|
|
90
|
+
|
|
91
|
+
.. output::
|
|
92
|
+
https://doc-space-horizontal.streamlit.app/
|
|
93
|
+
height: 200px
|
|
94
|
+
|
|
95
|
+
"""
|
|
96
|
+
space_proto = SpaceProto()
|
|
97
|
+
|
|
98
|
+
validate_space_size(size)
|
|
99
|
+
|
|
100
|
+
# In vertical layouts, size controls height.
|
|
101
|
+
# In horizontal layouts, size controls width.
|
|
102
|
+
# We set both width and height configs to the same size value.
|
|
103
|
+
# The frontend uses FlexContext to determine container direction and
|
|
104
|
+
# applies ONLY the relevant dimension (width for horizontal, height for vertical)
|
|
105
|
+
# to avoid unintended cross-axis spacing.
|
|
106
|
+
layout_config = LayoutConfig(width=size, height=size)
|
|
107
|
+
|
|
108
|
+
return self.dg._enqueue("space", space_proto, layout_config=layout_config)
|
|
109
|
+
|
|
110
|
+
@property
|
|
111
|
+
def dg(self) -> DeltaGenerator:
|
|
112
|
+
"""Get our DeltaGenerator."""
|
|
113
|
+
return cast("DeltaGenerator", self)
|
streamlit/elements/spinner.py
CHANGED
streamlit/elements/text.py
CHANGED
|
@@ -23,7 +23,7 @@ from streamlit.string_util import clean_text
|
|
|
23
23
|
|
|
24
24
|
if TYPE_CHECKING:
|
|
25
25
|
from streamlit.delta_generator import DeltaGenerator
|
|
26
|
-
from streamlit.elements.lib.layout_utils import Width
|
|
26
|
+
from streamlit.elements.lib.layout_utils import TextAlignment, Width
|
|
27
27
|
from streamlit.type_util import SupportsStr
|
|
28
28
|
|
|
29
29
|
|
|
@@ -35,6 +35,7 @@ class TextMixin:
|
|
|
35
35
|
*, # keyword-only arguments:
|
|
36
36
|
help: str | None = None,
|
|
37
37
|
width: Width = "content",
|
|
38
|
+
text_alignment: TextAlignment = "left",
|
|
38
39
|
) -> DeltaGenerator:
|
|
39
40
|
r"""Write text without Markdown or HTML parsing.
|
|
40
41
|
|
|
@@ -69,13 +70,29 @@ class TextMixin:
|
|
|
69
70
|
the parent container, the width of the element matches the width
|
|
70
71
|
of the parent container.
|
|
71
72
|
|
|
73
|
+
text_alignment : "left", "center", "right", or "justify"
|
|
74
|
+
The horizontal alignment of the text within the element. This can
|
|
75
|
+
be one of the following:
|
|
76
|
+
|
|
77
|
+
- ``"left"`` (default): Text is aligned to the left edge.
|
|
78
|
+
- ``"center"``: Text is centered.
|
|
79
|
+
- ``"right"``: Text is aligned to the right edge.
|
|
80
|
+
- ``"justify"``: Text is justified (stretched to fill the available
|
|
81
|
+
width with the last line left-aligned).
|
|
82
|
+
|
|
83
|
+
.. note::
|
|
84
|
+
For text alignment to have a visible effect, the element's
|
|
85
|
+
width must be wider than its content. If you use
|
|
86
|
+
``width="content"`` with short text, the alignment may not be
|
|
87
|
+
noticeable.
|
|
88
|
+
|
|
72
89
|
Example
|
|
73
90
|
-------
|
|
74
91
|
>>> import streamlit as st
|
|
75
92
|
>>>
|
|
76
93
|
>>> st.text("This is text\n[and more text](that's not a Markdown link).")
|
|
77
94
|
|
|
78
|
-
.. output
|
|
95
|
+
.. output::
|
|
79
96
|
https://doc-text.streamlit.app/
|
|
80
97
|
height: 220px
|
|
81
98
|
|
|
@@ -86,7 +103,7 @@ class TextMixin:
|
|
|
86
103
|
text_proto.help = help
|
|
87
104
|
|
|
88
105
|
validate_width(width, allow_content=True)
|
|
89
|
-
layout_config = LayoutConfig(width=width)
|
|
106
|
+
layout_config = LayoutConfig(width=width, text_alignment=text_alignment)
|
|
90
107
|
|
|
91
108
|
return self.dg._enqueue("text", text_proto, layout_config=layout_config)
|
|
92
109
|
|
streamlit/elements/toast.py
CHANGED
|
@@ -80,6 +80,8 @@ class ToastMixin:
|
|
|
80
80
|
<https://fonts.google.com/icons?icon.set=Material+Symbols&icon.style=Rounded>`_
|
|
81
81
|
font library.
|
|
82
82
|
|
|
83
|
+
- ``"spinner"``: Displays a spinner as an icon.
|
|
84
|
+
|
|
83
85
|
duration : "short", "long", "infinite", or int
|
|
84
86
|
The time to display the toast message. This can be one of the
|
|
85
87
|
following:
|