@yejiming/dsh-data-agent 0.0.11 → 0.0.12
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/README.en.md +14 -5
- package/README.md +14 -5
- package/lib/client.js +73 -70
- package/lib/client.js.map +1 -1
- package/lib/index.js +11 -12
- package/lib/{tool-DVh61An-.js → tool-DgL0fBfj.js} +156 -10
- package/lib/tool.js +1 -1
- package/lib/types/analysis-html.d.ts +27 -0
- package/lib/types/analysis.d.ts +13 -1
- package/lib/types/index.d.ts +5 -6
- package/lib/types/presentation-text.d.ts +3 -0
- package/package.json +40 -40
- package/preset/data-agent/agent.cordis.yml +5 -3
package/README.en.md
CHANGED
|
@@ -40,11 +40,11 @@ dsh-data-agent is a data analysis plugin for DeepSeek Harness (DSH). Connect a d
|
|
|
40
40
|
|
|
41
41
|
- **Analyze data through conversation**: Describe your goal in natural language. DSH understands the question, breaks it into analysis steps, queries real data, and organizes the conclusions. You can keep asking follow-up questions to explore the same context in greater depth.
|
|
42
42
|
- **Discover business insights automatically**: Data Agent goes beyond returning query results. It helps compare trends, locate anomalies, identify valuable customers or products, and turn the data into explanations that support decisions.
|
|
43
|
-
- **
|
|
43
|
+
- **Cross-surface HTML reports (render-analysis)**: In an ordinary tool call, the agent can choose to produce a single chart or a Dashboard-style report (metric/line/bar/pie/scatter/table views). Every successful call saves an offline HTML file under `analysis-reports/` in the current workspace. Web also shows an inline preview and a “View analysis” Modal; dsh-tui returns the file path. Whether to chart remains the agent's decision — schema exploration, single scalars, and queries without visual value are never forced into charts.
|
|
44
44
|
- **Works with both Web UI and dsh-tui**: For a visual workflow, we recommend [zhu1090093659/dsh-web-ui](https://github.com/zhu1090093659/dsh-web-ui), where you can connect databases, browse schemas, and inspect results in the browser. For a keyboard-first workflow, we recommend [ccch1mneyyy/dsh-TUI](https://github.com/ccch1mneyyy/dsh-TUI), where you can use the same Data Mode, connect through `/database`, and move directly into conversational analysis. Both interfaces provide the core Data Agent experience.
|
|
45
45
|
- **Connect common business databases**: Supports MySQL, PostgreSQL, SQLite, Oracle, Hive, and Impala across application databases, analytics systems, local data files, and data warehouses.
|
|
46
46
|
- **Let DSH complete the analysis loop**: DSH inspects table structures, writes SQL, runs the query, and adjusts its approach based on errors or returned data instead of stopping at an unverified SQL draft.
|
|
47
|
-
- **Stay focused with Data Mode**: The session uses DSH's native `str_replace_editor` for files and keeps `sql-query`, `sql-write`,
|
|
47
|
+
- **Stay focused with Data Mode**: The session uses DSH's native `str_replace_editor` for files and keeps `sql-query`, `sql-write`, `sql-cmd`, and `render-analysis`; Web, Desktop, dsh-tui, and headless profiles use the same tool protocol. Host or community tools such as `describe_image` and `ssh_*` do not leak into Data Mode.
|
|
48
48
|
- **Work safely with real data**: Use read-only mode and a read-only database account when appropriate. TUI passwords are masked and are never restored as part of a form draft. You decide whether the session may modify data.
|
|
49
49
|
|
|
50
50
|
The Web UI also includes an on-demand database workbench. Click the database button in the top-right of the composer to configure the connection, browse schemas, inspect columns, or run SQL in one Modal. Before and after the conversation starts, it no longer occupies the area above the composer or a left sidebar.
|
|
@@ -90,18 +90,25 @@ Then:
|
|
|
90
90
|
|
|
91
91
|
For example, ask: “Analyze order changes over the last 30 days, identify the regions and products with the largest revenue decline, and explain the main causes.” DSH will inspect the relevant tables, generate and run the queries, and complete the analysis from real results.
|
|
92
92
|
|
|
93
|
-
###
|
|
93
|
+
### Analysis reports and HTML artifacts
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
Data Mode provides the render-analysis tool on every surface. The agent first explores and verifies facts with sql-query, then decides for itself whether a visualization helps. When it does, one tool call produces one versioned analysis report:
|
|
96
96
|
|
|
97
97
|
- A report holds 1-6 read-only datasets and 1-8 views (metric, line, bar, pie, scatter, table); multiple views may reuse one dataset, and aggregation or Top N is written in the SQL itself;
|
|
98
98
|
- Simple questions produce a single main chart (inline preview in the result row); complex questions produce a compact summary plus a “View analysis” button;
|
|
99
99
|
- “View analysis” opens a large Modal with every view of that report: a compact metric band, a full-width main chart, a two-column secondary grid, and a detail table — responsive across light/dark themes and narrow screens;
|
|
100
|
+
- Regardless of the active UI, the complete Dashboard is written atomically to `analysis-reports/*.html` under the session workspace and appears in DSH's Produced row where supported. The filename defaults to the report title or a semantic `outputName` basename, without a long UUID. Data, styles, and SVG rendering code are inline, so the file opens without a network connection;
|
|
100
101
|
- The complete report snapshot is persisted with the session log: refreshing or replaying history never re-queries the database and creates no extra browser storage;
|
|
101
|
-
-
|
|
102
|
+
- Web still renders its preview from the same report meta; the Node HTML generator loads neither ECharts nor Web client code.
|
|
102
103
|
|
|
103
104
|
## Using Data Agent in dsh-tui
|
|
104
105
|
|
|
106
|
+
Install Data Agent into the dsh-tui profile. `render-analysis` does not require a particular dsh-TUI version or scene capability:
|
|
107
|
+
|
|
108
|
+
```sh
|
|
109
|
+
dsh plugin --profile dsh-tui add @yejiming/dsh-data-agent
|
|
110
|
+
```
|
|
111
|
+
|
|
105
112
|
Start the terminal interface:
|
|
106
113
|
|
|
107
114
|
```sh
|
|
@@ -125,6 +132,8 @@ After connecting, return to the chat input and ask a business question. Other us
|
|
|
125
132
|
/database disconnect Disconnect the current database
|
|
126
133
|
```
|
|
127
134
|
|
|
135
|
+
After the agent generates a report, the tool card shows dataset, view, empty-data facts, and the absolute HTML path. TUI does not print a character Dashboard and does not register `/analysis`; open the HTML in a local browser to inspect all six view types and raw data. The file belongs to that tool call, and `/resume` does not re-query the database.
|
|
136
|
+
|
|
128
137
|
When you reopen the connection form in the same session, it restores the latest database type, host, port, user, database, and read-only mode. The password always remains masked and is never restored.
|
|
129
138
|
|
|
130
139
|
## How to Ask Better Analysis Questions
|
package/README.md
CHANGED
|
@@ -40,11 +40,11 @@ dsh-data-agent是DeepSeek Harness(DSH)的数据分析插件。连接数据
|
|
|
40
40
|
|
|
41
41
|
- **通过对话完成数据分析**:直接用自然语言描述目标,DSH会理解问题、拆解分析步骤、查询真实数据并整理结论。你可以继续追问,分析会沿着当前上下文逐步深入。
|
|
42
42
|
- **自动寻找商业洞察**:不仅返回查询结果,还能帮助比较趋势、定位异常、识别高价值客户或商品,并把数据转化为便于业务决策的说明。
|
|
43
|
-
-
|
|
43
|
+
- **跨界面HTML分析报告(render-analysis)**:Agent可在普通工具调用里自主生成单图或Dashboard式综合分析报告(metric/line/bar/pie/scatter/table视图)。每次成功调用都会在当前工作目录的`analysis-reports/`中保存一份离线可打开的HTML;Web同时提供内联预览与“查看分析”Modal,dsh-tui直接返回文件路径。是否画图由Agent按问题判断,schema探查、单标量等查询不会被强制生成图表。
|
|
44
44
|
- **完整兼容Web UI与dsh-tui**:喜欢可视化操作时,可以在Web界面连接数据库、浏览库表和查看结果,推荐使用[zhu1090093659/dsh-web-ui](https://github.com/zhu1090093659/dsh-web-ui);习惯键盘工作流时,可以在终端中使用同一“数据模式”,通过`/database`完成连接,然后直接开始对话分析,推荐使用[ccch1mneyyy/dsh-TUI](https://github.com/ccch1mneyyy/dsh-TUI)。两种界面都能使用数据Agent的核心能力。
|
|
45
45
|
- **连接常见业务数据库**:支持MySQL、PostgreSQL、SQLite、Oracle、Hive和Impala,可用于业务系统、分析库、本地数据文件及数仓场景。
|
|
46
46
|
- **DSH自动完成分析闭环**:DSH会根据当前问题查看表结构、编写SQL、执行查询,并结合报错或返回结果继续调整,而不是只生成一段未经验证的SQL。
|
|
47
|
-
- **专注数据任务的数据模式**:会话使用DSH原生`str_replace_editor`处理文件,并保留`sql-query`、`sql-write`、`sql-cmd`;Web
|
|
47
|
+
- **专注数据任务的数据模式**:会话使用DSH原生`str_replace_editor`处理文件,并保留`sql-query`、`sql-write`、`sql-cmd`与`render-analysis`;Web、Desktop、dsh-tui和headless profile使用同一工具协议。`describe_image`、`ssh_*`等宿主或社区插件工具不会进入数据模式。
|
|
48
48
|
- **安全地使用真实数据**:支持只读模式和数据库只读账号;TUI密码会被隐藏,且不会作为表单草稿恢复。是否允许修改数据由你决定。
|
|
49
49
|
|
|
50
50
|
Web UI还提供按需数据库工作台:点击输入框右上角的数据库按钮,即可在同一个Modal中配置连接、浏览库表、查看字段结构或临时运行SQL。开始对话前后都不占用输入框上方或左侧的对话空间。
|
|
@@ -90,18 +90,25 @@ dsh --profile web
|
|
|
90
90
|
|
|
91
91
|
例如,输入“分析最近30天订单变化,找出销售额下降最明显的地区和商品,并解释主要原因”,DSH会自行查看相关表、生成并执行查询,再根据真实结果完成分析。
|
|
92
92
|
|
|
93
|
-
###
|
|
93
|
+
### 分析报告与HTML文件
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
数据模式提供render-analysis工具:Agent会先用sql-query探查并核对事实,再自行判断可视化是否有帮助。判断需要画图时,一次工具调用会生成一份版本化分析报告:
|
|
96
96
|
|
|
97
97
|
- 报告包含 1-6 个只读数据集与 1-8 个视图(metric、line、bar、pie、scatter、table),同一数据集可被多个视图复用,聚合与 Top N 都写在 SQL 中;
|
|
98
98
|
- 简单问题生成单个主图(结果行内联预览),复杂问题生成紧凑摘要 + 「查看分析」按钮;
|
|
99
99
|
- 「查看分析」在大型 Modal 中展示本次报告的全部视图:紧凑指标带、全宽主图、双列辅助图与明细表,浅色/深色主题与窄屏单列自适应;
|
|
100
|
+
- 无论当前使用哪种UI,完整Dashboard都会原子保存到会话工作目录的`analysis-reports/*.html`,并在支持的DSH界面进入“产物”栏;文件名默认使用报告标题,也可用语义化`outputName`指定basename,不追加长UUID;文件内联数据、样式和SVG渲染代码,断网时也能直接打开;
|
|
100
101
|
- 完整报告快照随会话日志持久化:刷新或历史回放不重新查询数据库,也不产生新的浏览器存储;
|
|
101
|
-
-
|
|
102
|
+
- Web仍从同一份报告meta渲染预览;Node侧HTML生成器不加载ECharts或Web client代码。
|
|
102
103
|
|
|
103
104
|
## 在dsh-tui中使用
|
|
104
105
|
|
|
106
|
+
把Data Agent安装到dsh-tui profile即可;`render-analysis`不要求特定dsh-TUI版本或scene能力:
|
|
107
|
+
|
|
108
|
+
```sh
|
|
109
|
+
dsh plugin --profile dsh-tui add @yejiming/dsh-data-agent
|
|
110
|
+
```
|
|
111
|
+
|
|
105
112
|
启动终端界面:
|
|
106
113
|
|
|
107
114
|
```sh
|
|
@@ -125,6 +132,8 @@ dsh --profile dsh-tui
|
|
|
125
132
|
/database disconnect 断开当前连接
|
|
126
133
|
```
|
|
127
134
|
|
|
135
|
+
Agent生成分析报告后,工具卡会显示数据集、视图、空数据摘要与HTML绝对路径。TUI不会输出字符Dashboard,也没有`/analysis`命令;直接在本机浏览器中打开该HTML即可查看六类视图和原始数据。文件来自本次工具调用,`/resume`不会重新查询数据库。
|
|
136
|
+
|
|
128
137
|
同一会话再次打开连接表单时,会恢复最近填写的数据库类型、地址、端口、用户、数据库和只读模式。密码始终隐藏且不会恢复。
|
|
129
138
|
|
|
130
139
|
## 推荐的提问方式
|
package/lib/client.js
CHANGED
|
@@ -103,64 +103,64 @@ window.__ModuleLoader__.load({
|
|
|
103
103
|
document.head.appendChild(tag);
|
|
104
104
|
}
|
|
105
105
|
var DataAgentWorkbench_module_css_default = {
|
|
106
|
-
"triggerActive": "Sv3uVW_triggerActive",
|
|
107
|
-
"tab": "Sv3uVW_tab",
|
|
108
|
-
"modalColTitle": "Sv3uVW_modalColTitle",
|
|
109
|
-
"triggerDot": "Sv3uVW_triggerDot",
|
|
110
|
-
"sqlPanel": "Sv3uVW_sqlPanel",
|
|
111
|
-
"errorText": "Sv3uVW_errorText",
|
|
112
|
-
"connectionState": "Sv3uVW_connectionState",
|
|
113
|
-
"modalCol": "Sv3uVW_modalCol",
|
|
114
|
-
"treeItem": "Sv3uVW_treeItem",
|
|
115
|
-
"input": "Sv3uVW_input",
|
|
116
|
-
"summaryType": "Sv3uVW_summaryType",
|
|
117
|
-
"typeCell": "Sv3uVW_typeCell",
|
|
118
106
|
"workbench": "Sv3uVW_workbench",
|
|
107
|
+
"summaryType": "Sv3uVW_summaryType",
|
|
108
|
+
"field": "Sv3uVW_field",
|
|
119
109
|
"treeChildren": "Sv3uVW_treeChildren",
|
|
120
|
-
"treeName": "Sv3uVW_treeName",
|
|
121
|
-
"nullCell": "Sv3uVW_nullCell",
|
|
122
|
-
"treeNode": "Sv3uVW_treeNode",
|
|
123
|
-
"shortcutHint": "Sv3uVW_shortcutHint",
|
|
124
110
|
"active": "Sv3uVW_active",
|
|
125
|
-
"
|
|
111
|
+
"hint": "Sv3uVW_hint",
|
|
112
|
+
"triggerActive": "Sv3uVW_triggerActive",
|
|
126
113
|
"sqlResult": "Sv3uVW_sqlResult",
|
|
127
|
-
"columnsTable": "Sv3uVW_columnsTable",
|
|
128
114
|
"errorIcon": "Sv3uVW_errorIcon",
|
|
129
|
-
"
|
|
115
|
+
"nullCell": "Sv3uVW_nullCell",
|
|
116
|
+
"tabPanel": "Sv3uVW_tabPanel",
|
|
117
|
+
"emptyStateText": "Sv3uVW_emptyStateText",
|
|
118
|
+
"modalColTitle": "Sv3uVW_modalColTitle",
|
|
119
|
+
"label": "Sv3uVW_label",
|
|
130
120
|
"errorHead": "Sv3uVW_errorHead",
|
|
131
|
-
"
|
|
132
|
-
"treeChevron": "Sv3uVW_treeChevron",
|
|
133
|
-
"primary": "Sv3uVW_primary",
|
|
134
|
-
"connectionSummary": "Sv3uVW_connectionSummary",
|
|
135
|
-
"trigger": "Sv3uVW_trigger",
|
|
121
|
+
"open": "Sv3uVW_open",
|
|
136
122
|
"modalHint": "Sv3uVW_modalHint",
|
|
137
|
-
"
|
|
138
|
-
"
|
|
123
|
+
"rememberRow": "Sv3uVW_rememberRow",
|
|
124
|
+
"ghost": "Sv3uVW_ghost",
|
|
125
|
+
"tab": "Sv3uVW_tab",
|
|
126
|
+
"connectionState": "Sv3uVW_connectionState",
|
|
127
|
+
"fieldGrid": "Sv3uVW_fieldGrid",
|
|
128
|
+
"sqlPanel": "Sv3uVW_sqlPanel",
|
|
129
|
+
"treeItem": "Sv3uVW_treeItem",
|
|
139
130
|
"errorBar": "Sv3uVW_errorBar",
|
|
140
|
-
"
|
|
141
|
-
"
|
|
131
|
+
"colScroll": "Sv3uVW_colScroll",
|
|
132
|
+
"connectionSummary": "Sv3uVW_connectionSummary",
|
|
133
|
+
"typeCell": "Sv3uVW_typeCell",
|
|
134
|
+
"schemaPanel": "Sv3uVW_schemaPanel",
|
|
135
|
+
"treeNode": "Sv3uVW_treeNode",
|
|
142
136
|
"rememberHint": "Sv3uVW_rememberHint",
|
|
143
|
-
"workbenchModalContent": "Sv3uVW_workbenchModalContent",
|
|
144
|
-
"emptyStateText": "Sv3uVW_emptyStateText",
|
|
145
|
-
"summaryDb": "Sv3uVW_summaryDb",
|
|
146
|
-
"label": "Sv3uVW_label",
|
|
147
|
-
"sqlInput": "Sv3uVW_sqlInput",
|
|
148
|
-
"ghost": "Sv3uVW_ghost",
|
|
149
137
|
"tabs": "Sv3uVW_tabs",
|
|
138
|
+
"treeName": "Sv3uVW_treeName",
|
|
150
139
|
"actions": "Sv3uVW_actions",
|
|
151
|
-
"
|
|
152
|
-
"
|
|
153
|
-
"
|
|
154
|
-
"
|
|
155
|
-
"
|
|
156
|
-
"
|
|
157
|
-
"treeScroll": "Sv3uVW_treeScroll",
|
|
140
|
+
"treeChevron": "Sv3uVW_treeChevron",
|
|
141
|
+
"triggerDot": "Sv3uVW_triggerDot",
|
|
142
|
+
"workbenchModalContent": "Sv3uVW_workbenchModalContent",
|
|
143
|
+
"fieldRow2": "Sv3uVW_fieldRow2",
|
|
144
|
+
"tabActive": "Sv3uVW_tabActive",
|
|
145
|
+
"modalCol": "Sv3uVW_modalCol",
|
|
158
146
|
"emptyState": "Sv3uVW_emptyState",
|
|
159
|
-
"
|
|
160
|
-
"
|
|
161
|
-
"
|
|
147
|
+
"input": "Sv3uVW_input",
|
|
148
|
+
"treeCount": "Sv3uVW_treeCount",
|
|
149
|
+
"sqlActions": "Sv3uVW_sqlActions",
|
|
162
150
|
"colCount": "Sv3uVW_colCount",
|
|
163
|
-
"
|
|
151
|
+
"columnsTable": "Sv3uVW_columnsTable",
|
|
152
|
+
"summaryDb": "Sv3uVW_summaryDb",
|
|
153
|
+
"trigger": "Sv3uVW_trigger",
|
|
154
|
+
"treeScroll": "Sv3uVW_treeScroll",
|
|
155
|
+
"triggerSlot": "Sv3uVW_triggerSlot",
|
|
156
|
+
"treeIcon": "Sv3uVW_treeIcon",
|
|
157
|
+
"sqlInput": "Sv3uVW_sqlInput",
|
|
158
|
+
"tree": "Sv3uVW_tree",
|
|
159
|
+
"primary": "Sv3uVW_primary",
|
|
160
|
+
"shortcutHint": "Sv3uVW_shortcutHint",
|
|
161
|
+
"errorText": "Sv3uVW_errorText",
|
|
162
|
+
"emptyStateIcon": "Sv3uVW_emptyStateIcon",
|
|
163
|
+
"workbenchModal": "Sv3uVW_workbenchModal"
|
|
164
164
|
};
|
|
165
165
|
//#endregion
|
|
166
166
|
//#region src/client/DataAgentWorkbench.tsx
|
|
@@ -1394,12 +1394,14 @@ window.__ModuleLoader__.load({
|
|
|
1394
1394
|
"version",
|
|
1395
1395
|
"title",
|
|
1396
1396
|
"summary",
|
|
1397
|
+
"htmlPath",
|
|
1397
1398
|
"datasets",
|
|
1398
1399
|
"views"
|
|
1399
1400
|
], prefix);
|
|
1400
1401
|
if (input["version"] !== 1) fail(prefix + ": 不支持的报告版本(期望 version 1)");
|
|
1401
1402
|
const title = requireNonEmptyString(input["title"], prefix + ".title");
|
|
1402
1403
|
const summary = optionalString(input, "summary", prefix);
|
|
1404
|
+
const htmlPath = optionalString(input, "htmlPath", prefix);
|
|
1403
1405
|
const datasets = input["datasets"];
|
|
1404
1406
|
if (!Array.isArray(datasets) || datasets.length < 1 || datasets.length > 6) fail(prefix + ": datasets 必须是 1-6 个");
|
|
1405
1407
|
const parsedDatasets = [];
|
|
@@ -1452,6 +1454,7 @@ window.__ModuleLoader__.load({
|
|
|
1452
1454
|
views: parsedViews
|
|
1453
1455
|
};
|
|
1454
1456
|
if (summary !== void 0) report.summary = summary;
|
|
1457
|
+
if (htmlPath !== void 0) report.htmlPath = htmlPath;
|
|
1455
1458
|
return report;
|
|
1456
1459
|
}
|
|
1457
1460
|
const BASE_VIEW_PROPERTIES = {
|
|
@@ -42534,40 +42537,40 @@ window.__ModuleLoader__.load({
|
|
|
42534
42537
|
document.head.appendChild(tag);
|
|
42535
42538
|
}
|
|
42536
42539
|
var AnalysisDashboard_module_css_default = {
|
|
42537
|
-
"
|
|
42538
|
-
"
|
|
42540
|
+
"viewHalf": "_1tppBG_viewHalf",
|
|
42541
|
+
"table": "_1tppBG_table",
|
|
42539
42542
|
"modalHeader": "_1tppBG_modalHeader",
|
|
42540
|
-
"
|
|
42541
|
-
"
|
|
42542
|
-
"
|
|
42543
|
-
"
|
|
42543
|
+
"view": "_1tppBG_view",
|
|
42544
|
+
"rowInterrupted": "_1tppBG_rowInterrupted",
|
|
42545
|
+
"viewTitle": "_1tppBG_viewTitle",
|
|
42546
|
+
"modalSummary": "_1tppBG_modalSummary",
|
|
42547
|
+
"rowError": "_1tppBG_rowError",
|
|
42544
42548
|
"metricLabel": "_1tppBG_metricLabel",
|
|
42549
|
+
"modalClose": "_1tppBG_modalClose",
|
|
42545
42550
|
"grid": "_1tppBG_grid",
|
|
42546
|
-
"
|
|
42547
|
-
"
|
|
42548
|
-
"
|
|
42551
|
+
"empty": "_1tppBG_empty",
|
|
42552
|
+
"rowSummary": "_1tppBG_rowSummary",
|
|
42553
|
+
"row": "_1tppBG_row",
|
|
42554
|
+
"modalShell": "_1tppBG_modalShell",
|
|
42555
|
+
"metricBand": "_1tppBG_metricBand",
|
|
42556
|
+
"rowTitle": "_1tppBG_rowTitle",
|
|
42557
|
+
"metricValue": "_1tppBG_metricValue",
|
|
42558
|
+
"modalTitleWrap": "_1tppBG_modalTitleWrap",
|
|
42549
42559
|
"chart": "_1tppBG_chart",
|
|
42550
42560
|
"tableWrap": "_1tppBG_tableWrap",
|
|
42551
|
-
"
|
|
42552
|
-
"
|
|
42561
|
+
"viewFull": "_1tppBG_viewFull",
|
|
42562
|
+
"modal": "_1tppBG_modal",
|
|
42553
42563
|
"visuallyHidden": "_1tppBG_visuallyHidden",
|
|
42554
|
-
"
|
|
42564
|
+
"modalTitle": "_1tppBG_modalTitle",
|
|
42565
|
+
"modalBody": "_1tppBG_modalBody",
|
|
42566
|
+
"chartCanvas": "_1tppBG_chartCanvas",
|
|
42555
42567
|
"metric": "_1tppBG_metric",
|
|
42556
42568
|
"modalCount": "_1tppBG_modalCount",
|
|
42557
|
-
"modalBody": "_1tppBG_modalBody",
|
|
42558
|
-
"row": "_1tppBG_row",
|
|
42559
|
-
"rowButton": "_1tppBG_rowButton",
|
|
42560
|
-
"metricBand": "_1tppBG_metricBand",
|
|
42561
|
-
"metricValue": "_1tppBG_metricValue",
|
|
42562
|
-
"rowError": "_1tppBG_rowError",
|
|
42563
|
-
"rowInterrupted": "_1tppBG_rowInterrupted",
|
|
42564
|
-
"viewFull": "_1tppBG_viewFull",
|
|
42565
|
-
"viewTitle": "_1tppBG_viewTitle",
|
|
42566
|
-
"empty": "_1tppBG_empty",
|
|
42567
|
-
"modalSummary": "_1tppBG_modalSummary",
|
|
42568
42569
|
"rowHead": "_1tppBG_rowHead",
|
|
42569
|
-
"
|
|
42570
|
-
"
|
|
42570
|
+
"rowActions": "_1tppBG_rowActions",
|
|
42571
|
+
"emptyText": "_1tppBG_emptyText",
|
|
42572
|
+
"rowButton": "_1tppBG_rowButton",
|
|
42573
|
+
"preview": "_1tppBG_preview"
|
|
42571
42574
|
};
|
|
42572
42575
|
//#endregion
|
|
42573
42576
|
//#region src/client/AnalysisChart.tsx
|