defi-ticker
dedevs-ui/defi-tickerFreeComponent
Ticker component for displaying real-time data
See it running
Open the demo on dedevs-ui
ui.dedevs.com/components/defi-tickerInstall it
npx shadcn@latest add https://ui.dedevs.com/r/defi-ticker.jsonSource
1'use client';23import type { HTMLAttributes, ReactNode } from 'react';4import { createContext, memo, useContext, useMemo } from 'react';5import { Avatar, AvatarFallback, AvatarImage } from '@repo/shadcn-ui/components/ui/avatar';6import { cn } from '@repo/shadcn-ui/lib/utils';78type DeFiTickerContextValue = {9 formatter: Intl.NumberFormat;10};1112const DEFAULT_CURRENCY = 'USD';13const DEFAULT_LOCALE = 'en-US';1415const defaultFormatter = new Intl.NumberFormat(DEFAULT_LOCALE, {16 style: 'currency',17 currency: DEFAULT_CURRENCY,18 minimumFractionDigits: 2,19 maximumFractionDigits: 2,20});2122const DeFiTickerContext = createContext<DeFiTickerContextValue>({23 formatter: defaultFormatter,24});2526export const useDeFiTickerContext = () => useContext(DeFiTickerContext);2728export type DeFiTickerProps = HTMLAttributes<HTMLButtonElement> & {29 currency?: string;30 locale?: string;31};3233export const DeFiTicker = memo(34 ({35 children,36 className,37 currency = DEFAULT_CURRENCY,38 locale = DEFAULT_LOCALE,39 ...props40 }: DeFiTickerProps & { children: ReactNode }) => {41 const formatter = useMemo(() => {42 try {43 return new Intl.NumberFormat(locale, {44 style: 'currency',45 currency: currency.toUpperCase(),46 minimumFractionDigits: 2,47 maximumFractionDigits: 2,48 });49 } catch {50 return defaultFormatter;51 }52 }, [currency, locale]);5354 return (55 <DeFiTickerContext.Provider value={{ formatter }}>56 <button57 className={cn(58 'inline-flex items-center gap-1.5 whitespace-nowrap align-middle',59 className60 )}61 type="button"62 {...props}63 >64 {children}65 </button>66 </DeFiTickerContext.Provider>67 );68 }69);70DeFiTicker.displayName = 'DeFiTicker';7172export type DeFiTickerIconProps = HTMLAttributes<HTMLImageElement> & {73 src: string;74 symbol: string;75};7677export const DeFiTickerIcon = memo(78 ({ src, symbol, className, ...props }: DeFiTickerIconProps) => {79 if (!src) {80 return null;81 }82 return (83 <Avatar84 className={cn('size-7 border border-border bg-muted p-1', className)}85 >86// … truncated
Files it writes
More from dedevs-ui
All 30 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| ai-branchai-branch | dedevs-ui | Components | Free | no deps | |
| ai-conversationai-conversation | dedevs-ui | Components | Free | no deps | |
| ai-inputai-input | dedevs-ui | Components | Free | no deps | |
| ai-messageai-message | dedevs-ui | Components | Free | no deps | |
| ai-reasoningai-reasoning | dedevs-ui | Components | Free | no deps | |
| ai-responseai-response | dedevs-ui | Components | Free | no deps | |
| ai-serverai-server | dedevs-ui | Components | Free | no deps | |
| ai-simpleai-simple | dedevs-ui | Components | Free | no deps |
