import { A11yDialogConfig, A11yDialogProps } from 'react-a11y-dialog'; import { WithOptionalChildren } from '../../core/types.js'; export type ModalPlacement = "center" | "left" | "bottom" | "right"; export interface UseModalOptions extends Omit { id?: string; /** * @default "Lukk" */ closeButtonLabel?: string; /** * Sett til `alertdialog` om du ønsker å slå av muligheten til å lukke med ESC og klikk utenfor. * * @default "dialog" */ role?: "dialog" | "alertdialog"; /** * Påkrevd for universell utforming. Tittelen kan gjenbrukes som `children` i `` med en konstant. */ title: string; } export interface ModalConfig extends Omit { modal: A11yDialogConfig["dialog"]; closeButton: A11yDialogConfig["closeButton"] & { "aria-label": string; }; } export interface ModalProps extends WithOptionalChildren { id?: string; className?: string; component?: React.ElementType; style?: React.CSSProperties; /** * Overstyrer padding på modalen via en CSS-variabel. */ padding?: 16 | 24 | 40; } export type BaseModalProps = Omit; export type ModalContainerProps = ModalConfig["container"] & BaseModalProps & { /** * Plassering og animasjon styres av containeren, siden det er den som * håndterer viewport-layout og `aria-hidden`-tilstand. * * @default "center" */ placement?: ModalPlacement; /** * Slå på enkel slide-in-animasjon når modalen vises. * * @default false */ slideIn?: boolean; }; export type ModalOverlayProps = ModalConfig["overlay"] & BaseModalProps & { /** * Rendre uten bakgrunnsfarge, men med click target for å lukke modalen ved klikk utenfor. * * @default false */ transparent?: boolean; };