or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

buttons.mdcontent.mdforms.mdindex.mdinteractive.mdlayout.mdnavigation.mdoverlays.mdutilities.md

overlays.mddocs/

0

# Overlay Components

1

2

Modal dialogs, tooltips, popovers and off-canvas components for layered interfaces.

3

4

## Capabilities

5

6

### Modal

7

8

Modal dialog component for displaying content in a layer above the page.

9

10

```typescript { .api }

11

/**

12

* Modal component for dialog overlays

13

* @param show - Show/hide state

14

* @param onHide - Hide handler

15

* @param size - Modal size

16

* @param fullscreen - Fullscreen mode

17

* @param centered - Center vertically

18

* @param backdrop - Backdrop behavior

19

* @param keyboard - Keyboard close support

20

*/

21

function Modal(props: ModalProps): JSX.Element;

22

23

interface ModalProps extends React.HTMLAttributes<HTMLDivElement> {

24

/** Show/hide state */

25

show?: boolean;

26

/** Hide handler */

27

onHide?: () => void;

28

/** Modal size */

29

size?: "sm" | "lg" | "xl";

30

/** Fullscreen mode */

31

fullscreen?: boolean | "sm-down" | "md-down" | "lg-down" | "xl-down" | "xxl-down";

32

/** Center vertically */

33

centered?: boolean;

34

/** Backdrop behavior */

35

backdrop?: boolean | "static";

36

/** Keyboard close support */

37

keyboard?: boolean;

38

/** Scroll behavior */

39

scrollable?: boolean;

40

/** Animation */

41

animation?: boolean;

42

/** Auto focus */

43

autoFocus?: boolean;

44

/** Enforce focus */

45

enforceFocus?: boolean;

46

/** Restore focus */

47

restoreFocus?: boolean;

48

/** Show handler */

49

onShow?: () => void;

50

/** Enter handler */

51

onEnter?: () => void;

52

/** Entering handler */

53

onEntering?: () => void;

54

/** Entered handler */

55

onEntered?: () => void;

56

/** Exit handler */

57

onExit?: () => void;

58

/** Exiting handler */

59

onExiting?: () => void;

60

/** Exited handler */

61

onExited?: () => void;

62

/** Bootstrap CSS class prefix */

63

bsPrefix?: string;

64

}

65

```

66

67

### ModalHeader

68

69

Header section of modal with optional close button.

70

71

```typescript { .api }

72

/**

73

* ModalHeader component for modal headers

74

* @param closeButton - Show close button

75

* @param onHide - Close handler

76

*/

77

function ModalHeader(props: ModalHeaderProps): JSX.Element;

78

79

interface ModalHeaderProps extends React.HTMLAttributes<HTMLDivElement> {

80

/** Show close button */

81

closeButton?: boolean;

82

/** Close handler */

83

onHide?: () => void;

84

/** Bootstrap CSS class prefix */

85

bsPrefix?: string;

86

}

87

```

88

89

### ModalBody

90

91

Body section of modal for main content.

92

93

```typescript { .api }

94

/**

95

* ModalBody component for modal body content

96

*/

97

function ModalBody(props: ModalBodyProps): JSX.Element;

98

99

interface ModalBodyProps extends React.HTMLAttributes<HTMLDivElement> {

100

/** Bootstrap CSS class prefix */

101

bsPrefix?: string;

102

}

103

```

104

105

### ModalFooter

106

107

Footer section of modal for actions.

108

109

```typescript { .api }

110

/**

111

* ModalFooter component for modal footers

112

*/

113

function ModalFooter(props: ModalFooterProps): JSX.Element;

114

115

interface ModalFooterProps extends React.HTMLAttributes<HTMLDivElement> {

116

/** Bootstrap CSS class prefix */

117

bsPrefix?: string;

118

}

119

```

120

121

### ModalTitle

122

123

Title component for modal headers.

124

125

```typescript { .api }

126

/**

127

* ModalTitle component for modal titles

128

*/

129

function ModalTitle(props: ModalTitleProps): JSX.Element;

130

131

interface ModalTitleProps extends React.HTMLAttributes<HTMLElement> {

132

/** Component used for the root node */

133

as?: React.ElementType;

134

/** Bootstrap CSS class prefix */

135

bsPrefix?: string;

136

}

137

```

138

139

**Modal Usage Examples:**

140

141

