Tessina UI
ConfiguratorGitHubIntroduction
InstallationUsageTheming
ComponentsAccordionAction SheetAlertAlertDialogArea ChartAspectRatioAvatarBadgeBannerBar ChartBottom NavBreadcrumbButtonButtonGroupCalendarCardCarouselChartChatBubbleCheckboxChipCodeBlockCollapsibleColor PickerComboboxCommandContainerContextMenuDate PickerDividerDrawerDropdown MenuEmptyStateFABFieldFieldsetFile UploadFile Upload 2FlexFormGridHoverCardIconButtonLabelLine ChartLinkMenubarMeterModalNavigation MenuNumberFieldOTP InputPaginationPie ChartPopoverProgressPromptInputRadar ChartRadial ChartRadioRatingScroll AreaSearchSegmentedControlSelectShortcutSidebarSkeletonSliderSpacerSpinnerSplit ButtonStackStatusStepperSurfaceSwitchTableTabsTextareaTime PickerToastToggleButtonToggleGroupToolbarTooltipTop Header DesktopTop Header Mobile
Contributing
Components

Bottom Nav

Mobile bottom navigation bar in two styles — a full-width dock and an iOS-style floating pill. Controlled or uncontrolled active state. Badge support (dot or count). LTR and RTL.

Playground

Installation

pnpm add @tessinaui/ui

Usage

import { BottomNav } from "@tessinaui/ui";

const items = [
  { value: "home",    label: "Home",    icon: <Home className="size-5" /> },
  { value: "search",  label: "Search",  icon: <Search className="size-5" /> },
  { value: "profile", label: "Profile", icon: <User className="size-5" /> },
];

<BottomNav items={items} defaultValue="home" />

Examples

Default

A full-width dock with four items and the first item active.

Types

Two visual styles — default (full-width dock) and floating (iOS-style pill).

Rounded

The floating bar's corner radius, from full down to sm.

Badges

Notification indicators — a dot, a count, and a value capped at 99+.

Right to Left

The bar mirrors its layout for RTL languages via the dir prop.

Loading

A skeleton placeholder shown while nav data loads.

Types

TypeDescription
defaultFull-width dock pinned at the bottom of the screen. Dark background, items share equal width.
floatingiOS-style translucent pill. Glass morphism (backdrop-blur) with a solid dark active-item pill.

Props

BottomNav

PropTypeDefaultDescription
type"default" | "floating""default"Visual style of the navigation bar
itemsBottomNavItemDef[]—Nav items (3–5 recommended)
valuestring—Controlled active value
defaultValuestringFirst item valueUncontrolled initial active value
onValueChange(value: string) => void—Called when the active item changes
dir"ltr" | "rtl""ltr"Text direction
classNamestring—Extra classes applied to the container

BottomNavItemDef

FieldTypeDescription
valuestringUnique identifier for the item
labelstringLabel text shown below the icon
iconReact.ReactNodeIcon element — use a 20×20 Lucide icon
badgenumber | booleantrue → notification dot; number → count badge (capped at 99+); omit to hide

Accessibility

  • Container uses role="tablist" and aria-label="Bottom navigation".
  • Each item uses role="tab" and aria-selected to reflect active state.
  • Badges use aria-label describing the notification count.
  • Full keyboard focus ring on every item via focus-visible utilities.

Bar Chart

Token-driven bar chart built on Recharts v3 — vertical columns or horizontal bars, grouped or stacked, rounded corners, and full light/dark theming.

Breadcrumb

Navigation trail showing the user's location in a hierarchy, with support for collapsed items, custom separators, and RTL.

On this page

PlaygroundInstallationUsageExamplesDefaultTypesRoundedBadgesRight to LeftLoadingTypesPropsBottomNavBottomNavItemDefAccessibility