mirror of
https://github.com/l0ng-ai/openidea.git
synced 2026-11-08 17:02:17 +00:00
A language server and the fallback servers after it in languages/*.toml now share one picker in the Language Servers details pane, for every language rather than Python only: Language server for <languages>: Automatic, each server (with its status) or None, with the Automatic order in the hint. Servers outside such a group keep their on/off checkbox. ToolInfo.alternatives lists each server's group in preference order; a regular server after a fallback starts no group with it. The Python-only picker at the top of the page is removed, and names drop a language suffix the label already states. Storage is unchanged (each server's enabled flag, global or project scope), so existing settings carry over.
269 lines
4.5 KiB
CSS
269 lines
4.5 KiB
CSS
.page {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
min-width: 0;
|
|
height: 100%;
|
|
min-height: 420px;
|
|
}
|
|
.intro {
|
|
margin: 0;
|
|
max-width: 680px;
|
|
color: var(--fg-secondary);
|
|
}
|
|
.body {
|
|
display: flex;
|
|
flex: 1;
|
|
min-height: 0;
|
|
border-radius: var(--radius-small);
|
|
box-shadow: inset 0 0 0 1px var(--border);
|
|
overflow: hidden;
|
|
}
|
|
|
|
/* list */
|
|
.side {
|
|
display: flex;
|
|
flex: none;
|
|
flex-direction: column;
|
|
width: 264px;
|
|
min-height: 0;
|
|
border-right: 1px solid var(--border);
|
|
}
|
|
.toolbar {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 4px;
|
|
margin: 8px 8px 6px;
|
|
}
|
|
.search {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
.toolbarSep {
|
|
flex: none;
|
|
width: 1px;
|
|
height: 16px;
|
|
margin: 0 2px;
|
|
background: var(--border);
|
|
}
|
|
.segmented {
|
|
display: flex;
|
|
height: var(--h-control-small);
|
|
margin: 0 8px 6px;
|
|
border-radius: var(--radius-small);
|
|
box-shadow: inset 0 0 0 1px var(--border-strong);
|
|
overflow: hidden;
|
|
}
|
|
.segment {
|
|
flex: 1;
|
|
padding: 0 6px;
|
|
border: 0;
|
|
background: transparent;
|
|
color: var(--fg-secondary);
|
|
font: inherit;
|
|
white-space: nowrap;
|
|
}
|
|
.segment:hover {
|
|
background: var(--bg-hover);
|
|
}
|
|
.segment:focus-visible {
|
|
outline: 2px solid var(--accent);
|
|
outline-offset: -2px;
|
|
}
|
|
.segmentOn {
|
|
background: var(--bg-selected);
|
|
color: var(--fg-strong);
|
|
}
|
|
.list {
|
|
flex: 1;
|
|
min-height: 0;
|
|
margin: 0;
|
|
padding: 0 0 4px;
|
|
list-style: none;
|
|
overflow: auto;
|
|
}
|
|
.groupHeader {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
height: var(--h-row);
|
|
padding: 0 12px;
|
|
color: var(--fg-muted);
|
|
font-size: var(--fs-small);
|
|
}
|
|
.groupCount {
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
.row:hover {
|
|
background: var(--bg-hover);
|
|
}
|
|
.rowSelected,
|
|
.rowSelected:hover {
|
|
background: var(--bg-selected);
|
|
}
|
|
.rowMain {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
width: 100%;
|
|
height: var(--h-row);
|
|
padding: 0 12px;
|
|
border: 0;
|
|
background: transparent;
|
|
color: var(--fg);
|
|
font: inherit;
|
|
text-align: left;
|
|
}
|
|
.rowMain:focus-visible {
|
|
outline: none;
|
|
background: var(--bg-hover);
|
|
}
|
|
.rowOff .rowName,
|
|
.rowOff .rowLanguages {
|
|
color: var(--fg-muted);
|
|
}
|
|
.rowName {
|
|
flex: none;
|
|
max-width: 60%;
|
|
overflow: hidden;
|
|
color: var(--fg-strong);
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
.rowLanguages {
|
|
flex: 1;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
color: var(--fg-muted);
|
|
font-size: var(--fs-small);
|
|
text-align: right;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
.kindTag {
|
|
flex: none;
|
|
padding: 0 5px;
|
|
border-radius: var(--radius-small);
|
|
background: var(--bg-control);
|
|
color: var(--fg-muted);
|
|
font-size: var(--fs-tiny);
|
|
line-height: 16px;
|
|
}
|
|
.listEmpty {
|
|
padding: 8px 12px;
|
|
color: var(--fg-muted);
|
|
}
|
|
|
|
/* details */
|
|
.details {
|
|
display: flex;
|
|
flex: 1;
|
|
flex-direction: column;
|
|
gap: 10px;
|
|
min-width: 0;
|
|
padding: 12px 16px 16px;
|
|
overflow: auto;
|
|
}
|
|
.detailsEmpty {
|
|
flex: 1;
|
|
}
|
|
.header {
|
|
display: flex;
|
|
align-items: flex-start;
|
|
gap: 12px;
|
|
}
|
|
.headerText {
|
|
flex: 1;
|
|
min-width: 0;
|
|
}
|
|
.title {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
color: var(--fg-strong);
|
|
font-size: var(--fs-input-large);
|
|
font-weight: 600;
|
|
}
|
|
.subtitle {
|
|
margin-top: 2px;
|
|
color: var(--fg-secondary);
|
|
}
|
|
.actions {
|
|
display: flex;
|
|
flex: none;
|
|
align-items: center;
|
|
gap: 4px;
|
|
}
|
|
.linkButton {
|
|
padding: 0;
|
|
border: 0;
|
|
background: none;
|
|
color: var(--link);
|
|
font: inherit;
|
|
font-size: var(--fs-small);
|
|
cursor: pointer;
|
|
}
|
|
.linkButton:hover {
|
|
color: var(--link-hover);
|
|
text-decoration: underline;
|
|
}
|
|
.linkButton:focus-visible {
|
|
outline: 2px solid var(--accent);
|
|
outline-offset: 2px;
|
|
}
|
|
.fieldHint {
|
|
margin-top: -4px;
|
|
color: var(--fg-muted);
|
|
font-size: var(--fs-small);
|
|
}
|
|
.error {
|
|
color: var(--danger);
|
|
overflow-wrap: anywhere;
|
|
}
|
|
.notice {
|
|
padding: 6px 8px;
|
|
border-radius: var(--radius-small);
|
|
background: var(--bg-control);
|
|
color: var(--fg-secondary);
|
|
overflow-wrap: anywhere;
|
|
-webkit-user-select: text;
|
|
user-select: text;
|
|
}
|
|
.job {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 4px;
|
|
}
|
|
.jobBar {
|
|
width: 100%;
|
|
}
|
|
.jobLine {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
.jobMessage {
|
|
flex: 1;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
color: var(--fg-muted);
|
|
font-family: var(--font-mono);
|
|
font-size: var(--fs-small);
|
|
}
|
|
.log {
|
|
margin: 4px 0 0;
|
|
padding: 6px 8px;
|
|
max-height: 240px;
|
|
overflow: auto;
|
|
background: var(--bg-app);
|
|
color: var(--fg-secondary);
|
|
border-radius: var(--radius-small);
|
|
font-family: var(--font-mono);
|
|
font-size: var(--fs-small);
|
|
white-space: pre-wrap;
|
|
-webkit-user-select: text;
|
|
user-select: text;
|
|
}
|