Utility
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
Modal
| Prop | Type | Default |
|---|---|---|
open | boolean | required |
onClose | () => void | required |
title | string | - |
width | number | 60 |
children | ReactNode | - |
borderStyle | "single" | "double" | "round" | "bold" | "singleDouble" | "doubleSingle" | "classic" | "round" |
borderColor | string | - |
paddingX | number | 1 |
paddingY | number | 0 |
titleBorderStyle | "single" | "double" | "round" | "bold" | "singleDouble" | "doubleSingle" | "classic" | "single" |
closeHint | string | 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+Tabmove through enabled controls inside the active scope;Enter/Spaceactivate the focused control;Escapecloses 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.