diff --git a/app/web/static/dataset-picker.js b/app/web/static/dataset-picker.js index d78d645..b15d4e0 100644 --- a/app/web/static/dataset-picker.js +++ b/app/web/static/dataset-picker.js @@ -236,18 +236,18 @@ async function main() { continueBtn.title = selectedId ? '' : 'pick a dataset first'; } - const slider = document.getElementById('n-slider'); - const nValue = document.getElementById('n-value'); + const nInputs = document.querySelectorAll('input[name="n"]'); function applyN(n) { - nValue.textContent = n.toLocaleString(); hidden.numPoints.value = String(n); for (const s of scenes) { const cap = s.geometry.attributes.position.count; s.geometry.setDrawRange(0, Math.min(n, cap)); } } - slider.addEventListener('input', (e) => applyN(parseInt(e.target.value, 10))); - applyN(parseInt(slider.value, 10)); + nInputs.forEach(input => { + input.addEventListener('change', (e) => applyN(parseInt(e.target.value, 10))); + }); + applyN(parseInt(document.querySelector('input[name="n"]:checked').value, 10)); let jitterScale = 0; const jInputs = document.querySelectorAll('input[name="j"]'); diff --git a/app/web/static/style.css b/app/web/static/style.css index f717a93..85ef745 100644 --- a/app/web/static/style.css +++ b/app/web/static/style.css @@ -625,40 +625,41 @@ button.submit:disabled { background: var(--faint); border-color: var(--faint); c text-transform: uppercase; color: var(--mute); } -.picker-controls .ctl-value { - font-family: var(--mono); - font-size: 0.82rem; - color: var(--accent); - min-width: 3.5rem; - text-align: right; - font-variant-numeric: tabular-nums; -} -.picker-controls input[type="range"] { - width: 100%; - accent-color: var(--accent); - height: 4px; -} .picker-controls .segmented { grid-column: 2 / -1; - display: flex; - justify-content: space-between; + /* Shared 5-column track across every segmented row. 3-option rows drop + their options into columns 1/3/5 so first/middle/last align with the + 5-option row's first/middle/last. */ + display: grid; + grid-template-columns: repeat(5, 1fr); align-items: center; } +.picker-controls .segmented.count-3 > label:nth-child(1) { grid-column: 1; } +.picker-controls .segmented.count-3 > label:nth-child(2) { grid-column: 3; } +.picker-controls .segmented.count-3 > label:nth-child(3) { grid-column: 5; } .picker-controls .segmented label { font-family: var(--mono); font-size: 0.78rem; color: var(--mute); cursor: pointer; padding: 3px 2px 4px; - border-bottom: 1px solid transparent; - transition: color 120ms ease, border-color 120ms ease; + transition: color 120ms ease; user-select: none; font-variant-numeric: tabular-nums; position: relative; + text-align: center; +} +.picker-controls .segmented label > span { + display: inline-block; + padding: 0 2px 1px; + border-bottom: 1px solid transparent; + transition: border-color 120ms ease; } .picker-controls .segmented label:hover { color: var(--ink); } .picker-controls .segmented label:has(input:checked) { color: var(--accent); +} +.picker-controls .segmented label:has(input:checked) > span { border-bottom-color: var(--accent); } .picker-controls .segmented label:has(input:focus-visible) { diff --git a/app/web/templates/index.html b/app/web/templates/index.html index 5872252..81fe9bc 100644 --- a/app/web/templates/index.html +++ b/app/web/templates/index.html @@ -49,19 +49,24 @@

- - - 500 + n samples +
+ + + + + +
noise σ -
+
timesteps -
+