tuidoscope 0.1.6 → 0.1.7

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 (2) hide show
  1. package/dist/index.js +704 -461
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -1,18 +1,39 @@
1
1
  #!/usr/bin/env bun
2
2
  // @bun
3
3
  // src/index.tsx
4
+ import { createComponent as _$createComponent6 } from "@opentui/solid";
4
5
  import { render, extend } from "@opentui/solid";
5
6
  import { GhosttyTerminalRenderable } from "ghostty-opentui/terminal-buffer";
6
7
 
7
8
  // src/app.tsx
9
+ import { insertNode as _$insertNode8 } from "@opentui/solid";
10
+ import { memo as _$memo6 } from "@opentui/solid";
11
+ import { insert as _$insert8 } from "@opentui/solid";
12
+ import { createComponent as _$createComponent5 } from "@opentui/solid";
13
+ import { setProp as _$setProp8 } from "@opentui/solid";
14
+ import { createElement as _$createElement8 } from "@opentui/solid";
8
15
  import { Show as Show3, createSignal as createSignal4, createEffect as createEffect2, onCleanup, createMemo as createMemo3 } from "solid-js";
9
16
  import { useKeyboard as useKeyboard4, useTerminalDimensions, useRenderer } from "@opentui/solid";
10
17
 
11
18
  // src/components/TabList.tsx
19
+ import { effect as _$effect2 } from "@opentui/solid";
20
+ import { createComponent as _$createComponent } from "@opentui/solid";
21
+ import { insert as _$insert2 } from "@opentui/solid";
22
+ import { createTextNode as _$createTextNode2 } from "@opentui/solid";
23
+ import { insertNode as _$insertNode2 } from "@opentui/solid";
24
+ import { memo as _$memo2 } from "@opentui/solid";
25
+ import { setProp as _$setProp2 } from "@opentui/solid";
26
+ import { createElement as _$createElement2 } from "@opentui/solid";
12
27
  import { For, createMemo } from "solid-js";
13
28
 
14
29
  // src/components/TabItem.tsx
15
- import { jsxDEV } from "@opentui/solid/jsx-dev-runtime";
30
+ import { effect as _$effect } from "@opentui/solid";
31
+ import { memo as _$memo } from "@opentui/solid";
32
+ import { createTextNode as _$createTextNode } from "@opentui/solid";
33
+ import { insertNode as _$insertNode } from "@opentui/solid";
34
+ import { insert as _$insert } from "@opentui/solid";
35
+ import { setProp as _$setProp } from "@opentui/solid";
36
+ import { createElement as _$createElement } from "@opentui/solid";
16
37
  function getStatusIndicator(status) {
17
38
  switch (status) {
18
39
  case "running":
@@ -56,32 +77,43 @@ var TabItem = (props) => {
56
77
  }
57
78
  return props.theme.foreground;
58
79
  };
59
- return /* @__PURE__ */ jsxDEV("box", {
60
- height: 1,
61
- width: props.width,
62
- flexDirection: "row",
63
- onMouseDown: props.onSelect,
64
- children: [
65
- /* @__PURE__ */ jsxDEV("text", {
66
- fg: getStatusColor(props.status, props.theme),
67
- children: getStatusIndicator(props.status)
68
- }, undefined, false, undefined, this),
69
- /* @__PURE__ */ jsxDEV("text", {
70
- children: " "
71
- }, undefined, false, undefined, this),
72
- /* @__PURE__ */ jsxDEV("text", {
73
- fg: fgColor(),
74
- bg: bgColor(),
75
- children: props.isActive ? /* @__PURE__ */ jsxDEV("b", {
76
- children: truncatedName()
77
- }, undefined, false, undefined, this) : truncatedName()
78
- }, undefined, false, undefined, this)
79
- ]
80
- }, undefined, true, undefined, this);
80
+ return (() => {
81
+ var _el$ = _$createElement("box"), _el$2 = _$createElement("text"), _el$3 = _$createElement("text"), _el$5 = _$createElement("text");
82
+ _$insertNode(_el$, _el$2);
83
+ _$insertNode(_el$, _el$3);
84
+ _$insertNode(_el$, _el$5);
85
+ _$setProp(_el$, "height", 1);
86
+ _$setProp(_el$, "flexDirection", "row");
87
+ _$insert(_el$2, () => getStatusIndicator(props.status));
88
+ _$insertNode(_el$3, _$createTextNode(` `));
89
+ _$insert(_el$5, (() => {
90
+ var _c$ = _$memo(() => !!props.isActive);
91
+ return () => _c$() ? (() => {
92
+ var _el$6 = _$createElement("b");
93
+ _$insert(_el$6, truncatedName);
94
+ return _el$6;
95
+ })() : truncatedName();
96
+ })());
97
+ _$effect((_p$) => {
98
+ var { width: _v$, onSelect: _v$2 } = props, _v$3 = getStatusColor(props.status, props.theme), _v$4 = fgColor(), _v$5 = bgColor();
99
+ _v$ !== _p$.e && (_p$.e = _$setProp(_el$, "width", _v$, _p$.e));
100
+ _v$2 !== _p$.t && (_p$.t = _$setProp(_el$, "onMouseDown", _v$2, _p$.t));
101
+ _v$3 !== _p$.a && (_p$.a = _$setProp(_el$2, "fg", _v$3, _p$.a));
102
+ _v$4 !== _p$.o && (_p$.o = _$setProp(_el$5, "fg", _v$4, _p$.o));
103
+ _v$5 !== _p$.i && (_p$.i = _$setProp(_el$5, "bg", _v$5, _p$.i));
104
+ return _p$;
105
+ }, {
106
+ e: undefined,
107
+ t: undefined,
108
+ a: undefined,
109
+ o: undefined,
110
+ i: undefined
111
+ });
112
+ return _el$;
113
+ })();
81
114
  };
82
115
 
83
116
  // src/components/TabList.tsx
