Lukas
582a42e62d
Change add creature placeholder to "+ Add combatants"
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 22:50:09 +01:00
Lukas
1cf30b3622
Add swipe-to-dismiss gesture for mobile stat block drawer
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 22:48:48 +01:00
Lukas
2ce0ff50b9
Always show add-condition and delete buttons on touch devices
...
Use a pointer-coarse custom variant to bypass hover-dependent
visibility on devices without a precise pointer (phones, tablets).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 22:37:04 +01:00
Lukas
96a7b2d00e
Remove pencil icon, use cursor-text to signal editable name
...
The hover-revealed pencil icon caused layout shift on rows with
conditions. Modern UIs (Figma, Notion, Linear) rely on double-click
without a visible edit icon. Replace with cursor-text on hover.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 22:32:56 +01:00
Lukas
2d8e823eff
Replace single-click rename with double-click, pencil icon, and long-press ( #6 )
...
Single-clicking a combatant name now opens the stat block panel instead of
entering edit mode. Renaming is triggered by double-click, a hover pencil
icon, or long-press on touch. Also fixes condition picker positioning when
near viewport edges.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 22:22:21 +01:00
Lukas
b6e052f198
Overhaul bottom bar: batch add, custom fields, stat block viewer
...
Unify the action bar into a single search input with inline bestiary
dropdown. Clicking a dropdown entry queues it with +/- count controls
and a confirm button; Enter or confirm adds N copies to combat.
When no bestiary match exists, optional Init/AC/MaxHP fields appear
for custom creatures. The eye icon opens a separate search dropdown
to preview stat blocks without leaving the add flow.
Fix batch-add bug where only the last creature got a creatureId by
using store.save() instead of setEncounter() in addFromBestiary.
Prevent dropdown buttons from stealing input focus so Enter confirms
the queued batch.
Remove the now-redundant BestiarySearch component.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 15:27:06 +01:00
Lukas
460c65bf49
Implement stat block panel fold/unfold and pin-to-second-panel
...
Replace the close button and heading with fold/unfold controls that
collapse the panel to a slim right-edge tab showing the creature name
vertically, and add a pin button (xl+ viewports with creature loaded)
that opens the creature in a second left-side panel for simultaneous
reference. Fold state is respected on turn change. 19 acceptance tests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 14:18:15 +01:00
Lukas
95cb2edc23
Redesign top bar with dedicated round badge and centered combatant name
...
Replace the combined "Round N — Name" string with a three-zone flex layout:
left (prev button + R{n} pill badge), center (prominent combatant name with
truncation), right (action buttons + next button). Adds 13 unit tests
covering all user stories including layout robustness and empty state.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 12:39:57 +01:00
Lukas
0c903bc9a5
Fix ConfirmButton Enter/Space keydown bubbling to parent row handler
...
The button's onClick stopped mouse event propagation, but keyboard
Enter/Space fired a separate keydown event that bubbled to the
combatant row's onKeyDown, opening the stat block side panel instead
of arming/confirming the button.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 10:04:27 +01:00
Lukas
0747d044f3
Implement the 032-inline-confirm-buttons feature that replaces single-click destructive actions with a reusable ConfirmButton component providing inline two-step confirmation (click to arm, click to execute), applied to the remove combatant and clear encounter buttons, with CSS scale pulse animation, 5-second auto-revert, click-outside/Escape/blur dismissal, full keyboard accessibility, and 13 unit tests via @testing-library/react
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 09:51:21 +01:00
Lukas
69363d4f7d
Implement the 031-quality-gates-hygiene feature that strengthens automated quality gates by adding pnpm audit to the check script, v8 coverage thresholds with per-directory auto-ratchet (domain 96%, adapters 71%, persistence 87%), Biome cognitive complexity enforcement (max 15), and keyboard accessibility for the combatant row, while cleaning up all blanket biome-ignore comments, refactoring 5 overly complex functions into smaller helpers, and codifying the early-enforcement principle in the constitution and CLAUDE.md
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-11 00:52:29 +01:00
Lukas
94d125d9c4
Implement the 030-bulk-import-sources feature that adds a one-click bulk import button to load all bestiary sources at once, with real-time progress feedback in the side panel and a toast notification when the panel is closed, plus completion/failure reporting with auto-dismiss on success and persistent display on partial failure, while also hardening the bestiary normalizer to handle variable stat blocks (spell summons with special AC/HP/CR) and skip malformed monster entries gracefully
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-10 23:29:34 +01:00
Lukas
91120d7c82
Implement the 029-on-demand-bestiary feature that replaces the bundled XMM bestiary JSON with a compact search index (~350KB) and on-demand source loading, where users explicitly provide a URL or upload a JSON file to fetch full stat block data per source, which is then normalized and cached in IndexedDB (with in-memory fallback) so creature stat blocks load instantly on subsequent visits while keeping the app bundle small and never auto-fetching copyrighted content
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-10 22:46:13 +01:00
Lukas
99d1ba1bcd
Implement the 028-semantic-hover-tokens feature that unifies hover colors across all interactive UI components via six CSS custom property tokens (three text, three background) defined in the Tailwind v4 theme, replacing hardcoded hover classes in 9 component files plus the shared Button primitive with semantic token references so all hover colors can be globally reconfigured from one place
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-10 19:50:22 +01:00
Lukas
f029c1a85b
Implement the 027-ui-polish feature that adds six combatant row improvements (inline conditions, row-click stat block, hover-only remove button, AC shield shape, expanded concentration click target, larger d20 icon) plus top bar redesign with icon-only StepBack/StepForward navigation buttons, dark-themed scrollbars, and multiple UX fixes including stat block panel stability during initiative rolls and mobile touch safety for hidden buttons
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-10 19:00:49 +01:00
Lukas
d5f7b6ee36
Implement the 026-roll-initiative feature that adds d20 roll buttons for bestiary combatants' initiative using a click-to-edit pattern (d20 icon when empty, plain text when set), plus a Roll All button in the top bar that batch-rolls for all unrolled bestiary combatants, with randomness confined to the adapter layer and the domain receiving pre-resolved dice values
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-10 16:29:09 +01:00
Lukas
5b0bac880d
Implement the 025-display-initiative feature that adds initiative modifier and passive initiative display to creature stat blocks, calculated as DEX modifier + (proficiency multiplier × proficiency bonus) from bestiary data, shown in MM 2024 format on the AC line
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-10 11:27:46 +01:00
Lukas
c6349928eb
Implement the 024-fix-hp-popover-overflow feature that switches the HP adjustment popover from absolute to fixed positioning with viewport-aware clamping so it stays fully visible and causes no horizontal scrollbar, even when the HP display is near the right edge of the viewport
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-09 16:50:39 +01:00
Lukas
24198c25f1
Implement the 023-clear-encounter feature that adds a clear encounter button with confirmation dialog to remove all combatants and reset round/turn counters, with the cleared state persisting across page refreshes
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-09 13:43:42 +01:00
Lukas
11c4c0237e
Implement the 022-fixed-layout-bars feature that pins turn navigation to the top and add-creature bar to the bottom of the encounter tracker with only the combatant list scrolling between them, and auto-scrolls to the active combatant on turn change
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-09 11:36:59 +01:00
Lukas
fa078be2f9
Implement the 021-bestiary-statblock feature that adds a searchable D&D 2024 Monster Manual creature library with inline autocomplete suggestions, full stat block display in a fixed side panel, auto-numbering of duplicate creature names, HP/AC pre-fill from bestiary data, and automatic stat block display on turn change for wide viewports
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-09 11:01:07 +01:00
Lukas
04a4f18f98
Implement the 020-fix-zero-hp-opacity feature that replaces container-level opacity dimming with element-level opacity on individual leaf elements so that HP popover and condition picker render at full opacity for unconscious combatants
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 15:43:27 +01:00
Lukas
0c0da9b90e
Implement the 019-combatant-row-declutter feature that replaces always-visible HP controls and AC/MaxHP inputs with compact click-to-edit and click-to-adjust patterns in the encounter tracker
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 15:07:04 +01:00
Lukas
e59fd83292
Implement the 018-combatant-concentration feature that adds a per-combatant concentration toggle with Brain icon, purple border accent, and damage pulse animation in the encounter tracker
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 14:41:59 +01:00
Lukas
febe892e15
Implement the 017-combat-conditions feature that adds D&D 5e status conditions to combatants with icon tags, color coding, and a compact toggle picker in the encounter tracker
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 11:29:39 +01:00
Lukas
78c6591973
Implement the 016-combatant-ac feature that adds an optional Armor Class field to combatants with shield icon display and inline editing in the encounter tracker
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-06 10:41:56 +01:00
Lukas
56bced8481
Implement the 014-inline-hp-delta feature that replaces the damage/heal mode toggle with explicit action buttons and Enter-to-damage keyboard shortcut
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 23:52:03 +01:00
Lukas
97d3918cef
Implement the 013-hp-status-indicators feature that adds visual HP status indicators to combatant rows with a pure domain function deriving bloodied/unconscious states
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 23:29:24 +01:00
Lukas
7d440677be
Implement the 012-turn-navigation feature that adds a RetreatTurn domain operation and relocates turn controls to a navigation bar at the top of the encounter tracker
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 23:11:11 +01:00
Lukas
a0d85a07e3
Implement the 011-quick-hp-input feature that adds an inline damage/heal numeric input per combatant row with mode toggle, keyboard workflow, and visual distinction
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 22:43:26 +01:00
Lukas
1c40bf7889
Implement the 010-ui-baseline feature that establishes a modern UI using Tailwind CSS v4 and shadcn/ui-style components for the encounter screen
...
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com >
2026-03-05 18:36:39 +01:00