UNPKG

4.98 kBTypeScriptView Raw
1import {type LiteralUnion} from 'type-fest';
2import {type BoxStyle, type Boxes as CLIBoxes} from 'cli-boxes';
3
4/**
5All box styles.
6*/
7type Boxes = {
8 readonly none: BoxStyle;
9} & CLIBoxes;
10
11/**
12Characters used for custom border.
13
14@example
15```
16// attttb
17// l r
18// dbbbbc
19
20const border: CustomBorderStyle = {
21 topLeft: 'a',
22 topRight: 'b',
23 bottomRight: 'c',
24 bottomLeft: 'd',
25 left: 'l',
26 right: 'r',
27 top: 't',
28 bottom: 'b',
29};
30```
31*/
32export type CustomBorderStyle = {
33 /**
34 @deprecated Use `top` and `bottom` instead.
35 */
36 horizontal?: string;
37
38 /**
39 @deprecated Use `left` and `right` instead.
40 */
41 vertical?: string;
42} & BoxStyle;
43
44/**
45Spacing used for `padding` and `margin`.
46*/
47export type Spacing = {
48 readonly top?: number;
49 readonly right?: number;
50 readonly bottom?: number;
51 readonly left?: number;
52};
53
54export type Options = {
55 /**
56 Color of the box border.
57 */
58 readonly borderColor?: LiteralUnion<
59 | 'black'
60 | 'red'
61 | 'green'
62 | 'yellow'
63 | 'blue'
64 | 'magenta'
65 | 'cyan'
66 | 'white'
67 | 'gray'
68 | 'grey'
69 | 'blackBright'
70 | 'redBright'
71 | 'greenBright'
72 | 'yellowBright'
73 | 'blueBright'
74 | 'magentaBright'
75 | 'cyanBright'
76 | 'whiteBright',
77 string
78 >;
79
80 /**
81 Style of the box border.
82
83 @default 'single'
84 */
85 readonly borderStyle?: keyof Boxes | CustomBorderStyle;
86
87 /**
88 Reduce opacity of the border.
89
90 @default false
91 */
92 readonly dimBorder?: boolean;
93
94 /**
95 Space between the text and box border.
96
97 @default 0
98 */
99 readonly padding?: number | Spacing;
100
101 /**
102 Space around the box.
103
104 @default 0
105 */
106 readonly margin?: number | Spacing;
107
108 /**
109 Float the box on the available terminal screen space.
110
111 @default 'left'
112 */
113 readonly float?: 'left' | 'right' | 'center';
114
115 /**
116 Color of the background.
117 */
118 readonly backgroundColor?: LiteralUnion<
119 | 'black'
120 | 'red'
121 | 'green'
122 | 'yellow'
123 | 'blue'
124 | 'magenta'
125 | 'cyan'
126 | 'white'
127 | 'blackBright'
128 | 'redBright'
129 | 'greenBright'
130 | 'yellowBright'
131 | 'blueBright'
132 | 'magentaBright'
133 | 'cyanBright'
134 | 'whiteBright',
135 string
136 >;
137
138 /**
139 Align the text in the box based on the widest line.
140
141 @default 'left'
142 @deprecated Use `textAlignment` instead.
143 */
144 readonly align?: 'left' | 'right' | 'center';
145
146 /**
147 Align the text in the box based on the widest line.
148
149 @default 'left'
150 */
151 readonly textAlignment?: 'left' | 'right' | 'center';
152
153 /**
154 Display a title at the top of the box.
155 If needed, the box will horizontally expand to fit the title.
156
157 @example
158 ```
159 console.log(boxen('foo bar', {title: 'example'}));
160 // ┌ example ┐
161 // │foo bar │
162 // └─────────┘
163 ```
164 */
165 readonly title?: string;
166
167 /**
168 Align the title in the top bar.
169
170 @default 'left'
171
172 @example
173 ```
174 console.log(boxen('foo bar foo bar', {title: 'example', titleAlignment: 'center'}));
175 // ┌─── example ───┐
176 // │foo bar foo bar│
177 // └───────────────┘
178
179 console.log(boxen('foo bar foo bar', {title: 'example', titleAlignment: 'right'}));
180 // ┌────── example ┐
181 // │foo bar foo bar│
182 // └───────────────┘
183 ```
184 */
185 readonly titleAlignment?: 'left' | 'right' | 'center';
186
187 /**
188 Set a fixed width for the box.
189
190 __Note__: This disables terminal overflow handling and may cause the box to look broken if the user's terminal is not wide enough.
191
192 @example
193 ```
194 import boxen from 'boxen';
195
196 console.log(boxen('foo bar', {width: 15}));
197 // ┌─────────────┐
198 // │foo bar │
199 // └─────────────┘
200 ```
201 */
202 readonly width?: number;
203
204 /**
205 Set a fixed height for the box.
206
207 __Note__: This option will crop overflowing content.
208
209 @example
210 ```
211 import boxen from 'boxen';
212
213 console.log(boxen('foo bar', {height: 5}));
214 // ┌───────┐
215 // │foo bar│
216 // │ │
217 // │ │
218 // └───────┘
219 ```
220 */
221 readonly height?: number;
222
223 /**
224 __boolean__: Whether or not to fit all available space within the terminal.
225
226 __function__: Pass a callback function to control box dimensions.
227
228 @example
229 ```
230 import boxen from 'boxen';
231
232 console.log(boxen('foo bar', {
233 fullscreen: (width, height) => [width, height - 1],
234 }));
235 ```
236 */
237 readonly fullscreen?: boolean | ((width: number, height: number) => [width: number, height: number]);
238};
239
240/**
241Creates a box in the terminal.
242
243@param text - The text inside the box.
244@returns The box.
245
246@example
247```
248import boxen from 'boxen';
249
250console.log(boxen('unicorn', {padding: 1}));
251// ┌─────────────┐
252// │ │
253// │ unicorn
254// │ │
255// └─────────────┘
256
257console.log(boxen('unicorn', {padding: 1, margin: 1, borderStyle: 'double'}));
258//
259// ╔═════════════╗
260// ║ ║
261// ║ unicorn
262// ║ ║
263// ╚═════════════╝
264//
265```
266*/
267export default function boxen(text: string, options?: Options): string;
268
\No newline at end of file