@pokit/tabs-opentui 0.0.21 → 0.0.23

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.
@@ -1 +1 @@
1
- {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAwB,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK/E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CAyG/C;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,mBAAwB,GAChC;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAuGzB"}
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../src/adapter.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAwB,QAAQ,EAAE,MAAM,aAAa,CAAC;AAK/E;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CA8G/C;AAED,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,QAAQ,EACb,OAAO,GAAE,mBAAwB,GAChC;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CA4GzB"}
package/dist/adapter.js CHANGED
@@ -53,6 +53,7 @@ export function createTabsAdapter() {
53
53
  return;
54
54
  resolved = true;
55
55
  // Remove signal handlers
56
+ process.removeListener('SIGINT', handleSignal);
56
57
  process.removeListener('SIGTERM', handleSignal);
57
58
  process.removeListener('SIGQUIT', handleSignal);
58
59
  process.removeListener('uncaughtException', handleUncaughtException);
@@ -79,6 +80,7 @@ export function createTabsAdapter() {
79
80
  process.exit(1);
80
81
  };
81
82
  // Register signal handlers
83
+ process.on('SIGINT', handleSignal);
82
84
  process.on('SIGTERM', handleSignal);
83
85
  process.on('SIGQUIT', handleSignal);
84
86
  process.on('uncaughtException', handleUncaughtException);
@@ -86,8 +88,11 @@ export function createTabsAdapter() {
86
88
  const handleFatalError = () => {
87
89
  cleanup();
88
90
  };
89
- const handleExit = () => {
91
+ const handleExit = (code) => {
90
92
  cleanup();
93
+ if (code === 130) {
94
+ process.exit(130);
95
+ }
91
96
  };
92
97
  // Use React.createElement to bypass OpenTUI's JSX type constraints for class components
93
98
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -120,6 +125,7 @@ export function createEventAdapter(bus, options = {}) {
120
125
  return;
121
126
  isCleanedUp = true;
122
127
  // Remove signal handlers
128
+ process.removeListener('SIGINT', handleSignal);
123
129
  process.removeListener('SIGTERM', handleSignal);
124
130
  process.removeListener('SIGQUIT', handleSignal);
125
131
  process.removeListener('uncaughtException', handleUncaughtException);
@@ -145,6 +151,7 @@ export function createEventAdapter(bus, options = {}) {
145
151
  process.exit(1);
146
152
  };
147
153
  // Register signal handlers
154
+ process.on('SIGINT', handleSignal);
148
155
  process.on('SIGTERM', handleSignal);
149
156
  process.on('SIGQUIT', handleSignal);
150
157
  process.on('uncaughtException', handleUncaughtException);
@@ -169,6 +176,9 @@ export function createEventAdapter(bus, options = {}) {
169
176
  const handleExit = (code) => {
170
177
  cleanup();
171
178
  options.onExit?.(code);
179
+ if (code === 130) {
180
+ process.exit(130);
181
+ }
172
182
  };
173
183
  // Handle fatal errors from error boundary
174
184
  const handleFatalError = () => {
@@ -9,7 +9,7 @@ type TabbedViewProps = {
9
9
  tabs: TabProcess[];
10
10
  activeIndex: number;
11
11
  onActiveIndexChange: (index: number) => void;
12
- onQuit: () => void;
12
+ onQuit: (reason: 'user' | 'interrupt') => void;
13
13
  onQuitRequest: () => void;
14
14
  onRestart: (index: number) => void;
15
15
  onKill: (index: number) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"tabbed-view.d.ts","sourceRoot":"","sources":["../src/tabbed-view.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAY,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAWnD,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,MAAM,EAAE,MAAM,IAAI,CAAC;IACnB,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AA6JF,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,WAAW,EACX,mBAAmB,EACnB,MAAM,EACN,aAAa,EACb,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,EAAE,eAAe,GAAG,KAAK,CAAC,SAAS,CA+FnC"}
1
+ {"version":3,"file":"tabbed-view.d.ts","sourceRoot":"","sources":["../src/tabbed-view.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAY,mBAAmB,EAAE,MAAM,eAAe,CAAC;AACnE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAWnD,KAAK,eAAe,GAAG;IACrB,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,KAAK,IAAI,CAAC;IAC/C,aAAa,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,EAAE,OAAO,CAAC;IACnB,gBAAgB,EAAE,MAAM,IAAI,CAAC;IAC7B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,mBAAmB,GAAG,IAAI,KAAK,IAAI,CAAC;IACtD,WAAW,EAAE,OAAO,CAAC;IACrB,YAAY,EAAE,MAAM,IAAI,CAAC;IACzB,WAAW,EAAE,MAAM,IAAI,CAAC;CACzB,CAAC;AA6JF,wBAAgB,UAAU,CAAC,EACzB,IAAI,EACJ,WAAW,EACX,mBAAmB,EACnB,MAAM,EACN,aAAa,EACb,SAAS,EACT,MAAM,EACN,kBAAkB,EAClB,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,SAAS,EACT,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,EAAE,eAAe,GAAG,KAAK,CAAC,SAAS,CA+FnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"tabs-app.d.ts","sourceRoot":"","sources":["../src/tabs-app.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAAE,OAAO,EAAc,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS/C,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,CAAC;AAOF,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,GAAG,KAAK,CAAC,SAAS,CAiWjF"}
1
+ {"version":3,"file":"tabs-app.d.ts","sourceRoot":"","sources":["../src/tabs-app.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EAAE,OAAO,EAAc,MAAM,kBAAkB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAS/C,KAAK,YAAY,GAAG;IAClB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;IACrB,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC,CAAC;AAOF,wBAAgB,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,YAAY,GAAG,KAAK,CAAC,SAAS,CAoWjF"}
package/dist/tabs-app.js CHANGED
@@ -261,9 +261,9 @@ export function TabsApp({ items, options, onExit }) {
261
261
  const handleQuitRequest = useCallback(() => {
262
262
  setQuitConfirmPending((prev) => !prev);
263
263
  }, []);
264
- const handleQuit = useCallback(() => {
264
+ const handleQuit = useCallback((reason) => {
265
265
  killAll();
266
- onExit(0);
266
+ onExit(reason === 'interrupt' ? 130 : 0);
267
267
  }, [killAll, onExit]);
268
268
  const handleEnterFocusMode = useCallback(() => {
269
269
  const proc = processesRef.current[activeIndex];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pokit/tabs-opentui",
3
- "version": "0.0.21",
3
+ "version": "0.0.23",
4
4
  "description": "OpenTUI-based tab renderer for pok CLI applications",
5
5
  "keywords": [
6
6
  "cli",
@@ -53,12 +53,12 @@
53
53
  "devDependencies": {
54
54
  "@types/bun": "latest",
55
55
  "@types/react": "^19.2.0",
56
- "@pokit/core": "0.0.21",
57
- "@pokit/tabs-core": "0.0.21"
56
+ "@pokit/core": "0.0.23",
57
+ "@pokit/tabs-core": "0.0.23"
58
58
  },
59
59
  "peerDependencies": {
60
- "@pokit/core": "0.0.21",
61
- "@pokit/tabs-core": "0.0.21"
60
+ "@pokit/core": "0.0.23",
61
+ "@pokit/tabs-core": "0.0.23"
62
62
  },
63
63
  "engines": {
64
64
  "bun": ">=1.0.0"
package/src/adapter.tsx CHANGED
@@ -66,6 +66,7 @@ export function createTabsAdapter(): TabsAdapter {
66
66
  resolved = true;
67
67
 
68
68
  // Remove signal handlers
69
+ process.removeListener('SIGINT', handleSignal);
69
70
  process.removeListener('SIGTERM', handleSignal);
70
71
  process.removeListener('SIGQUIT', handleSignal);
71
72
  process.removeListener('uncaughtException', handleUncaughtException);
@@ -96,6 +97,7 @@ export function createTabsAdapter(): TabsAdapter {
96
97
  };
97
98
 
98
99
  // Register signal handlers
100
+ process.on('SIGINT', handleSignal);
99
101
  process.on('SIGTERM', handleSignal);
100
102
  process.on('SIGQUIT', handleSignal);
101
103
  process.on('uncaughtException', handleUncaughtException);
@@ -105,8 +107,11 @@ export function createTabsAdapter(): TabsAdapter {
105
107
  cleanup();
106
108
  };
107
109
 
108
- const handleExit = () => {
110
+ const handleExit = (code: number) => {
109
111
  cleanup();
112
+ if (code === 130) {
113
+ process.exit(130);
114
+ }
110
115
  };
111
116
 
112
117
  // Use React.createElement to bypass OpenTUI's JSX type constraints for class components
@@ -157,6 +162,7 @@ export function createEventAdapter(
157
162
  isCleanedUp = true;
158
163
 
159
164
  // Remove signal handlers
165
+ process.removeListener('SIGINT', handleSignal);
160
166
  process.removeListener('SIGTERM', handleSignal);
161
167
  process.removeListener('SIGQUIT', handleSignal);
162
168
  process.removeListener('uncaughtException', handleUncaughtException);
@@ -186,6 +192,7 @@ export function createEventAdapter(
186
192
  };
187
193
 
188
194
  // Register signal handlers
195
+ process.on('SIGINT', handleSignal);
189
196
  process.on('SIGTERM', handleSignal);
190
197
  process.on('SIGQUIT', handleSignal);
191
198
  process.on('uncaughtException', handleUncaughtException);
@@ -215,6 +222,9 @@ export function createEventAdapter(
215
222
  const handleExit = (code: number) => {
216
223
  cleanup();
217
224
  options.onExit?.(code);
225
+ if (code === 130) {
226
+ process.exit(130);
227
+ }
218
228
  };
219
229
 
220
230
  // Handle fatal errors from error boundary
@@ -21,7 +21,7 @@ type TabbedViewProps = {
21
21
  tabs: TabProcess[];
22
22
  activeIndex: number;
23
23
  onActiveIndexChange: (index: number) => void;
24
- onQuit: () => void;
24
+ onQuit: (reason: 'user' | 'interrupt') => void;
25
25
  onQuitRequest: () => void;
26
26
  onRestart: (index: number) => void;
27
27
  onKill: (index: number) => void;
package/src/tabs-app.tsx CHANGED
@@ -324,10 +324,13 @@ export function TabsApp({ items, options, onExit }: TabsAppProps): React.ReactNo
324
324
  setQuitConfirmPending((prev) => !prev);
325
325
  }, []);
326
326
 
327
- const handleQuit = useCallback(() => {
328
- killAll();
329
- onExit(0);
330
- }, [killAll, onExit]);
327
+ const handleQuit = useCallback(
328
+ (reason: 'user' | 'interrupt') => {
329
+ killAll();
330
+ onExit(reason === 'interrupt' ? 130 : 0);
331
+ },
332
+ [killAll, onExit]
333
+ );
331
334
 
332
335
  const handleEnterFocusMode = useCallback(() => {
333
336
  const proc = processesRef.current[activeIndex];