WingoUI
Buttons & Actions
ButtonButton GroupCopy ButtonDelete ButtonTheme ToggleToggleToggle Group
Inputs
Avatar UploadCalendarCheckboxColor PickerComboboxCron PickerCurrency InputDate PickerDate Range PickerDate Time PickerDuration PickerFile UploadFilter BuilderInputInput GroupListboxMasked InputMention InputMonth PickerMulti SelectNumber InputOTP InputPassword InputPhone InputRadio GroupRatingSearch InputSegmented ControlSelectSignature PadSliderSwitchTag InputTextareaTime Picker
Forms
Address InputCSV ImportFieldForm WizardInline EditInvoice line itemsRich Text Editor
Navigation
Back To TopBounce SidebarBreadcrumbCommand MenuGlobal SearchGooey NavHook SidebarNav MenuNav TabsPaginationProximity SidebarScroll ProgressSidebarStepsTable Of ContentsTabsTopbarUser MenuWorkspace Switcher
Overlays
Alert DialogContext MenuDialogDrawerDropdown MenuFamily DrawerHover CardPopoverSheetShortcuts DialogTooltipTour
Feedback
AlertBannerCookie ConsentEmoji ReactionEmpty StateNotification BellNotification CenterProgressRoute ProgressSkeletonSpinnerToast
Data Display
Approval FlowAvatarBadgeCalendar ViewCode BlockComment ThreadContact cardCountdownDescription ListDiff ViewerFile ListFile managerFolderGanttJSON ViewerKbdLog ViewerMarkdownPresenceSchedulerTagTimelineTree View
Tables & Lists
Audit LogData TableDeal PipelineEditable GridKanbanListMembers tablePermissions MatrixTableTask ListVirtual List
Charts & Stats
Animated CounterArea chartBar chartDonut chartFunnel chartGaugeGitHub ActivityHeatmap calendarLeaderboardLine chartRadial barSparklineStat CardTrackerTrend badge
Layout
AccordionApp ShellCardCollapsibleDetail LayoutEntity HeaderPage HeaderScroll AreaSeparatorSettings LayoutSplit ViewToolbar
Media
Audio PlayerCarouselImage CropperImage LightboxLocation MapQR CodeStep PlayerVideo Player
AI Kit
Agent Status CardChat MessageChat ThreadConversation ListFluid OrbGrid RevealMatrix OrbModel PickerPrompt InputReasoning IndicatorRule BuilderSuggestion ChipsTool Call TimelineUsage MeterVoice InputWorkflow Canvas
Text & Effects
Gravity Letters
Mobile
Action SheetBottom Tab BarFABHaptic ButtonHero HeaderInstall PromptLarge Title HeaderNotification BannerOnboarding CarouselPicker WheelPull To RefreshSlide To ConfirmSticky CTA BarSwipe DeckSwipeable Tabs
Commerce
Cart drawerCategory pickerCheckout stepsCoupon inputFavorite buttonFilter panelListing cardListing gridOrder trackerPricePrice rangePricing tableProduct galleryQuantity stepperReviewsSeller card
Blocks
Admin Dashboard PageAdmin ShellAI Chat PageAutomation Builder PageCheckout PageCRM Contact PageCRM Pipeline PageError PagesInbox PageInvoice PageKPI DashboardListing Detail PageLogin PageMarketplace Home PageMarketplace Search PageMarketplace ShellMobile App HomeOnboarding FlowPost Listing WizardPricing PageRegister PageSettings PageUsers Admin Page
Hooks & Utilities
AI ChatChart kitCommerceDate utilsFile exportFile typesFiltersForm validationHapticsInvoicingMotion presetsNavigationNumber formatRelative timeRomanian locationsSpreadsheetText matchTonesUIProvideruseClipboarduseConsentuseControllableStateuseCooldownuseDebounceuseKeyboardInsetuseLocaleuseLongPressuseMediaControlsuseMediaQueryuseOverflowItemsusePersistedStateuseScrollEdgesuseScrollStateuseSelectionuseShortcutuseStickToBottom
GalleryThemeCredits

AI Kit

Usage Meter

AI KitUsage Meter
Tool Call TimelineVoice Input
Live props
Appearance
variant
display
showRemaining
showPercent
size
tone
color
radius
Content
title
Behavior
upsell
resetFormat
currency
responsive
animated
locale
State
loading
defaultOpen
Layout
side
align
Code
import { UsageMeter } from "@/components/ui/usage-meter"

<UsageMeter />
Pro

v1.0.0·Added in 1.0.0

How much of a plan is used: tokens, messages, images, credits or money against their limits, with resets, warnings and an upgrade offer.

Read it at a glance: each meter shows what is used against its limit, the percent and a bar; the bars grow from empty one after another the first time the card scrolls into view, then glide when the numbers change. At 75% a bar turns amber with an Almost at your limit note, at 90% red, and at the limit it stays full in red and says how far over it went; a word and an icon always say it too, and a screen reader hears each crossing once through a polite status (never on load). Resets read today at 18:00, tomorrow or in 3 days up close and a date further out, with the full date on hover. The upgrade offer slides open once a meter reaches the warning line; its button is a real link when it has an href. The compact variant is a small ring with the percent of the fullest meter for a composer or a topbar: click or tap it, or press Enter or Space on it, and the details open in a popover whose panel takes focus first (Tab goes on to the upgrade button); Escape or a click outside closes it and focus returns to the ring. On a phone the details rise as a bottom sheet with 14px rows and a full width upgrade button pinned at the bottom. Every button has a 44px touch target. In a narrow spot (under 352px) a row puts its value on a line of its own under the label (wider, a value that does not fit wraps instead of breaking the label), and a narrow offer puts its button under the text, so nothing gets squeezed. Press Use 50,000 tokens in the playground to push the token meter over both thresholds. Reduced motion shows the values at once.

Add to a project

npx wingo-ui@latest add usage-meter

Pro item: the CLI needs a Pro account. See plans

Dependencies

motionlucide-reactprogressbadgebuttonpopoverskeletoncommercenumber-formatdate-utilsrelative-timeai-chatuse-localeuse-media-querymotiontonesui-config

Files

  • components/ui/usage-meter.tsx

See also

ProgressStat CardBadgeModel PickerVoice InputPricing tableAI Chatlib
PreviousTool Call TimelineNext Voice Input

Usage

Pro
Resets on 10/01/2026
  • Tokens742,300 / 1,000,000 tokens74%
  • Northwind Pro messages38 / 50 messages76%
    Almost at your limit Resets today at 6:00 PM
  • Generated images12 / 20 images60%
  • Cost API$412.80 / $500.0082%
    Almost at your limit
Upgrade to Business$59 / month, unlimited tokens

Push the tokens past 75% and 90%: the bar turns amber, then red, and a screen reader hears each crossing once.

upsell="auto" · side="bottom" align="center" · responsive · animated