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.
Files changed (38) hide show
  1. package/README.en.md +15 -2
  2. package/README.md +12 -1
  3. package/lib/client.js +1507 -59
  4. package/lib/types/client/CodeEditor.d.ts +27 -1
  5. package/lib/types/client/FloatingEditorWindow.d.ts +20 -0
  6. package/lib/types/client/FloatingPlaceholder.d.ts +9 -0
  7. package/lib/types/client/RemoteEditorView.d.ts +4 -0
  8. package/lib/types/client/TerminalView.d.ts +3 -0
  9. package/lib/types/client/XTerm.d.ts +6 -0
  10. package/lib/types/client/float-editor.d.ts +123 -0
  11. package/lib/types/client/float-tab-trigger.d.ts +24 -0
  12. package/lib/types/client/live-editor.d.ts +94 -0
  13. package/lib/types/client/remote-file-open-target.d.ts +0 -22
  14. package/lib/types/client/shell.d.ts +29 -0
  15. package/lib/types/client/store.d.ts +160 -6
  16. package/package.json +1 -1
  17. package/src/client/CodeEditor.tsx +95 -8
  18. package/src/client/EditorPane.tsx +45 -24
  19. package/src/client/FloatingEditorWindow.tsx +494 -0
  20. package/src/client/FloatingPlaceholder.tsx +22 -0
  21. package/src/client/RemoteEditorView.tsx +7 -2
  22. package/src/client/RemoteExplorer.tsx +61 -0
  23. package/src/client/RemoteRoot.tsx +16 -7
  24. package/src/client/SearchView.tsx +49 -2
  25. package/src/client/TerminalView.tsx +53 -2
  26. package/src/client/XTerm.tsx +15 -0
  27. package/src/client/float-editor.ts +271 -0
  28. package/src/client/float-tab-trigger.ts +51 -0
  29. package/src/client/i18n.ts +32 -0
  30. package/src/client/index.tsx +48 -1
  31. package/src/client/live-editor.ts +155 -0
  32. package/src/client/remote-file-open-target.ts +1 -5
  33. package/src/client/remote-file-open.ts +2 -2
  34. package/src/client/scm/ScmPanel.tsx +42 -1
  35. package/src/client/shell.ts +35 -0
  36. package/src/client/store.tsx +367 -16
  37. package/src/client/vsc/editor-theme.ts +6 -1
  38. package/src/client/vsc/vsc.css +235 -0
@@ -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 {