diff --git a/src/components/realm/RealmAccessibilityControls.tsx b/src/components/realm/RealmAccessibilityControls.tsx
index 5520c0e..69c2d43 100644
--- a/src/components/realm/RealmAccessibilityControls.tsx
+++ b/src/components/realm/RealmAccessibilityControls.tsx
@@ -25,6 +25,15 @@ export type RealmNavigatorCastle = Readonly<{
r: number;
}>;
+export type RealmNavigatorWaterBody = Readonly<{
+ bodyId: string;
+ label: string;
+ sourceCellKey: string;
+ mouthCellKey: string;
+ sourceCoord: HexCoord;
+ mouthCoord: HexCoord;
+}>;
+
export type RealmNavigatorCloseReason = 'escape' | 'close-button' | 'camera-preset';
export type RealmNavigatorCoordinateJump = Readonly<{
@@ -43,11 +52,13 @@ export type RealmAccessibilityControlsProps = Readonly<{
id: string;
open: boolean;
castles: readonly RealmNavigatorCastle[];
+ waterBodies?: readonly RealmNavigatorWaterBody[];
ownCastleId?: number;
selectedCastleId?: number;
onRequestOpen: () => void;
onRequestClose: (reason: RealmNavigatorCloseReason) => void;
onActivateCastle: (castle: RealmNavigatorCastle) => void;
+ onActivateWaterCell?: (cellKey: string) => void;
coordinateJump?: RealmNavigatorCoordinateJump;
cameraPresets?: readonly RealmNavigatorCameraPreset[];
/** Player chrome may provide its own PFP launcher while reusing this dialog. */
@@ -75,11 +86,13 @@ export function RealmAccessibilityControls({
id,
open,
castles,
+ waterBodies = [],
ownCastleId,
selectedCastleId,
onRequestOpen,
onRequestClose,
onActivateCastle,
+ onActivateWaterCell,
coordinateJump,
cameraPresets = [],
triggerVisible = true,
@@ -126,6 +139,16 @@ export function RealmAccessibilityControls({
? castles.filter((castle) => searchCopy(castle).includes(query))
: castles;
}, [castles, search]);
+ const visibleWaterBodies = useMemo(() => {
+ const query = search.trim().toLocaleLowerCase();
+ return query
+ ? waterBodies.filter((body) => (
+ `${body.label} ${body.sourceCoord.q},${body.sourceCoord.r} ${body.mouthCoord.q},${body.mouthCoord.r}`
+ .toLocaleLowerCase()
+ .includes(query)
+ ))
+ : waterBodies;
+ }, [search, waterBodies]);
const handleDialogKeyDown = (event: KeyboardEvent