Spaces:
Running
Running
| from pathlib import Path | |
| from typing import Optional | |
| import streamlit as st | |
| import streamlit.components.v1 as components | |
| # Tell streamlit that there is a component called streamlit_copy_to_clipboard, | |
| # and that the code to display that component is in the "frontend" folder | |
| frontend_dir = (Path(__file__).parent / "frontend").absolute() | |
| _component_func = components.declare_component( | |
| "streamlit_copy_to_clipboard", path=str(frontend_dir) | |
| ) | |
| def st_copy_to_clipboard( | |
| text: str, | |
| before_copy_label: str = "📋", | |
| after_copy_label: str = "✅", | |
| show_text: bool = False, | |
| key: Optional[str] = None, | |
| theme: str = 'light', # default theme is 'light' | |
| ): | |
| """ | |
| Streamlit component to copy text to clipboard. | |
| Parameters | |
| ---------- | |
| text : str | |
| The text to be copied to the clipboard. | |
| before_copy_label : str | |
| Label of the button before text is copied. | |
| after_copy_label : str | |
| Label of the button after text is copied. | |
| show_text: bool | |
| If True, show text right before the button and make it clickable as well | |
| key : str or None | |
| An optional key that uniquely identifies the component. | |
| theme: str | |
| Set the current theme for the button. | |
| """ | |
| component_value = _component_func( | |
| key=key, | |
| text=text, | |
| before_copy_label=before_copy_label, | |
| after_copy_label=after_copy_label, | |
| show_text=show_text, | |
| theme=theme, | |
| ) | |
| return component_value | |
| def main(): | |
| st.write("## Example") | |
| text = st.text_input("Enter text to copy to clipboard", value="Hello World") | |
| st_copy_to_clipboard(text) | |
| st_copy_to_clipboard(text, before_copy_label='📋Push to copy', after_copy_label='✅Text copied!') | |
| st_copy_to_clipboard(text, before_copy_label='Push to copy', after_copy_label='Text copied!', show_text=True) | |
| st_copy_to_clipboard(text, before_copy_label='Push to copy', after_copy_label='copied!', show_text=True, theme="dark") | |
| if __name__ == "__main__": | |
| main() | |