@dnb/eufemia
Version:
DNB Eufemia Design System UI Library
117 lines (116 loc) • 3.89 kB
TypeScript
/**
* Web Modal Component
*
*/
import React from 'react';
import { ContextProps } from '../../shared/Context';
import ModalInner from './parts/ModalInner';
import { ModalProps } from './types';
import ModalHeader from './parts/ModalHeader';
import ModalHeaderBar from './parts/ModalHeaderBar';
import { ScrollViewAllProps } from '../../fragments/scroll-view/ScrollView';
import CloseButton from './parts/CloseButton';
import type { SpacingProps } from '../../shared/types';
import { ToCamelCasePartial } from '../../shared/helpers/withCamelCaseProps';
export declare const ANIMATION_DURATION = 300;
interface ModalState {
hide: boolean;
modalActive: boolean;
preventAutoFocus: boolean;
}
export type ModalPropTypes = ModalProps & SpacingProps & Omit<ScrollViewAllProps, 'children'>;
declare class Modal extends React.PureComponent<ModalPropTypes & ToCamelCasePartial<ModalPropTypes>, ModalState> {
static contextType: React.Context<ContextProps>;
context: ContextProps;
static Bar: typeof ModalHeaderBar;
static Header: typeof ModalHeader;
static Content: typeof ModalInner;
static getContent(props: any): any;
_id: string;
_triggerRef: React.RefObject<HTMLElement>;
_onUnmount: Array<() => void>;
_openTimeout: NodeJS.Timeout;
_closeTimeout: NodeJS.Timeout;
_sideEffectsTimeout: NodeJS.Timeout;
_tryToOpenTimeout: NodeJS.Timeout;
activeElement: Element;
isInTransition: boolean;
modalContentCloseRef: React.RefObject<(event: Event, options: {
triggeredBy?: string;
}) => void>;
state: {
hide: boolean;
modalActive: boolean;
preventAutoFocus: boolean;
animation_duration: number;
no_animation: boolean;
};
static defaultProps: {
id: any;
focus_selector: any;
labelled_by: any;
title: any;
disabled: any;
spacing: boolean;
open_delay: any;
content_id: any;
dialog_title: string;
close_title: string;
hide_close_button: boolean;
close_button_attributes: any;
prevent_close: boolean;
prevent_core_style: boolean;
animation_duration: number;
no_animation: boolean;
no_animation_on_mobile: boolean;
fullscreen: string;
min_width: any;
max_width: any;
align_content: string;
container_placement: any;
vertical_alignment: any;
open_state: any;
direct_dom_return: boolean;
root_id: string;
omit_trigger_button: boolean;
className: any;
children: any;
on_open: any;
on_close: any;
on_close_prevent: any;
open_modal: any;
close_modal: any;
trigger: any;
trigger_attributes: any;
overlay_class: any;
content_class: any;
modal_content: any;
header_content: any;
bar_content: any;
};
static getDerivedStateFromProps(props: any, state: any): any;
constructor(props: any);
componentDidMount(): void;
componentWillUnmount(): void;
componentDidUpdate(prevProps: any): void;
openBasedOnStateUpdate(): void;
toggleOpenClose: (event?: any, showModal?: any) => void;
handleSideEffects: () => void;
open: (e: Event) => void;
close: (event: Event, { ifIsLatest, triggeredBy }?: {
ifIsLatest: boolean;
triggeredBy?: string;
}) => void;
removeActiveState(): void;
/**
* Prevent scrolling on the background
* But checks if this instance was the last one or not
*
* @param {string} modalId Will remove the attribute if false is given
*/
setActiveState(modalId: string): void;
render(): import("react/jsx-runtime").JSX.Element;
}
export { CloseButton, Modal as OriginalComponent };
declare const _default: typeof Modal;
export default _default;