Player display animations, death visual, upstream merge #5

Merged
robert merged 7 commits from single-source into main 2026-07-07 11:21:24 -04:00
Collaborator

Follow-up work on single-source branch. Merged upstream/main fixes + new player display features.

Player display animations

  • Active->inactive: scale/slide/fade out, then removed from display list
  • Inactive->active: scale/slide/fade in
  • displayParticipants state separate from raw participants so cards stay mounted during exit animation
  • DM display unchanged (keeps inactive visible)
  • 1-list order preserved, no re-sort

Death visual

  • Alive->dead: dim + desaturate + red rim + pulsing skull overlay
  • Dead stays visible, no removal
  • Dying/stable: full visible, no fade

Merged

  • upstream/main (8cf3dad..3646a9c): src/App.js fixes

307 tests, all green.

Follow-up work on single-source branch. Merged upstream/main fixes + new player display features. ## Player display animations - Active->inactive: scale/slide/fade out, then removed from display list - Inactive->active: scale/slide/fade in - displayParticipants state separate from raw participants so cards stay mounted during exit animation - DM display unchanged (keeps inactive visible) - 1-list order preserved, no re-sort ## Death visual - Alive->dead: dim + desaturate + red rim + pulsing skull overlay - Dead stays visible, no removal - Dying/stable: full visible, no fade ## Merged - upstream/main (8cf3dad..3646a9c): src/App.js fixes 307 tests, all green.
keen added 2 commits 2026-07-06 22:42:02 -04:00
Player display now tracks displayParticipants separately from raw encounter
participants so active->inactive can animate out before removal, and inactive->
active can animate in. This preserves 1-list order, keeps DM display behavior
unchanged, and avoids fading dying/stable participants.

PlayerParticipantCard handles transitions:
- active->inactive: scale/slide/fade out, then parent removes from display list
- inactive->active: scale/slide/fade in
- alive->dead: keep visible with dim/desaturate/red-rim death cue + skull pulse
- dying/stable: full visible, no fade/removal

DisplayView inactive characterization updated to wait for exit animation before
asserting removal. TODO item removed.
keen added 1 commit 2026-07-06 22:48:25 -04:00
transition-all duration-1000 on PlayerParticipantCard wrapper slowed current-
turn ring/border animation. Turn pointer visibly laggy at 400ms turn intervals.

Fix: scoped transition properties. opacity/transform/filter/border-color = 1s
for fade/death animations. box-shadow = 300ms for current-turn ring highlight,
so turn pointer snaps between participants while fades stay smooth.
keen added 1 commit 2026-07-06 23:22:36 -04:00
- .dockerignore: exclude node_modules/.git/tmp/data/logs
- Dockerfile: BuildKit cache mount for npm, --omit=dev at install, drop
  npm prune step
- Reorder layers: shared/src/frontend copy before build, server copy +
  better-sqlite3 rebuild after. Server/shared changes no longer invalidate
  frontend build layer unless shared (FE dep) changes
- Remove duplicate shared COPY in runtime stage (bundled in FE build)
- docker/restart.sh: stop + rebuild + start in one script
keen added 2 commits 2026-07-06 23:50:05 -04:00
Both Dockerfiles (root firebase-mode + docker/ caddy) bumped node:18-alpine
to node:22-alpine. better-sqlite3 v12 (from PR #6) requires node 20+; node 18
builds fail with node-gyp/python errors. openssl-legacy-provider flag kept
for react-scripts 5 compat.

.dockerignore: removed .env* exclusion so .env.local COPY works in firebase
image build.

mock firestore applyConstraints comment: offset handled by adapter (firebase.js
slices), mock never sees it — clarified dead-code reasoning.
Author
Collaborator

@robert heads up: this PR bumps both Dockerfiles (root firebase-mode + docker/ caddy) from node:18-alpine to node:22-alpine. Needed because PR #6 bumped better-sqlite3 to v12 which requires node 20+. Node 18 builds fail (node-gyp/python errors, no prebuilt binary). openssl-legacy-provider flag kept for react-scripts 5 compat. Also removed .env* from .dockerignore so root Dockerfile .env.local COPY works.

@robert heads up: this PR bumps both Dockerfiles (root firebase-mode + docker/ caddy) from node:18-alpine to node:22-alpine. Needed because PR #6 bumped better-sqlite3 to v12 which requires node 20+. Node 18 builds fail (node-gyp/python errors, no prebuilt binary). openssl-legacy-provider flag kept for react-scripts 5 compat. Also removed .env* from .dockerignore so root Dockerfile .env.local COPY works.
robert added 1 commit 2026-07-07 11:21:14 -04:00
robert merged commit 19de9fcf75 into main 2026-07-07 11:21:24 -04:00
Sign in to join this conversation.