// The page-body shell core's public pages sit in, as plain JS. // // Extracted from PublicLayout.jsx for the reason lib/adminNav.js was: the client // test runner has no DOM and cannot import a .jsx file at all // (client/test/moduleRegistry.test.js says the same about modules/shared.js), so // anything with a rule worth asserting has to live outside the component. // // The rule worth asserting here is the fallback. `shell` is part of the module // contract as of MODULE_API_VERSION 1.5.0 (MODULE_API.md §3.4), which means the // value can come from a module core has never seen, written against a version of // this list that is older or newer than the one running. An unknown width must // therefore still produce a wrapper: a module page at the wrong width looks like // the site, and a page with no wrapper does not — it renders full-bleed with the // footer riding up under it, which is the defect the prop exists to fix. const SHELLS = { narrow: 'shell-narrow', mid: 'shell-mid', wide: 'shell-wide' } export const SHELL_WIDTHS = Object.keys(SHELLS) // Returns the className for a page body, or null when no shell was asked for — // null is "render children bare", which is every core page written before 1.5.0 // and stays the default forever. export function shellClass(shell) { if (!shell) return null return `${SHELLS[shell] || SHELLS.narrow} page-body` }