import { PaneTemplateInfoStep, PaneTemplateInputStep, PaneTemplateSelectStep, PaneTemplateTextareaStep, } from "../components/pane-template-wizard"; import type { AlertContext, DialogApi, PromptContext, } from "../ui/dialog"; import type { WizardStep } from "../types/plugin"; export async function runPaneTemplateDialogWizard( dialog: DialogApi, steps: WizardStep[], ): Promise | null> { const values: Record = {}; const clearedKeys = new Set(); for (const step of steps) { if (step.dependsOn && values[step.dependsOn.key] !== step.dependsOn.value) { continue; } if (step.type === "info") { await dialog.alert({ content: (ctx: AlertContext) => , }); continue; } const activeStep = clearedKeys.has(step.key) ? { ...step, defaultValue: undefined } : step; const result = step.type === "select" ? await dialog.prompt({ content: (ctx: PromptContext) => , }) : step.type === "textarea" ? await dialog.prompt({ content: (ctx: PromptContext) => , }) : await dialog.prompt({ content: (ctx: PromptContext) => , }); if (result === undefined || ((step.type === "select" || step.type === "textarea") && !result)) { return null; } values[step.key] = result; if (!Object.is(result, step.defaultValue ?? "")) { for (const key of step.clearOnChange ?? []) clearedKeys.add(key); } } return values; }