cc98-cli 0.2.0 → 0.3.0

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 (137) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +4 -2
  3. package/dist/api/client.d.ts +26 -15
  4. package/dist/api/client.d.ts.map +1 -1
  5. package/dist/api/client.js +96 -30
  6. package/dist/api/client.js.map +1 -1
  7. package/dist/api/endpoints.d.ts +14 -0
  8. package/dist/api/endpoints.d.ts.map +1 -1
  9. package/dist/api/endpoints.js +21 -1
  10. package/dist/api/endpoints.js.map +1 -1
  11. package/dist/cli/commands/board.d.ts.map +1 -1
  12. package/dist/cli/commands/board.js +15 -0
  13. package/dist/cli/commands/board.js.map +1 -1
  14. package/dist/cli/commands/me.d.ts.map +1 -1
  15. package/dist/cli/commands/me.js +18 -3
  16. package/dist/cli/commands/me.js.map +1 -1
  17. package/dist/cli/commands/message.d.ts.map +1 -1
  18. package/dist/cli/commands/message.js +10 -0
  19. package/dist/cli/commands/message.js.map +1 -1
  20. package/dist/cli/commands/post.d.ts.map +1 -1
  21. package/dist/cli/commands/post.js +12 -0
  22. package/dist/cli/commands/post.js.map +1 -1
  23. package/dist/cli/commands/topic.d.ts.map +1 -1
  24. package/dist/cli/commands/topic.js +41 -5
  25. package/dist/cli/commands/topic.js.map +1 -1
  26. package/dist/cli/commands/user.d.ts.map +1 -1
  27. package/dist/cli/commands/user.js +12 -0
  28. package/dist/cli/commands/user.js.map +1 -1
  29. package/dist/cli/router.js +8 -1
  30. package/dist/cli/router.js.map +1 -1
  31. package/dist/tui/app-new.d.ts +2 -0
  32. package/dist/tui/app-new.d.ts.map +1 -0
  33. package/dist/tui/app-new.js +2589 -0
  34. package/dist/tui/app-new.js.map +1 -0
  35. package/dist/tui/app-old.d.ts +2 -0
  36. package/dist/tui/app-old.d.ts.map +1 -0
  37. package/dist/tui/app-old.js +2589 -0
  38. package/dist/tui/app-old.js.map +1 -0
  39. package/dist/tui/app.d.ts.map +1 -1
  40. package/dist/tui/app.js +14 -1724
  41. package/dist/tui/app.js.map +1 -1
  42. package/dist/tui/borders.d.ts +183 -0
  43. package/dist/tui/borders.d.ts.map +1 -0
  44. package/dist/tui/borders.js +143 -0
  45. package/dist/tui/borders.js.map +1 -0
  46. package/dist/tui/cached-client.d.ts +23 -0
  47. package/dist/tui/cached-client.d.ts.map +1 -1
  48. package/dist/tui/cached-client.js +88 -0
  49. package/dist/tui/cached-client.js.map +1 -1
  50. package/dist/tui/components/content.d.ts +11 -0
  51. package/dist/tui/components/content.d.ts.map +1 -0
  52. package/dist/tui/components/content.js +129 -0
  53. package/dist/tui/components/content.js.map +1 -0
  54. package/dist/tui/components/header.d.ts +7 -0
  55. package/dist/tui/components/header.d.ts.map +1 -0
  56. package/dist/tui/components/header.js +38 -0
  57. package/dist/tui/components/header.js.map +1 -0
  58. package/dist/tui/components/index.d.ts +8 -0
  59. package/dist/tui/components/index.d.ts.map +1 -0
  60. package/dist/tui/components/index.js +9 -0
  61. package/dist/tui/components/index.js.map +1 -0
  62. package/dist/tui/components/layout.d.ts +3 -0
  63. package/dist/tui/components/layout.d.ts.map +1 -0
  64. package/dist/tui/components/layout.js +464 -0
  65. package/dist/tui/components/layout.js.map +1 -0
  66. package/dist/tui/components/overview.d.ts +7 -0
  67. package/dist/tui/components/overview.d.ts.map +1 -0
  68. package/dist/tui/components/overview.js +20 -0
  69. package/dist/tui/components/overview.js.map +1 -0
  70. package/dist/tui/components/sidebar.d.ts +7 -0
  71. package/dist/tui/components/sidebar.d.ts.map +1 -0
  72. package/dist/tui/components/sidebar.js +58 -0
  73. package/dist/tui/components/sidebar.js.map +1 -0
  74. package/dist/tui/components/status.d.ts +8 -0
  75. package/dist/tui/components/status.d.ts.map +1 -0
  76. package/dist/tui/components/status.js +36 -0
  77. package/dist/tui/components/status.js.map +1 -0
  78. package/dist/tui/components/types.d.ts +17 -0
  79. package/dist/tui/components/types.d.ts.map +1 -0
  80. package/dist/tui/components/types.js +3 -0
  81. package/dist/tui/components/types.js.map +1 -0
  82. package/dist/tui/components/utils.d.ts +5 -0
  83. package/dist/tui/components/utils.d.ts.map +1 -0
  84. package/dist/tui/components/utils.js +68 -0
  85. package/dist/tui/components/utils.js.map +1 -0
  86. package/dist/tui/controller.d.ts +61 -0
  87. package/dist/tui/controller.d.ts.map +1 -0
  88. package/dist/tui/controller.js +1118 -0
  89. package/dist/tui/controller.js.map +1 -0
  90. package/dist/tui/helpers.d.ts +25 -0
  91. package/dist/tui/helpers.d.ts.map +1 -0
  92. package/dist/tui/helpers.js +240 -0
  93. package/dist/tui/helpers.js.map +1 -0
  94. package/dist/tui/keymap/actions.d.ts +9 -0
  95. package/dist/tui/keymap/actions.d.ts.map +1 -0
  96. package/dist/tui/keymap/actions.js +208 -0
  97. package/dist/tui/keymap/actions.js.map +1 -0
  98. package/dist/tui/keymap/bindings.d.ts +5 -0
  99. package/dist/tui/keymap/bindings.d.ts.map +1 -0
  100. package/dist/tui/keymap/bindings.js +138 -0
  101. package/dist/tui/keymap/bindings.js.map +1 -0
  102. package/dist/tui/keymap/index.d.ts +4 -0
  103. package/dist/tui/keymap/index.d.ts.map +1 -0
  104. package/dist/tui/keymap/index.js +5 -0
  105. package/dist/tui/keymap/index.js.map +1 -0
  106. package/dist/tui/keymap/types.d.ts +17 -0
  107. package/dist/tui/keymap/types.d.ts.map +1 -0
  108. package/dist/tui/keymap/types.js +3 -0
  109. package/dist/tui/keymap/types.js.map +1 -0
  110. package/dist/tui/navigation.d.ts +4 -0
  111. package/dist/tui/navigation.d.ts.map +1 -0
  112. package/dist/tui/navigation.js +20 -0
  113. package/dist/tui/navigation.js.map +1 -0
  114. package/dist/tui/renderer.d.ts +6 -0
  115. package/dist/tui/renderer.d.ts.map +1 -0
  116. package/dist/tui/renderer.js +302 -0
  117. package/dist/tui/renderer.js.map +1 -0
  118. package/dist/tui/state/index.d.ts +3 -0
  119. package/dist/tui/state/index.d.ts.map +1 -0
  120. package/dist/tui/state/index.js +4 -0
  121. package/dist/tui/state/index.js.map +1 -0
  122. package/dist/tui/state/store.d.ts +4 -0
  123. package/dist/tui/state/store.d.ts.map +1 -0
  124. package/dist/tui/state/store.js +61 -0
  125. package/dist/tui/state/store.js.map +1 -0
  126. package/dist/tui/state/types.d.ts +137 -0
  127. package/dist/tui/state/types.d.ts.map +1 -0
  128. package/dist/tui/state/types.js +3 -0
  129. package/dist/tui/state/types.js.map +1 -0
  130. package/dist/tui/topic-reader.d.ts +10 -0
  131. package/dist/tui/topic-reader.d.ts.map +1 -0
  132. package/dist/tui/topic-reader.js +167 -0
  133. package/dist/tui/topic-reader.js.map +1 -0
  134. package/dist/version.d.ts +1 -1
  135. package/dist/version.js +1 -1
  136. package/package.json +2 -2
  137. /package/{docs/images → images}/tui.jpg +0 -0
