@phenx-inc/ctlsurf 0.12.0 → 0.13.1

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 (32) hide show
  1. package/out/headless/index.mjs +29 -19
  2. package/out/headless/index.mjs.map +2 -2
  3. package/out/main/index.js +35 -19
  4. package/out/renderer/assets/{cssMode-R8fTFLae.js → cssMode-KhYyY-BM.js} +3 -3
  5. package/out/renderer/assets/{freemarker2-CyjWzWoP.js → freemarker2-BFsSgcWk.js} +1 -1
  6. package/out/renderer/assets/{handlebars-CrhCGIRM.js → handlebars-Be6_aBsm.js} +1 -1
  7. package/out/renderer/assets/{html-Cc3dPNZr.js → html-G8mvsyfc.js} +1 -1
  8. package/out/renderer/assets/{htmlMode-BWtG6ywk.js → htmlMode-Cfd5VCjw.js} +3 -3
  9. package/out/renderer/assets/{index-BL9njXIL.css → index-Bi_MjBqs.css} +233 -8
  10. package/out/renderer/assets/{index-kkG56aKv.js → index-MqgBcJzy.js} +392 -120
  11. package/out/renderer/assets/{javascript-C8T_SdLC.js → javascript-XyDWi6dC.js} +2 -2
  12. package/out/renderer/assets/{jsonMode-D1zR4VVU.js → jsonMode-DZT5gBVW.js} +3 -3
  13. package/out/renderer/assets/{liquid-COSMe9Uf.js → liquid-BuajCNJ9.js} +1 -1
  14. package/out/renderer/assets/{lspLanguageFeatures-CXGfrtzl.js → lspLanguageFeatures-BYkg2Yc-.js} +1 -1
  15. package/out/renderer/assets/{mdx-RfS44T-L.js → mdx-D0Qx2GMS.js} +1 -1
  16. package/out/renderer/assets/{python-DFSWKHUu.js → python-ChncNy6S.js} +1 -1
  17. package/out/renderer/assets/{razor-DtH2_uvo.js → razor-C6MUtfaS.js} +1 -1
  18. package/out/renderer/assets/{tsMode-BYIQ-S9Z.js → tsMode-C2aMdzdU.js} +1 -1
  19. package/out/renderer/assets/{typescript-HhQUr1Rb.js → typescript-CB71AtAT.js} +1 -1
  20. package/out/renderer/assets/{xml-KuhgdKfD.js → xml-tHS1Ec9w.js} +1 -1
  21. package/out/renderer/assets/{yaml-W_kzCFH7.js → yaml-CZcp5ueF.js} +1 -1
  22. package/out/renderer/index.html +2 -2
  23. package/package.json +1 -1
  24. package/src/main/index.ts +13 -1
  25. package/src/main/orchestrator.ts +8 -1
  26. package/src/main/ticketStore.ts +26 -20
  27. package/src/renderer/App.tsx +19 -3
  28. package/src/renderer/components/CtlsurfPanel.tsx +169 -35
  29. package/src/renderer/components/SpeakControls.tsx +8 -2
  30. package/src/renderer/components/TerminalPanel.tsx +141 -44
  31. package/src/renderer/components/TicketPanel.tsx +126 -29
  32. package/src/renderer/styles.css +233 -8
@@ -100,6 +100,17 @@ html, body, #root {
100
100
  background: #1f2335;
101
101
  }
102
102
 
103
+ .titlebar-btn:disabled {
104
+ opacity: 0.4;
105
+ cursor: not-allowed;
106
+ }
107
+
108
+ /* Keep the greyed-out look stable on hover for disabled buttons. */
109
+ .titlebar-btn:disabled:hover {
110
+ color: #565f89;
111
+ border-color: #3b3d57;
112
+ }
113
+
103
114
  .titlebar-separator {
104
115
  width: 1px;
105
116
  height: 16px;
@@ -266,6 +277,15 @@ html, body, #root {
266
277
  }
267
278
 
268
279
  /* Terminal container */
280
+ .terminal-wrap {
281
+ position: relative;
282
+ flex: 1;
283
+ min-width: 0;
284
+ min-height: 0;
285
+ width: 100%;
286
+ height: 100%;
287
+ }
288
+
269
289
  .terminal-container {
270
290
  width: 100%;
271
291
  height: 100%;
@@ -277,6 +297,34 @@ html, body, #root {
277
297
  height: 100%;
278
298
  }
279
299
 
