@vibecook/ghosttea-react 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +42 -0
  3. package/dist/TerminalSurface.d.ts +28 -0
  4. package/dist/TerminalSurface.d.ts.map +1 -0
  5. package/dist/TerminalSurface.js +614 -0
  6. package/dist/TerminalSurface.js.map +1 -0
  7. package/dist/bindings/action-route.d.ts +155 -0
  8. package/dist/bindings/action-route.d.ts.map +1 -0
  9. package/dist/bindings/action-route.js +196 -0
  10. package/dist/bindings/action-route.js.map +1 -0
  11. package/dist/bindings/fixtures/extensions.json +10 -0
  12. package/dist/bindings/fixtures/keybinds-linux-default.json +505 -0
  13. package/dist/bindings/fixtures/keybinds-macos-default.json +660 -0
  14. package/dist/bindings/ghostty-actions.d.ts +247 -0
  15. package/dist/bindings/ghostty-actions.d.ts.map +1 -0
  16. package/dist/bindings/ghostty-actions.js +431 -0
  17. package/dist/bindings/ghostty-actions.js.map +1 -0
  18. package/dist/bindings/ghostty-bindings.d.ts +88 -0
  19. package/dist/bindings/ghostty-bindings.d.ts.map +1 -0
  20. package/dist/bindings/ghostty-bindings.js +122 -0
  21. package/dist/bindings/ghostty-bindings.js.map +1 -0
  22. package/dist/bindings/ghostty-triggers.d.ts +47 -0
  23. package/dist/bindings/ghostty-triggers.d.ts.map +1 -0
  24. package/dist/bindings/ghostty-triggers.js +378 -0
  25. package/dist/bindings/ghostty-triggers.js.map +1 -0
  26. package/dist/bindings/index.d.ts +5 -0
  27. package/dist/bindings/index.d.ts.map +1 -0
  28. package/dist/bindings/index.js +5 -0
  29. package/dist/bindings/index.js.map +1 -0
  30. package/dist/catalog-budget.d.ts +22 -0
  31. package/dist/catalog-budget.d.ts.map +1 -0
  32. package/dist/catalog-budget.js +53 -0
  33. package/dist/catalog-budget.js.map +1 -0
  34. package/dist/cell-width.d.ts +3 -0
  35. package/dist/cell-width.d.ts.map +1 -0
  36. package/dist/cell-width.js +19 -0
  37. package/dist/cell-width.js.map +1 -0
  38. package/dist/context.d.ts +9 -0
  39. package/dist/context.d.ts.map +1 -0
  40. package/dist/context.js +13 -0
  41. package/dist/context.js.map +1 -0
  42. package/dist/cursor-invalidation.d.ts +3 -0
  43. package/dist/cursor-invalidation.d.ts.map +1 -0
  44. package/dist/cursor-invalidation.js +4 -0
  45. package/dist/cursor-invalidation.js.map +1 -0
  46. package/dist/frame-resync.d.ts +16 -0
  47. package/dist/frame-resync.d.ts.map +1 -0
  48. package/dist/frame-resync.js +164 -0
  49. package/dist/frame-resync.js.map +1 -0
  50. package/dist/frame-sequence.d.ts +14 -0
  51. package/dist/frame-sequence.d.ts.map +1 -0
  52. package/dist/frame-sequence.js +16 -0
  53. package/dist/frame-sequence.js.map +1 -0
  54. package/dist/index.d.ts +6 -0
  55. package/dist/index.d.ts.map +1 -0
  56. package/dist/index.js +5 -0
  57. package/dist/index.js.map +1 -0
  58. package/dist/keyboard-input.d.ts +18 -0
  59. package/dist/keyboard-input.d.ts.map +1 -0
  60. package/dist/keyboard-input.js +101 -0
  61. package/dist/keyboard-input.js.map +1 -0
  62. package/dist/performance.d.ts +66 -0
  63. package/dist/performance.d.ts.map +1 -0
  64. package/dist/performance.js +21 -0
  65. package/dist/performance.js.map +1 -0
  66. package/dist/renderers/canvas-renderer.d.ts +12 -0
  67. package/dist/renderers/canvas-renderer.d.ts.map +1 -0
  68. package/dist/renderers/canvas-renderer.js +117 -0
  69. package/dist/renderers/canvas-renderer.js.map +1 -0
  70. package/dist/renderers/render-damage.d.ts +7 -0
  71. package/dist/renderers/render-damage.d.ts.map +1 -0
  72. package/dist/renderers/render-damage.js +16 -0
  73. package/dist/renderers/render-damage.js.map +1 -0
  74. package/dist/renderers/types.d.ts +65 -0
  75. package/dist/renderers/types.d.ts.map +1 -0
  76. package/dist/renderers/types.js +31 -0
  77. package/dist/renderers/types.js.map +1 -0
  78. package/dist/renderers/webgpu-renderer.d.ts +27 -0
  79. package/dist/renderers/webgpu-renderer.d.ts.map +1 -0
  80. package/dist/renderers/webgpu-renderer.js +1746 -0
  81. package/dist/renderers/webgpu-renderer.js.map +1 -0
  82. package/dist/runtime.d.ts +70 -0
  83. package/dist/runtime.d.ts.map +1 -0
  84. package/dist/runtime.js +1021 -0
  85. package/dist/runtime.js.map +1 -0
  86. package/dist/scroll-input.d.ts +6 -0
  87. package/dist/scroll-input.d.ts.map +1 -0
  88. package/dist/scroll-input.js +14 -0
  89. package/dist/scroll-input.js.map +1 -0
  90. package/dist/selection-input.d.ts +16 -0
  91. package/dist/selection-input.d.ts.map +1 -0
  92. package/dist/selection-input.js +67 -0
  93. package/dist/selection-input.js.map +1 -0
  94. package/dist/selection-text.d.ts +4 -0
  95. package/dist/selection-text.d.ts.map +1 -0
  96. package/dist/selection-text.js +28 -0
  97. package/dist/selection-text.js.map +1 -0
  98. package/dist/styles.css +75 -0
  99. package/dist/terminal-bindings.d.ts +22 -0
  100. package/dist/terminal-bindings.d.ts.map +1 -0
  101. package/dist/terminal-bindings.js +22 -0
  102. package/dist/terminal-bindings.js.map +1 -0
  103. package/dist/terminal-render.worker.d.ts +2 -0
  104. package/dist/terminal-render.worker.d.ts.map +1 -0
  105. package/dist/terminal-render.worker.js +3165 -0
  106. package/dist/terminal-render.worker.js.map +7 -0
  107. package/dist/worker-messages.d.ts +111 -0
  108. package/dist/worker-messages.d.ts.map +1 -0
  109. package/dist/worker-messages.js +2 -0
  110. package/dist/worker-messages.js.map +1 -0
  111. package/dist/workspace/RemoteSessionPalette.d.ts +12 -0
  112. package/dist/workspace/RemoteSessionPalette.d.ts.map +1 -0
  113. package/dist/workspace/RemoteSessionPalette.js +135 -0
  114. package/dist/workspace/RemoteSessionPalette.js.map +1 -0
  115. package/dist/workspace/Workspace.d.ts +69 -0
  116. package/dist/workspace/Workspace.d.ts.map +1 -0
  117. package/dist/workspace/Workspace.js +536 -0
  118. package/dist/workspace/Workspace.js.map +1 -0
  119. package/dist/workspace/hotkeys.d.ts +27 -0
  120. package/dist/workspace/hotkeys.d.ts.map +1 -0
  121. package/dist/workspace/hotkeys.js +29 -0
  122. package/dist/workspace/hotkeys.js.map +1 -0
  123. package/dist/workspace/index.d.ts +8 -0
  124. package/dist/workspace/index.d.ts.map +1 -0
  125. package/dist/workspace/index.js +8 -0
  126. package/dist/workspace/index.js.map +1 -0
  127. package/dist/workspace/pane-layout.d.ts +35 -0
  128. package/dist/workspace/pane-layout.d.ts.map +1 -0
  129. package/dist/workspace/pane-layout.js +139 -0
  130. package/dist/workspace/pane-layout.js.map +1 -0
  131. package/dist/workspace/pending-cache.d.ts +5 -0
  132. package/dist/workspace/pending-cache.d.ts.map +1 -0
  133. package/dist/workspace/pending-cache.js +22 -0
  134. package/dist/workspace/pending-cache.js.map +1 -0
  135. package/dist/workspace/session-scope.d.ts +3 -0
  136. package/dist/workspace/session-scope.d.ts.map +1 -0
  137. package/dist/workspace/session-scope.js +6 -0
  138. package/dist/workspace/session-scope.js.map +1 -0
  139. package/dist/workspace/themes.d.ts +18 -0
  140. package/dist/workspace/themes.d.ts.map +1 -0
  141. package/dist/workspace/themes.js +19 -0
  142. package/dist/workspace/themes.js.map +1 -0
  143. package/dist/workspace/workspace-model.d.ts +59 -0
  144. package/dist/workspace/workspace-model.d.ts.map +1 -0
  145. package/dist/workspace/workspace-model.js +257 -0
  146. package/dist/workspace/workspace-model.js.map +1 -0
  147. package/dist/workspace/workspace-tabs.d.ts +41 -0
  148. package/dist/workspace/workspace-tabs.d.ts.map +1 -0
  149. package/dist/workspace/workspace-tabs.js +133 -0
  150. package/dist/workspace/workspace-tabs.js.map +1 -0
  151. package/dist/workspace.css +453 -0
  152. package/package.json +75 -0