84
- import { jsxDEV as jsxDEV2 } from "@opentui/solid/jsx-dev-runtime";
85
117
  var TabList = (props) => {
86
118
  const visibleHeight = () => props.height - 2;
87
119
  const visibleEntries = createMemo(() => {
@@ -91,126 +123,176 @@ var TabList = (props) => {
91
123
  });
92
124
  const hasScrollUp = () => props.scrollOffset > 0;
93
125
  const hasScrollDown = () => props.scrollOffset + visibleHeight() < props.entries.length;
94
- return /* @__PURE__ */ jsxDEV2("box", {
95
- flexDirection: "column",
96
- width: props.width,
97
- height: props.height,
98
- borderStyle: "single",
99
- borderColor: props.isFocused ? props.theme.primary : props.theme.muted,
100
- children: [
101
- /* @__PURE__ */ jsxDEV2("box", {
102
- height: 1,
103
- width: props.width - 2,
104
- children: /* @__PURE__ */ jsxDEV2("text", {
105
- fg: props.theme.accent,
106
- children: /* @__PURE__ */ jsxDEV2("b", {
107
- children: [
108
- "Apps ",
109
- hasScrollUp() ? "\u25B2" : " ",
110
- hasScrollDown() ? "\u25BC" : " "
111
- ]
112
- }, undefined, true, undefined, this)
113
- }, undefined, false, undefined, this)
114
- }, undefined, false, undefined, this),
115
- /* @__PURE__ */ jsxDEV2("box", {
116
- flexDirection: "column",
117
- flexGrow: 1,
118
- children: /* @__PURE__ */ jsxDEV2(For, {
119
- each: visibleEntries(),
120
- children: (entry, index) => {
121
- const actualIndex = () => props.scrollOffset + index();
122
- return /* @__PURE__ */ jsxDEV2(TabItem, {
123
- entry,
124
- status: props.getStatus(entry.id),
125
- isActive: entry.id === props.activeTabId,
126
- isFocused: props.isFocused && actualIndex() === props.selectedIndex,
127
- width: props.width - 2,
128
- theme: props.theme,
129
- onSelect: () => props.onSelect(entry.id)
130
- }, undefined, false, undefined, this);
131
- }
132
- }, undefined, false, undefined, this)
133
- }, undefined, false, undefined, this),
134
- /* @__PURE__ */ jsxDEV2("box", {
135
- height: 1,
136
- width: props.width - 2,
137
- onMouseDown: props.onAddClick,
138
- children: /* @__PURE__ */ jsxDEV2("text", {
139
- fg: props.theme.muted,
140
- children: "[+ Add]"
141
- }, undefined, false, undefined, this)
142
- }, undefined, false, undefined, this)
143
- ]
144
- }, undefined, true, undefined, this);
126
+ return (() => {
127
+ var _el$ = _$createElement2("box"), _el$2 = _$createElement2("box"), _el$3 = _$createElement2("text"), _el$4 = _$createElement2("b"), _el$5 = _$createTextNode2(`Apps `), _el$6 = _$createElement2("box"), _el$7 = _$createElement2("box"), _el$8 = _$createElement2("text");
128
+ _$insertNode2(_el$, _el$2);
129
+ _$insertNode2(_el$, _el$6);
130
+ _$insertNode2(_el$, _el$7);
131
+ _$setProp2(_el$, "flexDirection", "column");
132
+ _$setProp2(_el$, "borderStyle", "single");
133
+ _$insertNode2(_el$2, _el$3);
134
+ _$setProp2(_el$2, "height", 1);
135
+ _$insertNode2(_el$3, _el$4);
136
+ _$insertNode2(_el$4, _el$5);
137
+ _$insert2(_el$4, () => hasScrollUp() ? "\u25B2" : " ", null);
138
+ _$insert2(_el$4, () => hasScrollDown() ? "\u25BC" : " ", null);
139
+ _$setProp2(_el$6, "flexDirection", "column");
140
+ _$setProp2(_el$6, "flexGrow", 1);
141
+ _$insert2(_el$6, _$createComponent(For, {
142
+ get each() {
143
+ return visibleEntries();
144
+ },
145
+ children: (entry, index) => {
146
+ const actualIndex = () => props.scrollOffset + index();
147
+ return _$createComponent(TabItem, {
148
+ entry,
149
+ get status() {
150
+ return props.getStatus(entry.id);
151
+ },
152
+ get isActive() {
153
+ return entry.id === props.activeTabId;
154
+ },
155
+ get isFocused() {
156
+ return _$memo2(() => !!props.isFocused)() && actualIndex() === props.selectedIndex;
157
+ },
158
+ get width() {
159
+ return props.width - 2;
160
+ },
161
+ get theme() {
162
+ return props.theme;
163
+ },
164
+ onSelect: () => props.onSelect(entry.id)
165
+ });
166
+ }
167
+ }));
168
+ _$insertNode2(_el$7, _el$8);
169
+ _$setProp2(_el$7, "height", 1);
170
+ _$insertNode2(_el$8, _$createTextNode2(`[+ Add]`));
171
+ _$effect2((_p$) => {
172
+ var { width: _v$, height: _v$2 } = props, _v$3 = props.isFocused ? props.theme.primary : props.theme.muted, _v$4 = props.width - 2, _v$5 = props.theme.accent, _v$6 = props.width - 2, _v$7 = props.onAddClick, _v$8 = props.theme.muted;
173
+ _v$ !== _p$.e && (_p$.e = _$setProp2(_el$, "width", _v$, _p$.e));
174
+ _v$2 !== _p$.t && (_p$.t = _$setProp2(_el$, "height", _v$2, _p$.t));
175
+ _v$3 !== _p$.a && (_p$.a = _$setProp2(_el$, "borderColor", _v$3, _p$.a));
176
+ _v$4 !== _p$.o && (_p$.o = _$setProp2(_el$2, "width", _v$4, _p$.o));
177
+ _v$5 !== _p$.i && (_p$.i = _$setProp2(_el$3, "fg", _v$5, _p$.i));
178
+ _v$6 !== _p$.n && (_p$.n = _$setProp2(_el$7, "width", _v$6, _p$.n));
179
+ _v$7 !== _p$.s && (_p$.s = _$setProp2(_el$7, "onMouseDown", _v$7, _p$.s));
180
+ _v$8 !== _p$.h && (_p$.h = _$setProp2(_el$8, "fg", _v$8, _p$.h));
181
+ return _p$;
182
+ }, {
183
+ e: undefined,
184
+ t: undefined,
185
+ a: undefined,
186
+ o: undefined,
187
+ i: undefined,
188
+ n: undefined,
189
+ s: undefined,
190
+ h: undefined
191
+ });
192
+ return _el$;
193
+ })();
145
194
  };
146
195
 
147
196
  // src/components/TerminalPane.tsx
197
+ import { createTextNode as _$createTextNode3 } from "@opentui/solid";
198
+ import { insertNode as _$insertNode3 } from "@opentui/solid";
199
+ import { effect as _$effect3 } from "@opentui/solid";
200
+ import { insert as _$insert3 } from "@opentui/solid";
201
+ import { createComponent as _$createComponent2 } from "@opentui/solid";
202
+ import { setProp as _$setProp3 } from "@opentui/solid";
203
+ import { createElement as _$createElement3 } from "@opentui/solid";
148
204
  import { Show } from "solid-js";
149
- import { jsxDEV as jsxDEV3 } from "@opentui/solid/jsx-dev-runtime";
150
205
  var TerminalPane = (props) => {
151
206
  const contentWidth = () => Math.max(1, props.width - 2);
152
207
  const contentHeight = () => Math.max(1, props.height - 3);
153
- return /* @__PURE__ */ jsxDEV3("box", {
154
- flexDirection: "column",
155
- flexGrow: 1,
156
- height: props.height,
157
- borderStyle: "single",
158
- borderColor: props.isFocused ? props.theme.primary : props.theme.muted,
159
- children: /* @__PURE__ */ jsxDEV3(Show, {
160
- when: props.runningApp,
161
- fallback: /* @__PURE__ */ jsxDEV3("box", {
162
- flexGrow: 1,
163
- justifyContent: "center",
164
- alignItems: "center",
165
- children: /* @__PURE__ */ jsxDEV3("text", {
166
- fg: props.theme.muted,
167
- children: "No app selected. Press Ctrl+T to add one."
168
- }, undefined, false, undefined, this)
169
- }, undefined, false, undefined, this),
170
- children: (app) => /* @__PURE__ */ jsxDEV3("box", {
171
- flexDirection: "column",
172
- flexGrow: 1,
173
- children: [
174
- /* @__PURE__ */ jsxDEV3("box", {
175
- height: 1,
176
- flexDirection: "row",
177
- children: [
178
- /* @__PURE__ */ jsxDEV3("text", {
179
- fg: props.theme.accent,
180
- children: /* @__PURE__ */ jsxDEV3("b", {
181
- children: app().entry.name
182
- }, undefined, false, undefined, this)
183
- }, undefined, false, undefined, this),
184
- /* @__PURE__ */ jsxDEV3("text", {
185
- fg: props.theme.muted,
186
- children: [
187
- " ",
188
- "(",
189
- app().status,
190
- ")"
191
- ]
192
- }, undefined, true, undefined, this)
193
- ]
194
- }, undefined, true, undefined, this),
195
- /* @__PURE__ */ jsxDEV3("box", {
208
+ return (() => {
209
+ var _el$ = _$createElement3("box");
210
+ _$setProp3(_el$, "flexDirection", "column");
211
+ _$setProp3(_el$, "flexGrow", 1);
212
+ _$setProp3(_el$, "borderStyle", "single");
213
+ _$insert3(_el$, _$createComponent2(Show, {
214
+ get when() {
215
+ return props.runningApp;
216
+ },
217
+ get fallback() {
218
+ return (() => {
219
+ var _el$2 = _$createElement3("box"), _el$3 = _$createElement3("text");
220
+ _$insertNode3(_el$2, _el$3);
221
+ _$setProp3(_el$2, "flexGrow", 1);
222
+ _$setProp3(_el$2, "justifyContent", "center");
223
+ _$setProp3(_el$2, "alignItems", "center");
224
+ _$insertNode3(_el$3, _$createTextNode3(`No app selected. Press Ctrl+T to add one.`));
225
+ _$effect3((_$p) => _$setProp3(_el$3, "fg", props.theme.muted, _$p));
226
+ return _el$2;
227
+ })();
228
+ },
229
+ children: (app) => (() => {
230
+ var _el$5 = _$createElement3("box"), _el$6 = _$createElement3("box"), _el$7 = _$createElement3("text"), _el$8 = _$createElement3("b"), _el$9 = _$createElement3("text"), _el$0 = _$createTextNode3(` (`), _el$10 = _$createTextNode3(`)`), _el$11 = _$createElement3("box"), _el$12 = _$createElement3("ghostty-terminal");
231
+ _$insertNode3(_el$5, _el$6);
232
+ _$insertNode3(_el$5, _el$11);
233
+ _$setProp3(_el$5, "flexDirection", "column");
234
+ _$setProp3(_el$5, "flexGrow", 1);
235
+ _$insertNode3(_el$6, _el$7);
236
+ _$insertNode3(_el$6, _el$9);
237
+ _$setProp3(_el$6, "height", 1);
238
+ _$setProp3(_el$6, "flexDirection", "row");
239
+ _$insertNode3(_el$7, _el$8);
240
+ _$insert3(_el$8, () => app().entry.name);
241
+ _$insertNode3(_el$9, _el$0);
242
+ _$insertNode3(_el$9, _el$10);
243
+ _$insert3(_el$9, () => app().status, _el$10);
244
+ _$insertNode3(_el$11, _el$12);
245
+ _$setProp3(_el$11, "overflow", "hidden");
246
+ _$setProp3(_el$12, "showCursor", true);
247
+ _$effect3((_p$) => {
248
+ var _v$3 = props.theme.accent, _v$4 = props.theme.muted, _v$5 = contentWidth(), _v$6 = contentHeight(), _v$7 = app().buffer, _v$8 = contentWidth(), _v$9 = contentHeight(), _v$0 = {
196
249
  width: contentWidth(),
197
- height: contentHeight(),
198
- overflow: "hidden",
199
- children: /* @__PURE__ */ jsxDEV3("ghostty-terminal", {
200
- ansi: app().buffer,
201
- cols: contentWidth(),
202
- rows: contentHeight(),
203
- showCursor: true,
204
- style: { width: contentWidth(), height: contentHeight() }
205
- }, undefined, false, undefined, this)
206
- }, undefined, false, undefined, this)
207
- ]
208
- }, undefined, true, undefined, this)
209
- }, undefined, false, undefined, this)
210
- }, undefined, false, undefined, this);
250
+ height: contentHeight()
251
+ };
252
+ _v$3 !== _p$.e && (_p$.e = _$setProp3(_el$7, "fg", _v$3, _p$.e));
253
+ _v$4 !== _p$.t && (_p$.t = _$setProp3(_el$9, "fg", _v$4, _p$.t));
254
+ _v$5 !== _p$.a && (_p$.a = _$setProp3(_el$11, "width", _v$5, _p$.a));
255
+ _v$6 !== _p$.o && (_p$.o = _$setProp3(_el$11, "height", _v$6, _p$.o));
256
+ _v$7 !== _p$.i && (_p$.i = _$setProp3(_el$12, "ansi", _v$7, _p$.i));
257
+ _v$8 !== _p$.n && (_p$.n = _$setProp3(_el$12, "cols", _v$8, _p$.n));
258
+ _v$9 !== _p$.s && (_p$.s = _$setProp3(_el$12, "rows", _v$9, _p$.s));
259
+ _v$0 !== _p$.h && (_p$.h = _$setProp3(_el$12, "style", _v$0, _p$.h));
260
+ return _p$;
261
+ }, {
262
+ e: undefined,
263
+ t: undefined,
264
+ a: undefined,
265
+ o: undefined,
266
+ i: undefined,
267
+ n: undefined,
268
+ s: undefined,
269
+ h: undefined
270
+ });
271
+ return _el$5;
272
+ })()
273
+ }));
274
+ _$effect3((_p$) => {
275
+ var _v$ = props.height, _v$2 = props.isFocused ? props.theme.primary : props.theme.muted;
276
+ _v$ !== _p$.e && (_p$.e = _$setProp3(_el$, "height", _v$, _p$.e));
277
+ _v$2 !== _p$.t && (_p$.t = _$setProp3(_el$, "borderColor", _v$2, _p$.t));
278
+ return _p$;
279
+ }, {
280
+ e: undefined,
281
+ t: undefined
282
+ });
283
+ return _el$;
284
+ })();
211
285
  };
212
286
 
213
287
  // src/components/StatusBar.tsx
288
+ import { memo as _$memo3 } from "@opentui/solid";
289
+ import { createComponent as _$createComponent3 } from "@opentui/solid";
290
+ import { effect as _$effect4 } from "@opentui/solid";
291
+ import { insert as _$insert4 } from "@opentui/solid";
292
+ import { createTextNode as _$createTextNode4 } from "@opentui/solid";
293
+ import { insertNode as _$insertNode4 } from "@opentui/solid";
294
+ import { setProp as _$setProp4 } from "@opentui/solid";
295
+ import { createElement as _$createElement4 } from "@opentui/solid";
214
296
  import { Show as Show2 } from "solid-js";
215
297
 
216
298
  // src/lib/keybinds.ts
@@ -269,74 +351,84 @@ function formatKeybind(keybind) {
269
351
  }
270
352
 
271
353
  // src/components/StatusBar.tsx
272
- import { jsxDEV as jsxDEV4 } from "@opentui/solid/jsx-dev-runtime";
273
354
  var StatusBar = (props) => {
274
- return /* @__PURE__ */ jsxDEV4("box", {
275
- height: 1,
276
- flexDirection: "row",
277
- backgroundColor: props.theme.muted,
278
- children: [
279
- /* @__PURE__ */ jsxDEV4("box", {
280
- flexGrow: 1,
281
- children: /* @__PURE__ */ jsxDEV4("text", {
282
- fg: props.theme.foreground,
283
- children: [
284
- " ",
285
- formatKeybind(props.keybinds.toggle_focus),
286
- ":Focus",
287
- " | ",
288
- formatKeybind(props.keybinds.command_palette),
289
- ":Palette",
290
- " | ",
291
- formatKeybind(props.keybinds.edit_app),
292
- ":Edit",
293
- " | ",
294
- formatKeybind(props.keybinds.stop_app),
295
- ":Stop",
296
- " | ",
297
- formatKeybind(props.keybinds.kill_all),
298
- ":KillAll",
299
- " | ",
300
- formatKeybind(props.keybinds.quit),
301
- ":Quit"
302
- ]
303
- }, undefined, true, undefined, this)
304
- }, undefined, false, undefined, this),
305
- /* @__PURE__ */ jsxDEV4("box", {
306
- children: /* @__PURE__ */ jsxDEV4(Show2, {
307
- when: props.message,
308
- fallback: /* @__PURE__ */ jsxDEV4(Show2, {
309
- when: props.appName,
310
- children: /* @__PURE__ */ jsxDEV4("text", {
311
- fg: props.theme.accent,
312
- children: [
313
- props.appName,
314
- props.appStatus ? ` (${props.appStatus})` : ""
315
- ]
316
- }, undefined, true, undefined, this)
317
- }, undefined, false, undefined, this),
318
- children: /* @__PURE__ */ jsxDEV4("text", {
319
- fg: props.theme.accent,
320
- children: /* @__PURE__ */ jsxDEV4("b", {
321
- children: props.message
322
- }, undefined, false, undefined, this)
323
- }, undefined, false, undefined, this)
324
- }, undefined, false, undefined, this)
325
- }, undefined, false, undefined, this),
326
- /* @__PURE__ */ jsxDEV4("box", {
327
- children: /* @__PURE__ */ jsxDEV4("text", {
328
- fg: props.theme.foreground,
329
- children: [
330
- props.focusMode === "terminal" ? "[TERMINAL]" : "[TABS]",
331
- " "
332
- ]
333
- }, undefined, true, undefined, this)
334
- }, undefined, false, undefined, this)
335
- ]
336
- }, undefined, true, undefined, this);
355
+ return (() => {
356
+ var _el$ = _$createElement4("box"), _el$2 = _$createElement4("box"), _el$3 = _$createElement4("text"), _el$4 = _$createTextNode4(` `), _el$5 = _$createTextNode4(`:Focus | `), _el$7 = _$createTextNode4(`:Palette | `), _el$9 = _$createTextNode4(`:Edit | `), _el$1 = _$createTextNode4(`:Stop | `), _el$11 = _$createTextNode4(`:KillAll | `), _el$13 = _$createTextNode4(`:Quit`), _el$14 = _$createElement4("box"), _el$17 = _$createElement4("box"), _el$18 = _$createElement4("text"), _el$19 = _$createTextNode4(` `);
357
+ _$insertNode4(_el$, _el$2);
358
+ _$insertNode4(_el$, _el$14);
359
+ _$insertNode4(_el$, _el$17);
360
+ _$setProp4(_el$, "height", 1);
361
+ _$setProp4(_el$, "flexDirection", "row");
362
+ _$insertNode4(_el$2, _el$3);
363
+ _$setProp4(_el$2, "flexGrow", 1);
364
+ _$insertNode4(_el$3, _el$4);
365
+ _$insertNode4(_el$3, _el$5);
366
+ _$insertNode4(_el$3, _el$7);
367
+ _$insertNode4(_el$3, _el$9);
368
+ _$insertNode4(_el$3, _el$1);
369
+ _$insertNode4(_el$3, _el$11);
370
+ _$insertNode4(_el$3, _el$13);
371
+ _$insert4(_el$3, () => formatKeybind(props.keybinds.toggle_focus), _el$5);
372
+ _$insert4(_el$3, () => formatKeybind(props.keybinds.command_palette), _el$7);
373
+ _$insert4(_el$3, () => formatKeybind(props.keybinds.edit_app), _el$9);
374
+ _$insert4(_el$3, () => formatKeybind(props.keybinds.stop_app), _el$1);
375
+ _$insert4(_el$3, () => formatKeybind(props.keybinds.kill_all), _el$11);
376
+ _$insert4(_el$3, () => formatKeybind(props.keybinds.quit), _el$13);
377
+ _$insert4(_el$14, _$createComponent3(Show2, {
378
+ get when() {
379
+ return props.message;
380
+ },
381
+ get fallback() {
382
+ return _$createComponent3(Show2, {
383
+ get when() {
384
+ return props.appName;
385
+ },
386
+ get children() {
387
+ var _el$20 = _$createElement4("text");
388
+ _$insert4(_el$20, () => props.appName, null);
389
+ _$insert4(_el$20, (() => {
390
+ var _c$ = _$memo3(() => !!props.appStatus);
391
+ return () => _c$() ? ` (${props.appStatus})` : "";
392
+ })(), null);
393
+ _$effect4((_$p) => _$setProp4(_el$20, "fg", props.theme.accent, _$p));
394
+ return _el$20;
395
+ }
396
+ });
397
+ },
398
+ get children() {
399
+ var _el$15 = _$createElement4("text"), _el$16 = _$createElement4("b");
400
+ _$insertNode4(_el$15, _el$16);
401
+ _$insert4(_el$16, () => props.message);
402
+ _$effect4((_$p) => _$setProp4(_el$15, "fg", props.theme.accent, _$p));
403
+ return _el$15;
404
+ }
405
+ }));
406
+ _$insertNode4(_el$17, _el$18);
407
+ _$insertNode4(_el$18, _el$19);
408
+ _$insert4(_el$18, () => props.focusMode === "terminal" ? "[TERMINAL]" : "[TABS]", _el$19);
409
+ _$effect4((_p$) => {
410
+ var _v$ = props.theme.muted, _v$2 = props.theme.foreground, _v$3 = props.theme.foreground;
411
+ _v$ !== _p$.e && (_p$.e = _$setProp4(_el$, "backgroundColor", _v$, _p$.e));
412
+ _v$2 !== _p$.t && (_p$.t = _$setProp4(_el$3, "fg", _v$2, _p$.t));
413
+ _v$3 !== _p$.a && (_p$.a = _$setProp4(_el$18, "fg", _v$3, _p$.a));
414
+ return _p$;
415
+ }, {
416
+ e: undefined,
417
+ t: undefined,
418
+ a: undefined
419
+ });
420
+ return _el$;
421
+ })();
337
422
  };
338
423
 
339
424
  // src/components/CommandPalette.tsx
425
+ import { effect as _$effect5 } from "@opentui/solid";
426
+ import { createTextNode as _$createTextNode5 } from "@opentui/solid";
427
+ import { createComponent as _$createComponent4 } from "@opentui/solid";
428
+ import { insertNode as _$insertNode5 } from "@opentui/solid";
429
+ import { insert as _$insert5 } from "@opentui/solid";
430
+ import { setProp as _$setProp5 } from "@opentui/solid";
431
+ import { createElement as _$createElement5 } from "@opentui/solid";
340
432
  import { For as For2, createSignal, createMemo as createMemo2, createEffect } from "solid-js";
341
433
  import { useKeyboard } from "@opentui/solid";
342
434
 
@@ -375,7 +467,6 @@ function buildEntryCommand(entry) {
375
467
  }
376
468
 
377
469
  // src/components/CommandPalette.tsx
378
- import { jsxDEV as jsxDEV5 } from "@opentui/solid/jsx-dev-runtime";
379
470
  var CommandPalette = (props) => {
380
471
  const [query, setQuery] = createSignal("");
381
472
  const [selectedIndex, setSelectedIndex] = createSignal(0);
@@ -437,80 +528,116 @@ var CommandPalette = (props) => {
437
528
  results();
438
529
  setSelectedIndex(0);
439
530
  });
440
- return /* @__PURE__ */ jsxDEV5("box", {
441
- position: "absolute",
442
- top: "20%",
443
- left: "20%",
444
- width: "60%",
445
- height: "60%",
446
- flexDirection: "column",
447
- borderStyle: "double",
448
- borderColor: props.theme.primary,
449
- backgroundColor: props.theme.background,
450
- children: [
451
- /* @__PURE__ */ jsxDEV5("box", {
452
- height: 1,
453
- flexDirection: "row",
454
- borderStyle: "single",
455
- borderColor: props.theme.muted,
456
- children: /* @__PURE__ */ jsxDEV5("text", {
457
- fg: props.theme.foreground,
458
- children: `> ${query()}\u2588`
459
- }, undefined, false, undefined, this)
460
- }, undefined, false, undefined, this),
461
- /* @__PURE__ */ jsxDEV5("box", {
462
- flexDirection: "column",
463
- flexGrow: 1,
464
- overflow: "hidden",
465
- children: /* @__PURE__ */ jsxDEV5(For2, {
466
- each: results().slice(0, 10),
467
- children: (result, index) => /* @__PURE__ */ jsxDEV5("box", {
468
- height: 1,
469
- width: "100%",
470
- flexDirection: "row",
471
- backgroundColor: index() === selectedIndex() ? props.theme.primary : props.theme.background,
472
- onMouseDown: () => props.onSelect(result.item, "switch"),
473
- children: /* @__PURE__ */ jsxDEV5("text", {
474
- width: "100%",
475
- fg: index() === selectedIndex() ? props.theme.background : props.theme.foreground,
476
- bg: index() === selectedIndex() ? props.theme.primary : props.theme.background,
477
- children: [
478
- " ",
479
- `${result.item.name} - ${buildEntryCommand(result.item)}`
480
- ]
481
- }, undefined, true, undefined, this)
482
- }, undefined, false, undefined, this)
483
- }, undefined, false, undefined, this)
484
- }, undefined, false, undefined, this),
485
- /* @__PURE__ */ jsxDEV5("box", {
486
- height: 1,
487
- borderStyle: "single",
488
- borderColor: props.theme.muted,
489
- children: /* @__PURE__ */ jsxDEV5("text", {
490
- fg: props.theme.muted,
491
- children: "Enter:Select | x:Stop | Ctrl+E:Edit | Esc:Close | \u2191\u2193:Navigate"
492
- }, undefined, false, undefined, this)
493
- }, undefined, false, undefined, this)
494
- ]
495
- }, undefined, true, undefined, this);
531
+ return (() => {
532
+ var _el$ = _$createElement5("box"), _el$2 = _$createElement5("box"), _el$3 = _$createElement5("text"), _el$4 = _$createElement5("box"), _el$5 = _$createElement5("box"), _el$6 = _$createElement5("text");
533
+ _$insertNode5(_el$, _el$2);
534
+ _$insertNode5(_el$, _el$4);
535
+ _$insertNode5(_el$, _el$5);
536
+ _$setProp5(_el$, "position", "absolute");
537
+ _$setProp5(_el$, "top", "20%");
538
+ _$setProp5(_el$, "left", "20%");
539
+ _$setProp5(_el$, "width", "60%");
540
+ _$setProp5(_el$, "height", "60%");
541
+ _$setProp5(_el$, "flexDirection", "column");
542
+ _$setProp5(_el$, "borderStyle", "double");
543
+ _$insertNode5(_el$2, _el$3);
544
+ _$setProp5(_el$2, "height", 1);
545
+ _$setProp5(_el$2, "flexDirection", "row");
546
+ _$setProp5(_el$2, "borderStyle", "single");
547
+ _$insert5(_el$3, () => `> ${query()}\u2588`);
548
+ _$setProp5(_el$4, "flexDirection", "column");
549
+ _$setProp5(_el$4, "flexGrow", 1);
550
+ _$setProp5(_el$4, "overflow", "hidden");
551
+ _$insert5(_el$4, _$createComponent4(For2, {
552
+ get each() {
553
+ return results().slice(0, 10);
554
+ },
555
+ children: (result, index) => (() => {
556
+ var _el$8 = _$createElement5("box"), _el$9 = _$createElement5("text"), _el$0 = _$createTextNode5(` `);
557
+ _$insertNode5(_el$8, _el$9);
558
+ _$setProp5(_el$8, "height", 1);
559
+ _$setProp5(_el$8, "width", "100%");
560
+ _$setProp5(_el$8, "flexDirection", "row");
561
+ _$setProp5(_el$8, "onMouseDown", () => props.onSelect(result.item, "switch"));
562
+ _$insertNode5(_el$9, _el$0);
563
+ _$setProp5(_el$9, "width", "100%");
564
+ _$insert5(_el$9, () => `${result.item.name} - ${buildEntryCommand(result.item)}`, null);
565
+ _$effect5((_p$) => {
566
+ var _v$7 = index() === selectedIndex() ? props.theme.primary : props.theme.background, _v$8 = index() === selectedIndex() ? props.theme.background : props.theme.foreground, _v$9 = index() === selectedIndex() ? props.theme.primary : props.theme.background;
567
+ _v$7 !== _p$.e && (_p$.e = _$setProp5(_el$8, "backgroundColor", _v$7, _p$.e));
568
+ _v$8 !== _p$.t && (_p$.t = _$setProp5(_el$9, "fg", _v$8, _p$.t));
569
+ _v$9 !== _p$.a && (_p$.a = _$setProp5(_el$9, "bg", _v$9, _p$.a));
570
+ return _p$;
571
+ }, {
572
+ e: undefined,
573
+ t: undefined,
574
+ a: undefined
575
+ });
576
+ return _el$8;
577
+ })()
578
+ }));
579
+ _$insertNode5(_el$5, _el$6);
580
+ _$setProp5(_el$5, "height", 1);
581
+ _$setProp5(_el$5, "borderStyle", "single");
582
+ _$insertNode5(_el$6, _$createTextNode5(`Enter:Select | x:Stop | Ctrl+E:Edit | Esc:Close | \u2191\u2193:Navigate`));
583
+ _$effect5((_p$) => {
584
+ var _v$ = props.theme.primary, _v$2 = props.theme.background, _v$3 = props.theme.muted, _v$4 = props.theme.foreground, _v$5 = props.theme.muted, _v$6 = props.theme.muted;
585
+ _v$ !== _p$.e && (_p$.e = _$setProp5(_el$, "borderColor", _v$, _p$.e));
586
+ _v$2 !== _p$.t && (_p$.t = _$setProp5(_el$, "backgroundColor", _v$2, _p$.t));
587
+ _v$3 !== _p$.a && (_p$.a = _$setProp5(_el$2, "borderColor", _v$3, _p$.a));
588
+ _v$4 !== _p$.o && (_p$.o = _$setProp5(_el$3, "fg", _v$4, _p$.o));
589
+ _v$5 !== _p$.i && (_p$.i = _$setProp5(_el$5, "borderColor", _v$5, _p$.i));
590
+ _v$6 !== _p$.n && (_p$.n = _$setProp5(_el$6, "fg", _v$6, _p$.n));
591
+ return _p$;
592
+ }, {
593
+ e: undefined,
594
+ t: undefined,
595
+ a: undefined,
596
+ o: undefined,
597
+ i: undefined,
598
+ n: undefined
599
+ });
600
+ return _el$;
601
+ })();
496
602
  };
