cc98-cli 0.4.2 → 0.5.1

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 (85) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +4 -1
  3. package/dist/api/client.d.ts +1 -0
  4. package/dist/api/client.d.ts.map +1 -1
  5. package/dist/api/client.js +3 -0
  6. package/dist/api/client.js.map +1 -1
  7. package/dist/api/endpoints.d.ts +1 -0
  8. package/dist/api/endpoints.d.ts.map +1 -1
  9. package/dist/api/endpoints.js +1 -0
  10. package/dist/api/endpoints.js.map +1 -1
  11. package/dist/cli/commands/topic.d.ts.map +1 -1
  12. package/dist/cli/commands/topic.js +7 -0
  13. package/dist/cli/commands/topic.js.map +1 -1
  14. package/dist/cli/router.js +3 -0
  15. package/dist/cli/router.js.map +1 -1
  16. package/dist/storage/settings-store.d.ts +2 -0
  17. package/dist/storage/settings-store.d.ts.map +1 -1
  18. package/dist/storage/settings-store.js +9 -0
  19. package/dist/storage/settings-store.js.map +1 -1
  20. package/dist/tui/ansi.d.ts.map +1 -1
  21. package/dist/tui/ansi.js +5 -1
  22. package/dist/tui/ansi.js.map +1 -1
  23. package/dist/tui/app.js +1 -1
  24. package/dist/tui/app.js.map +1 -1
  25. package/dist/tui/cached-client.d.ts +1 -0
  26. package/dist/tui/cached-client.d.ts.map +1 -1
  27. package/dist/tui/cached-client.js +3 -0
  28. package/dist/tui/cached-client.js.map +1 -1
  29. package/dist/tui/components/content.d.ts +1 -0
  30. package/dist/tui/components/content.d.ts.map +1 -1
  31. package/dist/tui/components/content.js +26 -7
  32. package/dist/tui/components/content.js.map +1 -1
  33. package/dist/tui/components/sidebar.d.ts.map +1 -1
  34. package/dist/tui/components/sidebar.js +1 -11
  35. package/dist/tui/components/sidebar.js.map +1 -1
  36. package/dist/tui/components/status.d.ts.map +1 -1
  37. package/dist/tui/components/status.js +3 -0
  38. package/dist/tui/components/status.js.map +1 -1
  39. package/dist/tui/components/utils.d.ts.map +1 -1
  40. package/dist/tui/components/utils.js +33 -12
  41. package/dist/tui/components/utils.js.map +1 -1
  42. package/dist/tui/controller.d.ts +38 -1
  43. package/dist/tui/controller.d.ts.map +1 -1
  44. package/dist/tui/controller.js +731 -71
  45. package/dist/tui/controller.js.map +1 -1
  46. package/dist/tui/emoji-art.d.ts +11 -0
  47. package/dist/tui/emoji-art.d.ts.map +1 -0
  48. package/dist/tui/emoji-art.js +371 -0
  49. package/dist/tui/emoji-art.js.map +1 -0
  50. package/dist/tui/emoji-renderer.d.ts +16 -0
  51. package/dist/tui/emoji-renderer.d.ts.map +1 -0
  52. package/dist/tui/emoji-renderer.js +110 -0
  53. package/dist/tui/emoji-renderer.js.map +1 -0
  54. package/dist/tui/image-renderer.d.ts +46 -0
  55. package/dist/tui/image-renderer.d.ts.map +1 -0
  56. package/dist/tui/image-renderer.js +259 -0
  57. package/dist/tui/image-renderer.js.map +1 -0
  58. package/dist/tui/keybindings.js +1 -1
  59. package/dist/tui/keybindings.js.map +1 -1
  60. package/dist/tui/navigation.d.ts.map +1 -1
  61. package/dist/tui/navigation.js +5 -3
  62. package/dist/tui/navigation.js.map +1 -1
  63. package/dist/tui/renderer.d.ts.map +1 -1
  64. package/dist/tui/renderer.js +132 -5
  65. package/dist/tui/renderer.js.map +1 -1
  66. package/dist/tui/state/store.d.ts.map +1 -1
  67. package/dist/tui/state/store.js +2 -1
  68. package/dist/tui/state/store.js.map +1 -1
  69. package/dist/tui/state/types.d.ts +35 -2
  70. package/dist/tui/state/types.d.ts.map +1 -1
  71. package/dist/tui/terminal-capabilities.d.ts +24 -0
  72. package/dist/tui/terminal-capabilities.d.ts.map +1 -0
  73. package/dist/tui/terminal-capabilities.js +55 -0
  74. package/dist/tui/terminal-capabilities.js.map +1 -0
  75. package/dist/tui/terminal.js +1 -1
  76. package/dist/tui/terminal.js.map +1 -1
  77. package/dist/tui/topic-reader.d.ts +2 -1
  78. package/dist/tui/topic-reader.d.ts.map +1 -1
  79. package/dist/tui/topic-reader.js +25 -9
  80. package/dist/tui/topic-reader.js.map +1 -1
  81. package/dist/tui/ubb-renderer.d.ts +5 -1
  82. package/dist/tui/ubb-renderer.d.ts.map +1 -1
  83. package/dist/tui/ubb-renderer.js +71 -25
  84. package/dist/tui/ubb-renderer.js.map +1 -1
  85. package/package.json +2 -1
