# Copyright (c) Streamlit Inc. (2018-2022) Snowflake Inc. (2022-2024) # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. from __future__ import annotations from typing import TYPE_CHECKING, cast from streamlit.proto.IFrame_pb2 import IFrame as IFrameProto from streamlit.runtime.metrics_util import gather_metrics if TYPE_CHECKING: from streamlit.delta_generator import DeltaGenerator class IframeMixin: @gather_metrics("_iframe") def _iframe( self, src: str, width: int | None = None, height: int | None = None, scrolling: bool = False, ) -> DeltaGenerator: """Load a remote URL in an iframe. To use this function, import it from the ``streamlit.components.v1`` module. .. warning:: Using ``st.components.v1.iframe`` directly (instead of importing its module) is deprecated and will be disallowed in a later version. Parameters ---------- src : str The URL of the page to embed. width : int The width of the iframe in CSS pixels. By default, this is the app's default element width. height : int The height of the frame in CSS pixels. By default, this is ``150``. scrolling : bool Whether to allow scrolling in the iframe. If this ``False`` (default), Streamlit crops any content larger than the iframe and does not show a scrollbar. If this is ``True``, Streamlit shows a scrollbar when the content is larger than the iframe. Example ------- >>> import streamlit.components.v1 as components >>> >>> components.iframe("https://example.com", height=500) """ iframe_proto = IFrameProto() marshall( iframe_proto, src=src, width=width, height=height, scrolling=scrolling, ) return self.dg._enqueue("iframe", iframe_proto) @gather_metrics("_html") def _html( self, html: str, width: int | None = None, height: int | None = None, scrolling: bool = False, ) -> DeltaGenerator: """Display an HTML string in an iframe. To use this function, import it from the ``streamlit.components.v1`` module. If you want to insert HTML text into your app without an iframe, try ``st.html`` instead. .. warning:: Using ``st.components.v1.html`` directly (instead of importing its module) is deprecated and will be disallowed in a later version. Parameters ---------- html : str The HTML string to embed in the iframe. width : int The width of the iframe in CSS pixels. By default, this is the app's default element width. height : int The height of the frame in CSS pixels. By default, this is ``150``. scrolling : bool Whether to allow scrolling in the iframe. If this ``False`` (default), Streamlit crops any content larger than the iframe and does not show a scrollbar. If this is ``True``, Streamlit shows a scrollbar when the content is larger than the iframe. Example ------- >>> import streamlit.components.v1 as components >>> >>> components.html( >>> "
Oops!
" >>> ) """ iframe_proto = IFrameProto() marshall( iframe_proto, srcdoc=html, width=width, height=height, scrolling=scrolling, ) return self.dg._enqueue("iframe", iframe_proto) @property def dg(self) -> DeltaGenerator: """Get our DeltaGenerator.""" return cast("DeltaGenerator", self) def marshall( proto: IFrameProto, src: str | None = None, srcdoc: str | None = None, width: int | None = None, height: int | None = None, scrolling: bool = False, ) -> None: """Marshalls data into an IFrame proto. These parameters correspond directly to