@@ -0,0 +1,453 @@
1
+ :root {
2
+ color: #fff;
3
+ background: #282c34;
4
+ color-scheme: dark;
5
+ font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", sans-serif;
6
+ font-synthesis: none;
7
+ }
8
+
9
+ * {
10
+ box-sizing: border-box;
11
+ }
12
+
13
+ html,
14
+ body,
15
+ #root {
16
+ width: 100%;
17
+ height: 100%;
18
+ margin: 0;
19
+ overflow: hidden;
20
+ background: #282c34;
21
+ }
22
+
23
+ body {
24
+ user-select: none;
25
+ }
26
+
27
+ .ghostty-window {
28
+ width: 100%;
29
+ height: 100%;
30
+ display: flex;
31
+ flex-direction: column;
32
+ background: #282c34;
33
+ }
34
+
35
+ .ghostty-titlebar {
36
+ position: relative;
37
+ z-index: 4;
38
+ height: 29px;
39
+ flex: 0 0 29px;
40
+ display: grid;
41
+ place-items: center;
42
+ overflow: hidden;
43
+ color: rgba(255, 255, 255, 0.48);
44
+ background: #282c34;
45
+ -webkit-app-region: drag;
46
+ }
47
+
48
+ .ghostty-window.is-focused .ghostty-titlebar {
49
+ color: rgba(255, 255, 255, 0.78);
50
+ }
51
+
52
+ .ghostty-title {
53
+ max-width: calc(100% - 160px);
54
+ overflow: hidden;
55
+ font-size: 12px;
56
+ font-weight: 500;
57
+ line-height: 29px;
58
+ text-overflow: ellipsis;
59
+ white-space: nowrap;
60
+ }
61
+
62
+ .ghosttea-workspace-body {
63
+ min-width: 0;
64
+ min-height: 0;
65
+ display: flex;
66
+ flex: 1 1 auto;
67
+ overflow: hidden;
68
+ }
69
+
70
+ .ghosttea-workspace-sidebar {
71
+ position: relative;
72
+ z-index: 5;
73
+ min-width: 260px;
74
+ min-height: 0;
75
+ flex: 0 0 340px;
76
+ overflow: hidden;
77
+ border-left: 1px solid rgba(255, 255, 255, 0.11);
78
+ background: #252930;
79
+ }
80
+
81
+ .terminal-host {
82
+ width: auto;
83
+ height: 100%;
84
+ min-width: 0;
85
+ min-height: 0;
86
+ }
87
+
88
+ .terminal-host {
89
+ position: relative;
90
+ flex: 1 1 auto;
91
+ overflow: hidden;
92
+ background: #282c34;
93
+ }
94
+
95
+ .ghostty-split {
96
+ position: relative;
97
+ width: 100%;
98
+ height: 100%;
99
+ min-width: 0;
100
+ min-height: 0;
101
+ display: grid;
102
+ overflow: hidden;
103
+ }
104
+
105
+ .ghostty-pane {
106
+ position: relative;
107
+ width: 100%;
108
+ height: 100%;
109
+ min-width: 0;
110
+ min-height: 0;
111
+ overflow: hidden;
112
+ background: #282c34;
113
+ }
114
+
115
+ .ghostty-pane[data-pane-accent]::before {
116
+ position: absolute;
117
+ z-index: 5;
118
+ inset: 0;
119
+ border: 1px solid transparent;
120
+ content: "";
121
+ pointer-events: none;
122
+ }
123
+
124
+ .ghostty-pane.is-active[data-pane-accent]::before {
125
+ border-color: var(--ghostty-pane-color);
126
+ }
127
+
128
+ .ghostty-pane-badge {
129
+ position: absolute;
130
+ z-index: 6;
131
+ top: 0;
132
+ right: 0;
133
+ max-width: 60%;
134
+ padding: 2px 8px;
135
+ overflow: hidden;
136
+ border-bottom-left-radius: 6px;
137
+ color: #fff;
138
+ background: var(--ghostty-pane-color, #111);
139
+ font:
140
+ 700 10px/1.4 ui-monospace,
141
+ "SFMono-Regular",
142
+ Menlo,
143
+ Monaco,
144
+ Consolas,
145
+ monospace;
146
+ text-overflow: ellipsis;
147
+ white-space: nowrap;
148
+ pointer-events: none;
149
+ }
150
+
151
+ .ghostty-pane-access {
152
+ position: absolute;
153
+ top: 8px;
154
+ right: 10px;
155
+ z-index: 4;
156
+ padding: 2px 7px;
157
+ border: 1px solid rgb(255 255 255 / 12%);
158
+ border-radius: 999px;
159
+ color: rgb(255 255 255 / 58%);
160
+ background: rgb(22 24 29 / 78%);
161
+ font:
162
+ 500 10px/1.4 ui-sans-serif,
163
+ system-ui,
164
+ sans-serif;
165
+ pointer-events: none;
166
+ }
167
+
168
+ .ghostty-pane.is-zoomed {
169
+ position: absolute;
170
+ z-index: 6;
171
+ inset: 0;
172
+ }
173
+
174
+ .ghostty-split-divider {
175
+ position: relative;
176
+ z-index: 3;
177
+ background: rgba(255, 255, 255, 0.22);
178
+ touch-action: none;
179
+ }
180
+
181
+ .ghostty-split.is-horizontal > .ghostty-split-divider {
182
+ cursor: col-resize;
183
+ }
184
+
185
+ .ghostty-split.is-vertical > .ghostty-split-divider {
186
+ cursor: row-resize;
187
+ }
188
+
189
+ .ghostty-split-divider::before {
190
+ position: absolute;
191
+ content: "";
192
+ inset: -4px;
193
+ }
194
+
195
+ .terminal-error {
196
+ position: absolute;
197
+ inset: 0;
198
+ display: grid;
199
+ place-content: center;
200
+ padding: 24px;
201
+ color: #ff9b9b;
202
+ background: #282c34;
203
+ font:
204
+ 12px/1.5 ui-monospace,
205
+ SFMono-Regular,
206
+ Menlo,
207
+ monospace;
208
+ text-align: center;
209
+ white-space: pre-wrap;
210
+ }
211
+
212
+ .terminal-operation-error {
213
+ position: absolute;
214
+ z-index: 10;
215
+ right: 12px;
216
+ bottom: 12px;
217
+ max-width: min(520px, calc(100% - 24px));
218
+ padding: 8px 10px;
219
+ border: 1px solid rgba(255, 155, 155, 0.45);
220
+ border-radius: 6px;
221
+ color: #ffb0b0;
222
+ background: rgba(30, 32, 38, 0.94);
223
+ font:
224
+ 12px/1.4 ui-monospace,
225
+ SFMono-Regular,
226
+ Menlo,
227
+ monospace;
228
+ }
229
+
230
+ .remote-palette-backdrop {
231
+ position: absolute;
232
+ z-index: 30;
233
+ inset: 0;
234
+ display: grid;
235
+ place-items: start center;
236
+ padding: min(14vh, 96px) 20px 20px;
237
+ background: rgba(12, 14, 18, 0.3);
238
+ }
239
+
240
+ .remote-palette {
241
+ width: min(560px, 100%);
242
+ max-height: min(520px, calc(100vh - 120px));
243
+ display: flex;
244
+ flex-direction: column;
245
+ overflow: hidden;
246
+ border: 1px solid rgba(255, 255, 255, 0.13);
247
+ border-radius: 10px;
248
+ background: rgba(31, 34, 41, 0.985);
249
+ box-shadow:
250
+ 0 22px 70px rgba(0, 0, 0, 0.55),
251
+ 0 1px 0 rgba(255, 255, 255, 0.04) inset;
252
+ color: rgba(255, 255, 255, 0.88);
253
+ font:
254
+ 12px/1.4 ui-monospace,
255
+ SFMono-Regular,
256
+ Menlo,
257
+ monospace;
258
+ }
259
+
260
+ .remote-palette-search {
261
+ height: 48px;
262
+ flex: 0 0 48px;
263
+ display: flex;
264
+ align-items: center;
265
+ gap: 10px;
266
+ padding: 0 14px;
267
+ border-bottom: 1px solid rgba(255, 255, 255, 0.09);
268
+ }
269
+
270
+ .remote-palette-glyph {
271
+ color: #8ec7bc;
272
+ font-size: 17px;
273
+ }
274
+
275
+ .remote-palette-search input {
276
+ min-width: 0;
277
+ flex: 1;
278
+ padding: 0;
279
+ border: 0;
280
+ outline: 0;
281
+ color: rgba(255, 255, 255, 0.92);
282
+ background: transparent;
283
+ font: inherit;
284
+ font-size: 14px;
285
+ user-select: text;
286
+ }
287
+
288
+ .remote-palette-search input::placeholder {
289
+ color: rgba(255, 255, 255, 0.35);
290
+ }
291
+
292
+ .remote-palette-spinner {
293
+ width: 13px;
294
+ height: 13px;
295
+ border: 1px solid rgba(255, 255, 255, 0.2);
296
+ border-top-color: #8ec7bc;
297
+ border-radius: 50%;
298
+ animation: remote-palette-spin 0.7s linear infinite;
299
+ }
300
+
301
+ @keyframes remote-palette-spin {
302
+ to {
303
+ transform: rotate(360deg);
304
+ }
305
+ }
306
+
307
+ .remote-palette-results {
308
+ min-height: 96px;
309
+ overflow: auto;
310
+ padding: 7px;
311
+ }
312
+
313
+ .remote-host-label {
314
+ display: flex;
315
+ align-items: center;
316
+ gap: 7px;
317
+ padding: 8px 9px 5px;
318
+ color: rgba(255, 255, 255, 0.4);
319
+ font-size: 10px;
320
+ font-weight: 600;
321
+ letter-spacing: 0.06em;
322
+ text-transform: uppercase;
323
+ }
324
+
325
+ .remote-host-dot {
326
+ width: 6px;
327
+ height: 6px;
328
+ border-radius: 50%;
329
+ background: rgba(255, 255, 255, 0.22);
330
+ }
331
+
332
+ .remote-host-dot.is-online {
333
+ background: #84c6a7;
334
+ box-shadow: 0 0 7px rgba(132, 198, 167, 0.45);
335
+ }
336
+
337
+ .remote-session-choice {
338
+ width: 100%;
339
+ min-height: 52px;
340
+ display: flex;
341
+ align-items: center;
342
+ gap: 14px;
343
+ padding: 8px 10px;
344
+ border: 0;
345
+ border-radius: 6px;
346
+ color: inherit;
347
+ background: transparent;
348
+ font: inherit;
349
+ text-align: left;
350
+ }
351
+
352
+ .remote-session-choice.is-selected {
353
+ background: rgba(139, 190, 182, 0.13);
354
+ box-shadow: 0 0 0 1px rgba(139, 190, 182, 0.08) inset;
355
+ }
356
+
357
+ .remote-session-choice:disabled {
358
+ opacity: 0.66;
359
+ }
360
+
361
+ .remote-session-copy {
362
+ min-width: 0;
363
+ flex: 1;
364
+ display: grid;
365
+ gap: 2px;
366
+ }
367
+
368
+ .remote-session-title,
369
+ .remote-session-cwd {
370
+ overflow: hidden;
371
+ text-overflow: ellipsis;
372
+ white-space: nowrap;
373
+ }
374
+
375
+ .remote-session-title {
376
+ color: rgba(255, 255, 255, 0.92);
377
+ font-weight: 600;
378
+ }
379
+
380
+ .remote-session-cwd {
381
+ color: rgba(255, 255, 255, 0.4);
382
+ font-size: 11px;
383
+ }
384
+
385
+ .remote-session-access {
386
+ flex: 0 0 auto;
387
+ padding: 2px 6px;
388
+ border: 1px solid rgba(255, 255, 255, 0.1);
389
+ border-radius: 4px;
390
+ color: rgba(255, 255, 255, 0.38);
391
+ font-size: 9px;
392
+ letter-spacing: 0.03em;
393
+ text-transform: uppercase;
394
+ }
395
+
396
+ .remote-session-access.is-write {
397
+ border-color: rgba(132, 198, 167, 0.25);
398
+ color: #9bcdb8;
399
+ }
400
+
401
+ .remote-palette-empty,
402
+ .remote-palette-error {
403
+ min-height: 118px;
404
+ display: grid;
405
+ place-content: center;
406
+ justify-items: center;
407
+ gap: 10px;
408
+ padding: 20px;
409
+ color: rgba(255, 255, 255, 0.4);
410
+ text-align: center;
411
+ }
412
+
413
+ .remote-palette-error {
414
+ color: #e6aaaa;
415
+ }
416
+
417
+ .remote-palette-empty button,
418
+ .remote-palette-error button {
419
+ padding: 4px 8px;
420
+ border: 1px solid rgba(255, 255, 255, 0.12);
421
+ border-radius: 5px;
422
+ color: rgba(255, 255, 255, 0.62);
423
+ background: rgba(255, 255, 255, 0.04);
424
+ font: inherit;
425
+ }
426
+
427
+ .remote-palette-footer {
428
+ height: 31px;
429
+ flex: 0 0 31px;
430
+ display: flex;
431
+ align-items: center;
432
+ justify-content: flex-end;
433
+ gap: 14px;
434
+ padding: 0 12px;
435
+ border-top: 1px solid rgba(255, 255, 255, 0.07);
436
+ color: rgba(255, 255, 255, 0.28);
437
+ font-size: 9px;
438
+ text-transform: uppercase;
439
+ }
440
+
441
+ @media (max-width: 520px) {
442
+ .remote-palette-backdrop {
443
+ padding: 42px 10px 10px;
444
+ }
445
+
446
+ .remote-palette {
447
+ max-height: calc(100vh - 64px);
448
+ }
449
+
450
+ .remote-palette-footer {
451
+ display: none;
452
+ }
453
+ }
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "@vibecook/ghosttea-react",
3
+ "version": "0.2.0",
4
+ "description": "React terminal surface and worker renderer for Ghosttea.",
5
+ "license": "MIT",
6
+ "author": "James Yong",
7
+ "type": "module",
8
+ "sideEffects": [
9
+ "./dist/styles.css",
10
+ "./dist/workspace.css"
11
+ ],
12
+ "main": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "exports": {
15
+ ".": {
16
+ "types": "./dist/index.d.ts",
17
+ "import": "./dist/index.js"
18
+ },
19
+ "./styles.css": "./dist/styles.css",
20
+ "./workspace": {
21
+ "types": "./dist/workspace/index.d.ts",
22
+ "import": "./dist/workspace/index.js"
23
+ },
24
+ "./workspace.css": "./dist/workspace.css",
25
+ "./terminal-render.worker.js": "./dist/terminal-render.worker.js"
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "README.md",
30
+ "LICENSE"
31
+ ],
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/jamesyong-42/ghosttea.git",
35
+ "directory": "packages/terminal-react"
36
+ },
37
+ "homepage": "https://github.com/jamesyong-42/ghosttea#readme",
38
+ "bugs": {
39
+ "url": "https://github.com/jamesyong-42/ghosttea/issues"
40
+ },
41
+ "keywords": [
42
+ "electron",
43
+ "ghostty",
44
+ "react",
45
+ "terminal",
46
+ "webgpu"
47
+ ],
48
+ "publishConfig": {
49
+ "access": "public",
50
+ "provenance": true
51
+ },
52
+ "scripts": {
53
+ "clean": "node -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\"",
54
+ "build": "npm run clean && tsc -p tsconfig.build.json && node scripts/bundle-worker.mjs && node -e \"const fs=require('node:fs');fs.copyFileSync('src/styles.css','dist/styles.css');fs.copyFileSync('src/workspace.css','dist/workspace.css')\"",
55
+ "check": "tsc --noEmit",
56
+ "test": "vitest run",
57
+ "prepublishOnly": "npm run build"
58
+ },
59
+ "dependencies": {
60
+ "@vibecook/ghosttea": "0.2.0",
61
+ "@vibecook/ghosttea-frame": "0.2.0",
62
+ "@vibecook/ghosttea-protocol": "0.2.0"
63
+ },
64
+ "peerDependencies": {
65
+ "react": ">=19"
66
+ },
67
+ "devDependencies": {
68
+ "@types/react": "19.2.17",
69
+ "@webgpu/types": "^0.1.71",
70
+ "esbuild": "^0.25.12",
71
+ "react": "19.2.7",
72
+ "typescript": "7.0.2",
73
+ "vitest": "4.1.10"
74
+ }
75
+ }