Replace display selection dropdowns with visual display picker lightbox

Remove the Displays tab and replace <select> dropdowns in stream and
template test modals with a lightbox overlay showing the spatial display
layout. Clicking a display selects it. Uses percentage-based positioning
so the layout always fits its container.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-11 12:36:21 +03:00
parent ebd6cc7d7d
commit c8ebb60f99
5 changed files with 232 additions and 195 deletions

View File

@@ -487,32 +487,6 @@ section {
}
/* Display Layout Visualization */
.display-layout-preview {
background: var(--card-bg);
border: 1px solid var(--border-color);
border-radius: 8px;
padding: 20px;
margin-bottom: 20px;
}
.display-layout-preview h3 {
margin: 0 0 15px 0;
font-size: 1.1rem;
color: var(--text-color);
}
.display-layout-canvas {
background: var(--bg-color);
border: 2px dashed var(--border-color);
border-radius: 8px;
padding: 30px;
min-height: 280px;
display: flex;
align-items: center;
justify-content: center;
overflow: hidden;
}
.layout-container {
position: relative;
background: transparent;
@@ -527,12 +501,10 @@ section {
align-items: center;
justify-content: center;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.2);
transition: transform 0.2s, box-shadow 0.2s;
cursor: help;
transition: box-shadow 0.2s, border-color 0.2s;
}
.layout-display:hover {
transform: scale(1.05);
box-shadow: 0 6px 12px rgba(0, 0, 0, 0.3);
z-index: 10;
}
@@ -597,39 +569,6 @@ section {
text-shadow: 0 0 4px rgba(0, 0, 0, 0.4);
}
.layout-legend {
display: flex;
gap: 20px;
justify-content: center;
margin-top: 15px;
padding-top: 15px;
border-top: 1px solid var(--border-color);
}
.legend-item {
display: flex;
align-items: center;
gap: 8px;
font-size: 0.9rem;
color: var(--text-secondary);
}
.legend-dot {
width: 16px;
height: 16px;
border-radius: 3px;
border: 2px solid;
}
.legend-dot.primary {
border-color: var(--primary-color);
background: rgba(76, 175, 80, 0.2);
}
.legend-dot.secondary {
border-color: var(--border-color);
background: rgba(128, 128, 128, 0.2);
}
/* Card brightness slider */
.brightness-control {
@@ -2327,6 +2266,58 @@ input:-webkit-autofill:focus {
font-weight: 600;
}
/* Display Picker Lightbox */
.display-picker-content {
max-width: 900px;
width: 90%;
text-align: center;
}
.display-picker-title {
color: white;
font-size: 1.3rem;
margin-bottom: 20px;
font-weight: 500;
}
.display-picker-canvas {
background: rgba(255, 255, 255, 0.05);
border: 2px dashed rgba(255, 255, 255, 0.15);
border-radius: 8px;
padding: 24px;
width: 100%;
box-sizing: border-box;
}
.layout-display-pickable {
cursor: pointer !important;
}
.layout-display-pickable:hover {
box-shadow: 0 0 20px rgba(76, 175, 80, 0.4);
border-color: var(--primary-color) !important;
}
/* Display picker button in forms */
.btn-display-picker {
width: 100%;
padding: 10px;
border: 1px solid var(--border-color);
border-radius: 4px;
background: var(--bg-color);
color: var(--text-color);
font-size: 1rem;
cursor: pointer;
text-align: left;
transition: border-color 0.2s, box-shadow 0.2s;
font-weight: 400;
}
.btn-display-picker:hover {
border-color: var(--primary-color);
box-shadow: 0 0 0 2px rgba(76, 175, 80, 0.15);
}
/* Responsive adjustments */
@media (max-width: 768px) {
.templates-grid {