feat: load 3D blueprint from MD file instead of hardcoded data

This commit is contained in:
2026-03-18 14:37:55 +08:00
parent 7139dee794
commit ae044f61d2
6 changed files with 1065 additions and 186 deletions

View File

@@ -69,7 +69,7 @@ export default function DetailPanel() {
</div>
{subsystem.depends_on.length > 0 && (
<div>
<div className="mb-4">
<div className="text-[10px] font-medium text-zinc-500 uppercase tracking-wider mb-2">Depends On</div>
<div className="flex flex-wrap gap-1">
{subsystem.depends_on.map((d, i) => (
@@ -78,6 +78,31 @@ export default function DetailPanel() {
</div>
</div>
)}
{subsystem.boundary && (
<div>
{subsystem.boundary.inputs.length > 0 && (
<div className="mb-3">
<div className="text-[10px] font-medium text-zinc-500 uppercase tracking-wider mb-2">Inputs</div>
<div className="flex flex-wrap gap-1">
{subsystem.boundary.inputs.map((input, i) => (
<span key={i} className="px-1.5 py-0.5 bg-zinc-700/50 text-zinc-300 text-[10px]">{input}</span>
))}
</div>
</div>
)}
{subsystem.boundary.outputs.length > 0 && (
<div>
<div className="text-[10px] font-medium text-zinc-500 uppercase tracking-wider mb-2">Outputs</div>
<div className="flex flex-wrap gap-1">
{subsystem.boundary.outputs.map((output, i) => (
<span key={i} className="px-1.5 py-0.5 bg-zinc-700/50 text-zinc-300 text-[10px]">{output}</span>
))}
</div>
</div>
)}
</div>
)}
</>
)}
@@ -105,7 +130,7 @@ export default function DetailPanel() {
params: {api.params.map(p => p.name).join(', ') || 'none'}
</div>
<div className="text-[10px] text-zinc-600">
returns: {api.returns.type}
returns: {api.returns?.type || 'void'}
</div>
</div>
))}