mirror of
https://github.com/l0ng-ai/openidea.git
synced 2026-11-06 16:08:05 +00:00
Sync with Deployed opens in its own window, one per project window. It lists local files next to the server's copies, with filters, content and binary comparison, and an embedded side-by-side diff whose local side can be edited. The selected file can be synchronized (Enter) without closing the window. The window is the `deployment` kind of the auxiliary windows that Settings and comparisons use. A cancelled close in it stops its project window from closing. The preview uses the vcs diff viewer through its `diff` editor kind. Also covers #811 (compare with the deployed versions). Co-authored-by: marianomd <274989+marianomd@users.noreply.github.com>
327 lines
5.7 KiB
CSS
327 lines
5.7 KiB
CSS
/* Remote Host tool window */
|
|
.view {
|
|
height: 100%;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
.toolbar {
|
|
height: 32px;
|
|
flex: none;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 2px;
|
|
padding: 0 6px;
|
|
}
|
|
.serverSelect {
|
|
min-width: 0;
|
|
max-width: 220px;
|
|
margin-right: 4px;
|
|
}
|
|
.rootPath {
|
|
flex: none;
|
|
padding: 0 10px 4px;
|
|
color: var(--fg-subtle);
|
|
font-family: var(--font-mono);
|
|
font-size: var(--fs-small);
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
.treeHost {
|
|
flex: 1;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
}
|
|
.treeHost > * {
|
|
flex: 1;
|
|
min-height: 0;
|
|
}
|
|
.viewError {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: flex-start;
|
|
gap: 8px;
|
|
padding: 10px;
|
|
}
|
|
.center {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 8px;
|
|
padding: 16px;
|
|
color: var(--fg-subtle);
|
|
}
|
|
.error {
|
|
color: var(--danger);
|
|
white-space: pre-wrap;
|
|
word-break: break-word;
|
|
}
|
|
.note {
|
|
color: var(--fg-subtle);
|
|
font-size: var(--fs-small);
|
|
line-height: 1.4;
|
|
word-break: break-word;
|
|
}
|
|
.mono {
|
|
font-family: var(--font-mono);
|
|
}
|
|
|
|
/* Notifications */
|
|
.report {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
}
|
|
.reportErrors {
|
|
margin: 0;
|
|
padding-left: 16px;
|
|
}
|
|
|
|
/* Sync dialog */
|
|
.nativeWindow {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
background: var(--bg-dialog, var(--bg-elev));
|
|
color: var(--fg);
|
|
}
|
|
.nativeBody {
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow: hidden;
|
|
}
|
|
.nativeFooter {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 12px;
|
|
padding: 10px 16px;
|
|
flex: none;
|
|
}
|
|
.syncWindow {
|
|
height: calc(100vh - 48px);
|
|
}
|
|
.syncWindow [data-dialog-body] {
|
|
overflow: hidden;
|
|
}
|
|
.sync {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
height: 100%;
|
|
min-height: 0;
|
|
padding: 8px 10px 0;
|
|
}
|
|
.comparisonToolbar {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
flex: none;
|
|
gap: 4px;
|
|
}
|
|
.separator {
|
|
height: 20px;
|
|
border-left: 1px solid var(--border);
|
|
margin: 0 5px;
|
|
}
|
|
.filterButton {
|
|
width: 28px;
|
|
height: 26px;
|
|
padding: 0;
|
|
border: 1px solid transparent;
|
|
border-radius: var(--radius-control, 4px);
|
|
color: var(--fg-muted);
|
|
background: transparent;
|
|
font-size: 19px;
|
|
cursor: pointer;
|
|
}
|
|
.filterButton[aria-pressed="true"] {
|
|
background: var(--bg-tree-hover);
|
|
border-color: var(--border);
|
|
color: var(--accent);
|
|
}
|
|
.filterButton:focus-visible {
|
|
outline: 2px solid var(--focus-ring);
|
|
}
|
|
.compareBy,
|
|
.fileFilter {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
white-space: nowrap;
|
|
}
|
|
.compareBy select {
|
|
height: 26px;
|
|
color: var(--fg);
|
|
background: var(--bg-input, var(--bg-island));
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-control, 4px);
|
|
font: inherit;
|
|
}
|
|
.fileFilter {
|
|
margin-left: auto;
|
|
width: clamp(180px, 30%, 480px);
|
|
}
|
|
.fileFilter > input {
|
|
width: 100%;
|
|
min-width: 0;
|
|
}
|
|
.comparisonRoots {
|
|
display: grid;
|
|
grid-template-columns: 1fr 1fr;
|
|
gap: 18px;
|
|
flex: none;
|
|
}
|
|
.comparisonRoots > span {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
min-width: 0;
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-control, 4px);
|
|
padding: 5px 8px;
|
|
}
|
|
.comparisonRoots > span > span {
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
.comparisonSplit {
|
|
flex: 1;
|
|
min-height: 0;
|
|
}
|
|
.fileList {
|
|
display: flex;
|
|
flex-direction: column;
|
|
height: 100%;
|
|
min-height: 0;
|
|
}
|
|
.syncTableHost {
|
|
flex: 1;
|
|
min-height: 0;
|
|
overflow: auto;
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-control, 4px);
|
|
}
|
|
.syncTable {
|
|
width: 100%;
|
|
min-width: 900px;
|
|
border-collapse: collapse;
|
|
table-layout: fixed;
|
|
}
|
|
.syncTable th {
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: 1;
|
|
text-align: left;
|
|
font-weight: normal;
|
|
color: var(--fg-muted);
|
|
background: var(--bg-island);
|
|
height: var(--h-list-row);
|
|
padding: 0 6px;
|
|
border-bottom: 1px solid var(--border);
|
|
white-space: nowrap;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
.syncTable td {
|
|
height: var(--h-list-row);
|
|
padding: 0 6px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
.syncTable tbody tr:hover {
|
|
background: var(--bg-tree-hover);
|
|
}
|
|
.syncTable tbody tr[aria-selected="true"] {
|
|
background: var(--bg-tree-selected, var(--accent-soft));
|
|
}
|
|
.fileName {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
}
|
|
.operationCol {
|
|
width: 108px;
|
|
}
|
|
.operationCell {
|
|
border-left: 1px solid var(--border);
|
|
border-right: 1px solid var(--border);
|
|
}
|
|
.sizeCol {
|
|
width: 80px;
|
|
}
|
|
.timeCol {
|
|
width: 148px;
|
|
}
|
|
.num {
|
|
text-align: right;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
.choice {
|
|
width: 100%;
|
|
height: 22px;
|
|
color: var(--fg);
|
|
background: var(--bg-input, var(--bg-island));
|
|
border: 1px solid var(--border);
|
|
border-radius: var(--radius-control, 4px);
|
|
font: inherit;
|
|
}
|
|
.skipped td:not(:first-child) {
|
|
color: var(--fg-subtle);
|
|
}
|
|
.emptyCell {
|
|
text-align: center;
|
|
color: var(--fg-subtle);
|
|
}
|
|
.status-localOnly,
|
|
.status-localNewer {
|
|
color: var(--vcs-added, var(--accent));
|
|
}
|
|
.status-remoteOnly,
|
|
.status-remoteNewer {
|
|
color: var(--vcs-modified, var(--accent));
|
|
}
|
|
.status-different {
|
|
color: var(--warning);
|
|
}
|
|
.status-same {
|
|
color: var(--fg-subtle);
|
|
}
|
|
.listHint {
|
|
flex: none;
|
|
color: var(--fg-subtle);
|
|
font-size: var(--fs-small);
|
|
padding: 3px 6px;
|
|
text-align: right;
|
|
}
|
|
.preview {
|
|
height: 100%;
|
|
min-height: 0;
|
|
display: flex;
|
|
flex-direction: column;
|
|
overflow: hidden;
|
|
border: 1px solid var(--border);
|
|
}
|
|
.previewMessage {
|
|
padding: 18px;
|
|
display: flex;
|
|
align-items: flex-start;
|
|
flex-direction: column;
|
|
gap: 12px;
|
|
}
|
|
|
|
/* SSH password prompt */
|
|
.secret {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 10px;
|
|
}
|