import React, { forwardRef } from "react"; import { type OverridableComponent, omit } from "../../utils-external"; import { cl } from "../../utils/helpers"; import { PageBlock } from "./parts/PageBlock"; export interface PageProps extends React.HTMLAttributes { /** * Overrides html-tag * @default "div" */ as?: "div" | "body"; /** * Allows better positioning of footer */ footer?: React.ReactNode; /** * Places footer below page-fold */ footerPosition?: "belowFold"; /** * Adds a standardised padding of 4rem between content and footer * @default "end" */ contentBlockPadding?: "end" | "none"; /** * @deprecated Deprecated in v8 and no longer has any effect. Use `` wrapped around ``. */ background?: string; } interface PageComponentType extends OverridableComponent< PageProps, HTMLElement > { Block: typeof PageBlock; } export const PageComponent: OverridableComponent = forwardRef( ( { as: Component = "div", className, footer, children, footerPosition, contentBlockPadding = "end", ...rest }, ref, ) => { const belowFold = footerPosition === "belowFold"; return (
{children}
{footer}
); }, ); /** * Page helps with establishing a top-level layout for your page * * @see [📝 Documentation](https://aksel.nav.no/komponenter/primitives/page) * @see 🏷️ {@link PageProps} * @see [🤖 OverridableComponent](https://aksel.nav.no/grunnleggende/kode/overridablecomponent) support * * @example * ```jsx * } * > * // Header * // Content * * ``` * @example * Footer placed below page-fold * ```jsx * } * footerPosition="belowFold" * > * // Header * // Content * * ``` */ const Page = PageComponent as PageComponentType; Page.Block = PageBlock; export default Page;