```typescript

142

import { Modal, Button } from "react-bootstrap";

143

144

function ModalExample() {

145

const [show, setShow] = useState(false);

146

147

const handleClose = () => setShow(false);

148

const handleShow = () => setShow(true);

149

150

return (

151

<>

152

<Button variant="primary" onClick={handleShow}>

153

Launch demo modal

154

</Button>

155

156

<Modal show={show} onHide={handleClose}>

157

<Modal.Header closeButton>

158

<Modal.Title>Modal heading</Modal.Title>

159

</Modal.Header>

160

<Modal.Body>

161

Woohoo, you're reading this text in a modal!

162

</Modal.Body>

163

<Modal.Footer>

164

<Button variant="secondary" onClick={handleClose}>

165

Close

166

</Button>

167

<Button variant="primary" onClick={handleClose}>

168

Save Changes

169

</Button>

170

</Modal.Footer>

171

</Modal>

172

</>

173

);

174

}

175

176

// Centered modal

177

<Modal show={show} onHide={handleClose} centered>

178

<Modal.Header closeButton>

179

<Modal.Title>Centered Modal</Modal.Title>

180

</Modal.Header>

181

<Modal.Body>This modal is vertically centered.</Modal.Body>

182

</Modal>

183

184

// Large modal

185

<Modal size="lg" show={show} onHide={handleClose}>

186

<Modal.Header closeButton>

187

<Modal.Title>Large Modal</Modal.Title>

188

</Modal.Header>

189

<Modal.Body>This is a large modal.</Modal.Body>

190

</Modal>

191

192

// Fullscreen modal

193

<Modal show={show} fullscreen onHide={handleClose}>

194

<Modal.Header closeButton>

195

<Modal.Title>Fullscreen Modal</Modal.Title>

196

</Modal.Header>

197

<Modal.Body>This modal is fullscreen.</Modal.Body>

198

</Modal>

199

```

200

201

### Tooltip

202

203

Tooltip component for contextual information.

204

205

```typescript { .api }

206

/**

207

* Tooltip component for contextual information

208

* @param id - Unique identifier

209

* @param placement - Tooltip placement

210

*/

211

function Tooltip(props: TooltipProps): JSX.Element;

212

213

interface TooltipProps extends React.HTMLAttributes<HTMLDivElement> {

214

/** Unique identifier */

215

id: string;

216

/** Tooltip placement */

217

placement?: "auto" | "top" | "bottom" | "left" | "right";

218

/** Arrow visibility */

219

arrowProps?: any;

220

/** Show state */

221

show?: boolean;

222

/** Popper configuration */

223

popper?: any;

224

/** Bootstrap CSS class prefix */

225

bsPrefix?: string;

226

}

227

```

228

229

**Tooltip Usage Examples:**

230

231

```typescript

232

import { Tooltip, OverlayTrigger, Button } from "react-bootstrap";

233

234

// Basic tooltip

235

<OverlayTrigger

236

placement="right"

237

delay={{ show: 250, hide: 400 }}

238

overlay={<Tooltip id="button-tooltip">Simple tooltip</Tooltip>}

239

>

240

<Button variant="success">Hover me to see tooltip</Button>

241

</OverlayTrigger>

242

243

// Tooltip with HTML content

244

<OverlayTrigger

245

placement="top"

246

overlay={

247

<Tooltip id="tooltip-top">

248

<strong>Holy guacamole!</strong> Check this info.

249

</Tooltip>

250

}

251

>

252

<Button variant="secondary">Tooltip on top</Button>

253

</OverlayTrigger>

254

```

255

256

### Popover

257

258

Popover component for rich contextual information.

259

260

```typescript { .api }

261

/**

262

* Popover component for rich contextual information

263

* @param id - Unique identifier

264

* @param placement - Popover placement

265

* @param title - Popover title

266

*/

267

function Popover(props: PopoverProps): JSX.Element;

268

269

interface PopoverProps extends React.HTMLAttributes<HTMLDivElement> {

270

/** Unique identifier */

271

id: string;

272

/** Popover placement */

273

placement?: "auto" | "top" | "bottom" | "left" | "right";

274

/** Popover title */

275

title?: React.ReactNode;

276

/** Arrow visibility */

277

arrowProps?: any;

278

/** Show state */

279

show?: boolean;

280

/** Popper configuration */

281

popper?: any;

282

/** Bootstrap CSS class prefix */

283

bsPrefix?: string;

284

}

285

```

286

287

### PopoverHeader

288

289

Header component for popovers.

290

291

