or run

npx @tessl/cli init
Log in

Version

Tile

Overview

Evals

Files

Files

docs

core-components.mddisplay-components.mdfeedback-components.mdform-components.mdhelpers.mdindex.mdlayout-components.mdspecialized-components.mdtheming.md

specialized-components.mddocs/

0

# Specialized Components

1

2

Purpose-built components for specific use cases including pricing cards, social icons, progress indicators, navigation tabs, and floating action buttons.

3

4

## Capabilities

5

6

### PricingCard

7

8

Pricing plan display component for showcasing subscription tiers, product pricing, and feature comparisons with customizable layouts and styling.

9

10

```typescript { .api }

11

/**

12

* Pricing plan display component

13

*/

14

interface PricingCardProps {

15

/** Card container styles */

16

containerStyle?: StyleProp<ViewStyle>;

17

/** Wrapper styles */

18

wrapperStyle?: StyleProp<ViewStyle>;

19

/** Pricing plan title */

20

title?: string;

21

/** Price value */

22

price: string | number;

23

/** Currency symbol */

24

currency?: string;

25

/** Feature list */

26

info?: string[];

27

/** Action button configuration */

28

button?: Partial<ButtonProps>;

29

/** Title styles */

30

titleStyle?: StyleProp<TextStyle>;

31

/** Price styles */

32

priceStyle?: StyleProp<TextStyle>;

33

/** Info text styles */

34

infoStyle?: StyleProp<TextStyle>;

35

/** Card color theme */

36

color?: string;

37

/** Touch handler */

38

onButtonPress?(): void;

39

}

40

```

41

42

**Usage Examples:**

43

44

```typescript

45

import React from 'react';

46

import { PricingCard } from 'react-native-elements';

47

48

// Basic pricing card

49

<PricingCard

50

color="#007AFF"

51

title="Basic Plan"

52

price="$9.99"

53

info={[

54

'Up to 5 projects',

55

'10GB storage',

56

'Email support',

57

'Basic analytics'

58

]}

59

button={{

60

title: 'Get Started',

61

icon: 'flight-takeoff',

62

}}

63

onButtonPress={() => selectPlan('basic')}

64

/>

65

66

// Premium pricing card with custom styling

67

<PricingCard

68

containerStyle={{

69

borderWidth: 2,

70

borderColor: '#FFD700',

71

borderRadius: 15,

72

elevation: 5,

73

}}

74

wrapperStyle={{

75

backgroundColor: '#fff',

76

}}

77

title="Premium Plan"

78

titleStyle={{

79

fontSize: 20,

80

fontWeight: 'bold',

81

color: '#333',

82

}}

83

price="$29.99"

84

currency="$"

85

priceStyle={{

86

fontSize: 36,

87

color: '#FFD700',

88

fontWeight: 'bold',

89

}}

90

info={[

91

'Unlimited projects',

92

'100GB storage',

93

'Priority support',

94

'Advanced analytics',

95

'Custom integrations',

96

'Team collaboration'

97

]}

98

infoStyle={{

99

fontSize: 14,

100

color: '#666',

101

}}

102

button={{

103

title: 'Upgrade Now',

104

buttonStyle: {

105

backgroundColor: '#FFD700',

106

borderRadius: 25,

107

},

108

titleStyle: {

109

color: '#333',

110

fontWeight: 'bold',

111

},

112

}}

113

color="#FFD700"

114

/>

115

116

// Enterprise pricing card

117

<PricingCard

118

title="Enterprise"

119

price="Custom"

120

info={[

121

'Everything in Premium',

122

'Unlimited storage',

123

'Dedicated support',

124

'Custom SLA',

125

'On-premise deployment',

126

'Advanced security'

127

]}

128

button={{

129

title: 'Contact Sales',

130

type: 'outline',

131

}}

132

containerStyle={{

133

backgroundColor: '#f8f9fa',

134

}}

135

color="#333"

136

onButtonPress={() => openContactForm()}

137

/>

138

139

// Comparison layout with multiple cards

140

<View style={{ flexDirection: 'row', justifyContent: 'space-around' }}>

141

<PricingCard

142

containerStyle={{ width: '30%' }}

143

title="Starter"

144

price="Free"

145

info={['1 project', '1GB storage']}

146

button={{ title: 'Start Free' }}

147

color="#6c757d"

148

/>

149

150

<PricingCard

151

containerStyle={{

152

width: '30%',

153

borderWidth: 2,

154

borderColor: '#007AFF',

155

}}

156

title="Pro"

157

price="$19.99"

158

info={['10 projects', '50GB storage', 'Priority support']}

159

button={{

160

title: 'Most Popular',

161

buttonStyle: { backgroundColor: '#007AFF' }

162

}}

163

color="#007AFF"

164

/>

165

166

<PricingCard

167

containerStyle={{ width: '30%' }}

168

title="Business"

169

price="$49.99"

170

info={['Unlimited projects', '500GB storage', 'Phone support']}

171

button={{ title: 'Contact Us' }}

172

color="#28a745"

173

/>

174

</View>

175

```

