Files
AEmotionStudio-ComfyUI-Magn…/css/sidebar.css
T
google-labs-jules[bot]andAEmotionStudio 6bd509bdf7 feat(sidebar): add editable hex code input to color picker
- Replaced read-only hex code span with an editable text input in `createColorPicker`
- Implemented bidirectional sync between text input and color picker
- Added validation for hex codes and auto-correction on blur
- Ensured keydown propagation is stopped to prevent triggering global shortcuts
- Added aria-label for accessibility
- Updated unit tests to verify sync logic and event handling
- Added CSS styles for `magnify-color-preview` input to match UI design

Co-authored-by: AEmotionStudio <163354043+AEmotionStudio@users.noreply.github.com>
2026-02-09 16:09:24 +00:00

400 lines
8.0 KiB
CSS

/**
* ComfyUI MagnifyGlass - Sidebar CSS
*
* Styles for the sidebar settings and inspector panels.
*/
.magnify-sidebar {
display: flex;
flex-direction: column;
height: 100%;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
font-size: 13px;
color: var(--fg-color, #ddd);
background: transparent;
padding: 0;
}
.magnify-sidebar-header {
display: flex;
align-items: center;
gap: 8px;
padding: 12px 16px;
border-bottom: 1px solid var(--border-color, #333);
background: rgba(0, 0, 0, 0.2);
}
.magnify-sidebar-header svg {
width: 20px;
height: 20px;
fill: currentColor;
}
.magnify-sidebar-header h2 {
margin: 0;
font-size: 14px;
font-weight: 600;
}
.magnify-sidebar-content {
flex: 1;
overflow-y: auto;
padding: 8px 0;
}
/* Section styling */
.magnify-sidebar-section {
margin-bottom: 4px;
}
.magnify-sidebar-section-header {
display: flex;
align-items: center;
gap: 8px;
padding: 10px 16px;
cursor: pointer;
background: rgba(255, 255, 255, 0.03);
border-bottom: 1px solid var(--border-color, #333);
transition: background 0.15s;
}
.magnify-sidebar-section-header:hover {
background: rgba(255, 255, 255, 0.06);
}
.magnify-sidebar-section-header:focus-visible {
outline: 2px solid var(--p-primary-color, #3b82f6);
outline-offset: -2px;
background: rgba(255, 255, 255, 0.06);
}
.magnify-sidebar-section-header svg {
width: 12px;
height: 12px;
transition: transform 0.2s;
}
.magnify-sidebar-section-header.collapsed svg {
transform: rotate(-90deg);
}
.magnify-sidebar-section-header span {
font-weight: 500;
font-size: 12px;
text-transform: uppercase;
letter-spacing: 0.5px;
}
.magnify-sidebar-section-body {
padding: 12px 16px;
display: flex;
flex-direction: column;
gap: 12px;
}
.magnify-sidebar-section-body.collapsed {
display: none;
}
/* Control row */
.magnify-control-row {
display: flex;
flex-direction: column;
gap: 4px;
}
.magnify-control-row label {
font-size: 11px;
color: var(--descrip-text, #999);
font-weight: 500;
}
.magnify-control-row .control-value {
font-size: 11px;
color: var(--fg-color, #ddd);
margin-left: auto;
}
.magnify-control-label-row {
display: flex;
justify-content: space-between;
align-items: center;
}
/* Slider styling */
.magnify-slider {
width: 100%;
height: 6px;
border-radius: 3px;
background: rgba(255, 255, 255, 0.1);
appearance: none;
cursor: pointer;
}
.magnify-slider:focus-visible {
outline: 2px solid var(--p-primary-color, #3b82f6);
outline-offset: 2px;
}
.magnify-slider::-webkit-slider-thumb {
appearance: none;
width: 14px;
height: 14px;
border-radius: 50%;
background: var(--p-primary-color, #3b82f6);
cursor: pointer;
transition: transform 0.1s;
}
.magnify-slider::-webkit-slider-thumb:hover {
transform: scale(1.15);
}
.magnify-slider::-moz-range-thumb {
width: 14px;
height: 14px;
border-radius: 50%;
background: var(--p-primary-color, #3b82f6);
border: none;
cursor: pointer;
}
/* Toggle styling */
.magnify-toggle-row {
display: flex;
align-items: center;
justify-content: space-between;
padding: 6px 0;
}
.magnify-toggle-row label {
font-size: 12px;
color: var(--fg-color, #ddd);
}
.magnify-toggle {
position: relative;
width: 36px;
height: 20px;
background: rgba(255, 255, 255, 0.1);
border-radius: 10px;
cursor: pointer;
transition: background 0.2s;
}
.magnify-toggle:focus-visible {
outline: 2px solid var(--p-primary-color, #3b82f6);
outline-offset: 2px;
}
.magnify-toggle.active {
background: var(--p-primary-color, #3b82f6);
}
.magnify-toggle::after {
content: '';
position: absolute;
top: 2px;
left: 2px;
width: 16px;
height: 16px;
background: white;
border-radius: 50%;
transition: transform 0.2s;
}
.magnify-toggle.active::after {
transform: translateX(16px);
}
/* Select styling */
.magnify-select {
width: 100%;
padding: 6px 10px;
border: 1px solid var(--border-color, #444);
border-radius: 4px;
background: rgba(0, 0, 0, 0.3);
color: var(--fg-color, #ddd);
font-size: 12px;
cursor: pointer;
appearance: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%23999' d='M6 8L2 4h8z'/%3E%3C/svg%3E");
background-repeat: no-repeat;
background-position: right 8px center;
}
.magnify-select:focus {
outline: none;
border-color: var(--p-primary-color, #3b82f6);
}
.magnify-select:focus-visible {
outline: 2px solid var(--p-primary-color, #3b82f6);
border-color: var(--p-primary-color, #3b82f6);
}
/* Inspector styles */
.magnify-inspector-section {
padding: 12px 16px;
}
.magnify-inspector-group {
margin-bottom: 16px;
}
.magnify-inspector-group:last-child {
margin-bottom: 0;
}
.magnify-inspector-group-title {
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.5px;
color: var(--descrip-text, #888);
margin-bottom: 8px;
font-weight: 600;
}
.magnify-inspector-row {
display: flex;
justify-content: space-between;
padding: 4px 0;
border-bottom: 1px solid rgba(255, 255, 255, 0.05);
}
.magnify-inspector-row:last-child {
border-bottom: none;
}
.magnify-inspector-label {
color: var(--descrip-text, #999);
font-size: 12px;
}
.magnify-inspector-value {
color: var(--fg-color, #ddd);
font-size: 12px;
font-family: monospace;
text-align: right;
max-width: 60%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.magnify-inspector-empty {
color: var(--descrip-text, #666);
font-style: italic;
font-size: 12px;
text-align: center;
padding: 20px 0;
}
/* Node badge */
.magnify-node-badge {
display: inline-block;
padding: 2px 8px;
background: var(--p-primary-color, #3b82f6);
border-radius: 4px;
font-size: 11px;
font-weight: 500;
margin-bottom: 8px;
}
/* Button styling */
.magnify-btn {
display: flex;
align-items: center;
justify-content: center;
gap: 6px;
padding: 8px 12px;
border: none;
border-radius: 4px;
background: var(--p-primary-color, #3b82f6);
color: white;
font-size: 12px;
font-weight: 500;
cursor: pointer;
transition: background 0.15s, transform 0.1s;
}
.magnify-btn:hover {
background: var(--p-primary-hover-color, #2563eb);
}
.magnify-btn:active {
transform: scale(0.98);
}
.magnify-btn:focus-visible {
outline: 2px solid white;
outline-offset: -2px;
box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.5);
}
.magnify-btn-secondary {
background: rgba(255, 255, 255, 0.1);
}
.magnify-btn-secondary:hover {
background: rgba(255, 255, 255, 0.15);
}
/* Color picker styling */
.magnify-color-row {
flex-direction: row;
align-items: center;
justify-content: space-between;
}
.magnify-color-wrapper {
display: flex;
align-items: center;
gap: 8px;
}
.magnify-color-input {
width: 28px;
height: 28px;
padding: 0;
border: 1px solid var(--border-color, #444);
border-radius: 4px;
cursor: pointer;
background: transparent;
}
.magnify-color-input:focus-visible {
outline: 2px solid var(--p-primary-color, #3b82f6);
outline-offset: 2px;
}
.magnify-color-input::-webkit-color-swatch-wrapper {
padding: 2px;
}
.magnify-color-input::-webkit-color-swatch {
border-radius: 2px;
border: none;
}
.magnify-color-preview {
font-size: 11px;
font-family: monospace;
color: var(--descrip-text, #999);
background: transparent;
border: 1px solid transparent;
border-radius: 4px;
padding: 2px 4px;
width: 60px;
transition: all 0.2s;
text-align: center;
}
.magnify-color-preview:hover,
.magnify-color-preview:focus {
background: rgba(0, 0, 0, 0.2);
border-color: var(--border-color, #444);
color: var(--fg-color, #ddd);
outline: none;
}