streamlit-nightly 1.43.2.dev20250307__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 +306 -0
- streamlit/__main__.py +20 -0
- streamlit/auth_util.py +218 -0
- streamlit/cli_util.py +105 -0
- streamlit/column_config.py +56 -0
- streamlit/commands/__init__.py +13 -0
- streamlit/commands/echo.py +126 -0
- streamlit/commands/execution_control.py +238 -0
- streamlit/commands/experimental_query_params.py +169 -0
- streamlit/commands/logo.py +189 -0
- streamlit/commands/navigation.py +385 -0
- streamlit/commands/page_config.py +311 -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 +150 -0
- streamlit/components/v1/__init__.py +31 -0
- streamlit/components/v1/component_arrow.py +141 -0
- streamlit/components/v1/component_registry.py +130 -0
- streamlit/components/v1/components.py +38 -0
- streamlit/components/v1/custom_component.py +243 -0
- streamlit/config.py +1513 -0
- streamlit/config_option.py +311 -0
- streamlit/config_util.py +177 -0
- streamlit/connections/__init__.py +28 -0
- streamlit/connections/base_connection.py +174 -0
- streamlit/connections/snowflake_connection.py +562 -0
- streamlit/connections/snowpark_connection.py +213 -0
- streamlit/connections/sql_connection.py +425 -0
- streamlit/connections/util.py +97 -0
- streamlit/cursor.py +210 -0
- streamlit/dataframe_util.py +1416 -0
- streamlit/delta_generator.py +602 -0
- streamlit/delta_generator_singletons.py +204 -0
- streamlit/deprecation_util.py +209 -0
- streamlit/development.py +21 -0
- streamlit/elements/__init__.py +13 -0
- streamlit/elements/alert.py +234 -0
- streamlit/elements/arrow.py +962 -0
- streamlit/elements/balloons.py +47 -0
- streamlit/elements/bokeh_chart.py +133 -0
- streamlit/elements/code.py +114 -0
- streamlit/elements/deck_gl_json_chart.py +546 -0
- streamlit/elements/dialog_decorator.py +267 -0
- streamlit/elements/doc_string.py +558 -0
- streamlit/elements/empty.py +130 -0
- streamlit/elements/exception.py +331 -0
- streamlit/elements/form.py +354 -0
- streamlit/elements/graphviz_chart.py +150 -0
- streamlit/elements/heading.py +302 -0
- streamlit/elements/html.py +105 -0
- streamlit/elements/iframe.py +191 -0
- streamlit/elements/image.py +196 -0
- streamlit/elements/json.py +139 -0
- streamlit/elements/layouts.py +879 -0
- streamlit/elements/lib/__init__.py +13 -0
- streamlit/elements/lib/built_in_chart_utils.py +1157 -0
- streamlit/elements/lib/color_util.py +263 -0
- streamlit/elements/lib/column_config_utils.py +542 -0
- streamlit/elements/lib/column_types.py +2188 -0
- streamlit/elements/lib/dialog.py +147 -0
- streamlit/elements/lib/dicttools.py +154 -0
- streamlit/elements/lib/event_utils.py +37 -0
- streamlit/elements/lib/file_uploader_utils.py +66 -0
- streamlit/elements/lib/form_utils.py +77 -0
- streamlit/elements/lib/image_utils.py +441 -0
- streamlit/elements/lib/js_number.py +105 -0
- streamlit/elements/lib/mutable_status_container.py +183 -0
- streamlit/elements/lib/options_selector_utils.py +250 -0
- streamlit/elements/lib/pandas_styler_utils.py +274 -0
- streamlit/elements/lib/policies.py +194 -0
- streamlit/elements/lib/streamlit_plotly_theme.py +207 -0
- streamlit/elements/lib/subtitle_utils.py +176 -0
- streamlit/elements/lib/utils.py +250 -0
- streamlit/elements/map.py +508 -0
- streamlit/elements/markdown.py +277 -0
- streamlit/elements/media.py +793 -0
- streamlit/elements/metric.py +301 -0
- streamlit/elements/plotly_chart.py +546 -0
- streamlit/elements/progress.py +156 -0
- streamlit/elements/pyplot.py +194 -0
- streamlit/elements/snow.py +47 -0
- streamlit/elements/spinner.py +113 -0
- streamlit/elements/text.py +76 -0
- streamlit/elements/toast.py +98 -0
- streamlit/elements/vega_charts.py +1984 -0
- streamlit/elements/widgets/__init__.py +13 -0
- streamlit/elements/widgets/audio_input.py +310 -0
- streamlit/elements/widgets/button.py +1123 -0
- streamlit/elements/widgets/button_group.py +1008 -0
- streamlit/elements/widgets/camera_input.py +263 -0
- streamlit/elements/widgets/chat.py +647 -0
- streamlit/elements/widgets/checkbox.py +352 -0
- streamlit/elements/widgets/color_picker.py +265 -0
- streamlit/elements/widgets/data_editor.py +983 -0
- streamlit/elements/widgets/file_uploader.py +486 -0
- streamlit/elements/widgets/multiselect.py +338 -0
- streamlit/elements/widgets/number_input.py +545 -0
- streamlit/elements/widgets/radio.py +407 -0
- streamlit/elements/widgets/select_slider.py +437 -0
- streamlit/elements/widgets/selectbox.py +366 -0
- streamlit/elements/widgets/slider.py +880 -0
- streamlit/elements/widgets/text_widgets.py +628 -0
- streamlit/elements/widgets/time_widgets.py +970 -0
- streamlit/elements/write.py +574 -0
- streamlit/emojis.py +34 -0
- streamlit/env_util.py +61 -0
- streamlit/error_util.py +105 -0
- streamlit/errors.py +452 -0
- streamlit/external/__init__.py +13 -0
- streamlit/external/langchain/__init__.py +23 -0
- streamlit/external/langchain/streamlit_callback_handler.py +406 -0
- streamlit/file_util.py +247 -0
- streamlit/git_util.py +173 -0
- streamlit/hello/__init__.py +13 -0
- streamlit/hello/animation_demo.py +82 -0
- streamlit/hello/dataframe_demo.py +71 -0
- streamlit/hello/hello.py +37 -0
- streamlit/hello/mapping_demo.py +114 -0
- streamlit/hello/plotting_demo.py +55 -0
- streamlit/hello/streamlit_app.py +55 -0
- streamlit/hello/utils.py +28 -0
- streamlit/logger.py +130 -0
- streamlit/material_icon_names.py +25 -0
- streamlit/navigation/__init__.py +13 -0
- streamlit/navigation/page.py +302 -0
- streamlit/net_util.py +125 -0
- streamlit/platform.py +33 -0
- streamlit/proto/Alert_pb2.py +29 -0
- streamlit/proto/Alert_pb2.pyi +90 -0
- streamlit/proto/AppPage_pb2.py +27 -0
- streamlit/proto/AppPage_pb2.pyi +64 -0
- streamlit/proto/ArrowNamedDataSet_pb2.py +28 -0
- streamlit/proto/ArrowNamedDataSet_pb2.pyi +57 -0
- streamlit/proto/ArrowVegaLiteChart_pb2.py +29 -0
- streamlit/proto/ArrowVegaLiteChart_pb2.pyi +84 -0
- streamlit/proto/Arrow_pb2.py +33 -0
- streamlit/proto/Arrow_pb2.pyi +188 -0
- streamlit/proto/AudioInput_pb2.py +28 -0
- streamlit/proto/AudioInput_pb2.pyi +58 -0
- streamlit/proto/Audio_pb2.py +27 -0
- streamlit/proto/Audio_pb2.pyi +58 -0
- streamlit/proto/AuthRedirect_pb2.py +27 -0
- streamlit/proto/AuthRedirect_pb2.pyi +41 -0
- streamlit/proto/AutoRerun_pb2.py +27 -0
- streamlit/proto/AutoRerun_pb2.pyi +45 -0
- streamlit/proto/BackMsg_pb2.py +29 -0
- streamlit/proto/BackMsg_pb2.pyi +105 -0
- streamlit/proto/Balloons_pb2.py +27 -0
- streamlit/proto/Balloons_pb2.pyi +43 -0
- streamlit/proto/Block_pb2.py +53 -0
- streamlit/proto/Block_pb2.pyi +322 -0
- streamlit/proto/BokehChart_pb2.py +27 -0
- streamlit/proto/BokehChart_pb2.pyi +49 -0
- streamlit/proto/ButtonGroup_pb2.py +36 -0
- streamlit/proto/ButtonGroup_pb2.pyi +169 -0
- streamlit/proto/Button_pb2.py +27 -0
- streamlit/proto/Button_pb2.pyi +71 -0
- streamlit/proto/CameraInput_pb2.py +28 -0
- streamlit/proto/CameraInput_pb2.pyi +58 -0
- streamlit/proto/ChatInput_pb2.py +31 -0
- streamlit/proto/ChatInput_pb2.pyi +111 -0
- streamlit/proto/Checkbox_pb2.py +30 -0
- streamlit/proto/Checkbox_pb2.pyi +90 -0
- streamlit/proto/ClientState_pb2.py +30 -0
- streamlit/proto/ClientState_pb2.pyi +90 -0
- streamlit/proto/Code_pb2.py +27 -0
- streamlit/proto/Code_pb2.pyi +55 -0
- streamlit/proto/ColorPicker_pb2.py +28 -0
- streamlit/proto/ColorPicker_pb2.pyi +67 -0
- streamlit/proto/Common_pb2.py +51 -0
- streamlit/proto/Common_pb2.pyi +293 -0
- streamlit/proto/Components_pb2.py +35 -0
- streamlit/proto/Components_pb2.pyi +172 -0
- streamlit/proto/DataFrame_pb2.py +56 -0
- streamlit/proto/DataFrame_pb2.pyi +397 -0
- streamlit/proto/DateInput_pb2.py +28 -0
- streamlit/proto/DateInput_pb2.pyi +83 -0
- streamlit/proto/DeckGlJsonChart_pb2.py +29 -0
- streamlit/proto/DeckGlJsonChart_pb2.pyi +102 -0
- streamlit/proto/Delta_pb2.py +31 -0
- streamlit/proto/Delta_pb2.pyi +74 -0
- streamlit/proto/DocString_pb2.py +29 -0
- streamlit/proto/DocString_pb2.pyi +93 -0
- streamlit/proto/DownloadButton_pb2.py +27 -0
- streamlit/proto/DownloadButton_pb2.pyi +70 -0
- streamlit/proto/Element_pb2.py +78 -0
- streamlit/proto/Element_pb2.pyi +312 -0
- streamlit/proto/Empty_pb2.py +27 -0
- streamlit/proto/Empty_pb2.pyi +36 -0
- streamlit/proto/Exception_pb2.py +27 -0
- streamlit/proto/Exception_pb2.pyi +72 -0
- streamlit/proto/Favicon_pb2.py +27 -0
- streamlit/proto/Favicon_pb2.pyi +40 -0
- streamlit/proto/FileUploader_pb2.py +28 -0
- streamlit/proto/FileUploader_pb2.pyi +78 -0
- streamlit/proto/ForwardMsg_pb2.py +53 -0
- streamlit/proto/ForwardMsg_pb2.pyi +293 -0
- streamlit/proto/GitInfo_pb2.py +29 -0
- streamlit/proto/GitInfo_pb2.pyi +83 -0
- streamlit/proto/GraphVizChart_pb2.py +27 -0
- streamlit/proto/GraphVizChart_pb2.pyi +53 -0
- streamlit/proto/Heading_pb2.py +27 -0
- streamlit/proto/Heading_pb2.pyi +56 -0
- streamlit/proto/Html_pb2.py +27 -0
- streamlit/proto/Html_pb2.pyi +42 -0
- streamlit/proto/IFrame_pb2.py +27 -0
- streamlit/proto/IFrame_pb2.pyi +59 -0
- streamlit/proto/Image_pb2.py +29 -0
- streamlit/proto/Image_pb2.pyi +84 -0
- streamlit/proto/Json_pb2.py +27 -0
- streamlit/proto/Json_pb2.pyi +53 -0
- streamlit/proto/LabelVisibilityMessage_pb2.py +29 -0
- streamlit/proto/LabelVisibilityMessage_pb2.pyi +68 -0
- streamlit/proto/LinkButton_pb2.py +27 -0
- streamlit/proto/LinkButton_pb2.pyi +58 -0
- streamlit/proto/Logo_pb2.py +27 -0
- streamlit/proto/Logo_pb2.pyi +51 -0
- streamlit/proto/Markdown_pb2.py +29 -0
- streamlit/proto/Markdown_pb2.pyi +86 -0
- streamlit/proto/Metric_pb2.py +32 -0
- streamlit/proto/Metric_pb2.pyi +101 -0
- streamlit/proto/MetricsEvent_pb2.py +30 -0
- streamlit/proto/MetricsEvent_pb2.pyi +200 -0
- streamlit/proto/MultiSelect_pb2.py +28 -0
- streamlit/proto/MultiSelect_pb2.pyi +81 -0
- streamlit/proto/NamedDataSet_pb2.py +28 -0
- streamlit/proto/NamedDataSet_pb2.pyi +59 -0
- streamlit/proto/Navigation_pb2.py +30 -0
- streamlit/proto/Navigation_pb2.pyi +84 -0
- streamlit/proto/NewSession_pb2.py +51 -0
- streamlit/proto/NewSession_pb2.pyi +481 -0
- streamlit/proto/NumberInput_pb2.py +30 -0
- streamlit/proto/NumberInput_pb2.pyi +121 -0
- streamlit/proto/PageConfig_pb2.py +33 -0
- streamlit/proto/PageConfig_pb2.pyi +126 -0
- streamlit/proto/PageInfo_pb2.py +27 -0
- streamlit/proto/PageInfo_pb2.pyi +43 -0
- streamlit/proto/PageLink_pb2.py +27 -0
- streamlit/proto/PageLink_pb2.pyi +63 -0
- streamlit/proto/PageNotFound_pb2.py +27 -0
- streamlit/proto/PageNotFound_pb2.pyi +42 -0
- streamlit/proto/PageProfile_pb2.py +31 -0
- streamlit/proto/PageProfile_pb2.pyi +127 -0
- streamlit/proto/PagesChanged_pb2.py +28 -0
- streamlit/proto/PagesChanged_pb2.pyi +48 -0
- streamlit/proto/ParentMessage_pb2.py +27 -0
- streamlit/proto/ParentMessage_pb2.pyi +46 -0
- streamlit/proto/PlotlyChart_pb2.py +31 -0
- streamlit/proto/PlotlyChart_pb2.pyi +131 -0
- streamlit/proto/Progress_pb2.py +27 -0
- streamlit/proto/Progress_pb2.pyi +43 -0
- streamlit/proto/Radio_pb2.py +28 -0
- streamlit/proto/Radio_pb2.pyi +84 -0
- streamlit/proto/RootContainer_pb2.py +27 -0
- streamlit/proto/RootContainer_pb2.pyi +56 -0
- streamlit/proto/Selectbox_pb2.py +28 -0
- streamlit/proto/Selectbox_pb2.pyi +80 -0
- streamlit/proto/SessionEvent_pb2.py +28 -0
- streamlit/proto/SessionEvent_pb2.pyi +62 -0
- streamlit/proto/SessionStatus_pb2.py +27 -0
- streamlit/proto/SessionStatus_pb2.pyi +57 -0
- streamlit/proto/Skeleton_pb2.py +29 -0
- streamlit/proto/Skeleton_pb2.pyi +71 -0
- streamlit/proto/Slider_pb2.py +32 -0
- streamlit/proto/Slider_pb2.pyi +142 -0
- streamlit/proto/Snow_pb2.py +27 -0
- streamlit/proto/Snow_pb2.pyi +43 -0
- streamlit/proto/Spinner_pb2.py +27 -0
- streamlit/proto/Spinner_pb2.pyi +49 -0
- streamlit/proto/TextArea_pb2.py +28 -0
- streamlit/proto/TextArea_pb2.pyi +80 -0
- streamlit/proto/TextInput_pb2.py +30 -0
- streamlit/proto/TextInput_pb2.pyi +107 -0
- streamlit/proto/Text_pb2.py +27 -0
- streamlit/proto/Text_pb2.pyi +46 -0
- streamlit/proto/TimeInput_pb2.py +28 -0
- streamlit/proto/TimeInput_pb2.pyi +74 -0
- streamlit/proto/Toast_pb2.py +27 -0
- streamlit/proto/Toast_pb2.pyi +45 -0
- streamlit/proto/VegaLiteChart_pb2.py +29 -0
- streamlit/proto/VegaLiteChart_pb2.pyi +71 -0
- streamlit/proto/Video_pb2.py +31 -0
- streamlit/proto/Video_pb2.pyi +117 -0
- streamlit/proto/WidgetStates_pb2.py +31 -0
- streamlit/proto/WidgetStates_pb2.pyi +126 -0
- streamlit/proto/__init__.py +15 -0
- streamlit/proto/openmetrics_data_model_pb2.py +60 -0
- streamlit/proto/openmetrics_data_model_pb2.pyi +522 -0
- streamlit/py.typed +0 -0
- streamlit/runtime/__init__.py +50 -0
- streamlit/runtime/app_session.py +982 -0
- streamlit/runtime/caching/__init__.py +98 -0
- streamlit/runtime/caching/cache_data_api.py +665 -0
- streamlit/runtime/caching/cache_errors.py +142 -0
- streamlit/runtime/caching/cache_resource_api.py +527 -0
- streamlit/runtime/caching/cache_type.py +33 -0
- streamlit/runtime/caching/cache_utils.py +523 -0
- streamlit/runtime/caching/cached_message_replay.py +290 -0
- streamlit/runtime/caching/hashing.py +637 -0
- streamlit/runtime/caching/legacy_cache_api.py +169 -0
- streamlit/runtime/caching/storage/__init__.py +29 -0
- streamlit/runtime/caching/storage/cache_storage_protocol.py +239 -0
- streamlit/runtime/caching/storage/dummy_cache_storage.py +60 -0
- streamlit/runtime/caching/storage/in_memory_cache_storage_wrapper.py +145 -0
- streamlit/runtime/caching/storage/local_disk_cache_storage.py +223 -0
- streamlit/runtime/connection_factory.py +436 -0
- streamlit/runtime/context.py +280 -0
- streamlit/runtime/credentials.py +364 -0
- streamlit/runtime/forward_msg_cache.py +296 -0
- streamlit/runtime/forward_msg_queue.py +240 -0
- streamlit/runtime/fragment.py +477 -0
- streamlit/runtime/media_file_manager.py +234 -0
- streamlit/runtime/media_file_storage.py +143 -0
- streamlit/runtime/memory_media_file_storage.py +181 -0
- streamlit/runtime/memory_session_storage.py +77 -0
- streamlit/runtime/memory_uploaded_file_manager.py +138 -0
- streamlit/runtime/metrics_util.py +486 -0
- streamlit/runtime/pages_manager.py +165 -0
- streamlit/runtime/runtime.py +792 -0
- streamlit/runtime/runtime_util.py +106 -0
- streamlit/runtime/script_data.py +46 -0
- streamlit/runtime/scriptrunner/__init__.py +38 -0
- streamlit/runtime/scriptrunner/exec_code.py +159 -0
- streamlit/runtime/scriptrunner/magic.py +273 -0
- streamlit/runtime/scriptrunner/magic_funcs.py +32 -0
- streamlit/runtime/scriptrunner/script_cache.py +89 -0
- streamlit/runtime/scriptrunner/script_runner.py +756 -0
- streamlit/runtime/scriptrunner_utils/__init__.py +19 -0
- streamlit/runtime/scriptrunner_utils/exceptions.py +48 -0
- streamlit/runtime/scriptrunner_utils/script_requests.py +307 -0
- streamlit/runtime/scriptrunner_utils/script_run_context.py +287 -0
- streamlit/runtime/secrets.py +534 -0
- streamlit/runtime/session_manager.py +394 -0
- streamlit/runtime/state/__init__.py +41 -0
- streamlit/runtime/state/common.py +191 -0
- streamlit/runtime/state/query_params.py +205 -0
- streamlit/runtime/state/query_params_proxy.py +218 -0
- streamlit/runtime/state/safe_session_state.py +138 -0
- streamlit/runtime/state/session_state.py +772 -0
- streamlit/runtime/state/session_state_proxy.py +153 -0
- streamlit/runtime/state/widgets.py +135 -0
- streamlit/runtime/stats.py +109 -0
- streamlit/runtime/uploaded_file_manager.py +148 -0
- streamlit/runtime/websocket_session_manager.py +167 -0
- streamlit/source_util.py +98 -0
- streamlit/static/favicon.png +0 -0
- streamlit/static/index.html +61 -0
- streamlit/static/static/css/index.Bmkmz40k.css +1 -0
- streamlit/static/static/css/index.DpJG_94W.css +1 -0
- streamlit/static/static/css/index.DzuxGC_t.css +1 -0
- streamlit/static/static/js/FileDownload.esm.Bp9m5jrx.js +1 -0
- streamlit/static/static/js/FileHelper.D_3pbilj.js +5 -0
- streamlit/static/static/js/FormClearHelper.Ct2rwLXo.js +1 -0
- streamlit/static/static/js/Hooks.BKdzj5MJ.js +1 -0
- streamlit/static/static/js/InputInstructions.DB3QGNJP.js +1 -0
- streamlit/static/static/js/ProgressBar.D40A5xc2.js +2 -0
- streamlit/static/static/js/RenderInPortalIfExists.DLUCooTN.js +1 -0
- streamlit/static/static/js/Toolbar.BiGGIQun.js +1 -0
- streamlit/static/static/js/UploadFileInfo.C-jY39rj.js +1 -0
- streamlit/static/static/js/base-input.CQBQT24M.js +4 -0
- streamlit/static/static/js/checkbox.Buj8gd_M.js +9 -0
- streamlit/static/static/js/createDownloadLinkElement.DZMwyjvU.js +1 -0
- streamlit/static/static/js/createSuper.CesK3I23.js +1 -0
- streamlit/static/static/js/data-grid-overlay-editor.B69OOFM4.js +1 -0
- streamlit/static/static/js/downloader.BZQhlBNT.js +1 -0
- streamlit/static/static/js/es6.D9Zhqujy.js +2 -0
- streamlit/static/static/js/iframeResizer.contentWindow.CAzcBpCC.js +1 -0
- streamlit/static/static/js/index.08vcOOvb.js +1 -0
- streamlit/static/static/js/index.0uqKfJUS.js +1 -0
- streamlit/static/static/js/index.B02M5u69.js +203 -0
- streamlit/static/static/js/index.B7mcZKMx.js +1 -0
- streamlit/static/static/js/index.BAQDHFA_.js +1 -0
- streamlit/static/static/js/index.BI60cMVr.js +2 -0
- streamlit/static/static/js/index.BLug2inK.js +1 -0
- streamlit/static/static/js/index.BM6TMY8g.js +2 -0
- streamlit/static/static/js/index.BZ9p1t7G.js +1 -0
- streamlit/static/static/js/index.BZqa87a1.js +2 -0
- streamlit/static/static/js/index.BcsRUzZZ.js +1 -0
- streamlit/static/static/js/index.BgVMiY_P.js +197 -0
- streamlit/static/static/js/index.BtuGy7By.js +6 -0
- streamlit/static/static/js/index.BuDuBmrs.js +1 -0
- streamlit/static/static/js/index.BvXU2oKV.js +1 -0
- streamlit/static/static/js/index.BxcwPacT.js +73 -0
- streamlit/static/static/js/index.CWX8KB81.js +1 -0
- streamlit/static/static/js/index.CXzZTo_q.js +1 -0
- streamlit/static/static/js/index.CcRWp_KL.js +1 -0
- streamlit/static/static/js/index.Cd-_xe55.js +3 -0
- streamlit/static/static/js/index.CdG2PXln.js +4537 -0
- streamlit/static/static/js/index.CjXvXmcP.js +1 -0
- streamlit/static/static/js/index.D1HZENZx.js +776 -0
- streamlit/static/static/js/index.D21Efo64.js +1617 -0
- streamlit/static/static/js/index.D9WgGVBx.js +7 -0
- streamlit/static/static/js/index.DEcsHtvb.js +12 -0
- streamlit/static/static/js/index.DFeMfr_K.js +1 -0
- streamlit/static/static/js/index.DHFBoItz.js +1 -0
- streamlit/static/static/js/index.D_PrBKnJ.js +3 -0
- streamlit/static/static/js/index.DmuRkekN.js +3855 -0
- streamlit/static/static/js/index.Do6eY8sf.js +1 -0
- streamlit/static/static/js/index.Dz3lP2P-.js +1 -0
- streamlit/static/static/js/index.Dz_UqF-s.js +1 -0
- streamlit/static/static/js/index.GkSUsPhJ.js +1 -0
- streamlit/static/static/js/index.H1U1IC_d.js +3 -0
- streamlit/static/static/js/index.g6p_4DPr.js +1 -0
- streamlit/static/static/js/index.g9x_GKss.js +1 -0
- streamlit/static/static/js/index.zo9jm08y.js +1 -0
- streamlit/static/static/js/input.DnaFglHq.js +2 -0
- streamlit/static/static/js/inputUtils.CQWz5UKz.js +1 -0
- streamlit/static/static/js/memory.Crb9x4-F.js +1 -0
- streamlit/static/static/js/mergeWith.ouAz0sK3.js +1 -0
- streamlit/static/static/js/number-overlay-editor._UaN-O48.js +9 -0
- streamlit/static/static/js/possibleConstructorReturn.CtGjGFHz.js +1 -0
- streamlit/static/static/js/sandbox.CBybYOhV.js +1 -0
- streamlit/static/static/js/sprintf.D7DtBTRn.js +1 -0
- streamlit/static/static/js/textarea.Cb_uJt5U.js +2 -0
- streamlit/static/static/js/threshold.DjX0wlsa.js +1 -0
- streamlit/static/static/js/timepicker.DKT7pfoF.js +4 -0
- streamlit/static/static/js/timer.CAwTRJ_g.js +1 -0
- streamlit/static/static/js/toConsumableArray.05Ikp13-.js +3 -0
- streamlit/static/static/js/uniqueId.D2FMWUEI.js +1 -0
- streamlit/static/static/js/useBasicWidgetState.urnZLANY.js +1 -0
- streamlit/static/static/js/useOnInputChange.BOKIIdJ1.js +1 -0
- streamlit/static/static/js/value.CgPGBV_l.js +1 -0
- streamlit/static/static/js/withFullScreenWrapper.C_N8J0Xx.js +1 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.BQhdFMY1.woff2 +0 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.DMm9YOAa.woff +0 -0
- streamlit/static/static/media/KaTeX_AMS-Regular.DRggAlZN.ttf +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.ATXxdsX0.ttf +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.BEiXGLvX.woff +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Bold.Dq_IR9rO.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.CTRA-rTL.woff +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.Di6jR-x-.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Caligraphic-Regular.wX97UBjC.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.BdnERNNW.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.BsDP51OF.woff +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Bold.CL6g_b3V.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.CB_wures.ttf +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.CTYiF6lA.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Fraktur-Regular.Dxdc4cR9.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.Cx986IdX.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.Jm3AIy58.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Bold.waoOVXN0.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.DxDJ3AOS.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.DzxPMmG6.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-BoldItalic.SpSLRI95.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.3WenGoN9.ttf +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.BMLOBm91.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Italic.NWA7e6Wa.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.B22Nviop.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.Dr94JaBh.woff +0 -0
- streamlit/static/static/media/KaTeX_Main-Regular.ypZvNtVU.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.B3XSjfu4.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.CZnvNsCZ.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Math-BoldItalic.iY-2wyZ7.woff +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.DA0__PXp.woff +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.flOr_0UB.ttf +0 -0
- streamlit/static/static/media/KaTeX_Math-Italic.t53AETM-.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.CFMepnvq.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.D1sUS0GD.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Bold.DbIhKOiC.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.C3H0VqGB.woff2 +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.DN2j7dab.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Italic.YYjJ1zSn.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.BNo7hRIc.ttf +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.CS6fqUqJ.woff +0 -0
- streamlit/static/static/media/KaTeX_SansSerif-Regular.DDBCnlJ7.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.C5JkGWo-.ttf +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.D3wIWfF6.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Script-Regular.D5yQViql.woff +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.C195tn64.woff +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.Dbsnue_I.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size1-Regular.mCD8mA8B.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.B7gKUWhC.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.Dy4dx90m.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Size2-Regular.oD1tc_U0.woff +0 -0
- streamlit/static/static/media/KaTeX_Size3-Regular.CTq5MqoE.woff +0 -0
- streamlit/static/static/media/KaTeX_Size3-Regular.DgpXs0kz.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.BF-4gkZK.woff +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.DWFBv043.ttf +0 -0
- streamlit/static/static/media/KaTeX_Size4-Regular.Dl5lxZxV.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.C0xS9mPB.woff +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.CO6r4hn1.woff2 +0 -0
- streamlit/static/static/media/KaTeX_Typewriter-Regular.D3Ib7_Hf.ttf +0 -0
- streamlit/static/static/media/MaterialSymbols-Rounded.DcZbplWk.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Bold.CFEfr7-q.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-BoldItalic.C-LkFXxa.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Italic.CxFOx7N-.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-Regular.CBOlD63d.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-SemiBold.CFHwW3Wd.woff2 +0 -0
- streamlit/static/static/media/SourceCodePro-SemiBoldItalic.Cg2yRu82.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Bold.-6c9oR8J.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-BoldItalic.DmM_grLY.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Italic.I1ipWe7Q.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-Regular.DZLUzqI4.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-SemiBold.sKQIyTMz.woff2 +0 -0
- streamlit/static/static/media/SourceSansPro-SemiBoldItalic.C0wP0icr.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Bold.8TUnKj4x.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-BoldItalic.CBVO7Ve7.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Italic.DkFgL2HZ.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-Regular.CNJNET2S.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-SemiBold.CHyh9GC5.woff2 +0 -0
- streamlit/static/static/media/SourceSerifPro-SemiBoldItalic.CBtz8sWN.woff2 +0 -0
- streamlit/static/static/media/balloon-0.Czj7AKwE.png +0 -0
- streamlit/static/static/media/balloon-1.CNvFFrND.png +0 -0
- streamlit/static/static/media/balloon-2.DTvC6B1t.png +0 -0
- streamlit/static/static/media/balloon-3.CgSk4tbL.png +0 -0
- streamlit/static/static/media/balloon-4.mbtFrzxf.png +0 -0
- streamlit/static/static/media/balloon-5.CSwkUfRA.png +0 -0
- streamlit/static/static/media/fireworks.B4d-_KUe.gif +0 -0
- streamlit/static/static/media/flake-0.DgWaVvm5.png +0 -0
- streamlit/static/static/media/flake-1.B2r5AHMK.png +0 -0
- streamlit/static/static/media/flake-2.BnWSExPC.png +0 -0
- streamlit/static/static/media/snowflake.JU2jBHL8.svg +11 -0
- streamlit/string_util.py +203 -0
- streamlit/temporary_directory.py +56 -0
- streamlit/testing/__init__.py +13 -0
- streamlit/testing/v1/__init__.py +17 -0
- streamlit/testing/v1/app_test.py +1050 -0
- streamlit/testing/v1/element_tree.py +2083 -0
- streamlit/testing/v1/local_script_runner.py +180 -0
- streamlit/testing/v1/util.py +53 -0
- streamlit/time_util.py +75 -0
- streamlit/type_util.py +460 -0
- streamlit/url_util.py +122 -0
- streamlit/user_info.py +519 -0
- streamlit/util.py +72 -0
- streamlit/vendor/__init__.py +0 -0
- streamlit/vendor/pympler/__init__.py +0 -0
- streamlit/vendor/pympler/asizeof.py +2869 -0
- streamlit/version.py +18 -0
- streamlit/watcher/__init__.py +28 -0
- streamlit/watcher/event_based_path_watcher.py +406 -0
- streamlit/watcher/folder_black_list.py +82 -0
- streamlit/watcher/local_sources_watcher.py +233 -0
- streamlit/watcher/path_watcher.py +185 -0
- streamlit/watcher/polling_path_watcher.py +124 -0
- streamlit/watcher/util.py +207 -0
- streamlit/web/__init__.py +13 -0
- streamlit/web/bootstrap.py +353 -0
- streamlit/web/cache_storage_manager_config.py +38 -0
- streamlit/web/cli.py +369 -0
- streamlit/web/server/__init__.py +26 -0
- streamlit/web/server/app_static_file_handler.py +93 -0
- streamlit/web/server/authlib_tornado_integration.py +60 -0
- streamlit/web/server/browser_websocket_handler.py +246 -0
- streamlit/web/server/component_request_handler.py +116 -0
- streamlit/web/server/media_file_handler.py +141 -0
- streamlit/web/server/oauth_authlib_routes.py +176 -0
- streamlit/web/server/oidc_mixin.py +108 -0
- streamlit/web/server/routes.py +295 -0
- streamlit/web/server/server.py +479 -0
- streamlit/web/server/server_util.py +161 -0
- streamlit/web/server/stats_request_handler.py +95 -0
- streamlit/web/server/upload_file_request_handler.py +137 -0
- streamlit/web/server/websocket_headers.py +56 -0
- streamlit_nightly-1.43.2.dev20250307.data/scripts/streamlit.cmd +16 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/METADATA +207 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/RECORD +563 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/WHEEL +5 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/entry_points.txt +2 -0
- streamlit_nightly-1.43.2.dev20250307.dist-info/top_level.txt +1 -0
@@ -0,0 +1,31 @@
|
|
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
|
+
"""
|
16
|
+
This directory contains the files and modules for the exposed API.
|
17
|
+
"""
|
18
|
+
|
19
|
+
import streamlit
|
20
|
+
from streamlit.components.v1.component_registry import declare_component
|
21
|
+
|
22
|
+
# `html` and `iframe` are part of Custom Components, so they appear in this
|
23
|
+
# `streamlit.components.v1` namespace.
|
24
|
+
html = streamlit._main._html
|
25
|
+
iframe = streamlit._main._iframe
|
26
|
+
|
27
|
+
__all__ = [
|
28
|
+
"declare_component",
|
29
|
+
"html",
|
30
|
+
"iframe",
|
31
|
+
]
|
@@ -0,0 +1,141 @@
|
|
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
|
+
"""Data marshalling utilities for ArrowTable protobufs, which are used by
|
16
|
+
CustomComponent for dataframe serialization.
|
17
|
+
"""
|
18
|
+
|
19
|
+
from __future__ import annotations
|
20
|
+
|
21
|
+
from typing import TYPE_CHECKING, Any
|
22
|
+
|
23
|
+
from streamlit import dataframe_util
|
24
|
+
from streamlit.elements.lib import pandas_styler_utils
|
25
|
+
|
26
|
+
if TYPE_CHECKING:
|
27
|
+
from pandas import DataFrame, Index, Series
|
28
|
+
|
29
|
+
from streamlit.proto.Components_pb2 import ArrowTable as ArrowTableProto
|
30
|
+
|
31
|
+
|
32
|
+
def _maybe_tuple_to_list(item: Any) -> Any:
|
33
|
+
"""Convert a tuple to a list. Leave as is if it's not a tuple."""
|
34
|
+
return list(item) if isinstance(item, tuple) else item
|
35
|
+
|
36
|
+
|
37
|
+
def marshall(
|
38
|
+
proto: ArrowTableProto, data: Any, default_uuid: str | None = None
|
39
|
+
) -> None:
|
40
|
+
"""Marshall data into an ArrowTable proto.
|
41
|
+
|
42
|
+
Parameters
|
43
|
+
----------
|
44
|
+
proto : proto.ArrowTable
|
45
|
+
Output. The protobuf for a Streamlit ArrowTable proto.
|
46
|
+
|
47
|
+
data : pandas.DataFrame, pandas.Styler, numpy.ndarray, Iterable, dict, or None
|
48
|
+
Something that is or can be converted to a dataframe.
|
49
|
+
|
50
|
+
"""
|
51
|
+
if dataframe_util.is_pandas_styler(data):
|
52
|
+
pandas_styler_utils.marshall_styler(proto, data, default_uuid) # type: ignore
|
53
|
+
|
54
|
+
df = dataframe_util.convert_anything_to_pandas_df(data)
|
55
|
+
_marshall_index(proto, df.index)
|
56
|
+
_marshall_columns(proto, df.columns)
|
57
|
+
_marshall_data(proto, df)
|
58
|
+
|
59
|
+
|
60
|
+
def _marshall_index(proto: ArrowTableProto, index: Index) -> None:
|
61
|
+
"""Marshall pandas.DataFrame index into an ArrowTable proto.
|
62
|
+
|
63
|
+
Parameters
|
64
|
+
----------
|
65
|
+
proto : proto.ArrowTable
|
66
|
+
Output. The protobuf for a Streamlit ArrowTable proto.
|
67
|
+
|
68
|
+
index : pd.Index
|
69
|
+
Index to use for resulting frame.
|
70
|
+
Will default to RangeIndex (0, 1, 2, ..., n) if no index is provided.
|
71
|
+
|
72
|
+
"""
|
73
|
+
import pandas as pd
|
74
|
+
|
75
|
+
index = map(_maybe_tuple_to_list, index.values)
|
76
|
+
index_df = pd.DataFrame(index)
|
77
|
+
proto.index = dataframe_util.convert_pandas_df_to_arrow_bytes(index_df)
|
78
|
+
|
79
|
+
|
80
|
+
def _marshall_columns(proto: ArrowTableProto, columns: Series) -> None:
|
81
|
+
"""Marshall pandas.DataFrame columns into an ArrowTable proto.
|
82
|
+
|
83
|
+
Parameters
|
84
|
+
----------
|
85
|
+
proto : proto.ArrowTable
|
86
|
+
Output. The protobuf for a Streamlit ArrowTable proto.
|
87
|
+
|
88
|
+
columns : Series
|
89
|
+
Column labels to use for resulting frame.
|
90
|
+
Will default to RangeIndex (0, 1, 2, ..., n) if no column labels are provided.
|
91
|
+
|
92
|
+
"""
|
93
|
+
import pandas as pd
|
94
|
+
|
95
|
+
columns = map(_maybe_tuple_to_list, columns.values)
|
96
|
+
columns_df = pd.DataFrame(columns)
|
97
|
+
proto.columns = dataframe_util.convert_pandas_df_to_arrow_bytes(columns_df)
|
98
|
+
|
99
|
+
|
100
|
+
def _marshall_data(proto: ArrowTableProto, df: DataFrame) -> None:
|
101
|
+
"""Marshall pandas.DataFrame data into an ArrowTable proto.
|
102
|
+
|
103
|
+
Parameters
|
104
|
+
----------
|
105
|
+
proto : proto.ArrowTable
|
106
|
+
Output. The protobuf for a Streamlit ArrowTable proto.
|
107
|
+
|
108
|
+
df : pandas.DataFrame
|
109
|
+
A dataframe to marshall.
|
110
|
+
|
111
|
+
"""
|
112
|
+
proto.data = dataframe_util.convert_pandas_df_to_arrow_bytes(df)
|
113
|
+
|
114
|
+
|
115
|
+
def arrow_proto_to_dataframe(proto: ArrowTableProto) -> DataFrame:
|
116
|
+
"""Convert ArrowTable proto to pandas.DataFrame.
|
117
|
+
|
118
|
+
Parameters
|
119
|
+
----------
|
120
|
+
proto : proto.ArrowTable
|
121
|
+
Output. pandas.DataFrame
|
122
|
+
|
123
|
+
"""
|
124
|
+
|
125
|
+
if dataframe_util.is_pyarrow_version_less_than("14.0.1"):
|
126
|
+
raise RuntimeError(
|
127
|
+
"The installed pyarrow version is not compatible with this component. "
|
128
|
+
"Please upgrade to 14.0.1 or higher: pip install -U pyarrow"
|
129
|
+
)
|
130
|
+
|
131
|
+
import pandas as pd
|
132
|
+
|
133
|
+
data = dataframe_util.convert_arrow_bytes_to_pandas_df(proto.data)
|
134
|
+
index = dataframe_util.convert_arrow_bytes_to_pandas_df(proto.index)
|
135
|
+
columns = dataframe_util.convert_arrow_bytes_to_pandas_df(proto.columns)
|
136
|
+
|
137
|
+
return pd.DataFrame(
|
138
|
+
data.to_numpy(),
|
139
|
+
index=index.to_numpy().T.tolist(),
|
140
|
+
columns=columns.to_numpy().T.tolist(),
|
141
|
+
)
|
@@ -0,0 +1,130 @@
|
|
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
|
+
import inspect
|
18
|
+
import os
|
19
|
+
from pathlib import Path
|
20
|
+
from typing import TYPE_CHECKING
|
21
|
+
|
22
|
+
from streamlit.components.v1.custom_component import CustomComponent
|
23
|
+
from streamlit.runtime import get_instance
|
24
|
+
from streamlit.runtime.scriptrunner_utils.script_run_context import get_script_run_ctx
|
25
|
+
|
26
|
+
if TYPE_CHECKING:
|
27
|
+
from types import FrameType
|
28
|
+
|
29
|
+
from streamlit.components.types.base_component_registry import BaseComponentRegistry
|
30
|
+
|
31
|
+
|
32
|
+
def _get_module_name(caller_frame: FrameType) -> str:
|
33
|
+
# Get the caller's module name. `__name__` gives us the module's
|
34
|
+
# fully-qualified name, which includes its package.
|
35
|
+
module = inspect.getmodule(caller_frame)
|
36
|
+
assert module is not None
|
37
|
+
module_name = module.__name__
|
38
|
+
|
39
|
+
# If the caller was the main module that was executed (that is, if the
|
40
|
+
# user executed `python my_component.py`), then this name will be
|
41
|
+
# "__main__" instead of the actual package name. In this case, we use
|
42
|
+
# the main module's filename, sans `.py` extension, as the component name.
|
43
|
+
if module_name == "__main__":
|
44
|
+
file_path = inspect.getfile(caller_frame)
|
45
|
+
filename = os.path.basename(file_path)
|
46
|
+
module_name, _ = os.path.splitext(filename)
|
47
|
+
|
48
|
+
return module_name
|
49
|
+
|
50
|
+
|
51
|
+
def declare_component(
|
52
|
+
name: str,
|
53
|
+
path: str | Path | None = None,
|
54
|
+
url: str | None = None,
|
55
|
+
) -> CustomComponent:
|
56
|
+
"""Create a custom component and register it if there is a ``ScriptRunContext``.
|
57
|
+
|
58
|
+
The component is not registered when there is no ``ScriptRunContext``.
|
59
|
+
This can happen when a ``CustomComponent`` is executed as standalone
|
60
|
+
command (e.g. for testing).
|
61
|
+
|
62
|
+
To use this function, import it from the ``streamlit.components.v1``
|
63
|
+
module.
|
64
|
+
|
65
|
+
.. warning::
|
66
|
+
Using ``st.components.v1.declare_component`` directly (instead of
|
67
|
+
importing its module) is deprecated and will be disallowed in a later
|
68
|
+
version.
|
69
|
+
|
70
|
+
Parameters
|
71
|
+
----------
|
72
|
+
name : str
|
73
|
+
A short, descriptive name for the component, like "slider".
|
74
|
+
|
75
|
+
path: str, Path, or None
|
76
|
+
The path to serve the component's frontend files from. The path should
|
77
|
+
be absolute. If ``path`` is ``None`` (default), Streamlit will serve
|
78
|
+
the component from the location in ``url``. Either ``path`` or ``url``
|
79
|
+
must be specified, but not both.
|
80
|
+
|
81
|
+
url: str or None
|
82
|
+
The URL that the component is served from. If ``url`` is ``None``
|
83
|
+
(default), Streamlit will serve the component from the location in
|
84
|
+
``path``. Either ``path`` or ``url`` must be specified, but not both.
|
85
|
+
|
86
|
+
Returns
|
87
|
+
-------
|
88
|
+
CustomComponent
|
89
|
+
A ``CustomComponent`` that can be called like a function.
|
90
|
+
Calling the component will create a new instance of the component
|
91
|
+
in the Streamlit app.
|
92
|
+
|
93
|
+
"""
|
94
|
+
if path is not None and isinstance(path, Path):
|
95
|
+
path = str(path)
|
96
|
+
|
97
|
+
# Get our stack frame.
|
98
|
+
current_frame: FrameType | None = inspect.currentframe()
|
99
|
+
assert current_frame is not None
|
100
|
+
# Get the stack frame of our calling function.
|
101
|
+
caller_frame = current_frame.f_back
|
102
|
+
assert caller_frame is not None
|
103
|
+
module_name = _get_module_name(caller_frame)
|
104
|
+
|
105
|
+
# Build the component name.
|
106
|
+
component_name = f"{module_name}.{name}"
|
107
|
+
|
108
|
+
# Create our component object, and register it.
|
109
|
+
component = CustomComponent(
|
110
|
+
name=component_name, path=path, url=url, module_name=module_name
|
111
|
+
)
|
112
|
+
# the ctx can be None if a custom component script is run outside of Streamlit, e.g. via 'python ...'
|
113
|
+
ctx = get_script_run_ctx()
|
114
|
+
if ctx is not None:
|
115
|
+
get_instance().component_registry.register_component(component)
|
116
|
+
return component
|
117
|
+
|
118
|
+
|
119
|
+
# Keep for backwards-compatibility for now as we don't know whether existing custom
|
120
|
+
# components use this method. We made significant refactors to the custom component
|
121
|
+
# registry code in https://github.com/streamlit/streamlit/pull/8193 and after
|
122
|
+
# that is out in the wild, we can follow-up with more refactorings, e.g. remove
|
123
|
+
# the following class and method. When we do that, we should conduct some testing with
|
124
|
+
# popular custom components.
|
125
|
+
class ComponentRegistry:
|
126
|
+
@classmethod
|
127
|
+
def instance(cls) -> BaseComponentRegistry:
|
128
|
+
"""Returns the ComponentRegistry of the runtime instance."""
|
129
|
+
|
130
|
+
return get_instance().component_registry
|
@@ -0,0 +1,38 @@
|
|
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
|
+
# The components.py file exists because existing custom components have started
|
16
|
+
# to rely on internals of the components package. For example, streamlit-option-menu accesses
|
17
|
+
# [register_widget](https://github.com/victoryhb/streamlit-option-menu/blob/master/streamlit_option_menu/streamlit_callback.py#L28),
|
18
|
+
# which is only a transitive import through `streamlit.components.v1.custom_component`.
|
19
|
+
# Since we do not know what other internals are used out in the wild, let's try to
|
20
|
+
# model the old behavior and not to break things.
|
21
|
+
|
22
|
+
# This should be cleaned up in the future, e.g. as part of components v2.
|
23
|
+
|
24
|
+
from streamlit.components.v1.component_registry import (
|
25
|
+
declare_component,
|
26
|
+
)
|
27
|
+
from streamlit.components.v1.custom_component import (
|
28
|
+
CustomComponent,
|
29
|
+
MarshallComponentException,
|
30
|
+
)
|
31
|
+
from streamlit.runtime.state import register_widget
|
32
|
+
|
33
|
+
__all__ = [
|
34
|
+
"CustomComponent",
|
35
|
+
"declare_component",
|
36
|
+
"MarshallComponentException",
|
37
|
+
"register_widget",
|
38
|
+
]
|
@@ -0,0 +1,243 @@
|
|
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
|
+
import json
|
18
|
+
from typing import TYPE_CHECKING, Any
|
19
|
+
|
20
|
+
from streamlit.components.types.base_custom_component import BaseCustomComponent
|
21
|
+
from streamlit.dataframe_util import is_dataframe_like
|
22
|
+
from streamlit.delta_generator_singletons import get_dg_singleton_instance
|
23
|
+
from streamlit.elements.lib.form_utils import current_form_id
|
24
|
+
from streamlit.elements.lib.policies import check_cache_replay_rules
|
25
|
+
from streamlit.elements.lib.utils import compute_and_register_element_id
|
26
|
+
from streamlit.errors import StreamlitAPIException
|
27
|
+
from streamlit.proto.Components_pb2 import ArrowTable as ArrowTableProto
|
28
|
+
from streamlit.proto.Components_pb2 import SpecialArg
|
29
|
+
from streamlit.proto.Element_pb2 import Element
|
30
|
+
from streamlit.runtime.metrics_util import gather_metrics
|
31
|
+
from streamlit.runtime.scriptrunner_utils.script_run_context import get_script_run_ctx
|
32
|
+
from streamlit.runtime.state import register_widget
|
33
|
+
from streamlit.type_util import is_bytes_like, to_bytes
|
34
|
+
|
35
|
+
if TYPE_CHECKING:
|
36
|
+
from streamlit.delta_generator import DeltaGenerator
|
37
|
+
from streamlit.runtime.state.common import WidgetCallback
|
38
|
+
|
39
|
+
|
40
|
+
class MarshallComponentException(StreamlitAPIException):
|
41
|
+
"""Class for exceptions generated during custom component marshalling."""
|
42
|
+
|
43
|
+
pass
|
44
|
+
|
45
|
+
|
46
|
+
class CustomComponent(BaseCustomComponent):
|
47
|
+
"""A Custom Component declaration."""
|
48
|
+
|
49
|
+
def __call__(
|
50
|
+
self,
|
51
|
+
*args,
|
52
|
+
default: Any = None,
|
53
|
+
key: str | None = None,
|
54
|
+
on_change: WidgetCallback | None = None,
|
55
|
+
**kwargs,
|
56
|
+
) -> Any:
|
57
|
+
"""An alias for create_instance."""
|
58
|
+
return self.create_instance(
|
59
|
+
*args,
|
60
|
+
default=default,
|
61
|
+
key=key,
|
62
|
+
on_change=on_change,
|
63
|
+
**kwargs,
|
64
|
+
)
|
65
|
+
|
66
|
+
@gather_metrics("create_instance")
|
67
|
+
def create_instance(
|
68
|
+
self,
|
69
|
+
*args,
|
70
|
+
default: Any = None,
|
71
|
+
key: str | None = None,
|
72
|
+
on_change: WidgetCallback | None = None,
|
73
|
+
**kwargs,
|
74
|
+
) -> Any:
|
75
|
+
"""Create a new instance of the component.
|
76
|
+
|
77
|
+
Parameters
|
78
|
+
----------
|
79
|
+
*args
|
80
|
+
Must be empty; all args must be named. (This parameter exists to
|
81
|
+
enforce correct use of the function.)
|
82
|
+
default: any or None
|
83
|
+
The default return value for the component. This is returned when
|
84
|
+
the component's frontend hasn't yet specified a value with
|
85
|
+
`setComponentValue`.
|
86
|
+
key: str or None
|
87
|
+
If not None, this is the user key we use to generate the
|
88
|
+
component's "widget ID".
|
89
|
+
on_change: WidgetCallback or None
|
90
|
+
An optional callback invoked when the widget's value changes. No arguments are passed to it.
|
91
|
+
**kwargs
|
92
|
+
Keyword args to pass to the component.
|
93
|
+
|
94
|
+
Returns
|
95
|
+
-------
|
96
|
+
any or None
|
97
|
+
The component's widget value.
|
98
|
+
|
99
|
+
"""
|
100
|
+
if len(args) > 0:
|
101
|
+
raise MarshallComponentException(f"Argument '{args[0]}' needs a label")
|
102
|
+
|
103
|
+
try:
|
104
|
+
import pyarrow # noqa: F401
|
105
|
+
|
106
|
+
from streamlit.components.v1 import component_arrow
|
107
|
+
except ImportError:
|
108
|
+
raise StreamlitAPIException(
|
109
|
+
"""To use Custom Components in Streamlit, you need to install
|
110
|
+
PyArrow. To do so locally:
|
111
|
+
|
112
|
+
`pip install pyarrow`
|
113
|
+
|
114
|
+
And if you're using Streamlit Cloud, add "pyarrow" to your requirements.txt."""
|
115
|
+
)
|
116
|
+
|
117
|
+
check_cache_replay_rules()
|
118
|
+
# In addition to the custom kwargs passed to the component, we also
|
119
|
+
# send the special 'default' and 'key' params to the component
|
120
|
+
# frontend.
|
121
|
+
all_args = dict(kwargs, default=default, key=key)
|
122
|
+
|
123
|
+
json_args = {}
|
124
|
+
special_args = []
|
125
|
+
for arg_name, arg_val in all_args.items():
|
126
|
+
if is_bytes_like(arg_val):
|
127
|
+
bytes_arg = SpecialArg()
|
128
|
+
bytes_arg.key = arg_name
|
129
|
+
bytes_arg.bytes = to_bytes(arg_val)
|
130
|
+
special_args.append(bytes_arg)
|
131
|
+
elif is_dataframe_like(arg_val):
|
132
|
+
dataframe_arg = SpecialArg()
|
133
|
+
dataframe_arg.key = arg_name
|
134
|
+
component_arrow.marshall(dataframe_arg.arrow_dataframe.data, arg_val)
|
135
|
+
special_args.append(dataframe_arg)
|
136
|
+
else:
|
137
|
+
json_args[arg_name] = arg_val
|
138
|
+
|
139
|
+
try:
|
140
|
+
serialized_json_args = json.dumps(json_args)
|
141
|
+
except Exception as ex:
|
142
|
+
raise MarshallComponentException(
|
143
|
+
"Could not convert component args to JSON", ex
|
144
|
+
)
|
145
|
+
|
146
|
+
def marshall_component(dg: DeltaGenerator, element: Element) -> Any:
|
147
|
+
element.component_instance.component_name = self.name
|
148
|
+
element.component_instance.form_id = current_form_id(dg)
|
149
|
+
if self.url is not None:
|
150
|
+
element.component_instance.url = self.url
|
151
|
+
|
152
|
+
# Normally, a widget's element_hash (which determines
|
153
|
+
# its identity across multiple runs of an app) is computed
|
154
|
+
# by hashing its arguments. This means that, if any of the arguments
|
155
|
+
# to the widget are changed, Streamlit considers it a new widget
|
156
|
+
# instance and it loses its previous state.
|
157
|
+
#
|
158
|
+
# However! If a *component* has a `key` argument, then the
|
159
|
+
# component's hash identity is determined by entirely by
|
160
|
+
# `component_name + url + key`. This means that, when `key`
|
161
|
+
# exists, the component will maintain its identity even when its
|
162
|
+
# other arguments change, and the component's iframe won't be
|
163
|
+
# remounted on the frontend.
|
164
|
+
|
165
|
+
def marshall_element_args():
|
166
|
+
element.component_instance.json_args = serialized_json_args
|
167
|
+
element.component_instance.special_args.extend(special_args)
|
168
|
+
|
169
|
+
ctx = get_script_run_ctx()
|
170
|
+
|
171
|
+
if key is None:
|
172
|
+
marshall_element_args()
|
173
|
+
computed_id = compute_and_register_element_id(
|
174
|
+
"component_instance",
|
175
|
+
user_key=key,
|
176
|
+
form_id=current_form_id(dg),
|
177
|
+
name=self.name,
|
178
|
+
url=self.url,
|
179
|
+
json_args=serialized_json_args,
|
180
|
+
special_args=special_args,
|
181
|
+
)
|
182
|
+
else:
|
183
|
+
computed_id = compute_and_register_element_id(
|
184
|
+
"component_instance",
|
185
|
+
user_key=key,
|
186
|
+
form_id=current_form_id(dg),
|
187
|
+
name=self.name,
|
188
|
+
url=self.url,
|
189
|
+
)
|
190
|
+
element.component_instance.id = computed_id
|
191
|
+
|
192
|
+
def deserialize_component(ui_value, widget_id=""):
|
193
|
+
# ui_value is an object from json, an ArrowTable proto, or a bytearray
|
194
|
+
return ui_value
|
195
|
+
|
196
|
+
component_state = register_widget(
|
197
|
+
element.component_instance.id,
|
198
|
+
deserializer=deserialize_component,
|
199
|
+
serializer=lambda x: x,
|
200
|
+
ctx=ctx,
|
201
|
+
on_change_handler=on_change,
|
202
|
+
value_type="json_value",
|
203
|
+
)
|
204
|
+
widget_value = component_state.value
|
205
|
+
|
206
|
+
if key is not None:
|
207
|
+
marshall_element_args()
|
208
|
+
|
209
|
+
if widget_value is None:
|
210
|
+
widget_value = default
|
211
|
+
elif isinstance(widget_value, ArrowTableProto):
|
212
|
+
widget_value = component_arrow.arrow_proto_to_dataframe(widget_value)
|
213
|
+
return widget_value
|
214
|
+
|
215
|
+
# We currently only support writing to st._main, but this will change
|
216
|
+
# when we settle on an improved API in a post-layout world.
|
217
|
+
dg = get_dg_singleton_instance().main_dg
|
218
|
+
|
219
|
+
element = Element()
|
220
|
+
return_value = marshall_component(dg, element)
|
221
|
+
|
222
|
+
dg._enqueue("component_instance", element.component_instance)
|
223
|
+
return return_value
|
224
|
+
|
225
|
+
def __eq__(self, other) -> bool:
|
226
|
+
"""Equality operator."""
|
227
|
+
return (
|
228
|
+
isinstance(other, CustomComponent)
|
229
|
+
and self.name == other.name
|
230
|
+
and self.path == other.path
|
231
|
+
and self.url == other.url
|
232
|
+
and self.module_name == other.module_name
|
233
|
+
)
|
234
|
+
|
235
|
+
def __ne__(self, other) -> bool:
|
236
|
+
"""Inequality operator."""
|
237
|
+
|
238
|
+
# we have to use "not X == Y"" here because if we use "X != Y"
|
239
|
+
# we call __ne__ again and end up in recursion
|
240
|
+
return not self == other
|
241
|
+
|
242
|
+
def __str__(self) -> str:
|
243
|
+
return f"'{self.name}': {self.path if self.path is not None else self.url}"
|