import { ReactNode } from 'react'; /** * A panel that takes the settings column over to edit one thing. * * It covers everything below the tab rail and nothing above it. The column is * narrow, so a panel that shared it with the tab underneath would leave neither * enough room; but the rail is four words and a rule, and keeping it means the * author can always see where they are and leave in one click. Clicking a tab * closes the panel, which is why the rail has to stay clickable and not merely * visible. * * Two things make that work, and both live here rather than in the stylesheet. * The panel is positioned against the column, which is also the column's * scroller, so the scroller is pinned to the top and locked while the panel is * open. And where the rail ends is measured and published as `--tab-rail-end`, * because it is not a constant: it follows the rail's padding and font, and * moves again when the labels wrap in a narrow column. * * The older takeovers — the font browser, the template browser, the image * gallery — still cover the rail as well. Each ends in a choice rather than a * move between tabs, so there is nothing on the rail worth reaching while one * is open. All three open from inside this panel, of all places, because all * three are reached from the card's design, so the panel hands the whole column * back for as long as one is up; see `.editor-panel:has(...)` in the stylesheet. * * Esc closes it. Focus moves to the heading on open so a screen reader * announces what just took over; it is not returned on close, because what * opened the panel was a click on a canvas element that is still there. The * rail sits before the panel in the DOM, so shift-tabbing off the heading * reaches the tabs. */ export declare function EditorPanelShell({ title, onClose, children, }: { title: string; onClose: () => void; children: ReactNode; }): import("react").JSX.Element;