import { format } from "date-fns" import { useState, type ReactNode } from "react" import { PageLayout } from "@/app/layout/page-layout" import { Badge } from "@/shared/ui/badge" import { Button } from "@/shared/ui/button" import { Calendar } from "@/shared/ui/calendar" import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/shared/ui/card" import { DatePicker } from "@/shared/ui/date-picker" import { Input } from "@/shared/ui/input" import { Popover, PopoverClose, PopoverContent, PopoverTrigger, } from "@/shared/ui/popover" import { Select, SelectContent, SelectGroup, SelectItem, SelectTrigger, SelectValue, } from "@/shared/ui/select" import { Separator } from "@/shared/ui/separator" import { Skeleton } from "@/shared/ui/skeleton" const signalTypeOptions = [ { label: "全部信号", value: "all" }, { label: "原始 B1", value: "original" }, { label: "超卖类", value: "oversold" }, ] as const export function ComponentsPreviewPage() { const [signalType, setSignalType] = useState("all") const [selectedDate, setSelectedDate] = useState( () => new Date(2026, 7, 7), ) const [calendarDate, setCalendarDate] = useState( () => new Date(2026, 7, 7), ) const [popoverOpen, setPopoverOpen] = useState(false) const signalTypeLabel = signalTypeOptions.find((option) => option.value === signalType)?.label ?? "全部信号" return (

Shared UI

组件预览

集中查看项目 shared/ui 的视觉 token、尺寸和交互状态。这里的示例都是真实组件,后续新增组件可以直接在本页补充验证。

已完成 待确认 失败

当前选择: {signalTypeLabel}

{selectedDate ? `值:${format(selectedDate, "yyyy-MM-dd")}` : "尚未选择日期"}

空值与禁用态
交互提示:打开日期弹层后,可以使用方向键移动、Enter 选择、Escape 关闭;月份切换按钮与日期按钮都保留可见焦点。
} > 打开交互说明

弹层已打开

这里可以承载筛选提示、轻量编辑或上下文信息。

}> 关闭弹层

当前状态:{popoverOpen ? "已打开" : "已关闭"}

数据同步状态 正常
) } function PreviewCard({ children, className, description, title, }: { children: ReactNode className?: string description: string title: string }) { return ( {title} {description} {children} ) }