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 } from "solid-js" import { useTuiConfig } from "../config" import { useBindings } from "../keymap" 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() const tuiConfig = useTuiConfig() 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", }) useBindings(() => ({ bindings: [ { key: "tab", desc: "Next export option", group: "Dialog", cmd: () => { 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]) }, }, ], })) useBindings(() => ({ enabled: store.active !== "filename", bindings: [ { key: "space", desc: "Toggle export option", group: "Dialog", cmd: () => { 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) }, }, ], })) onMount(() => { dialog.setSize("medium") setTimeout(() => { if (!textarea || textarea.isDestroyed) return textarea.focus() }, 1) textarea.gotoLineEnd() }) return ( Export Options dialog.clear()}> esc Filename: