import React, { forwardRef } from "react"; import { ChevronDownIcon } from "@navikt/aksel-icons"; import { Button } from "../../button"; import { Collapsible } from "../../collapsible"; import { HStack } from "../../primitives/stack"; import { ProgressBar } from "../../progress-bar"; import { Stepper, StepperStepProps } from "../../stepper"; import { BodyShort } from "../../typography"; import { useI18n } from "../../utils/i18n/i18n.hooks"; import { ComponentTranslation } from "../../utils/i18n/i18n.types"; export interface FormProgressProps extends React.HTMLAttributes { /** * Total number of steps. */ totalSteps: number; /** * Current active step. * * Index starts at 1, not 0. */ activeStep: number; /** * Shows Stepper if `true`, hides if `false`. * Using this prop removes automatic control of open-state. */ open?: boolean; /** * Callback for current open-state */ onOpenChange?: (open: boolean) => void; /** * Should contain elements. */ children: React.ReactNode; /** * Callback for next `activeStep`. * * Index starts at 1, not 0. */ onStepChange?: (step: number) => void; /** * Makes Stepper non-interactive if false. * @default true */ interactiveSteps?: boolean; /** * i18n API for customizing texts and labels. */ translations?: ComponentTranslation<"FormProgress">; } export type FormProgressStepProps = StepperStepProps; interface FormProgressComponent extends React.ForwardRefExoticComponent< FormProgressProps & React.RefAttributes > { /** * To be used inside ``. */ Step: typeof Stepper.Step; } /** * Component for visualizing progression in a form with multiple steps. * * @see [📝 Documentation](https://aksel.nav.no/komponenter/core/formprogress) * @see 🏷️ {@link FormProgressProps} * * @example * * Children * Personal information * Summary * */ export const FormProgress = forwardRef( ( { totalSteps, activeStep, open, onOpenChange, children, onStepChange, interactiveSteps, translations, ...rest }: FormProgressProps, ref, ) => { const translate = useI18n("FormProgress", translations); return (
{translate("step", { activeStep, totalSteps })}
{children}
); }, ) as FormProgressComponent; FormProgress.Step = Stepper.Step; export const FormProgressStep = Stepper.Step; export default FormProgress;