marcenacp's picture
Deploy (see actual commits on https://github.com/mlcommons/croissant).
bc133ae
import {
Streamlit,
StreamlitComponentBase,
withStreamlitConnection,
} from "streamlit-component-lib"
import React, { ReactNode } from "react"
import Button from "@mui/material/Button"
import Tabs from "@mui/material/Tabs"
import Tab from "@mui/material/Tab"
import Box from "@mui/material/Box"
import { ThemeProvider, createTheme } from "@mui/material"
import { orange } from "@mui/material/colors"
import Tooltip from "@mui/material/Tooltip"
const theme = createTheme({
palette: {
primary: orange,
},
})
function BasicTabs({
tabs,
selectedTab,
json,
}: {
tabs: string[]
selectedTab: number
json?: { name: string; content: string }
}) {
const [value, setValue] = React.useState(selectedTab)
const handleChange = (event: React.SyntheticEvent, newValue: number) => {
Streamlit.setComponentValue(tabs[newValue])
setValue(newValue)
}
return (
<div
style={{
display: "flex",
flexDirection: "row",
justifyContent: "center",
alignItems: "center",
marginTop: -8,
}}
>
<Box sx={{ width: "100%", margin: -1, padding: 0 }}>
<Box sx={{ borderBottom: 1, borderColor: "divider" }}>
<Tabs
value={value}
onChange={handleChange}
aria-label="navigation-tabs"
>
{tabs.map((tab) => (
<Tab key={`custom-tab-${tab}`} label={tab} />
))}
</Tabs>
</Box>
</Box>
<Tooltip
title={
json
? "Download the Croissant JSON-LD file."
: "Go to the overview to understand why the Croissant JSON-LD file cannot be generated."
}
placement="left"
>
<span>
<Button
disabled={!json}
disableElevation
variant="contained"
href={
json
? `data:text/json;charset=utf-8,${encodeURIComponent(
json.content
)}`
: ""
}
download={json ? json.name : ""}
sx={{
color: "white",
padding: "6px 20px",
textAlign: "center",
whiteSpace: "nowrap",
}}
>
Export
</Button>
</span>
</Tooltip>
</div>
)
}
class StreamlitTabs extends StreamlitComponentBase<{}> {
public render = (): ReactNode => {
const tabs = this.props.args["tabs"]
const selectedTab = this.props.args["selected_tab"]
const json = this.props.args["json"]
return (
<ThemeProvider theme={theme}>
<BasicTabs tabs={tabs} selectedTab={selectedTab} json={json} />
</ThemeProvider>
)
}
}
export default withStreamlitConnection(StreamlitTabs)