```typescript { .api }

292

/**

293

* PopoverHeader component for popover headers

294

*/

295

function PopoverHeader(props: PopoverHeaderProps): JSX.Element;

296

297

interface PopoverHeaderProps extends React.HTMLAttributes<HTMLDivElement> {

298

/** Component used for the root node */

299

as?: React.ElementType;

300

/** Bootstrap CSS class prefix */

301

bsPrefix?: string;

302

}

303

```

304

305

### PopoverBody

306

307

Body component for popovers.

308

309

```typescript { .api }

310

/**

311

* PopoverBody component for popover bodies

312

*/

313

function PopoverBody(props: PopoverBodyProps): JSX.Element;

314

315

interface PopoverBodyProps extends React.HTMLAttributes<HTMLDivElement> {

316

/** Component used for the root node */

317

as?: React.ElementType;

318

/** Bootstrap CSS class prefix */

319

bsPrefix?: string;

320

}

321

```

322

323

**Popover Usage Examples:**

324

325

```typescript

326

import { Popover, OverlayTrigger, Button } from "react-bootstrap";

327

328

const popover = (

329

<Popover id="popover-basic">

330

<Popover.Header as="h3">Popover right</Popover.Header>

331

<Popover.Body>

332

And here's some <strong>amazing</strong> content. It's very engaging. Right?

333

</Popover.Body>

334

</Popover>

335

);

336

337

<OverlayTrigger trigger="click" placement="right" overlay={popover}>

338

<Button variant="success">Click me to see popover</Button>

339

</OverlayTrigger>

340

```

341

342

### Offcanvas

343

344

Off-canvas component for slide-out panels.

345

346

```typescript { .api }

347

/**

348

* Offcanvas component for slide-out panels

349

* @param show - Show/hide state

350

* @param onHide - Hide handler

351

* @param placement - Panel placement

352

* @param backdrop - Backdrop behavior

353

* @param keyboard - Keyboard close support

354

* @param scroll - Body scroll behavior

355

*/

356

function Offcanvas(props: OffcanvasProps): JSX.Element;

357

358

interface OffcanvasProps extends React.HTMLAttributes<HTMLDivElement> {

359

/** Show/hide state */

360

show?: boolean;

361

/** Hide handler */

362

onHide?: () => void;

363

/** Panel placement */

364

placement?: "start" | "end" | "top" | "bottom";

365

/** Backdrop behavior */

366

backdrop?: boolean | "static";

367

/** Keyboard close support */

368

keyboard?: boolean;

369

/** Body scroll behavior */

370

scroll?: boolean;

371

/** Auto focus */

372

autoFocus?: boolean;

373

/** Enforce focus */

374

enforceFocus?: boolean;

375

/** Restore focus */

376

restoreFocus?: boolean;

377

/** Show handler */

378

onShow?: () => void;

379

/** Enter handler */

380

onEnter?: () => void;

381

/** Entering handler */

382

onEntering?: () => void;

383

/** Entered handler */

384

onEntered?: () => void;

385

/** Exit handler */

386

onExit?: () => void;

387

/** Exiting handler */

388

onExiting?: () => void;

389

/** Exited handler */

390

onExited?: () => void;

391

/** Bootstrap CSS class prefix */

392

bsPrefix?: string;

393

}

394

```

395

396

### OffcanvasHeader

397

398

Header component for offcanvas with optional close button.

399

400

```typescript { .api }

401

/**

402

* OffcanvasHeader component for offcanvas headers

403

* @param closeButton - Show close button

404

* @param onHide - Close handler

405

*/

406

function OffcanvasHeader(props: OffcanvasHeaderProps): JSX.Element;

407

408

interface OffcanvasHeaderProps extends React.HTMLAttributes<HTMLDivElement> {

409

/** Show close button */

410

closeButton?: boolean;

411

/** Close handler */

412

onHide?: () => void;

413

/** Bootstrap CSS class prefix */

414

bsPrefix?: string;

415

}

416

```

417

418

### OffcanvasBody

419

420

Body component for offcanvas content.

421

422

```typescript { .api }

423

/**

424

* OffcanvasBody component for offcanvas bodies

425

*/

426

function OffcanvasBody(props: OffcanvasBodyProps): JSX.Element;

427

428

interface OffcanvasBodyProps extends React.HTMLAttributes<HTMLDivElement> {

429

/** Bootstrap CSS class prefix */

430

bsPrefix?: string;

431

}

432

```

433

434

### OffcanvasTitle

435

436

Title component for offcanvas headers.

437

438

