import React, { forwardRef } from "react"; import { ChevronDownIcon } from "@navikt/aksel-icons"; import type { AkselStatusColorRole } from "@navikt/ds-tokens/types"; import type { AkselColor } from "../types"; import { BodyLong } from "../typography"; import { cl, composeEventHandlers } from "../utils/helpers"; import { useControllableState } from "../utils/hooks"; export interface ReadMoreProps extends React.ButtonHTMLAttributes { /** * Content inside ReadMore. */ children: React.ReactNode; /** * ReadMore header content. */ header: React.ReactNode; /** * Opens component if `true`, closes if `false`. * Using this prop removes automatic control of open-state. */ open?: boolean; /** * Initially open. * @default false */ defaultOpen?: boolean; /** * Callback for current open-state. */ onOpenChange?: (open: boolean) => void; /** * Changes font size for content. * @default "medium" */ size?: "large" | "medium" | "small"; /** * Overrides inherited color. * * We recommend only using `accent`. We have disallowed status-colors. * @see 🏷️ {@link AkselColor} * @see [📝 Documentation](https://aksel.nav.no/grunnleggende/styling/farger-tokens) * @private */ "data-color"?: Exclude; /** * Changes variant of ReadMore. * * `moderate` is a more visually prominent variant. * * * `ghost` is more subtle, mainly for use in forms. * @default "ghost" */ variant?: "moderate" | "ghost"; } /** * ReadMore * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/read-more) * @see 🏷️ {@link ReadMoreProps} * * @example * * Med helsemessige begrensninger mener vi funksjonshemming, sykdom... * */ export const ReadMore = forwardRef( ( { className, header, children, open, defaultOpen = false, onClick, size = "medium", onOpenChange, variant = "ghost", ...rest }: ReadMoreProps, ref, ) => { const [_open, _setOpen] = useControllableState({ defaultValue: defaultOpen, value: open, onChange: onOpenChange, }); const typoSize = size === "small" ? "small" : "medium"; return (
{children}
); }, ); export default ReadMore;