| // Borrowed minimalistic Streamlit API from Thiago | |
| // https://discuss.streamlit.io/t/code-snippet-create-components-without-any-frontend-tooling-no-react-babel-webpack-etc/13064 | |
| function sendMessageToStreamlitClient(type, data) { | |
| console.log(type, data) | |
| const outData = Object.assign({ | |
| isStreamlitMessage: true, | |
| type: type, | |
| }, data); | |
| window.parent.postMessage(outData, "*"); | |
| } | |
| const Streamlit = { | |
| setComponentReady: function() { | |
| sendMessageToStreamlitClient("streamlit:componentReady", {apiVersion: 1}); | |
| }, | |
| setFrameHeight: function(height) { | |
| sendMessageToStreamlitClient("streamlit:setFrameHeight", {height: height}); | |
| }, | |
| setComponentValue: function(value) { | |
| sendMessageToStreamlitClient("streamlit:setComponentValue", {value: value}); | |
| }, | |
| RENDER_EVENT: "streamlit:render", | |
| events: { | |
| addEventListener: function(type, callback) { | |
| window.addEventListener("message", function(event) { | |
| if (event.data.type === type) { | |
| event.detail = event.data | |
| callback(event); | |
| } | |
| }); | |
| } | |
| } | |
| } | |