Files
gitlab-instance-0a899031_cn…/app/components/Sidebar.tsx
2026-03-07 12:33:14 -06:00

246 lines
11 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const meetups = [
{ city: "清迈", emoji: "🇹🇭", date: "3月9日 周一", attendees: 12 },
{ city: "曼谷", emoji: "🇹🇭", date: "3月12日 周四", attendees: 8 },
{ city: "巴厘岛", emoji: "🇮🇩", date: "3月14日 周六", attendees: 15 },
{ city: "大理", emoji: "🇨🇳", date: "3月16日 周一", attendees: 6 },
{ city: "里斯本", emoji: "🇵🇹", date: "3月20日 周五", attendees: 23 },
];
const travelingNow = [
{ name: "小明", bg: "#f43f5e", destination: "清迈" },
{ name: "雨晴", bg: "#8b5cf6", destination: "巴厘岛" },
{ name: "阿杰", bg: "#3b82f6", destination: "曼谷" },
{ name: "小燕", bg: "#10b981", destination: "东京" },
{ name: "大伟", bg: "#f59e0b", destination: "里斯本" },
{ name: "佳琪", bg: "#ec4899", destination: "墨西哥城" },
{ name: "志远", bg: "#06b6d4", destination: "柏林" },
{ name: "心怡", bg: "#ef4444", destination: "首尔" },
{ name: "凯文", bg: "#84cc16", destination: "巴塞罗那" },
{ name: "子豪", bg: "#7c3aed", destination: "成都" },
{ name: "浩然", bg: "#0d9488", destination: "大理" },
{ name: "雅琪", bg: "#ea580c", destination: "台北" },
{ name: "天翔", bg: "#6366f1", destination: "布达佩斯" },
{ name: "美玲", bg: "#d946ef", destination: "梅德林" },
{ name: "俊杰", bg: "#14b8a6", destination: "普吉岛" },
{ name: "晓华", bg: "#f97316", destination: "吉隆坡" },
];
const newMembers = [
{ name: "林", bg: "#3b82f6" },
{ name: "张", bg: "#8b5cf6" },
{ name: "陈", bg: "#f43f5e" },
{ name: "周", bg: "#10b981" },
{ name: "吴", bg: "#f59e0b" },
{ name: "杨", bg: "#ec4899" },
{ name: "赵", bg: "#06b6d4" },
{ name: "黄", bg: "#ef4444" },
{ name: "孙", bg: "#84cc16" },
{ name: "马", bg: "#7c3aed" },
{ name: "朱", bg: "#0d9488" },
{ name: "胡", bg: "#ea580c" },
{ name: "郭", bg: "#6366f1" },
{ name: "何", bg: "#d946ef" },
{ name: "高", bg: "#14b8a6" },
{ name: "梁", bg: "#f97316" },
{ name: "郑", bg: "#a855f7" },
{ name: "罗", bg: "#22c55e" },
{ name: "谢", bg: "#e11d48" },
{ name: "韩", bg: "#0ea5e9" },
];
const hotTopics = [
{ title: "清迈最佳共享办公空间推荐 Top 10", views: 2340 },
{ title: "2026年数字游民签证政策汇总", views: 1890 },
{ title: "远程工作者的跨国税务规划指南", views: 1560 },
{ title: "东南亚 vs 拉美:哪个更适合游民?", views: 1230 },
{ title: "新手游民必备工具与装备清单", views: 980 },
];
export default function Sidebar() {
return (
<aside className="w-[320px] shrink-0 hidden lg:block">
<div className="sticky top-20 space-y-4 sidebar-scroll max-h-[calc(100vh-100px)] overflow-y-auto pr-1">
{/* Insurance / Visa Promo */}
<div className="rounded-2xl bg-gradient-to-br from-emerald-50 to-teal-50 border border-emerald-100 p-5">
<div className="flex items-start gap-3 mb-3">
<span className="text-2xl">🛡</span>
<div>
<h3 className="font-bold text-gray-900 text-sm"></h3>
<p className="text-xs text-gray-500 mt-0.5">
</p>
</div>
</div>
<p className="text-xs text-emerald-700 bg-emerald-100/50 rounded-lg px-3 py-2 mb-3">
195+ ¥15/
</p>
<button className="w-full text-center text-sm font-semibold text-emerald-700 hover:text-emerald-800 bg-white border border-emerald-200 rounded-full py-2 transition-colors hover:bg-emerald-50">
</button>
<p className="text-[10px] text-gray-400 text-center mt-2">广</p>
</div>
{/* Upcoming Meetups */}
<div className="rounded-2xl bg-white border border-gray-100 shadow-sm p-5">
<div className="flex items-center justify-between mb-4">
<h3 className="font-bold text-gray-900 text-sm flex items-center gap-1.5">
🍹
</h3>
<span className="text-[11px] text-gray-400">8/</span>
</div>
<div className="space-y-3">
{meetups.map((m) => (
<div
key={m.city + m.date}
className="flex items-center justify-between py-2 border-b border-gray-50 last:border-0 last:pb-0"
>
<div className="flex items-center gap-2.5">
<span className="text-lg">{m.emoji}</span>
<div>
<p className="text-sm font-medium text-gray-800">
{m.city}
</p>
<p className="text-[11px] text-gray-400">{m.date}</p>
</div>
</div>
<span className="text-[11px] text-gray-400 bg-gray-50 rounded-full px-2 py-0.5">
{m.attendees}
</span>
</div>
))}
</div>
<button className="w-full text-center text-xs font-medium text-gray-500 hover:text-gray-700 mt-3 pt-3 border-t border-gray-100 transition-colors">
</button>
</div>
{/* Traveling Now */}
<div className="rounded-2xl bg-white border border-gray-100 shadow-sm p-5">
<div className="flex items-center justify-between mb-4">
<h3 className="font-bold text-gray-900 text-sm flex items-center gap-1.5">
🛩
</h3>
<span className="text-[11px] text-gray-400">
{travelingNow.length}
</span>
</div>
<div className="flex flex-wrap gap-2">
{travelingNow.map((m) => (
<div key={m.name} className="group relative">
<div
className="w-9 h-9 rounded-full flex items-center justify-center text-xs text-white font-medium shadow-sm cursor-pointer hover:scale-110 transition-transform avatar-online"
style={{ backgroundColor: m.bg }}
title={`${m.name} · ${m.destination}`}
>
{m.name.charAt(0)}
</div>
</div>
))}
</div>
</div>
{/* New Members */}
<div className="rounded-2xl bg-white border border-gray-100 shadow-sm p-5">
<div className="flex items-center justify-between mb-4">
<h3 className="font-bold text-gray-900 text-sm flex items-center gap-1.5">
👋
</h3>
<span className="text-[11px] text-gray-400">86/</span>
</div>
<div className="flex flex-wrap gap-2">
{newMembers.map((m) => (
<div
key={m.name}
className="w-9 h-9 rounded-full flex items-center justify-center text-xs text-white font-medium shadow-sm cursor-pointer hover:scale-110 transition-transform"
style={{ backgroundColor: m.bg }}
>
{m.name}
</div>
))}
</div>
</div>
{/* Hot Topics */}
<div className="rounded-2xl bg-white border border-gray-100 shadow-sm p-5">
<h3 className="font-bold text-gray-900 text-sm flex items-center gap-1.5 mb-4">
🔥
</h3>
<div className="space-y-3">
{hotTopics.map((t, i) => (
<a
key={t.title}
href="#"
className="flex items-start gap-2.5 group"
>
<span className="text-xs font-bold text-gray-300 mt-0.5 w-4 shrink-0">
{i + 1}
</span>
<div className="flex-1 min-w-0">
<p className="text-sm text-gray-700 group-hover:text-gray-900 transition-colors line-clamp-1 leading-snug">
{t.title}
</p>
<p className="text-[11px] text-gray-400 mt-0.5">
{t.views.toLocaleString()}
</p>
</div>
</a>
))}
</div>
<button className="w-full text-center text-xs font-medium text-gray-500 hover:text-gray-700 mt-3 pt-3 border-t border-gray-100 transition-colors">
</button>
</div>
{/* Chat CTA */}
<div className="rounded-2xl bg-gradient-to-br from-violet-50 to-purple-50 border border-violet-100 p-5">
<div className="flex items-start gap-3 mb-3">
<span className="text-2xl">💬</span>
<div>
<h3 className="font-bold text-gray-900 text-sm">
</h3>
<p className="text-xs text-gray-500 mt-0.5">
3,200+
</p>
</div>
</div>
<button className="w-full text-center text-sm font-semibold text-violet-700 hover:text-violet-800 bg-white border border-violet-200 rounded-full py-2 transition-colors hover:bg-violet-50">
</button>
</div>
{/* Visa Service */}
<div className="rounded-2xl bg-gradient-to-br from-amber-50 to-orange-50 border border-amber-100 p-5">
<div className="flex items-start gap-3 mb-3">
<span className="text-2xl">🏛</span>
<div>
<h3 className="font-bold text-gray-900 text-sm"></h3>
<p className="text-xs text-gray-500 mt-0.5">
</p>
</div>
</div>
<div className="flex flex-wrap gap-1.5 mb-3">
<span className="text-[11px] bg-amber-100/60 text-amber-700 rounded-full px-2 py-0.5">
🇹🇭
</span>
<span className="text-[11px] bg-amber-100/60 text-amber-700 rounded-full px-2 py-0.5">
🇵🇹
</span>
<span className="text-[11px] bg-amber-100/60 text-amber-700 rounded-full px-2 py-0.5">
🇪🇸 西
</span>
<span className="text-[11px] bg-amber-100/60 text-amber-700 rounded-full px-2 py-0.5">
🇮🇩
</span>
</div>
<button className="w-full text-center text-sm font-semibold text-amber-700 hover:text-amber-800 bg-white border border-amber-200 rounded-full py-2 transition-colors hover:bg-amber-50">
</button>
<p className="text-[10px] text-gray-400 text-center mt-2">广</p>
</div>
</div>
</aside>
);
}