176

177

### SocialIcon

178

179

Social media platform icons component with built-in brand colors, platform recognition, and customizable styling for social sharing and profile links.

180

181

```typescript { .api }

182

/**

183

* Social media platform icons with brand colors

184

*/

185

interface SocialIconProps extends TouchableOpacityProps {

186

/** Social platform type */

187

type: SocialMediaType;

188

/** Raised/elevated appearance */

189

raised?: boolean;

190

/** Light color variant */

191

light?: boolean;

192

/** Icon size */

193

iconSize?: number;

194

/** Icon color */

195

iconColor?: string;

196

/** Container styles */

197

style?: StyleProp<ViewStyle>;

198

/** Font family */

199

fontFamily?: string;

200

/** Font weight */

201

fontWeight?: string;

202

/** Touch handler */

203

onPress?(): void;

204

/** Long press handler */

205

onLongPress?(): void;

206

/** Icon styles */

207

iconStyle?: StyleProp<TextStyle>;

208

/** Underlay color */

209

underlayColor?: string;

210

/** Title text */

211

title?: string;

212

/** Button configuration */

213

button?: boolean;

214

/** Loading state */

215

loading?: boolean;

216

/** Activity indicator props */

217

activityIndicatorStyle?: StyleProp<ViewStyle>;

218

/** Small size variant */

219

small?: boolean;

220

/** Medium size variant */

221

medium?: boolean;

222

/** Large size variant */

223

large?: boolean;

224

/** Extra large size variant */

225

xlarge?: boolean;

226

}

227

228

/**

229

* Supported social media platform types

230

*/

231

type SocialMediaType =

232

| 'facebook'

233

| 'twitter'

234

| 'google-plus-official'

235

| 'pinterest'

236

| 'linkedin'

237

| 'youtube'

238

| 'vimeo'

239

| 'tumblr'

240

| 'instagram'

241

| 'quora'

242

| 'foursquare'

243

| 'wordpress'

244

| 'stumbleupon'

245

| 'github'

246

| 'twitch'

247

| 'medium'

248

| 'soundcloud'

249

| 'gitlab'

250

| 'angellist'

251

| 'codepen';

252

```

253

254

**Usage Examples:**

255

256

```typescript

257

import React from 'react';

258

import { SocialIcon } from 'react-native-elements';

259

260

// Basic social icons

261

<View style={{ flexDirection: 'row', justifyContent: 'space-around' }}>

262

<SocialIcon

263

type='facebook'

264

onPress={() => openSocialProfile('facebook')}

265

/>

266

<SocialIcon

267

type='twitter'

268

onPress={() => openSocialProfile('twitter')}

269

/>

270

<SocialIcon

271

type='instagram'

272

onPress={() => openSocialProfile('instagram')}

273

/>

274

<SocialIcon

275

type='linkedin'

276

onPress={() => openSocialProfile('linkedin')}

277

/>

278

</View>

279

280

// Raised social icons

281

<View style={{ flexDirection: 'row', flexWrap: 'wrap' }}>

282

<SocialIcon

283

raised

284

type='facebook'

285

onPress={() => shareOnFacebook()}

286

/>

287

<SocialIcon

288

raised

289

type='twitter'

290

onPress={() => shareOnTwitter()}

291

/>

292

<SocialIcon

293

raised

294

type='google-plus-official'

295

onPress={() => shareOnGoogle()}

296

/>

297

</View>

298

299

// Light variant social icons

300

<View style={{ backgroundColor: '#333', padding: 20 }}>

301

<View style={{ flexDirection: 'row', justifyContent: 'space-around' }}>

302

<SocialIcon type='github' light />

303

<SocialIcon type='medium' light />

304

<SocialIcon type='youtube' light />

305

</View>

306

</View>

307

308

// Custom sized and styled social icons

309

<SocialIcon

310

type='facebook'

311

iconSize={30}

312

style={{

313

width: 80,

314

height: 80,

315

borderRadius: 40,

316

}}

317

iconStyle={{

318

color: '#fff',

319

}}

320

onPress={handleFacebookShare}

321

/>

322

323

// Social icon with title (button style)

324

<SocialIcon

325

title='Sign In With Facebook'

326

button

327

type='facebook'

328

style={{ width: 250 }}

329

onPress={signInWithFacebook}

330

/>

331

332

// Loading state social icon

333

<SocialIcon

334

type='google-plus-official'

335

loading={isSigningIn}

336

button

337

title={isSigningIn ? 'Signing In...' : 'Sign In With Google'}

338

onPress={signInWithGoogle}

339

/>

340

341

// Custom color social icon

342

<SocialIcon

343

type='twitter'

344

iconColor='#1DA1F2'

345

style={{

346

backgroundColor: '#fff',

347

borderWidth: 1,

348

borderColor: '#1DA1F2',

349

}}

350

raised

351

/>

352

353

// Different sizes

354

<View style={{ flexDirection: 'row', alignItems: 'center' }}>

355

<SocialIcon type='facebook' small />

356

<SocialIcon type='facebook' medium />

357

<SocialIcon type='facebook' large />

358

<SocialIcon type='facebook' xlarge />

359

</View>

360

```