300
+ /* Floating "jump to latest" pill — shown only while scrolled up. */
301
+ .term-jump-latest {
302
+ position: absolute;
303
+ bottom: 14px;
304
+ right: 20px;
305
+ z-index: 5;
306
+ display: inline-flex;
307
+ align-items: center;
308
+ gap: 5px;
309
+ padding: 5px 12px;
310
+ border-radius: 14px;
311
+ background: #2a2b3d;
312
+ border: 1px solid #7aa2f7;
313
+ color: #c0caf5;
314
+ font-family: inherit;
315
+ font-size: 11.5px;
316
+ font-weight: 600;
317
+ cursor: pointer;
318
+ box-shadow: 0 4px 14px rgba(0, 0, 0, 0.45);
319
+ transition: background 0.13s ease, transform 0.06s ease;
320
+ }
321
+ .term-jump-latest:hover {
322
+ background: #343650;
323
+ }
324
+ .term-jump-latest:active {
325
+ transform: translateY(1px);
326
+ }
327
+
280
328
  .terminal-fullscreen {
281
329
  width: 100%;
282
330
  height: 100%;
@@ -481,13 +529,88 @@ html, body, #root {
481
529
  width: 100%;
482
530
  height: 100%;
483
531
  overflow: hidden;
532
+ display: flex;
533
+ flex-direction: column;
534
+ }
535
+
536
+ .ctlsurf-addressbar {
537
+ flex: 0 0 auto;
538
+ display: flex;
539
+ align-items: center;
540
+ gap: 4px;
541
+ padding: 5px 6px;
542
+ background: #1a1b26;
543
+ border-bottom: 1px solid #2a2b3d;
484
544
  }
485
545
 
486
- .ctlsurf-panel webview {
546
+ .ctlsurf-nav-btn {
547
+ flex: 0 0 auto;
548
+ width: 24px;
549
+ height: 24px;
550
+ display: flex;
551
+ align-items: center;
552
+ justify-content: center;
553
+ padding: 0;
554
+ background: transparent;
555
+ border: none;
556
+ border-radius: 4px;
557
+ color: #a9b1d6;
558
+ font-size: 16px;
559
+ line-height: 1;
560
+ cursor: pointer;
561
+ }
562
+
563
+ .ctlsurf-nav-btn:hover:not(:disabled) {
564
+ background: #2a2b3d;
565
+ }
566
+
567
+ .ctlsurf-nav-btn:disabled {
568
+ color: #565f89;
569
+ opacity: 0.5;
570
+ cursor: default;
571
+ }
572
+
573
+ .ctlsurf-address-form {
574
+ flex: 1 1 auto;
575
+ display: flex;
576
+ min-width: 0;
577
+ }
578
+
579
+ .ctlsurf-address-input {
580
+ width: 100%;
581
+ height: 26px;
582
+ padding: 0 11px;
583
+ background: #16161e;
584
+ border: 1px solid #2a2b3d;
585
+ border-radius: 13px;
586
+ color: #c0caf5;
587
+ font-size: 12px;
588
+ outline: none;
589
+ }
590
+
591
+ .ctlsurf-address-input:focus {
592
+ border-color: #7aa2f7;
593
+ }
594
+
595
+ .ctlsurf-webview-host {
596
+ flex: 1 1 auto;
597
+ position: relative;
598
+ min-height: 0;
599
+ }
600
+
601
+ .ctlsurf-webview-host webview {
487
602
  width: 100%;
488
603
  height: 100%;
489
604
  }
490
605
 
606
+ .ctlsurf-webview-loading {
607
+ width: 100%;
608
+ height: 100%;
609
+ display: flex;
610
+ align-items: center;
611
+ justify-content: center;
612
+ }
613
+
491
614
  /* Status bar */
492
615
  .statusbar {
493
616
  height: 24px;
@@ -1712,6 +1835,32 @@ html, body, #root {
1712
1835
  color: #7aa2f7;
1713
1836
  font-weight: 600;
1714
1837
  }
1838
+ /* "+ New" action in the header (replaces the old footer button). */
1839
+ .ticket-drawer-new {
1840
+ flex-shrink: 0;
1841
+ align-self: center;
1842
+ display: inline-flex;
1843
+ align-items: center;
1844
+ gap: 3px;
1845
+ padding: 5px 11px;
1846
+ border-radius: 7px;
1847
+ background: rgba(122, 162, 247, 0.14);
1848
+ border: 1px solid rgba(122, 162, 247, 0.3);
1849
+ color: #9db4f5;
1850
+ font-family: inherit;
1851
+ font-size: 12px;
1852
+ font-weight: 600;
1853
+ cursor: pointer;
1854
+ transition: background 0.13s ease, border-color 0.13s ease, color 0.13s ease, transform 0.06s ease;
1855
+ }
1856
+ .ticket-drawer-new:hover {
1857
+ background: rgba(122, 162, 247, 0.22);
1858
+ border-color: rgba(122, 162, 247, 0.5);
1859
+ color: #c0d0fb;
1860
+ }
1861
+ .ticket-drawer-new:active {
1862
+ transform: translateY(1px);
1863
+ }
1715
1864
  .ticket-drawer-warn {
1716
1865
  color: #e0af68;
1717
1866
  }
@@ -1909,6 +2058,49 @@ html, body, #root {
1909
2058
  text-align: center;
1910
2059
  }
