dsh-remote-vs 0.8.8 → 0.9.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.
- package/README.en.md +15 -2
- package/README.md +12 -1
- package/lib/client.js +1507 -59
- package/lib/types/client/CodeEditor.d.ts +27 -1
- package/lib/types/client/FloatingEditorWindow.d.ts +20 -0
- package/lib/types/client/FloatingPlaceholder.d.ts +9 -0
- package/lib/types/client/RemoteEditorView.d.ts +4 -0
- package/lib/types/client/TerminalView.d.ts +3 -0
- package/lib/types/client/XTerm.d.ts +6 -0
- package/lib/types/client/float-editor.d.ts +123 -0
- package/lib/types/client/float-tab-trigger.d.ts +24 -0
- package/lib/types/client/live-editor.d.ts +94 -0
- package/lib/types/client/remote-file-open-target.d.ts +0 -22
- package/lib/types/client/shell.d.ts +29 -0
- package/lib/types/client/store.d.ts +160 -6
- package/package.json +1 -1
- package/src/client/CodeEditor.tsx +95 -8
- package/src/client/EditorPane.tsx +45 -24
- package/src/client/FloatingEditorWindow.tsx +494 -0
- package/src/client/FloatingPlaceholder.tsx +22 -0
- package/src/client/RemoteEditorView.tsx +7 -2
- package/src/client/RemoteExplorer.tsx +61 -0
- package/src/client/RemoteRoot.tsx +16 -7
- package/src/client/SearchView.tsx +49 -2
- package/src/client/TerminalView.tsx +53 -2
- package/src/client/XTerm.tsx +15 -0
- package/src/client/float-editor.ts +271 -0
- package/src/client/float-tab-trigger.ts +51 -0
- package/src/client/i18n.ts +32 -0
- package/src/client/index.tsx +48 -1
- package/src/client/live-editor.ts +155 -0
- package/src/client/remote-file-open-target.ts +1 -5
- package/src/client/remote-file-open.ts +2 -2
- package/src/client/scm/ScmPanel.tsx +42 -1
- package/src/client/shell.ts +35 -0
- package/src/client/store.tsx +367 -16
- package/src/client/vsc/editor-theme.ts +6 -1
- package/src/client/vsc/vsc.css +235 -0
package/src/client/vsc/vsc.css
CHANGED
|
@@ -2065,6 +2065,241 @@ body:not([data-ds-dark-theme]) .rvs-undo-affordance:focus-visible {
|
|
|
2065
2065
|
font-size: 11px;
|
|
2066
2066
|
}
|
|
2067
2067
|
|
|
2068
|
+
/* ---------------------------------------------------- floating editor window */
|
|
2069
|
+
|
|
2070
|
+
/**
|
|
2071
|
+
* The floating editor lives in the host's frame-wide overlay layer
|
|
2072
|
+
* (`position: absolute; inset: 0; z-index: 20`, click-through, children opt
|
|
2073
|
+
* back into pointer events). It is placed with viewport coordinates, so it
|
|
2074
|
+
* floats above every column without joining any of their stacking contexts.
|
|
2075
|
+
*
|
|
2076
|
+
* `.rvs-root` carries the whole design-system token set and is row-flex by
|
|
2077
|
+
* default; this frame overrides the direction to a column and takes its size
|
|
2078
|
+
* from the inline rect the component keeps.
|
|
2079
|
+
*/
|
|
2080
|
+
.rvs-float-window {
|
|
2081
|
+
position: fixed;
|
|
2082
|
+
flex-direction: column;
|
|
2083
|
+
/* The rect maths (clamp/persist) is in border-box terms; without this the
|
|
2084
|
+
painted border would sit one pixel outside the computed rectangle. */
|
|
2085
|
+
box-sizing: border-box;
|
|
2086
|
+
min-width: 360px;
|
|
2087
|
+
min-height: 220px;
|
|
2088
|
+
overflow: hidden;
|
|
2089
|
+
border: 1px solid var(--rvs-border2);
|
|
2090
|
+
border-radius: 10px;
|
|
2091
|
+
background: var(--rvs-code-bg);
|
|
2092
|
+
color: var(--rvs-code-fg);
|
|
2093
|
+
box-shadow: 0 18px 60px rgba(0, 0, 0, .45), 0 2px 8px rgba(0, 0, 0, .28);
|
|
2094
|
+
z-index: 30;
|
|
2095
|
+
/* The overlay layer itself is click-through; the window opts back in even if
|
|
2096
|
+
the host wraps each overlay entry in its own element. */
|
|
2097
|
+
pointer-events: auto;
|
|
2098
|
+
}
|
|
2099
|
+
|
|
2100
|
+
/* Minimized: the frame IS the ball (see `.rvs-float-mini`); the body stays
|
|
2101
|
+
mounted but hidden, and it must not impose a minimum height. */
|
|
2102
|
+
.rvs-float-window[data-rvs-float="collapsed"] {
|
|
2103
|
+
min-height: 0;
|
|
2104
|
+
}
|
|
2105
|
+
|
|
2106
|
+
/**
|
|
2107
|
+
* Minimized window = floating ball.
|
|
2108
|
+
*
|
|
2109
|
+
* A full-width 34px bar was too long: it read as a broken window and covered a
|
|
2110
|
+
* whole strip. The ball is a small circle at the window's own corner, draggable
|
|
2111
|
+
* anywhere, restored by a click (or Enter/Space). It keeps the dirty dot, so
|
|
2112
|
+
* "the editor is out and has unsaved edits" is still one glance away.
|
|
2113
|
+
*/
|
|
2114
|
+
.rvs-float-window.rvs-float-mini {
|
|
2115
|
+
min-width: 0;
|
|
2116
|
+
min-height: 0;
|
|
2117
|
+
display: flex;
|
|
2118
|
+
align-items: center;
|
|
2119
|
+
justify-content: center;
|
|
2120
|
+
border-radius: 50%;
|
|
2121
|
+
cursor: move;
|
|
2122
|
+
touch-action: none;
|
|
2123
|
+
}
|
|
2124
|
+
|
|
2125
|
+
.rvs-float-ball {
|
|
2126
|
+
flex: 1;
|
|
2127
|
+
/* Stretch to the circle: the frame is a COLUMN flex box with centred items,
|
|
2128
|
+
so without this the hit area (and the absolutely positioned dot) would be
|
|
2129
|
+
sized by the 16px glyph instead of the 44px ball. */
|
|
2130
|
+
width: 100%;
|
|
2131
|
+
height: 100%;
|
|
2132
|
+
box-sizing: border-box;
|
|
2133
|
+
display: flex;
|
|
2134
|
+
align-items: center;
|
|
2135
|
+
justify-content: center;
|
|
2136
|
+
position: relative;
|
|
2137
|
+
border-radius: 50%;
|
|
2138
|
+
color: var(--rvs-brand);
|
|
2139
|
+
font-size: 16px;
|
|
2140
|
+
line-height: 1;
|
|
2141
|
+
cursor: move;
|
|
2142
|
+
outline: none;
|
|
2143
|
+
}
|
|
2144
|
+
|
|
2145
|
+
.rvs-float-ball:hover,
|
|
2146
|
+
.rvs-float-ball:focus-visible {
|
|
2147
|
+
background: var(--rvs-hover);
|
|
2148
|
+
}
|
|
2149
|
+
|
|
2150
|
+
.rvs-float-ball-glyph {
|
|
2151
|
+
pointer-events: none;
|
|
2152
|
+
}
|
|
2153
|
+
|
|
2154
|
+
/* Unsaved edits stay visible while minimized. */
|
|
2155
|
+
.rvs-float-ball-dot {
|
|
2156
|
+
position: absolute;
|
|
2157
|
+
top: 8px;
|
|
2158
|
+
right: 8px;
|
|
2159
|
+
width: 8px;
|
|
2160
|
+
height: 8px;
|
|
2161
|
+
border-radius: 50%;
|
|
2162
|
+
background: var(--rvs-git-m);
|
|
2163
|
+
box-shadow: 0 0 0 2px var(--rvs-code-bg);
|
|
2164
|
+
pointer-events: none;
|
|
2165
|
+
}
|
|
2166
|
+
|
|
2167
|
+
/* While a drag/resize gesture runs the pointer must not select editor text. */
|
|
2168
|
+
.rvs-float-window.dragging {
|
|
2169
|
+
user-select: none;
|
|
2170
|
+
}
|
|
2171
|
+
|
|
2172
|
+
.rvs-float-titlebar {
|
|
2173
|
+
flex: none;
|
|
2174
|
+
display: flex;
|
|
2175
|
+
align-items: center;
|
|
2176
|
+
gap: 7px;
|
|
2177
|
+
height: 34px;
|
|
2178
|
+
padding: 0 6px 0 10px;
|
|
2179
|
+
border-bottom: 1px solid var(--rvs-border);
|
|
2180
|
+
background: var(--rvs-layer3);
|
|
2181
|
+
cursor: move;
|
|
2182
|
+
user-select: none;
|
|
2183
|
+
touch-action: none;
|
|
2184
|
+
}
|
|
2185
|
+
|
|
2186
|
+
.rvs-float-glyph {
|
|
2187
|
+
color: var(--rvs-brand);
|
|
2188
|
+
font-size: 11px;
|
|
2189
|
+
}
|
|
2190
|
+
|
|
2191
|
+
.rvs-float-title {
|
|
2192
|
+
flex: none;
|
|
2193
|
+
font-size: 12px;
|
|
2194
|
+
font-weight: 600;
|
|
2195
|
+
color: var(--rvs-fg2);
|
|
2196
|
+
}
|
|
2197
|
+
|
|
2198
|
+
.rvs-float-file {
|
|
2199
|
+
min-width: 0;
|
|
2200
|
+
overflow: hidden;
|
|
2201
|
+
text-overflow: ellipsis;
|
|
2202
|
+
white-space: nowrap;
|
|
2203
|
+
font-size: 11.5px;
|
|
2204
|
+
color: var(--rvs-fg3);
|
|
2205
|
+
direction: rtl;
|
|
2206
|
+
unicode-bidi: plaintext;
|
|
2207
|
+
text-align: left;
|
|
2208
|
+
}
|
|
2209
|
+
|
|
2210
|
+
.rvs-float-spacer {
|
|
2211
|
+
flex: 1;
|
|
2212
|
+
}
|
|
2213
|
+
|
|
2214
|
+
.rvs-float-btn {
|
|
2215
|
+
flex: none;
|
|
2216
|
+
width: 22px;
|
|
2217
|
+
height: 22px;
|
|
2218
|
+
display: flex;
|
|
2219
|
+
align-items: center;
|
|
2220
|
+
justify-content: center;
|
|
2221
|
+
padding: 0;
|
|
2222
|
+
border: none;
|
|
2223
|
+
border-radius: 5px;
|
|
2224
|
+
background: transparent;
|
|
2225
|
+
color: var(--rvs-fg3);
|
|
2226
|
+
font: inherit;
|
|
2227
|
+
font-size: 12px;
|
|
2228
|
+
line-height: 1;
|
|
2229
|
+
cursor: pointer;
|
|
2230
|
+
}
|
|
2231
|
+
|
|
2232
|
+
.rvs-float-btn:hover {
|
|
2233
|
+
background: var(--rvs-hover);
|
|
2234
|
+
color: var(--rvs-fg);
|
|
2235
|
+
}
|
|
2236
|
+
|
|
2237
|
+
.rvs-float-close:hover {
|
|
2238
|
+
background: rgba(241, 76, 76, .18);
|
|
2239
|
+
color: var(--rvs-danger);
|
|
2240
|
+
}
|
|
2241
|
+
|
|
2242
|
+
.rvs-float-body {
|
|
2243
|
+
flex: 1 1 0;
|
|
2244
|
+
min-height: 0;
|
|
2245
|
+
min-width: 0;
|
|
2246
|
+
display: flex;
|
|
2247
|
+
overflow: hidden;
|
|
2248
|
+
background: var(--rvs-code-bg);
|
|
2249
|
+
}
|
|
2250
|
+
|
|
2251
|
+
/* Keep the height chain pinned: the editor pane grows inside this box. */
|
|
2252
|
+
.rvs-float-body > .rvs-pane {
|
|
2253
|
+
flex: 1 1 0;
|
|
2254
|
+
min-height: 0;
|
|
2255
|
+
min-width: 0;
|
|
2256
|
+
}
|
|
2257
|
+
|
|
2258
|
+
/* Eight grips, placed INSIDE the border box: the window clips overflow (rounded
|
|
2259
|
+
corners), so grips hanging outside would lose half their hit area. Corners
|
|
2260
|
+
are larger so they can actually be hit. */
|
|
2261
|
+
.rvs-float-resize {
|
|
2262
|
+
position: absolute;
|
|
2263
|
+
z-index: 3;
|
|
2264
|
+
}
|
|
2265
|
+
|
|
2266
|
+
.rvs-float-resize-n { top: 0; left: 10px; right: 10px; height: 6px; cursor: ns-resize; }
|
|
2267
|
+
.rvs-float-resize-s { bottom: 0; left: 10px; right: 10px; height: 6px; cursor: ns-resize; }
|
|
2268
|
+
.rvs-float-resize-e { top: 10px; bottom: 10px; right: 0; width: 6px; cursor: ew-resize; }
|
|
2269
|
+
.rvs-float-resize-w { top: 10px; bottom: 10px; left: 0; width: 6px; cursor: ew-resize; }
|
|
2270
|
+
.rvs-float-resize-ne { top: 0; right: 0; width: 12px; height: 12px; cursor: nesw-resize; }
|
|
2271
|
+
.rvs-float-resize-nw { top: 0; left: 0; width: 12px; height: 12px; cursor: nwse-resize; }
|
|
2272
|
+
.rvs-float-resize-se { bottom: 0; right: 0; width: 12px; height: 12px; cursor: nwse-resize; }
|
|
2273
|
+
.rvs-float-resize-sw { bottom: 0; left: 0; width: 12px; height: 12px; cursor: nesw-resize; }
|
|
2274
|
+
|
|
2275
|
+
/* Shown by whichever surface the single editor left behind (centre tab or the
|
|
2276
|
+
sidebar's editor panel). */
|
|
2277
|
+
.rvs-float-placeholder {
|
|
2278
|
+
flex: 1;
|
|
2279
|
+
min-height: 0;
|
|
2280
|
+
height: 100%;
|
|
2281
|
+
display: flex;
|
|
2282
|
+
flex-direction: column;
|
|
2283
|
+
align-items: center;
|
|
2284
|
+
justify-content: center;
|
|
2285
|
+
gap: 10px;
|
|
2286
|
+
padding: 24px;
|
|
2287
|
+
text-align: center;
|
|
2288
|
+
color: var(--rvs-fg3);
|
|
2289
|
+
font-size: 12.5px;
|
|
2290
|
+
}
|
|
2291
|
+
|
|
2292
|
+
.rvs-float-placeholder-title {
|
|
2293
|
+
color: var(--rvs-fg2);
|
|
2294
|
+
font-size: 13px;
|
|
2295
|
+
font-weight: 600;
|
|
2296
|
+
}
|
|
2297
|
+
|
|
2298
|
+
.rvs-float-placeholder-text {
|
|
2299
|
+
max-width: 360px;
|
|
2300
|
+
line-height: 1.6;
|
|
2301
|
+
}
|
|
2302
|
+
|
|
2068
2303
|
/* --------------------------------------------------------- context menu */
|
|
2069
2304
|
|
|
2070
2305
|
.rvs-portal {
|