361

362

### LinearProgress

363

364

Linear progress indicator component for showing task completion, loading states, and progress tracking with customizable appearance and animation.

365

366

```typescript { .api }

367

/**

368

* Linear progress indicator

369

*/

370

interface LinearProgressProps {

371

/** Progress value (0-1) */

372

value?: number;

373

/** Progress variant type */

374

variant?: 'determinate' | 'indeterminate';

375

/** Progress bar color */

376

color?: 'primary' | 'secondary' | string;

377

/** Track color */

378

trackColor?: string;

379

/** Container styles */

380

style?: StyleProp<ViewStyle>;

381

/** Animation configuration */

382

animation?: {

383

duration?: number;

384

};

385

}

386

```

387

388

**Usage Examples:**

389

390

```typescript

391

import React, { useState, useEffect } from 'react';

392

import { LinearProgress } from 'react-native-elements';

393

394

// Determinate progress bar

395

const [progress, setProgress] = useState(0);

396

397

useEffect(() => {

398

const timer = setInterval(() => {

399

setProgress(prev => (prev >= 1 ? 0 : prev + 0.1));

400

}, 1000);

401

return () => clearInterval(timer);

402

}, []);

403

404

<View>

405

<Text>Upload Progress: {Math.round(progress * 100)}%</Text>

406

<LinearProgress

407

value={progress}

408

variant="determinate"

409

color="#007AFF"

410

trackColor="#E0E0E0"

411

style={{ marginVertical: 10, height: 8, borderRadius: 4 }}

412

/>

413

</View>

414

415

// Indeterminate progress bar (loading)

416

<LinearProgress

417

variant="indeterminate"

418

color="#4caf50"

419

style={{ marginVertical: 20 }}

420

/>

421

422

// Custom styled progress bars

423

<View>

424

<Text h4>File Processing</Text>

425

<LinearProgress

426

value={0.7}

427

color="#ff9800"

428

trackColor="#fff3e0"

429

style={{

430

height: 12,

431

borderRadius: 6,

432

backgroundColor: '#fff3e0',

433

marginVertical: 10,

434

}}

435

/>

436

437

<Text h4>Download Complete</Text>

438

<LinearProgress

439

value={1}

440

color="#4caf50"

441

trackColor="#e8f5e8"

442

style={{

443

height: 6,

444

borderRadius: 3,

445

marginVertical: 10,

446

}}

447

/>

448

</View>

449

450

// Multiple progress indicators

451

<View>

452

<View style={{ marginBottom: 15 }}>

453

<Text>CPU Usage: 45%</Text>

454

<LinearProgress

455

value={0.45}

456

color="#2196f3"

457

style={{ marginTop: 5, height: 4 }}

458

/>

459

</View>

460

461

<View style={{ marginBottom: 15 }}>

462

<Text>Memory: 78%</Text>

463

<LinearProgress

464

value={0.78}

465

color="#ff9800"

466

style={{ marginTop: 5, height: 4 }}

467

/>

468

</View>

469

470

<View style={{ marginBottom: 15 }}>

471

<Text>Storage: 23%</Text>

472

<LinearProgress

473

value={0.23}

474

color="#4caf50"

475

style={{ marginTop: 5, height: 4 }}

476

/>

477

</View>

478

</View>

479

480

// Animated progress with steps

481

const steps = ['Preparing', 'Processing', 'Finalizing', 'Complete'];

482

const [currentStep, setCurrentStep] = useState(0);

483

484

<View>

485

<Text h4>{steps[currentStep]}</Text>

486

<LinearProgress

487

value={(currentStep + 1) / steps.length}

488

color="#9c27b0"

489

style={{

490

marginVertical: 15,

491

height: 10,

492

borderRadius: 5,

493

}}

494

animation={{ duration: 500 }}

495

/>

496

<Text style={{ textAlign: 'center', color: '#666' }}>

497

Step {currentStep + 1} of {steps.length}

498

</Text>

499

</View>

500

```

