Spaces:
Sleeping
Sleeping
| title: Gradio Browser Component | |
| sdk: gradio | |
| sdk_version: 5.49.0 | |
| app_file: app.py | |
| pinned: false | |
| # `gradio_browser` | |
| <a href="https://pypi.org/project/gradio_browser/" target="_blank"><img alt="PyPI - Version" src="https://img.shields.io/pypi/v/gradio_browser"></a> | |
| Gradio Component | |
| ## Installation | |
| ```bash | |
| pip install gradio_browser | |
| ``` | |
| ## Usage | |
| ```python | |
| import gradio as gr | |
| from gradio_browser import Browser | |
| with gr.Blocks(title="Browser Component Demo", fill_height=True) as demo: | |
| gr.Markdown("# 🌐 Custom Browser Component") | |
| with gr.Row(): | |
| with gr.Column(scale=1): | |
| gr.Markdown("### Controls") | |
| url_input = gr.Textbox( | |
| label="Enter URL", | |
| value="https://www.gradio.app/", | |
| placeholder="https://www.gradio.app/", | |
| ) | |
| show_hostname = gr.Checkbox( | |
| label="Show full hostname in address bar", value=True | |
| ) | |
| gr.Markdown( | |
| """ | |
| ### Features: | |
| - ← → Navigation buttons with history | |
| - ↻ Refresh button | |
| - ↗ Open in new tab button | |
| - Address bar supports both full URLs and paths | |
| - Enter key navigation | |
| """ | |
| ) | |
| gr.Markdown("### Try these URLs:") | |
| gr.Button("Gradio.com").click( | |
| lambda: "https://www.gradio.app/", outputs=[url_input] | |
| ) | |
| gr.Button("Example.com").click( | |
| lambda: "https://example.com", outputs=[url_input] | |
| ) | |
| with gr.Column(scale=3): | |
| browser = Browser( | |
| url="https://example.com", | |
| show_hostname=True, | |
| min_height="600px", | |
| scale=1, | |
| ) | |
| # Update browser when URL changes | |
| url_input.change(lambda url: url, inputs=[url_input], outputs=[browser]) | |
| # Update show_hostname setting (requires component rebuild) | |
| show_hostname.change( | |
| lambda show_host, url: Browser(value=url, show_hostname=show_host), | |
| inputs=[show_hostname, url_input], | |
| outputs=[browser], | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |
| ``` | |
| ## `Browser` | |
| ### Initialization | |
| <table> | |
| <thead> | |
| <tr> | |
| <th align="left">name</th> | |
| <th align="left" style="width: 25%;">type</th> | |
| <th align="left">default</th> | |
| <th align="left">description</th> | |
| </tr> | |
| </thead> | |
| <tbody> | |
| <tr> | |
| <td align="left"><code>value</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| str | Callable | None | |
| ``` | |
| </td> | |
| <td align="left"><code>None</code></td> | |
| <td align="left">URL to display in the browser iframe</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>url</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| str | |
| ``` | |
| </td> | |
| <td align="left"><code>"https://example.com"</code></td> | |
| <td align="left">Initial URL to load in the browser</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>width</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| str | |
| ``` | |
| </td> | |
| <td align="left"><code>"100%"</code></td> | |
| <td align="left">Width of the browser component</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>min_height</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| str | |
| ``` | |
| </td> | |
| <td align="left"><code>"500px"</code></td> | |
| <td align="left">Minimum height of the browser component</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>show_hostname</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| bool | |
| ``` | |
| </td> | |
| <td align="left"><code>False</code></td> | |
| <td align="left">If True, shows full URL in address bar; if False, shows only path</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>placeholder</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| str | None | |
| ``` | |
| </td> | |
| <td align="left"><code>None</code></td> | |
| <td align="left">placeholder hint to provide behind textbox.</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>label</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| str | I18nData | None | |
| ``` | |
| </td> | |
| <td align="left"><code>None</code></td> | |
| <td align="left">the label for this component</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>every</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| Timer | float | None | |
| ``` | |
| </td> | |
| <td align="left"><code>None</code></td> | |
| <td align="left">Continously calls `value` to recalculate it if `value` is a function</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>inputs</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| Component | Sequence[Component] | set[Component] | None | |
| ``` | |
| </td> | |
| <td align="left"><code>None</code></td> | |
| <td align="left">Components that are used as inputs to calculate `value` if `value` is a function</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>show_label</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| bool | None | |
| ``` | |
| </td> | |
| <td align="left"><code>None</code></td> | |
| <td align="left">if True, will display label.</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>scale</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| int | None | |
| ``` | |
| </td> | |
| <td align="left"><code>None</code></td> | |
| <td align="left">relative size compared to adjacent Components</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>min_width</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| int | |
| ``` | |
| </td> | |
| <td align="left"><code>160</code></td> | |
| <td align="left">minimum pixel width</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>interactive</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| bool | None | |
| ``` | |
| </td> | |
| <td align="left"><code>None</code></td> | |
| <td align="left">if True, will be rendered as an editable component</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>visible</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| bool | Literal["hidden"] | |
| ``` | |
| </td> | |
| <td align="left"><code>True</code></td> | |
| <td align="left">If False, component will be hidden</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>rtl</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| bool | |
| ``` | |
| </td> | |
| <td align="left"><code>False</code></td> | |
| <td align="left">If True, sets the direction of the text to right-to-left</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>elem_id</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| str | None | |
| ``` | |
| </td> | |
| <td align="left"><code>None</code></td> | |
| <td align="left">An optional string that is assigned as the id of this component in the HTML DOM</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>elem_classes</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| list[str] | str | None | |
| ``` | |
| </td> | |
| <td align="left"><code>None</code></td> | |
| <td align="left">An optional list of strings that are assigned as the classes of this component in the HTML DOM</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>render</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| bool | |
| ``` | |
| </td> | |
| <td align="left"><code>True</code></td> | |
| <td align="left">If False, component will not render be rendered in the Blocks context</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>key</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| int | str | tuple[int | str, ...] | None | |
| ``` | |
| </td> | |
| <td align="left"><code>None</code></td> | |
| <td align="left">in a gr.render, Components with the same key across re-renders are treated as the same component</td> | |
| </tr> | |
| <tr> | |
| <td align="left"><code>preserved_by_key</code></td> | |
| <td align="left" style="width: 25%;"> | |
| ```python | |
| list[str] | str | None | |
| ``` | |
| </td> | |
| <td align="left"><code>"value"</code></td> | |
| <td align="left">A list of parameters from this component's constructor</td> | |
| </tr> | |
| </tbody></table> | |
| ### Events | |
| | name | description | | |
| |:-----|:------------| | |
| | `change` | Triggered when the value of the Browser changes either because of user input (e.g. a user types in a textbox) OR because of a function update (e.g. an image receives a value from the output of an event trigger). See `.input()` for a listener that is only triggered by user input. | | |
| | `input` | This listener is triggered when the user changes the value of the Browser. | | |
| | `submit` | This listener is triggered when the user presses the Enter key while the Browser is focused. | | |
| ### User function | |
| The impact on the users predict function varies depending on whether the component is used as an input or output for an event (or both). | |
| - When used as an Input, the component only impacts the input signature of the user function. | |
| - When used as an output, the component only impacts the return signature of the user function. | |
| The code snippet below is accurate in cases where the component is used as both an input and an output. | |
| - **As output:** Is passed, passes URL value as a {str} into the function. | |
| - **As input:** Should return, expects a URL {str} to display in browser. | |
| ```python | |
| def predict( | |
| value: str | None | |
| ) -> str | None: | |
| return value | |
| ``` | |