@nbtca/prompt 1.0.19 → 1.0.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/config/data.d.ts +1 -0
- package/dist/config/data.d.ts.map +1 -1
- package/dist/config/data.js +2 -4
- package/dist/config/data.js.map +1 -1
- package/dist/core/logo.d.ts.map +1 -1
- package/dist/core/logo.js +14 -104
- package/dist/core/logo.js.map +1 -1
- package/dist/core/menu.d.ts +1 -1
- package/dist/core/menu.d.ts.map +1 -1
- package/dist/core/menu.js +42 -41
- package/dist/core/menu.js.map +1 -1
- package/dist/core/text.d.ts +7 -0
- package/dist/core/text.d.ts.map +1 -0
- package/dist/core/text.js +43 -0
- package/dist/core/text.js.map +1 -0
- package/dist/core/ui.d.ts +0 -4
- package/dist/core/ui.d.ts.map +1 -1
- package/dist/core/ui.js +0 -6
- package/dist/core/ui.js.map +1 -1
- package/dist/core/vim-keys.d.ts +3 -10
- package/dist/core/vim-keys.d.ts.map +1 -1
- package/dist/core/vim-keys.js +18 -45
- package/dist/core/vim-keys.js.map +1 -1
- package/dist/features/calendar.d.ts.map +1 -1
- package/dist/features/calendar.js +16 -63
- package/dist/features/calendar.js.map +1 -1
- package/dist/features/docs.d.ts.map +1 -1
- package/dist/features/docs.js +26 -43
- package/dist/features/docs.js.map +1 -1
- package/dist/features/repair.d.ts +1 -4
- package/dist/features/repair.d.ts.map +1 -1
- package/dist/features/repair.js +3 -4
- package/dist/features/repair.js.map +1 -1
- package/dist/features/website.d.ts +3 -0
- package/dist/features/website.d.ts.map +1 -1
- package/dist/features/website.js +3 -6
- package/dist/features/website.js.map +1 -1
- package/dist/i18n/index.d.ts +3 -5
- package/dist/i18n/index.d.ts.map +1 -1
- package/dist/i18n/index.js.map +1 -1
- package/dist/i18n/locales/en.json +3 -5
- package/dist/i18n/locales/zh.json +3 -5
- package/package.json +1 -2
package/dist/config/data.d.ts
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
export declare const URLS: {
|
|
6
6
|
readonly homepage: "https://nbtca.space";
|
|
7
7
|
readonly github: "https://github.com/nbtca";
|
|
8
|
+
readonly roadmap: "https://github.com/orgs/nbtca/projects/5";
|
|
8
9
|
readonly docs: "https://docs.nbtca.space";
|
|
9
10
|
readonly repair: "https://nbtca.space/repair";
|
|
10
11
|
readonly calendar: "https://ical.nbtca.space";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/config/data.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,eAAO,MAAM,IAAI
|
|
1
|
+
{"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/config/data.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,eAAO,MAAM,IAAI;;;;;;;;CAQP,CAAC;AAEX,eAAO,MAAM,QAAQ;;;;;;;;CAQX,CAAC"}
|
package/dist/config/data.js
CHANGED
|
@@ -18,15 +18,13 @@ function readPackageVersion() {
|
|
|
18
18
|
}
|
|
19
19
|
}
|
|
20
20
|
export const URLS = {
|
|
21
|
-
// 主要链接
|
|
22
21
|
homepage: 'https://nbtca.space',
|
|
23
22
|
github: 'https://github.com/nbtca',
|
|
23
|
+
roadmap: 'https://github.com/orgs/nbtca/projects/5',
|
|
24
24
|
docs: 'https://docs.nbtca.space',
|
|
25
25
|
repair: 'https://nbtca.space/repair',
|
|
26
|
-
// API链接
|
|
27
26
|
calendar: 'https://ical.nbtca.space',
|
|
28
|
-
|
|
29
|
-
email: 'contact@nbtca.space'
|
|
27
|
+
email: 'contact@nbtca.space',
|
|
30
28
|
};
|
|
31
29
|
export const APP_INFO = {
|
|
32
30
|
name: 'Prompt',
|
package/dist/config/data.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/config/data.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,
|
|
1
|
+
{"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/config/data.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAErC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,SAAS,kBAAkB;IACzB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QACvD,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,QAAQ,EAAE,qBAAqB;IAC/B,MAAM,EAAI,0BAA0B;IACpC,OAAO,EAAG,0CAA0C;IACpD,IAAI,EAAM,0BAA0B;IACpC,MAAM,EAAI,4BAA4B;IACtC,QAAQ,EAAE,0BAA0B;IACpC,KAAK,EAAK,qBAAqB;CACvB,CAAC;AAEX,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,QAAQ;IACd,OAAO,EAAE,kBAAkB,EAAE;IAC7B,WAAW,EAAE,eAAe;IAC5B,eAAe,EAAE,wBAAwB;IACzC,MAAM,EAAE,+BAA+B;IACvC,OAAO,EAAE,KAAK;IACd,UAAU,EAAE,iCAAiC;CACrC,CAAC"}
|
package/dist/core/logo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logo.d.ts","sourceRoot":"","sources":["../../src/core/logo.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"logo.d.ts","sourceRoot":"","sources":["../../src/core/logo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAoCH;;GAEG;AACH,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA+B/C"}
|
package/dist/core/logo.js
CHANGED
|
@@ -12,7 +12,6 @@ const __dirname = dirname(__filename);
|
|
|
12
12
|
* Create blue-toned gradient effect
|
|
13
13
|
*/
|
|
14
14
|
function createBlueGradient(text) {
|
|
15
|
-
// Blue gradient: deep blue -> sky blue -> cyan
|
|
16
15
|
const blueGradient = gradient([
|
|
17
16
|
{ color: '#1e3a8a', pos: 0 }, // Deep blue
|
|
18
17
|
{ color: '#0ea5e9', pos: 0.5 }, // Sky blue
|
|
@@ -21,88 +20,18 @@ function createBlueGradient(text) {
|
|
|
21
20
|
return blueGradient(text);
|
|
22
21
|
}
|
|
23
22
|
/**
|
|
24
|
-
*
|
|
23
|
+
* Display description text (instant, no animation)
|
|
25
24
|
*/
|
|
26
|
-
function
|
|
27
|
-
const
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Convert RGB to hex color
|
|
34
|
-
*/
|
|
35
|
-
function rgbToHex(r, g, b) {
|
|
36
|
-
return '#' + [r, g, b].map(x => {
|
|
37
|
-
const hex = Math.round(x).toString(16);
|
|
38
|
-
return hex.length === 1 ? '0' + hex : hex;
|
|
39
|
-
}).join('');
|
|
40
|
-
}
|
|
41
|
-
/**
|
|
42
|
-
* Linear interpolation between two colors
|
|
43
|
-
*/
|
|
44
|
-
function interpolateColor(color1, color2, factor) {
|
|
45
|
-
const [r1, g1, b1] = hexToRgb(color1);
|
|
46
|
-
const [r2, g2, b2] = hexToRgb(color2);
|
|
47
|
-
const r = r1 + (r2 - r1) * factor;
|
|
48
|
-
const g = g1 + (g2 - g1) * factor;
|
|
49
|
-
const b = b1 + (b2 - b1) * factor;
|
|
50
|
-
return rgbToHex(r, g, b);
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Easing function - smooth in-out effect
|
|
54
|
-
*/
|
|
55
|
-
function easeInOutSine(t) {
|
|
56
|
-
return -(Math.cos(Math.PI * t) - 1) / 2;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Display gradient animation effect (optimized - truly smooth animation)
|
|
60
|
-
*/
|
|
61
|
-
async function animateGradient(text, duration = 1200) {
|
|
62
|
-
if (!process.stdout.isTTY || process.env['NO_COLOR']) {
|
|
63
|
-
console.log(text);
|
|
64
|
-
return;
|
|
25
|
+
function printDescription() {
|
|
26
|
+
const tagline = 'To be at the intersection of technology and liberal arts.';
|
|
27
|
+
console.log();
|
|
28
|
+
if (process.env['NO_COLOR']) {
|
|
29
|
+
console.log(tagline);
|
|
65
30
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
// Define color sequence - forms complete blue spectrum cycle
|
|
69
|
-
const colorSequence = [
|
|
70
|
-
'#1e3a8a', // Deep blue
|
|
71
|
-
'#2563eb', // Blue
|
|
72
|
-
'#3b82f6', // Bright blue
|
|
73
|
-
'#0ea5e9', // Sky blue
|
|
74
|
-
'#06b6d4', // Cyan
|
|
75
|
-
'#14b8a6', // Teal
|
|
76
|
-
'#06b6d4', // Cyan
|
|
77
|
-
'#0ea5e9', // Sky blue
|
|
78
|
-
'#3b82f6', // Bright blue
|
|
79
|
-
'#2563eb', // Blue
|
|
80
|
-
'#1e3a8a', // Deep blue
|
|
81
|
-
];
|
|
82
|
-
for (let i = 0; i < frames; i++) {
|
|
83
|
-
// Use smooth sine easing
|
|
84
|
-
const progress = easeInOutSine(i / frames);
|
|
85
|
-
// Calculate position in color sequence
|
|
86
|
-
const position = progress * (colorSequence.length - 1);
|
|
87
|
-
const index1 = Math.floor(position);
|
|
88
|
-
const index2 = Math.min(index1 + 1, colorSequence.length - 1);
|
|
89
|
-
const localProgress = position - index1;
|
|
90
|
-
// Interpolate between adjacent colors, generating three smoothly transitioning colors
|
|
91
|
-
const color1 = interpolateColor(colorSequence[index1], colorSequence[index2], localProgress);
|
|
92
|
-
const nextIndex1 = Math.min(index2, colorSequence.length - 1);
|
|
93
|
-
const nextIndex2 = Math.min(nextIndex1 + 1, colorSequence.length - 1);
|
|
94
|
-
const color2 = interpolateColor(colorSequence[nextIndex1], colorSequence[nextIndex2], localProgress);
|
|
95
|
-
const nextIndex3 = Math.min(nextIndex2, colorSequence.length - 1);
|
|
96
|
-
const nextIndex4 = Math.min(nextIndex3 + 1, colorSequence.length - 1);
|
|
97
|
-
const color3 = interpolateColor(colorSequence[nextIndex3], colorSequence[nextIndex4], localProgress);
|
|
98
|
-
// Create gradient for current frame
|
|
99
|
-
const frameGradient = gradient(color1, color2, color3);
|
|
100
|
-
// Clear current line and display new frame
|
|
101
|
-
process.stdout.write('\r' + frameGradient(text));
|
|
102
|
-
await new Promise(resolve => setTimeout(resolve, frameDelay));
|
|
31
|
+
else {
|
|
32
|
+
console.log(createBlueGradient(tagline));
|
|
103
33
|
}
|
|
104
|
-
|
|
105
|
-
process.stdout.write('\r' + createBlueGradient(text) + '\n');
|
|
34
|
+
console.log();
|
|
106
35
|
}
|
|
107
36
|
/**
|
|
108
37
|
* Attempt to read and display logo file
|
|
@@ -112,50 +41,31 @@ export async function printLogo() {
|
|
|
112
41
|
return;
|
|
113
42
|
}
|
|
114
43
|
try {
|
|
115
|
-
// Try to read iTerm2 image format logo
|
|
116
44
|
const logoPath = join(__dirname, '../logo/logo.txt');
|
|
117
45
|
const logoContent = readFileSync(logoPath, 'utf-8');
|
|
118
|
-
// If successfully read and content is valid, display directly
|
|
119
46
|
if (logoContent && logoContent.length > 100) {
|
|
120
47
|
console.log(logoContent);
|
|
121
|
-
|
|
48
|
+
printDescription();
|
|
122
49
|
return;
|
|
123
50
|
}
|
|
124
51
|
}
|
|
125
|
-
catch
|
|
52
|
+
catch {
|
|
126
53
|
// iTerm2 logo read failed, continue trying ASCII logo
|
|
127
54
|
}
|
|
128
|
-
// Fallback: display ASCII art logo
|
|
129
55
|
try {
|
|
130
56
|
const asciiLogoPath = join(__dirname, '../logo/ascii-logo.txt');
|
|
131
57
|
const asciiContent = readFileSync(asciiLogoPath, 'utf-8');
|
|
132
|
-
// Display ASCII logo with gradient colors
|
|
133
58
|
console.log();
|
|
134
59
|
const lines = asciiContent.split('\n').filter(line => line.trim());
|
|
135
60
|
lines.forEach(line => {
|
|
136
61
|
console.log(createBlueGradient(line));
|
|
137
62
|
});
|
|
138
|
-
|
|
63
|
+
printDescription();
|
|
139
64
|
}
|
|
140
|
-
catch
|
|
141
|
-
// If ASCII logo also fails, display simple text logo
|
|
65
|
+
catch {
|
|
142
66
|
console.log();
|
|
143
67
|
console.log(createBlueGradient(' NBTCA'));
|
|
144
|
-
|
|
68
|
+
printDescription();
|
|
145
69
|
}
|
|
146
70
|
}
|
|
147
|
-
/**
|
|
148
|
-
* Display description text (with gradient animation)
|
|
149
|
-
*/
|
|
150
|
-
async function printDescription() {
|
|
151
|
-
const tagline = 'To be at the intersection of technology and liberal arts.';
|
|
152
|
-
console.log();
|
|
153
|
-
if (process.env['NO_COLOR']) {
|
|
154
|
-
console.log(tagline);
|
|
155
|
-
}
|
|
156
|
-
else {
|
|
157
|
-
await animateGradient(tagline, 1500);
|
|
158
|
-
}
|
|
159
|
-
console.log();
|
|
160
|
-
}
|
|
161
71
|
//# sourceMappingURL=logo.js.map
|
package/dist/core/logo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logo.js","sourceRoot":"","sources":["../../src/core/logo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC
|
|
1
|
+
{"version":3,"file":"logo.js","sourceRoot":"","sources":["../../src/core/logo.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,QAAQ,MAAM,iBAAiB,CAAC;AAEvC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC;;GAEG;AACH,SAAS,kBAAkB,CAAC,IAAY;IACtC,MAAM,YAAY,GAAG,QAAQ,CAAC;QAC5B,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,EAAK,YAAY;QAC7C,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,EAAE,EAAG,WAAW;QAC5C,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,EAAE,CAAK,OAAO;KACzC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB;IACvB,MAAM,OAAO,GAAG,2DAA2D,CAAC;IAC5E,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACrD,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACpD,IAAI,WAAW,IAAI,WAAW,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACzB,gBAAgB,EAAE,CAAC;YACnB,OAAO;QACT,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,sDAAsD;IACxD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,aAAa,GAAG,IAAI,CAAC,SAAS,EAAE,wBAAwB,CAAC,CAAC;QAChE,MAAM,YAAY,GAAG,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAC1D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACnB,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QACH,gBAAgB,EAAE,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;QAC3C,gBAAgB,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}
|
package/dist/core/menu.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Minimalist menu system
|
|
3
3
|
* Modern @clack/prompts select() with emoji icons and hint text
|
|
4
4
|
*/
|
|
5
|
-
export type MenuAction = 'events' | 'repair' | 'docs' | 'website' | 'github' | 'roadmap' | 'about' | 'language';
|
|
5
|
+
export type MenuAction = 'events' | 'repair' | 'docs' | 'links' | 'website' | 'github' | 'roadmap' | 'about' | 'language';
|
|
6
6
|
/**
|
|
7
7
|
* Display main menu — loops until user exits via Ctrl+C
|
|
8
8
|
*/
|
package/dist/core/menu.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/core/menu.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"menu.d.ts","sourceRoot":"","sources":["../../src/core/menu.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,MAAM,MAAM,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;AAiB1H;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAoBlD;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAYrE"}
|
package/dist/core/menu.js
CHANGED
|
@@ -9,33 +9,11 @@ import { openRepairService } from '../features/repair.js';
|
|
|
9
9
|
import { showDocsMenu } from '../features/docs.js';
|
|
10
10
|
import { openHomepage, openGithub, openRoadmap } from '../features/website.js';
|
|
11
11
|
import { printDivider, printNewLine, success } from './ui.js';
|
|
12
|
+
import { padEndV } from './text.js';
|
|
12
13
|
import { APP_INFO, URLS } from '../config/data.js';
|
|
13
14
|
import { t, getCurrentLanguage, setLanguage, clearTranslationCache } from '../i18n/index.js';
|
|
14
|
-
/** Visual column width: CJK characters count as 2. */
|
|
15
|
-
function visualWidth(str) {
|
|
16
|
-
let w = 0;
|
|
17
|
-
for (const ch of str) {
|
|
18
|
-
const cp = ch.codePointAt(0) ?? 0;
|
|
19
|
-
w += ((cp >= 0x1100 && cp <= 0x115F) ||
|
|
20
|
-
(cp >= 0x2E80 && cp <= 0x303F) ||
|
|
21
|
-
(cp >= 0x3040 && cp <= 0x33FF) ||
|
|
22
|
-
(cp >= 0x3400 && cp <= 0x4DBF) ||
|
|
23
|
-
(cp >= 0x4E00 && cp <= 0x9FFF) ||
|
|
24
|
-
(cp >= 0xAC00 && cp <= 0xD7AF) ||
|
|
25
|
-
(cp >= 0xF900 && cp <= 0xFAFF) ||
|
|
26
|
-
(cp >= 0xFE30 && cp <= 0xFE4F) ||
|
|
27
|
-
(cp >= 0xFF00 && cp <= 0xFF60) ||
|
|
28
|
-
(cp >= 0xFFE0 && cp <= 0xFFE6)) ? 2 : 1;
|
|
29
|
-
}
|
|
30
|
-
return w;
|
|
31
|
-
}
|
|
32
|
-
/** Pad string to visual width. */
|
|
33
|
-
function padEndV(str, width) {
|
|
34
|
-
const pad = width - visualWidth(str);
|
|
35
|
-
return pad > 0 ? str + ' '.repeat(pad) : str;
|
|
36
|
-
}
|
|
37
15
|
/**
|
|
38
|
-
* Get main menu options —
|
|
16
|
+
* Get main menu options — 6 items
|
|
39
17
|
*/
|
|
40
18
|
function getMainMenuOptions() {
|
|
41
19
|
const trans = t();
|
|
@@ -43,9 +21,7 @@ function getMainMenuOptions() {
|
|
|
43
21
|
{ value: 'events', label: trans.menu.events, hint: trans.menu.eventsDesc },
|
|
44
22
|
{ value: 'repair', label: trans.menu.repair, hint: trans.menu.repairDesc },
|
|
45
23
|
{ value: 'docs', label: trans.menu.docs, hint: trans.menu.docsDesc },
|
|
46
|
-
{ value: '
|
|
47
|
-
{ value: 'github', label: trans.menu.github, hint: trans.menu.githubDesc },
|
|
48
|
-
{ value: 'roadmap', label: trans.menu.roadmap, hint: trans.menu.roadmapDesc },
|
|
24
|
+
{ value: 'links', label: trans.menu.links, hint: trans.menu.linksDesc },
|
|
49
25
|
{ value: 'about', label: trans.menu.about, hint: trans.menu.aboutDesc },
|
|
50
26
|
{ value: 'language', label: trans.menu.language, hint: trans.menu.languageDesc },
|
|
51
27
|
];
|
|
@@ -84,6 +60,9 @@ export async function runMenuAction(action) {
|
|
|
84
60
|
case 'docs':
|
|
85
61
|
await showDocsMenu();
|
|
86
62
|
break;
|
|
63
|
+
case 'links':
|
|
64
|
+
await showLinksMenu();
|
|
65
|
+
break;
|
|
87
66
|
case 'website':
|
|
88
67
|
await openHomepage();
|
|
89
68
|
break;
|
|
@@ -101,29 +80,51 @@ export async function runMenuAction(action) {
|
|
|
101
80
|
break;
|
|
102
81
|
}
|
|
103
82
|
}
|
|
83
|
+
/**
|
|
84
|
+
* Links submenu — website, GitHub, roadmap
|
|
85
|
+
*/
|
|
86
|
+
async function showLinksMenu() {
|
|
87
|
+
const trans = t();
|
|
88
|
+
const link = await select({
|
|
89
|
+
message: trans.menu.chooseLink,
|
|
90
|
+
options: [
|
|
91
|
+
{ value: 'website', label: trans.menu.website, hint: 'nbtca.space' },
|
|
92
|
+
{ value: 'github', label: 'GitHub', hint: 'github.com/nbtca' },
|
|
93
|
+
{ value: 'roadmap', label: trans.menu.roadmap, hint: trans.menu.roadmapDesc },
|
|
94
|
+
],
|
|
95
|
+
});
|
|
96
|
+
if (isCancel(link))
|
|
97
|
+
return;
|
|
98
|
+
switch (link) {
|
|
99
|
+
case 'website':
|
|
100
|
+
await openHomepage();
|
|
101
|
+
break;
|
|
102
|
+
case 'github':
|
|
103
|
+
await openGithub();
|
|
104
|
+
break;
|
|
105
|
+
case 'roadmap':
|
|
106
|
+
await openRoadmap();
|
|
107
|
+
break;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
104
110
|
/**
|
|
105
111
|
* Display about information using clack note() box
|
|
106
112
|
*/
|
|
107
113
|
function showAbout() {
|
|
108
114
|
const trans = t();
|
|
109
115
|
const pad = 12;
|
|
116
|
+
const row = (label, value) => `${chalk.dim(padEndV(label, pad))}${value}`;
|
|
117
|
+
const link = (label, url) => row(label, chalk.cyan(url));
|
|
110
118
|
const content = [
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
'',
|
|
115
|
-
`${chalk.dim(padEndV(trans.about.github, pad))}${chalk.cyan(APP_INFO.repository)}`,
|
|
116
|
-
`${chalk.dim(padEndV(trans.about.website, pad))}${chalk.cyan(URLS.homepage)}`,
|
|
117
|
-
`${chalk.dim(padEndV(trans.about.email, pad))}${chalk.cyan(URLS.email)}`,
|
|
119
|
+
row(trans.about.project, APP_INFO.name),
|
|
120
|
+
row(trans.about.version, `v${APP_INFO.version}`),
|
|
121
|
+
row(trans.about.description, APP_INFO.fullDescription),
|
|
118
122
|
'',
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
' ' + trans.about.feature3,
|
|
123
|
-
' ' + trans.about.feature4,
|
|
123
|
+
link(trans.about.github, APP_INFO.repository),
|
|
124
|
+
link(trans.about.website, URLS.homepage),
|
|
125
|
+
link(trans.about.email, URLS.email),
|
|
124
126
|
'',
|
|
125
|
-
|
|
126
|
-
`${chalk.dim(padEndV(trans.about.author, pad))}m1ngsama`,
|
|
127
|
+
row(trans.about.license, 'MIT · Author: m1ngsama'),
|
|
127
128
|
].join('\n');
|
|
128
129
|
note(content, trans.about.title);
|
|
129
130
|
}
|
package/dist/core/menu.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/core/menu.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"menu.js","sourceRoot":"","sources":["../../src/core/menu.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/** Total visual width of a string (CJK characters count as 2). */
|
|
2
|
+
export declare function visualWidth(str: string): number;
|
|
3
|
+
/** Pad string to target visual width with trailing spaces. */
|
|
4
|
+
export declare function padEndV(str: string, width: number): string;
|
|
5
|
+
/** Truncate to visual width limit, appending '...' if cut. */
|
|
6
|
+
export declare function truncate(str: string, maxWidth: number): string;
|
|
7
|
+
//# sourceMappingURL=text.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/core/text.ts"],"names":[],"mappings":"AAiBA,kEAAkE;AAClE,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI/C;AAED,8DAA8D;AAC9D,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,8DAA8D;AAC9D,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAW9D"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Width of a single Unicode character: 2 for CJK/fullwidth, 1 otherwise. */
|
|
2
|
+
function charWidth(ch) {
|
|
3
|
+
const cp = ch.codePointAt(0) ?? 0;
|
|
4
|
+
return ((cp >= 0x1100 && cp <= 0x115F) || // Hangul Jamo
|
|
5
|
+
(cp >= 0x2E80 && cp <= 0x303F) || // CJK Radicals / Kangxi
|
|
6
|
+
(cp >= 0x3040 && cp <= 0x33FF) || // Japanese kana + CJK symbols
|
|
7
|
+
(cp >= 0x3400 && cp <= 0x4DBF) || // CJK Extension A
|
|
8
|
+
(cp >= 0x4E00 && cp <= 0x9FFF) || // CJK Unified Ideographs
|
|
9
|
+
(cp >= 0xAC00 && cp <= 0xD7AF) || // Hangul Syllables
|
|
10
|
+
(cp >= 0xF900 && cp <= 0xFAFF) || // CJK Compatibility Ideographs
|
|
11
|
+
(cp >= 0xFE30 && cp <= 0xFE4F) || // CJK Compatibility Forms
|
|
12
|
+
(cp >= 0xFF00 && cp <= 0xFF60) || // Fullwidth Forms
|
|
13
|
+
(cp >= 0xFFE0 && cp <= 0xFFE6) // Fullwidth Signs
|
|
14
|
+
) ? 2 : 1;
|
|
15
|
+
}
|
|
16
|
+
/** Total visual width of a string (CJK characters count as 2). */
|
|
17
|
+
export function visualWidth(str) {
|
|
18
|
+
let w = 0;
|
|
19
|
+
for (const ch of str)
|
|
20
|
+
w += charWidth(ch);
|
|
21
|
+
return w;
|
|
22
|
+
}
|
|
23
|
+
/** Pad string to target visual width with trailing spaces. */
|
|
24
|
+
export function padEndV(str, width) {
|
|
25
|
+
const pad = width - visualWidth(str);
|
|
26
|
+
return pad > 0 ? str + ' '.repeat(pad) : str;
|
|
27
|
+
}
|
|
28
|
+
/** Truncate to visual width limit, appending '...' if cut. */
|
|
29
|
+
export function truncate(str, maxWidth) {
|
|
30
|
+
if (visualWidth(str) <= maxWidth)
|
|
31
|
+
return str;
|
|
32
|
+
let w = 0;
|
|
33
|
+
let i = 0;
|
|
34
|
+
for (const ch of str) {
|
|
35
|
+
const cw = charWidth(ch);
|
|
36
|
+
if (w + cw > maxWidth - 3)
|
|
37
|
+
break;
|
|
38
|
+
w += cw;
|
|
39
|
+
i += ch.length;
|
|
40
|
+
}
|
|
41
|
+
return str.slice(0, i) + '...';
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/core/text.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,SAAS,SAAS,CAAC,EAAU;IAC3B,MAAM,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAClC,OAAO,CACL,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,IAAK,cAAc;QACjD,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,IAAK,wBAAwB;QAC3D,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,IAAK,8BAA8B;QACjE,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,IAAK,kBAAkB;QACrD,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,IAAK,yBAAyB;QAC5D,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,IAAK,mBAAmB;QACtD,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,IAAK,+BAA+B;QAClE,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,IAAK,0BAA0B;QAC7D,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,IAAK,kBAAkB;QACrD,CAAC,EAAE,IAAI,MAAM,IAAI,EAAE,IAAI,MAAM,CAAC,CAAK,kBAAkB;KACtD,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACZ,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,WAAW,CAAC,GAAW;IACrC,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,EAAE,IAAI,GAAG;QAAE,CAAC,IAAI,SAAS,CAAC,EAAE,CAAC,CAAC;IACzC,OAAO,CAAC,CAAC;AACX,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,OAAO,CAAC,GAAW,EAAE,KAAa;IAChD,MAAM,GAAG,GAAG,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC;IACrC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;AAC/C,CAAC;AAED,8DAA8D;AAC9D,MAAM,UAAU,QAAQ,CAAC,GAAW,EAAE,QAAgB;IACpD,IAAI,WAAW,CAAC,GAAG,CAAC,IAAI,QAAQ;QAAE,OAAO,GAAG,CAAC;IAC7C,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;QACrB,MAAM,EAAE,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,GAAG,CAAC;YAAE,MAAM;QACjC,CAAC,IAAI,EAAE,CAAC;QACR,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC;AACjC,CAAC"}
|
package/dist/core/ui.d.ts
CHANGED
|
@@ -18,10 +18,6 @@ export declare function info(msg: string): void;
|
|
|
18
18
|
* Display warning message
|
|
19
19
|
*/
|
|
20
20
|
export declare function warning(msg: string): void;
|
|
21
|
-
/**
|
|
22
|
-
* No-op: session framing moved to main.ts intro()
|
|
23
|
-
*/
|
|
24
|
-
export declare function printHeader(_title: string): void;
|
|
25
21
|
/**
|
|
26
22
|
* Display divider line
|
|
27
23
|
*/
|
package/dist/core/ui.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/core/ui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,
|
|
1
|
+
{"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/core/ui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED;;GAEG;AACH,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,IAAI,CAGnC;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,IAAI,CAIlC;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,GAAE,MAAU,GAAG,IAAI,CAIpD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,0CAIxC"}
|
package/dist/core/ui.js
CHANGED
|
@@ -28,12 +28,6 @@ export function info(msg) {
|
|
|
28
28
|
export function warning(msg) {
|
|
29
29
|
log.warn(msg);
|
|
30
30
|
}
|
|
31
|
-
/**
|
|
32
|
-
* No-op: session framing moved to main.ts intro()
|
|
33
|
-
*/
|
|
34
|
-
export function printHeader(_title) {
|
|
35
|
-
// intentional noop — intro() in main.ts owns the header
|
|
36
|
-
}
|
|
37
31
|
/**
|
|
38
32
|
* Display divider line
|
|
39
33
|
*/
|
package/dist/core/ui.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/core/ui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,
|
|
1
|
+
{"version":3,"file":"ui.js","sourceRoot":"","sources":["../../src/core/ui.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,GAAG,EAAE,OAAO,IAAI,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,IAAI,CAAC,GAAW;IAC9B,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY;IAC1B,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACnD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,CAAC,KAAK,EAAE,CAAC;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,MAAM,CAAC,GAAG,YAAY,EAAE,CAAC;IACzB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACb,OAAO,CAAC,CAAC;AACX,CAAC"}
|
package/dist/core/vim-keys.d.ts
CHANGED
|
@@ -1,15 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Vim keybindings support
|
|
3
|
-
* Intercepts and
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* Enable Vim key mappings for stdin
|
|
7
|
-
* Maps: j/k (down/up), g/G (home/end), q (quit), ESC (back)
|
|
3
|
+
* Intercepts raw data events and replaces vim keys with terminal escape sequences
|
|
4
|
+
* before readline processes them. This avoids patching the keypress layer which
|
|
5
|
+
* breaks in Node.js v25+ (emitKeys generator crash).
|
|
8
6
|
*/
|
|
9
7
|
export declare function enableVimKeys(): void;
|
|
10
|
-
/**
|
|
11
|
-
* Disable Vim key mappings
|
|
12
|
-
* Currently not implemented as we use Vim keys throughout the application
|
|
13
|
-
*/
|
|
14
|
-
export declare function disableVimKeys(): void;
|
|
15
8
|
//# sourceMappingURL=vim-keys.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vim-keys.d.ts","sourceRoot":"","sources":["../../src/core/vim-keys.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vim-keys.d.ts","sourceRoot":"","sources":["../../src/core/vim-keys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH,wBAAgB,aAAa,IAAI,IAAI,CAgBpC"}
|
package/dist/core/vim-keys.js
CHANGED
|
@@ -1,59 +1,32 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Vim keybindings support
|
|
3
|
-
* Intercepts and
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
* Enable Vim key mappings for stdin
|
|
7
|
-
* Maps: j/k (down/up), g/G (home/end), q (quit), ESC (back)
|
|
3
|
+
* Intercepts raw data events and replaces vim keys with terminal escape sequences
|
|
4
|
+
* before readline processes them. This avoids patching the keypress layer which
|
|
5
|
+
* breaks in Node.js v25+ (emitKeys generator crash).
|
|
8
6
|
*/
|
|
7
|
+
// Maps single-byte vim keys to terminal escape sequences
|
|
8
|
+
const VIM_TO_SEQ = {
|
|
9
|
+
j: Buffer.from('\u001b[B'), // down arrow
|
|
10
|
+
k: Buffer.from('\u001b[A'), // up arrow
|
|
11
|
+
g: Buffer.from('\u001b[H'), // home
|
|
12
|
+
G: Buffer.from('\u001b[F'), // end
|
|
13
|
+
q: Buffer.from('\u0003'), // ctrl+c (cancel)
|
|
14
|
+
};
|
|
9
15
|
export function enableVimKeys() {
|
|
10
16
|
const stdin = process.stdin;
|
|
11
|
-
|
|
12
|
-
if (!stdin.isTTY) {
|
|
17
|
+
if (!stdin.isTTY)
|
|
13
18
|
return;
|
|
14
|
-
}
|
|
15
|
-
// Save original input handler
|
|
16
19
|
const originalEmit = stdin.emit.bind(stdin);
|
|
17
|
-
// Override emit method to intercept keyboard events
|
|
18
20
|
stdin.emit = function (event, ...args) {
|
|
19
|
-
if (event === '
|
|
20
|
-
const
|
|
21
|
-
if (
|
|
22
|
-
|
|
23
|
-
if (
|
|
24
|
-
return originalEmit('
|
|
25
|
-
}
|
|
26
|
-
// k = up (mapped to up arrow)
|
|
27
|
-
if (key.name === 'k' && !key.ctrl && !key.meta) {
|
|
28
|
-
return originalEmit('keypress', null, { name: 'up' });
|
|
29
|
-
}
|
|
30
|
-
// g = jump to top (mapped to home)
|
|
31
|
-
if (key.name === 'g' && !key.shift && !key.ctrl && !key.meta) {
|
|
32
|
-
return originalEmit('keypress', null, { name: 'home' });
|
|
33
|
-
}
|
|
34
|
-
// G (Shift+g) = jump to bottom (mapped to end)
|
|
35
|
-
if (key.name === 'g' && key.shift) {
|
|
36
|
-
return originalEmit('keypress', null, { name: 'end' });
|
|
37
|
-
}
|
|
38
|
-
// ESC = back/cancel (pass through for menu handling)
|
|
39
|
-
// Note: Applications should implement back navigation for ESC
|
|
40
|
-
if (key.name === 'escape') {
|
|
41
|
-
return originalEmit('keypress', null, { name: 'escape', sequence: '\x1b' });
|
|
42
|
-
}
|
|
43
|
-
// q = quit (mapped to Ctrl+C for application exit)
|
|
44
|
-
if (key.name === 'q' && !key.ctrl && !key.meta) {
|
|
45
|
-
return originalEmit('keypress', null, { name: 'c', ctrl: true });
|
|
46
|
-
}
|
|
21
|
+
if (event === 'data') {
|
|
22
|
+
const chunk = args[0];
|
|
23
|
+
if (Buffer.isBuffer(chunk) && chunk.length === 1) {
|
|
24
|
+
const seq = VIM_TO_SEQ[String.fromCharCode(chunk[0])];
|
|
25
|
+
if (seq)
|
|
26
|
+
return originalEmit('data', seq);
|
|
47
27
|
}
|
|
48
28
|
}
|
|
49
29
|
return originalEmit(event, ...args);
|
|
50
30
|
};
|
|
51
31
|
}
|
|
52
|
-
/**
|
|
53
|
-
* Disable Vim key mappings
|
|
54
|
-
* Currently not implemented as we use Vim keys throughout the application
|
|
55
|
-
*/
|
|
56
|
-
export function disableVimKeys() {
|
|
57
|
-
// Not needed for current implementation
|
|
58
|
-
}
|
|
59
32
|
//# sourceMappingURL=vim-keys.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vim-keys.js","sourceRoot":"","sources":["../../src/core/vim-keys.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"vim-keys.js","sourceRoot":"","sources":["../../src/core/vim-keys.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,yDAAyD;AACzD,MAAM,UAAU,GAA2B;IACzC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,aAAa;IACzC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,WAAW;IACvC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,OAAO;IACnC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,MAAM;IAClC,CAAC,EAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAI,kBAAkB;CAC/C,CAAC;AAEF,MAAM,UAAU,aAAa;IAC3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,KAAK,CAAC,KAAK;QAAE,OAAO;IAEzB,MAAM,YAAY,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAE3C,KAAK,CAAC,IAAY,GAAG,UAAU,KAAa,EAAE,GAAG,IAAW;QAC3D,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACjD,MAAM,GAAG,GAAG,UAAU,CAAC,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC,CAAC,CAAC;gBAChE,IAAI,GAAG;oBAAE,OAAO,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,OAAO,YAAY,CAAC,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../src/features/calendar.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"calendar.d.ts","sourceRoot":"","sources":["../../src/features/calendar.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAyCpD;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,eAAe,EAAE,CAQlE;AAeD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAqCxF;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAUnD;AAED,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CAYlD"}
|