- api/version_manager.py: installed version (local only), published releases on request (GitHub API, git tag fallback), switch to a published tag, return to the default branch (fast-forward only), undo the last switch; refuses to overwrite modified tracked files - header version chip and "Version & updates" panel; nothing goes online until "Check for updates" is clicked; restart via ComfyUI Manager - zh/en strings, styles, architecture notes Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01W411Z69FC3em9CzpeQEub5
303 lines
6.9 KiB
CSS
303 lines
6.9 KiB
CSS
/* =============================================================================
|
|
Version chip (header) and the "Version & updates" panel
|
|
============================================================================= */
|
|
|
|
#anomalous-header button.anomalous-version-chip {
|
|
max-width: 150px;
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
font: 600 11px/1 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
color: var(--amb-text-muted, #9ca3af) !important;
|
|
}
|
|
|
|
.anomalous-version-overlay {
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: 1000000;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 20px;
|
|
box-sizing: border-box;
|
|
background: rgba(0, 0, 0, 0.55);
|
|
backdrop-filter: blur(3px);
|
|
}
|
|
|
|
.anomalous-version-panel {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 12px;
|
|
width: min(620px, 100%);
|
|
max-height: min(760px, 100%);
|
|
padding: 18px 20px;
|
|
box-sizing: border-box;
|
|
overflow: hidden;
|
|
background: var(--amb-bg-panel, #1a1a1d);
|
|
color: var(--amb-text-main, #f3f4f6);
|
|
border: 1px solid var(--amb-border-hover, rgba(255, 255, 255, 0.16));
|
|
border-radius: var(--amb-radius-panel, 10px);
|
|
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.5);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.anomalous-version-panel.is-busy {
|
|
cursor: progress;
|
|
}
|
|
|
|
.anomalous-version-header {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
}
|
|
|
|
.anomalous-version-title {
|
|
font-size: 16px;
|
|
font-weight: 700;
|
|
}
|
|
|
|
.anomalous-version-close {
|
|
width: 28px;
|
|
height: 28px;
|
|
padding: 0;
|
|
background: transparent;
|
|
color: var(--amb-text-muted, #9ca3af);
|
|
border: 1px solid transparent;
|
|
border-radius: var(--amb-radius-control, 6px);
|
|
font-size: 18px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.anomalous-version-close:hover {
|
|
color: var(--amb-text-main, #f3f4f6);
|
|
border-color: var(--amb-border-hover, rgba(255, 255, 255, 0.16));
|
|
}
|
|
|
|
.anomalous-version-current {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
padding: 12px 14px;
|
|
background: var(--amb-bg-card, #202024);
|
|
border: 1px solid var(--amb-border, rgba(255, 255, 255, 0.08));
|
|
border-radius: var(--amb-radius-card, 8px);
|
|
}
|
|
|
|
.anomalous-version-current-line {
|
|
display: flex;
|
|
align-items: baseline;
|
|
gap: 10px;
|
|
}
|
|
|
|
.anomalous-version-current-line strong {
|
|
font-size: 15px;
|
|
}
|
|
|
|
.anomalous-version-current-label,
|
|
.anomalous-version-meta,
|
|
.anomalous-version-date,
|
|
.anomalous-version-release-name,
|
|
.anomalous-version-empty {
|
|
color: var(--amb-text-muted, #9ca3af);
|
|
}
|
|
|
|
.anomalous-version-meta {
|
|
font: 12px/1.4 ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
}
|
|
|
|
.anomalous-version-warning {
|
|
padding: 8px 10px;
|
|
color: #fcd34d;
|
|
background: rgba(245, 158, 11, 0.1);
|
|
border: 1px solid rgba(245, 158, 11, 0.35);
|
|
border-radius: var(--amb-radius-control, 6px);
|
|
line-height: 1.45;
|
|
}
|
|
|
|
.anomalous-version-actions,
|
|
.anomalous-version-release-footer {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
gap: 8px;
|
|
}
|
|
|
|
.anomalous-version-action {
|
|
height: 30px;
|
|
padding: 0 12px;
|
|
background: rgba(255, 255, 255, 0.04);
|
|
color: var(--amb-text-main, #f3f4f6);
|
|
border: 1px solid var(--amb-border-hover, rgba(255, 255, 255, 0.16));
|
|
border-radius: var(--amb-radius-control, 6px);
|
|
font-size: 12px;
|
|
cursor: pointer;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.anomalous-version-action:hover:not(:disabled) {
|
|
background: rgba(255, 255, 255, 0.1);
|
|
}
|
|
|
|
.anomalous-version-action.primary {
|
|
background: var(--amb-btn-primary-bg, #e5e7eb);
|
|
color: var(--amb-btn-primary-text, #111827);
|
|
border-color: transparent;
|
|
font-weight: 600;
|
|
}
|
|
|
|
.anomalous-version-action.primary:hover:not(:disabled) {
|
|
background: var(--amb-btn-primary-hover, #ffffff);
|
|
}
|
|
|
|
.anomalous-version-action:disabled {
|
|
opacity: 0.45;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
.anomalous-version-status {
|
|
min-height: 18px;
|
|
color: var(--amb-text-muted, #9ca3af);
|
|
line-height: 1.45;
|
|
white-space: pre-wrap;
|
|
}
|
|
|
|
.anomalous-version-status:empty {
|
|
display: none;
|
|
}
|
|
|
|
.anomalous-version-status.is-error {
|
|
color: #fca5a5;
|
|
}
|
|
|
|
.anomalous-version-prerelease {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
color: var(--amb-text-muted, #9ca3af);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.anomalous-version-prerelease[hidden] {
|
|
display: none;
|
|
}
|
|
|
|
.anomalous-version-list {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
min-height: 0;
|
|
overflow-y: auto;
|
|
padding-right: 2px;
|
|
}
|
|
|
|
.anomalous-version-empty {
|
|
padding: 22px 10px;
|
|
text-align: center;
|
|
line-height: 1.5;
|
|
}
|
|
|
|
.anomalous-version-release {
|
|
display: flex;
|
|
flex-direction: column;
|
|
gap: 8px;
|
|
padding: 10px 12px;
|
|
background: var(--amb-bg-card, #202024);
|
|
border: 1px solid var(--amb-border, rgba(255, 255, 255, 0.08));
|
|
border-radius: var(--amb-radius-card, 8px);
|
|
}
|
|
|
|
.anomalous-version-release.is-current {
|
|
border-color: var(--amb-accent-line, rgba(229, 231, 235, 0.35));
|
|
}
|
|
|
|
.anomalous-version-release-top {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
}
|
|
|
|
.anomalous-version-release-title {
|
|
display: flex;
|
|
align-items: baseline;
|
|
gap: 8px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.anomalous-version-release-name {
|
|
overflow: hidden;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.anomalous-version-badges {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 6px;
|
|
font-size: 11px;
|
|
}
|
|
|
|
.anomalous-version-badge {
|
|
padding: 2px 7px;
|
|
border-radius: 999px;
|
|
border: 1px solid var(--amb-border-hover, rgba(255, 255, 255, 0.16));
|
|
}
|
|
|
|
.anomalous-version-badge.is-current {
|
|
color: var(--amb-btn-primary-text, #111827);
|
|
background: var(--amb-btn-primary-bg, #e5e7eb);
|
|
border-color: transparent;
|
|
}
|
|
|
|
.anomalous-version-badge.is-latest {
|
|
color: #86efac;
|
|
border-color: rgba(34, 197, 94, 0.45);
|
|
}
|
|
|
|
.anomalous-version-badge.is-pre {
|
|
color: #fcd34d;
|
|
border-color: rgba(245, 158, 11, 0.45);
|
|
}
|
|
|
|
.anomalous-version-link {
|
|
padding: 0;
|
|
background: none;
|
|
border: none;
|
|
color: var(--amb-text-muted, #9ca3af);
|
|
font-size: 12px;
|
|
text-decoration: underline;
|
|
text-underline-offset: 2px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.anomalous-version-link:hover {
|
|
color: var(--amb-text-main, #f3f4f6);
|
|
}
|
|
|
|
.anomalous-version-release-footer .anomalous-version-action {
|
|
margin-left: auto;
|
|
}
|
|
|
|
.anomalous-version-notes {
|
|
max-height: 220px;
|
|
margin: 0;
|
|
padding: 8px 10px;
|
|
overflow: auto;
|
|
background: var(--amb-bg-input, #151517);
|
|
border-radius: var(--amb-radius-control, 6px);
|
|
font: 12px/1.5 system-ui, sans-serif;
|
|
white-space: pre-wrap;
|
|
word-break: break-word;
|
|
}
|
|
|
|
.anomalous-version-notes[hidden] {
|
|
display: none;
|
|
}
|
|
|
|
.anomalous-version-panel button:focus-visible,
|
|
.anomalous-version-panel a:focus-visible,
|
|
#anomalous-header button.anomalous-version-chip:focus-visible {
|
|
outline: 2px solid var(--amb-accent, #f59e0b);
|
|
outline-offset: 2px;
|
|
}
|