```typescript { .api }

439

/**

440

* OffcanvasTitle component for offcanvas titles

441

*/

442

function OffcanvasTitle(props: OffcanvasTitleProps): JSX.Element;

443

444

interface OffcanvasTitleProps extends React.HTMLAttributes<HTMLElement> {

445

/** Component used for the root node */

446

as?: React.ElementType;

447

/** Bootstrap CSS class prefix */

448

bsPrefix?: string;

449

}

450

```

451

452

**Offcanvas Usage Examples:**

453

454

```typescript

455

import { Offcanvas, Button } from "react-bootstrap";

456

457

function OffcanvasExample() {

458

const [show, setShow] = useState(false);

459

460

const handleClose = () => setShow(false);

461

const handleShow = () => setShow(true);

462

463

return (

464

<>

465

<Button variant="primary" onClick={handleShow}>

466

Launch offcanvas

467

</Button>

468

469

<Offcanvas show={show} onHide={handleClose}>

470

<Offcanvas.Header closeButton>

471

<Offcanvas.Title>Offcanvas</Offcanvas.Title>

472

</Offcanvas.Header>

473

<Offcanvas.Body>

474

Some text as placeholder. In real life you can have the elements you

475

have chosen. Like, text, images, lists, etc.

476

</Offcanvas.Body>

477

</Offcanvas>

478

</>

479

);

480

}

481

482

// Offcanvas from different sides

483

<Offcanvas show={show} onHide={handleClose} placement="end">

484

<Offcanvas.Header closeButton>

485

<Offcanvas.Title>Offcanvas from right</Offcanvas.Title>

486

</Offcanvas.Header>

487

<Offcanvas.Body>Content from the right side.</Offcanvas.Body>

488

</Offcanvas>

489

```

490

491

### OverlayTrigger

492

493

Wrapper component for triggering overlays like tooltips and popovers.

494

495

```typescript { .api }

496

/**

497

* OverlayTrigger component for triggering overlays

498

* @param trigger - Trigger events

499

* @param placement - Overlay placement

500

* @param delay - Show/hide delays

501

* @param show - Controlled show state

502

* @param overlay - Overlay component

503

*/

504

function OverlayTrigger(props: OverlayTriggerProps): JSX.Element;

505

506

interface OverlayTriggerProps {

507

/** Trigger events */

508

trigger?: "hover" | "click" | "focus" | Array<"hover" | "click" | "focus">;

509

/** Overlay placement */

510

placement?: "auto" | "top" | "bottom" | "left" | "right";

511

/** Show/hide delays */

512

delay?: number | { show: number; hide: number };

513

/** Controlled show state */

514

show?: boolean;

515

/** Default show state */

516

defaultShow?: boolean;

517

/** Show handler */

518

onToggle?: (show: boolean) => void;

519

/** Overlay component */

520

overlay: React.ReactElement;

521

/** Target element */

522

target?: React.RefObject<Element>;

523

/** Container element */

524

container?: React.ComponentType | Element | (() => Element);

525

/** Flip behavior */

526

flip?: boolean;

527

/** Popover container props */

528

popperConfig?: any;

529

/** Root close behavior */

530

rootClose?: boolean;

531

/** Root close event */

532

rootCloseEvent?: "click" | "mousedown";

533

/** Children element */

534

children: React.ReactElement;

535

}

536

```

537

538

**OverlayTrigger Usage Examples:**

539

540

```typescript

541

import { OverlayTrigger, Tooltip, Popover, Button } from "react-bootstrap";

542

543

// Tooltip trigger

544

<OverlayTrigger

545

placement="top"

546

delay={{ show: 250, hide: 400 }}

547

overlay={<Tooltip id="button-tooltip">Tooltip text</Tooltip>}

548

>

549

<Button variant="success">Hover for tooltip</Button>

550

</OverlayTrigger>

551

552

// Popover trigger

553

<OverlayTrigger

554

trigger="click"

555

placement="bottom"

556

overlay={

557

<Popover id="popover-positioned-bottom">

558

<Popover.Header>Popover bottom</Popover.Header>

559

<Popover.Body>

560

<strong>Holy guacamole!</strong> Check this info.

561

</Popover.Body>

562

</Popover>

563

}

564

>

565

<Button variant="danger">Click for popover</Button>

566

</OverlayTrigger>

567

568

// Multiple triggers

569

<OverlayTrigger

570

trigger={['hover', 'focus']}

571

placement="right"

572

overlay={<Tooltip id="multi-trigger-tooltip">Multiple triggers</Tooltip>}

573

>

574

<Button variant="outline-secondary">Hover or focus</Button>

575

</OverlayTrigger>

576

```