Phase 1 group 5 (S15, S16, S18, S19, L22, L23, L20, L21, L1 delete-half). - S15: the four-way focus/altitude system. setFocus was never called anywhere, so only the 'composite' branch was reachable. Deleted SplitStage, ReadoutStrip, InputMini, AltitudeNav, CompactAxis, the UI Focus type/prop, the focus branches, stripPinned and the vacuous keyboard gates. MiniMeters kept; engine.feedback.setFocus (a different, live thing) untouched. - S16 + L1: the decorative stratum that rendered real-looking controls driving nothing — A/B machinery, the fake seed, seededGradient + weightsRevision, snapshots, master volume, bpm, and the learningRate/decay/tame/spreadLevel sliders with their Drawers rows. Each was confirmed self-referential first. NOTE a real behaviour change falls out of dropping `snapshots`: Undo outside an active explore-and-place session used to pop a UI-only snapshot that restored noiseCap/seed. It is now simply inactive unless a genuine core-backed scratchpad undo exists. Geometric-dislike mode never had a real undo primitive in the core, so only the fake path is gone. - S18: BackendAdvanced.tsx and its Drawers block. It self-described as a duplicate of the inline OutputsBackendConfig editor and BOTH rendered in the same expanded drawer. OutputsBackendConfig already covers every backend. - S19: pruned ConsoleCtx to the fields Dock/Drawers/OutputsBackendConfig actually read; deleted the Axes type + axes/setAxis and the preset/setPreset/offsetActive chain (permanently 'Sculpt'/false). KEPT ctx.modes and ctx.setModeId despite having no reader today — the Phase 5 instrument picker (§7.6, adopted) is built on exactly that plumbing. - L22: the 5 dead primitives (Panel, StatusLine, ControlAxis, CurvePlot, Sparkline) and their barrel exports, plus the now-dead .mf-axis-input CSS. - L23: OutputControl/toOutputControl, ModeIconComponent and the BACKENDS catalogue; Drawers now reads modeDesc.label/description from OUTPUT_MODES, the surviving single catalogue. - L20: the solo-mode selector's two unimplemented options no longer pretend to be selectable. - L21: FeedbackController vestiges — seed/undoDepth options, maxUndo, and six ControllerEngine members nothing called (the finding named three; the other three are used on the real EngineApi by debug/probe.ts, a different interface, so removing them from ControllerEngine is safe). Gates: run-all-tests.sh ALL GREEN (typecheck, 33 Playwright specs).
72 lines
2.1 KiB
CSS
72 lines
2.1 KiB
CSS
/**
|
|
* Manifold — primitive component styles.
|
|
*
|
|
* Range-input pseudo-elements (track + thumb) can't be expressed via React
|
|
* inline styles, so the Slider and ControlAxis primitives rely on these
|
|
* className hooks. The dynamic bits are passed as inline CSS custom properties:
|
|
* - Slider: `--mf-pct` (0..1 fill ratio for the track gradient)
|
|
* - ControlAxis: `--mf-axis-accent` (per-axis track/thumb accent colour)
|
|
*
|
|
* Import this once at the app root (it is re-exported as a side-effect from
|
|
* `primitives/index.ts`, so importing the barrel is enough), or add it to your
|
|
* global stylesheet manifest alongside the design tokens.
|
|
*/
|
|
|
|
/* ---- Slider (.mf-slider-input) ---- */
|
|
/* Base reset so the custom track/thumb styling applies even when a consumer
|
|
doesn't set these inline (e.g. OutputControlRow's held slider). The colored
|
|
fill tracks `--mf-pct` (0..1); it falls back to 0 if a consumer forgets it. */
|
|
.mf-slider-input {
|
|
-webkit-appearance: none;
|
|
appearance: none;
|
|
background: transparent;
|
|
}
|
|
.mf-slider-input::-webkit-slider-runnable-track {
|
|
height: 4px;
|
|
border-radius: 999px;
|
|
background: linear-gradient(
|
|
to right,
|
|
var(--accent) 0%,
|
|
var(--accent) calc(var(--mf-pct, 0) * 100%),
|
|
var(--bg-3) 0%
|
|
);
|
|
}
|
|
.mf-slider-input::-moz-range-track {
|
|
height: 4px;
|
|
border-radius: 999px;
|
|
background: var(--bg-3);
|
|
}
|
|
.mf-slider-input::-moz-range-progress {
|
|
height: 4px;
|
|
border-radius: 999px;
|
|
background: var(--accent);
|
|
}
|
|
.mf-slider-input::-webkit-slider-thumb {
|
|
-webkit-appearance: none;
|
|
appearance: none;
|
|
width: 16px;
|
|
height: 16px;
|
|
border-radius: 50%;
|
|
background: var(--accent);
|
|
margin-top: -6px;
|
|
box-shadow: 0 0 8px var(--glow-accent);
|
|
cursor: pointer;
|
|
transition: transform var(--dur-fast) var(--ease);
|
|
}
|
|
.mf-slider-input::-moz-range-thumb {
|
|
width: 16px;
|
|
height: 16px;
|
|
border-radius: 50%;
|
|
background: var(--accent);
|
|
border: none;
|
|
box-shadow: 0 0 8px var(--glow-accent);
|
|
}
|
|
.mf-slider-input:hover::-webkit-slider-thumb {
|
|
transform: scale(1.15);
|
|
}
|
|
.mf-slider-input:focus {
|
|
outline: none;
|
|
}
|
|
.mf-slider-input:focus::-webkit-slider-thumb {
|
|
box-shadow: 0 0 0 3px var(--glow-focus);
|
|
}
|