497
603
 
498
604
  // src/components/AddTabModal.tsx
605
+ import { memo as _$memo4 } from "@opentui/solid";
606
+ import { effect as _$effect6 } from "@opentui/solid";
607
+ import { insert as _$insert6 } from "@opentui/solid";
608
+ import { createTextNode as _$createTextNode6 } from "@opentui/solid";
609
+ import { insertNode as _$insertNode6 } from "@opentui/solid";
610
+ import { setProp as _$setProp6 } from "@opentui/solid";
611
+ import { createElement as _$createElement6 } from "@opentui/solid";
499
612
  import { createSignal as createSignal2 } from "solid-js";
500
613
  import { useKeyboard as useKeyboard2 } from "@opentui/solid";
501
- import { jsxDEV as jsxDEV6 } from "@opentui/solid/jsx-dev-runtime";
502
614
  var AddTabModal = (props) => {
503
615
  const [name, setName] = createSignal2("");
504
616
  const [command, setCommand] = createSignal2("");
505
617
  const [args, setArgs] = createSignal2("");
506
618
  const [cwd, setCwd] = createSignal2("~");
507
619
  const [focusedField, setFocusedField] = createSignal2("name");
508
- const fields = [
509
- { key: "name", label: "Name", value: name, setValue: setName },
510
- { key: "command", label: "Command", value: command, setValue: setCommand },
511
- { key: "args", label: "Arguments", value: args, setValue: setArgs },
512
- { key: "cwd", label: "Directory", value: cwd, setValue: setCwd }
513
- ];
620
+ const fields = [{
621
+ key: "name",
622
+ label: "Name",
623
+ value: name,
624
+ setValue: setName
625
+ }, {
626
+ key: "command",
627
+ label: "Command",
628
+ value: command,
629
+ setValue: setCommand
630
+ }, {
631
+ key: "args",
632
+ label: "Arguments",
633
+ value: args,
634
+ setValue: setArgs
635
+ }, {
636
+ key: "cwd",
637
+ label: "Directory",
638
+ value: cwd,
639
+ setValue: setCwd
640
+ }];
514
641
  const focusIndex = () => fields.findIndex((field) => field.key === focusedField());
515
642
  const setFocusByIndex = (index) => {
516
643
  const clamped = Math.max(0, Math.min(fields.length - 1, index));
@@ -558,81 +685,107 @@ var AddTabModal = (props) => {
558
685
  event.preventDefault();
559
686
  }
560
687
  });