501

502

### Tab & TabView

503

504

Tab navigation components for creating tabbed interfaces with swipeable content and customizable tab indicators and styling.

505

506

```typescript { .api }

507

/**

508

* Tab navigation component

509

*/

510

interface TabProps {

511

/** Tab value/key */

512

value: number;

513

/** Value change handler */

514

onChange(value: number): void;

515

/** Disable tab functionality */

516

disableIndicator?: boolean;

517

/** Indicator styles */

518

indicatorStyle?: StyleProp<ViewStyle>;

519

/** Variant type */

520

variant?: 'primary' | 'default';

521

/** Scrollable tabs */

522

scrollable?: boolean;

523

/** Dense layout */

524

dense?: boolean;

525

/** Tab container styles */

526

containerStyle?: StyleProp<ViewStyle>;

527

}

528

529

/**

530

* Individual tab item

531

*/

532

interface TabItemProps extends ButtonProps {

533

/** Tab title */

534

title?: string;

535

/** Tab icon */

536

icon?: IconNode;

537

/** Title styles */

538

titleStyle?: StyleProp<TextStyle | ViewStyle>;

539

/** Button styles */

540

buttonStyle?: StyleProp<ViewStyle>;

541

/** Container styles */

542

containerStyle?: StyleProp<ViewStyle>;

543

}

544

545

/**

546

* TabView component for swipeable content

547

*/

548

interface TabViewProps {

549

/** Current tab value */

550

value: number;

551

/** Value change handler */

552

onChange(value: number): void;

553

/** Tab items configuration */

554

children: React.ReactElement<TabViewItemProps>[];

555

/** Animation type */

556

animationType?: 'spring' | 'timing';

557

/** Disable swipe */

558

disableSwipe?: boolean;

559

/** Tab bar position */

560

tabBarPosition?: 'top' | 'bottom';

561

/** Container styles */

562

containerStyle?: StyleProp<ViewStyle>;

563

}

564

565

/**

566

* TabView item component

567

*/

568

interface TabViewItemProps {

569

/** Item children */

570

children?: React.ReactNode;

571

/** Container styles */

572

style?: StyleProp<ViewStyle>;

573

}

574

```

575

576

**Usage Examples:**

577

578

