diff --git a/docker/frontend/src/App.tsx b/docker/frontend/src/App.tsx index 64b666c..51f8fc0 100644 --- a/docker/frontend/src/App.tsx +++ b/docker/frontend/src/App.tsx @@ -2369,8 +2369,8 @@ export function Workspace() { }; }; - // The two Color Chromes, side by side in LIGHT's own column: one row of two - // chips, each naming the strength it is on. They are a pair, not a strip — + // The two Color Chromes, side by side at the foot of the WB panel: one row of + // two chips, each naming the strength it is on. They are a pair, not a strip — // COLOR CHROME and CHROME BLUE are the same switch over two axes of the same // colour, so they are read against each other rather than scanned in turn, and // they wear the table layout the WB presets wear (see .chip-row.grid / @@ -2781,8 +2781,8 @@ export function Workspace() { // and glows amber once the graph is off the diagonal. It stands over the // TONE panel, whose knobs it is the shape of. The four features that // write rather than name — AUTO, FIX, GRADIENT MASK, MONOCHROME — are - // the TOOLS tab's now, and the two Color Chromes are the pair of chips - // under this row (see chromeChips). WB and FX are panels of this tab + // the TOOLS tab's now, and the two Color Chromes close the WB panel + // (see chromeChips). WB and FX are panels of this tab // now, so their rows live here: a chip that opened the same record the // panel already shows would be a second way to one knob. // @@ -3047,13 +3047,12 @@ export function Workspace() { })), ]; - // The studio sidebar's three slots (DevelopPanels): the picks that name a - // whole look rather than a number, so they stay strips of their own inside the - // panel that owns them — SIM with the profile, the WB presets with the two WB - // tracks, D.RANGE at the foot of the effects. The two Color Chromes are the one - // pair that does not live in a panel: they are LIGHT's own row (see - // chromeChips). Every one of them is the strip that already existed, so a pick - // made here is the pick made on the tab it came from. + // The studio sidebar's slots (DevelopPanels): the picks that name a whole look + // rather than a number, so they stay strips of their own inside the panel that + // owns them — SIM with the profile, the WB presets and then the two Color + // Chromes with the two WB tracks, D.RANGE in its own box at the foot of the + // effects. Every one of them is the strip that already existed, so a pick made + // here is the pick made on the tab it came from. const developSlots = { profile: ( @@ -3089,11 +3088,19 @@ export function Workspace() { }))} /> ), - // D.RANGE closes DETAIL & EFFECTS: it is a hold on the whole frame, so it - // stands at the foot of the effects rather than with the tone knobs it is - // read against. + // The two Color Chromes close WB: same switch, the other axis of the two + // tracks above it, so they are read under the pair they are read against — + // and on the tab whose colour they are. + wbFoot: , + // D.RANGE closes DETAIL & EFFECTS in a box of its own: it is a hold on the + // whole frame, so it stands at the foot of the effects rather than with the + // tone knobs it is read against, and the four stops are one setting read as + // a set — the box and its name are what say so. effects: ( - +
+ DYNAMIC RANGE + +
), }; @@ -3251,10 +3258,9 @@ export function Workspace() { ) : ( <> {/* LIGHT's column is the sidebar itself: the chip that is not - a knob, the pair of Color Chromes, then every knob of the tab - in one stack, all of them open at once. */} + a knob, then every knob of the tab in one stack, all of + them folded away until one is asked for. */} {tab === 'light' ? : null} - {tab === 'light' ? : null} {tab === 'light' ? ( ) => void; pro?: boolean; onPro?: () => void; - slots?: { profile?: ReactNode; wb?: ReactNode; effects?: ReactNode }; + slots?: { profile?: ReactNode; wb?: ReactNode; wbFoot?: ReactNode; effects?: ReactNode }; }) { const [open, setOpen] = useState>(() => { const saved = new Set((recall(OPEN_KEY) ?? '').split(',')); @@ -125,6 +129,7 @@ export function DevelopPanels({ {PANELS.map((panel) => { const isOpen = open[panel.slug]; const slot = panel.slot ? slots?.[panel.slot] : null; + const foot = panel.foot ? slots?.[panel.foot] : null; return (