561
- return /* @__PURE__ */ jsxDEV6("box", {
562
- position: "absolute",
563
- top: "30%",
564
- left: "25%",
565
- width: "50%",
566
- height: 11,
567
- flexDirection: "column",
568
- borderStyle: "double",
569
- borderColor: props.theme.primary,
570
- backgroundColor: props.theme.background,
571
- children: [
572
- /* @__PURE__ */ jsxDEV6("box", {
573
- height: 1,
574
- children: /* @__PURE__ */ jsxDEV6("text", {
575
- fg: props.theme.accent,
576
- children: /* @__PURE__ */ jsxDEV6("b", {
577
- children: " Add New App"
578
- }, undefined, false, undefined, this)
579
- }, undefined, false, undefined, this)
580
- }, undefined, false, undefined, this),
581
- fields.map((field) => {
582
- const isFocused = () => focusedField() === field.key;
583
- return /* @__PURE__ */ jsxDEV6("box", {
584
- height: 1,
585
- flexDirection: "row",
586
- children: [
587
- /* @__PURE__ */ jsxDEV6("box", {
588
- width: 12,
589
- children: /* @__PURE__ */ jsxDEV6("text", {
590
- fg: isFocused() ? props.theme.accent : props.theme.muted,
591
- children: [
592
- field.label,
593
- ":"
594
- ]
595
- }, undefined, true, undefined, this)
596
- }, undefined, false, undefined, this),
597
- /* @__PURE__ */ jsxDEV6("text", {
598
- fg: isFocused() ? props.theme.foreground : props.theme.muted,
599
- bg: isFocused() ? props.theme.primary : undefined,
600
- children: [
601
- " ",
602
- field.value(),
603
- isFocused() ? "\u2588" : " "
604
- ]
605
- }, undefined, true, undefined, this)
606
- ]
607
- }, undefined, true, undefined, this);
608
- }),
609
- /* @__PURE__ */ jsxDEV6("box", {
610
- height: 1,
611
- children: /* @__PURE__ */ jsxDEV6("text", {
612
- fg: props.theme.muted,
613
- children: "Enter:Add | Esc:Cancel | Tab:Next field"
614
- }, undefined, false, undefined, this)
615
- }, undefined, false, undefined, this)
616
- ]
617
- }, undefined, true, undefined, this);
688
+ return (() => {
689
+ var _el$ = _$createElement6("box"), _el$2 = _$createElement6("box"), _el$3 = _$createElement6("text"), _el$4 = _$createElement6("b"), _el$6 = _$createElement6("box"), _el$7 = _$createElement6("text");
690
+ _$insertNode6(_el$, _el$2);
691
+ _$insertNode6(_el$, _el$6);
692
+ _$setProp6(_el$, "position", "absolute");
693
+ _$setProp6(_el$, "top", "30%");
694
+ _$setProp6(_el$, "left", "25%");
695
+ _$setProp6(_el$, "width", "50%");
696
+ _$setProp6(_el$, "height", 11);
697
+ _$setProp6(_el$, "flexDirection", "column");
698
+ _$setProp6(_el$, "borderStyle", "double");
699
+ _$insertNode6(_el$2, _el$3);
700
+ _$setProp6(_el$2, "height", 1);
701
+ _$insertNode6(_el$3, _el$4);
702
+ _$insertNode6(_el$4, _$createTextNode6(` Add New App`));
703
+ _$insert6(_el$, () => fields.map((field) => {
704
+ const isFocused = () => focusedField() === field.key;
705
+ return (() => {
706
+ var _el$9 = _$createElement6("box"), _el$0 = _$createElement6("box"), _el$1 = _$createElement6("text"), _el$10 = _$createTextNode6(`:`), _el$11 = _$createElement6("text"), _el$12 = _$createTextNode6(` `);
707
+ _$insertNode6(_el$9, _el$0);
708
+ _$insertNode6(_el$9, _el$11);
709
+ _$setProp6(_el$9, "height", 1);
710
+ _$setProp6(_el$9, "flexDirection", "row");
711
+ _$insertNode6(_el$0, _el$1);
712
+ _$setProp6(_el$0, "width", 12);
713
+ _$insertNode6(_el$1, _el$10);
714
+ _$insert6(_el$1, () => field.label, _el$10);
715
+ _$insertNode6(_el$11, _el$12);
716
+ _$insert6(_el$11, () => field.value(), null);
717
+ _$insert6(_el$11, () => isFocused() ? "\u2588" : " ", null);
718
+ _$effect6((_p$) => {
719
+ var _v$5 = isFocused() ? props.theme.accent : props.theme.muted, _v$6 = isFocused() ? props.theme.foreground : props.theme.muted, _v$7 = isFocused() ? props.theme.primary : undefined;
720
+ _v$5 !== _p$.e && (_p$.e = _$setProp6(_el$1, "fg", _v$5, _p$.e));
721
+ _v$6 !== _p$.t && (_p$.t = _$setProp6(_el$11, "fg", _v$6, _p$.t));
722
+ _v$7 !== _p$.a && (_p$.a = _$setProp6(_el$11, "bg", _v$7, _p$.a));
723
+ return _p$;
724
+ }, {
725
+ e: undefined,
726
+ t: undefined,
727
+ a: undefined
728
+ });
729
+ return _el$9;
730
+ })();
731
+ }), _el$6);
732
+ _$insertNode6(_el$6, _el$7);
733
+ _$setProp6(_el$6, "height", 1);
734
+ _$insertNode6(_el$7, _$createTextNode6(`Enter:Add | Esc:Cancel | Tab:Next field`));
735
+ _$effect6((_p$) => {
736
+ var _v$ = props.theme.primary, _v$2 = props.theme.background, _v$3 = props.theme.accent, _v$4 = props.theme.muted;
737
+ _v$ !== _p$.e && (_p$.e = _$setProp6(_el$, "borderColor", _v$, _p$.e));
738
+ _v$2 !== _p$.t && (_p$.t = _$setProp6(_el$, "backgroundColor", _v$2, _p$.t));
739
+ _v$3 !== _p$.a && (_p$.a = _$setProp6(_el$3, "fg", _v$3, _p$.a));
740
+ _v$4 !== _p$.o && (_p$.o = _$setProp6(_el$7, "fg", _v$4, _p$.o));
741
+ return _p$;
742
+ }, {
743
+ e: undefined,
744
+ t: undefined,
745
+ a: undefined,
746
+ o: undefined
747
+ });
748
+ return _el$;
749
+ })();
618
750
  };
