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