@cloudtower/eagle 4100.0.1 → 4100.0.3
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/dist/cjs/core/AccordionCard/index.js +1 -1
- package/dist/cjs/core/Alert/alert.style.js +2 -2
- package/dist/cjs/core/Avatar/index.js +1 -1
- package/dist/cjs/core/Banner/banner.style.js +4 -4
- package/dist/cjs/core/BasicCTError/BasicCTError.style.js +1 -1
- package/dist/cjs/core/BlankState/style.js +1 -1
- package/dist/cjs/core/Breadcrumb/index.js +1 -1
- package/dist/cjs/core/Button/index.js +1 -1
- package/dist/cjs/core/ButtonGroup/index.js +2 -2
- package/dist/cjs/core/Card/CardBody.js +1 -1
- package/dist/cjs/core/Card/CardTitle.js +1 -1
- package/dist/cjs/core/Card/CardWrapper.js +2 -2
- package/dist/cjs/core/Cascader/cascader.style.js +11 -11
- package/dist/cjs/core/Checkbox/checkbox.style.js +1 -1
- package/dist/cjs/core/DetailCard/index.js +1 -1
- package/dist/cjs/core/DonutChart/index.js +2 -2
- package/dist/cjs/core/DropdownMenu/index.js +1 -1
- package/dist/cjs/core/ExpandableList/ExpandIcon.js +1 -1
- package/dist/cjs/core/ExpandableList/ExpandableContainer.js +1 -1
- package/dist/cjs/core/ExpandableList/ExpandableItem.js +2 -2
- package/dist/cjs/core/ExpandableList/RoundOrder.js +1 -1
- package/dist/cjs/core/FailedLoad/index.js +1 -1
- package/dist/cjs/core/FormItem/index.js +1 -1
- package/dist/cjs/core/Icon/index.js +1 -1
- package/dist/cjs/core/ImmersiveDialog/styles.js +14 -14
- package/dist/cjs/core/Input/index.js +1 -1
- package/dist/cjs/core/InputGroup/index.js +1 -1
- package/dist/cjs/core/InputInteger/index.js +1 -1
- package/dist/cjs/core/InputNumber/index.js +1 -1
- package/dist/cjs/core/InputPassword/index.js +1 -1
- package/dist/cjs/core/InputTagItem/index.js +1 -1
- package/dist/cjs/core/LegacySelect/select.style.js +1 -1
- package/dist/cjs/core/Legend/index.js +5 -5
- package/dist/cjs/core/LineChart/LineChartActions.js +2 -2
- package/dist/cjs/core/LineChart/TooltipFormatter.js +1 -1
- package/dist/cjs/core/LineChart/styled.js +9 -9
- package/dist/cjs/core/Link/index.js +1 -1
- package/dist/cjs/core/Loading/style.js +4 -4
- package/dist/cjs/core/LocalUpload/LocalUpload.style.js +2 -2
- package/dist/cjs/core/LogView/LogView.js +354 -0
- package/dist/cjs/core/LogView/LogView.style.js +31 -0
- package/dist/cjs/core/LogView/LogView.utils.js +154 -0
- package/dist/cjs/core/MediumDialog/MediumDialog.js +1 -1
- package/dist/cjs/core/Metric/styled.js +8 -8
- package/dist/cjs/core/Nav/index.js +1 -1
- package/dist/cjs/core/Nav/style.js +2 -2
- package/dist/cjs/core/Overflow/index.js +2 -2
- package/dist/cjs/core/Pagination/index.js +2 -2
- package/dist/cjs/core/Progress/components.js +2 -2
- package/dist/cjs/core/Progress/index.js +2 -2
- package/dist/cjs/core/Progress/progress.style.js +4 -4
- package/dist/cjs/core/Progress/progress.widgets.js +2 -2
- package/dist/cjs/core/Radio/index.js +3 -3
- package/dist/cjs/core/SearchInput/SearchInput.style.js +5 -5
- package/dist/cjs/core/SegmentControl/index.js +4 -4
- package/dist/cjs/core/Select/select.style.js +4 -4
- package/dist/cjs/core/Select/select.widgets.js +3 -3
- package/dist/cjs/core/SimplePagination/index.js +2 -2
- package/dist/cjs/core/Skeleton/Content.js +1 -1
- package/dist/cjs/core/SmallDialog/SmallDialog.style.js +7 -7
- package/dist/cjs/core/StatusCapsule/index.js +2 -2
- package/dist/cjs/core/StepProgress/index.js +1 -1
- package/dist/cjs/core/Steps/style.js +5 -5
- package/dist/cjs/core/Styled/index.js +40 -40
- package/dist/cjs/core/Switch/index.js +2 -2
- package/dist/cjs/core/Tab/Tab.js +1 -1
- package/dist/cjs/core/Tab/Tab.style.js +4 -4
- package/dist/cjs/core/Table/TableSkeleton.js +1 -1
- package/dist/cjs/core/Table/TableWidget.js +1 -1
- package/dist/cjs/core/Table/index.js +3 -3
- package/dist/cjs/core/TableForm/Columns/FormItem.js +1 -1
- package/dist/cjs/core/TableForm/style.js +7 -7
- package/dist/cjs/core/Tag/SplitTag.js +1 -1
- package/dist/cjs/core/Tag/style.js +5 -5
- package/dist/cjs/core/Time/index.js +1 -1
- package/dist/cjs/core/TimeZoneSelect/index.js +7 -7
- package/dist/cjs/core/Timeline/Timeline.style.js +5 -5
- package/dist/cjs/core/Token/index.js +4 -4
- package/dist/cjs/core/Token/style.js +1 -1
- package/dist/cjs/core/Tooltip/EllipsisTooltipContent.js +1 -1
- package/dist/cjs/core/Tooltip/index.js +1 -1
- package/dist/cjs/core/Truncate/index.js +1 -1
- package/dist/cjs/core/Typo/index.js +109 -57
- package/dist/cjs/core/WizardDialog/styles.js +4 -4
- package/dist/cjs/coreX/BarChart/index.js +1 -1
- package/dist/cjs/coreX/BatchOperation/index.js +2 -2
- package/dist/cjs/coreX/ChartWithTooltip/index.js +6 -6
- package/dist/cjs/coreX/CheckPointList/checkpointlist.style.js +3 -3
- package/dist/cjs/coreX/CircleLoading/index.js +1 -1
- package/dist/cjs/coreX/CronCalendar/index.js +4 -4
- package/dist/cjs/coreX/CronPlan/index.js +4 -4
- package/dist/cjs/coreX/DateRangePicker/DateRangePicker.style.js +12 -12
- package/dist/cjs/coreX/DateRangePicker/RelativeTime.js +1 -1
- package/dist/cjs/coreX/Dialogs/DeleteDialog/DeleteDialog.js +2 -2
- package/dist/cjs/coreX/Dialogs/RejectDialog/RejectDialog.js +6 -6
- package/dist/cjs/coreX/GoBackButton/index.js +1 -1
- package/dist/cjs/coreX/I18nNameTag/index.js +1 -1
- package/dist/cjs/coreX/InfoRowList/InfoRow.js +1 -1
- package/dist/cjs/coreX/InfoRowList/InfoRowList.js +4 -4
- package/dist/cjs/coreX/KubeConfigModal/KubeConfigModal.style.js +8 -8
- package/dist/cjs/coreX/NamesTooltip/index.js +3 -3
- package/dist/cjs/coreX/OverflowTooltip/index.js +4 -4
- package/dist/cjs/coreX/Sider/index.js +3 -3
- package/dist/cjs/coreX/SummaryTable/index.js +5 -5
- package/dist/cjs/coreX/SwitchWithText/index.js +1 -1
- package/dist/cjs/coreX/TabMenu/index.js +2 -2
- package/dist/cjs/coreX/UnderlineTootip/index.js +1 -1
- package/dist/cjs/coreX/UnitWithChart/index.js +3 -3
- package/dist/cjs/index.js +3 -0
- package/dist/cjs/stats1.html +1 -1
- package/dist/components.css +3509 -3151
- package/dist/esm/core/AccordionCard/index.js +1 -1
- package/dist/esm/core/Alert/alert.style.js +2 -2
- package/dist/esm/core/Avatar/index.js +1 -1
- package/dist/esm/core/Banner/banner.style.js +4 -4
- package/dist/esm/core/BasicCTError/BasicCTError.style.js +1 -1
- package/dist/esm/core/BlankState/style.js +1 -1
- package/dist/esm/core/Breadcrumb/index.js +1 -1
- package/dist/esm/core/Button/index.js +1 -1
- package/dist/esm/core/ButtonGroup/index.js +2 -2
- package/dist/esm/core/Card/CardBody.js +1 -1
- package/dist/esm/core/Card/CardTitle.js +1 -1
- package/dist/esm/core/Card/CardWrapper.js +2 -2
- package/dist/esm/core/Cascader/cascader.style.js +11 -11
- package/dist/esm/core/Checkbox/checkbox.style.js +1 -1
- package/dist/esm/core/DetailCard/index.js +1 -1
- package/dist/esm/core/DonutChart/index.js +2 -2
- package/dist/esm/core/DropdownMenu/index.js +1 -1
- package/dist/esm/core/ExpandableList/ExpandIcon.js +1 -1
- package/dist/esm/core/ExpandableList/ExpandableContainer.js +1 -1
- package/dist/esm/core/ExpandableList/ExpandableItem.js +2 -2
- package/dist/esm/core/ExpandableList/RoundOrder.js +1 -1
- package/dist/esm/core/FailedLoad/index.js +1 -1
- package/dist/esm/core/FormItem/index.js +1 -1
- package/dist/esm/core/Icon/index.js +1 -1
- package/dist/esm/core/ImmersiveDialog/styles.js +14 -14
- package/dist/esm/core/Input/index.js +1 -1
- package/dist/esm/core/InputGroup/index.js +1 -1
- package/dist/esm/core/InputInteger/index.js +1 -1
- package/dist/esm/core/InputNumber/index.js +1 -1
- package/dist/esm/core/InputPassword/index.js +1 -1
- package/dist/esm/core/InputTagItem/index.js +1 -1
- package/dist/esm/core/LegacySelect/select.style.js +1 -1
- package/dist/esm/core/Legend/index.js +5 -5
- package/dist/esm/core/LineChart/LineChartActions.js +2 -2
- package/dist/esm/core/LineChart/TooltipFormatter.js +1 -1
- package/dist/esm/core/LineChart/styled.js +9 -9
- package/dist/esm/core/Link/index.js +1 -1
- package/dist/esm/core/Loading/style.js +4 -4
- package/dist/esm/core/LocalUpload/LocalUpload.style.js +2 -2
- package/dist/esm/core/LogView/LogView.js +348 -0
- package/dist/esm/core/LogView/LogView.style.js +25 -0
- package/dist/esm/core/LogView/LogView.utils.js +144 -0
- package/dist/esm/core/MediumDialog/MediumDialog.js +1 -1
- package/dist/esm/core/Metric/styled.js +8 -8
- package/dist/esm/core/Nav/index.js +1 -1
- package/dist/esm/core/Nav/style.js +2 -2
- package/dist/esm/core/Overflow/index.js +2 -2
- package/dist/esm/core/Pagination/index.js +2 -2
- package/dist/esm/core/Progress/components.js +2 -2
- package/dist/esm/core/Progress/index.js +2 -2
- package/dist/esm/core/Progress/progress.style.js +4 -4
- package/dist/esm/core/Progress/progress.widgets.js +2 -2
- package/dist/esm/core/Radio/index.js +3 -3
- package/dist/esm/core/SearchInput/SearchInput.style.js +5 -5
- package/dist/esm/core/SegmentControl/index.js +4 -4
- package/dist/esm/core/Select/select.style.js +4 -4
- package/dist/esm/core/Select/select.widgets.js +3 -3
- package/dist/esm/core/SimplePagination/index.js +2 -2
- package/dist/esm/core/Skeleton/Content.js +1 -1
- package/dist/esm/core/SmallDialog/SmallDialog.style.js +7 -7
- package/dist/esm/core/StatusCapsule/index.js +2 -2
- package/dist/esm/core/StepProgress/index.js +1 -1
- package/dist/esm/core/Steps/style.js +5 -5
- package/dist/esm/core/Styled/index.js +40 -40
- package/dist/esm/core/Switch/index.js +2 -2
- package/dist/esm/core/Tab/Tab.js +1 -1
- package/dist/esm/core/Tab/Tab.style.js +4 -4
- package/dist/esm/core/Table/TableSkeleton.js +1 -1
- package/dist/esm/core/Table/TableWidget.js +1 -1
- package/dist/esm/core/Table/index.js +3 -3
- package/dist/esm/core/TableForm/Columns/FormItem.js +1 -1
- package/dist/esm/core/TableForm/style.js +7 -7
- package/dist/esm/core/Tag/SplitTag.js +1 -1
- package/dist/esm/core/Tag/style.js +5 -5
- package/dist/esm/core/Time/index.js +1 -1
- package/dist/esm/core/TimeZoneSelect/index.js +7 -7
- package/dist/esm/core/Timeline/Timeline.style.js +5 -5
- package/dist/esm/core/Token/index.js +4 -4
- package/dist/esm/core/Token/style.js +1 -1
- package/dist/esm/core/Tooltip/EllipsisTooltipContent.js +1 -1
- package/dist/esm/core/Tooltip/index.js +1 -1
- package/dist/esm/core/Truncate/index.js +1 -1
- package/dist/esm/core/Typo/index.js +109 -58
- package/dist/esm/core/WizardDialog/styles.js +4 -4
- package/dist/esm/coreX/BarChart/index.js +1 -1
- package/dist/esm/coreX/BatchOperation/index.js +2 -2
- package/dist/esm/coreX/ChartWithTooltip/index.js +6 -6
- package/dist/esm/coreX/CheckPointList/checkpointlist.style.js +3 -3
- package/dist/esm/coreX/CircleLoading/index.js +1 -1
- package/dist/esm/coreX/CronCalendar/index.js +4 -4
- package/dist/esm/coreX/CronPlan/index.js +4 -4
- package/dist/esm/coreX/DateRangePicker/DateRangePicker.style.js +12 -12
- package/dist/esm/coreX/DateRangePicker/RelativeTime.js +1 -1
- package/dist/esm/coreX/Dialogs/DeleteDialog/DeleteDialog.js +2 -2
- package/dist/esm/coreX/Dialogs/RejectDialog/RejectDialog.js +6 -6
- package/dist/esm/coreX/GoBackButton/index.js +1 -1
- package/dist/esm/coreX/I18nNameTag/index.js +1 -1
- package/dist/esm/coreX/InfoRowList/InfoRow.js +1 -1
- package/dist/esm/coreX/InfoRowList/InfoRowList.js +4 -4
- package/dist/esm/coreX/KubeConfigModal/KubeConfigModal.style.js +8 -8
- package/dist/esm/coreX/NamesTooltip/index.js +3 -3
- package/dist/esm/coreX/OverflowTooltip/index.js +4 -4
- package/dist/esm/coreX/Sider/index.js +3 -3
- package/dist/esm/coreX/SummaryTable/index.js +5 -5
- package/dist/esm/coreX/SwitchWithText/index.js +1 -1
- package/dist/esm/coreX/TabMenu/index.js +2 -2
- package/dist/esm/coreX/UnderlineTootip/index.js +1 -1
- package/dist/esm/coreX/UnitWithChart/index.js +3 -3
- package/dist/esm/index.js +2 -1
- package/dist/esm/stats1.html +1 -1
- package/dist/linaria.merged.scss +2617 -2505
- package/dist/src/core/LogView/LogView.d.ts +3 -0
- package/dist/src/core/LogView/LogView.style.d.ts +6 -0
- package/dist/src/core/LogView/LogView.types.d.ts +103 -0
- package/dist/src/core/LogView/LogView.utils.d.ts +23 -0
- package/dist/src/core/LogView/index.d.ts +2 -0
- package/dist/src/core/Typo/index.d.ts +51 -1
- package/dist/src/core/index.d.ts +1 -0
- package/dist/stories/docs/core/LogView.stories.d.ts +156 -0
- package/dist/style.css +3513 -3156
- package/dist/token.css +229 -455
- package/dist/variables.scss +1 -1
- package/docs/core/LogView/guide.md +187 -0
- package/docs/llms.txt +3 -1
- package/package.json +14 -5
package/dist/variables.scss
CHANGED
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
# LogView
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
|
|
5
|
+
LogView 是基于 xterm 封装的日志查看器组件,用于展示静态日志文本或通过 EventSource 追加的流式日志。组件内置顶部搜索栏、搜索结果导航、滚动缓冲控制、终端尺寸自适应,以及空状态和错误状态的自定义渲染能力。
|
|
6
|
+
|
|
7
|
+
## 何时使用
|
|
8
|
+
|
|
9
|
+
- 展示任务、主机、集群、控制器等对象的运行日志
|
|
10
|
+
- 需要在大量日志中搜索关键字,并在匹配结果之间跳转
|
|
11
|
+
- 需要接入 SSE / EventSource 实时追加日志流
|
|
12
|
+
- 长时间运行的日志流需要限制历史缓冲行数,控制内存占用
|
|
13
|
+
|
|
14
|
+
不要使用:
|
|
15
|
+
|
|
16
|
+
- 展示结构化数据列表 --> 请用 `Table`
|
|
17
|
+
- 仅展示短文本或状态描述 --> 请用 `Typo` / `Alert`
|
|
18
|
+
- 需要编辑命令或交互式终端输入 --> LogView 默认禁用 stdin,需使用专门的终端组件
|
|
19
|
+
|
|
20
|
+
## 基础用法
|
|
21
|
+
|
|
22
|
+
通过 `content` 传入完整日志文本,换行内容会按终端逐行渲染。默认显示顶部搜索栏,用户输入关键字后可以在命中结果之间上下跳转。
|
|
23
|
+
|
|
24
|
+
```tsx
|
|
25
|
+
import React from "react";
|
|
26
|
+
import { LogView } from "@cloudtower/eagle";
|
|
27
|
+
|
|
28
|
+
const logContent = [
|
|
29
|
+
"[2026-04-24 14:30:00.101] INFO node-01 bootstrap started",
|
|
30
|
+
"[2026-04-24 14:30:01.233] INFO node-01 loading cluster metadata",
|
|
31
|
+
"[2026-04-24 14:30:04.889] ERROR node-03 failed to fetch event payload",
|
|
32
|
+
].join("\n");
|
|
33
|
+
|
|
34
|
+
const App = () => <LogView content={logContent} rows={16} />;
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## 常见模式
|
|
38
|
+
|
|
39
|
+
### 模式一:关闭搜索栏
|
|
40
|
+
|
|
41
|
+
适用于只需要纯日志视图,或外层页面已经提供统一搜索入口的场景。
|
|
42
|
+
|
|
43
|
+
```tsx
|
|
44
|
+
import React from "react";
|
|
45
|
+
import { LogView } from "@cloudtower/eagle";
|
|
46
|
+
|
|
47
|
+
const App = () => <LogView content={logContent} rows={12} showSearch={false} />;
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 模式二:实时追加日志
|
|
51
|
+
|
|
52
|
+
如果外部已经通过接口轮询、WebSocket 或其他方式拿到增量日志,可以把日志拼接为新的 `content` 传入。组件会在新内容以前一次内容为前缀时只追加增量,避免整屏清空重绘。
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
import React, { useEffect, useState } from "react";
|
|
56
|
+
import { LogView } from "@cloudtower/eagle";
|
|
57
|
+
|
|
58
|
+
const App = () => {
|
|
59
|
+
const [logs, setLogs] = useState<string[]>([]);
|
|
60
|
+
|
|
61
|
+
useEffect(() => {
|
|
62
|
+
const timer = window.setInterval(() => {
|
|
63
|
+
setLogs((prevLogs) => [
|
|
64
|
+
...prevLogs,
|
|
65
|
+
`[${new Date().toISOString()}] INFO receive log chunk`,
|
|
66
|
+
]);
|
|
67
|
+
}, 1000);
|
|
68
|
+
|
|
69
|
+
return () => window.clearInterval(timer);
|
|
70
|
+
}, []);
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<LogView
|
|
74
|
+
content={logs.length > 0 ? `${logs.join("\n")}\n` : ""}
|
|
75
|
+
rows={14}
|
|
76
|
+
scrollback={1000}
|
|
77
|
+
/>
|
|
78
|
+
);
|
|
79
|
+
};
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### 模式三:接入 EventSource 日志流
|
|
83
|
+
|
|
84
|
+
启用 `eventSource` 后,通过 `eventSourceOptions` 配置 SSE 地址、事件名、重连和消息格式化逻辑。`formatMessage` 应返回写入终端的字符串;组件会在缺少换行时自动补充 `\n`。
|
|
85
|
+
|
|
86
|
+
```tsx
|
|
87
|
+
import React from "react";
|
|
88
|
+
import { LogView } from "@cloudtower/eagle";
|
|
89
|
+
|
|
90
|
+
const App = () => (
|
|
91
|
+
<LogView
|
|
92
|
+
rows={18}
|
|
93
|
+
eventSource
|
|
94
|
+
eventSourceOptions={{
|
|
95
|
+
url: "/api/tasks/task-001/logs/stream",
|
|
96
|
+
reconnect: true,
|
|
97
|
+
reconnectWait: 3,
|
|
98
|
+
formatMessage: (message) => {
|
|
99
|
+
const data = JSON.parse(message);
|
|
100
|
+
|
|
101
|
+
return `[${data.time}] ${data.level} ${data.content}`;
|
|
102
|
+
},
|
|
103
|
+
onError: (error) => {
|
|
104
|
+
console.error("日志流连接失败:", error);
|
|
105
|
+
},
|
|
106
|
+
}}
|
|
107
|
+
/>
|
|
108
|
+
);
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### 模式四:自定义空状态和错误状态
|
|
112
|
+
|
|
113
|
+
当没有 `content` 且未接收到日志数据时,可以通过 `emptyRenderer` 渲染空态。EventSource 连接报错时可以通过 `errorRenderer` 展示错误说明,并调用第三个参数 `reconnect` 触发重新连接。
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
import React from "react";
|
|
117
|
+
import { Button, LogView } from "@cloudtower/eagle";
|
|
118
|
+
|
|
119
|
+
const App = () => (
|
|
120
|
+
<LogView
|
|
121
|
+
eventSource
|
|
122
|
+
eventSourceOptions={{
|
|
123
|
+
url: "/api/tasks/task-001/logs/stream",
|
|
124
|
+
reconnect: false,
|
|
125
|
+
}}
|
|
126
|
+
emptyRenderer={() => (
|
|
127
|
+
<div style={{ textAlign: "center" }}>等待日志输出...</div>
|
|
128
|
+
)}
|
|
129
|
+
errorRenderer={(_terminal, _error, reconnect) => (
|
|
130
|
+
<div style={{ textAlign: "center" }}>
|
|
131
|
+
<div>日志流连接失败</div>
|
|
132
|
+
<Button type="primary" onClick={reconnect}>
|
|
133
|
+
重新连接
|
|
134
|
+
</Button>
|
|
135
|
+
</div>
|
|
136
|
+
)}
|
|
137
|
+
/>
|
|
138
|
+
);
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
### 模式五:大日志量搜索优化
|
|
142
|
+
|
|
143
|
+
日志量较大时,建议限制 `searchHighlightLimit`,并适当调大搜索框防抖时间,避免一次性高亮过多命中结果导致页面卡顿。
|
|
144
|
+
|
|
145
|
+
```tsx
|
|
146
|
+
import React from "react";
|
|
147
|
+
import { LogView } from "@cloudtower/eagle";
|
|
148
|
+
|
|
149
|
+
const App = () => (
|
|
150
|
+
<LogView
|
|
151
|
+
content={largeLogContent}
|
|
152
|
+
rows={18}
|
|
153
|
+
scrollback={100000}
|
|
154
|
+
searchHighlightLimit={1000}
|
|
155
|
+
searchInputProps={{
|
|
156
|
+
debounceWait: 400,
|
|
157
|
+
placeholder: "搜索日志关键字",
|
|
158
|
+
}}
|
|
159
|
+
/>
|
|
160
|
+
);
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### 模式六:键盘快捷键
|
|
164
|
+
|
|
165
|
+
LogView 默认接管终端区域内的翻页、复制和全选快捷键,以匹配日志查看体验。外层页面需要统一处理键盘行为时,可以关闭 `enableKeyboardShortcuts`。
|
|
166
|
+
|
|
167
|
+
```tsx
|
|
168
|
+
import React from "react";
|
|
169
|
+
import { LogView } from "@cloudtower/eagle";
|
|
170
|
+
|
|
171
|
+
const App = () => (
|
|
172
|
+
<LogView content={logContent} enableKeyboardShortcuts={false} />
|
|
173
|
+
);
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## 注意事项
|
|
177
|
+
|
|
178
|
+
- `content` 适合静态日志或外部已合并好的实时日志;直接使用 SSE 时优先配置 `eventSource` 和 `eventSourceOptions`。
|
|
179
|
+
- 大日志量场景下同时设置 `scrollback` 和 `searchHighlightLimit`,避免无限保留历史行和过多搜索高亮带来的性能问题。
|
|
180
|
+
- `searchInputProps` 会覆盖内置搜索框属性,修改 `onChange`、`onSearchNext` 或 `onSearchPrev` 时要确认不会破坏日志搜索导航。
|
|
181
|
+
- `emptyRenderer` 和 `errorRenderer` 会覆盖在终端上方,适合展示轻量提示和操作入口,不建议放置复杂表单。
|
|
182
|
+
|
|
183
|
+
## 相关组件
|
|
184
|
+
|
|
185
|
+
- `SearchInput`:LogView 顶部搜索栏基于 SearchInput 封装
|
|
186
|
+
- `Table`:展示结构化日志列表或审计事件时使用
|
|
187
|
+
- `Alert`:展示短提示、告警或错误说明时使用
|
package/docs/llms.txt
CHANGED
|
@@ -55,6 +55,7 @@ npm 包名:@cloudtower/eagle
|
|
|
55
55
|
## 数据展示
|
|
56
56
|
|
|
57
57
|
- [Table](core/Table/guide.md): 表格组件,基于 antd Table 二次封装,支持排序、行选择、展开行、加载/错误状态
|
|
58
|
+
- [LogView](core/LogView/guide.md): 日志查看器,基于 xterm 封装,支持静态日志、EventSource 流式日志、搜索导航和滚动缓冲控制
|
|
58
59
|
- Tab: 标签页,封装 antd Tabs
|
|
59
60
|
- Collapse: 折叠面板(继承 antd Collapse)
|
|
60
61
|
- Tag: 标签,支持多种预设颜色
|
|
@@ -97,7 +98,8 @@ npm 包名:@cloudtower/eagle
|
|
|
97
98
|
- Icon: 图标容器,统一图标尺寸和样式
|
|
98
99
|
- BaseIcon: 基础图标,支持 SVG 图标渲染
|
|
99
100
|
- Link: 链接,封装 antd Typography.Link
|
|
100
|
-
- Typo: 排版样式集合,提供 Display/Heading/Label/Paragraph 等预定义的 Linaria
|
|
101
|
+
- Typo: 排版样式集合,提供 Display/Heading/Label/Paragraph 等预定义的 Linaria 类名;若需要根据 Figma Typography 名称查找对应样式,请使用公开导出的 `FIGMA_TO_TYPO`
|
|
102
|
+
- Color: 颜色 token;若目标文件已依赖全局 Sass 变量或已有 `$...` 写法,优先使用 `dist/variables.scss` 中的 Sass 变量,否则优先使用公开导出的 `Color.*`
|
|
101
103
|
- Loading: 加载中动画,三条竖线动画
|
|
102
104
|
- CircleLoading: 圆形加载动画,旋转渐变圆形图标
|
|
103
105
|
- Space: 间距组件,封装 antd Space
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudtower/eagle",
|
|
3
|
-
"version": "4100.0.
|
|
3
|
+
"version": "4100.0.3",
|
|
4
4
|
"main": "dist/cjs/index.js",
|
|
5
5
|
"module": "./dist/esm/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
@@ -24,18 +24,25 @@
|
|
|
24
24
|
"typings": "tsc --emitDeclarationOnly && tsc-alias",
|
|
25
25
|
"storybook": "storybook dev -p 6006",
|
|
26
26
|
"build-storybook": "storybook build",
|
|
27
|
-
"
|
|
27
|
+
"check:color": "node tools/sync-figma-color.js --check",
|
|
28
|
+
"sync:color": "node tools/sync-figma-color.js --write",
|
|
29
|
+
"check:typography": "node tools/sync-figma-typography.js --check",
|
|
30
|
+
"sync:typography": "node tools/sync-figma-typography.js --write"
|
|
28
31
|
},
|
|
29
32
|
"dependencies": {
|
|
30
|
-
"@cloudtower/icons-react": "^4100.0.
|
|
31
|
-
"@cloudtower/parrot": "^4100.0.
|
|
33
|
+
"@cloudtower/icons-react": "^4100.0.3",
|
|
34
|
+
"@cloudtower/parrot": "^4100.0.3",
|
|
32
35
|
"@cloudtower/rc-notification": "^4.6.1",
|
|
33
36
|
"@linaria/core": "^4.2.2",
|
|
34
37
|
"@linaria/react": "^4.3.0",
|
|
38
|
+
"@xterm/addon-fit": "^0.10.0",
|
|
39
|
+
"@xterm/addon-search": "^0.15.0",
|
|
40
|
+
"@xterm/xterm": "^5.5.0",
|
|
35
41
|
"antd": "4.5.0",
|
|
36
42
|
"antd5": "npm:antd@5.14.0",
|
|
37
43
|
"classnames": "2.3.2",
|
|
38
44
|
"dayjs": "^1.11.10",
|
|
45
|
+
"eventsource": "^3.0.5",
|
|
39
46
|
"react-beautiful-dnd": "^13.0.0",
|
|
40
47
|
"react-copy-to-clipboard": "^5.1.0",
|
|
41
48
|
"react-highlight-words": "^0.17.0",
|
|
@@ -79,8 +86,10 @@
|
|
|
79
86
|
"@types/react-highlight-words": "^0.16.7",
|
|
80
87
|
"@types/react-is": "^17.0.3",
|
|
81
88
|
"@types/react-transition-group": "4.2.4",
|
|
89
|
+
"@types/xterm": "^3.0.0",
|
|
82
90
|
"@vitejs/plugin-react": "^4.2.1",
|
|
83
91
|
"copy-to-clipboard": "^3.3.3",
|
|
92
|
+
"dotenv": "^16.4.7",
|
|
84
93
|
"history": "^4.9.0",
|
|
85
94
|
"i18next": "^23.2.3",
|
|
86
95
|
"jsdom": "^20.0.1",
|
|
@@ -116,5 +125,5 @@
|
|
|
116
125
|
"vite": "^4.5.1",
|
|
117
126
|
"vitest": "^3.1.1"
|
|
118
127
|
},
|
|
119
|
-
"gitHead": "
|
|
128
|
+
"gitHead": "a8964b044e5339e8122bf19f8b010f36e2ae7b16"
|
|
120
129
|
}
|