```typescript

579

import React, { useState } from 'react';

580

import { Tab, TabView, Text, Avatar } from 'react-native-elements';

581

582

// Basic tab navigation

583

const [tabIndex, setTabIndex] = useState(0);

584

585

<View>

586

<Tab

587

value={tabIndex}

588

onChange={setTabIndex}

589

indicatorStyle={{ backgroundColor: '#007AFF', height: 3 }}

590

variant="primary"

591

>

592

<Tab.Item title="Tab 1" />

593

<Tab.Item title="Tab 2" />

594

<Tab.Item title="Tab 3" />

595

</Tab>

596

597

<TabView value={tabIndex} onChange={setTabIndex}>

598

<TabView.Item>

599

<Text h4>Content for Tab 1</Text>

600

</TabView.Item>

601

<TabView.Item>

602

<Text h4>Content for Tab 2</Text>

603

</TabView.Item>

604

<TabView.Item>

605

<Text h4>Content for Tab 3</Text>

606

</TabView.Item>

607

</TabView>

608

</View>

609

610

// Tabs with icons

611

<Tab

612

value={activeTab}

613

onChange={setActiveTab}

614

indicatorStyle={{

615

backgroundColor: '#FF6B6B',

616

height: 2,

617

}}

618

>

619

<Tab.Item

620

title="Home"

621

icon={{ name: 'home', type: 'material', color: '#666' }}

622

/>

623

<Tab.Item

624

title="Search"

625

icon={{ name: 'search', type: 'material', color: '#666' }}

626

/>

627

<Tab.Item

628

title="Profile"

629

icon={{ name: 'person', type: 'material', color: '#666' }}

630

/>

631

</Tab>

632

633

// Scrollable tabs

634

<Tab

635

value={scrollableIndex}

636

onChange={setScrollableIndex}

637

scrollable

638

containerStyle={{ backgroundColor: '#f8f9fa' }}

639

>

640

<Tab.Item title="Dashboard" />

641

<Tab.Item title="Analytics" />

642

<Tab.Item title="Reports" />

643

<Tab.Item title="Settings" />

644

<Tab.Item title="Users" />

645

<Tab.Item title="Billing" />

646

</Tab>

647

648

// Custom styled tabs

649

<Tab

650

value={customIndex}

651

onChange={setCustomIndex}

652

indicatorStyle={{

653

backgroundColor: '#4caf50',

654

height: 4,

655

borderRadius: 2,

656

}}

657

containerStyle={{

658

backgroundColor: '#fff',

659

elevation: 2,

660

}}

661

>

662

<Tab.Item

663

title="Recent"

664

titleStyle={{ fontSize: 16, fontWeight: 'bold' }}

665

buttonStyle={{

666

paddingVertical: 15,

667

}}

668

/>

669

<Tab.Item

670

title="Popular"

671

titleStyle={{ fontSize: 16, fontWeight: 'bold' }}

672

buttonStyle={{

673

paddingVertical: 15,

674

}}

675

/>

676

</Tab>

677

678

// Complete TabView with content

679

<TabView

680

value={viewIndex}

681

onChange={setViewIndex}

682

animationType="spring"

683

disableSwipe={false}

684

containerStyle={{ flex: 1 }}

685

>

686

<TabView.Item style={{ padding: 20 }}>

687

<View>

688

<Text h3>Dashboard</Text>

689

<Text>Welcome to your dashboard</Text>

690

{/* Dashboard content */}

691

</View>

692

</TabView.Item>

693

694

<TabView.Item style={{ padding: 20 }}>

695

<View>

696

<Text h3>Messages</Text>

697

<Text>Your recent messages</Text>

698

{/* Messages content */}

699

</View>

700

</TabView.Item>

701

702

<TabView.Item style={{ padding: 20 }}>

703

<View>

704

<Text h3>Settings</Text>

705

<Text>App configuration</Text>

706

{/* Settings content */}

707

</View>

708

</TabView.Item>

709

</TabView>

710

```

711

712

### SpeedDial & FAB

713

714

Floating Action Button (FAB) and SpeedDial components for quick access actions and expandable action menus with Material Design styling.

715

716

```typescript { .api }

717

/**

718

* Material Design floating action button

719

*/

720

interface FABProps extends TouchableOpacityProps {

721

/** FAB title text */

722

title?: string;

723

/** FAB icon */

724

icon?: IconNode;

725

/** FAB color */

726

color?: string;

727

/** FAB size */

728

size?: 'small' | 'large';

729

/** Button styles */

730

buttonStyle?: StyleProp<ViewStyle>;

731

/** Title styles */

732

titleStyle?: StyleProp<TextStyle>;

733

/** Icon styles */

734

iconStyle?: StyleProp<ViewStyle>;

735

/** Container styles */

736

containerStyle?: StyleProp<ViewStyle>;

737

/** Placement position */

738

placement?: 'left' | 'right';

739

/** Loading state */

740

loading?: boolean;

741

/** Loading props */

742

loadingProps?: ActivityIndicatorProps;

743

/** Visible state */

744

visible?: boolean;

745

/** Upper case title */

746

upperCase?: boolean;

747

}

748

749

/**

750

* Expandable floating action button with multiple actions

751

*/

752

interface SpeedDialProps {

753

/** SpeedDial visibility */

754

isOpen: boolean;

755

/** Icon for closed state */

756

icon?: IconNode;

757

/** Icon for open state */

758

openIcon?: IconNode;

759

/** SpeedDial actions */

760

actions: SpeedDialActionProps[];

761

/** Open handler */

762

onOpen?(): void;

763

/** Close handler */

764

onClose?(): void;

765

/** Toggle handler */

766

onToggle?(): void;

767

/** Button styles */

768

buttonStyle?: StyleProp<ViewStyle>;

769

/** Container styles */

770

containerStyle?: StyleProp<ViewStyle>;

771

/** Overlay color */

772

overlayColor?: string;

773

/** Label placement */

774

labelPressable?: boolean;

775

/** Transition delay */

776

transitionDelay?: number;

777

}

778

779

/**

780

* SpeedDial action configuration

781

*/

782

interface SpeedDialActionProps {

783

/** Action icon */

784

icon: IconNode;

785

/** Action title/label */

786

title?: string;

787

/** Action handler */

788

onPress(): void;

789

/** Button styles */

790

buttonStyle?: StyleProp<ViewStyle>;

791

/** Title styles */

792

titleStyle?: StyleProp<TextStyle>;

793

/** Container styles */

794

containerStyle?: StyleProp<ViewStyle>;

795

}

796

```

