packages/ui/README.md
Wealthfolio's shared UI component library built on top of shadcn/ui and Tailwind CSS.
The @wealthfolio/ui package provides a complete design system for Wealthfolio
addons, ensuring consistent styling and user experience across all extensions.
For addons:
npm install @wealthfolio/ui
packages/ui/
āāā src/
ā āāā components/
ā ā āāā ui/ # All shadcn/ui components
ā ā āāā icons.tsx # Wealthfolio icons
ā ā āāā amount-display.tsx
ā ā āāā ... # Financial components
ā āāā lib/
ā ā āāā utils.ts # Utility functions (cn, etc.)
ā āāā index.ts # Main exports
āāā components.json # Shadcn CLI config
āāā tailwind.config.js # Tailwind config
āāā package.json
import { Button, Card, CardContent } from "@wealthfolio/ui";
function MyComponent() {
return (
<Card>
<CardContent>
<Button>Click me</Button>
</CardContent>
</Card>
);
}
import { AmountDisplay, GainAmount, GainPercent } from "@wealthfolio/ui";
function FinancialData() {
return (
<div>
<AmountDisplay amount={1234.56} currency="USD" />
<GainAmount gain={123.45} />
<GainPercent percentage={5.67} />
</div>
);
}
// Import components
import { Button, Card, CardContent, AmountDisplay } from "@wealthfolio/ui";
// Import styles (once in your main file)
import "@wealthfolio/ui/styles";
function MyAddon() {
return (
<Card>
<CardContent>
<Button>Click me</Button>
<AmountDisplay amount={1234.56} currency="USD" />
</CardContent>
</Card>
);
}
Import the CSS file in your addon:
import "@wealthfolio/ui/styles";
Or in your CSS:
@import "@wealthfolio/ui/styles";
All standard shadcn/ui components with Wealthfolio's Flexoki theme applied:
Button - Various button styles and sizesCard - Container component with header/content/footerInput - Form input with validation stylesLabel - Accessible form labelsBadge - Status indicatorsDialog - Modal dialogsDropdown - Dropdown menusTable - Data tablesTabs - Tab navigationAmountDisplay - Formatted currency displayGainAmount - Gain/loss amount with color codingGainPercent - Percentage change displayIcons - Financial and general purpose iconscn() - Class name utility with tailwind-mergeThe components use CSS variables for theming. The main app provides the theme context, so addons automatically inherit the current theme (light/dark mode).
The Flexoki theme is defined in packages/ui/src/styles.css. Updates here
automatically apply to:
@wealthfolio/ui# Build the package
pnpm build
# Watch for changes
pnpm dev
# Type check
pnpm lint
cd packages/ui
npx shadcn-ui@latest add button
npx shadcn-ui@latest add button
When updating shared components:
packages/ui/src/components/cd packages/ui && npm run buildcd packages/uinpx shadcn-ui@latest add [component]src/index.tspackages/ui/src/components/npm run build@wealthfolio/ui instead of creating custom componentscd packages/ui
npx shadcn-ui@latest add [component]
npx shadcn@latest add accordion alert-dialog alert avatar badge button calendar checkbox collapsible command dialog dropdown-menu form hover-card input label popover progress radio-group scroll-area select separator sheet skeleton switch table tabs textarea toggle-group toggle tooltip
npm run build
This strategy ensures consistent UI/UX across the entire Wealthfolio ecosystem while maintaining developer efficiency and user experience.