import React, { useState } from 'react' import { CButton, CCard, CCardBody, CCardHeader, CCol, CLink, CModal, CModalBody, CModalFooter, CModalHeader, CModalTitle, CPopover, CRow, CTooltip, } from '@coreui/react' import { DocsComponents, DocsExample } from 'src/components' const LiveDemo = () => { const [visible, setVisible] = useState(false) return ( <> setVisible(!visible)}> Launch demo modal setVisible(false)}> Modal title Woohoo, you're reading this text in a modal! setVisible(false)}> Close Save changes ) } const StaticBackdrop = () => { const [visible, setVisible] = useState(false) return ( <> setVisible(!visible)}> Launch static backdrop modal setVisible(false)}> Modal title I will not close if you click outside me. Don'teven try to press escape key. setVisible(false)}> Close Save changes ) } const ScrollingLongContent = () => { const [visible, setVisible] = useState(false) return ( <> setVisible(!visible)}> Launch demo modal setVisible(false)}> Modal title

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

setVisible(false)}> Close Save changes
) } const ScrollingLongContent2 = () => { const [visible, setVisible] = useState(false) return ( <> setVisible(!visible)}> Launch demo modal setVisible(false)}> Modal title

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

setVisible(false)}> Close Save changes
) } const VerticallyCentered = () => { const [visible, setVisible] = useState(false) return ( <> setVisible(!visible)}> Vertically centered modal setVisible(false)}> Modal title Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros. setVisible(false)}> Close Save changes ) } const VerticallyCentered2 = () => { const [visible, setVisible] = useState(false) return ( <> setVisible(!visible)}> Vertically centered scrollable modal setVisible(false)}> Modal title

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

Aenean lacinia bibendum nulla sed consectetur. Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Donec sed odio dui. Donec ullamcorper nulla non metus auctor fringilla.

Cras mattis consectetur purus sit amet fermentum. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Morbi leo risus, porta ac consectetur ac, vestibulum at eros.

Praesent commodo cursus magna, vel scelerisque nisl consectetur et. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

setVisible(false)}> Close Save changes
) } const TooltipsPopovers = () => { const [visible, setVisible] = useState(false) return ( <> setVisible(!visible)}> Launch demo modal setVisible(false)}> Modal title
Popover in a modal

This button {' '} triggers a popover on click.


Tooltips in a modal

This link {' '} and that link {' '} have tooltips on hover.

setVisible(false)}> Close Save changes
) } const OptionalSizes = () => { const [visibleXL, setVisibleXL] = useState(false) const [visibleLg, setVisibleLg] = useState(false) const [visibleSm, setVisibleSm] = useState(false) return ( <> setVisibleXL(!visibleXL)}> Extra large modal setVisibleLg(!visibleLg)}> Large modal setVisibleSm(!visibleSm)}> Small large modal setVisibleXL(false)}> Extra large modal ... setVisibleLg(false)}> Large modal ... setVisibleSm(false)}> Small modal ... ) } const FullscreenModal = () => { const [visible, setVisible] = useState(false) const [visibleSm, setVisibleSm] = useState(false) const [visibleMd, setVisibleMd] = useState(false) const [visibleLg, setVisibleLg] = useState(false) const [visibleXL, setVisibleXL] = useState(false) const [visibleXXL, setVisibleXXL] = useState(false) return ( <> setVisible(!visible)}> Full screen setVisibleSm(!visibleSm)}> Full screen below sm setVisibleMd(!visibleMd)}> Full screen below md setVisibleLg(!visibleLg)}> Full screen below lg setVisibleXL(!visibleXL)}> Full screen below xl setVisibleXXL(!visibleXXL)}> Full screen below xxl setVisible(false)}> Full screen ... setVisibleSm(false)}> Full screen below sm ... setVisibleMd(false)}> Full screen below md ... setVisibleLg(false)}> Full screen below lg ... setVisibleXL(false)}> Full screen below xl ... setVisibleXXL(false)}> Full screen below xxl ... ) } const Modals = () => { return ( React Modal

Below is a static modal example (meaning its position and{' '} display have been overridden). Included are the modal header, modal body (required for padding), and modal footer (optional). We ask that you include modal headers with dismiss actions whenever possible, or provide another explicit dismiss action.

Modal title Modal body text goes here. Close Save changes
React Modal Live demo

Toggle a working modal demo by clicking the button below. It will slide down and fade in from the top of the page.

{LiveDemo()}
React Modal Static backdrop

If you don’t provide an onDimsiss handler to the Modal component, your modal will behave as though the backdrop is static, meaning it will not close when clicking outside it. Click the button below to try it.

{StaticBackdrop()}
React Modal Scrolling long content

If you don’t provide an onDimsiss handler to the Modal component, your modal will behave as though the backdrop is static, meaning it will not close when clicking outside it. Click the button below to try it.

{ScrollingLongContent()}

You can also create a scrollable modal that allows scroll the modal body by adding{' '} scrollable prop.

{ScrollingLongContent2()}
React Modal Vertically centered

Add alignment="center" to <CModal> to vertically center the modal.

{VerticallyCentered()} {VerticallyCentered2()}
React Modal Tooltips and popovers

<CTooltips> and <CPopovers> can be placed within modals as needed. When modals are closed, any tooltips and popovers within are also automatically dismissed.

{TooltipsPopovers()}
React Modal Optional sizes

Modals have three optional sizes, available via modifier classes to be placed on a{' '} <CModal>. These sizes kick in at certain breakpoints to avoid horizontal scrollbars on narrower viewports.

Size Property size Modal max-width
Small 'sm' 300px
Default None 500px
Large 'lg' 800px
Extra large 'xl' 1140px
{OptionalSizes()}
React Modal Fullscreen Modal

Another override is the option to pop up a modal that covers the user viewport, available via property fullscrean.

Property fullscrean Availability
true Always
'sm' Below 576px
'md' Below 768px
'lg' Below 992px
'xl' Below 1200px
'xxl' Below 1400px
{FullscreenModal()}
) } export default Modals