import { useEffect, useState } from "react"; import { useUIAppState } from "../../context/ui-appState"; import { t } from "../../i18n"; import { useApp } from "../App"; import { Dialog } from "../Dialog"; import { withInternalFallback } from "../hoc/withInternalFallback"; import MermaidToExcalidraw from "./MermaidToExcalidraw"; import TextToDiagram from "./TextToDiagram"; import TTDDialogTabs from "./TTDDialogTabs"; import { TTDDialogTabTriggers } from "./TTDDialogTabTriggers"; import { TTDDialogTabTrigger } from "./TTDDialogTabTrigger"; import { TTDDialogTab } from "./TTDDialogTab"; import "./TTDDialog.scss"; import { TTDWelcomeMessage } from "./TTDWelcomeMessage"; import type { MermaidToExcalidrawLibProps, TTDPersistenceAdapter, TTTDDialog, } from "./types"; export const TTDDialog = ( props: | { onTextSubmit: TTTDDialog.onTextSubmit; renderWelcomeScreen?: TTTDDialog.renderWelcomeScreen; renderWarning?: TTTDDialog.renderWarning; persistenceAdapter: TTDPersistenceAdapter; } | { __fallback: true }, ) => { const appState = useUIAppState(); if (appState.openDialog?.name !== "ttd") { return null; } return ; }; TTDDialog.WelcomeMessage = TTDWelcomeMessage; /** * Text to diagram (TTD) dialog */ const TTDDialogBase = withInternalFallback( "TTDDialogBase", ({ tab, ...rest }: { tab: "text-to-diagram" | "mermaid"; } & ( | { onTextSubmit( props: TTTDDialog.OnTextSubmitProps, ): Promise; renderWelcomeScreen?: TTTDDialog.renderWelcomeScreen; renderWarning?: TTTDDialog.renderWarning; persistenceAdapter: TTDPersistenceAdapter; } | { __fallback: true } )) => { const app = useApp(); const [mermaidToExcalidrawLib, setMermaidToExcalidrawLib] = useState({ loaded: false, api: import("@excalidraw/mermaid-to-excalidraw"), }); useEffect(() => { const fn = async () => { await mermaidToExcalidrawLib.api; setMermaidToExcalidrawLib((prev) => ({ ...prev, loaded: true })); }; fn(); }, [mermaidToExcalidrawLib.api]); return ( { app.setOpenDialog(null); }} size={1520} title={false} {...rest} autofocus={false} > {"__fallback" in rest && rest.__fallback ? (

{t("mermaid.title")}

) : (
{t("labels.textToDiagram")}
{t("chat.aiBeta")}
{t("mermaid.label")}
)} {!("__fallback" in rest) && ( )}
); }, );