cc98-cli 0.1.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 (160) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/README.md +46 -179
  3. package/dist/api/client.d.ts +29 -15
  4. package/dist/api/client.d.ts.map +1 -1
  5. package/dist/api/client.js +163 -31
  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/api/types.d.ts +12 -0
  12. package/dist/api/types.d.ts.map +1 -1
  13. package/dist/cli/commands/board.d.ts.map +1 -1
  14. package/dist/cli/commands/board.js +15 -0
  15. package/dist/cli/commands/board.js.map +1 -1
  16. package/dist/cli/commands/cache.d.ts +2 -0
  17. package/dist/cli/commands/cache.d.ts.map +1 -0
  18. package/dist/cli/commands/cache.js +68 -0
  19. package/dist/cli/commands/cache.js.map +1 -0
  20. package/dist/cli/commands/me.d.ts.map +1 -1
  21. package/dist/cli/commands/me.js +18 -3
  22. package/dist/cli/commands/me.js.map +1 -1
  23. package/dist/cli/commands/message.d.ts.map +1 -1
  24. package/dist/cli/commands/message.js +10 -0
  25. package/dist/cli/commands/message.js.map +1 -1
  26. package/dist/cli/commands/post.d.ts.map +1 -1
  27. package/dist/cli/commands/post.js +12 -0
  28. package/dist/cli/commands/post.js.map +1 -1
  29. package/dist/cli/commands/topic.d.ts.map +1 -1
  30. package/dist/cli/commands/topic.js +41 -5
  31. package/dist/cli/commands/topic.js.map +1 -1
  32. package/dist/cli/commands/update.d.ts +2 -0
  33. package/dist/cli/commands/update.d.ts.map +1 -0
  34. package/dist/cli/commands/update.js +24 -0
  35. package/dist/cli/commands/update.js.map +1 -0
  36. package/dist/cli/commands/user.d.ts.map +1 -1
  37. package/dist/cli/commands/user.js +12 -0
  38. package/dist/cli/commands/user.js.map +1 -1
  39. package/dist/cli/router.d.ts.map +1 -1
  40. package/dist/cli/router.js +18 -2
  41. package/dist/cli/router.js.map +1 -1
  42. package/dist/storage/cache-store.d.ts +45 -2
  43. package/dist/storage/cache-store.d.ts.map +1 -1
  44. package/dist/storage/cache-store.js +158 -5
  45. package/dist/storage/cache-store.js.map +1 -1
  46. package/dist/storage/token-store.js +1 -1
  47. package/dist/storage/token-store.js.map +1 -1
  48. package/dist/tui/app-new.d.ts +2 -0
  49. package/dist/tui/app-new.d.ts.map +1 -0
  50. package/dist/tui/app-new.js +2589 -0
  51. package/dist/tui/app-new.js.map +1 -0
  52. package/dist/tui/app-old.d.ts +2 -0
  53. package/dist/tui/app-old.d.ts.map +1 -0
  54. package/dist/tui/app-old.js +2589 -0
  55. package/dist/tui/app-old.js.map +1 -0
  56. package/dist/tui/app.d.ts.map +1 -1
  57. package/dist/tui/app.js +14 -1055
  58. package/dist/tui/app.js.map +1 -1
  59. package/dist/tui/borders.d.ts +183 -0
  60. package/dist/tui/borders.d.ts.map +1 -0
  61. package/dist/tui/borders.js +143 -0
  62. package/dist/tui/borders.js.map +1 -0
  63. package/dist/tui/cached-client.d.ts +43 -1
  64. package/dist/tui/cached-client.d.ts.map +1 -1
  65. package/dist/tui/cached-client.js +108 -2
  66. package/dist/tui/cached-client.js.map +1 -1
  67. package/dist/tui/components/content.d.ts +11 -0
  68. package/dist/tui/components/content.d.ts.map +1 -0
  69. package/dist/tui/components/content.js +129 -0
  70. package/dist/tui/components/content.js.map +1 -0
  71. package/dist/tui/components/header.d.ts +7 -0
  72. package/dist/tui/components/header.d.ts.map +1 -0
  73. package/dist/tui/components/header.js +38 -0
  74. package/dist/tui/components/header.js.map +1 -0
  75. package/dist/tui/components/index.d.ts +8 -0
  76. package/dist/tui/components/index.d.ts.map +1 -0
  77. package/dist/tui/components/index.js +9 -0
  78. package/dist/tui/components/index.js.map +1 -0
  79. package/dist/tui/components/layout.d.ts +3 -0
  80. package/dist/tui/components/layout.d.ts.map +1 -0
  81. package/dist/tui/components/layout.js +464 -0
  82. package/dist/tui/components/layout.js.map +1 -0
  83. package/dist/tui/components/overview.d.ts +7 -0
  84. package/dist/tui/components/overview.d.ts.map +1 -0
  85. package/dist/tui/components/overview.js +20 -0
  86. package/dist/tui/components/overview.js.map +1 -0
  87. package/dist/tui/components/sidebar.d.ts +7 -0
  88. package/dist/tui/components/sidebar.d.ts.map +1 -0
  89. package/dist/tui/components/sidebar.js +58 -0
  90. package/dist/tui/components/sidebar.js.map +1 -0
  91. package/dist/tui/components/status.d.ts +8 -0
  92. package/dist/tui/components/status.d.ts.map +1 -0
  93. package/dist/tui/components/status.js +36 -0
  94. package/dist/tui/components/status.js.map +1 -0
  95. package/dist/tui/components/types.d.ts +17 -0
  96. package/dist/tui/components/types.d.ts.map +1 -0
  97. package/dist/tui/components/types.js +3 -0
  98. package/dist/tui/components/types.js.map +1 -0
  99. package/dist/tui/components/utils.d.ts +5 -0
  100. package/dist/tui/components/utils.d.ts.map +1 -0
  101. package/dist/tui/components/utils.js +68 -0
  102. package/dist/tui/components/utils.js.map +1 -0
  103. package/dist/tui/controller.d.ts +61 -0
  104. package/dist/tui/controller.d.ts.map +1 -0
  105. package/dist/tui/controller.js +1118 -0
  106. package/dist/tui/controller.js.map +1 -0
  107. package/dist/tui/helpers.d.ts +25 -0
  108. package/dist/tui/helpers.d.ts.map +1 -0
  109. package/dist/tui/helpers.js +240 -0
  110. package/dist/tui/helpers.js.map +1 -0
  111. package/dist/tui/keymap/actions.d.ts +9 -0
  112. package/dist/tui/keymap/actions.d.ts.map +1 -0
  113. package/dist/tui/keymap/actions.js +208 -0
  114. package/dist/tui/keymap/actions.js.map +1 -0
  115. package/dist/tui/keymap/bindings.d.ts +5 -0
  116. package/dist/tui/keymap/bindings.d.ts.map +1 -0
  117. package/dist/tui/keymap/bindings.js +138 -0
  118. package/dist/tui/keymap/bindings.js.map +1 -0
  119. package/dist/tui/keymap/index.d.ts +4 -0
  120. package/dist/tui/keymap/index.d.ts.map +1 -0
  121. package/dist/tui/keymap/index.js +5 -0
  122. package/dist/tui/keymap/index.js.map +1 -0
  123. package/dist/tui/keymap/types.d.ts +17 -0
  124. package/dist/tui/keymap/types.d.ts.map +1 -0
  125. package/dist/tui/keymap/types.js +3 -0
  126. package/dist/tui/keymap/types.js.map +1 -0
  127. package/dist/tui/navigation.d.ts +4 -0
  128. package/dist/tui/navigation.d.ts.map +1 -0
  129. package/dist/tui/navigation.js +20 -0
  130. package/dist/tui/navigation.js.map +1 -0
  131. package/dist/tui/renderer.d.ts +6 -0
  132. package/dist/tui/renderer.d.ts.map +1 -0
  133. package/dist/tui/renderer.js +302 -0
  134. package/dist/tui/renderer.js.map +1 -0
  135. package/dist/tui/state/index.d.ts +3 -0
  136. package/dist/tui/state/index.d.ts.map +1 -0
  137. package/dist/tui/state/index.js +4 -0
  138. package/dist/tui/state/index.js.map +1 -0
  139. package/dist/tui/state/store.d.ts +4 -0
  140. package/dist/tui/state/store.d.ts.map +1 -0
  141. package/dist/tui/state/store.js +61 -0
  142. package/dist/tui/state/store.js.map +1 -0
  143. package/dist/tui/state/types.d.ts +137 -0
  144. package/dist/tui/state/types.d.ts.map +1 -0
  145. package/dist/tui/state/types.js +3 -0
  146. package/dist/tui/state/types.js.map +1 -0
  147. package/dist/tui/topic-reader.d.ts +10 -0
  148. package/dist/tui/topic-reader.d.ts.map +1 -0
  149. package/dist/tui/topic-reader.js +167 -0
  150. package/dist/tui/topic-reader.js.map +1 -0
  151. package/dist/update.d.ts +17 -0
  152. package/dist/update.d.ts.map +1 -0
  153. package/dist/update.js +88 -0
  154. package/dist/update.js.map +1 -0
  155. package/dist/version.d.ts +6 -0
  156. package/dist/version.d.ts.map +1 -0
  157. package/dist/version.js +6 -0
  158. package/dist/version.js.map +1 -0
  159. package/images/tui.jpg +0 -0
  160. package/package.json +4 -2
