streamlit-data-editor-plus 0.1.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 +292 -0
- streamlit/__main__.py +20 -0
- streamlit/auth_util.py +583 -0
- streamlit/cli_util.py +107 -0
- streamlit/column_config.py +60 -0
- streamlit/commands/__init__.py +13 -0
- streamlit/commands/echo.py +128 -0
- streamlit/commands/execution_control.py +318 -0
- streamlit/commands/logo.py +250 -0
- streamlit/commands/navigation.py +430 -0
- streamlit/commands/page_config.py +335 -0
- streamlit/components/__init__.py +13 -0
- streamlit/components/lib/__init__.py +13 -0
- streamlit/components/lib/local_component_registry.py +84 -0
- streamlit/components/types/__init__.py +13 -0
- streamlit/components/types/base_component_registry.py +99 -0
- streamlit/components/types/base_custom_component.py +158 -0
- streamlit/components/v1/__init__.py +29 -0
- streamlit/components/v1/component_arrow.py +141 -0
- streamlit/components/v1/component_registry.py +147 -0
- streamlit/components/v1/components.py +38 -0
- streamlit/components/v1/custom_component.py +239 -0
- streamlit/components/v2/__init__.py +531 -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 +537 -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 +233 -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 +620 -0
- streamlit/components/v2/presentation.py +198 -0
- streamlit/components/v2/types.py +317 -0
- streamlit/config.py +2977 -0
- streamlit/config_option.py +319 -0
- streamlit/config_util.py +887 -0
- streamlit/connections/__init__.py +32 -0
- streamlit/connections/base_connection.py +215 -0
- streamlit/connections/snowflake_connection.py +765 -0
- streamlit/connections/snowpark_connection.py +213 -0
- streamlit/connections/sql_connection.py +427 -0
- streamlit/connections/util.py +97 -0
- streamlit/cursor.py +314 -0
- streamlit/dataframe_util.py +1434 -0
- streamlit/delta_generator.py +696 -0
- streamlit/delta_generator_singletons.py +243 -0
- streamlit/deprecation_util.py +253 -0
- streamlit/development.py +21 -0
- streamlit/elements/__init__.py +13 -0
- streamlit/elements/alert.py +341 -0
- streamlit/elements/arrow.py +1065 -0
- streamlit/elements/balloons.py +47 -0
- streamlit/elements/bokeh_chart.py +75 -0
- streamlit/elements/code.py +154 -0
- streamlit/elements/deck_gl_json_chart.py +627 -0
- streamlit/elements/dialog_decorator.py +320 -0
- streamlit/elements/empty.py +130 -0
- streamlit/elements/exception.py +370 -0
- streamlit/elements/form.py +481 -0
- streamlit/elements/graphviz_chart.py +226 -0
- streamlit/elements/heading.py +407 -0
- streamlit/elements/help.py +565 -0
- streamlit/elements/html.py +189 -0
- streamlit/elements/iframe.py +245 -0
- streamlit/elements/image.py +221 -0
- streamlit/elements/json.py +171 -0
- streamlit/elements/layouts.py +1534 -0
- streamlit/elements/lib/__init__.py +13 -0
- streamlit/elements/lib/built_in_chart_utils.py +1316 -0
- streamlit/elements/lib/color_util.py +272 -0
- streamlit/elements/lib/column_config_utils.py +555 -0
- streamlit/elements/lib/column_types.py +2699 -0
- streamlit/elements/lib/dialog.py +212 -0
- streamlit/elements/lib/dicttools.py +152 -0
- streamlit/elements/lib/file_uploader_utils.py +91 -0
- streamlit/elements/lib/form_utils.py +77 -0
- streamlit/elements/lib/image_utils.py +447 -0
- streamlit/elements/lib/js_number.py +105 -0
- streamlit/elements/lib/layout_utils.py +325 -0
- streamlit/elements/lib/mutable_expander_container.py +73 -0
- streamlit/elements/lib/mutable_popover_container.py +73 -0
- streamlit/elements/lib/mutable_status_container.py +194 -0
- streamlit/elements/lib/mutable_tab_container.py +73 -0
- streamlit/elements/lib/options_selector_utils.py +480 -0
- streamlit/elements/lib/pandas_styler_utils.py +302 -0
- streamlit/elements/lib/policies.py +198 -0
- streamlit/elements/lib/shortcut_utils.py +152 -0
- streamlit/elements/lib/streamlit_plotly_theme.py +206 -0
- streamlit/elements/lib/subtitle_utils.py +175 -0
- streamlit/elements/lib/utils.py +274 -0
- streamlit/elements/map.py +526 -0
- streamlit/elements/markdown.py +529 -0
- streamlit/elements/media.py +843 -0
- streamlit/elements/metric.py +529 -0
- streamlit/elements/pdf.py +190 -0
- streamlit/elements/plotly_chart.py +779 -0
- streamlit/elements/progress.py +172 -0
- streamlit/elements/pyplot.py +240 -0
- streamlit/elements/snow.py +47 -0
- streamlit/elements/space.py +121 -0
- streamlit/elements/spinner.py +152 -0
- streamlit/elements/table.py +240 -0
- streamlit/elements/text.py +113 -0
- streamlit/elements/toast.py +175 -0
- streamlit/elements/vega_charts.py +2510 -0
- streamlit/elements/widgets/__init__.py +13 -0
- streamlit/elements/widgets/audio_input.py +334 -0
- streamlit/elements/widgets/button.py +1559 -0
- streamlit/elements/widgets/button_group.py +1061 -0
- streamlit/elements/widgets/camera_input.py +281 -0
- streamlit/elements/widgets/chat.py +1028 -0
- streamlit/elements/widgets/checkbox.py +420 -0
- streamlit/elements/widgets/color_picker.py +329 -0
- streamlit/elements/widgets/data_editor.py +1168 -0
- streamlit/elements/widgets/data_editor_plus.py +902 -0
- streamlit/elements/widgets/feedback.py +322 -0
- streamlit/elements/widgets/file_uploader.py +592 -0
- streamlit/elements/widgets/multiselect.py +654 -0
- streamlit/elements/widgets/number_input.py +719 -0
- streamlit/elements/widgets/radio.py +551 -0
- streamlit/elements/widgets/select_slider.py +568 -0
- streamlit/elements/widgets/selectbox.py +680 -0
- streamlit/elements/widgets/slider.py +1093 -0
- streamlit/elements/widgets/text_widgets.py +779 -0
- streamlit/elements/widgets/time_widgets.py +1712 -0
- streamlit/elements/write.py +585 -0
- streamlit/emojis.py +34 -0
- streamlit/env_util.py +56 -0
- streamlit/error_util.py +112 -0
- streamlit/errors.py +680 -0
- streamlit/external/__init__.py +13 -0
- streamlit/external/langchain/__init__.py +23 -0
- streamlit/external/langchain/streamlit_callback_handler.py +410 -0
- streamlit/file_util.py +266 -0
- streamlit/git_util.py +200 -0
- streamlit/hello/__init__.py +13 -0
- streamlit/hello/__pycache__/__init__.cpython-312.pyc +0 -0
- streamlit/hello/__pycache__/streamlit_app.cpython-312.pyc +0 -0
- streamlit/hello/animation_demo.py +82 -0
- streamlit/hello/dataframe_demo.py +71 -0
- streamlit/hello/hello.py +46 -0
- streamlit/hello/mapping_demo.py +113 -0
- streamlit/hello/plotting_demo.py +62 -0
- streamlit/hello/streamlit_app.py +57 -0
- streamlit/hello/utils.py +30 -0
- streamlit/logger.py +129 -0
- streamlit/material_icon_names.py +25 -0
- streamlit/navigation/__init__.py +13 -0
- streamlit/navigation/page.py +365 -0
- streamlit/net_util.py +125 -0
- streamlit/path_security.py +98 -0
- streamlit/platform.py +31 -0
- streamlit/proto/Alert_pb2.py +28 -0
- streamlit/proto/Alert_pb2.pyi +100 -0
- streamlit/proto/AppPage_pb2.py +25 -0
- streamlit/proto/AppPage_pb2.pyi +75 -0
- streamlit/proto/ArrowData_pb2.py +27 -0
- streamlit/proto/ArrowData_pb2.pyi +103 -0
- streamlit/proto/ArrowNamedDataSet_pb2.py +26 -0
- streamlit/proto/ArrowNamedDataSet_pb2.pyi +65 -0
- streamlit/proto/AudioInput_pb2.py +26 -0
- streamlit/proto/AudioInput_pb2.pyi +72 -0
- streamlit/proto/Audio_pb2.py +26 -0
- streamlit/proto/Audio_pb2.pyi +75 -0
- streamlit/proto/AuthRedirect_pb2.py +25 -0
- streamlit/proto/AuthRedirect_pb2.pyi +48 -0
- streamlit/proto/AutoRerun_pb2.py +25 -0
- streamlit/proto/AutoRerun_pb2.pyi +52 -0
- streamlit/proto/BackMsg_pb2.py +29 -0
- streamlit/proto/BackMsg_pb2.pyi +132 -0
- streamlit/proto/Balloons_pb2.py +25 -0
- streamlit/proto/Balloons_pb2.pyi +48 -0
- streamlit/proto/BidiComponent_pb2.py +32 -0
- streamlit/proto/BidiComponent_pb2.pyi +176 -0
- streamlit/proto/Block_pb2.py +62 -0
- streamlit/proto/Block_pb2.pyi +518 -0
- streamlit/proto/ButtonGroup_pb2.py +32 -0
- streamlit/proto/ButtonGroup_pb2.pyi +157 -0
- streamlit/proto/ButtonLikeIconPosition_pb2.py +25 -0
- streamlit/proto/ButtonLikeIconPosition_pb2.pyi +47 -0
- streamlit/proto/Button_pb2.py +26 -0
- streamlit/proto/Button_pb2.pyi +82 -0
- streamlit/proto/CameraInput_pb2.py +26 -0
- streamlit/proto/CameraInput_pb2.pyi +66 -0
- streamlit/proto/ChatInput_pb2.py +27 -0
- streamlit/proto/ChatInput_pb2.pyi +113 -0
- streamlit/proto/Checkbox_pb2.py +28 -0
- streamlit/proto/Checkbox_pb2.pyi +99 -0
- streamlit/proto/ClientState_pb2.py +28 -0
- streamlit/proto/ClientState_pb2.pyi +137 -0
- streamlit/proto/Code_pb2.py +25 -0
- streamlit/proto/Code_pb2.pyi +59 -0
- streamlit/proto/ColorPicker_pb2.py +26 -0
- streamlit/proto/ColorPicker_pb2.pyi +82 -0
- streamlit/proto/Common_pb2.py +49 -0
- streamlit/proto/Common_pb2.pyi +325 -0
- streamlit/proto/Components_pb2.py +33 -0
- streamlit/proto/Components_pb2.pyi +196 -0
- streamlit/proto/Dataframe_pb2.py +30 -0
- streamlit/proto/Dataframe_pb2.pyi +172 -0
- streamlit/proto/DateInput_pb2.py +26 -0
- streamlit/proto/DateInput_pb2.pyi +91 -0
- streamlit/proto/DateTimeInput_pb2.py +26 -0
- streamlit/proto/DateTimeInput_pb2.pyi +94 -0
- streamlit/proto/DeckGlJsonChart_pb2.py +27 -0
- streamlit/proto/DeckGlJsonChart_pb2.pyi +91 -0
- streamlit/proto/Delta_pb2.py +29 -0
- streamlit/proto/Delta_pb2.pyi +82 -0
- streamlit/proto/DownloadButton_pb2.py +26 -0
- streamlit/proto/DownloadButton_pb2.pyi +92 -0
- streamlit/proto/Element_pb2.py +81 -0
- streamlit/proto/Element_pb2.pyi +348 -0
- streamlit/proto/Empty_pb2.py +25 -0
- streamlit/proto/Empty_pb2.pyi +42 -0
- streamlit/proto/Exception_pb2.py +26 -0
- streamlit/proto/Exception_pb2.pyi +88 -0
- streamlit/proto/Favicon_pb2.py +25 -0
- streamlit/proto/Favicon_pb2.pyi +47 -0
- streamlit/proto/Feedback_pb2.py +27 -0
- streamlit/proto/Feedback_pb2.pyi +93 -0
- streamlit/proto/FileUploader_pb2.py +26 -0
- streamlit/proto/FileUploader_pb2.pyi +90 -0
- streamlit/proto/ForwardMsg_pb2.py +48 -0
- streamlit/proto/ForwardMsg_pb2.pyi +296 -0
- streamlit/proto/GapSize_pb2.py +27 -0
- streamlit/proto/GapSize_pb2.pyi +82 -0
- streamlit/proto/GitInfo_pb2.py +27 -0
- streamlit/proto/GitInfo_pb2.pyi +84 -0
- streamlit/proto/GraphVizChart_pb2.py +25 -0
- streamlit/proto/GraphVizChart_pb2.pyi +56 -0
- streamlit/proto/Heading_pb2.py +25 -0
- streamlit/proto/Heading_pb2.pyi +63 -0
- streamlit/proto/HeightConfig_pb2.py +25 -0
- streamlit/proto/HeightConfig_pb2.pyi +61 -0
- streamlit/proto/Help_pb2.py +27 -0
- streamlit/proto/Help_pb2.pyi +104 -0
- streamlit/proto/Html_pb2.py +25 -0
- streamlit/proto/Html_pb2.pyi +52 -0
- streamlit/proto/IFrame_pb2.py +25 -0
- streamlit/proto/IFrame_pb2.pyi +68 -0
- streamlit/proto/Image_pb2.py +27 -0
- streamlit/proto/Image_pb2.pyi +73 -0
- streamlit/proto/Json_pb2.py +25 -0
- streamlit/proto/Json_pb2.pyi +63 -0
- streamlit/proto/LabelVisibility_pb2.py +27 -0
- streamlit/proto/LabelVisibility_pb2.pyi +69 -0
- streamlit/proto/LinkButton_pb2.py +26 -0
- streamlit/proto/LinkButton_pb2.pyi +76 -0
- streamlit/proto/Logo_pb2.py +27 -0
- streamlit/proto/Logo_pb2.pyi +82 -0
- streamlit/proto/Markdown_pb2.py +27 -0
- streamlit/proto/Markdown_pb2.pyi +83 -0
- streamlit/proto/Metric_pb2.py +32 -0
- streamlit/proto/Metric_pb2.pyi +145 -0
- streamlit/proto/MetricsEvent_pb2.py +28 -0
- streamlit/proto/MetricsEvent_pb2.pyi +224 -0
- streamlit/proto/MultiSelect_pb2.py +26 -0
- streamlit/proto/MultiSelect_pb2.pyi +108 -0
- streamlit/proto/Navigation_pb2.py +28 -0
- streamlit/proto/Navigation_pb2.pyi +89 -0
- streamlit/proto/NewSession_pb2.py +47 -0
- streamlit/proto/NewSession_pb2.pyi +753 -0
- streamlit/proto/NumberInput_pb2.py +28 -0
- streamlit/proto/NumberInput_pb2.pyi +138 -0
- streamlit/proto/PageConfig_pb2.py +33 -0
- streamlit/proto/PageConfig_pb2.pyi +179 -0
- streamlit/proto/PageInfo_pb2.py +25 -0
- streamlit/proto/PageInfo_pb2.pyi +50 -0
- streamlit/proto/PageLink_pb2.py +26 -0
- streamlit/proto/PageLink_pb2.pyi +80 -0
- streamlit/proto/PageNotFound_pb2.py +25 -0
- streamlit/proto/PageNotFound_pb2.pyi +49 -0
- streamlit/proto/PageProfile_pb2.py +29 -0
- streamlit/proto/PageProfile_pb2.pyi +146 -0
- streamlit/proto/ParentMessage_pb2.py +25 -0
- streamlit/proto/ParentMessage_pb2.pyi +53 -0
- streamlit/proto/PlotlyChart_pb2.py +27 -0
- streamlit/proto/PlotlyChart_pb2.pyi +96 -0
- streamlit/proto/Progress_pb2.py +25 -0
- streamlit/proto/Progress_pb2.pyi +50 -0
- streamlit/proto/Radio_pb2.py +26 -0
- streamlit/proto/Radio_pb2.pyi +104 -0
- streamlit/proto/RootContainer_pb2.py +25 -0
- streamlit/proto/RootContainer_pb2.pyi +56 -0
- streamlit/proto/Selectbox_pb2.py +26 -0
- streamlit/proto/Selectbox_pb2.pyi +107 -0
- streamlit/proto/SessionEvent_pb2.py +26 -0
- streamlit/proto/SessionEvent_pb2.pyi +72 -0
- streamlit/proto/SessionStatus_pb2.py +25 -0
- streamlit/proto/SessionStatus_pb2.pyi +64 -0
- streamlit/proto/Skeleton_pb2.py +27 -0
- streamlit/proto/Skeleton_pb2.pyi +75 -0
- streamlit/proto/Slider_pb2.py +30 -0
- streamlit/proto/Slider_pb2.pyi +161 -0
- streamlit/proto/Snow_pb2.py +25 -0
- streamlit/proto/Snow_pb2.pyi +48 -0
- streamlit/proto/Space_pb2.py +25 -0
- streamlit/proto/Space_pb2.pyi +48 -0
- streamlit/proto/Spinner_pb2.py +25 -0
- streamlit/proto/Spinner_pb2.pyi +56 -0
- streamlit/proto/Table_pb2.py +28 -0
- streamlit/proto/Table_pb2.pyi +83 -0
- streamlit/proto/TextAlignmentConfig_pb2.py +27 -0
- streamlit/proto/TextAlignmentConfig_pb2.pyi +69 -0
- streamlit/proto/TextArea_pb2.py +26 -0
- streamlit/proto/TextArea_pb2.pyi +97 -0
- streamlit/proto/TextInput_pb2.py +28 -0
- streamlit/proto/TextInput_pb2.pyi +124 -0
- streamlit/proto/Text_pb2.py +25 -0
- streamlit/proto/Text_pb2.pyi +53 -0
- streamlit/proto/TimeInput_pb2.py +26 -0
- streamlit/proto/TimeInput_pb2.pyi +86 -0
- streamlit/proto/Toast_pb2.py +25 -0
- streamlit/proto/Toast_pb2.pyi +64 -0
- streamlit/proto/Transient_pb2.py +26 -0
- streamlit/proto/Transient_pb2.pyi +53 -0
- streamlit/proto/VegaLiteChart_pb2.py +27 -0
- streamlit/proto/VegaLiteChart_pb2.pyi +92 -0
- streamlit/proto/Video_pb2.py +30 -0
- streamlit/proto/Video_pb2.pyi +129 -0
- streamlit/proto/WidgetStates_pb2.py +31 -0
- streamlit/proto/WidgetStates_pb2.pyi +157 -0
- streamlit/proto/WidthConfig_pb2.py +25 -0
- streamlit/proto/WidthConfig_pb2.pyi +61 -0
- streamlit/proto/__init__.py +15 -0
- streamlit/proto/openmetrics_data_model_pb2.py +58 -0
- streamlit/proto/openmetrics_data_model_pb2.pyi +558 -0
- streamlit/py.typed +0 -0
- streamlit/runtime/__init__.py +50 -0
- streamlit/runtime/app_session.py +1302 -0
- streamlit/runtime/caching/__init__.py +118 -0
- streamlit/runtime/caching/cache_data_api.py +775 -0
- streamlit/runtime/caching/cache_errors.py +143 -0
- streamlit/runtime/caching/cache_resource_api.py +756 -0
- streamlit/runtime/caching/cache_type.py +33 -0
- streamlit/runtime/caching/cache_utils.py +601 -0
- streamlit/runtime/caching/cached_message_replay.py +290 -0
- streamlit/runtime/caching/hashing.py +655 -0
- streamlit/runtime/caching/legacy_cache_api.py +170 -0
- streamlit/runtime/caching/storage/__init__.py +29 -0
- streamlit/runtime/caching/storage/cache_storage_protocol.py +236 -0
- streamlit/runtime/caching/storage/dummy_cache_storage.py +60 -0
- streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py +159 -0
- streamlit/runtime/caching/storage/local_disk_cache_storage.py +223 -0
- streamlit/runtime/caching/ttl_cleanup_cache.py +85 -0
- streamlit/runtime/connection_factory.py +498 -0
- streamlit/runtime/context.py +449 -0
- streamlit/runtime/context_util.py +49 -0
- streamlit/runtime/credentials.py +355 -0
- streamlit/runtime/download_data_util.py +53 -0
- streamlit/runtime/forward_msg_cache.py +101 -0
- streamlit/runtime/forward_msg_queue.py +263 -0
- streamlit/runtime/fragment.py +441 -0
- streamlit/runtime/media_file_manager.py +409 -0
- streamlit/runtime/media_file_storage.py +143 -0
- streamlit/runtime/memory_media_file_storage.py +201 -0
- streamlit/runtime/memory_session_storage.py +77 -0
- streamlit/runtime/memory_uploaded_file_manager.py +149 -0
- streamlit/runtime/metrics_util.py +612 -0
- streamlit/runtime/pages_manager.py +160 -0
- streamlit/runtime/runtime.py +775 -0
- streamlit/runtime/runtime_util.py +108 -0
- streamlit/runtime/script_data.py +46 -0
- streamlit/runtime/scriptrunner/__init__.py +38 -0
- streamlit/runtime/scriptrunner/exec_code.py +167 -0
- streamlit/runtime/scriptrunner/magic.py +277 -0
- streamlit/runtime/scriptrunner/magic_funcs.py +32 -0
- streamlit/runtime/scriptrunner/script_cache.py +89 -0
- streamlit/runtime/scriptrunner/script_runner.py +805 -0
- streamlit/runtime/scriptrunner_utils/__init__.py +19 -0
- streamlit/runtime/scriptrunner_utils/exceptions.py +44 -0
- streamlit/runtime/scriptrunner_utils/script_requests.py +311 -0
- streamlit/runtime/scriptrunner_utils/script_run_context.py +277 -0
- streamlit/runtime/secrets.py +533 -0
- streamlit/runtime/session_manager.py +430 -0
- streamlit/runtime/state/__init__.py +47 -0
- streamlit/runtime/state/common.py +256 -0
- streamlit/runtime/state/presentation.py +85 -0
- streamlit/runtime/state/query_params.py +767 -0
- streamlit/runtime/state/query_params_proxy.py +222 -0
- streamlit/runtime/state/safe_session_state.py +146 -0
- streamlit/runtime/state/session_state.py +1299 -0
- streamlit/runtime/state/session_state_proxy.py +153 -0
- streamlit/runtime/state/widgets.py +197 -0
- streamlit/runtime/stats.py +356 -0
- streamlit/runtime/theme_util.py +148 -0
- streamlit/runtime/uploaded_file_manager.py +152 -0
- streamlit/runtime/websocket_session_manager.py +301 -0
- streamlit/source_util.py +97 -0
- streamlit/starlette.py +34 -0
- streamlit/string_util.py +264 -0
- streamlit/temporary_directory.py +67 -0
- streamlit/testing/__init__.py +13 -0
- streamlit/testing/v1/__init__.py +17 -0
- streamlit/testing/v1/app_test.py +1089 -0
- streamlit/testing/v1/element_tree.py +2272 -0
- streamlit/testing/v1/local_script_runner.py +176 -0
- streamlit/testing/v1/util.py +61 -0
- streamlit/time_util.py +73 -0
- streamlit/type_util.py +480 -0
- streamlit/url_util.py +120 -0
- streamlit/user_info.py +698 -0
- streamlit/util.py +108 -0
- streamlit/vendor/__init__.py +0 -0
- streamlit/vendor/pympler/__init__.py +0 -0
- streamlit/vendor/pympler/asizeof.py +2870 -0
- streamlit/version.py +18 -0
- streamlit/watcher/__init__.py +28 -0
- streamlit/watcher/event_based_path_watcher.py +500 -0
- streamlit/watcher/folder_black_list.py +82 -0
- streamlit/watcher/local_sources_watcher.py +297 -0
- streamlit/watcher/path_watcher.py +244 -0
- streamlit/watcher/polling_path_watcher.py +138 -0
- streamlit/watcher/util.py +223 -0
- streamlit/web/__init__.py +13 -0
- streamlit/web/bootstrap.py +463 -0
- streamlit/web/cache_storage_manager_config.py +38 -0
- streamlit/web/cli.py +465 -0
- streamlit/web/server/__init__.py +30 -0
- streamlit/web/server/app_discovery.py +422 -0
- streamlit/web/server/app_static_file_handler.py +102 -0
- streamlit/web/server/authlib_tornado_integration.py +125 -0
- streamlit/web/server/bidi_component_request_handler.py +193 -0
- streamlit/web/server/browser_websocket_handler.py +341 -0
- streamlit/web/server/component_file_utils.py +105 -0
- streamlit/web/server/component_request_handler.py +107 -0
- streamlit/web/server/media_file_handler.py +148 -0
- streamlit/web/server/oauth_authlib_routes.py +314 -0
- streamlit/web/server/oidc_mixin.py +138 -0
- streamlit/web/server/routes.py +257 -0
- streamlit/web/server/server.py +555 -0
- streamlit/web/server/server_util.py +235 -0
- streamlit/web/server/starlette/__init__.py +23 -0
- streamlit/web/server/starlette/starlette_app.py +541 -0
- streamlit/web/server/starlette/starlette_app_utils.py +306 -0
- streamlit/web/server/starlette/starlette_auth_routes.py +584 -0
- streamlit/web/server/starlette/starlette_gzip_middleware.py +121 -0
- streamlit/web/server/starlette/starlette_path_security_middleware.py +97 -0
- streamlit/web/server/starlette/starlette_routes.py +884 -0
- streamlit/web/server/starlette/starlette_server.py +496 -0
- streamlit/web/server/starlette/starlette_server_config.py +55 -0
- streamlit/web/server/starlette/starlette_static_routes.py +181 -0
- streamlit/web/server/starlette/starlette_websocket.py +560 -0
- streamlit/web/server/stats_request_handler.py +116 -0
- streamlit/web/server/upload_file_request_handler.py +158 -0
- streamlit/web/server/websocket_headers.py +56 -0
- streamlit_data_editor_plus-0.1.0.dist-info/METADATA +76 -0
- streamlit_data_editor_plus-0.1.0.dist-info/RECORD +456 -0
- streamlit_data_editor_plus-0.1.0.dist-info/WHEEL +5 -0
- streamlit_data_editor_plus-0.1.0.dist-info/entry_points.txt +2 -0
- streamlit_data_editor_plus-0.1.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2026)
|
|
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
|
+
"""Streamlit support for GraphViz charts."""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
from typing import TYPE_CHECKING, TypeAlias, Union, cast
|
|
20
|
+
|
|
21
|
+
from streamlit import type_util
|
|
22
|
+
from streamlit.deprecation_util import (
|
|
23
|
+
make_deprecated_name_warning,
|
|
24
|
+
show_deprecation_warning,
|
|
25
|
+
)
|
|
26
|
+
from streamlit.elements.lib.layout_utils import (
|
|
27
|
+
Height,
|
|
28
|
+
LayoutConfig,
|
|
29
|
+
Width,
|
|
30
|
+
validate_height,
|
|
31
|
+
validate_width,
|
|
32
|
+
)
|
|
33
|
+
from streamlit.errors import StreamlitAPIException
|
|
34
|
+
from streamlit.proto.GraphVizChart_pb2 import GraphVizChart as GraphVizChartProto
|
|
35
|
+
from streamlit.runtime.metrics_util import gather_metrics
|
|
36
|
+
from streamlit.util import calc_md5
|
|
37
|
+
|
|
38
|
+
if TYPE_CHECKING:
|
|
39
|
+
import graphviz
|
|
40
|
+
|
|
41
|
+
from streamlit.delta_generator import DeltaGenerator
|
|
42
|
+
|
|
43
|
+
FigureOrDot: TypeAlias = Union[
|
|
44
|
+
"graphviz.Graph", "graphviz.Digraph", "graphviz.Source", str
|
|
45
|
+
]
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
class GraphvizMixin:
|
|
49
|
+
@gather_metrics("graphviz_chart")
|
|
50
|
+
def graphviz_chart(
|
|
51
|
+
self,
|
|
52
|
+
figure_or_dot: FigureOrDot,
|
|
53
|
+
use_container_width: bool | None = None,
|
|
54
|
+
*, # keyword-only arguments:
|
|
55
|
+
width: Width = "content",
|
|
56
|
+
height: Height = "content",
|
|
57
|
+
) -> DeltaGenerator:
|
|
58
|
+
"""Display a graph using the dagre-d3 library.
|
|
59
|
+
|
|
60
|
+
.. Important::
|
|
61
|
+
You must install ``graphviz>=0.19.0`` to use this command. You can
|
|
62
|
+
install all charting dependencies (except Bokeh) as an extra with
|
|
63
|
+
Streamlit:
|
|
64
|
+
|
|
65
|
+
.. code-block:: shell
|
|
66
|
+
|
|
67
|
+
pip install streamlit[charts]
|
|
68
|
+
|
|
69
|
+
Parameters
|
|
70
|
+
----------
|
|
71
|
+
figure_or_dot : graphviz.dot.Graph, graphviz.dot.Digraph, graphviz.sources.Source, str
|
|
72
|
+
The Graphlib graph object or dot string to display
|
|
73
|
+
|
|
74
|
+
use_container_width : bool
|
|
75
|
+
Whether to override the figure's native width with the width of
|
|
76
|
+
the parent container. If ``use_container_width`` is ``False``
|
|
77
|
+
(default), Streamlit sets the width of the chart to fit its contents
|
|
78
|
+
according to the plotting library, up to the width of the parent
|
|
79
|
+
container. If ``use_container_width`` is ``True``, Streamlit sets
|
|
80
|
+
the width of the figure to match the width of the parent container.
|
|
81
|
+
|
|
82
|
+
.. deprecated::
|
|
83
|
+
``use_container_width`` is deprecated and will be removed in a
|
|
84
|
+
future release. For ``use_container_width=True``, use
|
|
85
|
+
``width="stretch"``. For ``use_container_width=False``, use
|
|
86
|
+
``width="content"``.
|
|
87
|
+
|
|
88
|
+
width : "content", "stretch", or int
|
|
89
|
+
The width of the chart element. This can be one of the following:
|
|
90
|
+
|
|
91
|
+
- ``"content"`` (default): The width of the element matches the
|
|
92
|
+
width of its content, but doesn't exceed the width of the parent
|
|
93
|
+
container.
|
|
94
|
+
- ``"stretch"``: The width of the element matches the width of the
|
|
95
|
+
parent container.
|
|
96
|
+
- An integer specifying the width in pixels: The element has a
|
|
97
|
+
fixed width. If the specified width is greater than the width of
|
|
98
|
+
the parent container, the width of the element matches the width
|
|
99
|
+
of the parent container.
|
|
100
|
+
|
|
101
|
+
height : "content", "stretch", or int
|
|
102
|
+
The height of the chart element. This can be one of the following:
|
|
103
|
+
|
|
104
|
+
- ``"content"`` (default): The height of the element matches the
|
|
105
|
+
height of its content.
|
|
106
|
+
- ``"stretch"``: The height of the element matches the height of
|
|
107
|
+
its content or the height of the parent container, whichever is
|
|
108
|
+
larger. If the element is not in a parent container, the height
|
|
109
|
+
of the element matches the height of its content.
|
|
110
|
+
- An integer specifying the height in pixels: The element has a
|
|
111
|
+
fixed height. If the content is larger than the specified
|
|
112
|
+
height, scrolling is enabled.
|
|
113
|
+
|
|
114
|
+
Example
|
|
115
|
+
-------
|
|
116
|
+
>>> import streamlit as st
|
|
117
|
+
>>> import graphviz
|
|
118
|
+
>>>
|
|
119
|
+
>>> # Create a graphlib graph object
|
|
120
|
+
>>> graph = graphviz.Digraph()
|
|
121
|
+
>>> graph.edge("run", "intr")
|
|
122
|
+
>>> graph.edge("intr", "runbl")
|
|
123
|
+
>>> graph.edge("runbl", "run")
|
|
124
|
+
>>> graph.edge("run", "kernel")
|
|
125
|
+
>>> graph.edge("kernel", "zombie")
|
|
126
|
+
>>> graph.edge("kernel", "sleep")
|
|
127
|
+
>>> graph.edge("kernel", "runmem")
|
|
128
|
+
>>> graph.edge("sleep", "swap")
|
|
129
|
+
>>> graph.edge("swap", "runswap")
|
|
130
|
+
>>> graph.edge("runswap", "new")
|
|
131
|
+
>>> graph.edge("runswap", "runmem")
|
|
132
|
+
>>> graph.edge("new", "runmem")
|
|
133
|
+
>>> graph.edge("sleep", "runmem")
|
|
134
|
+
>>>
|
|
135
|
+
>>> st.graphviz_chart(graph)
|
|
136
|
+
|
|
137
|
+
Or you can render the chart from the graph using GraphViz's Dot
|
|
138
|
+
language:
|
|
139
|
+
|
|
140
|
+
>>> st.graphviz_chart('''
|
|
141
|
+
digraph {
|
|
142
|
+
run -> intr
|
|
143
|
+
intr -> runbl
|
|
144
|
+
runbl -> run
|
|
145
|
+
run -> kernel
|
|
146
|
+
kernel -> zombie
|
|
147
|
+
kernel -> sleep
|
|
148
|
+
kernel -> runmem
|
|
149
|
+
sleep -> swap
|
|
150
|
+
swap -> runswap
|
|
151
|
+
runswap -> new
|
|
152
|
+
runswap -> runmem
|
|
153
|
+
new -> runmem
|
|
154
|
+
sleep -> runmem
|
|
155
|
+
}
|
|
156
|
+
''')
|
|
157
|
+
|
|
158
|
+
.. output::
|
|
159
|
+
https://doc-graphviz-chart.streamlit.app/
|
|
160
|
+
height: 600px
|
|
161
|
+
|
|
162
|
+
"""
|
|
163
|
+
if use_container_width is not None:
|
|
164
|
+
show_deprecation_warning(
|
|
165
|
+
make_deprecated_name_warning(
|
|
166
|
+
"use_container_width",
|
|
167
|
+
"width",
|
|
168
|
+
"2025-12-31",
|
|
169
|
+
"For `use_container_width=True`, use `width='stretch'`. "
|
|
170
|
+
"For `use_container_width=False`, use `width='content'`.",
|
|
171
|
+
include_st_prefix=False,
|
|
172
|
+
),
|
|
173
|
+
show_in_browser=False,
|
|
174
|
+
)
|
|
175
|
+
width = "stretch" if use_container_width else "content"
|
|
176
|
+
|
|
177
|
+
# Generate element ID from delta path
|
|
178
|
+
delta_path = self.dg._get_delta_path_str()
|
|
179
|
+
element_id = calc_md5(delta_path.encode())
|
|
180
|
+
|
|
181
|
+
graphviz_chart_proto = GraphVizChartProto()
|
|
182
|
+
|
|
183
|
+
marshall(graphviz_chart_proto, figure_or_dot, element_id)
|
|
184
|
+
|
|
185
|
+
# Validate and set layout configuration
|
|
186
|
+
validate_width(width, allow_content=True)
|
|
187
|
+
validate_height(height, allow_content=True)
|
|
188
|
+
layout_config = LayoutConfig(width=width, height=height)
|
|
189
|
+
|
|
190
|
+
return self.dg._enqueue(
|
|
191
|
+
"graphviz_chart", graphviz_chart_proto, layout_config=layout_config
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
@property
|
|
195
|
+
def dg(self) -> DeltaGenerator:
|
|
196
|
+
"""Get our DeltaGenerator."""
|
|
197
|
+
return cast("DeltaGenerator", self)
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
def marshall(
|
|
201
|
+
proto: GraphVizChartProto,
|
|
202
|
+
figure_or_dot: FigureOrDot,
|
|
203
|
+
element_id: str,
|
|
204
|
+
) -> None:
|
|
205
|
+
"""Construct a GraphViz chart object.
|
|
206
|
+
|
|
207
|
+
See DeltaGenerator.graphviz_chart for docs.
|
|
208
|
+
"""
|
|
209
|
+
|
|
210
|
+
if type_util.is_graphviz_chart(figure_or_dot):
|
|
211
|
+
chart = cast(
|
|
212
|
+
"graphviz.Graph | graphviz.Digraph | graphviz.Source", figure_or_dot
|
|
213
|
+
)
|
|
214
|
+
dot = chart.source
|
|
215
|
+
engine = chart.engine
|
|
216
|
+
elif isinstance(figure_or_dot, str):
|
|
217
|
+
dot = figure_or_dot
|
|
218
|
+
engine = "dot"
|
|
219
|
+
else:
|
|
220
|
+
raise StreamlitAPIException(
|
|
221
|
+
f"Unhandled type for graphviz chart: {type(figure_or_dot)}"
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
proto.spec = dot
|
|
225
|
+
proto.engine = engine
|
|
226
|
+
proto.element_id = element_id
|
|
@@ -0,0 +1,407 @@
|
|
|
1
|
+
# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2026)
|
|
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 enum import Enum
|
|
18
|
+
from typing import TYPE_CHECKING, Literal, TypeAlias, cast
|
|
19
|
+
|
|
20
|
+
from streamlit.elements.lib.layout_utils import LayoutConfig, validate_width
|
|
21
|
+
from streamlit.errors import StreamlitAPIException
|
|
22
|
+
from streamlit.proto.Heading_pb2 import Heading as HeadingProto
|
|
23
|
+
from streamlit.runtime.metrics_util import gather_metrics
|
|
24
|
+
from streamlit.string_util import clean_text
|
|
25
|
+
|
|
26
|
+
if TYPE_CHECKING:
|
|
27
|
+
from streamlit.delta_generator import DeltaGenerator
|
|
28
|
+
from streamlit.elements.lib.layout_utils import TextAlignment, Width
|
|
29
|
+
from streamlit.type_util import SupportsStr
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
class HeadingProtoTag(Enum):
|
|
33
|
+
TITLE_TAG = "h1"
|
|
34
|
+
HEADER_TAG = "h2"
|
|
35
|
+
SUBHEADER_TAG = "h3"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
Anchor: TypeAlias = str | Literal[False] | None
|
|
39
|
+
Divider: TypeAlias = bool | str | None
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
class HeadingMixin:
|
|
43
|
+
@gather_metrics("header")
|
|
44
|
+
def header(
|
|
45
|
+
self,
|
|
46
|
+
body: SupportsStr,
|
|
47
|
+
anchor: Anchor = None,
|
|
48
|
+
*, # keyword-only arguments:
|
|
49
|
+
help: str | None = None,
|
|
50
|
+
divider: Divider = False,
|
|
51
|
+
width: Width = "stretch",
|
|
52
|
+
text_alignment: TextAlignment = "left",
|
|
53
|
+
) -> DeltaGenerator:
|
|
54
|
+
"""Display text in header formatting.
|
|
55
|
+
|
|
56
|
+
Parameters
|
|
57
|
+
----------
|
|
58
|
+
body : str
|
|
59
|
+
The text to display as GitHub-flavored Markdown. Syntax
|
|
60
|
+
information can be found at: https://github.github.com/gfm.
|
|
61
|
+
|
|
62
|
+
See the ``body`` parameter of |st.markdown|_ for additional,
|
|
63
|
+
supported Markdown directives.
|
|
64
|
+
|
|
65
|
+
.. |st.markdown| replace:: ``st.markdown``
|
|
66
|
+
.. _st.markdown: https://docs.streamlit.io/develop/api-reference/text/st.markdown
|
|
67
|
+
|
|
68
|
+
anchor : str or False
|
|
69
|
+
The anchor name of the header that can be accessed with #anchor
|
|
70
|
+
in the URL. If omitted, it generates an anchor using the body.
|
|
71
|
+
If False, the anchor is not shown in the UI.
|
|
72
|
+
|
|
73
|
+
help : str or None
|
|
74
|
+
A tooltip that gets displayed next to the header. If this is
|
|
75
|
+
``None`` (default), no tooltip is displayed.
|
|
76
|
+
|
|
77
|
+
The tooltip can optionally contain GitHub-flavored Markdown,
|
|
78
|
+
including the Markdown directives described in the ``body``
|
|
79
|
+
parameter of ``st.markdown``.
|
|
80
|
+
|
|
81
|
+
divider : bool, "blue", "green", "orange", "red", "violet", "yellow", "gray"/"grey", or "rainbow"
|
|
82
|
+
Shows a colored divider below the header. If this is ``True``,
|
|
83
|
+
successive headers will cycle through divider colors, except gray
|
|
84
|
+
and rainbow. That is, the first header will have a blue line, the
|
|
85
|
+
second header will have a green line, and so on. If this is a
|
|
86
|
+
string, the color can be set to one of the following: blue, green,
|
|
87
|
+
orange, red, violet, yellow, gray/grey, or rainbow.
|
|
88
|
+
|
|
89
|
+
width : "stretch", "content", or int
|
|
90
|
+
The width of the header element. This can be one of the following:
|
|
91
|
+
|
|
92
|
+
- ``"stretch"`` (default): The width of the element matches the
|
|
93
|
+
width of the parent container.
|
|
94
|
+
- ``"content"``: The width of the element matches the width of its
|
|
95
|
+
content, but doesn't exceed the width of the parent container.
|
|
96
|
+
- An integer specifying the width in pixels: The element has a
|
|
97
|
+
fixed width. If the specified width is greater than the width of
|
|
98
|
+
the parent container, the width of the element matches the width
|
|
99
|
+
of the parent container.
|
|
100
|
+
|
|
101
|
+
text_alignment : "left", "center", "right", or "justify"
|
|
102
|
+
The horizontal alignment of the text within the element. This can
|
|
103
|
+
be one of the following:
|
|
104
|
+
|
|
105
|
+
- ``"left"`` (default): Text is aligned to the left edge.
|
|
106
|
+
- ``"center"``: Text is centered.
|
|
107
|
+
- ``"right"``: Text is aligned to the right edge.
|
|
108
|
+
- ``"justify"``: Text is justified (stretched to fill the available
|
|
109
|
+
width with the last line left-aligned).
|
|
110
|
+
|
|
111
|
+
.. note::
|
|
112
|
+
For text alignment to have a visible effect, the element's
|
|
113
|
+
width must be wider than its content. If you use
|
|
114
|
+
``width="content"`` with short text, the alignment may not be
|
|
115
|
+
noticeable.
|
|
116
|
+
|
|
117
|
+
Examples
|
|
118
|
+
--------
|
|
119
|
+
>>> import streamlit as st
|
|
120
|
+
>>>
|
|
121
|
+
>>> st.header("_Streamlit_ is :blue[cool] :sunglasses:")
|
|
122
|
+
>>> st.header("This is a header with a divider", divider="gray")
|
|
123
|
+
>>> st.header("These headers have rotating dividers", divider=True)
|
|
124
|
+
>>> st.header("One", divider=True)
|
|
125
|
+
>>> st.header("Two", divider=True)
|
|
126
|
+
>>> st.header("Three", divider=True)
|
|
127
|
+
>>> st.header("Four", divider=True)
|
|
128
|
+
|
|
129
|
+
.. output::
|
|
130
|
+
https://doc-header.streamlit.app/
|
|
131
|
+
height: 600px
|
|
132
|
+
|
|
133
|
+
"""
|
|
134
|
+
validate_width(width, allow_content=True)
|
|
135
|
+
layout_config = LayoutConfig(width=width, text_alignment=text_alignment)
|
|
136
|
+
|
|
137
|
+
return self.dg._enqueue(
|
|
138
|
+
"heading",
|
|
139
|
+
HeadingMixin._create_heading_proto(
|
|
140
|
+
tag=HeadingProtoTag.HEADER_TAG,
|
|
141
|
+
body=body,
|
|
142
|
+
anchor=anchor,
|
|
143
|
+
help=help,
|
|
144
|
+
divider=divider,
|
|
145
|
+
),
|
|
146
|
+
layout_config=layout_config,
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
@gather_metrics("subheader")
|
|
150
|
+
def subheader(
|
|
151
|
+
self,
|
|
152
|
+
body: SupportsStr,
|
|
153
|
+
anchor: Anchor = None,
|
|
154
|
+
*, # keyword-only arguments:
|
|
155
|
+
help: str | None = None,
|
|
156
|
+
divider: Divider = False,
|
|
157
|
+
width: Width = "stretch",
|
|
158
|
+
text_alignment: TextAlignment = "left",
|
|
159
|
+
) -> DeltaGenerator:
|
|
160
|
+
"""Display text in subheader formatting.
|
|
161
|
+
|
|
162
|
+
Parameters
|
|
163
|
+
----------
|
|
164
|
+
body : str
|
|
165
|
+
The text to display as GitHub-flavored Markdown. Syntax
|
|
166
|
+
information can be found at: https://github.github.com/gfm.
|
|
167
|
+
|
|
168
|
+
See the ``body`` parameter of |st.markdown|_ for additional,
|
|
169
|
+
supported Markdown directives.
|
|
170
|
+
|
|
171
|
+
.. |st.markdown| replace:: ``st.markdown``
|
|
172
|
+
.. _st.markdown: https://docs.streamlit.io/develop/api-reference/text/st.markdown
|
|
173
|
+
|
|
174
|
+
anchor : str or False
|
|
175
|
+
The anchor name of the header that can be accessed with #anchor
|
|
176
|
+
in the URL. If omitted, it generates an anchor using the body.
|
|
177
|
+
If False, the anchor is not shown in the UI.
|
|
178
|
+
|
|
179
|
+
help : str or None
|
|
180
|
+
A tooltip that gets displayed next to the subheader. If this is
|
|
181
|
+
``None`` (default), no tooltip is displayed.
|
|
182
|
+
|
|
183
|
+
The tooltip can optionally contain GitHub-flavored Markdown,
|
|
184
|
+
including the Markdown directives described in the ``body``
|
|
185
|
+
parameter of ``st.markdown``.
|
|
186
|
+
|
|
187
|
+
divider : bool, "blue", "green", "orange", "red", "violet", "yellow", "gray"/"grey", or "rainbow"
|
|
188
|
+
Shows a colored divider below the header. If this is ``True``,
|
|
189
|
+
successive headers will cycle through divider colors, except gray
|
|
190
|
+
and rainbow. That is, the first header will have a blue line, the
|
|
191
|
+
second header will have a green line, and so on. If this is a
|
|
192
|
+
string, the color can be set to one of the following: blue, green,
|
|
193
|
+
orange, red, violet, yellow, gray/grey, or rainbow.
|
|
194
|
+
|
|
195
|
+
width : "stretch", "content", or int
|
|
196
|
+
The width of the subheader element. This can be one of the following:
|
|
197
|
+
|
|
198
|
+
- ``"stretch"`` (default): The width of the element matches the
|
|
199
|
+
width of the parent container.
|
|
200
|
+
- ``"content"``: The width of the element matches the width of its
|
|
201
|
+
content, but doesn't exceed the width of the parent container.
|
|
202
|
+
- An integer specifying the width in pixels: The element has a
|
|
203
|
+
fixed width. If the specified width is greater than the width of
|
|
204
|
+
the parent container, the width of the element matches the width
|
|
205
|
+
of the parent container.
|
|
206
|
+
|
|
207
|
+
text_alignment : "left", "center", "right", or "justify"
|
|
208
|
+
The horizontal alignment of the text within the element. This can
|
|
209
|
+
be one of the following:
|
|
210
|
+
|
|
211
|
+
- ``"left"`` (default): Text is aligned to the left edge.
|
|
212
|
+
- ``"center"``: Text is centered.
|
|
213
|
+
- ``"right"``: Text is aligned to the right edge.
|
|
214
|
+
- ``"justify"``: Text is justified (stretched to fill the available
|
|
215
|
+
width with the last line left-aligned).
|
|
216
|
+
|
|
217
|
+
.. note::
|
|
218
|
+
For text alignment to have a visible effect, the element's
|
|
219
|
+
width must be wider than its content. If you use
|
|
220
|
+
``width="content"`` with short text, the alignment may not be
|
|
221
|
+
noticeable.
|
|
222
|
+
|
|
223
|
+
Examples
|
|
224
|
+
--------
|
|
225
|
+
>>> import streamlit as st
|
|
226
|
+
>>>
|
|
227
|
+
>>> st.subheader("_Streamlit_ is :blue[cool] :sunglasses:")
|
|
228
|
+
>>> st.subheader("This is a subheader with a divider", divider="gray")
|
|
229
|
+
>>> st.subheader("These subheaders have rotating dividers", divider=True)
|
|
230
|
+
>>> st.subheader("One", divider=True)
|
|
231
|
+
>>> st.subheader("Two", divider=True)
|
|
232
|
+
>>> st.subheader("Three", divider=True)
|
|
233
|
+
>>> st.subheader("Four", divider=True)
|
|
234
|
+
|
|
235
|
+
.. output::
|
|
236
|
+
https://doc-subheader.streamlit.app/
|
|
237
|
+
height: 500px
|
|
238
|
+
|
|
239
|
+
"""
|
|
240
|
+
validate_width(width, allow_content=True)
|
|
241
|
+
layout_config = LayoutConfig(width=width, text_alignment=text_alignment)
|
|
242
|
+
|
|
243
|
+
return self.dg._enqueue(
|
|
244
|
+
"heading",
|
|
245
|
+
HeadingMixin._create_heading_proto(
|
|
246
|
+
tag=HeadingProtoTag.SUBHEADER_TAG,
|
|
247
|
+
body=body,
|
|
248
|
+
anchor=anchor,
|
|
249
|
+
help=help,
|
|
250
|
+
divider=divider,
|
|
251
|
+
),
|
|
252
|
+
layout_config=layout_config,
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
@gather_metrics("title")
|
|
256
|
+
def title(
|
|
257
|
+
self,
|
|
258
|
+
body: SupportsStr,
|
|
259
|
+
anchor: Anchor = None,
|
|
260
|
+
*, # keyword-only arguments:
|
|
261
|
+
help: str | None = None,
|
|
262
|
+
width: Width = "stretch",
|
|
263
|
+
text_alignment: TextAlignment = "left",
|
|
264
|
+
) -> DeltaGenerator:
|
|
265
|
+
"""Display text in title formatting.
|
|
266
|
+
|
|
267
|
+
Each document should have a single `st.title()`, although this is not
|
|
268
|
+
enforced.
|
|
269
|
+
|
|
270
|
+
Parameters
|
|
271
|
+
----------
|
|
272
|
+
body : str
|
|
273
|
+
The text to display as GitHub-flavored Markdown. Syntax
|
|
274
|
+
information can be found at: https://github.github.com/gfm.
|
|
275
|
+
|
|
276
|
+
See the ``body`` parameter of |st.markdown|_ for additional,
|
|
277
|
+
supported Markdown directives.
|
|
278
|
+
|
|
279
|
+
.. |st.markdown| replace:: ``st.markdown``
|
|
280
|
+
.. _st.markdown: https://docs.streamlit.io/develop/api-reference/text/st.markdown
|
|
281
|
+
|
|
282
|
+
anchor : str or False
|
|
283
|
+
The anchor name of the header that can be accessed with #anchor
|
|
284
|
+
in the URL. If omitted, it generates an anchor using the body.
|
|
285
|
+
If False, the anchor is not shown in the UI.
|
|
286
|
+
|
|
287
|
+
help : str or None
|
|
288
|
+
A tooltip that gets displayed next to the title. If this is
|
|
289
|
+
``None`` (default), no tooltip is displayed.
|
|
290
|
+
|
|
291
|
+
The tooltip can optionally contain GitHub-flavored Markdown,
|
|
292
|
+
including the Markdown directives described in the ``body``
|
|
293
|
+
parameter of ``st.markdown``.
|
|
294
|
+
|
|
295
|
+
width : "stretch", "content", or int
|
|
296
|
+
The width of the title element. This can be one of the following:
|
|
297
|
+
|
|
298
|
+
- ``"stretch"`` (default): The width of the element matches the
|
|
299
|
+
width of the parent container.
|
|
300
|
+
- ``"content"``: The width of the element matches the width of its
|
|
301
|
+
content, but doesn't exceed the width of the parent container.
|
|
302
|
+
- An integer specifying the width in pixels: The element has a
|
|
303
|
+
fixed width. If the specified width is greater than the width of
|
|
304
|
+
the parent container, the width of the element matches the width
|
|
305
|
+
of the parent container.
|
|
306
|
+
|
|
307
|
+
text_alignment : "left", "center", "right", or "justify"
|
|
308
|
+
The horizontal alignment of the text within the element. This can
|
|
309
|
+
be one of the following:
|
|
310
|
+
|
|
311
|
+
- ``"left"`` (default): Text is aligned to the left edge.
|
|
312
|
+
- ``"center"``: Text is centered.
|
|
313
|
+
- ``"right"``: Text is aligned to the right edge.
|
|
314
|
+
- ``"justify"``: Text is justified (stretched to fill the available
|
|
315
|
+
width with the last line left-aligned).
|
|
316
|
+
|
|
317
|
+
.. note::
|
|
318
|
+
For text alignment to have a visible effect, the element's
|
|
319
|
+
width must be wider than its content. If you use
|
|
320
|
+
``width="content"`` with short text, the alignment may not be
|
|
321
|
+
noticeable.
|
|
322
|
+
|
|
323
|
+
Examples
|
|
324
|
+
--------
|
|
325
|
+
>>> import streamlit as st
|
|
326
|
+
>>>
|
|
327
|
+
>>> st.title("This is a title")
|
|
328
|
+
>>> st.title("_Streamlit_ is :blue[cool] :sunglasses:")
|
|
329
|
+
|
|
330
|
+
.. output::
|
|
331
|
+
https://doc-title.streamlit.app/
|
|
332
|
+
height: 220px
|
|
333
|
+
|
|
334
|
+
"""
|
|
335
|
+
validate_width(width, allow_content=True)
|
|
336
|
+
layout_config = LayoutConfig(width=width, text_alignment=text_alignment)
|
|
337
|
+
|
|
338
|
+
return self.dg._enqueue(
|
|
339
|
+
"heading",
|
|
340
|
+
HeadingMixin._create_heading_proto(
|
|
341
|
+
tag=HeadingProtoTag.TITLE_TAG,
|
|
342
|
+
body=body,
|
|
343
|
+
anchor=anchor,
|
|
344
|
+
help=help,
|
|
345
|
+
),
|
|
346
|
+
layout_config=layout_config,
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
@property
|
|
350
|
+
def dg(self) -> DeltaGenerator:
|
|
351
|
+
"""Get our DeltaGenerator."""
|
|
352
|
+
return cast("DeltaGenerator", self)
|
|
353
|
+
|
|
354
|
+
@staticmethod
|
|
355
|
+
def _handle_divider_color(divider: Divider) -> str:
|
|
356
|
+
if divider is True:
|
|
357
|
+
return "auto"
|
|
358
|
+
valid_colors = [
|
|
359
|
+
"red",
|
|
360
|
+
"orange",
|
|
361
|
+
"yellow",
|
|
362
|
+
"blue",
|
|
363
|
+
"green",
|
|
364
|
+
"violet",
|
|
365
|
+
"gray",
|
|
366
|
+
"grey",
|
|
367
|
+
"rainbow",
|
|
368
|
+
]
|
|
369
|
+
if divider in valid_colors:
|
|
370
|
+
return cast("str", divider)
|
|
371
|
+
raise StreamlitAPIException(
|
|
372
|
+
f"Divider parameter has invalid value: `{divider}`. Please choose from: {', '.join(valid_colors)}."
|
|
373
|
+
)
|
|
374
|
+
|
|
375
|
+
@staticmethod
|
|
376
|
+
def _create_heading_proto(
|
|
377
|
+
tag: HeadingProtoTag,
|
|
378
|
+
body: SupportsStr,
|
|
379
|
+
anchor: Anchor = None,
|
|
380
|
+
help: str | None = None,
|
|
381
|
+
divider: Divider = False,
|
|
382
|
+
) -> HeadingProto:
|
|
383
|
+
proto = HeadingProto()
|
|
384
|
+
proto.tag = tag.value
|
|
385
|
+
proto.body = clean_text(body)
|
|
386
|
+
if divider:
|
|
387
|
+
proto.divider = HeadingMixin._handle_divider_color(divider)
|
|
388
|
+
if anchor is not None:
|
|
389
|
+
if anchor is False:
|
|
390
|
+
proto.hide_anchor = True
|
|
391
|
+
elif isinstance(anchor, str):
|
|
392
|
+
proto.anchor = anchor
|
|
393
|
+
elif anchor is True: # type: ignore
|
|
394
|
+
raise StreamlitAPIException(
|
|
395
|
+
f"Anchor parameter has invalid value: {anchor}. "
|
|
396
|
+
"Supported values: None, any string or False"
|
|
397
|
+
)
|
|
398
|
+
else:
|
|
399
|
+
raise StreamlitAPIException(
|
|
400
|
+
f"Anchor parameter has invalid type: {type(anchor).__name__}. "
|
|
401
|
+
"Supported values: None, any string or False"
|
|
402
|
+
)
|
|
403
|
+
|
|
404
|
+
if help:
|
|
405
|
+
proto.help = help
|
|
406
|
+
|
|
407
|
+
return proto
|