1.9 KiB
1.9 KiB
Quickstart: Quick HP Input
What this feature does
Adds an inline damage/heal numeric input to each combatant row. Instead of editing the absolute HP value, the game master types a number (e.g., "7") and the system applies it as damage (subtract) or healing (add) to the combatant's current HP.
Key files to modify
apps/web/src/components/quick-hp-input.tsx(NEW) -- The main component: numeric input + damage/heal mode toggle.apps/web/src/components/combatant-row.tsx(MODIFY) -- IntegrateQuickHpInputinto the combatant row layout alongside existing HP display.
Key files to understand (read-only)
packages/domain/src/adjust-hp.ts-- Domain function that applies signed deltas (negative = damage, positive = heal)packages/domain/src/types.ts--Combatanttype with optionalmaxHp/currentHpapps/web/src/hooks/use-encounter.ts--adjustHp(id, delta)hook already exposedapps/web/src/components/ui/input.tsx-- Base input component for consistent stylingapps/web/src/components/ui/button.tsx-- Base button component for toggle
How the pieces connect
QuickHpInput (new component)
|-- User types "7" in damage mode, presses Enter
|-- Calls onAdjustHp(combatantId, -7)
|
CombatantRow
|-- Passes onAdjustHp prop to QuickHpInput
|
useEncounter hook
|-- adjustHp(id, delta) -> adjustHpUseCase -> domain adjustHp()
|-- Domain clamps result to [0, maxHp]
|-- State updates, localStorage persists
Running the feature locally
pnpm --filter web dev # Start Vite dev server at localhost:5173
Running tests
pnpm check # Full quality gate (format + lint + typecheck + test)
pnpm test # All tests
No new domain tests needed -- adjustHp is already fully tested. New tests (if any) would be component-level tests for QuickHpInput keyboard behavior and mode toggling.