619
751
 
620
752
  // src/components/EditAppModal.tsx
753
+ import { memo as _$memo5 } from "@opentui/solid";
754
+ import { effect as _$effect7 } from "@opentui/solid";
755
+ import { insert as _$insert7 } from "@opentui/solid";
756
+ import { createTextNode as _$createTextNode7 } from "@opentui/solid";
757
+ import { insertNode as _$insertNode7 } from "@opentui/solid";
758
+ import { setProp as _$setProp7 } from "@opentui/solid";
759
+ import { createElement as _$createElement7 } from "@opentui/solid";
621
760
  import { createSignal as createSignal3 } from "solid-js";
622
761
  import { useKeyboard as useKeyboard3 } from "@opentui/solid";
623
- import { jsxDEV as jsxDEV7 } from "@opentui/solid/jsx-dev-runtime";
624
762
  var EditAppModal = (props) => {
625
763
  const [name, setName] = createSignal3(props.entry.name ?? "");
626
764
  const [command, setCommand] = createSignal3(props.entry.command ?? "");
627
765
  const [args, setArgs] = createSignal3(props.entry.args ?? "");
628
766
  const [cwd, setCwd] = createSignal3(props.entry.cwd ?? "");
629
767
  const [focusedField, setFocusedField] = createSignal3("name");
630
- const fields = [
631
- { key: "name", label: "Name", value: name, setValue: setName },
632
- { key: "command", label: "Command", value: command, setValue: setCommand },
633
- { key: "args", label: "Arguments", value: args, setValue: setArgs },
634
- { key: "cwd", label: "Directory", value: cwd, setValue: setCwd }
635
- ];
768
+ const fields = [{
769
+ key: "name",
770
+ label: "Name",
771
+ value: name,
772
+ setValue: setName
773
+ }, {
774
+ key: "command",
775
+ label: "Command",
776
+ value: command,
777
+ setValue: setCommand
778
+ }, {
779
+ key: "args",
780
+ label: "Arguments",
781
+ value: args,
782
+ setValue: setArgs
783
+ }, {
784
+ key: "cwd",
785
+ label: "Directory",
786
+ value: cwd,
787
+ setValue: setCwd
788
+ }];
636
789
  const focusIndex = () => fields.findIndex((field) => field.key === focusedField());
637
790
  const setFocusByIndex = (index) => {
638
791
  const clamped = Math.max(0, Math.min(fields.length - 1, index));
@@ -679,63 +832,68 @@ var EditAppModal = (props) => {
679
832
  event.preventDefault();
680
833
  }
681
834
  });
