import { TextareaRenderable, TextAttributes } from "@opentui/core" import { useTheme } from "../context/theme" import { useDialog, type DialogContext } from "./dialog" import { createStore } from "solid-js/store" import { onMount, Show, type JSX } from "solid-js" import { useKeyboard } from "@opentui/solid" export type DialogExportOptionsProps = { defaultFilename: string defaultThinking: boolean defaultToolDetails: boolean defaultAssistantMetadata: boolean defaultOpenWithoutSaving: boolean onConfirm?: (options: { filename: string thinking: boolean toolDetails: boolean assistantMetadata: boolean openWithoutSaving: boolean }) => void onCancel?: () => void } export function DialogExportOptions(props: DialogExportOptionsProps) { const dialog = useDialog() const { theme } = useTheme() let textarea: TextareaRenderable const [store, setStore] = createStore({ thinking: props.defaultThinking, toolDetails: props.defaultToolDetails, assistantMetadata: props.defaultAssistantMetadata, openWithoutSaving: props.defaultOpenWithoutSaving, active: "filename" as "filename" | "thinking" | "toolDetails" | "assistantMetadata" | "openWithoutSaving", }) useKeyboard((evt) => { if (evt.name === "return") { props.onConfirm?.({ filename: textarea.plainText, thinking: store.thinking, toolDetails: store.toolDetails, assistantMetadata: store.assistantMetadata, openWithoutSaving: store.openWithoutSaving, }) } if (evt.name === "tab") { const order: Array<"filename" | "thinking" | "toolDetails" | "assistantMetadata" | "openWithoutSaving"> = [ "filename", "thinking", "toolDetails", "assistantMetadata", "openWithoutSaving", ] const currentIndex = order.indexOf(store.active) const nextIndex = (currentIndex + 1) % order.length setStore("active", order[nextIndex]) evt.preventDefault() } if (evt.name === "space") { if (store.active === "thinking") setStore("thinking", !store.thinking) if (store.active === "toolDetails") setStore("toolDetails", !store.toolDetails) if (store.active === "assistantMetadata") setStore("assistantMetadata", !store.assistantMetadata) if (store.active === "openWithoutSaving") setStore("openWithoutSaving", !store.openWithoutSaving) evt.preventDefault() } }) onMount(() => { dialog.setSize("medium") setTimeout(() => { textarea.focus() }, 1) textarea.gotoLineEnd() }) return ( Export Options esc Filename: