diff --git a/src/app/(private)/map/[id]/atoms/mapStateAtoms.ts b/src/app/(private)/map/[id]/atoms/mapStateAtoms.ts
index c5d6090d0..9372840fa 100644
--- a/src/app/(private)/map/[id]/atoms/mapStateAtoms.ts
+++ b/src/app/(private)/map/[id]/atoms/mapStateAtoms.ts
@@ -13,6 +13,14 @@ export const mapModeAtom = atom("private");
*/
export const isPublicMapRouteAtom = atom(false);
+/**
+ * `true` on the read-only shared map page (`/share/[token]`), `false`
+ * everywhere else. Components use `useMapEditable()` to hide editing
+ * affordances, and `useMapViews` skips server writes so view-config
+ * changes (map style, timeline) stay client-side only.
+ */
+export const isReadOnlyRouteAtom = atom(false);
+
/** Derived: the navbar is visible exactly when we are NOT on the public route. */
export const showNavbarAtom = atom(
(get) => !get(isPublicMapRouteAtom),
diff --git a/src/app/(private)/map/[id]/components/InspectorPanel/ConfigurableDataRecordsPanel.tsx b/src/app/(private)/map/[id]/components/InspectorPanel/ConfigurableDataRecordsPanel.tsx
index be9da4591..da095dbc1 100644
--- a/src/app/(private)/map/[id]/components/InspectorPanel/ConfigurableDataRecordsPanel.tsx
+++ b/src/app/(private)/map/[id]/components/InspectorPanel/ConfigurableDataRecordsPanel.tsx
@@ -1,5 +1,6 @@
"use client";
+import { useMapEditable } from "../../hooks/useMapEditable";
import { useOpenInspectorConfig } from "../../hooks/useOpenInspectorConfig";
import DataRecordsPanel from "./DataRecordsPanel";
import { InspectorConfigModal } from "./InspectorConfigModal";
@@ -20,6 +21,7 @@ export default function ConfigurableDataRecordsPanel({
}) {
const { config, isModalOpen, setIsModalOpen, openConfig, onUpdateConfig } =
useOpenInspectorConfig(dataSourceId);
+ const editable = useMapEditable();
return (
<>
@@ -29,7 +31,7 @@ export default function ConfigurableDataRecordsPanel({
isLoading={isLoading}
defaultExpanded={defaultExpanded}
hint={hint}
- onClickConfigure={openConfig}
+ onClickConfigure={editable ? openConfig : undefined}
/>
{config && (
{dataSource.name}
-
+ {editable && (
+
+ )}
)}
@@ -311,15 +315,17 @@ export default function InspectorDataTab() {
defaultExpanded={index === 0}
/>
))}
-
+ {editable && (
+
+ )}