682
- return /* @__PURE__ */ jsxDEV7("box", {
683
- position: "absolute",
684
- top: "30%",
685
- left: "25%",
686
- width: "50%",
687
- height: 12,
688
- flexDirection: "column",
689
- borderStyle: "double",
690
- borderColor: props.theme.primary,
691
- backgroundColor: props.theme.background,
692
- children: [
693
- /* @__PURE__ */ jsxDEV7("box", {
694
- height: 1,
695
- children: /* @__PURE__ */ jsxDEV7("text", {
696
- fg: props.theme.accent,
697
- children: /* @__PURE__ */ jsxDEV7("b", {
698
- children: " Edit App"
699
- }, undefined, false, undefined, this)
700
- }, undefined, false, undefined, this)
701
- }, undefined, false, undefined, this),
702
- fields.map((field) => {
703
- const isFocused = () => focusedField() === field.key;
704
- return /* @__PURE__ */ jsxDEV7("box", {
705
- height: 1,
706
- flexDirection: "row",
707
- children: [
708
- /* @__PURE__ */ jsxDEV7("box", {
709
- width: 12,
710
- children: /* @__PURE__ */ jsxDEV7("text", {
711
- fg: isFocused() ? props.theme.accent : props.theme.muted,
712
- children: [
713
- field.label,
714
- ":"
715
- ]
716
- }, undefined, true, undefined, this)
717
- }, undefined, false, undefined, this),
718
- /* @__PURE__ */ jsxDEV7("text", {
719
- fg: isFocused() ? props.theme.foreground : props.theme.muted,
720
- bg: isFocused() ? props.theme.primary : undefined,
721
- children: [
722
- " ",
723
- field.value(),
724
- isFocused() ? "\u2588" : " "
725
- ]
726
- }, undefined, true, undefined, this)
727
- ]
728
- }, undefined, true, undefined, this);
729
- }),
730
- /* @__PURE__ */ jsxDEV7("box", {
731
- height: 1,
732
- children: /* @__PURE__ */ jsxDEV7("text", {
733
- fg: props.theme.muted,
734
- children: "Enter:Save | Esc:Cancel | Tab:Next field"
735
- }, undefined, false, undefined, this)
736
- }, undefined, false, undefined, this)
737
- ]
738
- }, undefined, true, undefined, this);
835
+ return (() => {
836
+ var _el$ = _$createElement7("box"), _el$2 = _$createElement7("box"), _el$3 = _$createElement7("text"), _el$4 = _$createElement7("b"), _el$6 = _$createElement7("box"), _el$7 = _$createElement7("text");
837
+ _$insertNode7(_el$, _el$2);
838
+ _$insertNode7(_el$, _el$6);
839
+ _$setProp7(_el$, "position", "absolute");
840
+ _$setProp7(_el$, "top", "30%");
841
+ _$setProp7(_el$, "left", "25%");
842
+ _$setProp7(_el$, "width", "50%");
843
+ _$setProp7(_el$, "height", 12);
844
+ _$setProp7(_el$, "flexDirection", "column");
845
+ _$setProp7(_el$, "borderStyle", "double");
846
+ _$insertNode7(_el$2, _el$3);
847
+ _$setProp7(_el$2, "height", 1);
848
+ _$insertNode7(_el$3, _el$4);
849
+ _$insertNode7(_el$4, _$createTextNode7(` Edit App`));
850
+ _$insert7(_el$, () => fields.map((field) => {
851
+ const isFocused = () => focusedField() === field.key;
852
+ return (() => {
853
+ var _el$9 = _$createElement7("box"), _el$0 = _$createElement7("box"), _el$1 = _$createElement7("text"), _el$10 = _$createTextNode7(`:`), _el$11 = _$createElement7("text"), _el$12 = _$createTextNode7(` `);
854
+ _$insertNode7(_el$9, _el$0);
855
+ _$insertNode7(_el$9, _el$11);
856
+ _$setProp7(_el$9, "height", 1);
857
+ _$setProp7(_el$9, "flexDirection", "row");
858
+ _$insertNode7(_el$0, _el$1);
859
+ _$setProp7(_el$0, "width", 12);
860
+ _$insertNode7(_el$1, _el$10);
861
+ _$insert7(_el$1, () => field.label, _el$10);
862
+ _$insertNode7(_el$11, _el$12);
863
+ _$insert7(_el$11, () => field.value(), null);
864
+ _$insert7(_el$11, () => isFocused() ? "\u2588" : " ", null);
865
+ _$effect7((_p$) => {
866
+ var _v$5 = isFocused() ? props.theme.accent : props.theme.muted, _v$6 = isFocused() ? props.theme.foreground : props.theme.muted, _v$7 = isFocused() ? props.theme.primary : undefined;
867
+ _v$5 !== _p$.e && (_p$.e = _$setProp7(_el$1, "fg", _v$5, _p$.e));
868
+ _v$6 !== _p$.t && (_p$.t = _$setProp7(_el$11, "fg", _v$6, _p$.t));
869
+ _v$7 !== _p$.a && (_p$.a = _$setProp7(_el$11, "bg", _v$7, _p$.a));
870
+ return _p$;
871
+ }, {
872
+ e: undefined,
873
+ t: undefined,
874
+ a: undefined
875
+ });
876
+ return _el$9;
877
+ })();
878
+ }), _el$6);
879
+ _$insertNode7(_el$6, _el$7);
880
+ _$setProp7(_el$6, "height", 1);
881
+ _$insertNode7(_el$7, _$createTextNode7(`Enter:Save | Esc:Cancel | Tab:Next field`));
882
+ _$effect7((_p$) => {
883
+ var _v$ = props.theme.primary, _v$2 = props.theme.background, _v$3 = props.theme.accent, _v$4 = props.theme.muted;
884
+ _v$ !== _p$.e && (_p$.e = _$setProp7(_el$, "borderColor", _v$, _p$.e));
885
+ _v$2 !== _p$.t && (_p$.t = _$setProp7(_el$, "backgroundColor", _v$2, _p$.t));
886
+ _v$3 !== _p$.a && (_p$.a = _$setProp7(_el$3, "fg", _v$3, _p$.a));
887
+ _v$4 !== _p$.o && (_p$.o = _$setProp7(_el$7, "fg", _v$4, _p$.o));
888
+ return _p$;
889
+ }, {
890
+ e: undefined,
891
+ t: undefined,
892
+ a: undefined,
893
+ o: undefined
894
+ });
895
+ return _el$;
896
+ })();
739
897
  };
