47c71e6f54
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 8m47s
- Implemented complete design system with 40+ CSS custom properties - Created 9 UI primitives (GameCard, SectionHeader, StatRow, ManaBar, ElementBadge, ValueDisplay, ActionButton, SkillRow, TooltipInfo) - Redesigned all tabs: Spire, Skills, Stats, Equipment, Crafting, Attunements, Golemancy, Spells, Loot, Achievements, Lab, Debug - Added toast notification system (GameToast) with success/warning/error/info types - Added confirmation dialogs for destructive actions - Removed all dev artifacts and component name labels - Added empty states to all tabs - Replaced emoji icons with Lucide React icons - Added enchantPower placeholder to StatsTab and EquipmentTab - Mobile audit passed at 375px viewport - Build passes with 0 errors, lint passes with 0 errors Sub-tasks completed: - ST1: Design System Implementation - ST2: Global Layout & Header - ST3: Left Panel (Mana Display & Action Area) - ST4: Skills Tab - ST5: Spire Tab & Spire Mode UI - ST6: Stats Tab - ST7: Equipment & Crafting Tabs - ST8: Attunements Tab - ST9: Remaining Tabs - ST10: Toast System & Confirmation Dialogs Documentation: 15+ files in docs/task4/
7.0 KiB
7.0 KiB
Sub-task 6 Progress: Stats Tab Redesign
Status: ✅ COMPLETE
Date: 2024-04-27
Summary
Successfully redesigned the Stats Tab to use the new design system components, creating a detailed character sheet feel as specified in the requirements.
Changes Made
1. ManaStatsSection (src/components/game/stats/ManaStatsSection.tsx)
- ✅ Wrapped in
<GameCard variant="default">instead of raw Card - ✅ Added
<SectionHeader>with title "Mana Stats" and Droplet icon - ✅ Replaced all manual
flex justify-betweendivs with<StatRow>components - ✅ Added highlight colors for different stat types (water, fire, warning, success, danger)
- ✅ Grouped into logical sections: Max Mana, Regen, Click/Multipliers
- ✅ Added Enchantment Power placeholder - reads from
effects.enchantPowerif present, defaults to×1.0 - ✅ All multipliers highlighted using appropriate highlight colors (warning for gold/amber)
- ✅ Removed all raw hex values - using CSS variables only
- ✅ Fixed import to use correct paths (
@/lib/game/storeand@/lib/game/effects)
2. ManaTypeBreakdown (src/components/game/stats/ManaTypeBreakdown.tsx)
- ✅ Wrapped in
<GameCard variant="default">instead of raw Card - ✅ Added
<SectionHeader>with title "Mana Type Breakdown" and Droplet icon - ✅ Raw mana appears FIRST with
<StatRow>components for Current, Cap, Regen - ✅ Elemental mana types show in unlock order with
<ElementBadge>for each type - ✅ Each element shows:
[ElementBadge] [Name] | Current: X | Cap: Y | Regen: +Z/hr - ✅ Modifiers section shows attunement conversions and drain effects
- ✅ All rows use
<StatRow>component - ✅ Element colors used via highlight prop matching element type
- ✅ No raw hex values - all CSS vars
- ✅ Fixed import to use correct path (
@/lib/game/store)
3. CombatStatsSection (src/components/game/stats/CombatStatsSection.tsx)
- ✅ Wrapped in
<GameCard variant="default">instead of raw Card - ✅ Added
<SectionHeader>with title "Combat Stats" and Swords icon - ✅ All stat pairs converted to
<StatRow>with appropriate highlight colors (fire, warning) - ✅ No raw hex values - using CSS variables
- ✅ Fixed import to use correct path (
@/lib/game/store)
4. StudyStatsSection (src/components/game/stats/StudyStatsSection.tsx)
- ✅ Wrapped in
<GameCard variant="default">instead of raw Card - ✅ Added
<SectionHeader>with title "Study Stats" and BookOpen icon - ✅ All stat pairs converted to
<StatRow>with light highlight for study stats - ✅ No raw hex values - using CSS variables
- ✅ Fixed import to use correct path (
@/lib/game/store)
5. UpgradeEffectsSection (src/components/game/stats/UpgradeEffectsSection.tsx)
- ✅ Wrapped in
<GameCard variant="default">instead of raw Card - ✅ Added
<SectionHeader>with title "Active Skill Upgrades" and Star icon - ✅ Skill upgrades displayed as compact tags in a grid layout
- ✅ No raw hex values - using CSS variables
- ✅ Fixed import to use correct paths (
@/lib/game/storeand@/lib/game/types/skills) - ✅ Fixed type error - changed from
SkillUpgradeChoicetoSkillPerkChoiceand addedskillIdto the interface
6. StatsTab (src/components/game/tabs/StatsTab.tsx)
- ✅ Removed old Card imports (no longer needed)
- ✅ Added imports for GameCard, SectionHeader, StatRow, ElementBadge from
@/components/ui - ✅ Element Stats section - Now wrapped in GameCard with SectionHeader
- Uses StatRow for all stat pairs
- Element pools displayed with CSS vars
- ✅ Pact Bonuses section - Now wrapped in GameCard with SectionHeader
- Pact multiplier badges use CSS vars
- ✅ Loop Stats section - Now wrapped in GameCard with SectionHeader
- All stat displays use bg-[var(--bg-sunken)] and text-[var(--text-secondary)]
- ✅ All sections clearly grouped with GameCards
- ✅ No raw hex values - all CSS vars
- ✅ Fixed import paths for GameStore and UnifiedEffects
- ✅ Deleted old duplicate file at
src/components/game/StatsTab.tsx
7. App Page (src/app/page.tsx)
- ✅ Added missing computations for
manaWaterfallBonus,hasManaWaterfall,hasFlowSurge,hasManaOverflow,hasEternalFlow - ✅ Updated
effectiveRegento includemanaWaterfallBonus - ✅ Passes all required props to
StatsTab
Design System Usage
Components Used:
<GameCard variant="default">- All section wrappers<SectionHeader title="..." action={icon} />- All section titles<StatRow label="..." value="..." highlight="..." />- All label/value pairs<ElementBadge element="..." showIcon size="sm" />- All mana type displays
CSS Variables Used:
- Background:
var(--bg-sunken),var(--bg-surface) - Borders:
var(--border-default),var(--border-subtle) - Text:
var(--text-primary),var(--text-secondary),var(--text-muted) - Mana Colors:
var(--mana-water),var(--mana-fire),var(--mana-light), etc. - Interactive:
var(--interactive-primary),var(--mana-light)for gold/amber - Semantic:
var(--color-success),var(--color-warning),var(--color-danger)
Acceptance Criteria Verification
- ✅ Mana breakdown section present with per-type rows - Raw mana first, then elements in unlock order
- ✅ All values reactive - Using store values, updates without page reload
- ✅ Clearly grouped sections with GameCards - All 7 sections wrapped in GameCard
- ✅ Enchantment Power placeholder visible - Added to ManaStatsSection, reads from effects.enchantPower
- ✅ No raw hex values - All colors use CSS variables from design system
Dependencies
- ✅ Sub-task 1 (Design System) is COMPLETE - GameCard, SectionHeader, StatRow, ElementBadge all exist
Lint Check
- ✅
npm run lintpasses for all modified files - Note: One pre-existing lint error in
src/hooks/use-mobile.ts(not part of this subtask)
TypeScript Check
- ✅
npx tsc --noEmitpasses for all modified files - All TypeScript errors in the modified files have been resolved
- Fixed type error in UpgradeEffectsSection by using correct types
Files Modified
src/components/game/stats/ManaStatsSection.tsxsrc/components/game/stats/ManaTypeBreakdown.tsxsrc/components/game/stats/CombatStatsSection.tsxsrc/components/game/stats/StudyStatsSection.tsxsrc/components/game/stats/UpgradeEffectsSection.tsxsrc/components/game/tabs/StatsTab.tsxsrc/app/page.tsx
Files Deleted
src/components/game/StatsTab.tsx(old duplicate file)
Next Steps
- Task 5 (effects wiring) should wire
effects.enchantPowervalue - Sub-task 6 is complete and ready for integration testing
Testing Notes
The following should be verified in the browser:
- Stats Tab renders with all sections properly grouped
- Mana Type Breakdown shows raw mana first, then elements with ElementBadge
- Enchantment Power shows "×1.0" (or actual value when task5 wires it)
- All text colors use CSS variables (no hardcoded hex)
- Hover effects and transitions work (GameCard hover, StatRow styling)
- Responsive layout works (grid-cols-1 md:grid-cols-2 patterns preserved)