{"version":3,"sources":["../src/react.tsx"],"sourcesContent":["import { useMutation, UseMutationOptions } from \"@tanstack/react-query\";\n\nexport type ConversationMessage = {\n  role: \"user\" | \"assistant\";\n  content: string;\n  chartData?: unknown;\n  vegaSpec?: any;\n};\n\nexport type GenerateChartOptions = {\n  data: unknown;\n  prompt: string;\n  fileType?: \"svg\" | \"png\";\n  outputFormat?: \"image\" | \"chartData\";\n  apiKey?: string;\n  isSubscribed?: boolean;\n\n  // NEW: Conversational context support\n  conversationHistory?: ConversationMessage[];\n  previousChartContext?: {\n    lastChartData?: unknown;\n    lastChartSpec?: any;\n  };\n};\n\nexport type ChartDataResult = {\n  kind: \"chartData\";\n  library: string; // e.g., \"apexcharts\", \"chartjs\", \"recharts\", \"shadcn\"\n  data: any; // Processed data ready for the library\n  config: any; // Chart configuration for the library\n  explanation?: string; // AI explanation of what was done\n};\n\nexport type GeneratedChartResult =\n  | {\n      kind: \"image\";\n      fileType: \"svg\" | \"png\";\n      dataUrl: string;\n      vegaSpec?: any;\n      explanation?: string;\n    }\n  | ChartDataResult;\n\nasync function postGenerateChart(\n  input: GenerateChartOptions,\n  signal?: AbortSignal\n): Promise<GeneratedChartResult> {\n  if (!input.apiKey) {\n    throw new Error(\"API key is required\");\n  }\n\n  // Direct chart generation with API key\n  const apiUrl =\n    process.env.ENV === \"local\"\n      ? `${process.env.BASE_URL}/api/spec/generate`\n      : `https://app.datashows.ai/api/generate-chart`;\n\n  const res = await fetch(apiUrl, {\n    method: \"POST\",\n    headers: {\n      \"Content-Type\": \"application/json\",\n      Authorization: `Bearer ${input.apiKey}`,\n    },\n    body: JSON.stringify({\n      prompt: input.prompt,\n      data: input.data,\n      fileType: input.fileType || \"png\",\n      outputFormat: input.outputFormat || \"image\",\n      conversationHistory: input.conversationHistory,\n      previousChartContext: input.previousChartContext,\n    }),\n    signal,\n  });\n\n  if (!res.ok) {\n    let message = `Request failed with ${res.status}`;\n    try {\n      const contentType = res.headers.get(\"content-type\");\n      if (contentType && contentType.includes(\"application/json\")) {\n        const err = await res.json();\n        if (err?.error) {\n          message =\n            typeof err.error === \"string\"\n              ? err.error\n              : JSON.stringify(err.error);\n        }\n      } else {\n        // If not JSON, it might be an HTML error page\n        message = `Request failed with ${res.status}. Please check your API key and try again.`;\n      }\n    } catch {\n      message = `Request failed with ${res.status}. Please check your API key.`;\n    }\n    throw new Error(message);\n  }\n\n  const result = await res.json();\n\n  // Support both image and chartData formats\n  if (result.kind === \"chartData\") {\n    return {\n      kind: \"chartData\",\n      library: result.library,\n      data: result.data,\n      config: result.config,\n      explanation: result.explanation,\n    };\n  }\n\n  return {\n    kind: \"image\",\n    fileType: input.fileType || \"png\",\n    dataUrl: result.dataUrl,\n    vegaSpec: result.vegaSpec,\n    explanation: result.explanation,\n  };\n}\n\nexport function useGenerateChart(\n  options?: UseMutationOptions<\n    GeneratedChartResult,\n    Error,\n    GenerateChartOptions & { signal?: AbortSignal }\n  >\n) {\n  return useMutation<\n    GeneratedChartResult,\n    Error,\n    GenerateChartOptions & { signal?: AbortSignal }\n  >({\n    mutationFn: async (input) => {\n      const { signal, ...chartOptions } = input;\n      return postGenerateChart(chartOptions, signal);\n    },\n    ...options,\n  });\n}\n"],"mappings":"yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,sBAAAE,IAAA,eAAAC,EAAAH,GAAA,IAAAI,EAAgD,iCA2ChD,eAAeC,EACbC,EACAC,EAC+B,CAC/B,GAAI,CAACD,EAAM,OACT,MAAM,IAAI,MAAM,qBAAqB,EAIvC,IAAME,EACJ,QAAQ,IAAI,MAAQ,QAChB,GAAG,QAAQ,IAAI,QAAQ,qBACvB,8CAEAC,EAAM,MAAM,MAAMD,EAAQ,CAC9B,OAAQ,OACR,QAAS,CACP,eAAgB,mBAChB,cAAe,UAAUF,EAAM,MAAM,EACvC,EACA,KAAM,KAAK,UAAU,CACnB,OAAQA,EAAM,OACd,KAAMA,EAAM,KACZ,SAAUA,EAAM,UAAY,MAC5B,aAAcA,EAAM,cAAgB,QACpC,oBAAqBA,EAAM,oBAC3B,qBAAsBA,EAAM,oBAC9B,CAAC,EACD,OAAAC,CACF,CAAC,EAED,GAAI,CAACE,EAAI,GAAI,CACX,IAAIC,EAAU,uBAAuBD,EAAI,MAAM,GAC/C,GAAI,CACF,IAAME,EAAcF,EAAI,QAAQ,IAAI,cAAc,EAClD,GAAIE,GAAeA,EAAY,SAAS,kBAAkB,EAAG,CAC3D,IAAMC,EAAM,MAAMH,EAAI,KAAK,EACvBG,GAAK,QACPF,EACE,OAAOE,EAAI,OAAU,SACjBA,EAAI,MACJ,KAAK,UAAUA,EAAI,KAAK,EAElC,MAEEF,EAAU,uBAAuBD,EAAI,MAAM,4CAE/C,MAAQ,CACNC,EAAU,uBAAuBD,EAAI,MAAM,8BAC7C,CACA,MAAM,IAAI,MAAMC,CAAO,CACzB,CAEA,IAAMG,EAAS,MAAMJ,EAAI,KAAK,EAG9B,OAAII,EAAO,OAAS,YACX,CACL,KAAM,YACN,QAASA,EAAO,QAChB,KAAMA,EAAO,KACb,OAAQA,EAAO,OACf,YAAaA,EAAO,WACtB,EAGK,CACL,KAAM,QACN,SAAUP,EAAM,UAAY,MAC5B,QAASO,EAAO,QAChB,SAAUA,EAAO,SACjB,YAAaA,EAAO,WACtB,CACF,CAEO,SAASX,EACdY,EAKA,CACA,SAAO,eAIL,CACA,WAAY,MAAOR,GAAU,CAC3B,GAAM,CAAE,OAAAC,EAAQ,GAAGQ,CAAa,EAAIT,EACpC,OAAOD,EAAkBU,EAAcR,CAAM,CAC/C,EACA,GAAGO,CACL,CAAC,CACH","names":["react_exports","__export","useGenerateChart","__toCommonJS","import_react_query","postGenerateChart","input","signal","apiUrl","res","message","contentType","err","result","options","chartOptions"]}