@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.
- package/out/headless/index.mjs +29 -19
- package/out/headless/index.mjs.map +2 -2
- package/out/main/index.js +35 -19
- package/out/renderer/assets/{cssMode-R8fTFLae.js → cssMode-KhYyY-BM.js} +3 -3
- package/out/renderer/assets/{freemarker2-CyjWzWoP.js → freemarker2-BFsSgcWk.js} +1 -1
- package/out/renderer/assets/{handlebars-CrhCGIRM.js → handlebars-Be6_aBsm.js} +1 -1
- package/out/renderer/assets/{html-Cc3dPNZr.js → html-G8mvsyfc.js} +1 -1
- package/out/renderer/assets/{htmlMode-BWtG6ywk.js → htmlMode-Cfd5VCjw.js} +3 -3
- package/out/renderer/assets/{index-BL9njXIL.css → index-Bi_MjBqs.css} +233 -8
- package/out/renderer/assets/{index-kkG56aKv.js → index-MqgBcJzy.js} +392 -120
- package/out/renderer/assets/{javascript-C8T_SdLC.js → javascript-XyDWi6dC.js} +2 -2
- package/out/renderer/assets/{jsonMode-D1zR4VVU.js → jsonMode-DZT5gBVW.js} +3 -3
- package/out/renderer/assets/{liquid-COSMe9Uf.js → liquid-BuajCNJ9.js} +1 -1
- package/out/renderer/assets/{lspLanguageFeatures-CXGfrtzl.js → lspLanguageFeatures-BYkg2Yc-.js} +1 -1
- package/out/renderer/assets/{mdx-RfS44T-L.js → mdx-D0Qx2GMS.js} +1 -1
- package/out/renderer/assets/{python-DFSWKHUu.js → python-ChncNy6S.js} +1 -1
- package/out/renderer/assets/{razor-DtH2_uvo.js → razor-C6MUtfaS.js} +1 -1
- package/out/renderer/assets/{tsMode-BYIQ-S9Z.js → tsMode-C2aMdzdU.js} +1 -1
- package/out/renderer/assets/{typescript-HhQUr1Rb.js → typescript-CB71AtAT.js} +1 -1
- package/out/renderer/assets/{xml-KuhgdKfD.js → xml-tHS1Ec9w.js} +1 -1
- package/out/renderer/assets/{yaml-W_kzCFH7.js → yaml-CZcp5ueF.js} +1 -1
- package/out/renderer/index.html +2 -2
- package/package.json +1 -1
- package/src/main/index.ts +13 -1
- package/src/main/orchestrator.ts +8 -1
- package/src/main/ticketStore.ts +26 -20
- package/src/renderer/App.tsx +19 -3
- package/src/renderer/components/CtlsurfPanel.tsx +169 -35
- package/src/renderer/components/SpeakControls.tsx +8 -2
- package/src/renderer/components/TerminalPanel.tsx +141 -44
- package/src/renderer/components/TicketPanel.tsx +126 -29
- package/src/renderer/styles.css +233 -8
package/src/renderer/styles.css
CHANGED
|
@@ -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-
|
|
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
|
|
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
|
-
|
|
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;
|