Skip to content
This repository was archived by the owner on Jul 28, 2026. It is now read-only.

Commit 0608428

Browse files
committed
style: replace docker image cards with custom select dropdown
1 parent 428a374 commit 0608428

2 files changed

Lines changed: 36 additions & 48 deletions

File tree

public/css/style.css

Lines changed: 0 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -2640,37 +2640,6 @@ tbody tr:hover {
26402640
}
26412641

26422642
/* Docker Image Cards */
2643-
.docker-grid {
2644-
display: flex;
2645-
flex-wrap: wrap;
2646-
gap: 10px;
2647-
}
2648-
2649-
.docker-card {
2650-
display: flex;
2651-
align-items: center;
2652-
gap: 8px;
2653-
background: var(--bg-secondary);
2654-
border: 2px solid var(--border);
2655-
border-radius: var(--radius-md);
2656-
padding: 10px 16px;
2657-
cursor: pointer;
2658-
transition: var(--transition);
2659-
font-size: 0.88rem;
2660-
font-weight: 500;
2661-
}
2662-
2663-
.docker-card:hover {
2664-
border-color: var(--accent-1);
2665-
background: var(--bg-tertiary);
2666-
}
2667-
2668-
.docker-card.selected {
2669-
border-color: var(--accent-1);
2670-
background: color-mix(in srgb, var(--accent-1) 15%, var(--bg-secondary));
2671-
box-shadow: 0 0 0 1px var(--accent-1);
2672-
}
2673-
26742643
/* Summary Card */
26752644
.summary-card {
26762645
background: var(--bg-secondary);

public/js/app.js

Lines changed: 36 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1583,20 +1583,23 @@ function renderEggStep() {
15831583
if (selEgg) {
15841584
const images = Object.entries(selEgg.dockerImages || {});
15851585
if (images.length > 1) {
1586+
const optionsHtml = images.map(([displayName, image]) => {
1587+
const shortName = displayName || image.split('/').pop().split(':').pop() || image;
1588+
return `<div class="custom-select-option" data-value="${escapeHtml(image)}">${escapeHtml(shortName)}</div>`;
1589+
}).join('');
1590+
const currentLabel = createState.selectedDockerImage
1591+
? (images.find(([, img]) => img === createState.selectedDockerImage)?.[0] || createState.selectedDockerImage.split('/').pop().split(':').pop())
1592+
: 'Select an image';
15861593
dockerSection = html`
15871594
<div class="wizard-subsection" style="margin-top:24px">
15881595
<div class="wizard-step-title" style="font-size:1rem">Docker Image</div>
15891596
<p class="wizard-step-desc">Choose a Docker image for this egg</p>
1590-
<div class="docker-grid">
1591-
${images.map(([displayName, image]) => {
1592-
const shortName = displayName || image.split('/').pop().split(':').pop() || image;
1593-
return html`
1594-
<div class="docker-card ${createState.selectedDockerImage === image ? 'selected' : ''}" data-docker="${image}">
1595-
<i data-lucide="container" style="width:24px;height:24px"></i>
1596-
<span>${escapeHtml(shortName)}</span>
1597-
</div>
1598-
`;
1599-
}).join('')}
1597+
<div class="custom-select" id="docker-select">
1598+
<div class="custom-select-trigger" tabindex="0">
1599+
<span class="custom-select-label">${escapeHtml(currentLabel)}</span>
1600+
<i data-lucide="chevron-down" class="custom-select-arrow" style="width:16px;height:16px"></i>
1601+
</div>
1602+
<div class="custom-select-dropdown">${optionsHtml}</div>
16001603
</div>
16011604
</div>
16021605
`;
@@ -1737,14 +1740,30 @@ function attachWizardListeners(step) {
17371740
});
17381741
});
17391742

1740-
const dockerCards = document.querySelectorAll('.docker-card');
1741-
dockerCards.forEach(c => {
1742-
c.addEventListener('click', () => {
1743-
dockerCards.forEach(c2 => c2.classList.remove('selected'));
1744-
c.classList.add('selected');
1745-
createState.selectedDockerImage = c.dataset.docker;
1743+
const dockerSelect = document.querySelector('#docker-select');
1744+
if (dockerSelect) {
1745+
const trigger = dockerSelect.querySelector('.custom-select-trigger');
1746+
const label = dockerSelect.querySelector('.custom-select-label');
1747+
1748+
trigger.addEventListener('click', (e) => {
1749+
e.stopPropagation();
1750+
document.querySelectorAll('.custom-select.open').forEach(s => s.classList.remove('open'));
1751+
dockerSelect.classList.add('open');
17461752
});
1747-
});
1753+
1754+
dockerSelect.querySelectorAll('.custom-select-option').forEach(opt => {
1755+
opt.addEventListener('click', (e) => {
1756+
e.stopPropagation();
1757+
createState.selectedDockerImage = opt.dataset.value;
1758+
label.textContent = opt.textContent;
1759+
dockerSelect.classList.remove('open');
1760+
});
1761+
});
1762+
1763+
document.addEventListener('click', () => {
1764+
dockerSelect.classList.remove('open');
1765+
});
1766+
}
17481767

17491768
if (nextBtn) {
17501769
nextBtn.addEventListener('click', () => {

0 commit comments

Comments
 (0)