Spaces:
Running
Running
feat(roadmap): added "in progress";
Browse files
examples/cyberpunk-standalone/src/components/roadmap-section.tsx
CHANGED
|
@@ -1,12 +1,12 @@
|
|
| 1 |
"use client";
|
| 2 |
-
import { CheckCircle, Clock, Target, Github } from "lucide-react";
|
| 3 |
import { Badge } from "@/components/ui/badge";
|
| 4 |
import { cn } from "@/lib/utils";
|
| 5 |
|
| 6 |
interface RoadmapItem {
|
| 7 |
title: string;
|
| 8 |
description: string;
|
| 9 |
-
status: "completed" | "planned";
|
| 10 |
}
|
| 11 |
|
| 12 |
const roadmapItems: RoadmapItem[] = [
|
|
@@ -26,6 +26,11 @@ const roadmapItems: RoadmapItem[] = [
|
|
| 26 |
description: "Manual robot control with keyboard and slider inputs",
|
| 27 |
status: "completed",
|
| 28 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
{
|
| 30 |
title: "record",
|
| 31 |
description: "Record robot trajectories and sensor data to create datasets",
|
|
@@ -59,6 +64,14 @@ const statusConfig = {
|
|
| 59 |
bgColor: "bg-green-500/10 dark:bg-green-400/5",
|
| 60 |
borderColor: "border-green-500/30 dark:border-green-400/20",
|
| 61 |
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
planned: {
|
| 63 |
icon: Clock,
|
| 64 |
label: "PLANNED",
|
|
@@ -73,6 +86,9 @@ export function RoadmapSection() {
|
|
| 73 |
const completedCount = roadmapItems.filter(
|
| 74 |
(item) => item.status === "completed"
|
| 75 |
).length;
|
|
|
|
|
|
|
|
|
|
| 76 |
const totalCount = roadmapItems.length;
|
| 77 |
|
| 78 |
return (
|
|
@@ -101,15 +117,27 @@ export function RoadmapSection() {
|
|
| 101 |
<div className="bg-primary/30 dark:bg-primary/10 border-b border-primary/20 p-4">
|
| 102 |
<div className="flex items-center justify-between">
|
| 103 |
<div className="flex items-center gap-4">
|
| 104 |
-
<div className="flex items-center gap-
|
| 105 |
-
<div className="
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 113 |
</div>
|
| 114 |
</div>
|
| 115 |
<div className="text-xs text-muted-foreground">
|
|
@@ -152,7 +180,8 @@ export function RoadmapSection() {
|
|
| 152 |
{/* Content */}
|
| 153 |
<div className="flex-1 min-w-0">
|
| 154 |
<h4 className={cn("font-bold text-lg", config.textColor)}>
|
| 155 |
-
{item.title}
|
|
|
|
| 156 |
</h4>
|
| 157 |
<p className="text-muted-foreground text-sm mt-1">
|
| 158 |
{item.description}
|
|
@@ -175,7 +204,8 @@ export function RoadmapSection() {
|
|
| 175 |
<StatusIcon
|
| 176 |
className={cn(
|
| 177 |
"w-4 h-4 flex-shrink-0 ml-3",
|
| 178 |
-
config.textColor
|
|
|
|
| 179 |
)}
|
| 180 |
/>
|
| 181 |
</div>
|
|
|
|
| 1 |
"use client";
|
| 2 |
+
import { CheckCircle, Clock, Loader2, Target, Github } from "lucide-react";
|
| 3 |
import { Badge } from "@/components/ui/badge";
|
| 4 |
import { cn } from "@/lib/utils";
|
| 5 |
|
| 6 |
interface RoadmapItem {
|
| 7 |
title: string;
|
| 8 |
description: string;
|
| 9 |
+
status: "completed" | "in_progress" | "planned";
|
| 10 |
}
|
| 11 |
|
| 12 |
const roadmapItems: RoadmapItem[] = [
|
|
|
|
| 26 |
description: "Manual robot control with keyboard and slider inputs",
|
| 27 |
status: "completed",
|
| 28 |
},
|
| 29 |
+
{
|
| 30 |
+
title: "SO-100 leader arm",
|
| 31 |
+
description: "Leader arm teleoperation support for intuitive robot control",
|
| 32 |
+
status: "in_progress",
|
| 33 |
+
},
|
| 34 |
{
|
| 35 |
title: "record",
|
| 36 |
description: "Record robot trajectories and sensor data to create datasets",
|
|
|
|
| 64 |
bgColor: "bg-green-500/10 dark:bg-green-400/5",
|
| 65 |
borderColor: "border-green-500/30 dark:border-green-400/20",
|
| 66 |
},
|
| 67 |
+
in_progress: {
|
| 68 |
+
icon: Loader2,
|
| 69 |
+
label: "IN PROGRESS",
|
| 70 |
+
dotColor: "bg-orange-500 dark:bg-orange-400",
|
| 71 |
+
textColor: "text-orange-600 dark:text-orange-400",
|
| 72 |
+
bgColor: "bg-orange-500/10 dark:bg-orange-400/5",
|
| 73 |
+
borderColor: "border-orange-500/30 dark:border-orange-400/20",
|
| 74 |
+
},
|
| 75 |
planned: {
|
| 76 |
icon: Clock,
|
| 77 |
label: "PLANNED",
|
|
|
|
| 86 |
const completedCount = roadmapItems.filter(
|
| 87 |
(item) => item.status === "completed"
|
| 88 |
).length;
|
| 89 |
+
const inProgressCount = roadmapItems.filter(
|
| 90 |
+
(item) => item.status === "in_progress"
|
| 91 |
+
).length;
|
| 92 |
const totalCount = roadmapItems.length;
|
| 93 |
|
| 94 |
return (
|
|
|
|
| 117 |
<div className="bg-primary/30 dark:bg-primary/10 border-b border-primary/20 p-4">
|
| 118 |
<div className="flex items-center justify-between">
|
| 119 |
<div className="flex items-center gap-4">
|
| 120 |
+
<div className="flex items-center gap-4">
|
| 121 |
+
<div className="flex items-center gap-2">
|
| 122 |
+
<div className="w-2 h-2 bg-green-500 dark:bg-green-400 rounded-full"></div>
|
| 123 |
+
<span className="text-green-600 dark:text-green-400 text-xs">
|
| 124 |
+
{completedCount} COMPLETED
|
| 125 |
+
</span>
|
| 126 |
+
</div>
|
| 127 |
+
<div className="w-px h-4 bg-border dark:bg-white/10"></div>
|
| 128 |
+
<div className="flex items-center gap-2">
|
| 129 |
+
<div className="w-2 h-2 bg-orange-500 dark:bg-orange-400 rounded-full animate-pulse"></div>
|
| 130 |
+
<span className="text-orange-600 dark:text-orange-400 text-xs">
|
| 131 |
+
{inProgressCount} IN PROGRESS
|
| 132 |
+
</span>
|
| 133 |
+
</div>
|
| 134 |
+
<div className="w-px h-4 bg-border dark:bg-white/10"></div>
|
| 135 |
+
<div className="flex items-center gap-2">
|
| 136 |
+
<div className="w-2 h-2 bg-slate-500 dark:bg-muted-foreground rounded-full"></div>
|
| 137 |
+
<span className="text-slate-600 dark:text-muted-foreground text-xs">
|
| 138 |
+
{totalCount - completedCount - inProgressCount} PLANNED
|
| 139 |
+
</span>
|
| 140 |
+
</div>
|
| 141 |
</div>
|
| 142 |
</div>
|
| 143 |
<div className="text-xs text-muted-foreground">
|
|
|
|
| 180 |
{/* Content */}
|
| 181 |
<div className="flex-1 min-w-0">
|
| 182 |
<h4 className={cn("font-bold text-lg", config.textColor)}>
|
| 183 |
+
{item.title}
|
| 184 |
+
{item.title !== "SO-100 leader arm" ? "()" : ""}
|
| 185 |
</h4>
|
| 186 |
<p className="text-muted-foreground text-sm mt-1">
|
| 187 |
{item.description}
|
|
|
|
| 204 |
<StatusIcon
|
| 205 |
className={cn(
|
| 206 |
"w-4 h-4 flex-shrink-0 ml-3",
|
| 207 |
+
config.textColor,
|
| 208 |
+
item.status === "in_progress" && "animate-spin"
|
| 209 |
)}
|
| 210 |
/>
|
| 211 |
</div>
|