@finos/legend-lego 2.0.195 → 2.0.196
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.
- package/lib/index.css +2 -2
- package/lib/index.css.map +1 -1
- package/lib/legend-ai/LegendAITypes.d.ts +33 -0
- package/lib/legend-ai/LegendAITypes.d.ts.map +1 -1
- package/lib/legend-ai/LegendAITypes.js +39 -1
- package/lib/legend-ai/LegendAITypes.js.map +1 -1
- package/lib/legend-ai/LegendAI_LegendApplicationPlugin_Extension.d.ts +96 -1
- package/lib/legend-ai/LegendAI_LegendApplicationPlugin_Extension.d.ts.map +1 -1
- package/lib/legend-ai/LegendAI_LegendApplicationPlugin_Extension.js +56 -0
- package/lib/legend-ai/LegendAI_LegendApplicationPlugin_Extension.js.map +1 -1
- package/lib/legend-ai/__test-utils__/LegendAITestUtils.d.ts.map +1 -1
- package/lib/legend-ai/__test-utils__/LegendAITestUtils.js +6 -0
- package/lib/legend-ai/__test-utils__/LegendAITestUtils.js.map +1 -1
- package/lib/legend-ai/components/LegendAIAnalysisPanel.d.ts +24 -0
- package/lib/legend-ai/components/LegendAIAnalysisPanel.d.ts.map +1 -0
- package/lib/legend-ai/components/LegendAIAnalysisPanel.js +35 -0
- package/lib/legend-ai/components/LegendAIAnalysisPanel.js.map +1 -0
- package/lib/legend-ai/components/LegendAIAnalysisUtils.d.ts +23 -0
- package/lib/legend-ai/components/LegendAIAnalysisUtils.d.ts.map +1 -0
- package/lib/legend-ai/components/LegendAIAnalysisUtils.js +168 -0
- package/lib/legend-ai/components/LegendAIAnalysisUtils.js.map +1 -0
- package/lib/legend-ai/components/LegendAICharts.d.ts +25 -0
- package/lib/legend-ai/components/LegendAICharts.d.ts.map +1 -0
- package/lib/legend-ai/components/LegendAICharts.js +70 -0
- package/lib/legend-ai/components/LegendAICharts.js.map +1 -0
- package/lib/legend-ai/components/LegendAIChat.d.ts +2 -1
- package/lib/legend-ai/components/LegendAIChat.d.ts.map +1 -1
- package/lib/legend-ai/components/LegendAIChat.js +14 -10
- package/lib/legend-ai/components/LegendAIChat.js.map +1 -1
- package/lib/legend-ai/index.d.ts +5 -2
- package/lib/legend-ai/index.d.ts.map +1 -1
- package/lib/legend-ai/index.js +5 -2
- package/lib/legend-ai/index.js.map +1 -1
- package/lib/legend-ai/stores/LegendAIChatState.d.ts +12 -5
- package/lib/legend-ai/stores/LegendAIChatState.d.ts.map +1 -1
- package/lib/legend-ai/stores/LegendAIChatState.js +604 -69
- package/lib/legend-ai/stores/LegendAIChatState.js.map +1 -1
- package/package.json +5 -5
- package/src/legend-ai/LegendAITypes.ts +51 -1
- package/src/legend-ai/LegendAI_LegendApplicationPlugin_Extension.ts +169 -0
- package/src/legend-ai/__test-utils__/LegendAITestUtils.ts +9 -0
- package/src/legend-ai/components/LegendAIAnalysisPanel.tsx +102 -0
- package/src/legend-ai/components/LegendAIAnalysisUtils.ts +226 -0
- package/src/legend-ai/components/LegendAICharts.tsx +166 -0
- package/src/legend-ai/components/LegendAIChat.tsx +74 -26
- package/src/legend-ai/index.ts +18 -0
- package/src/legend-ai/stores/LegendAIChatState.ts +1039 -128
- package/tsconfig.json +3 -0
|
@@ -50,6 +50,45 @@ export class LegendAIResolvedEntities {
|
|
|
50
50
|
rootEntity;
|
|
51
51
|
relatedEntities;
|
|
52
52
|
}
|
|
53
|
+
export class LegendAIEntityCandidate {
|
|
54
|
+
datasetName;
|
|
55
|
+
description;
|
|
56
|
+
modelPath;
|
|
57
|
+
similarityScore;
|
|
58
|
+
}
|
|
59
|
+
export var LegendAIChartType;
|
|
60
|
+
(function (LegendAIChartType) {
|
|
61
|
+
LegendAIChartType["BAR"] = "bar";
|
|
62
|
+
LegendAIChartType["LINE"] = "line";
|
|
63
|
+
LegendAIChartType["PIE"] = "pie";
|
|
64
|
+
LegendAIChartType["TABLE"] = "table";
|
|
65
|
+
LegendAIChartType["NONE"] = "none";
|
|
66
|
+
})(LegendAIChartType || (LegendAIChartType = {}));
|
|
67
|
+
export class LegendAIChartRecommendation {
|
|
68
|
+
chartType;
|
|
69
|
+
xAxis;
|
|
70
|
+
yAxis;
|
|
71
|
+
label;
|
|
72
|
+
reasoning;
|
|
73
|
+
}
|
|
74
|
+
export class LegendAIKeyMetric {
|
|
75
|
+
label;
|
|
76
|
+
value;
|
|
77
|
+
detail;
|
|
78
|
+
}
|
|
79
|
+
export class LegendAIChartDataPoint {
|
|
80
|
+
label;
|
|
81
|
+
value;
|
|
82
|
+
color;
|
|
83
|
+
colorIndex;
|
|
84
|
+
}
|
|
85
|
+
export class LegendAIResultAnalysis {
|
|
86
|
+
summary;
|
|
87
|
+
chartRecommendation;
|
|
88
|
+
keyMetrics;
|
|
89
|
+
chartData;
|
|
90
|
+
suggestedQueries;
|
|
91
|
+
}
|
|
53
92
|
export class LegendAI_LegendApplicationPlugin_Extension extends LegendApplicationPlugin {
|
|
54
93
|
/**
|
|
55
94
|
* This helps to better type-check for this empty abstract type
|
|
@@ -59,5 +98,22 @@ export class LegendAI_LegendApplicationPlugin_Extension extends LegendApplicatio
|
|
|
59
98
|
install(pluginManager) {
|
|
60
99
|
pluginManager.registerApplicationPlugin(this);
|
|
61
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Given a user question and available services, use LLM to select the most
|
|
103
|
+
* relevant service(s) for SQL generation. Returns the filtered subset of
|
|
104
|
+
* services. Default implementation returns all services (no pre-filtering).
|
|
105
|
+
* Override in plugins to add LLM-based service selection.
|
|
106
|
+
*/
|
|
107
|
+
selectRelevantServices(_question, services, _config) {
|
|
108
|
+
return Promise.resolve(services);
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Probe a service by executing SELECT * LIMIT 1 to discover the real column
|
|
112
|
+
* names from the engine. Returns the actual column names or undefined if
|
|
113
|
+
* probing fails (non-fatal). This is the ground truth for column names.
|
|
114
|
+
*/
|
|
115
|
+
probeServiceColumns(_service, _coordinates, _config) {
|
|
116
|
+
return Promise.resolve(undefined);
|
|
117
|
+
}
|
|
62
118
|
}
|
|
63
119
|
//# sourceMappingURL=LegendAI_LegendApplicationPlugin_Extension.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegendAI_LegendApplicationPlugin_Extension.js","sourceRoot":"","sources":["../../src/legend-ai/LegendAI_LegendApplicationPlugin_Extension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,uBAAuB,GAExB,MAAM,2BAA2B,CAAC;AAanC,MAAM,OAAO,2BAA2B;IACtC,GAAG,CAAiB;IACpB,OAAO,CAAiB;IACxB,UAAU,CAAU;CACrB;AAED,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,qCAAa,CAAA;IACb,qCAAa,CAAA;AACf,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B;AAED,MAAM,OAAO,mBAAmB;IAC9B,OAAO,CAAwB;IAC/B,MAAM,CAAU;IAChB,YAAY,CAAU;CACvB;AAED,MAAM,OAAO,8BAA8B;IACzC,OAAO,CAAY;IACnB,IAAI,CAAoB;CACzB;AAED,MAAM,OAAO,0CAA0C;IACrD,YAAY,CAAU;IACtB,QAAQ,CAAU;IAClB,WAAW,CAAU;IACrB,OAAO,CAAU;CAClB;AAQD,MAAM,OAAO,2BAA2B;IACtC,aAAa,CAAU;IACvB,kCAAkC,CAA2C;CAC9E;AAED,MAAM,OAAO,4BAA4B;IACvC,YAAY,CAAU;CACvB;AAED,MAAM,OAAO,wBAAwB;IACnC,UAAU,CAAU;IACpB,eAAe,CAAY;CAC5B;AAOD,MAAM,OAAgB,0CAA2C,SAAQ,uBAAuB;IAC9F;;;OAGG;IACc,kBAAkB,CAAgD;IAEnF,OAAO,CACL,aAAsE;QAEtE,aAAa,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;
|
|
1
|
+
{"version":3,"file":"LegendAI_LegendApplicationPlugin_Extension.js","sourceRoot":"","sources":["../../src/legend-ai/LegendAI_LegendApplicationPlugin_Extension.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,uBAAuB,GAExB,MAAM,2BAA2B,CAAC;AAanC,MAAM,OAAO,2BAA2B;IACtC,GAAG,CAAiB;IACpB,OAAO,CAAiB;IACxB,UAAU,CAAU;CACrB;AAED,MAAM,CAAN,IAAY,oBAGX;AAHD,WAAY,oBAAoB;IAC9B,qCAAa,CAAA;IACb,qCAAa,CAAA;AACf,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,QAG/B;AAED,MAAM,OAAO,mBAAmB;IAC9B,OAAO,CAAwB;IAC/B,MAAM,CAAU;IAChB,YAAY,CAAU;CACvB;AAED,MAAM,OAAO,8BAA8B;IACzC,OAAO,CAAY;IACnB,IAAI,CAAoB;CACzB;AAED,MAAM,OAAO,0CAA0C;IACrD,YAAY,CAAU;IACtB,QAAQ,CAAU;IAClB,WAAW,CAAU;IACrB,OAAO,CAAU;CAClB;AAQD,MAAM,OAAO,2BAA2B;IACtC,aAAa,CAAU;IACvB,kCAAkC,CAA2C;CAC9E;AAED,MAAM,OAAO,4BAA4B;IACvC,YAAY,CAAU;CACvB;AAED,MAAM,OAAO,wBAAwB;IACnC,UAAU,CAAU;IACpB,eAAe,CAAY;CAC5B;AAED,MAAM,OAAO,uBAAuB;IAClC,WAAW,CAAU;IACrB,WAAW,CAAU;IACrB,SAAS,CAAU;IACnB,eAAe,CAAU;CAC1B;AAED,MAAM,CAAN,IAAY,iBAMX;AAND,WAAY,iBAAiB;IAC3B,gCAAW,CAAA;IACX,kCAAa,CAAA;IACb,gCAAW,CAAA;IACX,oCAAe,CAAA;IACf,kCAAa,CAAA;AACf,CAAC,EANW,iBAAiB,KAAjB,iBAAiB,QAM5B;AAED,MAAM,OAAO,2BAA2B;IACtC,SAAS,CAAqB;IAC9B,KAAK,CAAU;IACf,KAAK,CAAU;IACf,KAAK,CAAU;IACf,SAAS,CAAU;CACpB;AAED,MAAM,OAAO,iBAAiB;IAC5B,KAAK,CAAU;IACf,KAAK,CAAU;IACf,MAAM,CAAU;CACjB;AAED,MAAM,OAAO,sBAAsB;IACjC,KAAK,CAAU;IACf,KAAK,CAAU;IACf,KAAK,CAAU;IACf,UAAU,CAAU;CACrB;AAED,MAAM,OAAO,sBAAsB;IACjC,OAAO,CAAU;IACjB,mBAAmB,CAA+B;IAClD,UAAU,CAAuB;IACjC,SAAS,CAA4B;IACrC,gBAAgB,CAAY;CAC7B;AAOD,MAAM,OAAgB,0CAA2C,SAAQ,uBAAuB;IAC9F;;;OAGG;IACc,kBAAkB,CAAgD;IAEnF,OAAO,CACL,aAAsE;QAEtE,aAAa,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC;IAChD,CAAC;IAyLD;;;;;OAKG;IACH,sBAAsB,CACpB,SAAiB,EACjB,QAA4B,EAC5B,OAAuB;QAEvB,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CACjB,QAA0B,EAC1B,YAAoB,EACpB,OAAuB;QAEvB,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;CAyBF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegendAITestUtils.d.ts","sourceRoot":"","sources":["../../../src/legend-ai/__test-utils__/LegendAITestUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EAItB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,0CAA0C,EAIhD,MAAM,kDAAkD,CAAC;AAE1D,eAAO,MAAM,sBAAsB,QAAO;IACxC,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,MAAM,eAAe,EAAE,CAAC;CAWtC,CAAC;AACF,eAAO,MAAM,0BAA0B,GACrC,YAAY,OAAO,CAAC,wBAAwB,CAAC,KAC5C,
|
|
1
|
+
{"version":3,"file":"LegendAITestUtils.d.ts","sourceRoot":"","sources":["../../../src/legend-ai/__test-utils__/LegendAITestUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AACpE,OAAO,EACL,KAAK,eAAe,EACpB,KAAK,wBAAwB,EAC7B,KAAK,cAAc,EACnB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EAItB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,KAAK,0CAA0C,EAIhD,MAAM,kDAAkD,CAAC;AAE1D,eAAO,MAAM,sBAAsB,QAAO;IACxC,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,MAAM,eAAe,EAAE,CAAC;CAWtC,CAAC;AACF,eAAO,MAAM,0BAA0B,GACrC,YAAY,OAAO,CAAC,wBAAwB,CAAC,KAC5C,wBAkBD,CAAC;AACH,eAAO,MAAM,mBAAmB,GAAI,QAAQ,aAAa,KAAG,IAK3D,CAAC;AACF,eAAO,MAAM,yBAAyB,EAAE,cASvC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,uBAIzC,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,gBAAgB,EAUzD,CAAC;AACF,eAAO,MAAM,8BAA8B,GACzC,YAAY,OAAO,CAAC,0CAA0C,CAAC,KAC9D,0CAyC+C,CAAC"}
|
|
@@ -34,14 +34,17 @@ export const TEST__makeAssistantMessage = (overrides) => ({
|
|
|
34
34
|
thinkingSteps: [],
|
|
35
35
|
sql: null,
|
|
36
36
|
textAnswer: null,
|
|
37
|
+
dataContext: null,
|
|
37
38
|
gridData: null,
|
|
38
39
|
error: null,
|
|
40
|
+
errorType: null,
|
|
39
41
|
sqlGenTime: null,
|
|
40
42
|
execTime: null,
|
|
41
43
|
thinkingDuration: null,
|
|
42
44
|
isProcessing: true,
|
|
43
45
|
isExecuting: false,
|
|
44
46
|
suggestedQueries: [],
|
|
47
|
+
fallbackAction: null,
|
|
45
48
|
...overrides,
|
|
46
49
|
});
|
|
47
50
|
export const TEST__seedAssistant = (setter) => {
|
|
@@ -93,6 +96,9 @@ export const TEST__createMockLegendAIPlugin = (overrides) => ({
|
|
|
93
96
|
extractJudgeResult: (_a) => ({
|
|
94
97
|
verdict: LegendAIJudgeVerdict.PASS,
|
|
95
98
|
}),
|
|
99
|
+
selectRelevantServices: (_q, services) => Promise.resolve(services),
|
|
100
|
+
buildErrorCorrectionPrompt: () => '',
|
|
101
|
+
buildZeroRowCorrectionPrompt: () => '',
|
|
96
102
|
...overrides,
|
|
97
103
|
});
|
|
98
104
|
//# sourceMappingURL=LegendAITestUtils.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegendAITestUtils.js","sourceRoot":"","sources":["../../../src/legend-ai/__test-utils__/LegendAITestUtils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"LegendAITestUtils.js","sourceRoot":"","sources":["../../../src/legend-ai/__test-utils__/LegendAITestUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-present, Goldman Sachs
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import type { LegendAIGridData } from '../LegendAITypes.js';
|
|
17
|
+
export declare const LegendAIAnalysisPanel: (props: {
|
|
18
|
+
gridData: LegendAIGridData;
|
|
19
|
+
summary: string;
|
|
20
|
+
SummaryRenderer: React.ComponentType<{
|
|
21
|
+
value: string;
|
|
22
|
+
}>;
|
|
23
|
+
}) => React.ReactNode;
|
|
24
|
+
//# sourceMappingURL=LegendAIAnalysisPanel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegendAIAnalysisPanel.d.ts","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAIAnalysisPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAS5D,eAAO,MAAM,qBAAqB,GAAI,OAAO;IAC3C,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACzD,KAAG,KAAK,CAAC,SAsET,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) 2026-present, Goldman Sachs
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { useMemo } from 'react';
|
|
18
|
+
import { LegendAIChartType } from '../LegendAI_LegendApplicationPlugin_Extension.js';
|
|
19
|
+
import { computeKeyMetrics, computeChartData, inferChartType, findNumericColumnName, } from './LegendAIAnalysisUtils.js';
|
|
20
|
+
import { LegendAIBarChart, LegendAIDonutChart } from './LegendAICharts.js';
|
|
21
|
+
export const LegendAIAnalysisPanel = (props) => {
|
|
22
|
+
const { gridData, summary, SummaryRenderer } = props;
|
|
23
|
+
const metrics = useMemo(() => computeKeyMetrics(gridData), [gridData]);
|
|
24
|
+
const chartType = useMemo(() => inferChartType(gridData), [gridData]);
|
|
25
|
+
const chartData = useMemo(() => chartType === LegendAIChartType.NONE ? [] : computeChartData(gridData), [gridData, chartType]);
|
|
26
|
+
const numericColName = useMemo(() => findNumericColumnName(gridData), [gridData]);
|
|
27
|
+
const donutTitleProp = useMemo(() => numericColName === undefined
|
|
28
|
+
? {}
|
|
29
|
+
: { title: `${numericColName} Distribution` }, [numericColName]);
|
|
30
|
+
const barTitleProp = useMemo(() => numericColName === undefined
|
|
31
|
+
? {}
|
|
32
|
+
: { title: `Top ${chartData.length} by ${numericColName}` }, [numericColName, chartData.length]);
|
|
33
|
+
return (_jsxs("div", { className: "legend-ai-analysis", children: [metrics.length > 0 && (_jsx("div", { className: "legend-ai-analysis__metrics", children: metrics.map((m) => (_jsxs("div", { className: "legend-ai-analysis__metric-card", children: [_jsx("span", { className: "legend-ai-analysis__metric-value", children: m.value }), _jsx("span", { className: "legend-ai-analysis__metric-label", children: m.label }), m.detail !== undefined && (_jsx("span", { className: "legend-ai-analysis__metric-detail", children: m.detail }))] }, m.label))) })), chartData.length > 0 && (_jsx("div", { className: "legend-ai-analysis__chart-section", children: chartType === LegendAIChartType.PIE ? (_jsx(LegendAIDonutChart, { data: chartData, ...donutTitleProp })) : (_jsx(LegendAIBarChart, { data: chartData, ...barTitleProp })) })), _jsx("div", { className: "legend-ai-analysis__narrative", children: _jsx(SummaryRenderer, { value: summary }) })] }));
|
|
34
|
+
};
|
|
35
|
+
//# sourceMappingURL=LegendAIAnalysisPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegendAIAnalysisPanel.js","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAIAnalysisPanel.tsx"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,kDAAkD,CAAC;AAErF,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAE3E,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,KAIrC,EAAmB,EAAE;IACpB,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;IAErD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEvE,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEtE,MAAM,SAAS,GAAG,OAAO,CACvB,GAAG,EAAE,CACH,SAAS,KAAK,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,EACxE,CAAC,QAAQ,EAAE,SAAS,CAAC,CACtB,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EACrC,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CACH,cAAc,KAAK,SAAS;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,EAAE,KAAK,EAAE,GAAG,cAAc,eAAe,EAAE,EACjD,CAAC,cAAc,CAAC,CACjB,CAAC;IACF,MAAM,YAAY,GAAG,OAAO,CAC1B,GAAG,EAAE,CACH,cAAc,KAAK,SAAS;QAC1B,CAAC,CAAC,EAAE;QACJ,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,SAAS,CAAC,MAAM,OAAO,cAAc,EAAE,EAAE,EAC/D,CAAC,cAAc,EAAE,SAAS,CAAC,MAAM,CAAC,CACnC,CAAC;IAEF,OAAO,CACL,eAAK,SAAS,EAAC,oBAAoB,aAChC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CACrB,cAAK,SAAS,EAAC,6BAA6B,YACzC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAClB,eAAmB,SAAS,EAAC,iCAAiC,aAC5D,eAAM,SAAS,EAAC,kCAAkC,YAC/C,CAAC,CAAC,KAAK,GACH,EACP,eAAM,SAAS,EAAC,kCAAkC,YAC/C,CAAC,CAAC,KAAK,GACH,EACN,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CACzB,eAAM,SAAS,EAAC,mCAAmC,YAChD,CAAC,CAAC,MAAM,GACJ,CACR,KAXO,CAAC,CAAC,KAAK,CAYX,CACP,CAAC,GACE,CACP,EAEA,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,CACvB,cAAK,SAAS,EAAC,mCAAmC,YAC/C,SAAS,KAAK,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CACrC,KAAC,kBAAkB,IAAC,IAAI,EAAE,SAAS,KAAM,cAAc,GAAI,CAC5D,CAAC,CAAC,CAAC,CACF,KAAC,gBAAgB,IAAC,IAAI,EAAE,SAAS,KAAM,YAAY,GAAI,CACxD,GACG,CACP,EAED,cAAK,SAAS,EAAC,+BAA+B,YAC5C,KAAC,eAAe,IAAC,KAAK,EAAE,OAAO,GAAI,GAC/B,IACF,CACP,CAAC;AACJ,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-present, Goldman Sachs
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { type LegendAIKeyMetric, type LegendAIChartDataPoint, LegendAIChartType } from '../LegendAI_LegendApplicationPlugin_Extension.js';
|
|
17
|
+
import type { LegendAIGridData } from '../LegendAITypes.js';
|
|
18
|
+
export declare function computeKeyMetrics(gridData: LegendAIGridData): LegendAIKeyMetric[];
|
|
19
|
+
export declare function inferChartType(gridData: LegendAIGridData): LegendAIChartType;
|
|
20
|
+
export declare function computeChartData(gridData: LegendAIGridData): LegendAIChartDataPoint[];
|
|
21
|
+
export declare function computeTopItems(gridData: LegendAIGridData): LegendAIChartDataPoint[];
|
|
22
|
+
export declare function findNumericColumnName(gridData: LegendAIGridData): string | undefined;
|
|
23
|
+
//# sourceMappingURL=LegendAIAnalysisUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegendAIAnalysisUtils.d.ts","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAIAnalysisUtils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,sBAAsB,EAC3B,iBAAiB,EAClB,MAAM,kDAAkD,CAAC;AAC1D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AA4F5D,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,gBAAgB,GACzB,iBAAiB,EAAE,CA4BrB;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,gBAAgB,GAAG,iBAAiB,CAqB5E;AAED,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,gBAAgB,GACzB,sBAAsB,EAAE,CAmC1B;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,gBAAgB,GACzB,sBAAsB,EAAE,CAE1B;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gBAAgB,GACzB,MAAM,GAAG,SAAS,CAUpB"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-present, Goldman Sachs
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { LegendAIChartType, } from '../LegendAI_LegendApplicationPlugin_Extension.js';
|
|
17
|
+
import { isNonNullable, isNumber, isString } from '@finos/legend-shared';
|
|
18
|
+
const CHART_PALETTE_COUNT = 10;
|
|
19
|
+
const MAX_CHART_ITEMS = 10;
|
|
20
|
+
const TOP_N_ITEMS = 5;
|
|
21
|
+
const MAX_PROFILE_SAMPLE = 1000;
|
|
22
|
+
const MAX_KEY_METRICS = 4;
|
|
23
|
+
const MAX_METRIC_COLUMNS = 5;
|
|
24
|
+
const MAX_BAR_CHART_ROWS = 20;
|
|
25
|
+
const MAX_PIE_CHART_ROWS = 6;
|
|
26
|
+
function profileColumns(gridData) {
|
|
27
|
+
const rows = gridData.rowData.length > MAX_PROFILE_SAMPLE
|
|
28
|
+
? gridData.rowData.slice(0, MAX_PROFILE_SAMPLE)
|
|
29
|
+
: gridData.rowData;
|
|
30
|
+
return gridData.columnDefs.map((col) => {
|
|
31
|
+
const field = col.field ?? col.colId ?? '';
|
|
32
|
+
const values = rows.map((r) => r[field]).filter(isNonNullable);
|
|
33
|
+
const numericValues = values.filter(isNumber);
|
|
34
|
+
const unique = new Set(values.map(String));
|
|
35
|
+
return {
|
|
36
|
+
name: field,
|
|
37
|
+
isNumeric: numericValues.length === values.length && values.length > 0,
|
|
38
|
+
isString: values.length > 0 && values.every(isString),
|
|
39
|
+
uniqueCount: unique.size,
|
|
40
|
+
values,
|
|
41
|
+
numericValues,
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
function formatNumber(n) {
|
|
46
|
+
if (Number.isInteger(n) && Math.abs(n) < 1_000_000) {
|
|
47
|
+
return n.toLocaleString();
|
|
48
|
+
}
|
|
49
|
+
if (Math.abs(n) >= 1_000_000) {
|
|
50
|
+
return `${(n / 1_000_000).toFixed(1)}M`;
|
|
51
|
+
}
|
|
52
|
+
if (Math.abs(n) >= 1_000) {
|
|
53
|
+
return `${(n / 1_000).toFixed(1)}K`;
|
|
54
|
+
}
|
|
55
|
+
return n.toFixed(2);
|
|
56
|
+
}
|
|
57
|
+
function computeNumericMetrics(col, metrics) {
|
|
58
|
+
let sum = 0;
|
|
59
|
+
let min = Number.POSITIVE_INFINITY;
|
|
60
|
+
let max = Number.NEGATIVE_INFINITY;
|
|
61
|
+
for (const n of col.numericValues) {
|
|
62
|
+
sum += n;
|
|
63
|
+
if (n < min) {
|
|
64
|
+
min = n;
|
|
65
|
+
}
|
|
66
|
+
if (n > max) {
|
|
67
|
+
max = n;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const avg = sum / col.numericValues.length;
|
|
71
|
+
if (col.uniqueCount > 1) {
|
|
72
|
+
metrics.push({
|
|
73
|
+
label: `Avg ${col.name}`,
|
|
74
|
+
value: formatNumber(avg),
|
|
75
|
+
...(min === max
|
|
76
|
+
? {}
|
|
77
|
+
: { detail: `${formatNumber(min)} – ${formatNumber(max)}` }),
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
if (col.uniqueCount > 2 && metrics.length < MAX_METRIC_COLUMNS) {
|
|
81
|
+
metrics.push({
|
|
82
|
+
label: `Total ${col.name}`,
|
|
83
|
+
value: formatNumber(sum),
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export function computeKeyMetrics(gridData) {
|
|
88
|
+
const profiles = profileColumns(gridData);
|
|
89
|
+
const metrics = [];
|
|
90
|
+
const rowCount = gridData.rowData.length;
|
|
91
|
+
metrics.push({
|
|
92
|
+
label: 'Total Rows',
|
|
93
|
+
value: rowCount.toLocaleString(),
|
|
94
|
+
});
|
|
95
|
+
const numericCol = profiles.find((c) => c.isNumeric && c.numericValues.length > 0);
|
|
96
|
+
if (numericCol) {
|
|
97
|
+
computeNumericMetrics(numericCol, metrics);
|
|
98
|
+
}
|
|
99
|
+
const stringCol = profiles.find((c) => c.isString && c.uniqueCount > 1 && c.uniqueCount <= rowCount);
|
|
100
|
+
if (stringCol) {
|
|
101
|
+
metrics.push({
|
|
102
|
+
label: `Unique ${stringCol.name}`,
|
|
103
|
+
value: stringCol.uniqueCount.toLocaleString(),
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
return metrics.slice(0, MAX_KEY_METRICS);
|
|
107
|
+
}
|
|
108
|
+
export function inferChartType(gridData) {
|
|
109
|
+
const profiles = profileColumns(gridData);
|
|
110
|
+
const numericCols = profiles.filter((c) => c.isNumeric);
|
|
111
|
+
const stringCols = profiles.filter((c) => c.isString && c.uniqueCount > 1);
|
|
112
|
+
if (stringCols.length >= 1 &&
|
|
113
|
+
numericCols.length >= 1 &&
|
|
114
|
+
gridData.rowData.length <= MAX_BAR_CHART_ROWS) {
|
|
115
|
+
if (gridData.rowData.length <= MAX_PIE_CHART_ROWS) {
|
|
116
|
+
return LegendAIChartType.PIE;
|
|
117
|
+
}
|
|
118
|
+
return LegendAIChartType.BAR;
|
|
119
|
+
}
|
|
120
|
+
if (numericCols.length >= 1 && gridData.rowData.length > 1) {
|
|
121
|
+
return LegendAIChartType.BAR;
|
|
122
|
+
}
|
|
123
|
+
return LegendAIChartType.NONE;
|
|
124
|
+
}
|
|
125
|
+
export function computeChartData(gridData) {
|
|
126
|
+
const profiles = profileColumns(gridData);
|
|
127
|
+
const numericCol = profiles.find((c) => c.isNumeric);
|
|
128
|
+
const labelCol = profiles.find((c) => c.isString && c.uniqueCount > 1);
|
|
129
|
+
if (!numericCol) {
|
|
130
|
+
return [];
|
|
131
|
+
}
|
|
132
|
+
const field = numericCol.name;
|
|
133
|
+
const labelField = labelCol?.name;
|
|
134
|
+
const rows = gridData.rowData.length > MAX_PROFILE_SAMPLE
|
|
135
|
+
? gridData.rowData.slice(0, MAX_PROFILE_SAMPLE)
|
|
136
|
+
: gridData.rowData;
|
|
137
|
+
const entries = rows
|
|
138
|
+
.map((row) => {
|
|
139
|
+
const rawValue = row[field];
|
|
140
|
+
return {
|
|
141
|
+
label: labelField
|
|
142
|
+
? String(row[labelField] ?? '')
|
|
143
|
+
: String(row[gridData.columnDefs[0]?.field ?? ''] ?? ''),
|
|
144
|
+
value: typeof rawValue === 'number' ? rawValue : 0,
|
|
145
|
+
};
|
|
146
|
+
})
|
|
147
|
+
.filter((e) => e.label.length > 0)
|
|
148
|
+
.sort((a, b) => b.value - a.value)
|
|
149
|
+
.slice(0, MAX_CHART_ITEMS);
|
|
150
|
+
return entries.map((e, i) => ({
|
|
151
|
+
label: e.label,
|
|
152
|
+
value: e.value,
|
|
153
|
+
colorIndex: i % CHART_PALETTE_COUNT,
|
|
154
|
+
}));
|
|
155
|
+
}
|
|
156
|
+
export function computeTopItems(gridData) {
|
|
157
|
+
return computeChartData(gridData).slice(0, TOP_N_ITEMS);
|
|
158
|
+
}
|
|
159
|
+
export function findNumericColumnName(gridData) {
|
|
160
|
+
const profiles = profileColumns(gridData);
|
|
161
|
+
const numericCol = profiles.find((c) => c.isNumeric);
|
|
162
|
+
if (!numericCol) {
|
|
163
|
+
return undefined;
|
|
164
|
+
}
|
|
165
|
+
const colDef = gridData.columnDefs.find((c) => (c.field ?? c.colId ?? '') === numericCol.name);
|
|
166
|
+
return colDef?.headerName ?? colDef?.field;
|
|
167
|
+
}
|
|
168
|
+
//# sourceMappingURL=LegendAIAnalysisUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegendAIAnalysisUtils.js","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAIAnalysisUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) 2026-present, Goldman Sachs
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import type { LegendAIChartDataPoint } from '../LegendAI_LegendApplicationPlugin_Extension.js';
|
|
17
|
+
export declare const LegendAIBarChart: (props: {
|
|
18
|
+
data: LegendAIChartDataPoint[];
|
|
19
|
+
title?: string;
|
|
20
|
+
}) => React.ReactNode;
|
|
21
|
+
export declare const LegendAIDonutChart: (props: {
|
|
22
|
+
data: LegendAIChartDataPoint[];
|
|
23
|
+
title?: string;
|
|
24
|
+
}) => React.ReactNode;
|
|
25
|
+
//# sourceMappingURL=LegendAICharts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegendAICharts.d.ts","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAICharts.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,kDAAkD,CAAC;AAgB/F,eAAO,MAAM,gBAAgB,GAAI,OAAO;IACtC,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,KAAG,KAAK,CAAC,SA8CT,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAI,OAAO;IACxC,IAAI,EAAE,sBAAsB,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,KAAG,KAAK,CAAC,SA8ET,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
/**
|
|
3
|
+
* Copyright (c) 2026-present, Goldman Sachs
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
import { useMemo } from 'react';
|
|
18
|
+
const CHART_PALETTE_SIZE = 10;
|
|
19
|
+
const DONUT_SIZE = 160;
|
|
20
|
+
const DONUT_STROKE = 24;
|
|
21
|
+
const DONUT_RADIUS = (DONUT_SIZE - DONUT_STROKE) / 2;
|
|
22
|
+
const DONUT_CIRCUMFERENCE = 2 * Math.PI * DONUT_RADIUS;
|
|
23
|
+
function getChartColor(index) {
|
|
24
|
+
return `var(--ai-chart-color-${(index % CHART_PALETTE_SIZE) + 1})`;
|
|
25
|
+
}
|
|
26
|
+
function resolveColor(item, index) {
|
|
27
|
+
return item.color ?? getChartColor(item.colorIndex ?? index);
|
|
28
|
+
}
|
|
29
|
+
export const LegendAIBarChart = (props) => {
|
|
30
|
+
const { data, title } = props;
|
|
31
|
+
const maxValue = useMemo(() => data.reduce((m, d) => Math.max(m, d.value), 0) || 1, [data]);
|
|
32
|
+
if (data.length === 0) {
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
return (_jsxs("div", { className: "legend-ai-chart legend-ai-chart--bar", children: [title !== undefined && title.length > 0 && (_jsx("div", { className: "legend-ai-chart__title", children: title })), _jsx("div", { className: "legend-ai-chart__bars", children: data.map((item, idx) => {
|
|
36
|
+
const pct = (item.value / maxValue) * 100;
|
|
37
|
+
return (_jsxs("div", { className: "legend-ai-chart__bar-row", children: [_jsx("span", { className: "legend-ai-chart__bar-label", title: item.label, children: item.label }), _jsx("div", { className: "legend-ai-chart__bar-track", children: _jsx("div", { className: "legend-ai-chart__bar-fill", style: {
|
|
38
|
+
width: `${pct}%`,
|
|
39
|
+
backgroundColor: resolveColor(item, idx),
|
|
40
|
+
animationDelay: `${idx * 60}ms`,
|
|
41
|
+
} }) }), _jsx("span", { className: "legend-ai-chart__bar-value", children: Number.isInteger(item.value)
|
|
42
|
+
? item.value.toLocaleString()
|
|
43
|
+
: item.value })] }, item.label));
|
|
44
|
+
}) })] }));
|
|
45
|
+
};
|
|
46
|
+
export const LegendAIDonutChart = (props) => {
|
|
47
|
+
const { data, title } = props;
|
|
48
|
+
const total = useMemo(() => data.reduce((s, d) => s + d.value, 0) || 1, [data]);
|
|
49
|
+
const segments = useMemo(() => {
|
|
50
|
+
let offset = 0;
|
|
51
|
+
return data.map((item) => {
|
|
52
|
+
const pct = item.value / total;
|
|
53
|
+
const dashLen = pct * DONUT_CIRCUMFERENCE;
|
|
54
|
+
const seg = {
|
|
55
|
+
...item,
|
|
56
|
+
dashLen,
|
|
57
|
+
dashOffset: -offset,
|
|
58
|
+
pct,
|
|
59
|
+
};
|
|
60
|
+
offset += dashLen;
|
|
61
|
+
return seg;
|
|
62
|
+
});
|
|
63
|
+
}, [data, total]);
|
|
64
|
+
if (data.length === 0) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
const center = DONUT_SIZE / 2;
|
|
68
|
+
return (_jsxs("div", { className: "legend-ai-chart legend-ai-chart--donut", children: [title !== undefined && title.length > 0 && (_jsx("div", { className: "legend-ai-chart__title", children: title })), _jsxs("div", { className: "legend-ai-chart__donut-wrapper", children: [_jsx("svg", { viewBox: `0 0 ${DONUT_SIZE} ${DONUT_SIZE}`, className: "legend-ai-chart__donut-svg", children: segments.map((seg, idx) => (_jsx("circle", { cx: center, cy: center, r: DONUT_RADIUS, fill: "none", stroke: resolveColor(seg, idx), strokeWidth: DONUT_STROKE, strokeDasharray: `${seg.dashLen} ${DONUT_CIRCUMFERENCE - seg.dashLen}`, strokeDashoffset: seg.dashOffset, className: "legend-ai-chart__donut-segment" }, seg.label))) }), _jsxs("div", { className: "legend-ai-chart__donut-center", children: [_jsx("span", { className: "legend-ai-chart__donut-total", children: total.toLocaleString() }), _jsx("span", { className: "legend-ai-chart__donut-total-label", children: "total" })] })] }), _jsx("div", { className: "legend-ai-chart__legend", children: data.map((item, idx) => (_jsxs("div", { className: "legend-ai-chart__legend-item", children: [_jsx("span", { className: "legend-ai-chart__legend-dot", style: { backgroundColor: resolveColor(item, idx) } }), _jsx("span", { className: "legend-ai-chart__legend-label", children: item.label }), _jsx("span", { className: "legend-ai-chart__legend-value", children: item.value.toLocaleString() })] }, item.label))) })] }));
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=LegendAICharts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"LegendAICharts.js","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAICharts.tsx"],"names":[],"mappings":"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"}
|
|
@@ -13,11 +13,12 @@
|
|
|
13
13
|
* See the License for the specific language governing permissions and
|
|
14
14
|
* limitations under the License.
|
|
15
15
|
*/
|
|
16
|
-
import { type LegendAIChatProps, type LegendAIProductMetadata, type TDSServiceSchema, type TDSColumnSchema } from '../LegendAITypes.js';
|
|
16
|
+
import { type LegendAIChatProps, type LegendAIProductMetadata, type TDSServiceSchema, type TDSColumnSchema, LegendAIThinkingStepStatus } from '../LegendAITypes.js';
|
|
17
17
|
export declare const LEGEND_AI_ANCHOR_ID = "legend-ai-anchor";
|
|
18
18
|
export declare function isStringColumn(c: TDSColumnSchema): boolean;
|
|
19
19
|
export declare function isNumericColumn(c: TDSColumnSchema): boolean;
|
|
20
20
|
export declare function isDateColumn(c: TDSColumnSchema): boolean;
|
|
21
21
|
export declare function buildSuggestedQueries(services: TDSServiceSchema[], metadata: LegendAIProductMetadata): string[];
|
|
22
|
+
export declare function renderStepStatusIcon(status: LegendAIThinkingStepStatus): React.ReactNode;
|
|
22
23
|
export declare const LegendAIChat: (props: LegendAIChatProps) => React.ReactNode;
|
|
23
24
|
//# sourceMappingURL=LegendAIChat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LegendAIChat.d.ts","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAIChat.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"LegendAIChat.d.ts","sourceRoot":"","sources":["../../../src/legend-ai/components/LegendAIChat.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AA2BH,OAAO,EACL,KAAK,iBAAiB,EAEtB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,0BAA0B,EAG3B,MAAM,qBAAqB,CAAC;AAI7B,eAAO,MAAM,mBAAmB,qBAAqB,CAAC;AAoBtD,wBAAgB,cAAc,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAE1D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAE3D;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAMxD;AAwDD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,gBAAgB,EAAE,EAC5B,QAAQ,EAAE,uBAAuB,GAChC,MAAM,EAAE,CAqCV;AAED,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,0BAA0B,GACjC,KAAK,CAAC,SAAS,CASjB;AAuMD,eAAO,MAAM,YAAY,GAAI,OAAO,iBAAiB,KAAG,KAAK,CAAC,SAyJ7D,CAAC"}
|