49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
import os
|
|
|
|
import streamlit.components.v1 as components
|
|
|
|
_RELEASE = __name__ != "__main__"
|
|
|
|
# Declare a Streamlit component. `declare_component` returns a function
|
|
if not _RELEASE:
|
|
_editor_func = components.declare_component(
|
|
# We give the component a simple, descriptive name ("my_component"
|
|
# does not fit this bill, so please choose something better for your
|
|
# own component :)
|
|
"streamlit-monaco",
|
|
# Pass `url` here to tell Streamlit that the component will be served
|
|
# by the local dev server that you run via `npm run start`.
|
|
# (This is useful while your component is in development.)
|
|
url="http://localhost:3001",
|
|
)
|
|
else:
|
|
# When we're distributing a production version of the component, we'll
|
|
# replace the `url` param with `path`, and point it to to the component's
|
|
# build directory:
|
|
parent_dir = os.path.dirname(os.path.abspath(__file__))
|
|
build_dir = os.path.join(parent_dir, "frontend/build")
|
|
_editor_func = components.declare_component("streamlit-monaco", path=build_dir)
|
|
|
|
|
|
# Create a wrapper function for the component. This is an optional
|
|
# best practice - we could simply expose the component function returned by
|
|
# `declare_component` and call it done. The wrapper allows us to customize
|
|
# our component's API: we can pre-process its input args, post-process its
|
|
# output value, and add a docstring for users.
|
|
def st_monaco(key, tabby_server_url=None, code=None):
|
|
_editor_func(tabby_server_url=tabby_server_url, code=code, key=key)
|
|
|
|
|
|
# Add some test code to play with the component while it's in development.
|
|
# During development, we can run this just as we would any other Streamlit
|
|
# app: `$ streamlit run my_component/__init__.py`
|
|
if not _RELEASE:
|
|
import streamlit as st
|
|
|
|
code = st.text_input("code")
|
|
set_code = st.button("Set code")
|
|
if set_code:
|
|
st_monaco(code=code, key="1")
|
|
else:
|
|
st_monaco(key="1")
|