Files
TinyWaste/apps/web/src/features/game/components/cards/RecipeCard.tsx
T
virtheart e783e6e533 feat: 实现游戏核心功能与前端界面
- 添加游戏核心系统:战斗、任务、日志、随机数生成等
- 实现前端主界面、HUD、底部导航和各类卡片组件
- 添加用户认证系统与游戏存档持久化
- 配置项目基础架构与开发环境
- 补充文档说明与Docker部署支持
2026-04-28 22:16:58 +08:00

38 lines
1.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
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.
import type { RecipeView } from '@tinywaste/game-core';
import { getItemArt } from '../../uiAssets';
import { AssetThumb } from '../AssetThumb';
export function RecipeCard({
recipe,
busy,
onCraft,
}: {
recipe: RecipeView;
busy: boolean;
onCraft: () => void;
}) {
const primaryOutput = recipe.outputs[0];
return (
<article className={`recipe-card ${recipe.craftable ? 'craftable' : ''}`}>
<AssetThumb src={getItemArt(primaryOutput?.itemId)} label={recipe.name} />
<div className="recipe-copy">
<strong>{recipe.name}</strong>
<p>{recipe.desc}</p>
<small>
{recipe.timeCostMin} · -{recipe.energyCost}
</small>
<small>
{recipe.inputs.map((input) => `${input.name} ${input.owned}/${input.count}`).join(' · ')}
</small>
</div>
<div className="recipe-actions">
<button className="small-button" onClick={onCraft} disabled={!recipe.craftable || busy}>
</button>
{recipe.disabledReason ? <em>{recipe.disabledReason}</em> : null}
</div>
</article>
);
}