Develop
Styles
Section titled “Styles”A modal is an overlay dialog that focuses the user’s attention on a specific task or content.
<div class="tng-modal"> <div class="tng-modal-panel"> <button class="tng-button is-tertiary is-ghost"> <span>Close</span> <i class="tng-icon icon-close" aria-hidden="true"></i> </button> <div class="tng-modal-content"> <div class="tng-slot is-primary"></div> </div> </div></div>Fullscreen
Section titled “Fullscreen”You can use the positioning utilities to create a fullscreen modal.
<div class="tng-modal | p-absolute at-maximum"> <div class="tng-modal-panel"> <button class="tng-button is-tertiary is-ghost"> <span>Close</span> <i class="tng-icon icon-close" aria-hidden="true"></i> </button> <div class="tng-modal-content"> <div class="tng-slot is-primary"></div> </div> </div></div>With Scroll
Section titled “With Scroll”When a modal contains potentially more content than fits in the viewport, you can use the overflow utility to make the content area scrollable.
<div class="tng-modal" style="max-block-size: 300px"> <div class="tng-modal-panel"> <button class="tng-button is-tertiary is-ghost"> Close <i class="tng-icon icon-close" aria-hidden="true"></i> </button> <div class="tng-overflow-scroll is-block"> <div class="tng-modal-content"> <p class="tng-text-body">…</p> <p class="tng-text-body">…</p> </div> </div> </div></div>With Image
Section titled “With Image”<div class="tng-modal"> <div class="tng-frame"> <div class="tng-slot"></div> </div> <div class="tng-modal-panel"> <button class="tng-button is-tertiary is-ghost"> Close <i class="tng-icon icon-close" aria-hidden="true"></i> </button> <div class="tng-modal-content"> <div class="tng-slot is-primary"></div> </div> </div></div>Recipes
Section titled “Recipes”Modal Dialog
Section titled “Modal Dialog”Import the Modal component from @tmedxp/react-components.
Properties
Section titled “Properties”ModalProperties extends <PropsWithChildren<Omit<ComponentProps<'dialog'>, 'open'>>>.
| Prop | Type | Description | Optional |
|---|---|---|---|
instance | ModalInstance | The modal instance used to open / close | ❌ |
position | ModalPosition | Position: 'ABSOLUTE' | 'FIXED' | 'RELATIVE' | ✅ |
placement | ModalPlacement | Placement: centered, top, bottom, etc. | ✅ |
labels | ModalLabels | Collection of labels used by the modal | ❌ |
frameContent | React.ReactElement | Content of tng-frame container if framed | ✅ |
Example without frame
Section titled “Example without frame”import { Modal, ModalPlacement, ModalPosition, useModalInstance, Button,} from '@tmedxp/react-components';
const modalInstance = useModalInstance();const ModalExample = () => { return ( <> <Button buttonType="button" buttonSize="md" buttonStyle="primary" onClick={modalInstance.open} text="Open modal overlay" /> <Modal instance={modalInstance} position={ModalPosition.ABSOLUTE} placement={ModalPlacement.CENTER} labels={{ Close: 'Close overlay' }} > <p class="tng-text-body"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p> </Modal> </> );};
export { ModalExample };Example with frame
Section titled “Example with frame”import { Modal, ModalPlacement, ModalPosition, useModalInstance, Button,} from '@tmedxp/react-components';
const modalInstance = useModalInstance();const frameContent = <div className="tng-slot"></div>;const ModalExample = () => { return ( <> <Button buttonType="button" buttonSize="md" buttonStyle="primary" onClick={modalInstance.open} text="Open framed modal overlay" /> <Modal instance={modalInstance} position={ModalPosition.ABSOLUTE} placement={ModalPlacement.CENTER} labels={{ Close: 'Close overlay' }} frameContent={frameContent} > <p class="tng-text-body"> Lorem ipsum dolor sit amet, consectetur adipiscing elit. </p> </Modal> </> );};
export { ModalExample };useDialog hook
Section titled “useDialog hook”Pairs with Modal (and with Backdrop’s Overlay) to manage open/close state.
Properties
Section titled “Properties”id— a string referencing the dialog.isModal—trueto show as a modal.onSubmit— invoked when the dialog is closing.
Returned API
Section titled “Returned API”reference— the dialog’s DOM reference.properties— the dialog’s properties.softClose()— close the dialog.openOverlay()— open the dialog.
Example
Section titled “Example”const dialog = useDialog({ id: 'overlay', isModal: true, onSubmit: () => alert('The dialog has been closed'),});
dialog.openOverlay();
dialog.softClose();