diff --git a/CHANGELOG.md b/CHANGELOG.md index 83c7525..64d4f1c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13513,3 +13513,35 @@ Neste steg: **Ikke rullet ut ennå** -- venter på bekreftelse fra bruker (og på V0-eksporten for punkt 1 før neste utrullingsrunde, om bruker ønsker å samle dem). + +140. **Flytende "Registrer score" når banekartet er utvidet, 2026-08-20.** + Direkte oppfølging av #139 sitt punkt 1 -- V0-eksporten kom inn samme + dag. Claude skrev prompten, bruker kjørte den og lastet opp + (`floating-register-score.tsx`). + + `round-detail.tsx`: ny liten `RegisterScoreButton`-komponent (samme + visuelle knapp, nå gjenbrukt to steder). I `PlayerHoleCards`: + - Banekart kollapset (standard): knappen ligger i normal side-flyt, + uendret oppførsel fra før. + - Banekart utvidet: knappen er i stedet `fixed inset-x-0 bottom-0`, + festet til viewportets bunn uansett scroll-posisjon i det høye + diagrammet. Gradient-scrim (`bg-gradient-to-t from-background`) + + skygge løfter den visuelt over innholdet under. `aria-hidden` + + `pointer-events-none` når skjult/i overgang -- blokkerer aldri klikk + på innhold bak. `env(safe-area-inset-bottom)` i bunnpaddingen for + gest-navigasjon. Samme klikk-handling (`scrollIntoView` til + spillerlisten) begge steder -- kun plasseringen er ny. + - Liten spacer (`h-20`) lagt til nederst når kartet er utvidet, slik + at siste innhold (kommentarfeltet) kan scrolles fritt for den + flytende knappen i stedet for å bli permanent skjult bak den. + + **Verifisert i scratch:** mocket `RoundDetail` med ekte + tee/green-koordinater + stubbet GPS (samme oppsett som #139). + Bekreftet: kollapset ser uendret ut, utvidet gjør knappen flytende og + forblir synlig ved scroll, kun ÉN "Registrer score"-knapp i a11y-treet + om gangen (aldri to samtidig), klikk hopper fortsatt korrekt til + spillerlisten (med riktig `scroll-mt-28` fra #139), ingen blokkering + av klikk på innhold bak den flytende sonen. Sjekket lys og mørk modus. + `tsc --noEmit` rent. + + **Ikke rullet ut ennå** -- venter på bekreftelse fra bruker. diff --git a/frontend/components/round-detail.tsx b/frontend/components/round-detail.tsx index 81f4b10..c586488 100644 --- a/frontend/components/round-detail.tsx +++ b/frontend/components/round-detail.tsx @@ -6634,6 +6634,23 @@ function sumForPlayer(list: ApiHole[] | undefined, numbers: number[]): { strokes // Trykk åpner SAMME eksisterende fullskjerm-veiviser som før (onOpenEntry) // -- selve registreringsvinduet er bevisst IKKE rørt av denne rundens // V0-prompt. +// "Registrer score" -- samme knapp, to plasseringer (se PlayerHoleCards): +// i normal side-flyt når banekartet er kollapset, flytende festet nederst +// på skjermen når det er utvidet (V0-eksport, 2026-08-20, brukerønske -- +// det utvidede diagrammet kunne dytte knappen langt utenfor synlig område). +function RegisterScoreButton({ onClick }: { onClick: () => void }) { + return ( + + ) +} + function PlayerHoleCards({ roundId, players, @@ -6835,15 +6852,16 @@ function PlayerHoleCards({ {/* Alltid synlig, tydelig snarvei rett til score-registreringen under -- samme grunn som knappen over: en førstegangsbruker skal ikke - måtte oppdage ved et tilfeldig sveip at dette finnes. */} - + måtte oppdage ved et tilfeldig sveip at dette finnes. KUN i normal + side-flyt når banekartet er kollapset -- utvidet blir den samme + knappen flytende i stedet, se render-stedet nederst i denne + komponenten (brukerønske 2026-08-20: det utvidede diagrammet + kunne dytte knappen helt utenfor synlig skjermbilde). */} + {!mapExpanded && ( + playerListRef.current?.scrollIntoView({ behavior: "smooth", block: "start" })} + /> + )} {isTwoSided && sides.length === 2 && (
@@ -7083,6 +7101,34 @@ function PlayerHoleCards({ onClose={() => setHistoryPlayerId(null)} /> )} + + {/* Flytende "Registrer score" (V0-eksport, 2026-08-20) -- kun mens + banekartet er utvidet. `fixed` posisjonerer mot selve viewporten + (ingen ancestor her setter transform/filter, så det er trygt), + gradient-scrim + skygge løfter den visuelt over innholdet under, + `env(safe-area-inset-bottom)` unngår at den klemmes helt inntil + kanten på telefoner med gest-navigasjon. `pointer-events-none` på + selve scrim-sonen når skjult/i overgang, slik at den aldri + blokkerer klikk på innhold bak. */} +
+
+
+ playerListRef.current?.scrollIntoView({ behavior: "smooth", block: "start" })} + /> +
+
+
+ {/* Gir siste innhold på siden rom til å scrolle klar av den flytende + knappen i stedet for å bli permanent skjult bak den. */} + {mapExpanded && ) }