@phenx-inc/ctlsurf 0.1.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 (133) hide show
  1. package/bin/ctlsurf-worker.js +173 -0
  2. package/electron-vite.config.ts +34 -0
  3. package/out/headless/index.mjs +1364 -0
  4. package/out/headless/index.mjs.map +7 -0
  5. package/out/main/index.js +1131 -0
  6. package/out/preload/index.js +67 -0
  7. package/out/renderer/assets/abap-D5KwWAsZ.js +1399 -0
  8. package/out/renderer/assets/apex-DVGUZ64i.js +331 -0
  9. package/out/renderer/assets/azcli-BEAhqcuE.js +69 -0
  10. package/out/renderer/assets/bat-Bqkp9Cfu.js +101 -0
  11. package/out/renderer/assets/bicep-DIlfshcM.js +110 -0
  12. package/out/renderer/assets/cameligo-CLaaYNMV.js +175 -0
  13. package/out/renderer/assets/clojure-fcgFaMHx.js +762 -0
  14. package/out/renderer/assets/codicon-ngg6Pgfi.ttf +0 -0
  15. package/out/renderer/assets/coffee-CzJ5oEdj.js +233 -0
  16. package/out/renderer/assets/cpp-CcN6f0ik.js +390 -0
  17. package/out/renderer/assets/csharp-BJeIuvde.js +327 -0
  18. package/out/renderer/assets/csp-D_3BK2Wp.js +54 -0
  19. package/out/renderer/assets/css-i3rI3_64.js +186 -0
  20. package/out/renderer/assets/css.worker-umuuUiIb.js +53567 -0
  21. package/out/renderer/assets/cssMode-DL0XItGB.js +208 -0
  22. package/out/renderer/assets/cypher-D0--_GAN.js +264 -0
  23. package/out/renderer/assets/dart-vLMHv35g.js +282 -0
  24. package/out/renderer/assets/dockerfile--oxj0cAH.js +131 -0
  25. package/out/renderer/assets/ecl-CeuUgzaZ.js +457 -0
  26. package/out/renderer/assets/editor.worker-CNgWLVu7.js +13695 -0
  27. package/out/renderer/assets/elixir-eLfY1jWH.js +570 -0
  28. package/out/renderer/assets/flow9-ZSTChSMd.js +143 -0
  29. package/out/renderer/assets/freemarker2-CrOEuDcF.js +995 -0
  30. package/out/renderer/assets/fsharp-D2uoxuLH.js +218 -0
  31. package/out/renderer/assets/go-brnMpFrj.js +219 -0
  32. package/out/renderer/assets/graphql-BeiGgjIU.js +152 -0
  33. package/out/renderer/assets/handlebars-D4QYaBof.js +414 -0
  34. package/out/renderer/assets/hcl-CrX1Es2W.js +184 -0
  35. package/out/renderer/assets/html-B2Dqk2ai.js +303 -0
  36. package/out/renderer/assets/html.worker-BT47iy49.js +29777 -0
  37. package/out/renderer/assets/htmlMode-CdZ0Prhd.js +224 -0
  38. package/out/renderer/assets/index-CJ6RsQWP.css +8108 -0
  39. package/out/renderer/assets/index-pZmE1QXB.js +211777 -0
  40. package/out/renderer/assets/ini-BcQysCTb.js +72 -0
  41. package/out/renderer/assets/java-Dt3iMn2o.js +233 -0
  42. package/out/renderer/assets/javascript-CK8zNQXj.js +72 -0
  43. package/out/renderer/assets/json.worker-D4JVmXIe.js +21424 -0
  44. package/out/renderer/assets/jsonMode-Cewaellc.js +931 -0
  45. package/out/renderer/assets/julia-Cm3ItYL_.js +512 -0
  46. package/out/renderer/assets/kotlin-Ddo1SjA5.js +253 -0
  47. package/out/renderer/assets/less-B7Qaxw-O.js +162 -0
  48. package/out/renderer/assets/lexon-C1U0m2n9.js +158 -0
  49. package/out/renderer/assets/liquid-Bd3GPNs2.js +235 -0
  50. package/out/renderer/assets/lspLanguageFeatures-DSDH7BnA.js +1841 -0
  51. package/out/renderer/assets/lua-hNsuGJkO.js +163 -0
  52. package/out/renderer/assets/m3-6ko6q9-_.js +211 -0
  53. package/out/renderer/assets/markdown-B0YTnTxW.js +230 -0
  54. package/out/renderer/assets/mdx-CCPVCrXC.js +159 -0
  55. package/out/renderer/assets/mips-CJm71dS3.js +199 -0
  56. package/out/renderer/assets/msdax-BBeIktCY.js +376 -0
  57. package/out/renderer/assets/mysql-BWiizXSn.js +879 -0
  58. package/out/renderer/assets/objective-c-B1L1C5EC.js +184 -0
  59. package/out/renderer/assets/pascal-DMQyD4Xk.js +252 -0
  60. package/out/renderer/assets/pascaligo-VA_LQ1oU.js +165 -0
  61. package/out/renderer/assets/perl-DC0Z0tlO.js +627 -0
  62. package/out/renderer/assets/pgsql-DaSGFTLp.js +852 -0
  63. package/out/renderer/assets/php-Bkx1qpkQ.js +501 -0
  64. package/out/renderer/assets/pla-DEV89yYj.js +138 -0
  65. package/out/renderer/assets/postiats-CVVurEnu.js +908 -0
  66. package/out/renderer/assets/powerquery-BQ_t1ZiQ.js +891 -0
  67. package/out/renderer/assets/powershell-BXiKvz7Z.js +240 -0
  68. package/out/renderer/assets/protobuf-CndvAUGu.js +421 -0
  69. package/out/renderer/assets/pug-BxCXwerb.js +403 -0
  70. package/out/renderer/assets/python-34jOtlcC.js +295 -0
  71. package/out/renderer/assets/qsharp-BWK6YLKm.js +302 -0
  72. package/out/renderer/assets/r-CtqYUQ6l.js +244 -0
  73. package/out/renderer/assets/razor-DXRw694z.js +545 -0
  74. package/out/renderer/assets/redis-O7gSt3oh.js +303 -0
  75. package/out/renderer/assets/redshift-CvYMMYZY.js +810 -0
  76. package/out/renderer/assets/restructuredtext-B-KQCVu_.js +175 -0
  77. package/out/renderer/assets/ruby-DCd4DmAr.js +512 -0
  78. package/out/renderer/assets/rust-B1c0VCeq.js +344 -0
  79. package/out/renderer/assets/sb-Chfc_wZF.js +116 -0
  80. package/out/renderer/assets/scala-DbVzH-3O.js +371 -0
  81. package/out/renderer/assets/scheme-D7PxodDG.js +109 -0
  82. package/out/renderer/assets/scss-B42qMyAu.js +261 -0
  83. package/out/renderer/assets/shell-vZEubQ82.js +222 -0
  84. package/out/renderer/assets/solidity-yHOxYChb.js +1368 -0
  85. package/out/renderer/assets/sophia-D7pU0Y1d.js +200 -0
  86. package/out/renderer/assets/sparql-DxuVdnRl.js +202 -0
  87. package/out/renderer/assets/sql-BAGepFCR.js +854 -0
  88. package/out/renderer/assets/st-C-b0Dh53.js +417 -0
  89. package/out/renderer/assets/swift-BmOZGynf.js +313 -0
  90. package/out/renderer/assets/systemverilog-BOC0OOdC.js +577 -0
  91. package/out/renderer/assets/tcl-Bb4GCwBr.js +233 -0
  92. package/out/renderer/assets/ts.worker-C7hW3aY-.js +225330 -0
  93. package/out/renderer/assets/tsMode-CmND5_wB.js +1265 -0
  94. package/out/renderer/assets/twig-DvgEGWAV.js +393 -0
  95. package/out/renderer/assets/typescript-BNNI0Euv.js +337 -0
  96. package/out/renderer/assets/typespec-R77Ln7Jb.js +128 -0
  97. package/out/renderer/assets/vb-Bm6ESA0Q.js +373 -0
  98. package/out/renderer/assets/wgsl-_KPae5vw.js +454 -0
  99. package/out/renderer/assets/xml-CgdndrNB.js +89 -0
  100. package/out/renderer/assets/yaml-DNWPIf1s.js +200 -0
  101. package/out/renderer/index.html +13 -0
  102. package/package.json +67 -0
  103. package/resources/icon.icns +0 -0
  104. package/resources/icon.ico +0 -0
  105. package/resources/icon.png +0 -0
  106. package/src/main/agents.ts +46 -0
  107. package/src/main/bridge.ts +180 -0
  108. package/src/main/ctlsurfApi.ts +142 -0
  109. package/src/main/detectMode.ts +17 -0
  110. package/src/main/headless.ts +182 -0
  111. package/src/main/index.ts +300 -0
  112. package/src/main/orchestrator.ts +404 -0
  113. package/src/main/pty.ts +65 -0
  114. package/src/main/settingsDir.ts +17 -0
  115. package/src/main/tui.ts +366 -0
  116. package/src/main/workerWs.ts +312 -0
  117. package/src/preload/index.ts +114 -0
  118. package/src/renderer/App.tsx +275 -0
  119. package/src/renderer/components/CtlsurfPanel.tsx +49 -0
  120. package/src/renderer/components/EditorPanel.tsx +232 -0
  121. package/src/renderer/components/MultiSplitPane.tsx +251 -0
  122. package/src/renderer/components/PaneLayout.tsx +419 -0
  123. package/src/renderer/components/SettingsDialog.tsx +204 -0
  124. package/src/renderer/components/SplitPane.tsx +82 -0
  125. package/src/renderer/components/StatusBar.tsx +73 -0
  126. package/src/renderer/components/TerminalPanel.tsx +140 -0
  127. package/src/renderer/index.html +12 -0
  128. package/src/renderer/main.tsx +10 -0
  129. package/src/renderer/styles.css +722 -0
  130. package/tsconfig.json +8 -0
  131. package/tsconfig.main.json +15 -0
  132. package/tsconfig.preload.json +14 -0
  133. package/tsconfig.renderer.json +15 -0
