dp-widgets-framework 1.4.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/dist/index.esm.js +1373 -104
  2. package/dist/index.js +1373 -104
  3. package/package.json +1 -1
package/dist/index.esm.js CHANGED
@@ -1993,7 +1993,7 @@ const borderRadiusMap$2 = {
1993
1993
  large: "0.5rem",
1994
1994
  "extra-large": "0.75rem",
1995
1995
  };
1996
- const getStyleValues$5 = (styles = {}) => {
1996
+ const getStyleValues$a = (styles = {}) => {
1997
1997
  return {
1998
1998
  backgroundColor: styles.backgroundColor || "transparent",
1999
1999
  borderRadius: borderRadiusMap$2[styles.borderRadius || "rounded"],
@@ -2006,7 +2006,7 @@ const getStyleValues$5 = (styles = {}) => {
2006
2006
  };
2007
2007
  function HeaderWidget({ widget }) {
2008
2008
  var _a, _b;
2009
- const styles = getStyleValues$5((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
2009
+ const styles = getStyleValues$a((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
2010
2010
  const content = ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.content) || {};
2011
2011
  return (jsxRuntimeExports.jsx("div", { className: "w-full", style: styles, children: jsxRuntimeExports.jsxs("div", { className: cn("flex items-center justify-between"), children: [jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-3", children: [content.showLogo && content.logoUrl && (jsxRuntimeExports.jsx("img", { src: content.logoUrl, alt: "Logo", className: "h-8 w-auto" })), jsxRuntimeExports.jsx("h1", { className: cn("font-semibold", content.titleSize || "text-xl"), children: content.title || "Header" })] }), content.showRightContent && (jsxRuntimeExports.jsx("div", { className: "flex items-center gap-4", children: content.rightContent }))] }) }));
2012
2012
  }
@@ -2017,7 +2017,7 @@ const borderRadiusMap$1 = {
2017
2017
  large: "0.5rem",
2018
2018
  "extra-large": "0.75rem",
2019
2019
  };
2020
- const getStyleValues$4 = (styles = {}) => {
2020
+ const getStyleValues$9 = (styles = {}) => {
2021
2021
  return {
2022
2022
  backgroundColor: styles.backgroundColor || "transparent",
2023
2023
  borderRadius: borderRadiusMap$1[styles.borderRadius || "rounded"],
@@ -2030,7 +2030,7 @@ const getStyleValues$4 = (styles = {}) => {
2030
2030
  };
2031
2031
  function FooterWidget({ widget }) {
2032
2032
  var _a, _b;
2033
- const styles = getStyleValues$4((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
2033
+ const styles = getStyleValues$9((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
2034
2034
  const content = ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.content) || {};
2035
2035
  return (jsxRuntimeExports.jsx("footer", { className: "w-full", style: styles, children: jsxRuntimeExports.jsxs("div", { className: cn("flex items-center", content.layout === "centered" ? "justify-center" : "justify-between"), children: [jsxRuntimeExports.jsx("div", { className: "text-sm", children: content.leftContent || "© 2024 Your Company" }), content.showCenterContent && (jsxRuntimeExports.jsx("div", { className: "text-sm", children: content.centerContent })), content.showRightContent && (jsxRuntimeExports.jsx("div", { className: "flex items-center gap-4 text-sm", children: content.rightContent }))] }) }));
2036
2036
  }
@@ -2041,7 +2041,7 @@ const borderRadiusMap = {
2041
2041
  large: "0.5rem",
2042
2042
  "extra-large": "0.75rem",
2043
2043
  };
2044
- const getStyleValues$3 = (styles = {}) => {
2044
+ const getStyleValues$8 = (styles = {}) => {
2045
2045
  const borderRadius = (styles.borderRadius || "rounded");
2046
2046
  return {
2047
2047
  backgroundColor: styles.backgroundColor || "transparent",
@@ -2056,12 +2056,12 @@ const getStyleValues$3 = (styles = {}) => {
2056
2056
  };
2057
2057
  function TextWidget({ widget }) {
2058
2058
  var _a, _b;
2059
- const styles = getStyleValues$3((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
2059
+ const styles = getStyleValues$8((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
2060
2060
  const content = ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.content) || {};
2061
2061
  return (jsxRuntimeExports.jsx("div", { className: "w-full", style: styles, children: jsxRuntimeExports.jsx("div", { className: cn("prose max-w-none", content.blockType === "heading-1" && "text-[24px] font-bold", content.blockType === "heading-2" && "text-[22px] font-bold", content.blockType === "heading-3" && "text-[18px] font-bold", content.blockType === "paragraph" && "text-base"), dangerouslySetInnerHTML: { __html: content.displayText || "Text content" } }) }));
2062
2062
  }
2063
2063
 
2064
- const getStyleValues$2 = (styles = {}) => {
2064
+ const getStyleValues$7 = (styles = {}) => {
2065
2065
  return {
2066
2066
  borderColor: styles.color || "#e5e7eb",
2067
2067
  borderStyle: styles.style || "solid",
@@ -2071,7 +2071,7 @@ const getStyleValues$2 = (styles = {}) => {
2071
2071
  };
2072
2072
  function DividerWidget({ widget }) {
2073
2073
  var _a, _b;
2074
- const styles = getStyleValues$2((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
2074
+ const styles = getStyleValues$7((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
2075
2075
  const content = ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.content) || {};
2076
2076
  return (jsxRuntimeExports.jsxs("div", { className: "w-full", style: { margin: styles.margin }, children: [jsxRuntimeExports.jsx("hr", { className: cn("w-full", content.variant === "dashed" && "border-dashed", content.variant === "dotted" && "border-dotted"), style: {
2077
2077
  borderColor: styles.borderColor,
@@ -17680,7 +17680,6 @@ function DataGrid({ title, data, className }) {
17680
17680
  // Format the value with commas if it's a number or numeric string
17681
17681
  let valueStr;
17682
17682
  valueStr = formatWithCommas(value);
17683
- console.log('value==>', valueStr, unit);
17684
17683
  // If no unit or unit length > 3, return value only
17685
17684
  if (!unit || unit.length > 3) {
17686
17685
  return valueStr;
@@ -38410,10 +38409,10 @@ function SummaryWidget({ title, data, metadata, className }) {
38410
38409
  }, children: title }) })), jsxRuntimeExports.jsx("div", { className: "flex-1 overflow-auto space-y-4", children: jsxRuntimeExports.jsx("div", { className: "prose prose-sm max-w-none", children: jsxRuntimeExports.jsx(Markdown, { className: "text-gray-800", children: data.content }) }) })] }));
38411
38410
  }
38412
38411
 
38413
- const CHART_REFRESH_TIMEOUT = 3000;
38414
- const DEFAULT_COLORS = ["#E4DCB8", "#DAC46C", "#808080", "#582809", "#A3ADD0", "#398E6F", "#AF123D", "#8C99C4", "#5290AC", "#601B07", "#50649D", "#B4A8A0", "#6F2587"];
38412
+ const CHART_REFRESH_TIMEOUT$4 = 3000;
38413
+ const DEFAULT_COLORS$3 = ["#E4DCB8", "#DAC46C", "#808080", "#582809", "#A3ADD0", "#398E6F", "#AF123D", "#8C99C4", "#5290AC", "#601B07", "#50649D", "#B4A8A0", "#6F2587"];
38415
38414
  const LINE_COLORS = ["#243D84", "#69238B", "#4A959F", "#D0A677", "#B31E47", "#396431"];
38416
- const clearChat = async (widgetBackendUrl, widgetId) => {
38415
+ const clearChat$4 = async (widgetBackendUrl, widgetId) => {
38417
38416
  if (!widgetBackendUrl || !widgetId)
38418
38417
  return;
38419
38418
  console.log('clearChat called for widgetId:', widgetId);
@@ -38435,8 +38434,8 @@ const clearChat = async (widgetBackendUrl, widgetId) => {
38435
38434
  console.error('Failed to clear chat:', error);
38436
38435
  }
38437
38436
  };
38438
- const createLoadingComponent = (message = "Loading chart data...") => (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [jsxRuntimeExports.jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-800" }), jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: message })] }) }));
38439
- const createInitialChartState = (agentType, widgetIds, datasetId) => {
38437
+ const createLoadingComponent$4 = (message = "Loading chart data...") => (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [jsxRuntimeExports.jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-800" }), jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: message })] }) }));
38438
+ const createInitialChartState$4 = (agentType, widgetIds, datasetId) => {
38440
38439
  const baseState = { dataset_id: datasetId || "home_generation_dataset" };
38441
38440
  switch (agentType) {
38442
38441
  case "Pie Chart Agent":
@@ -38463,6 +38462,8 @@ const createInitialChartState = (agentType, widgetIds, datasetId) => {
38463
38462
  title: "",
38464
38463
  type: "series_bar",
38465
38464
  chart_type: "financial",
38465
+ x_axis_title: "",
38466
+ y_axis_title: "",
38466
38467
  orientation: "vertical",
38467
38468
  units: "",
38468
38469
  data: { labels: [], series: [], total: 0, average: 0 },
@@ -38491,7 +38492,7 @@ const createInitialChartState = (agentType, widgetIds, datasetId) => {
38491
38492
  return Object.assign({ widget_ids: widgetIds }, baseState);
38492
38493
  }
38493
38494
  };
38494
- const loadAgentState = async (widgetBackendUrl, threadId, agentName) => {
38495
+ const loadAgentState$4 = async (widgetBackendUrl, threadId, agentName) => {
38495
38496
  try {
38496
38497
  const response = await fetch(`${widgetBackendUrl}/api/copilot/${agentName}`, {
38497
38498
  method: 'POST',
@@ -38520,7 +38521,7 @@ const loadAgentState = async (widgetBackendUrl, threadId, agentName) => {
38520
38521
  return null;
38521
38522
  }
38522
38523
  };
38523
- const parseAndUpdateChartState = (apiResponse, setChartState) => {
38524
+ const parseAndUpdateChartState$4 = (apiResponse, setChartState) => {
38524
38525
  var _a, _b;
38525
38526
  try {
38526
38527
  if ((_b = (_a = apiResponse === null || apiResponse === void 0 ? void 0 : apiResponse.data) === null || _a === void 0 ? void 0 : _a.loadAgentState) === null || _b === void 0 ? void 0 : _b.state) {
@@ -38563,7 +38564,7 @@ const parseAndUpdateChartState = (apiResponse, setChartState) => {
38563
38564
  console.error('Failed to parse and update chart state:', error);
38564
38565
  }
38565
38566
  };
38566
- const getStyleValues$1 = (styles = {}) => {
38567
+ const getStyleValues$6 = (styles = {}) => {
38567
38568
  const borderRadiusMap = {
38568
38569
  none: "0px",
38569
38570
  rounded: "0.375rem",
@@ -38597,7 +38598,7 @@ function BarChartComponent({ orientation, barChartState, styles, appendMessage,
38597
38598
  const isEmpty = labels.length === 0 || values.length === 0;
38598
38599
  const handleRefresh = async () => {
38599
38600
  if (query && widgetBackendUrl && widgetId) {
38600
- await clearChat(widgetBackendUrl, widgetId);
38601
+ await clearChat$4(widgetBackendUrl, widgetId);
38601
38602
  appendMessage(new TextMessage({
38602
38603
  content: `${query} and render data on a bar chart`,
38603
38604
  role: Role.User,
@@ -38621,10 +38622,10 @@ function BarChartComponent({ orientation, barChartState, styles, appendMessage,
38621
38622
  }
38622
38623
  }, [isEmpty, startLoadingTimeout, clearLoadingTimeout]);
38623
38624
  const finalColors = useMemo(() => {
38624
- return shuffleColors(DEFAULT_COLORS, labels === null || labels === void 0 ? void 0 : labels.length);
38625
+ return shuffleColors(DEFAULT_COLORS$3, labels === null || labels === void 0 ? void 0 : labels.length);
38625
38626
  }, [labels.length]);
38626
38627
  if (isEmpty) {
38627
- return createLoadingComponent();
38628
+ return createLoadingComponent$4();
38628
38629
  }
38629
38630
  const transformedData = {
38630
38631
  labels: labels,
@@ -38638,7 +38639,7 @@ function BarChartComponent({ orientation, barChartState, styles, appendMessage,
38638
38639
  };
38639
38640
  return (jsxRuntimeExports.jsx(BarChart, { orientation: orientation, title: chartTitle, data: transformedData, units: units, content: content }));
38640
38641
  }
38641
- function SeriesBarChartComponent({ orientation, seriesBarChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content }) {
38642
+ function SeriesBarChartComponent$2({ orientation, seriesBarChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content }) {
38642
38643
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x;
38643
38644
  const hasCalledRef = useRef(false);
38644
38645
  const labels = ((_b = (_a = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.labels) || ((_e = (_d = (_c = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.state) === null || _c === void 0 ? void 0 : _c.series_bar_chart_data) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.labels) || [];
@@ -38650,7 +38651,7 @@ function SeriesBarChartComponent({ orientation, seriesBarChartState, styles, app
38650
38651
  const isEmpty = labels.length === 0 || series.length === 0;
38651
38652
  const handleRefresh = async () => {
38652
38653
  if (query) {
38653
- await clearChat(widgetBackendUrl, widgetId);
38654
+ await clearChat$4(widgetBackendUrl, widgetId);
38654
38655
  // Send trigger event to clear chart state
38655
38656
  console.log('Dispatching clearChartState event for widgetId:', widgetId);
38656
38657
  window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
@@ -38676,10 +38677,10 @@ function SeriesBarChartComponent({ orientation, seriesBarChartState, styles, app
38676
38677
  }
38677
38678
  }, [isEmpty, startLoadingTimeout, clearLoadingTimeout]);
38678
38679
  const finalColors = useMemo(() => {
38679
- return shuffleColors(DEFAULT_COLORS, series === null || series === void 0 ? void 0 : series.length);
38680
+ return shuffleColors(DEFAULT_COLORS$3, series === null || series === void 0 ? void 0 : series.length);
38680
38681
  }, [series.length]);
38681
38682
  if (isEmpty) {
38682
- return createLoadingComponent();
38683
+ return createLoadingComponent$4();
38683
38684
  }
38684
38685
  const transformedData = {
38685
38686
  labels: labels,
@@ -38703,7 +38704,7 @@ function SeriesLineChartComponent({ orientation, seriesLineChartState, styles, a
38703
38704
  const isEmpty = labels.length === 0 || series.length === 0;
38704
38705
  const handleRefresh = async () => {
38705
38706
  if (query) {
38706
- await clearChat(widgetBackendUrl, widgetId);
38707
+ await clearChat$4(widgetBackendUrl, widgetId);
38707
38708
  // Send trigger event to clear chart state
38708
38709
  console.log('Dispatching clearChartState event for widgetId:', widgetId);
38709
38710
  window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
@@ -38729,10 +38730,10 @@ function SeriesLineChartComponent({ orientation, seriesLineChartState, styles, a
38729
38730
  }
38730
38731
  }, [isEmpty, startLoadingTimeout, clearLoadingTimeout]);
38731
38732
  const finalColors = useMemo(() => {
38732
- return shuffleColors([...LINE_COLORS, ...DEFAULT_COLORS], series === null || series === void 0 ? void 0 : series.length);
38733
+ return shuffleColors([...LINE_COLORS, ...DEFAULT_COLORS$3], series === null || series === void 0 ? void 0 : series.length);
38733
38734
  }, [series.length]);
38734
38735
  if (isEmpty) {
38735
- return createLoadingComponent();
38736
+ return createLoadingComponent$4();
38736
38737
  }
38737
38738
  const transformedData = {
38738
38739
  labels: labels,
@@ -38751,7 +38752,7 @@ function SeriesLineChartComponent({ orientation, seriesLineChartState, styles, a
38751
38752
  };
38752
38753
  return (jsxRuntimeExports.jsx(SeriesLineChart, { orientation: orientation, title: chartTitle, data: transformedData, units: units, content: content, x_axis_title: x_axis_title, y_axis_title: y_axis_title }));
38753
38754
  }
38754
- function PieChartComponent({ pieChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content }) {
38755
+ function PieChartComponent$1({ pieChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content }) {
38755
38756
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1;
38756
38757
  const hasCalledRef = useRef(false);
38757
38758
  const labels = ((_b = (_a = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.labels) || ((_e = (_d = (_c = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.state) === null || _c === void 0 ? void 0 : _c.pie_chart_data) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.labels) || [];
@@ -38762,7 +38763,7 @@ function PieChartComponent({ pieChartState, styles, appendMessage, query, isFirs
38762
38763
  const isEmpty = labels.length === 0 || values.length === 0;
38763
38764
  const handleRefresh = async () => {
38764
38765
  if (query) {
38765
- await clearChat(widgetBackendUrl, widgetId);
38766
+ await clearChat$4(widgetBackendUrl, widgetId);
38766
38767
  // Send trigger event to clear chart state
38767
38768
  console.log('Dispatching clearChartState event for widgetId:', widgetId);
38768
38769
  window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
@@ -38788,10 +38789,10 @@ function PieChartComponent({ pieChartState, styles, appendMessage, query, isFirs
38788
38789
  }
38789
38790
  }, [isEmpty, startLoadingTimeout, clearLoadingTimeout]);
38790
38791
  const backgroundColors = useMemo(() => {
38791
- return shuffleColors(DEFAULT_COLORS, labels.length);
38792
+ return shuffleColors(DEFAULT_COLORS$3, labels.length);
38792
38793
  }, [labels.length]);
38793
38794
  if (isEmpty) {
38794
- return createLoadingComponent();
38795
+ return createLoadingComponent$4();
38795
38796
  }
38796
38797
  const colors = ((_y = (_x = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _x === void 0 ? void 0 : _x.data) === null || _y === void 0 ? void 0 : _y.colors) || ((_1 = (_0 = (_z = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.state) === null || _z === void 0 ? void 0 : _z.pie_chart_data) === null || _0 === void 0 ? void 0 : _0.data) === null || _1 === void 0 ? void 0 : _1.colors) || labels.map((_, index) => backgroundColors[index % backgroundColors.length]);
38797
38798
  const transformedData = {
@@ -38818,7 +38819,7 @@ function LineChartComponent({ lineChartState, styles, appendMessage, query, isFi
38818
38819
  const isEmpty = labels.length === 0 || values.length === 0;
38819
38820
  const handleRefresh = async () => {
38820
38821
  if (query && widgetBackendUrl && widgetId) {
38821
- await clearChat(widgetBackendUrl, widgetId);
38822
+ await clearChat$4(widgetBackendUrl, widgetId);
38822
38823
  appendMessage(new TextMessage({
38823
38824
  content: `${query} and render data on a bar chart`,
38824
38825
  role: Role.User,
@@ -38844,7 +38845,7 @@ function LineChartComponent({ lineChartState, styles, appendMessage, query, isFi
38844
38845
  return LINE_COLORS[Math.floor(Math.random() * LINE_COLORS.length)];
38845
38846
  }, [labels.length]);
38846
38847
  if (isEmpty) {
38847
- return createLoadingComponent();
38848
+ return createLoadingComponent$4();
38848
38849
  }
38849
38850
  const transformedData = {
38850
38851
  labels: labels,
@@ -38864,7 +38865,7 @@ function LineChartComponent({ lineChartState, styles, appendMessage, query, isFi
38864
38865
  };
38865
38866
  return (jsxRuntimeExports.jsx(LineChart, { title: chartTitle, data: transformedData, units: units, content: content }));
38866
38867
  }
38867
- function DataGridComponent({ dataGridState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout }) {
38868
+ function DataGridComponent$1({ dataGridState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout }) {
38868
38869
  var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z;
38869
38870
  const hasCalledRef = useRef(false);
38870
38871
  const columns = ((_b = (_a = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.headers) || ((_e = (_d = (_c = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.state) === null || _c === void 0 ? void 0 : _c.matrix_grid_data) === null || _d === void 0 ? void 0 : _d.data) === null || _e === void 0 ? void 0 : _e.headers) || [];
@@ -38874,7 +38875,7 @@ function DataGridComponent({ dataGridState, styles, appendMessage, query, isFirs
38874
38875
  const isEmpty = columns.length === 0 || rows.length === 0;
38875
38876
  const handleRefresh = async () => {
38876
38877
  if (query) {
38877
- await clearChat(widgetBackendUrl, widgetId);
38878
+ await clearChat$4(widgetBackendUrl, widgetId);
38878
38879
  // Send trigger event to clear chart state
38879
38880
  console.log('Dispatching clearChartState event for widgetId:', widgetId);
38880
38881
  window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
@@ -38900,7 +38901,7 @@ function DataGridComponent({ dataGridState, styles, appendMessage, query, isFirs
38900
38901
  }
38901
38902
  }, [isEmpty, startLoadingTimeout, clearLoadingTimeout]);
38902
38903
  if (isEmpty) {
38903
- return createLoadingComponent("Loading table data...");
38904
+ return createLoadingComponent$4("Loading table data...");
38904
38905
  }
38905
38906
  const transformedData = {
38906
38907
  columns: columns,
@@ -38921,7 +38922,7 @@ function SummaryComponent({ summaryState, styles, appendMessage, query, isFirstL
38921
38922
  const isEmpty = !content || content.trim() === "";
38922
38923
  const handleRefresh = async () => {
38923
38924
  if (query) {
38924
- await clearChat(widgetBackendUrl, widgetId);
38925
+ await clearChat$4(widgetBackendUrl, widgetId);
38925
38926
  // Send trigger event to clear chart state
38926
38927
  console.log('Dispatching clearChartState event for widgetId:', widgetId);
38927
38928
  window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
@@ -38934,7 +38935,7 @@ function SummaryComponent({ summaryState, styles, appendMessage, query, isFirstL
38934
38935
  useEffect(() => {
38935
38936
  if (isEmpty && query && isFirstLoad && !(summaryState === null || summaryState === void 0 ? void 0 : summaryState.agent_message) && !hasCalledRef.current) {
38936
38937
  hasCalledRef.current = true;
38937
- setChartState((prevState) => (Object.assign(Object.assign({}, prevState), { widget_ids: widget_ids })));
38938
+ setChartState(Object.assign(Object.assign({}, summaryState), { widget_ids: widget_ids }));
38938
38939
  setTimeout(() => {
38939
38940
  handleRefresh();
38940
38941
  }, 500);
@@ -38950,12 +38951,12 @@ function SummaryComponent({ summaryState, styles, appendMessage, query, isFirstL
38950
38951
  }
38951
38952
  }, [isEmpty, startLoadingTimeout, clearLoadingTimeout]);
38952
38953
  if (isEmpty) {
38953
- return createLoadingComponent("Loading summary...");
38954
+ return createLoadingComponent$4("Loading summary...");
38954
38955
  }
38955
38956
  return (jsxRuntimeExports.jsx(SummaryWidget, { title: title, data: data, metadata: metadata, className: "" }));
38956
38957
  }
38957
- function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds, widgetBackendUrl, datasetId }) {
38958
- var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32;
38958
+ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds, widgetBackendUrl, datasetId, widgetData, }) {
38959
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v, _w, _x, _y, _z, _0, _1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29;
38959
38960
  const agentType = (_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentType;
38960
38961
  const orientation = (_b = widget.config) === null || _b === void 0 ? void 0 : _b.orientation;
38961
38962
  const isFirstLoad = (_c = widget.config) === null || _c === void 0 ? void 0 : _c.isFirstLoad;
@@ -38970,7 +38971,7 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
38970
38971
  }, [widget.id, setThreadId]);
38971
38972
  const { state: chartState, setState: setChartState } = useCoAgent({
38972
38973
  name: (_e = widget.config) === null || _e === void 0 ? void 0 : _e.agentName,
38973
- initialState: createInitialChartState(agentType || '', widgetIds, datasetId),
38974
+ initialState: createInitialChartState$4(agentType || '', widgetIds, datasetId),
38974
38975
  });
38975
38976
  // Function to handle timeout and call loadAgentState API
38976
38977
  const handleLoadingTimeout = useCallback(async () => {
@@ -38989,9 +38990,9 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
38989
38990
  // Increment the API call counter
38990
38991
  setApiCallCount(prev => prev + 1);
38991
38992
  const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || "adk-construction-project-agent";
38992
- const apiResponse = await loadAgentState(widgetBackendUrl, widget.id, agentName);
38993
+ const apiResponse = await loadAgentState$4(widgetBackendUrl, widget.id, agentName);
38993
38994
  if (apiResponse && !(chartState === null || chartState === void 0 ? void 0 : chartState.agent_message)) {
38994
- parseAndUpdateChartState(apiResponse, setChartState);
38995
+ parseAndUpdateChartState$4(apiResponse, setChartState);
38995
38996
  }
38996
38997
  }, [widgetBackendUrl, widget.id, isTimeoutTriggered, setChartState, (_f = widget.config) === null || _f === void 0 ? void 0 : _f.agentName, chartState, apiCallCount, hasTimeoutError]);
38997
38998
  // Function to start timeout
@@ -39002,7 +39003,7 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
39002
39003
  setIsTimeoutTriggered(false);
39003
39004
  timeoutRef.current = setTimeout(() => {
39004
39005
  handleLoadingTimeout();
39005
- }, CHART_REFRESH_TIMEOUT);
39006
+ }, CHART_REFRESH_TIMEOUT$4);
39006
39007
  }, [handleLoadingTimeout]);
39007
39008
  // Function to clear timeout
39008
39009
  const clearLoadingTimeout = useCallback(() => {
@@ -39011,29 +39012,6 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
39011
39012
  timeoutRef.current = null;
39012
39013
  }
39013
39014
  }, []);
39014
- // Function to clear chat and reset chart state
39015
- useCallback(async (widgetId) => {
39016
- if (!widgetBackendUrl)
39017
- return;
39018
- try {
39019
- await fetch(`${widgetBackendUrl}/api/clear-chat`, {
39020
- method: 'POST',
39021
- headers: {
39022
- 'Content-Type': 'application/json',
39023
- },
39024
- body: JSON.stringify({
39025
- session_id: widgetId,
39026
- delete_state: true
39027
- }),
39028
- });
39029
- setChartState(createInitialChartState(agentType || '', widgetIds, datasetId));
39030
- setApiCallCount(0);
39031
- setHasTimeoutError(false);
39032
- }
39033
- catch (error) {
39034
- console.error('Failed to clear chat and state:', error);
39035
- }
39036
- }, [widgetBackendUrl, setChartState, agentType, widgetIds]);
39037
39015
  // Clean up timeout on unmount
39038
39016
  useEffect(() => {
39039
39017
  return () => {
@@ -39082,7 +39060,7 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
39082
39060
  messageContent = `${query} and render the data on a summary widget`;
39083
39061
  }
39084
39062
  console.log('triggering to datasetId==>', datasetId);
39085
- setChartState(createInitialChartState(agentType || '', widgetIds, datasetId));
39063
+ setChartState(createInitialChartState$4(agentType || '', widgetIds, datasetId));
39086
39064
  appendMessage(new TextMessage({
39087
39065
  content: messageContent,
39088
39066
  role: Role.User,
@@ -39092,7 +39070,7 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
39092
39070
  const handleClearChartState = (event) => {
39093
39071
  const { widgetId } = event.detail;
39094
39072
  if (widgetId === widget.id) {
39095
- setChartState(createInitialChartState(agentType || '', widgetIds, datasetId));
39073
+ setChartState(createInitialChartState$4(agentType || '', widgetIds, datasetId));
39096
39074
  setApiCallCount(0);
39097
39075
  setHasTimeoutError(false);
39098
39076
  }
@@ -39112,16 +39090,11 @@ function CopilotKitAgent({ widget, showHeader, styles, onResetReady, widgetIds,
39112
39090
  (agentType === "Pie Chart Agent" && (!((_2 = (_1 = (_0 = chartState.pie_chart_data) === null || _0 === void 0 ? void 0 : _0.data) === null || _1 === void 0 ? void 0 : _1.labels) === null || _2 === void 0 ? void 0 : _2.length) || !((_5 = (_4 = (_3 = chartState.pie_chart_data) === null || _3 === void 0 ? void 0 : _3.data) === null || _4 === void 0 ? void 0 : _4.values) === null || _5 === void 0 ? void 0 : _5.length))) ||
39113
39091
  (agentType === "Line Chart Agent" && (!((_8 = (_7 = (_6 = chartState.bar_chart_data) === null || _6 === void 0 ? void 0 : _6.data) === null || _7 === void 0 ? void 0 : _7.labels) === null || _8 === void 0 ? void 0 : _8.length) || !((_11 = (_10 = (_9 = chartState.bar_chart_data) === null || _9 === void 0 ? void 0 : _9.data) === null || _10 === void 0 ? void 0 : _10.values) === null || _11 === void 0 ? void 0 : _11.length))) ||
39114
39092
  (agentType === "Data Grid Agent" && (!((_14 = (_13 = (_12 = chartState.matrix_grid_data) === null || _12 === void 0 ? void 0 : _12.data) === null || _13 === void 0 ? void 0 : _13.headers) === null || _14 === void 0 ? void 0 : _14.length) || !((_17 = (_16 = (_15 = chartState.matrix_grid_data) === null || _15 === void 0 ? void 0 : _15.data) === null || _16 === void 0 ? void 0 : _16.rows) === null || _17 === void 0 ? void 0 : _17.length))) ||
39115
- (agentType === "Summary Agent" && (!((_19 = (_18 = chartState.summary_data) === null || _18 === void 0 ? void 0 : _18.data) === null || _19 === void 0 ? void 0 : _19.content) || ((_22 = (_21 = (_20 = chartState.summary_data) === null || _20 === void 0 ? void 0 : _20.data) === null || _21 === void 0 ? void 0 : _21.content) === null || _22 === void 0 ? void 0 : _22.trim()) === ""))) ? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full p-4", children: jsxRuntimeExports.jsx("div", { className: "text-center max-w-md", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-700", children: chartState.agent_message }) }) })) : agentType === "Bar Chart Agent" ? (jsxRuntimeExports.jsx(BarChartComponent, { barChartState: chartState, styles: styles, orientation: orientation, content: content, appendMessage: appendMessage, query: (_23 = widget.config) === null || _23 === void 0 ? void 0 : _23.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Series Bar Chart Agent" ? (jsxRuntimeExports.jsx(SeriesBarChartComponent, { seriesBarChartState: chartState, styles: styles, orientation: orientation, content: content, appendMessage: appendMessage, query: (_24 = widget.config) === null || _24 === void 0 ? void 0 : _24.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Series Line Chart Agent" ? (jsxRuntimeExports.jsx(SeriesLineChartComponent, { seriesLineChartState: chartState, styles: styles, orientation: orientation, content: content, appendMessage: appendMessage, query: (_25 = widget.config) === null || _25 === void 0 ? void 0 : _25.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Pie Chart Agent" ? (jsxRuntimeExports.jsx(PieChartComponent, { pieChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_26 = widget.config) === null || _26 === void 0 ? void 0 : _26.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Line Chart Agent" ? (jsxRuntimeExports.jsx(LineChartComponent, { lineChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_27 = widget.config) === null || _27 === void 0 ? void 0 : _27.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Data Grid Agent" ? (jsxRuntimeExports.jsx(DataGridComponent, { dataGridState: chartState, styles: styles, appendMessage: appendMessage, query: (_28 = widget.config) === null || _28 === void 0 ? void 0 : _28.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Summary Agent" ? (jsxRuntimeExports.jsx(SummaryComponent, { summaryState: chartState, styles: styles, appendMessage: appendMessage, query: (_29 = widget.config) === null || _29 === void 0 ? void 0 : _29.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, widget_ids: widgetIds, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout, setChartState: setChartState })) : (jsxRuntimeExports.jsx(CopilotChat, { className: "h-full text-xs [&_.copilot-chat-message]:text-xs [&_.copilot-chat-input]:text-xs", labels: {
39116
- title: ((_30 = widget.config) === null || _30 === void 0 ? void 0 : _30.copilotTitle) || widget.title,
39117
- initial: ((_31 = widget.config) === null || _31 === void 0 ? void 0 : _31.copilotInitialMessage) || ((_32 = widget.config) === null || _32 === void 0 ? void 0 : _32.placeholder) || "How can I help you today?"
39118
- }, onSubmitMessage: () => {
39119
- setChartState(prevState => (Object.assign(Object.assign({}, prevState), { widget_ids: widgetIds, dataset_id: datasetId })));
39120
- } })) })] }));
39093
+ (agentType === "Summary Agent" && (!((_19 = (_18 = chartState.summary_data) === null || _18 === void 0 ? void 0 : _18.data) === null || _19 === void 0 ? void 0 : _19.content) || ((_22 = (_21 = (_20 = chartState.summary_data) === null || _20 === void 0 ? void 0 : _20.data) === null || _21 === void 0 ? void 0 : _21.content) === null || _22 === void 0 ? void 0 : _22.trim()) === ""))) ? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full p-4", children: jsxRuntimeExports.jsx("div", { className: "text-center max-w-md", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-700", children: chartState.agent_message }) }) })) : agentType === "Bar Chart Agent" ? (jsxRuntimeExports.jsx(BarChartComponent, { barChartState: chartState, styles: styles, orientation: orientation, content: content, appendMessage: appendMessage, query: (_23 = widget.config) === null || _23 === void 0 ? void 0 : _23.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Series Bar Chart Agent" ? (jsxRuntimeExports.jsx(SeriesBarChartComponent$2, { seriesBarChartState: chartState, styles: styles, orientation: orientation, content: content, appendMessage: appendMessage, query: (_24 = widget.config) === null || _24 === void 0 ? void 0 : _24.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Series Line Chart Agent" ? (jsxRuntimeExports.jsx(SeriesLineChartComponent, { seriesLineChartState: chartState, styles: styles, orientation: orientation, content: content, appendMessage: appendMessage, query: (_25 = widget.config) === null || _25 === void 0 ? void 0 : _25.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Pie Chart Agent" ? (jsxRuntimeExports.jsx(PieChartComponent$1, { pieChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_26 = widget.config) === null || _26 === void 0 ? void 0 : _26.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Line Chart Agent" ? (jsxRuntimeExports.jsx(LineChartComponent, { lineChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_27 = widget.config) === null || _27 === void 0 ? void 0 : _27.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Data Grid Agent" ? (jsxRuntimeExports.jsx(DataGridComponent$1, { dataGridState: chartState, styles: styles, appendMessage: appendMessage, query: (_28 = widget.config) === null || _28 === void 0 ? void 0 : _28.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout })) : agentType === "Summary Agent" ? (jsxRuntimeExports.jsx(SummaryComponent, { summaryState: chartState, styles: styles, appendMessage: appendMessage, query: (_29 = widget.config) === null || _29 === void 0 ? void 0 : _29.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, widget_ids: widgetIds, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout, setChartState: setChartState })) : null })] }));
39121
39094
  }
39122
- function AgentWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, }) {
39095
+ function AgentWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, widgetData, }) {
39123
39096
  var _a, _b;
39124
- const styles = getStyleValues$1((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
39097
+ const styles = getStyleValues$6((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
39125
39098
  // Construct the runtime URL using the configurable backend URL
39126
39099
  const getRuntimeUrl = () => {
39127
39100
  var _a;
@@ -39132,7 +39105,7 @@ function AgentWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady
39132
39105
  return (jsxRuntimeExports.jsx(jsxRuntimeExports.Fragment, { children: jsxRuntimeExports.jsx(CopilotKit, { runtimeUrl: getRuntimeUrl(), showDevConsole: false, agent: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.agentName) || "widget_assistant", children: jsxRuntimeExports.jsx(CopilotKitAgent, { widget: widget, showHeader: showHeader, styles: styles, onResetReady: onResetReady, widgetIds: widgetIds, widgetBackendUrl: widgetBackendUrl, datasetId: datasetId }) }) }));
39133
39106
  }
39134
39107
 
39135
- const getStyleValues = (styles = {}) => {
39108
+ const getStyleValues$5 = (styles = {}) => {
39136
39109
  (styles.borderRadius || "rounded");
39137
39110
  return {
39138
39111
  // backgroundColor: styles.backgroundColor || "10px",
@@ -39140,37 +39113,1333 @@ const getStyleValues = (styles = {}) => {
39140
39113
  };
39141
39114
  function SpacerWidget({ widget }) {
39142
39115
  var _a, _b;
39143
- const styles = getStyleValues((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
39116
+ const styles = getStyleValues$5((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
39144
39117
  ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.content) || {};
39145
39118
  return (jsxRuntimeExports.jsx("div", { className: "w-full", style: styles }));
39146
39119
  }
39147
39120
 
39148
- function WidgetRenderer({ widget, isTemplate = false, onConfigUpdate, widgetBackendUrl, onResetReady, widgetIds, datasetId, }) {
39149
- const handleConfigUpdate = (config) => {
39150
- if (onConfigUpdate) {
39151
- onConfigUpdate(widget.id, config);
39121
+ const getStyleValues$4 = (styles = {}) => {
39122
+ const borderRadiusMap = {
39123
+ none: "0px",
39124
+ rounded: "0.375rem",
39125
+ large: "0.5rem",
39126
+ "extra-large": "0.75rem",
39127
+ };
39128
+ const paddingMap = {
39129
+ small: "0.5rem",
39130
+ medium: "1rem",
39131
+ large: "1.5rem",
39132
+ "extra-large": "2rem",
39133
+ };
39134
+ const alignment = styles.alignment || "left";
39135
+ return {
39136
+ backgroundColor: styles.backgroundColor || "#ffffff",
39137
+ borderRadius: borderRadiusMap[styles.borderRadius || "rounded"],
39138
+ padding: paddingMap[styles.padding || "medium"],
39139
+ color: styles.textColor || "#000000",
39140
+ fontSize: styles.fontSize || "14px",
39141
+ textAlign: alignment,
39142
+ };
39143
+ };
39144
+ function CopilotKitChatbot({ widget, showHeader, styles, onResetReady, widgetIds, datasetId, }) {
39145
+ var _a, _b, _c, _d;
39146
+ const { threadId, setThreadId } = useCopilotContext();
39147
+ useEffect(() => {
39148
+ setThreadId(widget.id);
39149
+ }, [widget.id, setThreadId]);
39150
+ const { state: chatbotState, setState: setChatbotState } = useCoAgent({
39151
+ name: ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || "widget_assistant",
39152
+ initialState: {
39153
+ widget_ids: widgetIds,
39154
+ dataset_id: datasetId
39155
+ },
39156
+ });
39157
+ const { reset } = useCopilotChat();
39158
+ // Register the reset function with the parent component
39159
+ useEffect(() => {
39160
+ if (onResetReady && reset && widget.id) {
39161
+ console.log('on reset ready=>');
39162
+ const wrappedReset = () => {
39163
+ reset();
39164
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId: widget.id } }));
39165
+ };
39166
+ onResetReady(widget.id, wrappedReset);
39152
39167
  }
39168
+ }, [reset, widget.id, onResetReady]);
39169
+ // Listen for clearChartState events for this widget
39170
+ useEffect(() => {
39171
+ const handleClearChartState = (event) => {
39172
+ const { widgetId } = event.detail;
39173
+ if (widgetId === widget.id) {
39174
+ setChatbotState({
39175
+ widget_ids: widgetIds,
39176
+ dataset_id: datasetId
39177
+ });
39178
+ }
39179
+ };
39180
+ window.addEventListener('clearChartState', handleClearChartState);
39181
+ return () => {
39182
+ window.removeEventListener('clearChartState', handleClearChartState);
39183
+ };
39184
+ }, [widget.id, widgetIds, datasetId, setChatbotState]);
39185
+ return (jsxRuntimeExports.jsxs("div", { className: cn("flex flex-col h-full"), children: [showHeader && (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between pb-2 border-b", children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(Bot, { className: "h-4 w-4" }), jsxRuntimeExports.jsx("h3", { className: "text-sm font-medium", children: widget.title })] }) })), jsxRuntimeExports.jsx("div", { className: "flex-1 h-full", children: jsxRuntimeExports.jsx(CopilotChat, { className: "h-full text-xs [&_.copilot-chat-message]:text-xs [&_.copilot-chat-input]:text-xs", labels: {
39186
+ title: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.copilotTitle) || widget.title,
39187
+ initial: ((_c = widget.config) === null || _c === void 0 ? void 0 : _c.copilotInitialMessage) || ((_d = widget.config) === null || _d === void 0 ? void 0 : _d.placeholder) || "How can I help you today?"
39188
+ }, onSubmitMessage: () => {
39189
+ setChatbotState(prevState => (Object.assign(Object.assign({}, prevState), { widget_ids: widgetIds, dataset_id: datasetId })));
39190
+ } }) })] }));
39191
+ }
39192
+ function ChatbotWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, }) {
39193
+ var _a, _b;
39194
+ const styles = getStyleValues$4((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
39195
+ // Construct the runtime URL using the configurable backend URL
39196
+ const getRuntimeUrl = () => {
39197
+ var _a;
39198
+ const baseUrl = widgetBackendUrl || '';
39199
+ const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || 'default-agent';
39200
+ return `${baseUrl}/api/copilot/${agentName}`;
39153
39201
  };
39154
- getWidgetStyles(widget);
39155
- const renderWidget = () => {
39156
- switch (widget.type) {
39157
- // Search-related widget cases removed
39158
- // Available widgets
39159
- case "header":
39160
- return jsxRuntimeExports.jsx(HeaderWidget, { widget: widget, showHeader: false });
39161
- case "footer":
39162
- return jsxRuntimeExports.jsx(FooterWidget, { widget: widget, showHeader: false });
39163
- case "text":
39164
- return jsxRuntimeExports.jsx(TextWidget, { widget: widget, showHeader: false });
39165
- case "spacer":
39166
- return jsxRuntimeExports.jsx(SpacerWidget, { widget: widget, showHeader: false });
39167
- case "divider":
39168
- return jsxRuntimeExports.jsx(DividerWidget, { widget: widget, showHeader: false });
39169
- case "facet":
39170
- return (jsxRuntimeExports.jsx(FacetWidget, { widget: widget, showHeader: false, onConfigUpdate: handleConfigUpdate }));
39171
- case "agent":
39172
- case "chatbot":
39173
- return jsxRuntimeExports.jsx(AgentWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId });
39202
+ return (jsxRuntimeExports.jsx(CopilotKit, { runtimeUrl: getRuntimeUrl(), showDevConsole: false, agent: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.agentName) || "widget_assistant", children: jsxRuntimeExports.jsx(CopilotKitChatbot, { widget: widget, showHeader: showHeader, styles: styles, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId }) }));
39203
+ }
39204
+
39205
+ const CHART_REFRESH_TIMEOUT$3 = 3000;
39206
+ const DEFAULT_COLORS$2 = ["#E4DCB8", "#DAC46C", "#808080", "#582809", "#A3ADD0", "#398E6F", "#AF123D", "#8C99C4", "#5290AC", "#601B07", "#50649D", "#B4A8A0", "#6F2587"];
39207
+ const clearChat$3 = async (widgetBackendUrl, widgetId) => {
39208
+ if (!widgetBackendUrl || !widgetId)
39209
+ return;
39210
+ console.log('clearChat called for widgetId:', widgetId);
39211
+ try {
39212
+ await fetch(`${widgetBackendUrl}/api/clear-chat`, {
39213
+ method: 'POST',
39214
+ headers: {
39215
+ 'Content-Type': 'application/json',
39216
+ },
39217
+ body: JSON.stringify({
39218
+ session_id: widgetId,
39219
+ delete_state: true
39220
+ }),
39221
+ });
39222
+ console.log('Dispatching clearChartState event from clearChat for widgetId:', widgetId);
39223
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
39224
+ }
39225
+ catch (error) {
39226
+ console.error('Failed to clear chat:', error);
39227
+ }
39228
+ };
39229
+ const createLoadingComponent$3 = (message = "Loading chart data...") => (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [jsxRuntimeExports.jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-800" }), jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: message })] }) }));
39230
+ const createInitialChartState$3 = (datasetId, pieChartState) => {
39231
+ return {
39232
+ pie_chart_data: {
39233
+ title: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.title) || "",
39234
+ type: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.type) || "pie",
39235
+ chart_type: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.chart_type) || "financial",
39236
+ data: { labels: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.data.labels) || [], values: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.data.values) || [], percentages: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.data.percentages) || [], total: pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.data.total },
39237
+ metadata: { categories: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.metadata.categories) || 0, largest_category: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.metadata.largest_category) || "", largest_value: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.metadata.largest_value) || 0, largest_percentage: (pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.metadata.largest_percentage) || 0 }
39238
+ },
39239
+ dataset_id: datasetId || "home_generation_dataset"
39240
+ };
39241
+ };
39242
+ const loadAgentState$3 = async (widgetBackendUrl, threadId, agentName) => {
39243
+ try {
39244
+ const response = await fetch(`${widgetBackendUrl}/api/copilot/${agentName}`, {
39245
+ method: 'POST',
39246
+ headers: {
39247
+ 'Content-Type': 'application/json',
39248
+ },
39249
+ body: JSON.stringify({
39250
+ "operationName": "loadAgentState",
39251
+ "query": "query loadAgentState($data: LoadAgentStateInput!) {\n loadAgentState(data: $data) {\n threadId\n threadExists\n state\n messages\n __typename\n }\n}",
39252
+ "variables": {
39253
+ "data": {
39254
+ "agentName": agentName,
39255
+ "threadId": threadId
39256
+ }
39257
+ }
39258
+ }),
39259
+ });
39260
+ if (!response.ok) {
39261
+ throw new Error(`HTTP error! status: ${response.status}`);
39262
+ }
39263
+ const result = await response.json();
39264
+ return result;
39265
+ }
39266
+ catch (error) {
39267
+ console.error('Failed to load agent state:', error);
39268
+ return null;
39269
+ }
39270
+ };
39271
+ const parseAndUpdateChartState$3 = (apiResponse, setChartState) => {
39272
+ var _a, _b;
39273
+ try {
39274
+ if ((_b = (_a = apiResponse === null || apiResponse === void 0 ? void 0 : apiResponse.data) === null || _a === void 0 ? void 0 : _a.loadAgentState) === null || _b === void 0 ? void 0 : _b.state) {
39275
+ const stateString = apiResponse.data.loadAgentState.state;
39276
+ const parsedState = JSON.parse(stateString);
39277
+ if (parsedState.state) {
39278
+ const chartData = parsedState.state;
39279
+ setChartState((prevState) => {
39280
+ const newChartState = Object.assign({}, prevState);
39281
+ if (chartData.pie_chart_data) {
39282
+ newChartState.pie_chart_data = chartData.pie_chart_data;
39283
+ }
39284
+ if (chartData.agent_message) {
39285
+ newChartState.agent_message = chartData.agent_message;
39286
+ }
39287
+ return newChartState;
39288
+ });
39289
+ }
39290
+ }
39291
+ }
39292
+ catch (error) {
39293
+ console.error('Failed to parse and update chart state:', error);
39294
+ }
39295
+ };
39296
+ const getStyleValues$3 = (styles = {}) => {
39297
+ const borderRadiusMap = {
39298
+ none: "0px",
39299
+ rounded: "0.375rem",
39300
+ large: "0.5rem",
39301
+ "extra-large": "0.75rem",
39302
+ };
39303
+ const paddingMap = {
39304
+ small: "0.5rem",
39305
+ medium: "1rem",
39306
+ large: "1.5rem",
39307
+ "extra-large": "2rem",
39308
+ };
39309
+ const alignment = styles.alignment || "left";
39310
+ return {
39311
+ backgroundColor: styles.backgroundColor || "#ffffff",
39312
+ borderRadius: borderRadiusMap[styles.borderRadius || "rounded"],
39313
+ padding: paddingMap[styles.padding || "medium"],
39314
+ color: styles.textColor || "#000000",
39315
+ fontSize: styles.fontSize || "14px",
39316
+ textAlign: alignment,
39317
+ };
39318
+ };
39319
+ function PieChartComponent({ pieChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content, hasWidgetData }) {
39320
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
39321
+ const hasCalledRef = useRef(false);
39322
+ const labels = ((_b = (_a = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.labels) || [];
39323
+ const values = ((_d = (_c = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.values) || [];
39324
+ ((_f = (_e = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f.percentages) || [];
39325
+ const chartTitle = ((_g = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _g === void 0 ? void 0 : _g.title) || "";
39326
+ const units = ((_h = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _h === void 0 ? void 0 : _h.units) || "";
39327
+ const isEmpty = labels.length === 0 || values.length === 0;
39328
+ const handleRefresh = async () => {
39329
+ if (query) {
39330
+ await clearChat$3(widgetBackendUrl, widgetId);
39331
+ console.log('Dispatching clearChartState event for widgetId:', widgetId);
39332
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
39333
+ appendMessage(new TextMessage({
39334
+ content: `${query} and render data on pie chart`,
39335
+ role: Role.User,
39336
+ }));
39337
+ }
39338
+ };
39339
+ useEffect(() => {
39340
+ if (isEmpty && query && isFirstLoad && !(pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.agent_message) && !hasCalledRef.current) {
39341
+ hasCalledRef.current = true;
39342
+ handleRefresh();
39343
+ }
39344
+ }, [isEmpty, query, isFirstLoad, pieChartState]);
39345
+ useEffect(() => {
39346
+ console.log('PieChartComponent useEffect - isEmpty:', isEmpty, 'hasMessage:', !!(pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.agent_message), 'hasWidgetData:', hasWidgetData, 'isFirstLoad:', isFirstLoad);
39347
+ if (isEmpty && startLoadingTimeout && !(pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.agent_message)) {
39348
+ console.log('Starting loading timeout from PieChartComponent useEffect');
39349
+ startLoadingTimeout();
39350
+ }
39351
+ else if (!isEmpty && clearLoadingTimeout) {
39352
+ clearLoadingTimeout();
39353
+ }
39354
+ }, [isEmpty, startLoadingTimeout, clearLoadingTimeout, pieChartState]);
39355
+ const backgroundColors = useMemo(() => {
39356
+ return shuffleColors(DEFAULT_COLORS$2, labels.length);
39357
+ }, [labels.length]);
39358
+ if (isEmpty) {
39359
+ return createLoadingComponent$3();
39360
+ }
39361
+ const colors = ((_k = (_j = pieChartState === null || pieChartState === void 0 ? void 0 : pieChartState.pie_chart_data) === null || _j === void 0 ? void 0 : _j.data) === null || _k === void 0 ? void 0 : _k.colors) || labels.map((_, index) => backgroundColors[index % backgroundColors.length]);
39362
+ const transformedData = {
39363
+ labels: labels,
39364
+ datasets: [
39365
+ {
39366
+ label: chartTitle || "Data",
39367
+ data: values,
39368
+ backgroundColor: colors,
39369
+ borderWidth: 0,
39370
+ },
39371
+ ],
39372
+ };
39373
+ return (jsxRuntimeExports.jsx(PieChart, { title: chartTitle, data: transformedData, units: units, content: content }));
39374
+ }
39375
+ function CopilotKitPieChart({ widget, showHeader, styles, onResetReady, widgetBackendUrl, datasetId, widgetData, }) {
39376
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
39377
+ const isFirstLoad = (_a = widget.config) === null || _a === void 0 ? void 0 : _a.isFirstLoad;
39378
+ const content = (_b = widget.config) === null || _b === void 0 ? void 0 : _b.content;
39379
+ const widget_data = (_c = widget.widget_data) === null || _c === void 0 ? void 0 : _c.pie_chart_data;
39380
+ console.log('widget_data===>', widget_data);
39381
+ const { threadId, setThreadId } = useCopilotContext();
39382
+ const timeoutRef = useRef(null);
39383
+ const [apiCallCount, setApiCallCount] = useState(0);
39384
+ const [hasTimeoutError, setHasTimeoutError] = useState(false);
39385
+ useEffect(() => {
39386
+ setThreadId(widget.id);
39387
+ }, [widget.id, setThreadId]);
39388
+ const { state: agentState, setState: setAgentState } = useCoAgent({
39389
+ name: (_d = widget.config) === null || _d === void 0 ? void 0 : _d.agentName,
39390
+ initialState: createInitialChartState$3(datasetId, widget_data),
39391
+ });
39392
+ const [chartState, setChartState] = useState(createInitialChartState$3(datasetId, widget_data));
39393
+ const handleLoadingTimeout = useCallback(async () => {
39394
+ var _a;
39395
+ if (!widgetBackendUrl || !widget.id || (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) || hasTimeoutError) {
39396
+ console.log('Skipping API call - conditions not met');
39397
+ return;
39398
+ }
39399
+ console.log('Loading timeout triggered for widget:', widget.id, 'API call count:', apiCallCount);
39400
+ if (apiCallCount >= 30) {
39401
+ console.log('API call limit reached for widget:', widget.id);
39402
+ setHasTimeoutError(true);
39403
+ setChartState(prevState => (Object.assign(Object.assign({}, prevState), { agent_message: "Timeout: Unable to load data after multiple attempts. Please try refreshing the widget." })));
39404
+ return;
39405
+ }
39406
+ setApiCallCount(prev => prev + 1);
39407
+ const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || "adk-construction-project-agent";
39408
+ console.log('Calling loadAgentState API for widget:', widget.id);
39409
+ const apiResponse = await loadAgentState$3(widgetBackendUrl, widget.id, agentName);
39410
+ console.log('API response received:', apiResponse);
39411
+ if (apiResponse && !(chartState === null || chartState === void 0 ? void 0 : chartState.agent_message)) {
39412
+ parseAndUpdateChartState$3(apiResponse, setChartState);
39413
+ }
39414
+ }, [widgetBackendUrl, widget.id, setChartState, (_e = widget.config) === null || _e === void 0 ? void 0 : _e.agentName, chartState, apiCallCount, hasTimeoutError]);
39415
+ const startLoadingTimeout = useCallback(() => {
39416
+ if (timeoutRef.current) {
39417
+ clearTimeout(timeoutRef.current);
39418
+ }
39419
+ console.log('Scheduling next API call in 3 seconds');
39420
+ timeoutRef.current = setTimeout(() => {
39421
+ handleLoadingTimeout();
39422
+ }, CHART_REFRESH_TIMEOUT$3);
39423
+ }, [handleLoadingTimeout]);
39424
+ const clearLoadingTimeout = useCallback(() => {
39425
+ if (timeoutRef.current) {
39426
+ clearTimeout(timeoutRef.current);
39427
+ timeoutRef.current = null;
39428
+ }
39429
+ }, []);
39430
+ useEffect(() => {
39431
+ return () => {
39432
+ if (timeoutRef.current) {
39433
+ clearTimeout(timeoutRef.current);
39434
+ }
39435
+ };
39436
+ }, []);
39437
+ const { appendMessage, reset } = useCopilotChat();
39438
+ useEffect(() => {
39439
+ if (onResetReady && reset && widget.id) {
39440
+ const wrappedReset = () => {
39441
+ reset();
39442
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId: widget.id } }));
39443
+ };
39444
+ onResetReady(widget.id, wrappedReset);
39445
+ }
39446
+ }, [reset, widget.id, onResetReady]);
39447
+ useEffect(() => {
39448
+ const handleTriggerAgent = (event) => {
39449
+ const { widgetId, query, agentType: eventAgentType, datasetId } = event.detail;
39450
+ reset();
39451
+ if (widgetId === widget.id) {
39452
+ let messageContent = `${query} and render data on pie chart`;
39453
+ console.log('triggering to datasetId==>', datasetId);
39454
+ setChartState(createInitialChartState$3(datasetId));
39455
+ setAgentState(createInitialChartState$3(datasetId));
39456
+ setApiCallCount(0);
39457
+ setHasTimeoutError(false);
39458
+ appendMessage(new TextMessage({
39459
+ content: messageContent,
39460
+ role: Role.User,
39461
+ }));
39462
+ // Start polling for chart data
39463
+ startLoadingTimeout();
39464
+ }
39465
+ };
39466
+ const handleClearChartState = (event) => {
39467
+ const { widgetId } = event.detail;
39468
+ if (widgetId === widget.id) {
39469
+ setChartState(createInitialChartState$3(datasetId));
39470
+ setAgentState(createInitialChartState$3(datasetId));
39471
+ setApiCallCount(0);
39472
+ setHasTimeoutError(false);
39473
+ }
39474
+ };
39475
+ window.addEventListener('triggerAgent', handleTriggerAgent);
39476
+ window.addEventListener('clearChartState', handleClearChartState);
39477
+ return () => {
39478
+ window.removeEventListener('triggerAgent', handleTriggerAgent);
39479
+ window.removeEventListener('clearChartState', handleClearChartState);
39480
+ };
39481
+ }, [widget.id, appendMessage, setChartState, startLoadingTimeout]);
39482
+ return (jsxRuntimeExports.jsxs("div", { className: cn("flex flex-col h-full"), children: [showHeader && (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between pb-2 border-b", children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(Bot, { className: "h-4 w-4" }), jsxRuntimeExports.jsx("h3", { className: "text-sm font-medium", children: widget.title })] }) })), jsxRuntimeExports.jsx("div", { className: "flex-1 h-full", children: (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) &&
39483
+ (!((_h = (_g = (_f = chartState.pie_chart_data) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.labels) === null || _h === void 0 ? void 0 : _h.length) || !((_l = (_k = (_j = chartState.pie_chart_data) === null || _j === void 0 ? void 0 : _j.data) === null || _k === void 0 ? void 0 : _k.values) === null || _l === void 0 ? void 0 : _l.length))
39484
+ ? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full p-4", children: jsxRuntimeExports.jsx("div", { className: "text-center max-w-md", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-700", children: chartState.agent_message }) }) })) : (jsxRuntimeExports.jsx(PieChartComponent, { pieChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_m = widget.config) === null || _m === void 0 ? void 0 : _m.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout, hasWidgetData: !!(((_p = (_o = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _o === void 0 ? void 0 : _o.labels) === null || _p === void 0 ? void 0 : _p.length) && ((_r = (_q = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _q === void 0 ? void 0 : _q.values) === null || _r === void 0 ? void 0 : _r.length)) })) })] }));
39485
+ }
39486
+ function PieChartWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, widgetData, }) {
39487
+ var _a, _b;
39488
+ const styles = getStyleValues$3((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
39489
+ const getRuntimeUrl = () => {
39490
+ var _a;
39491
+ const baseUrl = widgetBackendUrl || '';
39492
+ const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || 'default-agent';
39493
+ return `${baseUrl}/api/copilot/${agentName}`;
39494
+ };
39495
+ return (jsxRuntimeExports.jsx(CopilotKit, { runtimeUrl: getRuntimeUrl(), showDevConsole: false, agent: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.agentName) || "widget_assistant", children: jsxRuntimeExports.jsx(CopilotKitPieChart, { widget: widget, showHeader: showHeader, styles: styles, onResetReady: onResetReady, widgetBackendUrl: widgetBackendUrl, datasetId: datasetId }) }));
39496
+ }
39497
+
39498
+ const CHART_REFRESH_TIMEOUT$2 = 3000;
39499
+ const DEFAULT_COLORS$1 = ["#E4DCB8", "#DAC46C", "#808080", "#582809", "#A3ADD0", "#398E6F", "#AF123D", "#8C99C4", "#5290AC", "#601B07", "#50649D", "#B4A8A0", "#6F2587"];
39500
+ const clearChat$2 = async (widgetBackendUrl, widgetId) => {
39501
+ if (!widgetBackendUrl || !widgetId)
39502
+ return;
39503
+ console.log('clearChat called for widgetId:', widgetId);
39504
+ try {
39505
+ await fetch(`${widgetBackendUrl}/api/clear-chat`, {
39506
+ method: 'POST',
39507
+ headers: {
39508
+ 'Content-Type': 'application/json',
39509
+ },
39510
+ body: JSON.stringify({
39511
+ session_id: widgetId,
39512
+ delete_state: true
39513
+ }),
39514
+ });
39515
+ console.log('Dispatching clearChartState event from clearChat for widgetId:', widgetId);
39516
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
39517
+ }
39518
+ catch (error) {
39519
+ console.error('Failed to clear chat:', error);
39520
+ }
39521
+ };
39522
+ const createLoadingComponent$2 = (message = "Loading chart data...") => (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [jsxRuntimeExports.jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-800" }), jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: message })] }) }));
39523
+ const createInitialChartState$2 = (datasetId, seriesBarChartState) => {
39524
+ return {
39525
+ series_bar_chart_data: {
39526
+ title: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.title) || "",
39527
+ type: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.type) || "series_bar",
39528
+ chart_type: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.chart_type) || "financial",
39529
+ x_axis_title: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.x_axis_title) || "",
39530
+ y_axis_title: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.y_axis_title) || "",
39531
+ orientation: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.orientation) || "vertical",
39532
+ units: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.units) || "",
39533
+ data: {
39534
+ labels: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.labels) || [],
39535
+ series: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.series) || [],
39536
+ total: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.total) || 0,
39537
+ average: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.average) || 0
39538
+ },
39539
+ metadata: {
39540
+ categories: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.categories) || 0,
39541
+ series_count: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.series_count) || 0,
39542
+ highest_category: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.highest_category) || "",
39543
+ highest_value: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.highest_value) || 0,
39544
+ highest_series: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.highest_series) || "",
39545
+ lowest_category: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.lowest_category) || "",
39546
+ lowest_value: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.lowest_value) || 0,
39547
+ lowest_series: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.lowest_series) || "",
39548
+ range: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.range) || 0,
39549
+ series_totals: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.series_totals) || {},
39550
+ series_averages: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.series_averages) || {}
39551
+ }
39552
+ },
39553
+ dataset_id: datasetId || "home_generation_dataset"
39554
+ };
39555
+ };
39556
+ const loadAgentState$2 = async (widgetBackendUrl, threadId, agentName) => {
39557
+ try {
39558
+ const response = await fetch(`${widgetBackendUrl}/api/copilot/${agentName}`, {
39559
+ method: 'POST',
39560
+ headers: {
39561
+ 'Content-Type': 'application/json',
39562
+ },
39563
+ body: JSON.stringify({
39564
+ "operationName": "loadAgentState",
39565
+ "query": "query loadAgentState($data: LoadAgentStateInput!) {\n loadAgentState(data: $data) {\n threadId\n threadExists\n state\n messages\n __typename\n }\n}",
39566
+ "variables": {
39567
+ "data": {
39568
+ "agentName": agentName,
39569
+ "threadId": threadId
39570
+ }
39571
+ }
39572
+ }),
39573
+ });
39574
+ if (!response.ok) {
39575
+ throw new Error(`HTTP error! status: ${response.status}`);
39576
+ }
39577
+ const result = await response.json();
39578
+ return result;
39579
+ }
39580
+ catch (error) {
39581
+ console.error('Failed to load agent state:', error);
39582
+ return null;
39583
+ }
39584
+ };
39585
+ const parseAndUpdateChartState$2 = (apiResponse, setChartState) => {
39586
+ var _a, _b;
39587
+ try {
39588
+ if ((_b = (_a = apiResponse === null || apiResponse === void 0 ? void 0 : apiResponse.data) === null || _a === void 0 ? void 0 : _a.loadAgentState) === null || _b === void 0 ? void 0 : _b.state) {
39589
+ const stateString = apiResponse.data.loadAgentState.state;
39590
+ const parsedState = JSON.parse(stateString);
39591
+ if (parsedState.state) {
39592
+ const chartData = parsedState.state;
39593
+ setChartState((prevState) => {
39594
+ const newChartState = Object.assign({}, prevState);
39595
+ if (chartData.series_bar_chart_data) {
39596
+ newChartState.series_bar_chart_data = chartData.series_bar_chart_data;
39597
+ }
39598
+ if (chartData.agent_message) {
39599
+ newChartState.agent_message = chartData.agent_message;
39600
+ }
39601
+ return newChartState;
39602
+ });
39603
+ }
39604
+ }
39605
+ }
39606
+ catch (error) {
39607
+ console.error('Failed to parse and update chart state:', error);
39608
+ }
39609
+ };
39610
+ const getStyleValues$2 = (styles = {}) => {
39611
+ const borderRadiusMap = {
39612
+ none: "0px",
39613
+ rounded: "0.375rem",
39614
+ large: "0.5rem",
39615
+ "extra-large": "0.75rem",
39616
+ };
39617
+ const paddingMap = {
39618
+ small: "0.5rem",
39619
+ medium: "1rem",
39620
+ large: "1.5rem",
39621
+ "extra-large": "2rem",
39622
+ };
39623
+ const alignment = styles.alignment || "left";
39624
+ return {
39625
+ backgroundColor: styles.backgroundColor || "#ffffff",
39626
+ borderRadius: borderRadiusMap[styles.borderRadius || "rounded"],
39627
+ padding: paddingMap[styles.padding || "medium"],
39628
+ color: styles.textColor || "#000000",
39629
+ fontSize: styles.fontSize || "14px",
39630
+ textAlign: alignment,
39631
+ };
39632
+ };
39633
+ function SeriesBarChartComponent$1({ orientation, seriesBarChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content, hasWidgetData }) {
39634
+ var _a, _b, _c, _d, _e, _f, _g, _h;
39635
+ const hasCalledRef = useRef(false);
39636
+ const labels = ((_b = (_a = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.labels) || [];
39637
+ const series = ((_d = (_c = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.series) || [];
39638
+ const chartTitle = ((_e = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _e === void 0 ? void 0 : _e.title) || "";
39639
+ const units = ((_f = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _f === void 0 ? void 0 : _f.units) || "";
39640
+ const x_axis_title = ((_g = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _g === void 0 ? void 0 : _g.x_axis_title) || "";
39641
+ const y_axis_title = ((_h = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _h === void 0 ? void 0 : _h.y_axis_title) || "";
39642
+ const isEmpty = labels.length === 0 || series.length === 0;
39643
+ const handleRefresh = async () => {
39644
+ if (query) {
39645
+ await clearChat$2(widgetBackendUrl, widgetId);
39646
+ console.log('Dispatching clearChartState event for widgetId:', widgetId);
39647
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
39648
+ appendMessage(new TextMessage({
39649
+ content: `${query} and render data on a series bar chart`,
39650
+ role: Role.User,
39651
+ }));
39652
+ }
39653
+ };
39654
+ useEffect(() => {
39655
+ if (isEmpty && query && isFirstLoad && !(seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.agent_message) && !hasCalledRef.current) {
39656
+ hasCalledRef.current = true;
39657
+ handleRefresh();
39658
+ }
39659
+ }, [isEmpty, query, isFirstLoad, seriesBarChartState]);
39660
+ useEffect(() => {
39661
+ console.log('SeriesBarChartComponent useEffect - isEmpty:', isEmpty, 'hasMessage:', !!(seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.agent_message), 'hasWidgetData:', hasWidgetData, 'isFirstLoad:', isFirstLoad);
39662
+ if (isEmpty && startLoadingTimeout && !(seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.agent_message)) {
39663
+ console.log('Starting loading timeout from SeriesBarChartComponent useEffect');
39664
+ startLoadingTimeout();
39665
+ }
39666
+ else if (!isEmpty && clearLoadingTimeout) {
39667
+ clearLoadingTimeout();
39668
+ }
39669
+ }, [isEmpty, startLoadingTimeout, clearLoadingTimeout, seriesBarChartState]);
39670
+ const finalColors = useMemo(() => {
39671
+ return shuffleColors(DEFAULT_COLORS$1, series.length);
39672
+ }, [series.length]);
39673
+ if (isEmpty) {
39674
+ return createLoadingComponent$2();
39675
+ }
39676
+ const transformedData = {
39677
+ labels: labels,
39678
+ datasets: series.map((seriesItem, index) => ({
39679
+ label: seriesItem.name,
39680
+ data: seriesItem.values,
39681
+ backgroundColor: (seriesItem === null || seriesItem === void 0 ? void 0 : seriesItem.colors) || (seriesItem === null || seriesItem === void 0 ? void 0 : seriesItem.color) || finalColors[index % finalColors.length],
39682
+ })),
39683
+ };
39684
+ return (jsxRuntimeExports.jsx(SeriesChart, { orientation: orientation, title: chartTitle, data: transformedData, units: units, content: content, x_axis_title: x_axis_title, y_axis_title: y_axis_title }));
39685
+ }
39686
+ function CopilotKitSeriesBarChart$1({ widget, showHeader, styles, onResetReady, widgetBackendUrl, datasetId, widgetData, }) {
39687
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
39688
+ const orientation = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.orientation) || "vertical";
39689
+ const isFirstLoad = (_b = widget.config) === null || _b === void 0 ? void 0 : _b.isFirstLoad;
39690
+ const content = (_c = widget.config) === null || _c === void 0 ? void 0 : _c.content;
39691
+ const widget_data = (_d = widget.widget_data) === null || _d === void 0 ? void 0 : _d.series_bar_chart_data;
39692
+ console.log('widget_data===>', widget_data);
39693
+ const { threadId, setThreadId } = useCopilotContext();
39694
+ const timeoutRef = useRef(null);
39695
+ const [apiCallCount, setApiCallCount] = useState(0);
39696
+ const [hasTimeoutError, setHasTimeoutError] = useState(false);
39697
+ useEffect(() => {
39698
+ setThreadId(widget.id);
39699
+ }, [widget.id, setThreadId]);
39700
+ const { state: agentState, setState: setAgentState } = useCoAgent({
39701
+ name: (_e = widget.config) === null || _e === void 0 ? void 0 : _e.agentName,
39702
+ initialState: createInitialChartState$2(datasetId, widget_data),
39703
+ });
39704
+ const [chartState, setChartState] = useState(createInitialChartState$2(datasetId, widget_data));
39705
+ const handleLoadingTimeout = useCallback(async () => {
39706
+ var _a;
39707
+ if (!widgetBackendUrl || !widget.id || (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) || hasTimeoutError) {
39708
+ console.log('Skipping API call - conditions not met');
39709
+ return;
39710
+ }
39711
+ console.log('Loading timeout triggered for widget:', widget.id, 'API call count:', apiCallCount);
39712
+ if (apiCallCount >= 30) {
39713
+ console.log('API call limit reached for widget:', widget.id);
39714
+ setHasTimeoutError(true);
39715
+ setChartState(prevState => (Object.assign(Object.assign({}, prevState), { agent_message: "Timeout: Unable to load data after multiple attempts. Please try refreshing the widget." })));
39716
+ return;
39717
+ }
39718
+ setApiCallCount(prev => prev + 1);
39719
+ const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || "adk-construction-project-agent";
39720
+ console.log('Calling loadAgentState API for widget:', widget.id);
39721
+ const apiResponse = await loadAgentState$2(widgetBackendUrl, widget.id, agentName);
39722
+ console.log('API response received:', apiResponse);
39723
+ if (apiResponse && !(chartState === null || chartState === void 0 ? void 0 : chartState.agent_message)) {
39724
+ parseAndUpdateChartState$2(apiResponse, setChartState);
39725
+ }
39726
+ }, [widgetBackendUrl, widget.id, setChartState, (_f = widget.config) === null || _f === void 0 ? void 0 : _f.agentName, chartState, apiCallCount, hasTimeoutError]);
39727
+ const startLoadingTimeout = useCallback(() => {
39728
+ if (timeoutRef.current) {
39729
+ clearTimeout(timeoutRef.current);
39730
+ }
39731
+ console.log('Scheduling next API call in 3 seconds');
39732
+ timeoutRef.current = setTimeout(() => {
39733
+ handleLoadingTimeout();
39734
+ }, CHART_REFRESH_TIMEOUT$2);
39735
+ }, [handleLoadingTimeout]);
39736
+ const clearLoadingTimeout = useCallback(() => {
39737
+ if (timeoutRef.current) {
39738
+ clearTimeout(timeoutRef.current);
39739
+ timeoutRef.current = null;
39740
+ }
39741
+ }, []);
39742
+ useEffect(() => {
39743
+ return () => {
39744
+ if (timeoutRef.current) {
39745
+ clearTimeout(timeoutRef.current);
39746
+ }
39747
+ };
39748
+ }, []);
39749
+ const { appendMessage, reset } = useCopilotChat();
39750
+ useEffect(() => {
39751
+ if (onResetReady && reset && widget.id) {
39752
+ const wrappedReset = () => {
39753
+ reset();
39754
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId: widget.id } }));
39755
+ };
39756
+ onResetReady(widget.id, wrappedReset);
39757
+ }
39758
+ }, [reset, widget.id, onResetReady]);
39759
+ useEffect(() => {
39760
+ const handleTriggerAgent = (event) => {
39761
+ const { widgetId, query, agentType: eventAgentType, datasetId } = event.detail;
39762
+ if (widgetId === widget.id) {
39763
+ let messageContent = `${query} and render data on a series bar chart`;
39764
+ reset();
39765
+ console.log('triggering to datasetId==>', datasetId);
39766
+ setChartState(createInitialChartState$2(datasetId));
39767
+ setAgentState(createInitialChartState$2(datasetId));
39768
+ setApiCallCount(0);
39769
+ setHasTimeoutError(false);
39770
+ appendMessage(new TextMessage({
39771
+ content: messageContent,
39772
+ role: Role.User,
39773
+ }));
39774
+ // Start polling for chart data
39775
+ startLoadingTimeout();
39776
+ }
39777
+ };
39778
+ const handleClearChartState = (event) => {
39779
+ const { widgetId } = event.detail;
39780
+ if (widgetId === widget.id) {
39781
+ setChartState(createInitialChartState$2(datasetId));
39782
+ setAgentState(createInitialChartState$2(datasetId));
39783
+ setApiCallCount(0);
39784
+ setHasTimeoutError(false);
39785
+ }
39786
+ };
39787
+ window.addEventListener('triggerAgent', handleTriggerAgent);
39788
+ window.addEventListener('clearChartState', handleClearChartState);
39789
+ return () => {
39790
+ window.removeEventListener('triggerAgent', handleTriggerAgent);
39791
+ window.removeEventListener('clearChartState', handleClearChartState);
39792
+ };
39793
+ }, [widget.id, appendMessage, setChartState, startLoadingTimeout]);
39794
+ return (jsxRuntimeExports.jsxs("div", { className: cn("flex flex-col h-full"), children: [showHeader && (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between pb-2 border-b", children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(Bot, { className: "h-4 w-4" }), jsxRuntimeExports.jsx("h3", { className: "text-sm font-medium", children: widget.title })] }) })), jsxRuntimeExports.jsx("div", { className: "flex-1 h-full", children: (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) &&
39795
+ (!((_j = (_h = (_g = chartState.series_bar_chart_data) === null || _g === void 0 ? void 0 : _g.data) === null || _h === void 0 ? void 0 : _h.labels) === null || _j === void 0 ? void 0 : _j.length) || !((_m = (_l = (_k = chartState.series_bar_chart_data) === null || _k === void 0 ? void 0 : _k.data) === null || _l === void 0 ? void 0 : _l.series) === null || _m === void 0 ? void 0 : _m.length))
39796
+ ? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full p-4", children: jsxRuntimeExports.jsx("div", { className: "text-center max-w-md", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-700", children: chartState.agent_message }) }) })) : (jsxRuntimeExports.jsx(SeriesBarChartComponent$1, { orientation: orientation, seriesBarChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_o = widget.config) === null || _o === void 0 ? void 0 : _o.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout, hasWidgetData: !!(((_q = (_p = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _p === void 0 ? void 0 : _p.labels) === null || _q === void 0 ? void 0 : _q.length) && ((_s = (_r = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _r === void 0 ? void 0 : _r.series) === null || _s === void 0 ? void 0 : _s.length)) })) })] }));
39797
+ }
39798
+ function SeriesBarChartWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, widgetData, }) {
39799
+ var _a, _b;
39800
+ const styles = getStyleValues$2((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
39801
+ const getRuntimeUrl = () => {
39802
+ var _a;
39803
+ const baseUrl = widgetBackendUrl || '';
39804
+ const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || 'default-agent';
39805
+ return `${baseUrl}/api/copilot/${agentName}`;
39806
+ };
39807
+ return (jsxRuntimeExports.jsx(CopilotKit, { runtimeUrl: getRuntimeUrl(), showDevConsole: false, agent: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.agentName) || "widget_assistant", children: jsxRuntimeExports.jsx(CopilotKitSeriesBarChart$1, { widget: widget, showHeader: showHeader, styles: styles, onResetReady: onResetReady, widgetBackendUrl: widgetBackendUrl, datasetId: datasetId }) }));
39808
+ }
39809
+
39810
+ const CHART_REFRESH_TIMEOUT$1 = 3000;
39811
+ const DEFAULT_COLORS = ["#E4DCB8", "#DAC46C", "#808080", "#582809", "#A3ADD0", "#398E6F", "#AF123D", "#8C99C4", "#5290AC", "#601B07", "#50649D", "#B4A8A0", "#6F2587"];
39812
+ const clearChat$1 = async (widgetBackendUrl, widgetId) => {
39813
+ if (!widgetBackendUrl || !widgetId)
39814
+ return;
39815
+ console.log('clearChat called for widgetId:', widgetId);
39816
+ try {
39817
+ await fetch(`${widgetBackendUrl}/api/clear-chat`, {
39818
+ method: 'POST',
39819
+ headers: {
39820
+ 'Content-Type': 'application/json',
39821
+ },
39822
+ body: JSON.stringify({
39823
+ session_id: widgetId,
39824
+ delete_state: true
39825
+ }),
39826
+ });
39827
+ console.log('Dispatching clearChartState event from clearChat for widgetId:', widgetId);
39828
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
39829
+ }
39830
+ catch (error) {
39831
+ console.error('Failed to clear chat:', error);
39832
+ }
39833
+ };
39834
+ const createLoadingComponent$1 = (message = "Loading chart data...") => (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [jsxRuntimeExports.jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-800" }), jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: message })] }) }));
39835
+ const createInitialChartState$1 = (datasetId, seriesBarChartState) => {
39836
+ return {
39837
+ series_bar_chart_data: {
39838
+ title: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.title) || "",
39839
+ type: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.type) || "series_bar",
39840
+ chart_type: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.chart_type) || "financial",
39841
+ x_axis_title: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.x_axis_title) || "",
39842
+ y_axis_title: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.y_axis_title) || "",
39843
+ orientation: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.orientation) || "vertical",
39844
+ units: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.units) || "",
39845
+ data: {
39846
+ labels: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.labels) || [],
39847
+ series: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.series) || [],
39848
+ total: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.total) || 0,
39849
+ average: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.data.average) || 0
39850
+ },
39851
+ metadata: {
39852
+ categories: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.categories) || 0,
39853
+ series_count: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.series_count) || 0,
39854
+ highest_category: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.highest_category) || "",
39855
+ highest_value: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.highest_value) || 0,
39856
+ highest_series: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.highest_series) || "",
39857
+ lowest_category: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.lowest_category) || "",
39858
+ lowest_value: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.lowest_value) || 0,
39859
+ lowest_series: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.lowest_series) || "",
39860
+ range: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.range) || 0,
39861
+ series_totals: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.series_totals) || {},
39862
+ series_averages: (seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.metadata.series_averages) || {}
39863
+ }
39864
+ },
39865
+ dataset_id: datasetId || "home_generation_dataset"
39866
+ };
39867
+ };
39868
+ const loadAgentState$1 = async (widgetBackendUrl, threadId, agentName) => {
39869
+ try {
39870
+ const response = await fetch(`${widgetBackendUrl}/api/copilot/${agentName}`, {
39871
+ method: 'POST',
39872
+ headers: {
39873
+ 'Content-Type': 'application/json',
39874
+ },
39875
+ body: JSON.stringify({
39876
+ "operationName": "loadAgentState",
39877
+ "query": "query loadAgentState($data: LoadAgentStateInput!) {\n loadAgentState(data: $data) {\n threadId\n threadExists\n state\n messages\n __typename\n }\n}",
39878
+ "variables": {
39879
+ "data": {
39880
+ "agentName": agentName,
39881
+ "threadId": threadId
39882
+ }
39883
+ }
39884
+ }),
39885
+ });
39886
+ if (!response.ok) {
39887
+ throw new Error(`HTTP error! status: ${response.status}`);
39888
+ }
39889
+ const result = await response.json();
39890
+ return result;
39891
+ }
39892
+ catch (error) {
39893
+ console.error('Failed to load agent state:', error);
39894
+ return null;
39895
+ }
39896
+ };
39897
+ const parseAndUpdateChartState$1 = (apiResponse, setChartState) => {
39898
+ var _a, _b;
39899
+ try {
39900
+ if ((_b = (_a = apiResponse === null || apiResponse === void 0 ? void 0 : apiResponse.data) === null || _a === void 0 ? void 0 : _a.loadAgentState) === null || _b === void 0 ? void 0 : _b.state) {
39901
+ const stateString = apiResponse.data.loadAgentState.state;
39902
+ const parsedState = JSON.parse(stateString);
39903
+ if (parsedState.state) {
39904
+ const chartData = parsedState.state;
39905
+ setChartState((prevState) => {
39906
+ const newChartState = Object.assign({}, prevState);
39907
+ if (chartData.series_bar_chart_data) {
39908
+ newChartState.series_bar_chart_data = chartData.series_bar_chart_data;
39909
+ }
39910
+ if (chartData.agent_message) {
39911
+ newChartState.agent_message = chartData.agent_message;
39912
+ }
39913
+ return newChartState;
39914
+ });
39915
+ }
39916
+ }
39917
+ }
39918
+ catch (error) {
39919
+ console.error('Failed to parse and update chart state:', error);
39920
+ }
39921
+ };
39922
+ const getStyleValues$1 = (styles = {}) => {
39923
+ const borderRadiusMap = {
39924
+ none: "0px",
39925
+ rounded: "0.375rem",
39926
+ large: "0.5rem",
39927
+ "extra-large": "0.75rem",
39928
+ };
39929
+ const paddingMap = {
39930
+ small: "0.5rem",
39931
+ medium: "1rem",
39932
+ large: "1.5rem",
39933
+ "extra-large": "2rem",
39934
+ };
39935
+ const alignment = styles.alignment || "left";
39936
+ return {
39937
+ backgroundColor: styles.backgroundColor || "#ffffff",
39938
+ borderRadius: borderRadiusMap[styles.borderRadius || "rounded"],
39939
+ padding: paddingMap[styles.padding || "medium"],
39940
+ color: styles.textColor || "#000000",
39941
+ fontSize: styles.fontSize || "14px",
39942
+ textAlign: alignment,
39943
+ };
39944
+ };
39945
+ function SeriesBarChartComponent({ orientation, seriesBarChartState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content, hasWidgetData }) {
39946
+ var _a, _b, _c, _d, _e, _f, _g, _h;
39947
+ const hasCalledRef = useRef(false);
39948
+ const labels = ((_b = (_a = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.labels) || [];
39949
+ const series = ((_d = (_c = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.series) || [];
39950
+ const chartTitle = ((_e = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _e === void 0 ? void 0 : _e.title) || "";
39951
+ const units = ((_f = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _f === void 0 ? void 0 : _f.units) || "";
39952
+ const x_axis_title = ((_g = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _g === void 0 ? void 0 : _g.x_axis_title) || "";
39953
+ const y_axis_title = ((_h = seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.series_bar_chart_data) === null || _h === void 0 ? void 0 : _h.y_axis_title) || "";
39954
+ const isEmpty = labels.length === 0 || series.length === 0;
39955
+ const handleRefresh = async () => {
39956
+ if (query) {
39957
+ await clearChat$1(widgetBackendUrl, widgetId);
39958
+ console.log('Dispatching clearChartState event for widgetId:', widgetId);
39959
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
39960
+ appendMessage(new TextMessage({
39961
+ content: `${query} and render data on a series bar chart`,
39962
+ role: Role.User,
39963
+ }));
39964
+ }
39965
+ };
39966
+ useEffect(() => {
39967
+ if (isEmpty && query && isFirstLoad && !(seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.agent_message) && !hasCalledRef.current) {
39968
+ hasCalledRef.current = true;
39969
+ handleRefresh();
39970
+ }
39971
+ }, [isEmpty, query, isFirstLoad, seriesBarChartState]);
39972
+ useEffect(() => {
39973
+ console.log('SeriesBarChartComponent useEffect - isEmpty:', isEmpty, 'hasMessage:', !!(seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.agent_message), 'hasWidgetData:', hasWidgetData, 'isFirstLoad:', isFirstLoad);
39974
+ if (isEmpty && startLoadingTimeout && !(seriesBarChartState === null || seriesBarChartState === void 0 ? void 0 : seriesBarChartState.agent_message)) {
39975
+ console.log('Starting loading timeout from SeriesBarChartComponent useEffect');
39976
+ startLoadingTimeout();
39977
+ }
39978
+ else if (!isEmpty && clearLoadingTimeout) {
39979
+ clearLoadingTimeout();
39980
+ }
39981
+ }, [isEmpty, startLoadingTimeout, clearLoadingTimeout, seriesBarChartState]);
39982
+ const finalColors = useMemo(() => {
39983
+ return shuffleColors(DEFAULT_COLORS, series.length);
39984
+ }, [series.length]);
39985
+ if (isEmpty) {
39986
+ return createLoadingComponent$1();
39987
+ }
39988
+ const transformedData = {
39989
+ labels: labels,
39990
+ datasets: series.map((seriesItem, index) => ({
39991
+ label: seriesItem.name,
39992
+ data: seriesItem.values,
39993
+ backgroundColor: (seriesItem === null || seriesItem === void 0 ? void 0 : seriesItem.colors) || (seriesItem === null || seriesItem === void 0 ? void 0 : seriesItem.color) || finalColors[index % finalColors.length],
39994
+ })),
39995
+ };
39996
+ return (jsxRuntimeExports.jsx(SeriesLineChart, { orientation: orientation, title: chartTitle, data: transformedData, units: units, content: content, x_axis_title: x_axis_title, y_axis_title: y_axis_title }));
39997
+ }
39998
+ function CopilotKitSeriesBarChart({ widget, showHeader, styles, onResetReady, widgetBackendUrl, datasetId, widgetData, }) {
39999
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s;
40000
+ const orientation = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.orientation) || "vertical";
40001
+ const isFirstLoad = (_b = widget.config) === null || _b === void 0 ? void 0 : _b.isFirstLoad;
40002
+ const content = (_c = widget.config) === null || _c === void 0 ? void 0 : _c.content;
40003
+ const widget_data = (_d = widget.widget_data) === null || _d === void 0 ? void 0 : _d.series_bar_chart_data;
40004
+ console.log('widget_data===>', widget_data);
40005
+ const { threadId, setThreadId } = useCopilotContext();
40006
+ const timeoutRef = useRef(null);
40007
+ const [apiCallCount, setApiCallCount] = useState(0);
40008
+ const [hasTimeoutError, setHasTimeoutError] = useState(false);
40009
+ useEffect(() => {
40010
+ setThreadId(widget.id);
40011
+ }, [widget.id, setThreadId]);
40012
+ const { state: agentState, setState: setAgentState } = useCoAgent({
40013
+ name: (_e = widget.config) === null || _e === void 0 ? void 0 : _e.agentName,
40014
+ initialState: createInitialChartState$1(datasetId, widget_data),
40015
+ });
40016
+ const [chartState, setChartState] = useState(createInitialChartState$1(datasetId, widget_data));
40017
+ const handleLoadingTimeout = useCallback(async () => {
40018
+ var _a;
40019
+ if (!widgetBackendUrl || !widget.id || (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) || hasTimeoutError) {
40020
+ console.log('Skipping API call - conditions not met');
40021
+ return;
40022
+ }
40023
+ console.log('Loading timeout triggered for widget:', widget.id, 'API call count:', apiCallCount);
40024
+ if (apiCallCount >= 30) {
40025
+ console.log('API call limit reached for widget:', widget.id);
40026
+ setHasTimeoutError(true);
40027
+ setChartState(prevState => (Object.assign(Object.assign({}, prevState), { agent_message: "Timeout: Unable to load data after multiple attempts. Please try refreshing the widget." })));
40028
+ return;
40029
+ }
40030
+ setApiCallCount(prev => prev + 1);
40031
+ const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || "adk-construction-project-agent";
40032
+ console.log('Calling loadAgentState API for widget:', widget.id);
40033
+ const apiResponse = await loadAgentState$1(widgetBackendUrl, widget.id, agentName);
40034
+ console.log('API response received:', apiResponse);
40035
+ if (apiResponse && !(chartState === null || chartState === void 0 ? void 0 : chartState.agent_message)) {
40036
+ parseAndUpdateChartState$1(apiResponse, setChartState);
40037
+ }
40038
+ }, [widgetBackendUrl, widget.id, setChartState, (_f = widget.config) === null || _f === void 0 ? void 0 : _f.agentName, chartState, apiCallCount, hasTimeoutError]);
40039
+ const startLoadingTimeout = useCallback(() => {
40040
+ if (timeoutRef.current) {
40041
+ clearTimeout(timeoutRef.current);
40042
+ }
40043
+ console.log('Scheduling next API call in 3 seconds');
40044
+ timeoutRef.current = setTimeout(() => {
40045
+ handleLoadingTimeout();
40046
+ }, CHART_REFRESH_TIMEOUT$1);
40047
+ }, [handleLoadingTimeout]);
40048
+ const clearLoadingTimeout = useCallback(() => {
40049
+ if (timeoutRef.current) {
40050
+ clearTimeout(timeoutRef.current);
40051
+ timeoutRef.current = null;
40052
+ }
40053
+ }, []);
40054
+ useEffect(() => {
40055
+ return () => {
40056
+ if (timeoutRef.current) {
40057
+ clearTimeout(timeoutRef.current);
40058
+ }
40059
+ };
40060
+ }, []);
40061
+ const { appendMessage, reset } = useCopilotChat();
40062
+ useEffect(() => {
40063
+ if (onResetReady && reset && widget.id) {
40064
+ const wrappedReset = () => {
40065
+ reset();
40066
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId: widget.id } }));
40067
+ };
40068
+ onResetReady(widget.id, wrappedReset);
40069
+ }
40070
+ }, [reset, widget.id, onResetReady]);
40071
+ useEffect(() => {
40072
+ const handleTriggerAgent = (event) => {
40073
+ const { widgetId, query, agentType: eventAgentType, datasetId } = event.detail;
40074
+ if (widgetId === widget.id) {
40075
+ let messageContent = `${query} and render data on a series bar chart`;
40076
+ reset();
40077
+ console.log('triggering to datasetId==>', datasetId);
40078
+ setChartState(createInitialChartState$1(datasetId));
40079
+ setAgentState(createInitialChartState$1(datasetId));
40080
+ setApiCallCount(0);
40081
+ setHasTimeoutError(false);
40082
+ appendMessage(new TextMessage({
40083
+ content: messageContent,
40084
+ role: Role.User,
40085
+ }));
40086
+ // Start polling for chart data
40087
+ startLoadingTimeout();
40088
+ }
40089
+ };
40090
+ const handleClearChartState = (event) => {
40091
+ const { widgetId } = event.detail;
40092
+ if (widgetId === widget.id) {
40093
+ setChartState(createInitialChartState$1(datasetId));
40094
+ setAgentState(createInitialChartState$1(datasetId));
40095
+ setApiCallCount(0);
40096
+ setHasTimeoutError(false);
40097
+ }
40098
+ };
40099
+ window.addEventListener('triggerAgent', handleTriggerAgent);
40100
+ window.addEventListener('clearChartState', handleClearChartState);
40101
+ return () => {
40102
+ window.removeEventListener('triggerAgent', handleTriggerAgent);
40103
+ window.removeEventListener('clearChartState', handleClearChartState);
40104
+ };
40105
+ }, [widget.id, appendMessage, setChartState, startLoadingTimeout]);
40106
+ return (jsxRuntimeExports.jsxs("div", { className: cn("flex flex-col h-full"), children: [showHeader && (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between pb-2 border-b", children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(Bot, { className: "h-4 w-4" }), jsxRuntimeExports.jsx("h3", { className: "text-sm font-medium", children: widget.title })] }) })), jsxRuntimeExports.jsx("div", { className: "flex-1 h-full", children: (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) &&
40107
+ (!((_j = (_h = (_g = chartState.series_bar_chart_data) === null || _g === void 0 ? void 0 : _g.data) === null || _h === void 0 ? void 0 : _h.labels) === null || _j === void 0 ? void 0 : _j.length) || !((_m = (_l = (_k = chartState.series_bar_chart_data) === null || _k === void 0 ? void 0 : _k.data) === null || _l === void 0 ? void 0 : _l.series) === null || _m === void 0 ? void 0 : _m.length))
40108
+ ? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full p-4", children: jsxRuntimeExports.jsx("div", { className: "text-center max-w-md", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-700", children: chartState.agent_message }) }) })) : (jsxRuntimeExports.jsx(SeriesBarChartComponent, { orientation: orientation, seriesBarChartState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_o = widget.config) === null || _o === void 0 ? void 0 : _o.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout, hasWidgetData: !!(((_q = (_p = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _p === void 0 ? void 0 : _p.labels) === null || _q === void 0 ? void 0 : _q.length) && ((_s = (_r = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _r === void 0 ? void 0 : _r.series) === null || _s === void 0 ? void 0 : _s.length)) })) })] }));
40109
+ }
40110
+ function SeriesLineChartWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, widgetData, }) {
40111
+ var _a, _b;
40112
+ const styles = getStyleValues$1((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
40113
+ const getRuntimeUrl = () => {
40114
+ var _a;
40115
+ const baseUrl = widgetBackendUrl || '';
40116
+ const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || 'default-agent';
40117
+ return `${baseUrl}/api/copilot/${agentName}`;
40118
+ };
40119
+ return (jsxRuntimeExports.jsx(CopilotKit, { runtimeUrl: getRuntimeUrl(), showDevConsole: false, agent: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.agentName) || "widget_assistant", children: jsxRuntimeExports.jsx(CopilotKitSeriesBarChart, { widget: widget, showHeader: showHeader, styles: styles, onResetReady: onResetReady, widgetBackendUrl: widgetBackendUrl, datasetId: datasetId }) }));
40120
+ }
40121
+
40122
+ const CHART_REFRESH_TIMEOUT = 3000;
40123
+ const clearChat = async (widgetBackendUrl, widgetId) => {
40124
+ if (!widgetBackendUrl || !widgetId)
40125
+ return;
40126
+ console.log('clearChat called for widgetId:', widgetId);
40127
+ try {
40128
+ await fetch(`${widgetBackendUrl}/api/clear-chat`, {
40129
+ method: 'POST',
40130
+ headers: {
40131
+ 'Content-Type': 'application/json',
40132
+ },
40133
+ body: JSON.stringify({
40134
+ session_id: widgetId,
40135
+ delete_state: true
40136
+ }),
40137
+ });
40138
+ console.log('Dispatching clearChartState event from clearChat for widgetId:', widgetId);
40139
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
40140
+ }
40141
+ catch (error) {
40142
+ console.error('Failed to clear chat:', error);
40143
+ }
40144
+ };
40145
+ const createLoadingComponent = (message = "Loading table data...") => (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full", children: jsxRuntimeExports.jsxs("div", { className: "flex flex-col items-center gap-2", children: [jsxRuntimeExports.jsx(RefreshCw, { className: "h-6 w-6 animate-spin text-gray-800" }), jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-500", children: message })] }) }));
40146
+ const createInitialChartState = (datasetId, dataGridState) => {
40147
+ return {
40148
+ matrix_grid_data: {
40149
+ title: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.title) || "",
40150
+ type: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.type) || "data_grid",
40151
+ grid_type: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.grid_type) || "",
40152
+ grouped: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.grouped) || false,
40153
+ data: {
40154
+ headers: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.data.headers) || [],
40155
+ units: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.data.units) || [],
40156
+ rows: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.data.rows) || [],
40157
+ row_count: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.data.row_count) || 0,
40158
+ column_count: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.data.column_count) || 0
40159
+ },
40160
+ metadata: {
40161
+ total_rows: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.metadata.total_rows) || 0,
40162
+ total_columns: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.metadata.total_columns) || 0,
40163
+ numeric_columns: (dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.metadata.numeric_columns) || []
40164
+ }
40165
+ },
40166
+ dataset_id: datasetId || "home_generation_dataset"
40167
+ };
40168
+ };
40169
+ const loadAgentState = async (widgetBackendUrl, threadId, agentName) => {
40170
+ try {
40171
+ const response = await fetch(`${widgetBackendUrl}/api/copilot/${agentName}`, {
40172
+ method: 'POST',
40173
+ headers: {
40174
+ 'Content-Type': 'application/json',
40175
+ },
40176
+ body: JSON.stringify({
40177
+ "operationName": "loadAgentState",
40178
+ "query": "query loadAgentState($data: LoadAgentStateInput!) {\n loadAgentState(data: $data) {\n threadId\n threadExists\n state\n messages\n __typename\n }\n}",
40179
+ "variables": {
40180
+ "data": {
40181
+ "agentName": agentName,
40182
+ "threadId": threadId
40183
+ }
40184
+ }
40185
+ }),
40186
+ });
40187
+ if (!response.ok) {
40188
+ throw new Error(`HTTP error! status: ${response.status}`);
40189
+ }
40190
+ const result = await response.json();
40191
+ return result;
40192
+ }
40193
+ catch (error) {
40194
+ console.error('Failed to load agent state:', error);
40195
+ return null;
40196
+ }
40197
+ };
40198
+ const parseAndUpdateChartState = (apiResponse, setChartState) => {
40199
+ var _a, _b;
40200
+ try {
40201
+ if ((_b = (_a = apiResponse === null || apiResponse === void 0 ? void 0 : apiResponse.data) === null || _a === void 0 ? void 0 : _a.loadAgentState) === null || _b === void 0 ? void 0 : _b.state) {
40202
+ const stateString = apiResponse.data.loadAgentState.state;
40203
+ const parsedState = JSON.parse(stateString);
40204
+ if (parsedState.state) {
40205
+ const chartData = parsedState.state;
40206
+ setChartState((prevState) => {
40207
+ const newChartState = Object.assign({}, prevState);
40208
+ if (chartData.matrix_grid_data) {
40209
+ newChartState.matrix_grid_data = chartData.matrix_grid_data;
40210
+ }
40211
+ if (chartData.agent_message) {
40212
+ newChartState.agent_message = chartData.agent_message;
40213
+ }
40214
+ return newChartState;
40215
+ });
40216
+ }
40217
+ }
40218
+ }
40219
+ catch (error) {
40220
+ console.error('Failed to parse and update chart state:', error);
40221
+ }
40222
+ };
40223
+ const getStyleValues = (styles = {}) => {
40224
+ const borderRadiusMap = {
40225
+ none: "0px",
40226
+ rounded: "0.375rem",
40227
+ large: "0.5rem",
40228
+ "extra-large": "0.75rem",
40229
+ };
40230
+ const paddingMap = {
40231
+ small: "0.5rem",
40232
+ medium: "1rem",
40233
+ large: "1.5rem",
40234
+ "extra-large": "2rem",
40235
+ };
40236
+ const alignment = styles.alignment || "left";
40237
+ return {
40238
+ backgroundColor: styles.backgroundColor || "#ffffff",
40239
+ borderRadius: borderRadiusMap[styles.borderRadius || "rounded"],
40240
+ padding: paddingMap[styles.padding || "medium"],
40241
+ color: styles.textColor || "#000000",
40242
+ fontSize: styles.fontSize || "14px",
40243
+ textAlign: alignment,
40244
+ };
40245
+ };
40246
+ function DataGridComponent({ dataGridState, styles, appendMessage, query, isFirstLoad, widgetBackendUrl, widgetId, startLoadingTimeout, clearLoadingTimeout, content, hasWidgetData }) {
40247
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j;
40248
+ const hasCalledRef = useRef(false);
40249
+ const columns = ((_b = (_a = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _a === void 0 ? void 0 : _a.data) === null || _b === void 0 ? void 0 : _b.headers) || [];
40250
+ const rows = ((_d = (_c = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _c === void 0 ? void 0 : _c.data) === null || _d === void 0 ? void 0 : _d.rows) || [];
40251
+ const gridTitle = ((_e = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _e === void 0 ? void 0 : _e.title) || "";
40252
+ const units = ((_g = (_f = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.units) || [];
40253
+ const isEmpty = columns.length === 0 || rows.length === 0;
40254
+ const handleRefresh = async () => {
40255
+ if (query) {
40256
+ await clearChat(widgetBackendUrl, widgetId);
40257
+ console.log('Dispatching clearChartState event for widgetId:', widgetId);
40258
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId } }));
40259
+ appendMessage(new TextMessage({
40260
+ content: `${query} and render data in a data grid table`,
40261
+ role: Role.User,
40262
+ }));
40263
+ }
40264
+ };
40265
+ useEffect(() => {
40266
+ if (isEmpty && query && isFirstLoad && !(dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.agent_message) && !hasCalledRef.current) {
40267
+ hasCalledRef.current = true;
40268
+ handleRefresh();
40269
+ }
40270
+ }, [isEmpty, query, isFirstLoad, dataGridState]);
40271
+ useEffect(() => {
40272
+ console.log('DataGridComponent useEffect - isEmpty:', isEmpty, 'hasMessage:', !!(dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.agent_message), 'hasWidgetData:', hasWidgetData, 'isFirstLoad:', isFirstLoad);
40273
+ if (isEmpty && startLoadingTimeout && !(dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.agent_message)) {
40274
+ console.log('Starting loading timeout from DataGridComponent useEffect');
40275
+ startLoadingTimeout();
40276
+ }
40277
+ else if (!isEmpty && clearLoadingTimeout) {
40278
+ clearLoadingTimeout();
40279
+ }
40280
+ }, [isEmpty, startLoadingTimeout, clearLoadingTimeout, dataGridState]);
40281
+ if (isEmpty) {
40282
+ return createLoadingComponent();
40283
+ }
40284
+ const transformedData = {
40285
+ columns: columns,
40286
+ units: units,
40287
+ rows: rows,
40288
+ grouped: ((_h = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _h === void 0 ? void 0 : _h.grouped) || false,
40289
+ grouping: (_j = dataGridState === null || dataGridState === void 0 ? void 0 : dataGridState.matrix_grid_data) === null || _j === void 0 ? void 0 : _j.grouping
40290
+ };
40291
+ return (jsxRuntimeExports.jsx(DataGrid, { title: gridTitle, data: transformedData, className: "" }));
40292
+ }
40293
+ function CopilotKitDataGrid({ widget, showHeader, styles, onResetReady, widgetBackendUrl, datasetId, widgetData, }) {
40294
+ var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r;
40295
+ const isFirstLoad = (_a = widget.config) === null || _a === void 0 ? void 0 : _a.isFirstLoad;
40296
+ const content = (_b = widget.config) === null || _b === void 0 ? void 0 : _b.content;
40297
+ const widget_data = (_c = widget.widget_data) === null || _c === void 0 ? void 0 : _c.matrix_grid_data;
40298
+ console.log('widget_data===>', widget_data);
40299
+ const { threadId, setThreadId } = useCopilotContext();
40300
+ const timeoutRef = useRef(null);
40301
+ const [apiCallCount, setApiCallCount] = useState(0);
40302
+ const [hasTimeoutError, setHasTimeoutError] = useState(false);
40303
+ useEffect(() => {
40304
+ setThreadId(widget.id);
40305
+ }, [widget.id, setThreadId]);
40306
+ const { state: agentState, setState: setAgentState } = useCoAgent({
40307
+ name: (_d = widget.config) === null || _d === void 0 ? void 0 : _d.agentName,
40308
+ initialState: createInitialChartState(datasetId, widget_data),
40309
+ });
40310
+ const [chartState, setChartState] = useState(createInitialChartState(datasetId, widget_data));
40311
+ const handleLoadingTimeout = useCallback(async () => {
40312
+ var _a;
40313
+ if (!widgetBackendUrl || !widget.id || (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) || hasTimeoutError) {
40314
+ console.log('Skipping API call - conditions not met');
40315
+ return;
40316
+ }
40317
+ console.log('Loading timeout triggered for widget:', widget.id, 'API call count:', apiCallCount);
40318
+ if (apiCallCount >= 30) {
40319
+ console.log('API call limit reached for widget:', widget.id);
40320
+ setHasTimeoutError(true);
40321
+ setChartState(prevState => (Object.assign(Object.assign({}, prevState), { agent_message: "Timeout: Unable to load data after multiple attempts. Please try refreshing the widget." })));
40322
+ return;
40323
+ }
40324
+ setApiCallCount(prev => prev + 1);
40325
+ const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || "adk-construction-project-agent";
40326
+ console.log('Calling loadAgentState API for widget:', widget.id);
40327
+ const apiResponse = await loadAgentState(widgetBackendUrl, widget.id, agentName);
40328
+ console.log('API response received:', apiResponse);
40329
+ if (apiResponse && !(chartState === null || chartState === void 0 ? void 0 : chartState.agent_message)) {
40330
+ parseAndUpdateChartState(apiResponse, setChartState);
40331
+ }
40332
+ }, [widgetBackendUrl, widget.id, setChartState, (_e = widget.config) === null || _e === void 0 ? void 0 : _e.agentName, chartState, apiCallCount, hasTimeoutError]);
40333
+ const startLoadingTimeout = useCallback(() => {
40334
+ if (timeoutRef.current) {
40335
+ clearTimeout(timeoutRef.current);
40336
+ }
40337
+ console.log('Scheduling next API call in 3 seconds');
40338
+ timeoutRef.current = setTimeout(() => {
40339
+ handleLoadingTimeout();
40340
+ }, CHART_REFRESH_TIMEOUT);
40341
+ }, [handleLoadingTimeout]);
40342
+ const clearLoadingTimeout = useCallback(() => {
40343
+ if (timeoutRef.current) {
40344
+ clearTimeout(timeoutRef.current);
40345
+ timeoutRef.current = null;
40346
+ }
40347
+ }, []);
40348
+ useEffect(() => {
40349
+ return () => {
40350
+ if (timeoutRef.current) {
40351
+ clearTimeout(timeoutRef.current);
40352
+ }
40353
+ };
40354
+ }, []);
40355
+ const { appendMessage, reset } = useCopilotChat();
40356
+ useEffect(() => {
40357
+ if (onResetReady && reset && widget.id) {
40358
+ const wrappedReset = () => {
40359
+ reset();
40360
+ window.dispatchEvent(new CustomEvent('clearChartState', { detail: { widgetId: widget.id } }));
40361
+ };
40362
+ onResetReady(widget.id, wrappedReset);
40363
+ }
40364
+ }, [reset, widget.id, onResetReady]);
40365
+ useEffect(() => {
40366
+ const handleTriggerAgent = (event) => {
40367
+ const { widgetId, query, agentType: eventAgentType, datasetId } = event.detail;
40368
+ reset();
40369
+ if (widgetId === widget.id) {
40370
+ let messageContent = `${query} and render data in a data grid table`;
40371
+ console.log('triggering to datasetId==>', datasetId);
40372
+ setChartState(createInitialChartState(datasetId));
40373
+ setAgentState(createInitialChartState(datasetId));
40374
+ setApiCallCount(0);
40375
+ setHasTimeoutError(false);
40376
+ appendMessage(new TextMessage({
40377
+ content: messageContent,
40378
+ role: Role.User,
40379
+ }));
40380
+ // Start polling for chart data
40381
+ startLoadingTimeout();
40382
+ }
40383
+ };
40384
+ const handleClearChartState = (event) => {
40385
+ const { widgetId } = event.detail;
40386
+ if (widgetId === widget.id) {
40387
+ setChartState(createInitialChartState(datasetId));
40388
+ setAgentState(createInitialChartState(datasetId));
40389
+ setApiCallCount(0);
40390
+ setHasTimeoutError(false);
40391
+ }
40392
+ };
40393
+ window.addEventListener('triggerAgent', handleTriggerAgent);
40394
+ window.addEventListener('clearChartState', handleClearChartState);
40395
+ return () => {
40396
+ window.removeEventListener('triggerAgent', handleTriggerAgent);
40397
+ window.removeEventListener('clearChartState', handleClearChartState);
40398
+ };
40399
+ }, [widget.id, appendMessage, setChartState, startLoadingTimeout]);
40400
+ return (jsxRuntimeExports.jsxs("div", { className: cn("flex flex-col h-full"), children: [showHeader && (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-between pb-2 border-b", children: jsxRuntimeExports.jsxs("div", { className: "flex items-center gap-2", children: [jsxRuntimeExports.jsx(Bot, { className: "h-4 w-4" }), jsxRuntimeExports.jsx("h3", { className: "text-sm font-medium", children: widget.title })] }) })), jsxRuntimeExports.jsx("div", { className: "flex-1 h-full", children: (chartState === null || chartState === void 0 ? void 0 : chartState.agent_message) &&
40401
+ (!((_h = (_g = (_f = chartState.matrix_grid_data) === null || _f === void 0 ? void 0 : _f.data) === null || _g === void 0 ? void 0 : _g.headers) === null || _h === void 0 ? void 0 : _h.length) || !((_l = (_k = (_j = chartState.matrix_grid_data) === null || _j === void 0 ? void 0 : _j.data) === null || _k === void 0 ? void 0 : _k.rows) === null || _l === void 0 ? void 0 : _l.length))
40402
+ ? (jsxRuntimeExports.jsx("div", { className: "flex items-center justify-center h-full p-4", children: jsxRuntimeExports.jsx("div", { className: "text-center max-w-md", children: jsxRuntimeExports.jsx("p", { className: "text-sm text-gray-700", children: chartState.agent_message }) }) })) : (jsxRuntimeExports.jsx(DataGridComponent, { dataGridState: chartState, styles: styles, appendMessage: appendMessage, content: content, query: (_m = widget.config) === null || _m === void 0 ? void 0 : _m.query, isFirstLoad: isFirstLoad, widgetBackendUrl: widgetBackendUrl, widgetId: widget.id, startLoadingTimeout: startLoadingTimeout, clearLoadingTimeout: clearLoadingTimeout, hasWidgetData: !!(((_p = (_o = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _o === void 0 ? void 0 : _o.headers) === null || _p === void 0 ? void 0 : _p.length) && ((_r = (_q = widget_data === null || widget_data === void 0 ? void 0 : widget_data.data) === null || _q === void 0 ? void 0 : _q.rows) === null || _r === void 0 ? void 0 : _r.length)) })) })] }));
40403
+ }
40404
+ function DatagridWidget({ widget, showHeader = true, widgetBackendUrl, onResetReady, widgetIds, datasetId, widgetData, }) {
40405
+ var _a, _b;
40406
+ const styles = getStyleValues((_a = widget.config) === null || _a === void 0 ? void 0 : _a.styles);
40407
+ const getRuntimeUrl = () => {
40408
+ var _a;
40409
+ const baseUrl = widgetBackendUrl || '';
40410
+ const agentName = ((_a = widget.config) === null || _a === void 0 ? void 0 : _a.agentName) || 'default-agent';
40411
+ return `${baseUrl}/api/copilot/${agentName}`;
40412
+ };
40413
+ return (jsxRuntimeExports.jsx(CopilotKit, { runtimeUrl: getRuntimeUrl(), showDevConsole: false, agent: ((_b = widget.config) === null || _b === void 0 ? void 0 : _b.agentName) || "widget_assistant", children: jsxRuntimeExports.jsx(CopilotKitDataGrid, { widget: widget, showHeader: showHeader, styles: styles, onResetReady: onResetReady, widgetBackendUrl: widgetBackendUrl, datasetId: datasetId }) }));
40414
+ }
40415
+
40416
+ function WidgetRenderer({ widget, isTemplate = false, onConfigUpdate, widgetBackendUrl, onResetReady, widgetIds, datasetId, }) {
40417
+ const handleConfigUpdate = (config) => {
40418
+ if (onConfigUpdate) {
40419
+ onConfigUpdate(widget.id, config);
40420
+ }
40421
+ };
40422
+ getWidgetStyles(widget);
40423
+ const renderWidget = () => {
40424
+ switch (widget.type) {
40425
+ // Search-related widget cases removed
40426
+ // Available widgets
40427
+ case "header":
40428
+ return jsxRuntimeExports.jsx(HeaderWidget, { widget: widget, showHeader: false });
40429
+ case "footer":
40430
+ return jsxRuntimeExports.jsx(FooterWidget, { widget: widget, showHeader: false });
40431
+ case "text":
40432
+ return jsxRuntimeExports.jsx(TextWidget, { widget: widget, showHeader: false });
40433
+ case "spacer":
40434
+ return jsxRuntimeExports.jsx(SpacerWidget, { widget: widget, showHeader: false });
40435
+ case "divider":
40436
+ return jsxRuntimeExports.jsx(DividerWidget, { widget: widget, showHeader: false });
40437
+ case "facet":
40438
+ return (jsxRuntimeExports.jsx(FacetWidget, { widget: widget, showHeader: false, onConfigUpdate: handleConfigUpdate }));
40439
+ case "chatbot":
40440
+ return jsxRuntimeExports.jsx(ChatbotWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId });
40441
+ case "agent":
40442
+ return widget.config.agentType === "Pie Chart Agent" ? (jsxRuntimeExports.jsx(PieChartWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId })) : widget.config.agentType === "Series Bar Chart Agent" ? (jsxRuntimeExports.jsx(SeriesBarChartWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId })) : widget.config.agentType === "Series Line Chart Agent" ? (jsxRuntimeExports.jsx(SeriesLineChartWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId })) : widget.config.agentType === "Data Grid Agent" ? (jsxRuntimeExports.jsx(DatagridWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId })) : (jsxRuntimeExports.jsx(AgentWidget, { widget: widget, showHeader: false, widgetBackendUrl: widgetBackendUrl, onResetReady: onResetReady, widgetIds: widgetIds, datasetId: datasetId }));
39174
40443
  default:
39175
40444
  return (jsxRuntimeExports.jsxs("div", { className: "text-muted-foreground", children: ["Unknown widget type: ", widget.type] }));
39176
40445
  }