diff options
| author | kj_sh604 | 2026-03-15 16:19:35 -0400 |
|---|---|---|
| committer | kj_sh604 | 2026-03-15 16:19:35 -0400 |
| commit | 6ec259a0e71174651bae95d4628138bf6fd68742 (patch) | |
| tree | 5e33c6a5ec091ecabfcb257fdc7b6a88ed8754ac /packages/excalidraw/components/TTDDialog/TTDDialogTabs.tsx | |
| parent | 16c8578b15c727f22921f8a80a56ee4d4e7f2272 (diff) | |
refactor: packages/
Diffstat (limited to 'packages/excalidraw/components/TTDDialog/TTDDialogTabs.tsx')
| -rw-r--r-- | packages/excalidraw/components/TTDDialog/TTDDialogTabs.tsx | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/packages/excalidraw/components/TTDDialog/TTDDialogTabs.tsx b/packages/excalidraw/components/TTDDialog/TTDDialogTabs.tsx new file mode 100644 index 0000000..439f928 --- /dev/null +++ b/packages/excalidraw/components/TTDDialog/TTDDialogTabs.tsx @@ -0,0 +1,55 @@ +import * as RadixTabs from "@radix-ui/react-tabs"; +import type { ReactNode } from "react"; +import { useRef } from "react"; +import { useExcalidrawSetAppState } from "../App"; +import { isMemberOf } from "../../utils"; + +const TTDDialogTabs = ( + props: { + children: ReactNode; + } & { dialog: "ttd"; tab: "text-to-diagram" | "mermaid" }, +) => { + const setAppState = useExcalidrawSetAppState(); + + const rootRef = useRef<HTMLDivElement>(null); + const minHeightRef = useRef<number>(0); + + return ( + <RadixTabs.Root + ref={rootRef} + className="ttd-dialog-tabs-root" + value={props.tab} + onValueChange={( + // at least in test enviros, `tab` can be `undefined` + tab: string | undefined, + ) => { + if (!tab) { + return; + } + const modalContentNode = + rootRef.current?.closest<HTMLElement>(".Modal__content"); + if (modalContentNode) { + const currHeight = modalContentNode.offsetHeight || 0; + if (currHeight > minHeightRef.current) { + minHeightRef.current = currHeight; + modalContentNode.style.minHeight = `min(${minHeightRef.current}px, 100%)`; + } + } + if ( + props.dialog === "ttd" && + isMemberOf(["text-to-diagram", "mermaid"], tab) + ) { + setAppState({ + openDialog: { name: props.dialog, tab }, + }); + } + }} + > + {props.children} + </RadixTabs.Root> + ); +}; + +TTDDialogTabs.displayName = "TTDDialogTabs"; + +export default TTDDialogTabs; |