@@ -0,0 +1,16 @@
1
+ import { CC98_LOGO_ART, type PixelArt } from "./emoji-art.js";
2
+ export { CC98_LOGO_ART };
3
+ export interface EmojiCategory {
4
+ readonly id: string;
5
+ readonly label: string;
6
+ readonly source: string;
7
+ readonly codes: readonly string[];
8
+ }
9
+ export declare const EMOJI_CATEGORIES: readonly EmojiCategory[];
10
+ export declare function isEmojiCode(code: string): boolean;
11
+ export declare function getEmojiArt(code: string): PixelArt | undefined;
12
+ export declare function renderEmojiCode(code: string): string | undefined;
13
+ export declare function renderCc98Logo(): string;
14
+ export declare function normalizeEmojiCode(code: string): string;
15
+ export declare function renderPixelArt(art: PixelArt): string;
16
+ //# sourceMappingURL=emoji-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji-renderer.d.ts","sourceRoot":"","sources":["../../src/tui/emoji-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAa,KAAK,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAKzE,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAED,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAMpD,CAAC;AAEF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAE9D;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAIhE;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAyBD,wBAAgB,cAAc,CAAC,GAAG,EAAE,QAAQ,GAAG,MAAM,CAsBpD"}
@@ -0,0 +1,110 @@
1
+ import { CC98_LOGO_ART, EMOJI_ART } from "./emoji-art.js";
2
+ const reset = "\x1b[0m";
3
+ const transparent = ".";
4
+ export { CC98_LOGO_ART };
5
+ export const EMOJI_CATEGORIES = [
6
+ makeCategory("ac-white", "AC 娘", "ac-white", (code) => /^ac\d{2,4}$/.test(code)),
7
+ makeCategory("CC98", "CC98 专属", "CC98", (code) => /^cc98\d{2}$/.test(code)),
8
+ makeCategory("em", "经典表情", "em", (code) => /^em\d{2}$/.test(code)),
9
+ makeCategory("ms", "雀魂/麻将", "ms", (code) => /^ms\d{2}$/.test(code)),
10
+ makeCategory("tb", "贴吧系", "tb", (code) => /^tb\d{2}$/.test(code)),
11
+ ];
12
+ export function isEmojiCode(code) {
13
+ return normalizeEmojiCode(code) in EMOJI_ART;
14
+ }
15
+ export function getEmojiArt(code) {
16
+ return EMOJI_ART[normalizeEmojiCode(code)];
17
+ }
18
+ export function renderEmojiCode(code) {
19
+ const normalized = normalizeEmojiCode(code);
20
+ const art = EMOJI_ART[normalized];
21
+ return art ? renderPixelArt(art) : undefined;
22
+ }
23
+ export function renderCc98Logo() {
24
+ return renderPixelArt(CC98_LOGO_ART);
25
+ }
26
+ export function normalizeEmojiCode(code) {
27
+ return code.trim().toLowerCase();
28
+ }
29
+ function makeCategory(id, label, source, match) {
30
+ return {
31
+ id,
32
+ label,
33
+ source,
34
+ codes: Object.keys(EMOJI_ART).filter(match).sort(compareEmojiCode),
35
+ };
36
+ }
37
+ function compareEmojiCode(left, right) {
38
+ const leftParts = splitEmojiCode(left);
39
+ const rightParts = splitEmojiCode(right);
40
+ if (leftParts.prefix !== rightParts.prefix) {
41
+ return leftParts.prefix.localeCompare(rightParts.prefix);
42
+ }
43
+ return leftParts.number - rightParts.number;
44
+ }
45
+ function splitEmojiCode(code) {
46
+ const match = code.match(/^([a-z]+)(\d+)$/i);
47
+ return match ? { prefix: match[1].toLowerCase(), number: Number(match[2]) } : { prefix: code, number: 0 };
48
+ }
49
+ export function renderPixelArt(art) {
50
+ const output = [];
51
+ for (let y = 0; y < art.height; y += 2) {
52
+ const upper = art.rows[y] ?? "";
53
+ const lower = art.rows[y + 1] ?? "";
54
+ let line = "";
55
+ for (let x = 0; x < art.width; x += 1) {
56
+ const upperColor = colorAt(art, upper[x]);
57
+ const lowerColor = colorAt(art, lower[x]);
58
+ if (upperColor && lowerColor) {
59
+ line += `${reset}${fg(upperColor)}${bg(lowerColor)}▀`;
60
+ }
61
+ else if (upperColor) {
62
+ line += `${reset}${fg(upperColor)}▀`;
63
+ }
64
+ else if (lowerColor) {
65
+ line += `${reset}${fg(lowerColor)}▄`;
66
+ }
67
+ else {
68
+ line += `${reset} `;
69
+ }
70
+ }
71
+ output.push(`${line}${reset}`);
72
+ }
73
+ return output.join("\n");
74
+ }
75
+ function colorAt(art, value) {
76
+ if (!value || value === transparent)
77
+ return undefined;
78
+ const index = decodeIndex(value);
79
+ return art.palette[index];
80
+ }
81
+ function decodeIndex(value) {
82
+ const code = value.codePointAt(0) ?? 0;
83
+ if (code >= 48 && code <= 57)
84
+ return code - 48;
85
+ if (code >= 65 && code <= 90)
86
+ return code - 65 + 10;
87
+ if (code >= 97 && code <= 122)
88
+ return code - 97 + 36;
89
+ if (value === "+")
90
+ return 62;
91
+ if (value === "-")
92
+ return 63;
93
+ return -1;
94
+ }
95
+ function fg(color) {
96
+ const { r, g, b } = parseColor(color);
97
+ return `\x1b[38;2;${r};${g};${b}m`;
98
+ }
99
+ function bg(color) {
100
+ const { r, g, b } = parseColor(color);
101
+ return `\x1b[48;2;${r};${g};${b}m`;
102
+ }
103
+ function parseColor(color) {
104
+ return {
105
+ r: parseInt(color.slice(0, 2), 16),
106
+ g: parseInt(color.slice(2, 4), 16),
107
+ b: parseInt(color.slice(4, 6), 16),
108
+ };
109
+ }
110
+ //# sourceMappingURL=emoji-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emoji-renderer.js","sourceRoot":"","sources":["../../src/tui/emoji-renderer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ export interface ImageRenderOptions {
2
+ /** Maximum width in terminal columns */
3
+ maxWidth?: number;
4
+ /** Maximum height in terminal rows */
5
+ maxHeight?: number;
6
+ /** Whether to preserve aspect ratio (default: true) */
7
+ preserveAspectRatio?: boolean;
8
+ }
9
+ export interface RenderedImage {
10
+ /** The ANSI escape sequence to display the image */
11
+ escapeSequence: string;
12
+ /** Number of terminal rows the image occupies */
13
+ rows: number;
14
+ /** Number of terminal columns the image occupies */
15
+ cols: number;
16
+ /** Original image width (if detectable) */
17
+ originalWidth?: number;
18
+ /** Original image height (if detectable) */
19
+ originalHeight?: number;
20
+ }
21
+ export interface ImageDimensions {
22
+ width: number;
23
+ height: number;
24
+ }
25
+ export declare function getImageDimensionsSync(filePath: string): ImageDimensions | undefined;
26
+ /**
27
+ * Render a local image file to an ANSI escape sequence
28
+ */
29
+ export declare function renderLocalImage(filePath: string, options?: ImageRenderOptions): Promise<RenderedImage | null>;
30
+ /**
31
+ * Render a cached local image synchronously for the TUI render path.
32
+ */
33
+ export declare function renderLocalImageSync(filePath: string, options?: ImageRenderOptions): RenderedImage | null;
34
+ /**
35
+ * Render image from URL (download if needed, then render)
36
+ */
37
+ export declare function renderImageFromUrl(url: string, options?: ImageRenderOptions): Promise<RenderedImage | null>;
38
+ /**
39
+ * Generate a placeholder text for terminals that don't support images
40
+ */
41
+ export declare function getImagePlaceholder(url: string, index: number): string;
42
+ /**
43
+ * Generate help text for image actions
44
+ */
45
+ export declare function getImageActions(): string;
46
+ //# sourceMappingURL=image-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-renderer.d.ts","sourceRoot":"","sources":["../../src/tui/image-renderer.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,kBAAkB;IACjC,wCAAwC;IACxC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uDAAuD;IACvD,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,oDAAoD;IACpD,cAAc,EAAE,MAAM,CAAC;IACvB,iDAAiD;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS,CAOpF;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAU/B;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,kBAAuB,GAC/B,aAAa,GAAG,IAAI,CAUtB;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAW/B;AAoND;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYtE;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC"}
@@ -0,0 +1,259 @@
1
+ // Inline image rendering for supported terminals
2
+ // Supports iTerm2 Inline Images Protocol and Kitty Graphics Protocol
3
+ import { readFileSync } from "node:fs";
4
+ import { readFile } from "node:fs/promises";
5
+ import { spawnSync } from "node:child_process";
6
+ import { getImageCache } from "../storage/image-cache.js";
7
+ import { detectTerminalCapabilities, getImageProtocol } from "./terminal-capabilities.js";
8
+ export function getImageDimensionsSync(filePath) {
9
+ try {
10
+ const data = readFileSync(filePath);
11
+ return parseImageDimensions(data);
12
+ }
13
+ catch {
14
+ return undefined;
15
+ }
16
+ }
17
+ /**
18
+ * Render a local image file to an ANSI escape sequence
19
+ */
20
+ export async function renderLocalImage(filePath, options = {}) {
21
+ const protocol = getImageProtocol();
22
+ if (!isSupportedProtocol(protocol))
23
+ return null;
24
+ try {
25
+ const data = await readFile(filePath);
26
+ return renderImageData(protocol, filePath, data, options);
27
+ }
28
+ catch {
29
+ return null;
30
+ }
31
+ }
32
+ /**
33
+ * Render a cached local image synchronously for the TUI render path.
34
+ */
35
+ export function renderLocalImageSync(filePath, options = {}) {
36
+ const protocol = getImageProtocol();
37
+ if (!isSupportedProtocol(protocol))
38
+ return null;
39
+ try {
40
+ const data = readFileSync(filePath);
41
+ return renderImageData(protocol, filePath, data, options);
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ /**
48
+ * Render image from URL (download if needed, then render)
49
+ */
50
+ export async function renderImageFromUrl(url, options = {}) {
51
+ const protocol = getImageProtocol();
52
+ if (!isSupportedProtocol(protocol))
53
+ return null;
54
+ try {
55
+ const cache = getImageCache();
56
+ const localPath = await cache.getOrDownload(url);
57
+ return renderLocalImage(localPath, options);
58
+ }
59
+ catch {
60
+ return null;
61
+ }
62
+ }
63
+ /**
64
+ * iTerm2 Inline Images Protocol
65
+ * @see https://iterm2.com/documentation-images.html
66
+ */
67
+ function renderImageData(protocol, filePath, data, options) {
68
+ switch (protocol) {
69
+ case "iterm2":
70
+ return wrapForTerminal(renderIterm2(data.toString("base64"), options));
71
+ case "kitty":
72
+ return wrapForTerminal(renderKitty(filePath, options));
73
+ case "sixel":
74
+ return renderSixel(filePath, options);
75
+ default:
76
+ return null;
77
+ }
78
+ }
79
+ function renderIterm2(base64, options) {
80
+ const params = [];
81
+ // Preserve aspect ratio
82
+ if (options.preserveAspectRatio !== false) {
83
+ params.push("preserveAspectRatio=1");
84
+ }
85
+ // iTerm2 is most reliable when width/height are passed as pixels.
86
+ // Estimate from terminal cells so layout can still reserve text rows.
87
+ if (options.maxWidth) {
88
+ params.push(`width=${Math.max(1, Math.floor(options.maxWidth * 8))}px`);
89
+ }
90
+ if (options.maxHeight) {
91
+ params.push(`height=${Math.max(1, Math.floor(options.maxHeight * 18))}px`);
92
+ }
93
+ // Inline=1 means display in terminal (not as a separate window)
94
+ params.push("inline=1");
95
+ const paramStr = params.join(";");
96
+ // OSC 1337 ; File=<params> : <base64-data> BEL
97
+ const escapeSequence = `\x1b]1337;File=${paramStr}:${base64}\x07`;
98
+ // Estimate rows based on maxWidth (assuming 2:1 char aspect ratio)
99
+ const rows = options.maxHeight ?? Math.ceil((options.maxWidth ?? 40) * 0.5);
100
+ const cols = options.maxWidth ?? 40;
101
+ return { escapeSequence, rows, cols };
102
+ }
103
+ /**
104
+ * Kitty Graphics Protocol
105
+ * @see https://sw.kovidgoyal.net/kitty/graphics-protocol/
106
+ */
107
+ function renderKitty(filePath, options) {
108
+ // Use file transfer so Kitty can decode PNG/JPEG/GIF/WebP/SVG itself.
109
+ let controlData = "a=t,t=f";
110
+ if (options.maxWidth) {
111
+ controlData += `,c=${Math.max(1, Math.floor(options.maxWidth))}`; // columns
112
+ }
113
+ if (options.maxHeight) {
114
+ controlData += `,r=${Math.max(1, Math.floor(options.maxHeight))}`; // rows
115
+ }
116
+ const pathData = Buffer.from(filePath, "utf8").toString("base64");
117
+ const escapeSequence = `\x1b_G${controlData};${pathData}\x1b\\`;
118
+ const rows = options.maxHeight ?? Math.ceil((options.maxWidth ?? 40) * 0.5);
119
+ const cols = options.maxWidth ?? 40;
120
+ return { escapeSequence, rows, cols };
121
+ }
122
+ function renderSixel(filePath, options) {
123
+ const cols = Math.max(1, Math.floor(options.maxWidth ?? 24));
124
+ const rows = Math.max(1, Math.floor(options.maxHeight ?? 7));
125
+ const widthPx = cols * 8;
126
+ const img2sixel = spawnSync("img2sixel", ["-w", String(widthPx), filePath], {
127
+ encoding: "utf8",
128
+ maxBuffer: 8 * 1024 * 1024
129
+ });
130
+ if (img2sixel.status === 0 && img2sixel.stdout) {
131
+ return wrapForTerminal({ escapeSequence: img2sixel.stdout, rows, cols });
132
+ }
133
+ const chafa = spawnSync("chafa", [`--size=${cols}x${rows}`, "--format=sixels", filePath], {
134
+ encoding: "utf8",
135
+ maxBuffer: 8 * 1024 * 1024
136
+ });
137
+ if (chafa.status === 0 && chafa.stdout) {
138
+ return wrapForTerminal({ escapeSequence: chafa.stdout, rows, cols });
139
+ }
140
+ return null;
141
+ }
142
+ function wrapForTerminal(image) {
143
+ const capabilities = detectTerminalCapabilities();
144
+ if (!capabilities.passthrough) {
145
+ return image;
146
+ }
147
+ return {
148
+ ...image,
149
+ escapeSequence: wrapTmuxPassthrough(image.escapeSequence)
150
+ };
151
+ }
152
+ function wrapTmuxPassthrough(sequence) {
153
+ return `\x1bPtmux;${sequence.replace(/\x1b/g, "\x1b\x1b")}\x1b\\`;
154
+ }
155
+ function isSupportedProtocol(protocol) {
156
+ return protocol === "iterm2" || protocol === "kitty" || protocol === "sixel";
157
+ }
158
+ function parseImageDimensions(data) {
159
+ if (data.length >= 24 && data.subarray(0, 8).equals(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]))) {
160
+ return {
161
+ width: data.readUInt32BE(16),
162
+ height: data.readUInt32BE(20)
163
+ };
164
+ }
165
+ if (data.length >= 10 && data.toString("ascii", 0, 3) === "GIF") {
166
+ return {
167
+ width: data.readUInt16LE(6),
168
+ height: data.readUInt16LE(8)
169
+ };
170
+ }
171
+ if (data.length >= 12 && data.readUInt16BE(0) === 0xffd8) {
172
+ return parseJpegDimensions(data);
173
+ }
174
+ if (data.length >= 30 && data.toString("ascii", 0, 4) === "RIFF" && data.toString("ascii", 8, 12) === "WEBP") {
175
+ return parseWebpDimensions(data);
176
+ }
177
+ return undefined;
178
+ }
179
+ function parseJpegDimensions(data) {
180
+ let offset = 2;
181
+ while (offset + 9 < data.length) {
182
+ if (data[offset] !== 0xff) {
183
+ offset += 1;
184
+ continue;
185
+ }
186
+ const marker = data[offset + 1];
187
+ offset += 2;
188
+ if (marker === 0xd9 || marker === 0xda) {
189
+ break;
190
+ }
191
+ if (offset + 2 > data.length) {
192
+ break;
193
+ }
194
+ const length = data.readUInt16BE(offset);
195
+ if (length < 2 || offset + length > data.length) {
196
+ break;
197
+ }
198
+ if ((marker >= 0xc0 && marker <= 0xc3) ||
199
+ (marker >= 0xc5 && marker <= 0xc7) ||
200
+ (marker >= 0xc9 && marker <= 0xcb) ||
201
+ (marker >= 0xcd && marker <= 0xcf)) {
202
+ return {
203
+ height: data.readUInt16BE(offset + 3),
204
+ width: data.readUInt16BE(offset + 5)
205
+ };
206
+ }
207
+ offset += length;
208
+ }
209
+ return undefined;
210
+ }
211
+ function parseWebpDimensions(data) {
212
+ const type = data.toString("ascii", 12, 16);
213
+ if (type === "VP8 " && data.length >= 30) {
214
+ return {
215
+ width: data.readUInt16LE(26) & 0x3fff,
216
+ height: data.readUInt16LE(28) & 0x3fff
217
+ };
218
+ }
219
+ if (type === "VP8L" && data.length >= 25) {
220
+ const bits = data.readUInt32LE(21);
221
+ return {
222
+ width: (bits & 0x3fff) + 1,
223
+ height: ((bits >> 14) & 0x3fff) + 1
224
+ };
225
+ }
226
+ if (type === "VP8X" && data.length >= 30) {
227
+ return {
228
+ width: readUInt24LE(data, 24) + 1,
229
+ height: readUInt24LE(data, 27) + 1
230
+ };
231
+ }
232
+ return undefined;
233
+ }
234
+ function readUInt24LE(data, offset) {
235
+ return data[offset] | (data[offset + 1] << 8) | (data[offset + 2] << 16);
236
+ }
237
+ /**
238
+ * Generate a placeholder text for terminals that don't support images
239
+ */
240
+ export function getImagePlaceholder(url, index) {
241
+ // Shorten URL for display
242
+ let shortUrl = url;
243
+ try {
244
+ const parsed = new URL(url);
245
+ const fileName = parsed.pathname.split("/").filter(Boolean).at(-1) ?? "";
246
+ shortUrl = `${parsed.host}/${fileName}`;
247
+ }
248
+ catch {
249
+ // Keep original if URL parsing fails
250
+ }
251
+ return `[image ${index}] ${shortUrl}`;
252
+ }
253
+ /**
254
+ * Generate help text for image actions
255
+ */
256
+ export function getImageActions() {
257
+ return ` o 打开 c 复制图片`;
258
+ }
259
+ //# sourceMappingURL=image-renderer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-renderer.js","sourceRoot":"","sources":["../../src/tui/image-renderer.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,qEAAqE;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAC1D,OAAO,EAAE,0BAA0B,EAAE,gBAAgB,EAAsB,MAAM,4BAA4B,CAAC;AA6B9G,MAAM,UAAU,sBAAsB,CAAC,QAAgB;IACrD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,oBAAoB,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,QAAgB,EAChB,UAA8B,EAAE;IAEhC,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtC,OAAO,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAgB,EAChB,UAA8B,EAAE;IAEhC,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACpC,OAAO,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,GAAW,EACX,UAA8B,EAAE;IAEhC,MAAM,QAAQ,GAAG,gBAAgB,EAAE,CAAC;IACpC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEhD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,aAAa,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QACjD,OAAO,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,eAAe,CACtB,QAAuB,EACvB,QAAgB,EAChB,IAAY,EACZ,OAA2B;IAE3B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QACzE,KAAK,OAAO;YACV,OAAO,eAAe,CAAC,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;QACzD,KAAK,OAAO;YACV,OAAO,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACxC;YACE,OAAO,IAAI,CAAC;IAChB,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,MAAc,EAAE,OAA2B;IAC/D,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,wBAAwB;IACxB,IAAI,OAAO,CAAC,mBAAmB,KAAK,KAAK,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACvC,CAAC;IAED,kEAAkE;IAClE,sEAAsE;IACtE,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1E,CAAC;IAED,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC7E,CAAC;IAED,gEAAgE;IAChE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAExB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAElC,+CAA+C;IAC/C,MAAM,cAAc,GAAG,kBAAkB,QAAQ,IAAI,MAAM,MAAM,CAAC;IAElE,mEAAmE;IACnE,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IAEpC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,QAAgB,EAAE,OAA2B;IAChE,sEAAsE;IACtE,IAAI,WAAW,GAAG,SAAS,CAAC;IAE5B,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACrB,WAAW,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU;IAC9E,CAAC;IACD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,WAAW,IAAI,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,OAAO;IAC5E,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAClE,MAAM,cAAc,GAAG,SAAS,WAAW,IAAI,QAAQ,QAAQ,CAAC;IAChE,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;IAC5E,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IAEpC,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AACxC,CAAC;AAED,SAAS,WAAW,CAAC,QAAgB,EAAE,OAA2B;IAChE,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,CAAC;IAEzB,MAAM,SAAS,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,EAAE;QAC1E,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;KAC3B,CAAC,CAAC;IACH,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,IAAI,SAAS,CAAC,MAAM,EAAE,CAAC;QAC/C,OAAO,eAAe,CAAC,EAAE,cAAc,EAAE,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,UAAU,IAAI,IAAI,IAAI,EAAE,EAAE,iBAAiB,EAAE,QAAQ,CAAC,EAAE;QACxF,QAAQ,EAAE,MAAM;QAChB,SAAS,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;KAC3B,CAAC,CAAC;IACH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACvC,OAAO,eAAe,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,eAAe,CAAC,KAAoB;IAC3C,MAAM,YAAY,GAAG,0BAA0B,EAAE,CAAC;IAClD,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO;QACL,GAAG,KAAK;QACR,cAAc,EAAE,mBAAmB,CAAC,KAAK,CAAC,cAAc,CAAC;KAC1D,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,OAAO,aAAa,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC;AACpE,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAuB;IAClD,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO,CAAC;AAC/E,CAAC;AAED,SAAS,oBAAoB,CAAC,IAAY;IACxC,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACnH,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;YAC5B,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;SAC9B,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,KAAK,EAAE,CAAC;QAChE,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;SAC7B,CAAC;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACzD,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,KAAK,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,MAAM,EAAE,CAAC;QAC7G,OAAO,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC;YAC1B,MAAM,IAAI,CAAC,CAAC;YACZ,SAAS;QACX,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAChC,MAAM,IAAI,CAAC,CAAC;QACZ,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACvC,MAAM;QACR,CAAC;QACD,IAAI,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7B,MAAM;QACR,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAChD,MAAM;QACR,CAAC;QACD,IACE,CAAC,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC;YAClC,CAAC,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC;YAClC,CAAC,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC;YAClC,CAAC,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,CAAC,EAClC,CAAC;YACD,OAAO;gBACL,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;gBACrC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;aACrC,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,MAAM,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAY;IACvC,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC5C,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzC,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,MAAM;YACrC,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,GAAG,MAAM;SACvC,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO;YACL,KAAK,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC;YAC1B,MAAM,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC;SACpC,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,IAAI,EAAE,EAAE,CAAC;QACzC,OAAO;YACL,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC;YACjC,MAAM,EAAE,YAAY,CAAC,IAAI,EAAE,EAAE,CAAC,GAAG,CAAC;SACnC,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,IAAY,EAAE,MAAc;IAChD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,GAAW,EAAE,KAAa;IAC5D,0BAA0B;IAC1B,IAAI,QAAQ,GAAG,GAAG,CAAC;IACnB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACzE,QAAQ,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,qCAAqC;IACvC,CAAC;IAED,OAAO,UAAU,KAAK,KAAK,QAAQ,EAAE,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe;IAC7B,OAAO,wBAAwB,CAAC;AAClC,CAAC"}
@@ -153,7 +153,7 @@ export class KeybindingManager {
153
153
  topicVote: "查看投票",
154
154
  topicReaction: "查看评价",
155
155
  topicOpenImage: "打开图片",
156
- topicCopyLink: "复制链接",
156
+ topicCopyLink: "复制图片/链接",
157
157
  topicRefresh: "刷新帖子",
158
158
  listNext: "列表下移",
159
159
  listPrev: "列表上移",
@@ -1 +1 @@
1
- {"version":3,"file":"keybindings.js","sourceRoot":"","sources":["../../src/tui/keybindings.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"keybindings.js","sourceRoot":"","sources":["../../src/tui/keybindings.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/tui/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE7D,eAAO,MAAM,QAAQ,EAAE,SAAS,OAAO,EAUtC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAO/C,CAAC"}
1
+ {"version":3,"file":"navigation.d.ts","sourceRoot":"","sources":["../../src/tui/navigation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE7D,eAAO,MAAM,QAAQ,EAAE,SAAS,OAAO,EAStC,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAU/C,CAAC"}
@@ -1,9 +1,8 @@
1
1
  export const navItems = [
2
2
  { id: "hot", label: "十大", hint: "热门话题" },
3
- { id: "favorite", label: "收藏", hint: "版面帖子" },
4
- { id: "new", label: "最新", hint: "新帖流" },
3
+ { id: "new", label: "新帖", hint: "最新与随机" },
4
+ { id: "following", label: "关注", hint: "版面与用户" },
5
5
  { id: "boards", label: "版面", hint: "所有分区" },
6
- { id: "following", label: "关注", hint: "用户动态" },
7
6
  { id: "messages", label: "消息", hint: "未读与私信" },
8
7
  { id: "notices", label: "通知", hint: "系统与回复" },
9
8
  { id: "me", label: "我的", hint: "当前账号" },
@@ -11,8 +10,11 @@ export const navItems = [
11
10
  ];
12
11
  export const settingsItems = [
13
12
  { title: "切换账号", meta: "account", detail: "选择或管理登录账号" },
13
+ { title: "自动签到", meta: "auto-signin", detail: "启动后为所有账号执行每日签到" },
14
14
  { title: "检查更新", meta: "update", detail: "检查 CC98-CLI 新版本" },
15
15
  { title: "缓存管理", meta: "cache", detail: "查看和清理本地缓存" },
16
+ { title: "CC98 像素 Logo", meta: "pixel-logo", detail: "查看终端像素化的 CC98 标识" },
17
+ { title: "表情包预览", meta: "emoji-preview", detail: "按分类查看 365 个终端像素表情" },
16
18
  { title: "快捷键设置", meta: "keybindings", detail: "自定义快捷键绑定" },
17
19
  { title: "快捷键帮助", meta: "help", detail: "查看所有可用快捷键" },
18
20
  { title: "退出登录", meta: "logout", detail: "清除本地登录信息" }
@@ -1 +1 @@
1
- {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/tui/navigation.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAuB;IAC1C,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,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE;IACvD,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE;IAC5D,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;IACrD,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE;IAC3D,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE;IACrD,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE;CACtD,CAAC"}
1
+ {"version":3,"file":"navigation.js","sourceRoot":"","sources":["../../src/tui/navigation.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,QAAQ,GAAuB;IAC1C,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;IACxC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;IACzC,EAAE,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;IAC/C,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE;IAC3C,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,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE;CAC/C,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAA2B;IACnD,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE;IACvD,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,gBAAgB,EAAE;IAChE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,iBAAiB,EAAE;IAC5D,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE;IACrD,EAAE,KAAK,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,EAAE,kBAAkB,EAAE;IACzE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,mBAAmB,EAAE;IACtE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE;IAC3D,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE;IACrD,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE;CACtD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/tui/renderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAqBnE,wBAAgB,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CA0HrF"}
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/tui/renderer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAoB,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAyBnE,wBAAgB,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAuIrF"}