@@ -0,0 +1,722 @@
1
+ * {
2
+ margin: 0;
3
+ padding: 0;
4
+ box-sizing: border-box;
5
+ }
6
+
7
+ html, body, #root {
8
+ height: 100%;
9
+ width: 100%;
10
+ overflow: hidden;
11
+ background: #1a1b26;
12
+ color: #a9b1d6;
13
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
14
+ }
15
+
16
+ .app {
17
+ display: flex;
18
+ flex-direction: column;
19
+ height: 100%;
20
+ }
21
+
22
+ /* Title bar drag region (macOS hidden title bar) */
23
+ .titlebar {
24
+ -webkit-app-region: drag;
25
+ height: 38px;
26
+ display: flex;
27
+ align-items: center;
28
+ justify-content: space-between;
29
+ padding: 0 16px 0 80px;
30
+ background: #16161e;
31
+ border-bottom: 1px solid #2a2b3d;
32
+ font-size: 13px;
33
+ flex-shrink: 0;
34
+ }
35
+
36
+ .titlebar-title {
37
+ font-weight: 600;
38
+ color: #c0caf5;
39
+ }
40
+
41
+ .titlebar-controls {
42
+ -webkit-app-region: no-drag;
43
+ display: flex;
44
+ align-items: center;
45
+ gap: 8px;
46
+ }
47
+
48
+ .titlebar-controls select {
49
+ background: #2a2b3d;
50
+ color: #a9b1d6;
51
+ border: 1px solid #3b3d57;
52
+ border-radius: 4px;
53
+ padding: 2px 8px;
54
+ font-size: 12px;
55
+ cursor: pointer;
56
+ }
57
+
58
+ .titlebar-controls select:focus {
59
+ outline: none;
60
+ border-color: #7aa2f7;
61
+ }
62
+
63
+ .titlebar-btn {
64
+ background: #2a2b3d;
65
+ color: #565f89;
66
+ border: 1px solid #3b3d57;
67
+ border-radius: 4px;
68
+ padding: 2px 10px;
69
+ font-size: 11px;
70
+ cursor: pointer;
71
+ transition: all 0.15s;
72
+ }
73
+
74
+ .titlebar-btn:hover {
75
+ color: #a9b1d6;
76
+ border-color: #565f89;
77
+ }
78
+
79
+ .titlebar-btn.active {
80
+ color: #7aa2f7;
81
+ border-color: #7aa2f7;
82
+ background: #1f2335;
83
+ }
84
+
85
+ /* Main content area */
86
+ .main-content {
87
+ flex: 1;
88
+ overflow: hidden;
89
+ }
90
+
91
+ /* Terminal container */
92
+ .terminal-container {
93
+ width: 100%;
94
+ height: 100%;
95
+ padding: 4px;
96
+ overflow: hidden;
97
+ }
98
+
99
+ .terminal-container .xterm {
100
+ height: 100%;
101
+ }
102
+
103
+ .terminal-fullscreen {
104
+ width: 100%;
105
+ height: 100%;
106
+ }
107
+
108
+ /* ─── Recursive pane layout ─────────────────────── */
109
+
110
+ .pane-layout-root {
111
+ width: 100%;
112
+ height: 100%;
113
+ overflow: hidden;
114
+ }
115
+
116
+ /* Split containers */
117
+ .split-container {
118
+ display: flex;
119
+ width: 100%;
120
+ height: 100%;
121
+ overflow: hidden;
122
+ }
123
+
124
+ .split-horizontal {
125
+ flex-direction: row;
126
+ }
127
+
128
+ .split-vertical {
129
+ flex-direction: column;
130
+ }
131
+
132
+ .split-child {
133
+ overflow: hidden;
134
+ min-width: 0;
135
+ min-height: 0;
136
+ }
137
+
138
+ /* Dividers */
139
+ .split-divider {
140
+ flex-shrink: 0;
141
+ background: #2a2b3d;
142
+ transition: background 0.15s;
143
+ z-index: 2;
144
+ }
145
+
146
+ .split-divider-h {
147
+ width: 4px;
148
+ height: 100%;
149
+ cursor: col-resize;
150
+ }
151
+
152
+ .split-divider-v {
153
+ height: 4px;
154
+ width: 100%;
155
+ cursor: row-resize;
156
+ }
157
+
158
+ .split-divider:hover {
159
+ background: #7aa2f7;
160
+ }
161
+
162
+ /* Leaf pane */
163
+ .leaf-pane {
164
+ width: 100%;
165
+ height: 100%;
166
+ display: flex;
167
+ flex-direction: column;
168
+ position: relative;
169
+ overflow: hidden;
170
+ }
171
+
172
+ .leaf-pane-dragging {
173
+ opacity: 0.35;
174
+ }
175
+
176
+ .leaf-pane-content {
177
+ flex: 1;
178
+ overflow: hidden;
179
+ min-height: 0;
180
+ }
181
+
182
+ /* Pane header */
183
+ .pane-header {
184
+ display: flex;
185
+ align-items: center;
186
+ height: 26px;
187
+ padding: 0 6px;
188
+ background: #16161e;
189
+ border-bottom: 1px solid #2a2b3d;
190
+ flex-shrink: 0;
191
+ cursor: grab;
192
+ user-select: none;
193
+ }
194
+
195
+ .pane-header:active {
196
+ cursor: grabbing;
197
+ }
198
+
199
+ .pane-drag-grip {
200
+ font-size: 10px;
201
+ color: #414868;
202
+ margin-right: 6px;
203
+ line-height: 1;
204
+ }
205
+
206
+ .pane-header:hover .pane-drag-grip {
207
+ color: #7aa2f7;
208
+ }
209
+
210
+ .pane-header-label {
211
+ font-size: 11px;
212
+ font-weight: 600;
213
+ color: #565f89;
214
+ letter-spacing: 0.3px;
215
+ flex: 1;
216
+ }
217
+
218
+ .pane-hide-btn {
219
+ background: none;
220
+ border: none;
221
+ color: #414868;
222
+ font-size: 14px;
223
+ cursor: pointer;
224
+ padding: 0 4px;
225
+ line-height: 1;
226
+ }
227
+
228
+ .pane-hide-btn:hover {
229
+ color: #f7768e;
230
+ }
231
+
232
+ /* Drop zone overlay */
233
+ .drop-overlay {
234
+ position: absolute;
235
+ inset: 26px 0 0 0; /* below the header */
236
+ z-index: 50;
237
+ pointer-events: auto;
238
+ }
239
+
240
+ /* Individual drop zones — positioned as quadrants */
241
+ .drop-zone {
242
+ position: absolute;
243
+ border-radius: 3px;
244
+ transition: background 0.1s;
245
+ pointer-events: none;
246
+ }
247
+
248
+ .drop-zone-top {
249
+ top: 0;
250
+ left: 0;
251
+ right: 0;
252
+ height: 50%;
253
+ clip-path: polygon(0 0, 100% 0, 75% 25%, 25% 25%);
254
+ }
255
+
256
+ .drop-zone-bottom {
257
+ bottom: 0;
258
+ left: 0;
259
+ right: 0;
260
+ height: 50%;
261
+ clip-path: polygon(25% 75%, 75% 75%, 100% 100%, 0 100%);
262
+ }
263
+
264
+ .drop-zone-left {
265
+ top: 0;
266
+ left: 0;
267
+ bottom: 0;
268
+ width: 50%;
269
+ clip-path: polygon(0 0, 25% 25%, 25% 75%, 0 100%);
270
+ }
271
+
272
+ .drop-zone-right {
273
+ top: 0;
274
+ right: 0;
275
+ bottom: 0;
276
+ width: 50%;
277
+ clip-path: polygon(75% 25%, 100% 0, 100% 100%, 75% 75%);
278
+ }
279
+
280
+ .drop-zone-center {
281
+ top: 25%;
282
+ left: 25%;
283
+ width: 50%;
284
+ height: 50%;
285
+ }
286
+
287
+ .drop-zone.active {
288
+ background: rgba(122, 162, 247, 0.25);
289
+ border: 2px solid rgba(122, 162, 247, 0.6);
290
+ }
291
+
292
+ .multi-split-empty {
293
+ width: 100%;
294
+ height: 100%;
295
+ display: flex;
296
+ align-items: center;
297
+ justify-content: center;
298
+ color: #565f89;
299
+ font-size: 13px;
300
+ }
301
+
302
+ /* ctlsurf panel */
303
+ .ctlsurf-panel {
304
+ width: 100%;
305
+ height: 100%;
306
+ overflow: hidden;
307
+ }
308
+
309
+ .ctlsurf-panel webview {
310
+ width: 100%;
311
+ height: 100%;
312
+ }
313
+
314
+ /* Status bar */
315
+ .statusbar {
316
+ height: 24px;
317
+ display: flex;
318
+ align-items: center;
319
+ justify-content: space-between;
320
+ padding: 0 12px;
321
+ background: #16161e;
322
+ border-top: 1px solid #2a2b3d;
323
+ font-size: 11px;
324
+ color: #565f89;
325
+ flex-shrink: 0;
326
+ }
327
+
328
+ .statusbar-section {
329
+ display: flex;
330
+ align-items: center;
331
+ gap: 8px;
332
+ }
333
+
334
+ .statusbar-btn {
335
+ padding: 1px 8px;
336
+ border-radius: 3px;
337
+ font-size: 11px;
338
+ cursor: pointer;
339
+ border: 1px solid #3b3d57;
340
+ background: #2a2b3d;
341
+ color: #7aa2f7;
342
+ margin-left: 4px;
343
+ }
344
+
345
+ .statusbar-btn:hover {
346
+ background: #3b3d57;
347
+ }
348
+
349
+ .statusbar-btn:disabled {
350
+ opacity: 0.5;
351
+ cursor: default;
352
+ }
353
+
354
+ .statusbar-path {
355
+ cursor: pointer;
356
+ font-family: 'JetBrains Mono', 'Fira Code', monospace;
357
+ font-size: 11px;
358
+ color: #a9b1d6;
359
+ padding: 1px 4px;
360
+ border-radius: 3px;
361
+ }
362
+
363
+ .statusbar-path:hover {
364
+ background: #2a2b3d;
365
+ color: #7aa2f7;
366
+ }
367
+
368
+ .status-dot {
369
+ width: 6px;
370
+ height: 6px;
371
+ border-radius: 50%;
372
+ display: inline-block;
373
+ }
374
+
375
+ .status-dot.active { background: #9ece6a; }
376
+ .status-dot.inactive { background: #f7768e; }
377
+ .status-dot.idle { background: #565f89; }
378
+ .status-dot.pending { background: #e0af68; }
379
+
380
+ /* Editor panel */
381
+ .editor-panel {
382
+ display: flex;
383
+ width: 100%;
384
+ height: 100%;
385
+ overflow: hidden;
386
+ background: #1e1e2e;
387
+ }
388
+
389
+ .editor-tree {
390
+ height: 100%;
391
+ display: flex;
392
+ flex-direction: column;
393
+ flex-shrink: 0;
394
+ background: #1a1b26;
395
+ border-right: 1px solid #2a2b3d;
396
+ }
397
+
398
+ .editor-tree-header {
399
+ padding: 8px 12px;
400
+ font-size: 11px;
401
+ font-weight: 600;
402
+ color: #565f89;
403
+ letter-spacing: 0.5px;
404
+ border-bottom: 1px solid #2a2b3d;
405
+ flex-shrink: 0;
406
+ }
407
+
408
+ .editor-tree-content {
409
+ flex: 1;
410
+ overflow-y: auto;
411
+ overflow-x: hidden;
412
+ }
413
+
414
+ .editor-tree-content::-webkit-scrollbar {
415
+ width: 6px;
416
+ }
417
+
418
+ .editor-tree-content::-webkit-scrollbar-thumb {
419
+ background: #2a2b3d;
420
+ border-radius: 3px;
421
+ }
422
+
423
+ .tree-node {
424
+ display: flex;
425
+ align-items: center;
426
+ padding: 3px 0;
427
+ cursor: pointer;
428
+ font-size: 12px;
429
+ color: #a9b1d6;
430
+ white-space: nowrap;
431
+ overflow: hidden;
432
+ text-overflow: ellipsis;
433
+ }
434
+
435
+ .tree-node:hover {
436
+ background: rgba(122, 162, 247, 0.08);
437
+ }
438
+
439
+ .tree-node.selected {
440
+ background: rgba(122, 162, 247, 0.15);
441
+ color: #c0caf5;
442
+ }
443
+
444
+ .tree-icon {
445
+ width: 16px;
446
+ text-align: center;
447
+ flex-shrink: 0;
448
+ font-size: 10px;
449
+ color: #565f89;
450
+ }
451
+
452
+ .tree-file-icon {
453
+ width: 16px;
454
+ }
455
+
456
+ .tree-label {
457
+ overflow: hidden;
458
+ text-overflow: ellipsis;
459
+ }
460
+
461
+ .editor-tree-divider {
462
+ width: 3px;
463
+ height: 100%;
464
+ cursor: col-resize;
465
+ flex-shrink: 0;
466
+ background: transparent;
467
+ }
468
+
469
+ .editor-tree-divider:hover {
470
+ background: #7aa2f7;
471
+ }
472
+
473
+ .editor-main {
474
+ flex: 1;
475
+ display: flex;
476
+ flex-direction: column;
477
+ min-width: 0;
478
+ overflow: hidden;
479
+ }
480
+
481
+ .editor-tab-bar {
482
+ display: flex;
483
+ align-items: center;
484
+ gap: 4px;
485
+ padding: 0 8px;
486
+ height: 32px;
487
+ background: #16161e;
488
+ border-bottom: 1px solid #2a2b3d;
489
+ flex-shrink: 0;
490
+ }
491
+
492
+ .editor-tab {
493
+ font-size: 12px;
494
+ color: #a9b1d6;
495
+ padding: 4px 10px;
496
+ border-radius: 3px;
497
+ }
498
+
499
+ .editor-tab.active {
500
+ color: #c0caf5;
501
+ background: #2a2b3d;
502
+ }
503
+
504
+ .editor-save-btn {
505
+ margin-left: auto;
506
+ padding: 2px 10px;
507
+ font-size: 11px;
508
+ background: #7aa2f7;
509
+ color: #1a1b26;
510
+ border: none;
511
+ border-radius: 3px;
512
+ cursor: pointer;
513
+ }
514
+
515
+ .editor-save-btn:hover {
516
+ background: #89b4fa;
517
+ }
518
+
519
+ .editor-monaco-container {
520
+ flex: 1;
521
+ overflow: hidden;
522
+ }
523
+
524
+ .editor-placeholder {
525
+ flex: 1;
526
+ display: flex;
527
+ align-items: center;
528
+ justify-content: center;
529
+ color: #565f89;
530
+ font-size: 13px;
531
+ }
532
+
533
+ /* Settings dialog */
534
+ .settings-overlay {
535
+ position: fixed;
536
+ inset: 0;
537
+ background: rgba(0, 0, 0, 0.6);
538
+ display: flex;
539
+ align-items: center;
540
+ justify-content: center;
541
+ z-index: 100;
542
+ }
543
+
544
+ .settings-dialog {
545
+ background: #1f2335;
546
+ border: 1px solid #3b3d57;
547
+ border-radius: 8px;
548
+ padding: 24px;
549
+ width: 480px;
550
+ max-height: 80vh;
551
+ overflow-y: auto;
552
+ }
553
+
554
+ .settings-dialog h3 {
555
+ color: #c0caf5;
556
+ margin-bottom: 16px;
557
+ font-size: 16px;
558
+ }
559
+
560
+ .settings-section {
561
+ margin-bottom: 20px;
562
+ }
563
+
564
+ .settings-section h4 {
565
+ color: #a9b1d6;
566
+ font-size: 13px;
567
+ margin-bottom: 8px;
568
+ }
569
+
570
+ .settings-hint {
571
+ color: #565f89;
572
+ font-size: 11px;
573
+ display: block;
574
+ margin-bottom: 12px;
575
+ }
576
+
577
+ .settings-dialog label {
578
+ display: block;
579
+ color: #a9b1d6;
580
+ font-size: 12px;
581
+ margin-bottom: 12px;
582
+ }
583
+
584
+ .settings-dialog input {
585
+ display: block;
586
+ width: 100%;
587
+ margin-top: 4px;
588
+ padding: 6px 10px;
589
+ background: #16161e;
590
+ border: 1px solid #3b3d57;
591
+ border-radius: 4px;
592
+ color: #a9b1d6;
593
+ font-size: 13px;
594
+ font-family: 'JetBrains Mono', 'Fira Code', monospace;
595
+ }
596
+
597
+ .settings-dialog input:focus {
598
+ outline: none;
599
+ border-color: #7aa2f7;
600
+ }
601
+
602
+ .settings-dialog input::placeholder {
603
+ color: #414868;
604
+ }
605
+
606
+ .settings-actions {
607
+ display: flex;
608
+ justify-content: flex-end;
609
+ gap: 8px;
610
+ margin-top: 20px;
611
+ }
612
+
613
+ .btn-primary, .btn-secondary {
614
+ padding: 6px 16px;
615
+ border-radius: 4px;
616
+ font-size: 12px;
617
+ cursor: pointer;
618
+ border: 1px solid transparent;
619
+ }
620
+
621
+ .btn-primary {
622
+ background: #7aa2f7;
623
+ color: #1a1b26;
624
+ border-color: #7aa2f7;
625
+ }
626
+
627
+ .btn-primary:hover {
628
+ background: #89b4fa;
629
+ }
630
+
631
+ .btn-secondary {
632
+ background: #2a2b3d;
633
+ color: #a9b1d6;
634
+ border-color: #3b3d57;
635
+ }
636
+
637
+ .btn-secondary:hover {
638
+ border-color: #565f89;
639
+ }
640
+
641
+ .btn-ghost {
642
+ padding: 4px 10px;
643
+ border-radius: 4px;
644
+ font-size: 11px;
645
+ cursor: pointer;
646
+ border: none;
647
+ background: transparent;
648
+ color: #565f89;
649
+ }
650
+
651
+ .btn-ghost:hover {
652
+ background: #2a2b3d;
653
+ color: #a9b1d6;
654
+ }
655
+
656
+ .btn-danger:hover {
657
+ color: #f7768e;
658
+ }
659
+
660
+ /* Profile list */
661
+ .profile-list {
662
+ display: flex;
663
+ flex-direction: column;
664
+ gap: 4px;
665
+ margin: 12px 0;
666
+ }
667
+
668
+ .profile-item {
669
+ display: flex;
670
+ align-items: center;
671
+ justify-content: space-between;
672
+ padding: 8px 12px;
673
+ border-radius: 6px;
674
+ border: 1px solid #2a2b3d;
675
+ cursor: pointer;
676
+ transition: border-color 0.15s;
677
+ }
678
+
679
+ .profile-item:hover {
680
+ border-color: #3b3d57;
681
+ }
682
+
683
+ .profile-item.active {
684
+ border-color: #7aa2f7;
685
+ background: rgba(122, 162, 247, 0.05);
686
+ }
687
+
688
+ .profile-info {
689
+ display: flex;
690
+ align-items: center;
691
+ gap: 10px;
692
+ flex: 1;
693
+ }
694
+
695
+ .profile-dot {
696
+ width: 8px;
697
+ height: 8px;
698
+ border-radius: 50%;
699
+ background: #3b3d57;
700
+ flex-shrink: 0;
701
+ }
702
+
703
+ .profile-dot.active {
704
+ background: #9ece6a;
705
+ }
706
+
707
+ .profile-name {
708
+ color: #c0caf5;
709
+ font-size: 13px;
710
+ font-weight: 500;
711
+ }
712
+
713
+ .profile-url {
714
+ color: #565f89;
715
+ font-size: 11px;
716
+ font-family: 'JetBrains Mono', 'Fira Code', monospace;
717
+ }
718
+
719
+ .profile-actions {
720
+ display: flex;
721
+ gap: 4px;
722
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,8 @@
1
+ {
2
+ "files": [],
3
+ "references": [
4
+ { "path": "./tsconfig.main.json" },
5
+ { "path": "./tsconfig.preload.json" },
6
+ { "path": "./tsconfig.renderer.json" }
7
+ ]
8
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "outDir": "dist/main",
7
+ "rootDir": "src/main",
8
+ "strict": true,
9
+ "esModuleInterop": true,
10
+ "skipLibCheck": true,
11
+ "forceConsistentCasingInFileNames": true,
12
+ "resolveJsonModule": true
13
+ },
14
+ "include": ["src/main/**/*"]
15
+ }