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() | |