@@ -0,0 +1,464 @@
1
+ // 布局组件 - 使用正确的 Unicode 框绘制
2
+ import { ansi, bg, fg } from "../ansi.js";
3
+ import { fit, cellWidth } from "./utils.js";
4
+ import { BOX_ROUNDED } from "../borders.js";
5
+ // 颜色常量
6
+ const cc98Blue = fg(0, 130, 202);
7
+ const cc98BlueSoft = fg(94, 180, 232);
8
+ const cc98BlueBg = bg(0, 104, 176);
9
+ const white = fg(245, 250, 255);
10
+ const muted = fg(139, 152, 166);
11
+ const line = fg(52, 84, 112);
12
+ const danger = fg(245, 101, 101);
13
+ const ok = fg(91, 207, 140);
14
+ // 使用圆角框样式
15
+ const style = BOX_ROUNDED;
16
+ // 绘制完整的三栏布局
17
+ export function drawThreeColumnLayout(state, width, height, sidebarWidth, rightWidth) {
18
+ const lines = [];
19
+ const mainWidth = width - sidebarWidth - rightWidth - 2;
20
+ const overviewHeight = 1;
21
+ const bodyHeight = height - 4 - overviewHeight;
22
+ // 1. 顶部标题栏
23
+ lines.push(drawHeader(state, width));
24
+ // 2. 顶部连接线
25
+ if (rightWidth > 0) {
26
+ lines.push(line +
27
+ style.topLeft +
28
+ style.horizontal.repeat(sidebarWidth - 2) +
29
+ style.teeDown +
30
+ style.horizontal.repeat(mainWidth - 2) +
31
+ style.teeDown +
32
+ style.horizontal.repeat(rightWidth - 2) +
33
+ style.topRight +
34
+ ansi.reset);
35
+ }
36
+ else {
37
+ lines.push(line +
38
+ style.topLeft +
39
+ style.horizontal.repeat(sidebarWidth - 2) +
40
+ style.teeDown +
41
+ style.horizontal.repeat(mainWidth - 2) +
42
+ style.topRight +
43
+ ansi.reset);
44
+ }
45
+ // 3. 概览区
46
+ lines.push(...drawOverview(state, width, overviewHeight));
47
+ // 4. 分隔线
48
+ if (rightWidth > 0) {
49
+ lines.push(line +
50
+ style.teeRight +
51
+ style.horizontal.repeat(sidebarWidth - 2) +
52
+ style.cross +
53
+ style.horizontal.repeat(mainWidth - 2) +
54
+ style.cross +
55
+ style.horizontal.repeat(rightWidth - 2) +
56
+ style.teeLeft +
57
+ ansi.reset);
58
+ }
59
+ else {
60
+ lines.push(line +
61
+ style.teeRight +
62
+ style.horizontal.repeat(sidebarWidth - 2) +
63
+ style.cross +
64
+ style.horizontal.repeat(mainWidth - 2) +
65
+ style.teeLeft +
66
+ ansi.reset);
67
+ }
68
+ // 5. 主内容区
69
+ const sidebarLines = drawSidebar(state, sidebarWidth, bodyHeight);
70
+ const mainLines = drawMainContent(state, mainWidth, bodyHeight);
71
+ const rightLines = rightWidth > 0 ? drawRightPanel(state, rightWidth, bodyHeight) : [];
72
+ for (let row = 0; row < bodyHeight; row++) {
73
+ const parts = [
74
+ line + style.vertical + ansi.reset,
75
+ fit(sidebarLines[row] ?? "", sidebarWidth - 2),
76
+ line + style.vertical + ansi.reset,
77
+ fit(mainLines[row] ?? "", mainWidth - 2),
78
+ ];
79
+ if (rightWidth > 0) {
80
+ parts.push(line + style.vertical + ansi.reset, fit(rightLines[row] ?? "", rightWidth - 2), line + style.vertical + ansi.reset);
81
+ }
82
+ else {
83
+ parts.push(line + style.vertical + ansi.reset);
84
+ }
85
+ lines.push(parts.join(""));
86
+ }
87
+ // 6. 底部连接线
88
+ if (rightWidth > 0) {
89
+ lines.push(line +
90
+ style.bottomLeft +
91
+ style.horizontal.repeat(sidebarWidth - 2) +
92
+ style.teeUp +
93
+ style.horizontal.repeat(mainWidth - 2) +
94
+ style.teeUp +
95
+ style.horizontal.repeat(rightWidth - 2) +
96
+ style.bottomRight +
97
+ ansi.reset);
98
+ }
99
+ else {
100
+ lines.push(line +
101
+ style.bottomLeft +
102
+ style.horizontal.repeat(sidebarWidth - 2) +
103
+ style.teeUp +
104
+ style.horizontal.repeat(mainWidth - 2) +
105
+ style.bottomRight +
106
+ ansi.reset);
107
+ }
108
+ // 7. 状态栏
109
+ lines.push(drawStatusBar(state, width));
110
+ return lines.slice(0, height);
111
+ }
112
+ // 绘制顶部标题栏
113
+ function drawHeader(state, width) {
114
+ const account = state.account ? `@${state.account}` : "未登录";
115
+ const title = ` CC98 ${state.viewTitle} `;
116
+ const padding = Math.max(1, width - cellWidth(title) - cellWidth(account));
117
+ return `${cc98BlueBg}${white}${ansi.bold}${fit(`${title}${" ".repeat(padding)}${account}`, width)}${ansi.reset}`;
118
+ }
119
+ // 绘制概览区
120
+ function drawOverview(state, width, height) {
121
+ const rows = [];
122
+ const summary = state.overview.length > 0
123
+ ? state.overview.map((entry) => `${entry.title} ${entry.detail ?? "-"}`).join(" ")
124
+ : "全站概览会在读取十大时更新";
125
+ rows.push(fit(`${cc98BlueSoft} ${summary}`, width));
126
+ return rows.slice(0, height);
127
+ }
128
+ // 绘制左侧导航
129
+ function drawSidebar(state, width, height) {
130
+ const rows = [];
131
+ const navItems = [
132
+ { id: "hot", label: "十大", hint: "热门话题" },
133
+ { id: "favorite", label: "收藏", hint: "版面帖子" },
134
+ { id: "new", label: "最新", hint: "新帖流" },
135
+ { id: "boards", label: "版面", hint: "所有分区" },
136
+ { id: "following", label: "关注", hint: "用户动态" },
137
+ { id: "messages", label: "消息", hint: "未读与私信" },
138
+ { id: "notices", label: "通知", hint: "系统与回复" },
139
+ { id: "me", label: "我的", hint: "当前账号" },
140
+ { id: "more", label: "更多", hint: "只读内容" },
141
+ { id: "settings", label: "设置", hint: "账号与配置" }
142
+ ];
143
+ for (let index = 0; index < height; index++) {
144
+ const nav = navItems[index];
145
+ if (!nav) {
146
+ rows.push(" ".repeat(width));
147
+ continue;
148
+ }
149
+ const active = index === state.navIndex;
150
+ const focused = state.focus === "nav";
151
+ const label = ` ${nav.label}`;
152
+ const hint = width > 14 ? ` ${nav.hint}` : "";
153
+ const text = fit(`${label}${hint}`, width);
154
+ if (active && focused) {
155
+ rows.push(`${bg(0, 130, 202)}${white}${text}${ansi.reset}`);
156
+ }
157
+ else if (active) {
158
+ rows.push(`${bg(5, 46, 74)}${cc98BlueSoft}${text}${ansi.reset}`);
159
+ }
160
+ else {
161
+ rows.push(`${cc98Blue}${label}${ansi.reset}${muted}${fit(hint, Math.max(0, width - cellWidth(label)))}${ansi.reset}`);
162
+ }
163
+ }
164
+ return rows;
165
+ }
166
+ // 绘制主内容区
167
+ function drawMainContent(state, width, height) {
168
+ if (state.mode === "topic") {
169
+ return drawTopicContent(state, width, height);
170
+ }
171
+ if (state.loading) {
172
+ return drawLoadingContent(state, width, height);
173
+ }
174
+ if (state.error) {
175
+ return drawErrorContent(state, width, height);
176
+ }
177
+ return drawListContent(state, width, height);
178
+ }
179
+ // 绘制加载中内容
180
+ function drawLoadingContent(state, width, height) {
181
+ const rows = [];
182
+ rows.push(`${cc98Blue}${ansi.bold} ${state.viewTitle}${ansi.reset}`);
183
+ rows.push(fit(`${muted} 正在加载...${ansi.reset}`, width));
184
+ rows.push(`${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`);
185
+ rows.push(`${muted} ${"· ".repeat(Math.max(1, Math.floor((width - 2) / 2))).slice(0, width - 1)}${ansi.reset}`);
186
+ while (rows.length < height) {
187
+ rows.push(" ".repeat(width));
188
+ }
189
+ return rows.slice(0, height);
190
+ }
191
+ // 绘制错误内容
192
+ function drawErrorContent(state, width, height) {
193
+ const rows = [];
194
+ rows.push(`${cc98Blue}${ansi.bold} ${state.viewTitle}${ansi.reset}`);
195
+ rows.push(`${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`);
196
+ rows.push(`${danger} 请求失败${ansi.reset}`);
197
+ rows.push(fit(` ${state.error}`, width));
198
+ while (rows.length < height) {
199
+ rows.push(" ".repeat(width));
200
+ }
201
+ return rows.slice(0, height);
202
+ }
203
+ // 绘制列表内容
204
+ function drawListContent(state, width, height) {
205
+ const rows = [];
206
+ rows.push(`${cc98Blue}${ansi.bold} ${state.viewTitle}${ansi.reset}`);
207
+ rows.push(`${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`);
208
+ const visibleCapacity = Math.max(1, Math.floor(Math.max(1, height - 3) / 3));
209
+ if (state.itemIndex < state.scroll) {
210
+ state.scroll = state.itemIndex;
211
+ }
212
+ else if (state.itemIndex >= state.scroll + visibleCapacity) {
213
+ state.scroll = state.itemIndex - visibleCapacity + 1;
214
+ }
215
+ const visible = state.items.slice(state.scroll);
216
+ visible.forEach((itemValue, offset) => {
217
+ if (rows.length >= height) {
218
+ return;
219
+ }
220
+ const index = state.scroll + offset;
221
+ const active = index === state.itemIndex && (state.focus === "content" || state.mode === "settings");
222
+ const prefix = active ? `${ok}●${ansi.reset}` : `${muted}•${ansi.reset}`;
223
+ const title = fit(` ${itemValue.title}`, Math.max(10, width - 2));
224
+ rows.push(active ? `${bg(5, 46, 74)}${prefix}${title}${ansi.reset}` : fit(`${prefix}${title}`, width));
225
+ if (itemValue.meta && rows.length < height) {
226
+ rows.push(fit(` ${muted}${itemValue.meta}${ansi.reset}`, width));
227
+ }
228
+ });
229
+ if (visible.length === 0) {
230
+ rows.push(`${muted} 暂无数据${ansi.reset}`);
231
+ }
232
+ while (rows.length < height) {
233
+ rows.push(" ".repeat(width));
234
+ }
235
+ return rows.slice(0, height);
236
+ }
237
+ // 绘制帖子内容
238
+ function drawTopicContent(state, width, height) {
239
+ const rows = [];
240
+ if (state.loading && (!state.topic || state.topic.lines.length === 0)) {
241
+ rows.push(`${cc98Blue} 正在打开帖子...${ansi.reset}`);
242
+ rows.push("");
243
+ rows.push(`${muted} 只加载第一页,不预取未读楼层。${ansi.reset}`);
244
+ while (rows.length < height) {
245
+ rows.push(" ".repeat(width));
246
+ }
247
+ return rows.slice(0, height);
248
+ }
249
+ if (state.error) {
250
+ rows.push(`${danger} 读取帖子失败${ansi.reset}`);
251
+ rows.push(fit(` ${state.error}`, width));
252
+ rows.push("");
253
+ rows.push(`${muted} h/Esc 返回列表${ansi.reset}`);
254
+ while (rows.length < height) {
255
+ rows.push(" ".repeat(width));
256
+ }
257
+ return rows.slice(0, height);
258
+ }
259
+ const topic = state.topic;
260
+ if (!topic) {
261
+ return Array(height).fill(" ".repeat(width));
262
+ }
263
+ rows.push(`${cc98Blue}${ansi.bold} ${topic.title}${ansi.reset}`);
264
+ rows.push(fit(`${muted} ${topic.meta}${ansi.reset}`, width));
265
+ rows.push(`${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`);
266
+ const viewport = Math.max(0, height - rows.length - 1);
267
+ const maxScroll = Math.max(0, topic.lines.length - viewport);
268
+ state.scroll = Math.min(state.scroll, maxScroll);
269
+ const body = topic.lines.slice(state.scroll, state.scroll + viewport);
270
+ for (const bodyLine of body) {
271
+ if (bodyLine.startsWith("[image ")) {
272
+ rows.push(fit(`${cc98BlueSoft}${bodyLine}${ansi.reset}`, width));
273
+ }
274
+ else if (bodyLine.startsWith("│ ")) {
275
+ rows.push(fit(`${muted}${bodyLine}${ansi.reset}`, width));
276
+ }
277
+ else if (/^#\d+ /.test(bodyLine)) {
278
+ rows.push(fit(`${ok}${bodyLine}${ansi.reset}`, width));
279
+ }
280
+ else {
281
+ rows.push(fit(` ${bodyLine}`, width));
282
+ }
283
+ }
284
+ const pageInfo = topic.hasMore
285
+ ? `已载入 ${topic.loaded} 楼,n 下一页`
286
+ : `已载入 ${topic.loaded} 楼,已到底`;
287
+ rows.push(fit(`${muted}${pageInfo}${state.loadingMore ? " · 加载中" : ""}${ansi.reset}`, width));
288
+ while (rows.length < height) {
289
+ rows.push(" ".repeat(width));
290
+ }
291
+ return rows.slice(0, height);
292
+ }
293
+ // 绘制右侧面板
294
+ function drawRightPanel(state, width, height) {
295
+ if (state.mode === "topic" && state.topic) {
296
+ return drawTopicRight(state.topic, state.scroll, width, height);
297
+ }
298
+ if (state.focus === "nav") {
299
+ return drawNavRight(state, width, height);
300
+ }
301
+ return drawItemRight(state, width, height);
302
+ }
303
+ // 绘制导航右侧面板
304
+ function drawNavRight(state, width, height) {
305
+ const rows = [];
306
+ const navItems = [
307
+ { id: "hot", label: "十大", hint: "热门话题" },
308
+ { id: "favorite", label: "收藏", hint: "版面帖子" },
309
+ { id: "new", label: "最新", hint: "新帖流" },
310
+ { id: "boards", label: "版面", hint: "所有分区" },
311
+ { id: "following", label: "关注", hint: "用户动态" },
312
+ { id: "messages", label: "消息", hint: "未读与私信" },
313
+ { id: "notices", label: "通知", hint: "系统与回复" },
314
+ { id: "me", label: "我的", hint: "当前账号" },
315
+ { id: "more", label: "更多", hint: "只读内容" },
316
+ { id: "settings", label: "设置", hint: "账号与配置" }
317
+ ];
318
+ const nav = navItems[state.navIndex];
319
+ rows.push(`${cc98Blue}${ansi.bold} ${nav?.label ?? ""}${ansi.reset}`);
320
+ rows.push(`${muted} ${nav?.hint ?? ""}${ansi.reset}`);
321
+ rows.push(`${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`);
322
+ for (const stat of state.stats) {
323
+ if (rows.length >= height)
324
+ break;
325
+ rows.push(`${muted} ${stat.title}${ansi.reset}`);
326
+ if (stat.detail) {
327
+ rows.push(`${cc98BlueSoft} ${stat.detail}${ansi.reset}`);
328
+ }
329
+ }
330
+ if (rows.length < height) {
331
+ rows.push(`${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`);
332
+ }
333
+ if (rows.length < height) {
334
+ rows.push(`${muted} j/k 切换栏目${ansi.reset}`);
335
+ }
336
+ if (rows.length < height) {
337
+ rows.push(`${muted} l/Enter 进入内容${ansi.reset}`);
338
+ }
339
+ if (rows.length < height) {
340
+ rows.push(`${muted} r 刷新当前栏目${ansi.reset}`);
341
+ }
342
+ while (rows.length < height) {
343
+ rows.push(" ".repeat(width));
344
+ }
345
+ return rows.slice(0, height);
346
+ }
347
+ // 绘制列表项右侧面板
348
+ function drawItemRight(state, width, height) {
349
+ const rows = [];
350
+ const selected = state.items[state.itemIndex];
351
+ if (!selected) {
352
+ return Array(height).fill(" ".repeat(width));
353
+ }
354
+ rows.push(`${cc98Blue}${ansi.bold} ${selected.title}${ansi.reset}`);
355
+ rows.push(`${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`);
356
+ if (selected.meta) {
357
+ rows.push(`${muted} ${selected.meta}${ansi.reset}`);
358
+ }
359
+ if (selected.detail) {
360
+ rows.push(`${cc98BlueSoft} ${selected.detail}${ansi.reset}`);
361
+ }
362
+ while (rows.length < height) {
363
+ rows.push(" ".repeat(width));
364
+ }
365
+ return rows.slice(0, height);
366
+ }
367
+ // 绘制帖子右侧面板
368
+ function drawTopicRight(topic, scroll, width, height) {
369
+ const rows = [];
370
+ const currentPost = topic.posts.find((p) => scroll >= p.lineStart && scroll <= p.lineEnd);
371
+ rows.push(`${cc98Blue}${ansi.bold} 帖子信息${ansi.reset}`);
372
+ rows.push(`${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`);
373
+ if (currentPost) {
374
+ rows.push(`${muted} 楼层: #${currentPost.floor ?? "?"}${ansi.reset}`);
375
+ rows.push(`${muted} 作者: ${currentPost.author}${ansi.reset}`);
376
+ rows.push(`${muted} 时间: ${currentPost.time}${ansi.reset}`);
377
+ if (currentPost.likeCount > 0) {
378
+ rows.push(`${ok} 赞: ${currentPost.likeCount}${ansi.reset}`);
379
+ }
380
+ if (currentPost.dislikeCount > 0) {
381
+ rows.push(`${danger} 踩: ${currentPost.dislikeCount}${ansi.reset}`);
382
+ }
383
+ if (currentPost.rating) {
384
+ rows.push(`${muted} 评分: ${currentPost.rating}${ansi.reset}`);
385
+ }
386
+ if (currentPost.imageCount > 0) {
387
+ rows.push(`${muted} 图片: ${currentPost.imageCount}${ansi.reset}`);
388
+ }
389
+ if (currentPost.linkCount > 0) {
390
+ rows.push(`${muted} 链接: ${currentPost.linkCount}${ansi.reset}`);
391
+ }
392
+ }
393
+ rows.push(`${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`);
394
+ rows.push(`${muted} 当前: ${scroll + 1}/${topic.lines.length}${ansi.reset}`);
395
+ rows.push(`${muted} 已加载: ${topic.loaded} 楼${ansi.reset}`);
396
+ while (rows.length < height) {
397
+ rows.push(" ".repeat(width));
398
+ }
399
+ return rows.slice(0, height);
400
+ }
401
+ // 绘制状态栏
402
+ function drawStatusBar(state, width) {
403
+ const left = getStatus(state);
404
+ const right = getKeyHints(state);
405
+ const padding = Math.max(1, width - cellWidth(left) - cellWidth(right) - 2);
406
+ return fit(`${muted} ${left}${" ".repeat(padding)}${right} `, width);
407
+ }
408
+ // 获取状态文本
409
+ function getStatus(state) {
410
+ if (state.loading) {
411
+ return "加载中...";
412
+ }
413
+ if (state.error) {
414
+ return `错误: ${state.error}`;
415
+ }
416
+ if (state.inputMode) {
417
+ return state.inputPrompt;
418
+ }
419
+ return state.status || getDefaultStatus(state);
420
+ }
421
+ // 获取默认状态文本
422
+ function getDefaultStatus(state) {
423
+ switch (state.mode) {
424
+ case "topic":
425
+ return "j/k 滚动 n 下页 s 收藏 l 赞 d 踩 u 用户 h 返回";
426
+ case "settings":
427
+ return "j/k 选择 l 执行 h 返回";
428
+ default:
429
+ if (state.currentBoard) {
430
+ return `版面 #${state.currentBoard.boardId}: j/k 选择 l 打开 h 返回 r 刷新`;
431
+ }
432
+ if (state.currentChat) {
433
+ return `私信: j/k 滚动 n 更多 h 返回`;
434
+ }
435
+ return "j/k 选择 l 进入 h 返回 / 搜索 r 刷新 ? 帮助";
436
+ }
437
+ }
438
+ // 获取快捷键提示
439
+ function getKeyHints(state) {
440
+ const hints = [];
441
+ hints.push("j/k ↑↓ 移动");
442
+ hints.push("h← 返回");
443
+ hints.push("l→ 进入");
444
+ hints.push("Enter 确认");
445
+ if (state.mode === "topic") {
446
+ hints.push("s 收藏");
447
+ hints.push("l 赞");
448
+ hints.push("d 踩");
449
+ hints.push("u 用户");
450
+ hints.push("n 下页");
451
+ hints.push("【/】楼层");
452
+ hints.push("数字跳楼");
453
+ }
454
+ else if (state.currentChat) {
455
+ hints.push("n 更多");
456
+ }
457
+ hints.push("/ 搜索");
458
+ hints.push("r 刷新");
459
+ hints.push("o 操作");
460
+ hints.push("? 帮助");
461
+ hints.push("q 退出");
462
+ return hints.join(" ");
463
+ }
464
+ //# sourceMappingURL=layout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/tui/components/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { TuiState } from "../state/types.js";
2
+ import type { Component } from "./types.js";
3
+ export declare class Overview implements Component {
4
+ visible: boolean;
5
+ render(state: TuiState, width: number, height: number): string[];
6
+ }
7
+ //# sourceMappingURL=overview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview.d.ts","sourceRoot":"","sources":["../../../src/tui/components/overview.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C,qBAAa,QAAS,YAAW,SAAS;IACxC,OAAO,UAAQ;IAEf,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;CAajE"}
@@ -0,0 +1,20 @@
1
+ // 概览区组件
2
+ import { fg } from "../ansi.js";
3
+ import { fit } from "./utils.js";
4
+ const cc98BlueSoft = fg(94, 180, 232);
5
+ const line = fg(52, 84, 112);
6
+ export class Overview {
7
+ visible = true;
8
+ render(state, width, height) {
9
+ const rows = [];
10
+ const summary = state.overview.length > 0
11
+ ? state.overview.map((entry) => `${entry.title} ${entry.detail ?? "-"}`).join(" ")
12
+ : "全站概览会在读取十大时更新";
13
+ rows.push(fit(`${cc98BlueSoft} ${summary}`, width));
14
+ if (height > 1) {
15
+ rows.push(`${line}${"─".repeat(width)}`);
16
+ }
17
+ return rows.slice(0, height);
18
+ }
19
+ }
20
+ //# sourceMappingURL=overview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview.js","sourceRoot":"","sources":["../../../src/tui/components/overview.ts"],"names":[],"mappings":"AAAA,QAAQ;AAIR,OAAO,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAChC,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACtC,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AAE7B,MAAM,OAAO,QAAQ;IACnB,OAAO,GAAG,IAAI,CAAC;IAEf,MAAM,CAAC,KAAe,EAAE,KAAa,EAAE,MAAc;QACnD,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;YACvC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACnF,CAAC,CAAC,eAAe,CAAC;QACpB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,IAAI,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAEpD,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC/B,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import type { TuiState } from "../state/types.js";
2
+ import type { Component } from "./types.js";
3
+ export declare class Sidebar implements Component {
4
+ visible: boolean;
5
+ render(state: TuiState, width: number, height: number): string[];
6
+ }
7
+ //# sourceMappingURL=sidebar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.d.ts","sourceRoot":"","sources":["../../../src/tui/components/sidebar.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAW,MAAM,mBAAmB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAsB5C,qBAAa,OAAQ,YAAW,SAAS;IACvC,OAAO,UAAQ;IAEf,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;CAoCjE"}
@@ -0,0 +1,58 @@
1
+ // 左栏导航组件
2
+ import { ansi, bg, fg } from "../ansi.js";
3
+ import { fit, cellWidth } from "./utils.js";
4
+ const cc98Blue = fg(0, 130, 202);
5
+ const cc98BlueSoft = fg(94, 180, 232);
6
+ const white = fg(245, 250, 255);
7
+ const muted = fg(139, 152, 166);
8
+ const navItems = [
9
+ { id: "hot", label: "十大", hint: "热门话题" },
10
+ { id: "favorite", label: "收藏", hint: "版面帖子" },
11
+ { id: "new", label: "最新", hint: "新帖流" },
12
+ { id: "boards", label: "版面", hint: "所有分区" },
13
+ { id: "following", label: "关注", hint: "用户动态" },
14
+ { id: "messages", label: "消息", hint: "未读与私信" },
15
+ { id: "notices", label: "通知", hint: "系统与回复" },
16
+ { id: "me", label: "我的", hint: "当前账号" },
17
+ { id: "more", label: "更多", hint: "只读内容" },
18
+ { id: "settings", label: "设置", hint: "账号与配置" }
19
+ ];
20
+ export class Sidebar {
21
+ visible = true;
22
+ render(state, width, height) {
23
+ const rows = [];
24
+ // 计算滚动窗口:确保选中项可见
25
+ const total = navItems.length;
26
+ let offset = 0;
27
+ if (total > height) {
28
+ // 选中项在窗口中间偏上
29
+ offset = Math.max(0, state.navIndex - Math.floor(height / 3));
30
+ // 不超过最大偏移
31
+ offset = Math.min(offset, total - height);
32
+ }
33
+ for (let row = 0; row < height; row += 1) {
34
+ const index = offset + row;
35
+ const nav = navItems[index];
36
+ if (!nav) {
37
+ rows.push(" ".repeat(width));
38
+ continue;
39
+ }
40
+ const active = index === state.navIndex;
41
+ const focused = state.focus === "nav";
42
+ const label = ` ${nav.label}`;
43
+ const hint = width > 16 ? ` ${nav.hint}` : "";
44
+ const text = fit(`${label}${hint}`, width);
45
+ if (active && focused) {
46
+ rows.push(`${bg(0, 130, 202)}${white}${text}${ansi.reset}`);
47
+ }
48
+ else if (active) {
49
+ rows.push(`${bg(5, 46, 74)}${cc98BlueSoft}${text}${ansi.reset}`);
50
+ }
51
+ else {
52
+ rows.push(`${cc98Blue}${label}${ansi.reset}${muted}${fit(hint, Math.max(0, width - cellWidth(label)))}${ansi.reset}`);
53
+ }
54
+ }
55
+ return rows;
56
+ }
57
+ }
58
+ //# sourceMappingURL=sidebar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidebar.js","sourceRoot":"","sources":["../../../src/tui/components/sidebar.ts"],"names":[],"mappings":"AAAA,SAAS;AAIT,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,QAAQ,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACjC,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACtC,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAChC,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEhC,MAAM,QAAQ,GAAc;IAC1B,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;IACxC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;IAC7C,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE;IACvC,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3C,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;IAC9C,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;IAC9C,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;IAC7C,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;IACvC,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;IACzC,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;CAC/C,CAAC;AAEF,MAAM,OAAO,OAAO;IAClB,OAAO,GAAG,IAAI,CAAC;IAEf,MAAM,CAAC,KAAe,EAAE,KAAa,EAAE,MAAc;QACnD,MAAM,IAAI,GAAa,EAAE,CAAC;QAE1B,iBAAiB;QACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,KAAK,GAAG,MAAM,EAAE,CAAC;YACnB,aAAa;YACb,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YAC9D,UAAU;YACV,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,GAAG,MAAM,CAAC,CAAC;QAC5C,CAAC;QAED,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;YACzC,MAAM,KAAK,GAAG,MAAM,GAAG,GAAG,CAAC;YAC3B,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;gBAC7B,SAAS;YACX,CAAC;YAED,MAAM,MAAM,GAAG,KAAK,KAAK,KAAK,CAAC,QAAQ,CAAC;YACxC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,EAAE,EAAE,KAAK,CAAC,CAAC;YAC3C,IAAI,MAAM,IAAI,OAAO,EAAE,CAAC;gBACtB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9D,CAAC;iBAAM,IAAI,MAAM,EAAE,CAAC;gBAClB,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,YAAY,GAAG,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,KAAK,GAAG,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YACxH,CAAC;QACH,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import type { TuiState } from "../state/types.js";
2
+ import type { Component } from "./types.js";
3
+ export declare class StatusBar implements Component {
4
+ visible: boolean;
5
+ render(state: TuiState, width: number): string;
6
+ private getKeyHints;
7
+ }
8
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/tui/components/status.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAQ5C,qBAAa,SAAU,YAAW,SAAS;IACzC,OAAO,UAAQ;IAEf,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;IAU9C,OAAO,CAAC,WAAW;CAiBpB"}