Skip to content

Develop

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>

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>

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>

Ea reprehenderit qui mollit. Magna quis veniam ea est deserunt labore eu ullamco ea ex cupidatat ullamco exercitation esse. Anim amet mollit qui mollit reprehenderit nisi commodo occaecat. Laboris esse ex amet consequat proident officia id velit cupidatat nostrud deserunt ipsum proident. Enim exercitation qui sunt.

Ea reprehenderit qui mollit. Magna quis veniam ea est deserunt labore eu ullamco ea ex cupidatat ullamco exercitation esse. Anim amet mollit qui mollit reprehenderit nisi commodo occaecat. Laboris esse ex amet consequat proident officia id velit cupidatat nostrud deserunt ipsum proident. Enim exercitation qui sunt.

<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>
source code

Import the Modal component from @tmedxp/react-components.

ModalProperties extends <PropsWithChildren<Omit<ComponentProps<'dialog'>, 'open'>>>.

PropTypeDescriptionOptional
instanceModalInstanceThe modal instance used to open / close
positionModalPositionPosition: 'ABSOLUTE' | 'FIXED' | 'RELATIVE'
placementModalPlacementPlacement: centered, top, bottom, etc.
labelsModalLabelsCollection of labels used by the modal
frameContentReact.ReactElementContent of tng-frame container if framed
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 };
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 };

Pairs with Modal (and with Backdrop’s Overlay) to manage open/close state.

  • id — a string referencing the dialog.
  • isModaltrue to show as a modal.
  • onSubmit — invoked when the dialog is closing.
  • reference — the dialog’s DOM reference.
  • properties — the dialog’s properties.
  • softClose() — close the dialog.
  • openOverlay() — open the dialog.
const dialog = useDialog({
id: 'overlay',
isModal: true,
onSubmit: () => alert('The dialog has been closed'),
});
dialog.openOverlay();
dialog.softClose();