Platform UI components
Trong trang này
@sota/platform/ui là component library public cho native app. Component kế thừa token, theme, focus behavior, portal và accessibility default của Core. Import từ entry point này thay vì Core source path hoặc cài thêm bản Radix/Recharts riêng.
| Nhóm | Exports |
|---|---|
| Action và status | Button, Badge, Spinner, Skeleton, buttonVariants, badgeVariants. |
| Content và layout | Card*, Separator, ScrollArea, ScrollBar. |
| Form | FormField, Label, Input, Textarea, Checkbox, Switch, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectSeparator, SelectTrigger, SelectValue. |
| Overlay | Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, Popover, PopoverContent, PopoverTrigger, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger; portal nằm trong app surface host. |
| Navigation | Tabs, TabsList, TabsTrigger, TabsContent. |
| Grounded prose | CitationText map marker [n] sang source pill. |
| Chart | ChartContainer, ChartStyle, ChartTooltip, ChartTooltipContent, ChartLegend, ChartLegendContent, Area, AreaChart, Bar, BarChart, Line, LineChart, Pie, PieChart, RadialBar, RadialBarChart, CartesianGrid, XAxis, YAxis, ChartLabel, ChartLabelList, Cell, Sector, ReferenceLine. |
Form và card#
import { useState } from 'react';
import {
Button, Card, CardContent, CardFooter, CardHeader, CardTitle,
FormField, Input, Switch,
} from '@sota/platform/ui';
export function DigestSettings() {
const [email, setEmail] = useState('');
const [enabled, setEnabled] = useState(true);
return (
<form onSubmit={(event) => event.preventDefault()}><Card variant="flat">
<CardHeader><CardTitle>Weekly digest</CardTitle></CardHeader>
<CardContent>
<FormField id="digest-email" label="Delivery email" required>
<Input id="digest-email" type="email" value={email}
onChange={(event) => setEmail(event.target.value)} required />
</FormField>
<Switch checked={enabled} onCheckedChange={setEnabled}
aria-label="Enable weekly digest" />
</CardContent>
<CardFooter><Button type="submit" disabled={!email}>Save</Button></CardFooter>
</Card></form>
);
}Button có variant default, secondary, destructive, outline, link, ghost; size default, sm, lg, icon, icon-sm, cùng prop loading. CardTitle mặc định là heading gọn.
Dialog#
import {
Button, Dialog, DialogClose, DialogContent, DialogDescription,
DialogFooter, DialogHeader, DialogTitle, DialogTrigger,
} from '@sota/platform/ui';
export function DeleteDialog() {
return (
<Dialog>
<DialogTrigger asChild><Button variant="destructive">Delete</Button></DialogTrigger>
<DialogContent preset="confirm" size="sm">
<DialogHeader>
<DialogTitle>Delete report?</DialogTitle>
<DialogDescription>This action cannot be undone.</DialogDescription>
</DialogHeader>
<DialogFooter>
<DialogClose asChild><Button variant="outline">Cancel</Button></DialogClose>
<Button variant="destructive">Delete</Button>
</DialogFooter>
</DialogContent>
</Dialog>
);
}Dialog preset gồm modal, editor, confirm, command; size từ sm tới xl. Luôn có DialogTitle và DialogDescription. Chỉ dùng dismissible={false} khi đóng sớm có thể phá action quan trọng đang chạy.
Citation và chart#
import { CitationText } from '@sota/platform/ui';
export function AnswerWithSources() {
return <CitationText text="Revenue grew by 12% [1]." citations={[{
index: 1,
url: 'https://example.com/q3',
title: 'Q3 filing',
snippet: 'Revenue increased twelve percent year over year.',
}]} />;
}import {
Bar, BarChart, CartesianGrid, ChartContainer, ChartTooltip,
ChartTooltipContent, XAxis, YAxis, type ChartConfig,
} from '@sota/platform/ui';
const chartConfig = {
credits: { label: 'Credits', color: 'var(--chart-1)' },
} satisfies ChartConfig;
const data = [{ month: 'Jul', credits: 24 }, { month: 'Aug', credits: 31 }];
export function CreditChart() {
return <ChartContainer config={chartConfig} className="min-h-48 w-full">
<BarChart data={data}>
<CartesianGrid vertical={false} />
<XAxis dataKey="month" /><YAxis />
<ChartTooltip content={<ChartTooltipContent />} />
<Bar dataKey="credits" fill="var(--color-credits)" />
</BarChart>
</ChartContainer>;
}Chỉ import primitive surface dùng. Generated declarations là prop reference chính xác cho Core version đã cài.