import { DeviceToggle } from './DeviceToggle'; import { PageSettings } from './sections/PageSettings'; import { useNav } from './routes'; import { pageFromParam, usePages } from './usePages'; import { useEditorSlot } from './useEditorSlot'; /** * Where an editor opens — a column beside the preview rather than a drawer beneath it. * * It was rendered under the frame, which took the height from the thing being edited: choosing a * spacing shrank the page you were choosing it for, and on a laptop the preview lost a third of itself * to a row of two dropdowns. A panel keeps the page whole and puts the controls where a workspace puts * controls. * * It holds nothing of its own except the width. The panel that owns a selection builds the editor and * announces it — see useEditorSlot for why it carries the element rather than a description of one. * * ── The device toggle is here, above everything ── * * It was in a bar across the top of the detail panel, which put it beside Sync and Publish — three * things that act on the SITE next to one that decides how you are looking at it. It belongs with the * settings it scopes: a spacing is chosen per width, and the control saying which width should be the * first thing in the column those choices are made in. * * Always drawn, including when nothing is selected. It is not part of the editor — it decides what the * PREVIEW shows, so hiding it until a block is picked would mean selecting something to change the * width and then deselecting it. * * It reads `?device=` rather than a context, which is what lets it live in a panel that is a sibling of * the one holding the preview. See DeviceToggle. */ export const EditorPanel = () => { const [editor] = useEditorSlot(); /* The selected page's own settings, above everything. Read here rather than announced like the editor below it, because they are not the editor: they belong to the page whatever is selected inside it, and a block being picked must not replace them. Above the device toggle, because the toggle scopes what is under it to one width and none of these three have widths. */ const { section, item } = useNav(); const { pages } = usePages(); const page = section === 'pages' ? pageFromParam(pages, item) : null; return (
Pick a block in the page to edit it, or press Spacing on a band.