address code review: POI order matches plan, self-documenting height reserve
Reorders the Verbrannte Straße POIs to plan §8's authored sequence (hunt, investigate, search, then the scout) — purely a keyboard tab-order fix, since hotspots are placed by percentage, not list order. Rewrites the location page's viewport-height reserve as a calc() over the same rem values the top bar and footer already declare as their own min-block-size, with file:line pointers to both, instead of an opaque 191px constant. Doesn't remove the underlying coupling (still no ResizeObserver / shared token), but a future edit to either component's minimum height now has a documented, unit-matching term to update instead of an unexplained magic number. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -23,16 +23,6 @@ export const BURNED_ROAD_POIS: LocationPointOfInterest[] = [
|
||||
yPercent: 44,
|
||||
enabled: true,
|
||||
},
|
||||
{
|
||||
key: 'wounded-scout',
|
||||
title: 'Verwundeter Kundschafter',
|
||||
actionLabel: 'Sprechen',
|
||||
type: 'NPC',
|
||||
iconKey: 'speak',
|
||||
xPercent: 20,
|
||||
yPercent: 60,
|
||||
enabled: true,
|
||||
},
|
||||
{
|
||||
key: 'inspect-tracks',
|
||||
title: 'Verdächtige Spuren',
|
||||
@@ -53,6 +43,16 @@ export const BURNED_ROAD_POIS: LocationPointOfInterest[] = [
|
||||
yPercent: 68,
|
||||
enabled: true,
|
||||
},
|
||||
{
|
||||
key: 'wounded-scout',
|
||||
title: 'Verwundeter Kundschafter',
|
||||
actionLabel: 'Sprechen',
|
||||
type: 'NPC',
|
||||
iconKey: 'speak',
|
||||
xPercent: 20,
|
||||
yPercent: 60,
|
||||
enabled: true,
|
||||
},
|
||||
];
|
||||
|
||||
export const BURNED_ROAD_ACTIONS: LocationPrimaryAction[] = [
|
||||
|
||||
@@ -5,9 +5,18 @@
|
||||
// size instead of clamping, letting the artwork push the action bar off
|
||||
// screen. Giving this page its own definite, viewport-bounded height fixes
|
||||
// that without touching the shell, which other screens still size freely.
|
||||
// Reserve = top bar (~90px) + footer (~53px) + this page's own padding
|
||||
// (2 × var(--ar-space-5) = 48px), both stable across breakpoints.
|
||||
$app-shell-chrome-reserve: 191px;
|
||||
//
|
||||
// Reserve terms are the shell chrome's own `min-block-size` values plus this
|
||||
// page's own padding, so the number tracks its sources rather than sitting as
|
||||
// an opaque constant — if the top bar or footer ever needs more room than its
|
||||
// current floor (a longer name, a wrapped nav row), bump the matching term
|
||||
// here too:
|
||||
// apps/web/src/app/layout/top-bar/top-bar.component.scss (5.6rem)
|
||||
// + apps/web/src/app/layout/game-footer/game-footer.component.scss (3.3rem)
|
||||
// + this page's own padding, 2 × var(--ar-space-5) (3rem)
|
||||
// A small safety margin (0.5rem) absorbs sub-pixel/line-height drift so a
|
||||
// few px of unplanned growth doesn't immediately reopen the clipping bug.
|
||||
$app-shell-chrome-reserve: calc(5.6rem + 3.3rem + 3rem + 0.5rem);
|
||||
|
||||
:host {
|
||||
display: block;
|
||||
|
||||
@@ -85,9 +85,9 @@ describe('LocationPageComponent', () => {
|
||||
expect(hotspots).toHaveLength(4);
|
||||
expect([...hotspots].map((poi) => poi.querySelector('button')?.dataset['poi'])).toEqual([
|
||||
'hunt-area',
|
||||
'wounded-scout',
|
||||
'inspect-tracks',
|
||||
'search-abandoned-wagon',
|
||||
'wounded-scout',
|
||||
]);
|
||||
});
|
||||
|
||||
|
||||
@@ -56,9 +56,9 @@ describe('LocationSidebarComponent', () => {
|
||||
|
||||
expect([...interactions].map((item) => item.textContent?.trim())).toEqual([
|
||||
'Jagd beginnen',
|
||||
'Sprechen',
|
||||
'Untersuchen',
|
||||
'Durchsuchen',
|
||||
'Sprechen',
|
||||
]);
|
||||
});
|
||||
|
||||
|
||||
Reference in New Issue
Block a user