Spaces:
Running
Running
| // The `Streamlit` object exists because our html file includes | |
| // `streamlit-component-lib.js`. | |
| // If you get an error about "Streamlit" not being defined, that | |
| // means you're missing that file. | |
| function sendValue(value) { | |
| Streamlit.setComponentValue(value); | |
| } | |
| /** | |
| * The component's render function. This will be called immediately after | |
| * the component is initially loaded, and then again every time the | |
| * component gets new data from Python. | |
| */ | |
| function onRender(event) { | |
| // Only run the render code the first time the component is loaded. | |
| if (!window.rendered) { | |
| const { text, before_copy_label, after_copy_label, show_text, theme } = event.detail.args; | |
| const container = document.querySelector('#container'); | |
| const button = document.querySelector('#copy-button'); | |
| const textElement = document.querySelector('#text-element'); | |
| if (theme == 'dark') { | |
| button.style.border = '1px solid rgba(250, 250, 250, 0.2)'; | |
| button.style.color = 'white'; | |
| } | |
| button.textContent = before_copy_label; // Set initial label | |
| // Show text if show_text is true | |
| if (show_text) { | |
| textElement.textContent = text; | |
| textElement.style.display = 'inline'; | |
| } else { | |
| textElement.style.display = 'none'; | |
| } | |
| function copyToClipboard() { | |
| navigator.clipboard.writeText(text); | |
| button.textContent = after_copy_label; // Change label after copying | |
| setTimeout(() => { | |
| if (!button) return; | |
| button.textContent = before_copy_label; // Revert to original label after 1 second | |
| }, 1000); | |
| } | |
| button.addEventListener('click', copyToClipboard); | |
| textElement.addEventListener('click', copyToClipboard); | |
| window.rendered = true; | |
| } | |
| } | |
| // Render the component whenever python send a "render event" | |
| Streamlit.events.addEventListener(Streamlit.RENDER_EVENT, onRender); | |
| // Tell Streamlit that the component is ready to receive events | |
| Streamlit.setComponentReady(); | |
| // Render with the correct height, if this is a fixed-height component | |
| Streamlit.setFrameHeight(100); | |