/
1.1k
Sponsor

Modal

Focus-trapped overlay modal, close with Esc

Terminal

Installation

$ pnpm dlx shadcn@latest add @termcn/ink/modal

Usage

import { Modal } from "@/components/ui/modal";
<Modal open={true} onClose={() => close()} title="Welcome" width={50}>
  <Text>This is a modal dialog. Press Esc to close it.</Text>
</Modal>

API Reference

PropTypeDefault
openbooleanrequired
onClose() => voidrequired
titlestring-
widthnumber60
childrenReactNode-
borderStyle"single" | "double" | "round" | "bold" | "singleDouble" | "doubleSingle" | "classic""round"
borderColorstring-
paddingXnumber1
paddingYnumber0
titleBorderStyle"single" | "double" | "round" | "bold" | "singleDouble" | "doubleSingle" | "classic""single"
closeHintstring | false"Press Esc to close"

Notes

Accessibility

termcn exposes the following behavior through Ink's terminal accessibility APIs. This is not a browser ARIA or general WCAG-conformance claim.

  • Keyboard: Tab / Shift+Tab move through enabled controls inside the active scope; Enter / Space activate the focused control; Escape closes only the topmost active surface and restores focus.
  • Focus and composition: While open, the active focus scope contains traversal, gives input ownership to the topmost scope, and restores focus when it closes.
  • Screen reader: Ink labels and semantic state expose the component without relying on visual styling alone.