797

798

**Usage Examples:**

799

800

```typescript

801

import React, { useState } from 'react';

802

import { FAB, SpeedDial } from 'react-native-elements';

803

804

// Basic FAB

805

<FAB

806

icon={{ name: 'add', color: 'white' }}

807

color="#007AFF"

808

onPress={() => console.log('FAB pressed')}

809

placement="right"

810

/>

811

812

// FAB with title

813

<FAB

814

title="Create"

815

icon={{ name: 'create', color: 'white' }}

816

color="#4caf50"

817

onPress={handleCreate}

818

upperCase

819

/>

820

821

// Small FAB with loading state

822

<FAB

823

icon={{ name: 'save', color: 'white' }}

824

size="small"

825

color="#ff9800"

826

loading={isSaving}

827

onPress={handleSave}

828

/>

829

830

// SpeedDial with multiple actions

831

const [speedDialOpen, setSpeedDialOpen] = useState(false);

832

833

<SpeedDial

834

isOpen={speedDialOpen}

835

icon={{ name: 'add', color: '#fff' }}

836

openIcon={{ name: 'close', color: '#fff' }}

837

onOpen={() => setSpeedDialOpen(!speedDialOpen)}

838

onClose={() => setSpeedDialOpen(!speedDialOpen)}

839

actions={[

840

{

841

icon: { name: 'email', color: '#fff' },

842

title: 'Email',

843

onPress: () => console.log('Email pressed'),

844

},

845

{

846

icon: { name: 'phone', color: '#fff' },

847

title: 'Call',

848

onPress: () => console.log('Call pressed'),

849

},

850

{

851

icon: { name: 'message', color: '#fff' },

852

title: 'Message',

853

onPress: () => console.log('Message pressed'),

854

},

855

]}

856

/>

857

858

// Custom styled SpeedDial

859

<SpeedDial

860

isOpen={customSpeedDialOpen}

861

icon={{ name: 'menu', color: '#fff' }}

862

openIcon={{ name: 'close', color: '#fff' }}

863

onOpen={() => setCustomSpeedDialOpen(!customSpeedDialOpen)}

864

onClose={() => setCustomSpeedDialOpen(!customSpeedDialOpen)}

865

buttonStyle={{

866

backgroundColor: '#9c27b0',

867

}}

868

actions={[

869

{

870

icon: { name: 'camera', color: '#fff' },

871

title: 'Take Photo',

872

onPress: openCamera,

873

buttonStyle: { backgroundColor: '#2196f3' },

874

},

875

{

876

icon: { name: 'photo-library', color: '#fff' },

877

title: 'Gallery',

878

onPress: openGallery,

879

buttonStyle: { backgroundColor: '#4caf50' },

880

},

881

{

882

icon: { name: 'videocam', color: '#fff' },

883

title: 'Record Video',

884

onPress: recordVideo,

885

buttonStyle: { backgroundColor: '#ff5722' },

886

},

887

]}

888

overlayColor="rgba(0,0,0,0.5)"

889

transitionDelay={50}

890

/>

891

892

// FAB with different placements

893

<View style={{ flex: 1 }}>

894

<FAB

895

icon={{ name: 'share', color: 'white' }}

896

placement="left"

897

color="#e91e63"

898

onPress={handleShare}

899

/>

900

901

<FAB

902

icon={{ name: 'favorite', color: 'white' }}

903

placement="right"

904

color="#f44336"

905

onPress={handleFavorite}

906

containerStyle={{ bottom: 80 }}

907

/>

908

</View>

909

910

// Conditional FAB visibility

911

<FAB

912

icon={{ name: 'edit', color: 'white' }}

913

color="#607d8b"

914

visible={showEditFAB}

915

onPress={handleEdit}

916

buttonStyle={{

917

borderRadius: 28,

918

}}

919

/>

920

```