ModalLayer
A generic component for creating accessibile modal layer objects. The modal layer provides a focus locked and scrollable overlay layer for a dialog. The child of a ModalLayer must have the role "dialog" and specify either an aria-label
or aria-labelledby
attribute.
Basic usage
Any Paragon component or export may be added to the code example.
() => {const [isOpen, open, close] = useToggle(false);return (<><div className="d-flex"><Button variant="outline-primary" onClick={open}>Open modal layer</Button></div><ModalLayer isOpen={isOpen} onClose={close}><div role="dialog" aria-label="My dialog" className="mw-sm p-5 bg-white mx-auto my-5"><h1>I'm a dialog box</h1><p><Button variant="primary" className="mie-2">A button</Button><ModalCloseButton variant="outline-primary">Close modal</ModalCloseButton></p><p>I'm baby palo santo ugh celiac fashion axe. La croix lo-fi venmo whatever. Beard man braid migas single-origin coffee forage ramps. Tumeric messenger bag bicycle rights wayfarers, try-hard cronut blue bottle health goth. Sriracha tumblr cardigan, cloud bread succulents tumeric copper mug marfa semiotics woke next level organic roof party +1 try-hard.</p><p>Cold-pressed bushwick kale chips cliche, raclette pour-over brooklyn godard tbh. Bitters distillery neutra leggings jean shorts street art tbh. Lyft pinterest venmo, food truck small batch try-hard banh mi sriracha microdosing taiyaki trust fund literally stumptown prism. Pok pok lo-fi fam you probably haven't heard of them, salvia etsy YOLO 3 wolf moon fixie tousled raw denim retro farm-to-table hashtag. Godard waistcoat typewriter, thundercats cold-pressed pabst taxidermy. Farm-to-table taxidermy artisan everyday carry.</p><p>Edison bulb kale chips VHS pug pabst vaporware. Hammock ennui vape farm-to-table vegan literally disrupt microdosing ugh helvetica. Bespoke tbh lomo blue bottle. Next level try-hard readymade mixtape. Cliche cornhole microdosing whatever, vegan fingerstache paleo. Before they sold out YOLO enamel pin, celiac retro flexitarian roof party normcore air plant.</p><p>Drinking vinegar literally four dollar toast asymmetrical. Godard hella seitan, gluten-free selvage readymade viral tumblr quinoa roof party. Neutra flannel pop-up craft beer live-edge pour-over. Humblebrag pinterest kale chips bicycle rights etsy 8-bit. Hammock brunch gentrify, hot chicken actually chillwave cornhole gastropub. Bushwick bicycle rights typewriter man bun coloring book. Plaid bespoke you probably haven't heard of them adaptogen fam copper mug cold-pressed organic cred retro salvia chicharrones direct trade.</p><p>Fanny pack yuccie lumbersexual raclette biodiesel letterpress plaid hoodie cornhole ugh listicle. Distillery portland put a bird on it tacos whatever crucifix. Polaroid ethical jean shorts swag truffaut, intelligentsia kitsch meggings readymade tattooed chicharrones waistcoat artisan heirloom. Kickstarter post-ironic direct trade, celiac fixie activated charcoal lomo hella quinoa twee cardigan tousled. VHS woke seitan heirloom, prism roof party YOLO pinterest pork belly iPhone dreamcatcher tattooed succulents helvetica man braid. Locavore subway tile shaman ugh pinterest vaporware quinoa wolf crucifix shoreditch green juice pok pok post-ironic. Kinfolk plaid disrupt biodiesel leggings PBR&B glossier sartorial pop-up actually.</p></div></ModalLayer></>)}
Small modal variant
Any Paragon component or export may be added to the code example.
() => {const [isOpen, open, close] = useToggle(false);return (<><div className="d-flex"><Button variant="outline-primary" onClick={open}>Open small modal layer</Button></div><ModalLayer isOpen={isOpen} onClose={close}><div role="dialog" aria-label="My dialog" className="mw-sm p-5 bg-white mx-auto my-5"><h1>I'm a dialog box</h1><p><Button variant="primary" className="mie-2">A button</Button><ModalCloseButton variant="outline-primary">Close modal</ModalCloseButton></p><p>I'm baby palo santo ugh celiac fashion axe. La croix lo-fi venmo whatever. Beard man braid migas single-origin coffee forage ramps. Tumeric messenger bag bicycle rights wayfarers, try-hard cronut blue bottle health goth. Sriracha tumblr cardigan, cloud bread succulents tumeric copper mug marfa semiotics woke next level organic roof party +1 try-hard.</p></div></ModalLayer></>)}
Theme Variables (SCSS)#
$modal-inner-padding: 1.5rem !default;$modal-inner-padding-bottom: .7rem !default;$modal-footer-margin-between: .5rem !default;$modal-dialog-margin: 1.5rem !default;$modal-dialog-margin-y-sm-up: 1.75rem !default;$modal-title-line-height: $line-height-base !default;$modal-content-color: null !default;$modal-content-bg: $white !default;$modal-content-border-color: rgba($black, .2) !default;$modal-content-border-width: 0 !default;$modal-content-border-radius: $border-radius-lg !default;$modal-content-inner-border-radius: subtract($modal-content-border-radius, $modal-content-border-width) !default;$modal-content-box-shadow-xs: 0 .25rem .5rem rgba($black, .5) !default;$modal-content-box-shadow-sm-up: 0 10px 20px rgba($black, .15), 0 8px 20px rgba($black, .15) !default;$modal-backdrop-bg: $black !default;$modal-backdrop-opacity: .5 !default;$modal-header-border-color: $border-color !default;$modal-footer-border-color: $modal-header-border-color !default;$modal-header-border-width: $modal-content-border-width !default;$modal-footer-border-width: $modal-header-border-width !default;$modal-header-padding-y: 1rem !default;$modal-header-padding-x: 1.5rem !default;$modal-close-container-top: .625rem !default;$modal-header-padding: $modal-header-padding-y $modal-header-padding-x !default;$modal-footer-padding-y: 1rem !default;$modal-footer-padding-x: 1.5rem !default;$modal-footer-padding: $modal-footer-padding-y $modal-footer-padding-x !default;$modal-xl: 1140px !default;$modal-lg: 800px !default;$modal-md: 500px !default;$modal-sm: 400px !default;$modal-fade-transform: translate(0, -50px) !default;$modal-show-transform: none !default;$modal-transition: transform .3s ease-out !default;$modal-scale-transform: scale(1.02) !default;
Props API#
- children
node
RequiredSpecifies the contents of the modal
- onClose
func
RequiredA callback function for when the modal is dismissed
- isOpen
bool
RequiredIs the modal dialog open or closed
- isBlocking
bool
DefaultfalsePrevent clicking on the backdrop to close the modal
- zIndex
number
- as
elementType
DefaultButtonSpecifies the base element
- children
node
DefaultnullSpecifies the content of the button
- className
string
Specifies class name to append to the base element
- onClick
func
Specifies the callback function when the close button is clicked
Usage Insights#
ModalCloseButton
Project Name | Paragon Version | Instance Count | |
---|---|---|---|
frontend-app-account | 20.36.0 | 1 | |
frontend-app-learner-dashboard | 20.32.0 | 1 |
ModalLayer
Project Name | Paragon Version | Instance Count | |
---|---|---|---|
frontend-app-account | 20.36.0 | 1 |