UNPKG

@patternfly/react-core

Version:

This library provides a set of common React components for use with the PatternFly reference implementation.

149 lines (80 loc) 4.93 kB
--- id: Modal section: components cssPrefix: pf-v6-c-modal-box propComponents: ['Modal', 'ModalBody', 'ModalHeader', 'ModalFooter'] ouia: true --- import { Fragment, useRef, useState } from 'react'; import WarningTriangleIcon from '@patternfly/react-icons/dist/esm/icons/warning-triangle-icon'; import CaretDownIcon from '@patternfly/react-icons/dist/esm/icons/caret-down-icon'; import BullhornIcon from '@patternfly/react-icons/dist/esm/icons/bullhorn-icon'; import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon'; import formStyles from '@patternfly/react-styles/css/components/Form/form'; ## Examples ### Basic modals Basic modals give users the option to either confirm or cancel an action. To flag an open modal, use the `isOpen` property. To execute a callback when a modal is closed, use the `onClose` property. The `<ModalBody>`, `<ModalHeader>`, and `<ModalFooter>` components are not required, but are typically used to display the main content of the modal, modal title, and any button actions, respectively. ```ts file="./ModalBasic.tsx" ``` ### Scrollable modals To enable keyboard-accessible scrolling of a modal’s content, pass `tabIndex={0}` to the `<ModalBody>`. ```ts file="ModalWithOverflowingContent.tsx" ``` ### With a static description To provide additional information about a modal, use the `description` property. Descriptions are static and do not scroll with other modal content. ```ts file="./ModalWithDescription.tsx" ``` ### Top aligned To override a modal's default center alignment, use the `position` property. In this example, `position` is set to "top", which moves the modal to the top of the screen. ```ts file="./ModalTopAligned.tsx" ``` ### Modal sizes To adjust the size of a modal, use the `variant` property. Modal variants include "small", "medium", "large", and "default". In the following example, you can display each modal size option. To launch a modal with a specific size, first select the respective radio button, followed by the "Show modal" button. ```ts file="./ModalSize.tsx" ``` ### Custom width To choose a specific width for a modal, use the `width` property. The following example has a `width` of "50%". ```ts file="./ModalCustomWidth.tsx" ``` ### Custom header To add a custom header to a modal, your custom content must be passed as a child of the `<ModalHeader>` component. Do not pass the `title` property to `<ModalHeader>` when using a custom header. ```ts file="./ModalCustomHeader.tsx" ``` ### No header or footer To exclusively present information in a modal, remove the header and/or footer. When a modal has no header or footer, make sure to add an `aria-label` explicitly stating this, so that those using assistive technologies can understand this context. ```ts file="./ModalNoHeaderFooter.tsx" ``` ### Title icon To add an icon before a modal’s title, use the `titleIconVariant` property, which can be set to a "success", "danger", "warning", or "info" variant. The following example uses a "warning" variant. ```ts file="./ModalTitleIcon.tsx" ``` ### Custom title icon To add a custom icon before a modal’s title, set `titleIconVariant` to an imported custom icon. The following example imports and uses a bullhorn icon. ```ts file="./ModalCustomTitleIcon.tsx" ``` ### With wizard To guide users through a series of steps in a modal, you can add a [wizard](/components/wizard) to a modal. To configure the `<Wizard>`, pass an array that contains a “name” and “component” value for each step into the `steps` property. ```ts file="./ModalWithWizard.tsx" ``` ### With dropdown To present a menu of actions or links to a user, you can add a [dropdown](/components/menus/dropdown) to a modal. To allow the dropdown to visually break out of the modal container, set the `menuAppendTo` property to “parent”. Handle the modal’s closing behavior by listening to the `onEscapePress` callback on the `<Modal>` component. This allows the "escape" key to collapse the dropdown without closing the entire modal. ```ts file="./ModalWithDropdown.tsx" ``` ### With help To help simplify and explain complex models, add a help [popover](/components/popover). Only place a help icon at the modal level if its information applies to all content in the modal. If the help popover is specific to a particular modal section, place the help icon beside that section instead. ```ts file="./ModalWithHelp.tsx" ``` ### With form To collect user input within a modal, you can add a [form](/components/forms/form). To enable form submission from a button in the modal's footer (outside of the `<Form>`), set the button's `form` property equal to the form's id. ```ts file="ModalWithForm.tsx" ``` ### Custom focus To customize which element inside the modal receives focus when initially opened, use the `elementToFocus` property`. ```ts file="./ModalCustomFocus.tsx" ```