diff --git a/frontend/frontend-kit/ui/src/icons/accessibility.ts b/frontend/frontend-kit/ui/src/icons/accessibility.ts index 8740ecc74..2a80f32ba 100644 --- a/frontend/frontend-kit/ui/src/icons/accessibility.ts +++ b/frontend/frontend-kit/ui/src/icons/accessibility.ts @@ -1 +1 @@ -export { SunMoon } from "lucide-react"; +export { Eye, EyeOff, SunMoon } from "lucide-react"; diff --git a/frontend/testing-view/src/components/devTools/ModeSwitcher.tsx b/frontend/testing-view/src/components/devTools/ModeSwitcher.tsx index 04745b2d7..c25c69428 100644 --- a/frontend/testing-view/src/components/devTools/ModeSwitcher.tsx +++ b/frontend/testing-view/src/components/devTools/ModeSwitcher.tsx @@ -14,12 +14,17 @@ export const ModeSwitcher = () => { const modeOverride = useStore((s) => s.modeOverride); const setModeOverride = useStore((s) => s.setModeOverride); const currentMode = useStore((s) => s.appMode); + const isDevToolsVisible = useStore((s) => s.isDevToolsVisible); // Only show in development - if (!import.meta.env.DEV && !import.meta.env.VITE_FORCE_DEV) return null; + if ( + (!import.meta.env.DEV && !import.meta.env.VITE_FORCE_DEV) || + !isDevToolsVisible + ) + return null; return ( -
+
Dev Mode Switcher
diff --git a/frontend/testing-view/src/components/leftSidebar/AppSidebar.tsx b/frontend/testing-view/src/components/leftSidebar/AppSidebar.tsx index 4df0e11e6..35940ea2e 100644 --- a/frontend/testing-view/src/components/leftSidebar/AppSidebar.tsx +++ b/frontend/testing-view/src/components/leftSidebar/AppSidebar.tsx @@ -8,6 +8,7 @@ import { import { PAGES_ARRAY } from "../../constants/pages"; import ColorSchemeToggle from "./ColorSchemeToggle"; import ConnectionStatusGroup from "./ConnectionStatusGroup"; +import DevToolsItem from "./DevToolsItem"; import Logo from "./Logo"; import NavigationGroup from "./NavigationGroup"; import SettingsItem from "./SettingsItem"; @@ -27,8 +28,14 @@ const AppSidebar = ({ backendConnected, ...props }: AppSidebarProps) => { + {/* Only visible in dev mode */} + + +
+
+ diff --git a/frontend/testing-view/src/components/leftSidebar/DevToolsItem.tsx b/frontend/testing-view/src/components/leftSidebar/DevToolsItem.tsx new file mode 100644 index 000000000..95e2dff3d --- /dev/null +++ b/frontend/testing-view/src/components/leftSidebar/DevToolsItem.tsx @@ -0,0 +1,35 @@ +import { + SidebarGroup, + SidebarGroupLabel, + SidebarMenuButton, +} from "@workspace/ui"; +import { Eye, EyeOff } from "@workspace/ui/icons"; +import { useStore } from "../../store/store"; + +const DevToolsItem = () => { + const toggleDevToolsVisible = useStore((s) => s.toggleDevToolsVisible); + const isVisible = useStore((s) => s.isDevToolsVisible); + + const isDev = import.meta.env.DEV || import.meta.env.VITE_FORCE_DEV; + + if (!isDev) return null; + + return ( + + Dev mode + toggleDevToolsVisible()} + > + {isVisible ? ( + + ) : ( + + )} + Toggle mode switcher + + + ); +}; + +export default DevToolsItem; diff --git a/frontend/testing-view/src/store/slices/appSlice.ts b/frontend/testing-view/src/store/slices/appSlice.ts index 7afc5a42f..8d9251000 100644 --- a/frontend/testing-view/src/store/slices/appSlice.ts +++ b/frontend/testing-view/src/store/slices/appSlice.ts @@ -45,6 +45,10 @@ export interface AppSlice { setConfig: (config: ConfigData | null) => void; isLoadingConfig: boolean; setIsLoadingConfig: (loading: boolean) => void; + + // Dev mode + isDevToolsVisible: boolean; + toggleDevToolsVisible: () => void; } export const createAppSlice: StateCreator = (set) => ({ @@ -96,4 +100,9 @@ export const createAppSlice: StateCreator = (set) => ({ setConfig: (config: ConfigData | null) => set({ config }), isLoadingConfig: false, setIsLoadingConfig: (loading: boolean) => set({ isLoadingConfig: loading }), + + // Dev mode + isDevToolsVisible: false, + toggleDevToolsVisible: () => + set((state) => ({ isDevToolsVisible: !state.isDevToolsVisible })), });