740
898
 
741
899
  // src/stores/apps.ts
@@ -1246,7 +1404,6 @@ function debugLog(message) {
1246
1404
  }
1247
1405
 
1248
1406
  // src/app.tsx
1249
- import { jsxDEV as jsxDEV8 } from "@opentui/solid/jsx-dev-runtime";
1250
1407
  var App = (props) => {
1251
1408
  const renderer = useRenderer();
1252
1409
  const appsStore = createAppsStore(props.config.apps);
@@ -1262,19 +1419,28 @@ var App = (props) => {
1262
1419
  const dims = terminalDims();
1263
1420
  const cols = dims.width - props.config.tab_width - 2;
1264
1421
  const rows = dims.height - 4;
1265
- return { cols, rows };
1422
+ return {
1423
+ cols,
1424
+ rows
1425
+ };
1266
1426
  };
1267
1427
  const startApp = (entry) => {
1268
1428
  if (tabsStore.store.runningApps.has(entry.id)) {
1269
1429
  return;
1270
1430
  }
1271
1431
  const dims = terminalDims();
1272
- const { cols, rows } = getPtyDimensions();
1432
+ const {
1433
+ cols,
1434
+ rows
1435
+ } = getPtyDimensions();
1273
1436
  if (cols < 10 || rows < 3) {
1274
1437
  console.warn(`Skipping start for ${entry.name}: invalid dimensions ${cols}x${rows}`);
1275
1438
  return;
1276
1439
  }
1277
- const ptyProcess = spawnPty(entry, { cols, rows });
1440
+ const ptyProcess = spawnPty(entry, {
1441
+ cols,
1442
+ rows
1443
+ });
1278
1444
  const runningApp = {
1279
1445
  entry,
1280
1446
  pty: ptyProcess,
@@ -1298,7 +1464,9 @@ var App = (props) => {
1298
1464
  flushTimer = setTimeout(flushOutput, 50);
1299
1465
  }
1300
1466
  });
1301
- ptyProcess.onExit(({ exitCode }) => {
1467
+ ptyProcess.onExit(({
1468
+ exitCode
1469
+ }) => {
1302
1470
  flushOutput();
1303
1471
  if (exitCode === 0) {
1304
1472
  tabsStore.updateAppStatus(entry.id, "stopped");
@@ -1332,7 +1500,9 @@ var App = (props) => {
1332
1500
  return;
1333
1501
  }
1334
1502
  for (const id of runningIds) {
1335
- stopApp(id, { silent: true });
1503
+ stopApp(id, {
1504
+ silent: true
1505
+ });
1336
1506
  }
1337
1507
  tabsStore.setActiveTab(null);
1338
1508
  if (options.showMessage) {
@@ -1394,7 +1564,10 @@ var App = (props) => {
1394
1564
  restart_on_exit: entry.restartOnExit,
1395
1565
  env: entry.env
1396
1566
  }));
1397
- const nextConfig = { ...props.config, apps: nextApps };
1567
+ const nextConfig = {
1568
+ ...props.config,
1569
+ apps: nextApps
1570
+ };
1398
1571
  props.config.apps = nextApps;
1399
1572
  try {
1400
1573
  await saveConfig(nextConfig);
@@ -1471,7 +1644,9 @@ var App = (props) => {
1471
1644
  uiStore.showTemporaryMessage("No active app");
1472
1645
  }
1473
1646
  },
1474
- kill_all: () => stopAllApps({ showMessage: true }),
1647
+ kill_all: () => stopAllApps({
1648
+ showMessage: true
1649
+ }),
1475
1650
  restart_app: () => {
1476
1651
  const activeId = tabsStore.store.activeTabId;
1477
1652
  if (activeId)
@@ -1490,7 +1665,9 @@ var App = (props) => {
1490
1665
  timestamp: Date.now()
1491
1666
  });
1492
1667
  }
1493
- stopAllApps({ showMessage: false });
1668
+ stopAllApps({
1669
+ showMessage: false
1670
+ });
1494
1671
  renderer.destroy();
1495
1672
  setTimeout(() => process.exit(0), 50);
1496
1673
  }
@@ -1543,7 +1720,10 @@ var App = (props) => {
1543
1720
  }
1544
1721
  });
1545
1722
  createEffect2(() => {
1546
- const { cols, rows } = getPtyDimensions();
1723
+ const {
1724
+ cols,
1725
+ rows
1726
+ } = getPtyDimensions();
1547
1727
  if (cols < 10 || rows < 3 || hasAutostarted()) {
1548
1728
  return;
1549
1729
  }
@@ -1566,7 +1746,10 @@ var App = (props) => {
1566
1746
  }
1567
1747
  });
1568
1748
  createEffect2(() => {
1569
- const { cols: termWidth, rows: termHeight } = getPtyDimensions();
1749
+ const {
1750
+ cols: termWidth,
1751
+ rows: termHeight
1752
+ } = getPtyDimensions();
1570
1753
  if (termWidth < 10 || termHeight < 3) {
1571
1754
  return;
1572
1755
  }
@@ -1584,7 +1767,9 @@ var App = (props) => {
1584
1767
  };
1585
1768
  onCleanup(() => {
1586
1769
  for (const [id] of tabsStore.store.runningApps) {
1587
- stopApp(id, { silent: true });
1770
+ stopApp(id, {
1771
+ silent: true
1772
+ });
1588
1773
  }
1589
1774
  });
1590
1775
  const activeRunningApp = createMemo3(() => {
@@ -1596,58 +1781,100 @@ var App = (props) => {
1596
1781
  const entry = id ? appsStore.getEntry(id) : undefined;
1597
1782
  return entry;
1598
1783
  });
1599
- return /* @__PURE__ */ jsxDEV8("box", {
1600
- flexDirection: "column",
1601
- width: "100%",
1602
- height: "100%",
1603
- children: [
1604
- /* @__PURE__ */ jsxDEV8("box", {
1605
- flexDirection: "row",
1606
- flexGrow: 1,
1607
- children: [
1608
- /* @__PURE__ */ jsxDEV8(TabList, {
1609
- entries: appsStore.store.entries,
1610
- activeTabId: tabsStore.store.activeTabId,
1611
- selectedIndex: selectedIndex(),
1612
- getStatus: getAppStatus,
1613
- isFocused: tabsStore.store.focusMode === "tabs",
1614
- width: props.config.tab_width,
1615
- height: terminalDims().height - 1,
1616
- scrollOffset: tabsStore.store.scrollOffset,
1617
- theme: props.config.theme,
1618
- onSelect: handleSelectApp,
1619
- onAddClick: () => uiStore.openModal("add-tab")
1620
- }, undefined, false, undefined, this),
1621
- /* @__PURE__ */ jsxDEV8(TerminalPane, {
1622
- runningApp: activeRunningApp(),
1623
- isFocused: tabsStore.store.focusMode === "terminal",
1624
- width: terminalDims().width - props.config.tab_width,
1625
- height: terminalDims().height - 1,
1626
- theme: props.config.theme,
1627
- onInput: handleTerminalInput
1628
- }, undefined, false, undefined, this)
1629
- ]
1630
- }, undefined, true, undefined, this),
1631
- /* @__PURE__ */ jsxDEV8(StatusBar, {
1632
- appName: activeRunningApp()?.entry.name ?? null,
1633
- appStatus: activeRunningApp()?.status ?? null,
1634
- focusMode: tabsStore.store.focusMode,
1635
- message: uiStore.store.statusMessage,
1636
- theme: props.config.theme,
1637
- keybinds: {
1784
+ return (() => {
1785
+ var _el$ = _$createElement8("box"), _el$2 = _$createElement8("box");
1786
+ _$insertNode8(_el$, _el$2);
1787
+ _$setProp8(_el$, "flexDirection", "column");
1788
+ _$setProp8(_el$, "width", "100%");
1789
+ _$setProp8(_el$, "height", "100%");
1790
+ _$setProp8(_el$2, "flexDirection", "row");
1791
+ _$setProp8(_el$2, "flexGrow", 1);
1792
+ _$insert8(_el$2, _$createComponent5(TabList, {
1793
+ get entries() {
1794
+ return appsStore.store.entries;
1795
+ },
1796
+ get activeTabId() {
1797
+ return tabsStore.store.activeTabId;
1798
+ },
1799
+ get selectedIndex() {
1800
+ return selectedIndex();
1801
+ },
1802
+ getStatus: getAppStatus,
1803
+ get isFocused() {
1804
+ return tabsStore.store.focusMode === "tabs";
1805
+ },
1806
+ get width() {
1807
+ return props.config.tab_width;
1808
+ },
1809
+ get height() {
1810
+ return terminalDims().height - 1;
1811
+ },
1812
+ get scrollOffset() {
1813
+ return tabsStore.store.scrollOffset;
1814
+ },
1815
+ get theme() {
1816
+ return props.config.theme;
1817
+ },
1818
+ onSelect: handleSelectApp,
1819
+ onAddClick: () => uiStore.openModal("add-tab")
1820
+ }), null);
1821
+ _$insert8(_el$2, _$createComponent5(TerminalPane, {
1822
+ get runningApp() {
1823
+ return activeRunningApp();
1824
+ },
1825
+ get isFocused() {
1826
+ return tabsStore.store.focusMode === "terminal";
1827
+ },
1828
+ get width() {
1829
+ return terminalDims().width - props.config.tab_width;
1830
+ },
1831
+ get height() {
1832
+ return terminalDims().height - 1;
1833
+ },
1834
+ get theme() {
1835
+ return props.config.theme;
1836
+ },
1837
+ onInput: handleTerminalInput
1838
+ }), null);
1839
+ _$insert8(_el$, _$createComponent5(StatusBar, {
1840
+ get appName() {
1841
+ return activeRunningApp()?.entry.name ?? null;
1842
+ },
1843
+ get appStatus() {
1844
+ return activeRunningApp()?.status ?? null;
1845
+ },
1846
+ get focusMode() {
1847
+ return tabsStore.store.focusMode;
1848
+ },
1849
+ get message() {
1850
+ return uiStore.store.statusMessage;
1851
+ },
1852
+ get theme() {
1853
+ return props.config.theme;
1854
+ },
1855
+ get keybinds() {
1856
+ return {
1638
1857
  toggle_focus: props.config.keybinds.toggle_focus,
1639
1858
  command_palette: props.config.keybinds.command_palette,
1640
1859
  edit_app: props.config.keybinds.edit_app,
1641
1860
  stop_app: props.config.keybinds.stop_app,
1642
1861
  kill_all: props.config.keybinds.kill_all,
1643
1862
  quit: props.config.keybinds.quit
1644
- }
1645
- }, undefined, false, undefined, this),
1646
- /* @__PURE__ */ jsxDEV8(Show3, {
1647
- when: uiStore.store.activeModal === "command-palette",
1648
- children: /* @__PURE__ */ jsxDEV8(CommandPalette, {
1649
- entries: appsStore.store.entries,
1650
- theme: props.config.theme,
1863
+ };
1864
+ }
1865
+ }), null);
1866
+ _$insert8(_el$, _$createComponent5(Show3, {
1867
+ get when() {
1868
+ return uiStore.store.activeModal === "command-palette";
1869
+ },
1870
+ get children() {
1871
+ return _$createComponent5(CommandPalette, {
1872
+ get entries() {
1873
+ return appsStore.store.entries;
1874
+ },
1875
+ get theme() {
1876
+ return props.config.theme;
1877
+ },
1651
1878
  onSelect: (entry, action) => {
1652
1879
  if (action === "edit") {
1653
1880
  openEditModal(entry.id);
@@ -1665,44 +1892,60 @@ var App = (props) => {
1665
1892
  }
1666
1893
  },
1667
1894
  onClose: () => uiStore.closeModal()
1668
- }, undefined, false, undefined, this)
1669
- }, undefined, false, undefined, this),
1670
- /* @__PURE__ */ jsxDEV8(Show3, {
1671
- when: uiStore.store.activeModal === "add-tab",
1672
- children: /* @__PURE__ */ jsxDEV8(AddTabModal, {
1673
- theme: props.config.theme,
1895
+ });
1896
+ }
1897
+ }), null);
1898
+ _$insert8(_el$, _$createComponent5(Show3, {
1899
+ get when() {
1900
+ return uiStore.store.activeModal === "add-tab";
1901
+ },
1902
+ get children() {
1903
+ return _$createComponent5(AddTabModal, {
1904
+ get theme() {
1905
+ return props.config.theme;
1906
+ },
1674
1907
  onAdd: handleAddApp,
1675
1908
  onClose: () => uiStore.closeModal()
1676
- }, undefined, false, undefined, this)
1677
- }, undefined, false, undefined, this),
1678
- /* @__PURE__ */ jsxDEV8(Show3, {
1679
- when: uiStore.store.activeModal === "edit-app" && editingEntry(),
1680
- children: /* @__PURE__ */ jsxDEV8(EditAppModal, {
1681
- theme: props.config.theme,
1682
- entry: editingEntry(),
1909
+ });
1910
+ }
1911
+ }), null);
1912
+ _$insert8(_el$, _$createComponent5(Show3, {
1913
+ get when() {
1914
+ return _$memo6(() => uiStore.store.activeModal === "edit-app")() && editingEntry();
1915
+ },
1916
+ get children() {
1917
+ return _$createComponent5(EditAppModal, {
1918
+ get theme() {
1919
+ return props.config.theme;
1920
+ },
1921
+ get entry() {
1922
+ return editingEntry();
1923
+ },
1683
1924
  onSave: (updates) => handleEditApp(editingEntry().id, updates),
1684
1925
  onClose: () => {
1685
1926
  uiStore.closeModal();
1686
1927
  setEditingEntryId(null);
1687
1928
  }
1688
- }, undefined, false, undefined, this)
1689
- }, undefined, false, undefined, this)
1690
- ]
1691
- }, undefined, true, undefined, this);
1929
+ });
1930
+ }
1931
+ }), null);
1932
+ return _el$;
1933
+ })();
1692
1934
  };
1693
1935
 
1694
1936
  // src/index.tsx
1695
- import { jsxDEV as jsxDEV9 } from "@opentui/solid/jsx-dev-runtime";
1696
- extend({ "ghostty-terminal": GhosttyTerminalRenderable });
1937
+ extend({
1938
+ "ghostty-terminal": GhosttyTerminalRenderable
1939
+ });
1697
1940
  async function main() {
1698
1941
  try {
1699
1942
  const config = await loadConfig();
1700
1943
  initSessionPath(config);
1701
1944
  const session = config.session.persist ? await restoreSession() : null;
1702
- await render(() => /* @__PURE__ */ jsxDEV9(App, {
1945
+ await render(() => _$createComponent6(App, {
1703
1946
  config,
1704
1947
  session
1705
- }, undefined, false, undefined, this));
1948
+ }));
1706
1949
  const handleShutdown = () => {
1707
1950
  console.log(`
1708
1951
  Shutting down tuidoscope...`);