1911
2060
 
2061
+ /* ── collapsible "Done" section header ── */
2062
+ .ticket-done-toggle {
2063
+ display: flex;
2064
+ align-items: center;
2065
+ gap: 7px;
2066
+ width: 100%;
2067
+ margin-top: 3px;
2068
+ padding: 7px 4px;
2069
+ background: none;
2070
+ border: none;
2071
+ border-top: 1px solid #262a3f;
2072
+ color: #6b739b;
2073
+ font-family: inherit;
2074
+ font-size: 11.5px;
2075
+ font-weight: 600;
2076
+ letter-spacing: 0.03em;
2077
+ text-transform: uppercase;
2078
+ cursor: pointer;
2079
+ transition: color 0.13s ease;
2080
+ }
2081
+ .ticket-done-toggle:hover {
2082
+ color: #a9b1d6;
2083
+ }
2084
+ .ticket-done-caret {
2085
+ display: inline-block;
2086
+ font-size: 10px;
2087
+ transition: transform 0.13s ease;
2088
+ }
2089
+ .ticket-done-caret.open {
2090
+ transform: rotate(90deg);
2091
+ }
2092
+ .ticket-done-count {
2093
+ margin-left: auto;
2094
+ min-width: 18px;
2095
+ padding: 1px 6px;
2096
+ border-radius: 9px;
2097
+ background: #262a3f;
2098
+ color: #8088ac;
2099
+ font-size: 11px;
2100
+ font-weight: 600;
2101
+ text-align: center;
2102
+ }
2103
+
1912
2104
  .ticket-empty {
1913
2105
  display: flex;
1914
2106
  flex-direction: column;
@@ -1935,24 +2127,57 @@ html, body, #root {
1935
2127
  .ticket-card {
1936
2128
  display: flex;
1937
2129
  align-items: stretch;
1938
- gap: 10px;
1939
2130
  background: #15161f;
1940
2131
  border: 1px solid #262a3f;
1941
2132
  border-radius: 10px;
1942
- padding: 10px 11px 10px 0;
1943
- cursor: pointer;
1944
- text-align: left;
1945
- font-family: inherit;
1946
2133
  overflow: hidden;
1947
- transition: border-color 0.13s ease, background 0.13s ease, transform 0.06s ease;
2134
+ transition: border-color 0.13s ease, background 0.13s ease;
1948
2135
  }
1949
2136
  .ticket-card:hover {
1950
2137
  border-color: #3d425f;
1951
2138
  background: #181a26;
1952
2139
  }
1953
- .ticket-card:active {
2140
+ /* Clickable body of the card — opens the editor. */
2141
+ .ticket-card-open {
2142
+ flex: 1;
2143
+ min-width: 0;
2144
+ display: flex;
2145
+ align-items: stretch;
2146
+ gap: 10px;
2147
+ padding: 10px 11px 10px 0;
2148
+ background: transparent;
2149
+ border: none;
2150
+ color: inherit;
2151
+ cursor: pointer;
2152
+ text-align: left;
2153
+ font-family: inherit;
2154
+ transition: transform 0.06s ease;
2155
+ }
2156
+ .ticket-card-open:active {
1954
2157
  transform: scale(0.99);
1955
2158
  }
2159
+ /* Trailing button that dispatches the ticket to the coding terminal. */
2160
+ .ticket-card-send {
2161
+ flex-shrink: 0;
2162
+ width: 36px;
2163
+ align-self: stretch;
2164
+ display: flex;
2165
+ align-items: center;
2166
+ justify-content: center;
2167
+ background: transparent;
2168
+ border: none;
2169
+ border-left: 1px solid #262a3f;
2170
+ color: #565f89;
2171
+ cursor: pointer;
2172
+ transition: background 0.13s ease, color 0.13s ease, transform 0.06s ease;
2173
+ }
2174
+ .ticket-card-send:hover {
2175
+ background: #1b2030;
2176
+ color: #7aa2f7;
2177
+ }
2178
+ .ticket-card-send:active {
2179
+ transform: scale(0.9);
2180
+ }
1956
2181
  .ticket-card-bar {
1957
2182
  width: 3px;
1958
2183
  border-radius: 3px;