@@ -5,9 +5,9 @@ const hour = 60 * minute;
5
5
  export class CachedCc98Client {
6
6
  client;
7
7
  cache;
8
- constructor(client, cache = new CacheStore()) {
8
+ constructor(client, cache) {
9
9
  this.client = client;
10
- this.cache = cache;
10
+ this.cache = cache ?? new CacheStore();
11
11
  }
12
12
  getForumIndex(force = false, signal) {
13
13
  return this.cache.getOrSet("forum:index", 30 * second, () => this.client.getForumIndex({ signal }), { force });
@@ -18,6 +18,9 @@ export class CachedCc98Client {
18
18
  getAllBoards(force = false, signal) {
19
19
  return this.cache.getOrSet("forum:boards", 24 * hour, () => this.client.getAllBoards({ signal }), { force });
20
20
  }
21
+ getCardStat(force = false, signal) {
22
+ return this.cache.getOrSet("forum:card-stat", 5 * minute, () => this.client.getCardStat({ signal }), { force });
23
+ }
21
24
  getBoardInfo(boardId, force = false, signal) {
22
25
  return this.cache.getOrSet(`board:info:${boardId}`, 24 * hour, () => this.client.getBoardInfo(boardId, { signal }), { force });
23
26
  }
@@ -46,6 +49,13 @@ export class CachedCc98Client {
46
49
  }
47
50
  return this.cache.getOrSet(`user:basic:${uniqueIds.join(",")}`, 10 * minute, () => this.client.getBasicUsers(uniqueIds, { signal }), { force });
48
51
  }
52
+ getUsers(ids, force = false, signal) {
53
+ const uniqueIds = [...new Set(ids)].sort((a, b) => a - b);
54
+ if (uniqueIds.length === 0) {
55
+ return Promise.resolve([]);
56
+ }
57
+ return this.cache.getOrSet(`user:list:${uniqueIds.join(",")}`, 5 * minute, () => this.client.getUsers(uniqueIds, { signal }), { force });
58
+ }
49
59
  getMe(force = false, signal) {
50
60
  return this.cache.getOrSet("user:me", 60 * second, () => this.client.getMe({ signal }), { force });
51
61
  }
@@ -56,5 +66,101 @@ export class CachedCc98Client {
56
66
  const ttl = from === 0 ? 60 * second : 10 * minute;
57
67
  return this.cache.getOrSet(`topic:posts:${topicId}:${from}:${size}`, ttl, () => this.client.getTopicPosts(topicId, from, size, { signal }), { force });
58
68
  }
69
+ getRandomTopics(size = 10, force = false, signal) {
70
+ return this.cache.getOrSet(`topic:random:${size}`, 15 * second, () => this.client.getRandomTopics(size, { signal }), { force });
71
+ }
72
+ getFavoriteTopics(from = 0, size = 11, order = 1, groupId = 0, force = false, signal) {
73
+ return this.cache.getOrSet(`topic:favorites:${from}:${size}:${order}:${groupId}`, 30 * second, () => this.client.getFavoriteTopics(from, size, order, groupId, { signal }), { force });
74
+ }
75
+ getTopicVote(topicId, force = false, signal) {
76
+ return this.cache.getOrSet(`topic:vote:${topicId}`, 60 * second, () => this.client.getTopicVote(topicId, { signal }), { force });
77
+ }
78
+ getPostReactionState(postId, force = false, signal) {
79
+ return this.cache.getOrSet(`post:reaction-state:${postId}`, 10 * second, () => this.client.getPostReactionState(postId, { signal }), { force });
80
+ }
81
+ getPostRateReasons(type, force = false, signal) {
82
+ return this.cache.getOrSet(`post:rate-reasons:${type}`, 24 * hour, () => this.client.getPostRateReasons(type, { signal }), { force });
83
+ }
84
+ /**
85
+ * Clear all caches (memory + file)
86
+ */
87
+ async clearCache() {
88
+ await this.cache.clearAll();
89
+ }
90
+ // 搜索
91
+ async searchTopics(keyword, from = 0, size = 20, force = false, signal) {
92
+ return this.cache.getOrSet(`search:topics:${keyword}:${from}:${size}`, 30 * second, () => this.client.searchTopics(keyword, from, size, { signal }), { force });
93
+ }
94
+ async searchUsers(name, force = false, signal) {
95
+ return this.cache.getOrSet(`search:users:${name}`, 30 * second, () => this.client.searchUsers(name, { signal }), { force });
96
+ }
97
+ getFriendIds(type, from = 0, size = 10, force = false, signal) {
98
+ return this.cache.getOrSet(`user:${type}:${from}:${size}`, 60 * second, () => this.client.getFriendIds(type, from, size, { signal }), { force });
99
+ }
100
+ getFavoriteGroups(force = false, signal) {
101
+ return this.cache.getOrSet("user:favorite-groups", 5 * minute, () => this.client.getFavoriteGroups({ signal }), { force });
102
+ }
103
+ getNotices(type, from = 0, size = 10, force = false, signal) {
104
+ return this.cache.getOrSet(`notice:${type}:${from}:${size}`, 15 * second, () => this.client.getNotices(type, from, size, { signal }), { force });
105
+ }
106
+ getBrowseHistory(from = 0, size = 11, force = false, signal) {
107
+ return this.cache.getOrSet(`user:browse-history:${from}:${size}`, 30 * second, () => this.client.getBrowseHistory(from, size, { signal }), { force });
108
+ }
109
+ // 收藏
110
+ async isTopicFavorite(topicId, force = false, signal) {
111
+ const result = await this.cache.getOrSet(`topic:is-favorite:${topicId}`, 60 * second, () => this.client.isTopicFavorite(topicId, { signal }), { force });
112
+ return Boolean(result);
113
+ }
114
+ async addFavorite(topicId, groupId = 0) {
115
+ const result = await this.client.addFavorite(topicId, groupId);
116
+ this.cache.delete(`topic:is-favorite:${topicId}`);
117
+ return result;
118
+ }
119
+ async removeFavorite(topicId) {
120
+ const result = await this.client.removeFavorite(topicId);
121
+ this.cache.delete(`topic:is-favorite:${topicId}`);
122
+ return result;
123
+ }
124
+ // 点赞/踩
125
+ async reactToPost(postId, isLike) {
126
+ return this.client.reactToPost(postId, isLike);
127
+ }
128
+ // 用户
129
+ async getUserProfile(userId, force = false, signal) {
130
+ return this.cache.getOrSet(`user:profile:${userId}`, 5 * minute, () => this.client.getUserProfile(userId, { signal }), { force });
131
+ }
132
+ async getRecentTopics(userId, from = 0, size = 11, force = false, signal) {
133
+ return this.cache.getOrSet(`user:recent-topics:${userId ?? "me"}:${from}:${size}`, 30 * second, () => this.client.getRecentTopics(userId, from, size, { signal }), { force });
134
+ }
135
+ async followUser(userId) {
136
+ const result = await this.client.followUser(userId);
137
+ this.cache.delete(`user:profile:${userId}`);
138
+ return result;
139
+ }
140
+ async unfollowUser(userId) {
141
+ const result = await this.client.unfollowUser(userId);
142
+ this.cache.delete(`user:profile:${userId}`);
143
+ return result;
144
+ }
145
+ // 私信
146
+ async sendMessage(userId, content) {
147
+ return this.client.sendMessage(userId, content);
148
+ }
149
+ // 签到
150
+ async signin() {
151
+ return this.client.signin();
152
+ }
153
+ /**
154
+ * Run cache cleanup and return statistics
155
+ */
156
+ async cleanupCache() {
157
+ return this.cache.cleanupFileCache();
158
+ }
159
+ /**
160
+ * Get cache statistics
161
+ */
162
+ async getCacheStats() {
163
+ return this.cache.getStats();
164
+ }
59
165
  }
60
166
  //# sourceMappingURL=cached-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cached-client.js","sourceRoot":"","sources":["../../src/tui/cached-client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cached-client.js","sourceRoot":"","sources":["../../src/tui/cached-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { TuiState } from "../state/types.js";
2
+ import type { Component } from "./types.js";
3
+ export declare class Content implements Component {
4
+ visible: boolean;
5
+ render(state: TuiState, width: number, height: number): string[];
6
+ private renderLoading;
7
+ private renderError;
8
+ private renderList;
9
+ private renderTopic;
10
+ }
11
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../src/tui/components/content.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAY5C,qBAAa,OAAQ,YAAW,SAAS;IACvC,OAAO,UAAQ;IAEf,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE;IAgBhE,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,UAAU;IA8ClB,OAAO,CAAC,WAAW;CAmDpB"}
@@ -0,0 +1,129 @@
1
+ // 中栏内容组件
2
+ import { ansi, bg, fg } from "../ansi.js";
3
+ import { fit, blank } 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 line = fg(52, 84, 112);
9
+ const danger = fg(245, 101, 101);
10
+ const ok = fg(91, 207, 140);
11
+ export class Content {
12
+ visible = true;
13
+ render(state, width, height) {
14
+ if (state.mode === "topic") {
15
+ return this.renderTopic(state, width, height);
16
+ }
17
+ if (state.loading) {
18
+ return this.renderLoading(state, width, height);
19
+ }
20
+ if (state.error) {
21
+ return this.renderError(state, width, height);
22
+ }
23
+ return this.renderList(state, width, height);
24
+ }
25
+ renderLoading(state, width, height) {
26
+ return [
27
+ `${cc98Blue}${ansi.bold} ${state.viewTitle}${ansi.reset}`,
28
+ fit(`${muted} 正在加载...${ansi.reset}`, width),
29
+ `${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`,
30
+ `${muted} ${"· ".repeat(Math.max(1, Math.floor((width - 2) / 2))).slice(0, width - 1)}${ansi.reset}`
31
+ ].concat(blank(height - 4, width)).slice(0, height);
32
+ }
33
+ renderError(state, width, height) {
34
+ return [
35
+ `${cc98Blue}${ansi.bold} ${state.viewTitle}${ansi.reset}`,
36
+ `${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`,
37
+ `${danger} 请求失败${ansi.reset}`,
38
+ fit(` ${state.error}`, width)
39
+ ].concat(blank(height - 4, width)).slice(0, height);
40
+ }
41
+ renderList(state, width, height) {
42
+ const rows = [];
43
+ rows.push(`${cc98Blue}${ansi.bold} ${state.viewTitle}${ansi.reset}`);
44
+ rows.push(`${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`);
45
+ // 每项占2行(标题 + meta),计算可见容量
46
+ const headerRows = 2; // 标题 + 分隔线
47
+ const rowsPerItem = 2; // 标题行 + meta 行
48
+ const footerRows = 1; // 底部信息
49
+ const visibleCapacity = Math.max(1, Math.floor((height - headerRows - footerRows) / rowsPerItem));
50
+ // 滚动逻辑:确保选中项可见
51
+ if (state.itemIndex < state.scroll) {
52
+ state.scroll = state.itemIndex;
53
+ }
54
+ else if (state.itemIndex >= state.scroll + visibleCapacity) {
55
+ state.scroll = state.itemIndex - visibleCapacity + 1;
56
+ }
57
+ // 渲染可见项
58
+ const visible = state.items.slice(state.scroll, state.scroll + visibleCapacity);
59
+ for (let i = 0; i < visible.length; i++) {
60
+ const itemValue = visible[i];
61
+ const index = state.scroll + i;
62
+ const active = index === state.itemIndex && (state.focus === "content" || state.mode === "settings");
63
+ const prefix = active ? `${ok}●${ansi.reset}` : `${muted}•${ansi.reset}`;
64
+ const title = fit(` ${itemValue.title}`, Math.max(10, width - 2));
65
+ rows.push(active ? `${bg(5, 46, 74)}${prefix}${title}${ansi.reset}` : fit(`${prefix}${title}`, width));
66
+ if (itemValue.meta && rows.length < height) {
67
+ rows.push(fit(` ${muted}${itemValue.meta}${ansi.reset}`, width));
68
+ }
69
+ }
70
+ if (visible.length === 0) {
71
+ rows.push(`${muted} 暂无数据${ansi.reset}`);
72
+ }
73
+ // 底部滚动指示器
74
+ const remaining = state.items.length - state.scroll - visibleCapacity;
75
+ if (remaining > 0 && rows.length < height) {
76
+ rows.push(fit(`${muted} ↓ 还有 ${remaining} 项${ansi.reset}`, width));
77
+ }
78
+ return rows.concat(blank(height - rows.length, width)).slice(0, height);
79
+ }
80
+ renderTopic(state, width, height) {
81
+ if (state.loading && (!state.topic || state.topic.lines.length === 0)) {
82
+ return [
83
+ `${cc98Blue} 正在打开帖子...${ansi.reset}`,
84
+ "",
85
+ `${muted} 只加载第一页,不预取未读楼层。${ansi.reset}`
86
+ ].concat(blank(height - 3, width)).slice(0, height);
87
+ }
88
+ if (state.error) {
89
+ return [
90
+ `${danger} 读取帖子失败${ansi.reset}`,
91
+ fit(` ${state.error}`, width),
92
+ "",
93
+ `${muted} h/Esc 返回列表${ansi.reset}`
94
+ ].concat(blank(height - 4, width)).slice(0, height);
95
+ }
96
+ const topic = state.topic;
97
+ if (!topic) {
98
+ return blank(height, width);
99
+ }
100
+ const rows = [];
101
+ rows.push(`${cc98Blue}${ansi.bold} ${topic.title}${ansi.reset}`);
102
+ rows.push(fit(`${muted} ${topic.meta}${ansi.reset}`, width));
103
+ rows.push(`${line}${"─".repeat(Math.max(0, width - 1))}${ansi.reset}`);
104
+ const viewport = Math.max(0, height - rows.length - 1);
105
+ const maxScroll = Math.max(0, topic.lines.length - viewport);
106
+ state.scroll = Math.min(state.scroll, maxScroll);
107
+ const body = topic.lines.slice(state.scroll, state.scroll + viewport);
108
+ for (const bodyLine of body) {
109
+ if (bodyLine.startsWith("[image ")) {
110
+ rows.push(fit(`${cc98BlueSoft}${bodyLine}${ansi.reset}`, width));
111
+ }
112
+ else if (bodyLine.startsWith("│ ")) {
113
+ rows.push(fit(`${muted}${bodyLine}${ansi.reset}`, width));
114
+ }
115
+ else if (/^#\d+ /.test(bodyLine)) {
116
+ rows.push(fit(`${ok}${bodyLine}${ansi.reset}`, width));
117
+ }
118
+ else {
119
+ rows.push(fit(` ${bodyLine}`, width));
120
+ }
121
+ }
122
+ const pageInfo = topic.hasMore
123
+ ? `已载入 ${topic.loaded} 楼,n 下一页`
124
+ : `已载入 ${topic.loaded} 楼,已到底`;
125
+ rows.push(fit(`${muted}${pageInfo}${state.loadingMore ? " · 加载中" : ""}${ansi.reset}`, width));
126
+ return rows.concat(blank(height - rows.length, width)).slice(0, height);
127
+ }
128
+ }
129
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../../src/tui/components/content.ts"],"names":[],"mappings":"AAAA,SAAS;AAIT,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC,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;AAChC,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;AAC7B,MAAM,MAAM,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACjC,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAE5B,MAAM,OAAO,OAAO;IAClB,OAAO,GAAG,IAAI,CAAC;IAEf,MAAM,CAAC,KAAe,EAAE,KAAa,EAAE,MAAc;QACnD,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAClD,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC;IAEO,aAAa,CAAC,KAAe,EAAE,KAAa,EAAE,MAAc;QAClE,OAAO;YACL,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE;YACzD,GAAG,CAAC,GAAG,KAAK,WAAW,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC;YAC3C,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;YAC3D,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;SACrG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAEO,WAAW,CAAC,KAAe,EAAE,KAAa,EAAE,MAAc;QAChE,OAAO;YACL,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE;YACzD,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE;YAC3D,GAAG,MAAM,QAAQ,IAAI,CAAC,KAAK,EAAE;YAC7B,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC;SAC9B,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IACtD,CAAC;IAEO,UAAU,CAAC,KAAe,EAAE,KAAa,EAAE,MAAc;QAC/D,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACrE,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAEvE,0BAA0B;QAC1B,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,WAAW;QACjC,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,eAAe;QACtC,MAAM,UAAU,GAAG,CAAC,CAAC,CAAC,OAAO;QAC7B,MAAM,eAAe,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC;QAElG,eAAe;QACf,IAAI,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;YACnC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC;QACjC,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,GAAG,eAAe,EAAE,CAAC;YAC7D,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,SAAS,GAAG,eAAe,GAAG,CAAC,CAAC;QACvD,CAAC;QAED,QAAQ;QACR,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;QAChF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,SAAS,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,KAAK,KAAK,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;YACrG,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACzE,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YAClE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAEvG,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;gBAC3C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,GAAG,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAC1C,CAAC;QAED,UAAU;QACV,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,eAAe,CAAC;QACtE,IAAI,SAAS,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;YAC1C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,UAAU,SAAS,KAAK,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1E,CAAC;IAEO,WAAW,CAAC,KAAe,EAAE,KAAa,EAAE,MAAc;QAChE,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,EAAE,CAAC;YACtE,OAAO;gBACL,GAAG,QAAQ,aAAa,IAAI,CAAC,KAAK,EAAE;gBACpC,EAAE;gBACF,GAAG,KAAK,mBAAmB,IAAI,CAAC,KAAK,EAAE;aACxC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,OAAO;gBACL,GAAG,MAAM,UAAU,IAAI,CAAC,KAAK,EAAE;gBAC/B,GAAG,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC;gBAC7B,EAAE;gBACF,GAAG,KAAK,cAAc,IAAI,CAAC,KAAK,EAAE;aACnC,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;QAC1B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC9B,CAAC;QAED,MAAM,IAAI,GAAa,EAAE,CAAC;QAC1B,IAAI,CAAC,IAAI,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACjE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAC7D,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QAEvE,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QAC7D,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC,CAAC;QAEtE,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;YAC5B,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,YAAY,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YACnE,CAAC;iBAAM,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5D,CAAC;iBAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACnC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YACzD,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;YACxC,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO;YAC5B,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,UAAU;YAC/B,CAAC,CAAC,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;QAC9F,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAC1E,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 Header implements Component {
4
+ visible: boolean;
5
+ render(state: TuiState, width: number): string;
6
+ }
7
+ //# sourceMappingURL=header.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/tui/components/header.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAO5C,qBAAa,MAAO,YAAW,SAAS;IACtC,OAAO,UAAQ;IAEf,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM;CAM/C"}
@@ -0,0 +1,38 @@
1
+ // 顶部标题栏组件
2
+ import { ansi, bg, fg } from "../ansi.js";
3
+ import { fit } from "./utils.js";
4
+ const cc98BlueBg = bg(0, 104, 176);
5
+ const white = fg(245, 250, 255);
6
+ export class Header {
7
+ visible = true;
8
+ render(state, width) {
9
+ const account = state.account ? `@${state.account}` : "未登录";
10
+ const title = ` CC98 ${state.viewTitle} `;
11
+ const padding = Math.max(1, width - cellWidth(title) - cellWidth(account));
12
+ return `${cc98BlueBg}${white}${ansi.bold}${fit(`${title}${" ".repeat(padding)}${account}`, width)}${ansi.reset}`;
13
+ }
14
+ }
15
+ function cellWidth(value) {
16
+ let width = 0;
17
+ for (const char of value) {
18
+ const code = char.codePointAt(0) ?? 0;
19
+ if (code >= 0x1100 &&
20
+ (code <= 0x115f ||
21
+ code === 0x2329 ||
22
+ code === 0x232a ||
23
+ (code >= 0x2e80 && code <= 0xa4cf) ||
24
+ (code >= 0xac00 && code <= 0xd7a3) ||
25
+ (code >= 0xf900 && code <= 0xfaff) ||
26
+ (code >= 0xfe10 && code <= 0xfe19) ||
27
+ (code >= 0xfe30 && code <= 0xfe6f) ||
28
+ (code >= 0xff00 && code <= 0xff60) ||
29
+ (code >= 0xffe0 && code <= 0xffe6))) {
30
+ width += 2;
31
+ }
32
+ else {
33
+ width += 1;
34
+ }
35
+ }
36
+ return width;
37
+ }
38
+ //# sourceMappingURL=header.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"header.js","sourceRoot":"","sources":["../../../src/tui/components/header.ts"],"names":[],"mappings":"AAAA,UAAU;AAIV,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,GAAG,EAAE,MAAM,YAAY,CAAC;AAEjC,MAAM,UAAU,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACnC,MAAM,KAAK,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AAEhC,MAAM,OAAO,MAAM;IACjB,OAAO,GAAG,IAAI,CAAC;IAEf,MAAM,CAAC,KAAe,EAAE,KAAa;QACnC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QAC5D,MAAM,KAAK,GAAG,SAAS,KAAK,CAAC,SAAS,GAAG,CAAC;QAC1C,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAC3E,OAAO,GAAG,UAAU,GAAG,KAAK,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,OAAO,EAAE,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;IACnH,CAAC;CACF;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACtC,IACE,IAAI,IAAI,MAAM;YACd,CAAC,IAAI,IAAI,MAAM;gBACb,IAAI,KAAK,MAAM;gBACf,IAAI,KAAK,MAAM;gBACf,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;gBAClC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;gBAClC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;gBAClC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;gBAClC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;gBAClC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC;gBAClC,CAAC,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,CAAC,CAAC,EACrC,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,CAAC;YACN,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,8 @@
1
+ export * from "./types.js";
2
+ export * from "./utils.js";
3
+ export * from "./header.js";
4
+ export * from "./overview.js";
5
+ export * from "./sidebar.js";
6
+ export * from "./content.js";
7
+ export * from "./status.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tui/components/index.ts"],"names":[],"mappings":"AAEA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ // 组件模块导出
2
+ export * from "./types.js";
3
+ export * from "./utils.js";
4
+ export * from "./header.js";
5
+ export * from "./overview.js";
6
+ export * from "./sidebar.js";
7
+ export * from "./content.js";
8
+ export * from "./status.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tui/components/index.ts"],"names":[],"mappings":"AAAA,SAAS;AAET,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { TuiState } from "../state/types.js";
2
+ export declare function drawThreeColumnLayout(state: TuiState, width: number, height: number, sidebarWidth: number, rightWidth: number): string[];
3
+ //# sourceMappingURL=layout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/tui/components/layout.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAmBlD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,QAAQ,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CAqHV"}