diff --git a/apps/playground/src/components/chat/ChatHeader.tsx b/apps/playground/src/components/chat/ChatHeader.tsx index 2f6a3bd..bf87a07 100644 --- a/apps/playground/src/components/chat/ChatHeader.tsx +++ b/apps/playground/src/components/chat/ChatHeader.tsx @@ -1,8 +1,8 @@ 'use client'; import { Button } from '@tpmjs/ui/Button/Button'; -import { useTheme } from 'next-themes'; import Link from 'next/link'; +import { useTheme } from 'next-themes'; import { useEffect, useState } from 'react'; interface ChatHeaderProps { @@ -13,8 +13,9 @@ export function ChatHeader({ onClear }: ChatHeaderProps): React.ReactElement { const { theme, setTheme } = useTheme(); const [mounted, setMounted] = useState(false); - // Avoid hydration mismatch + // Avoid hydration mismatch - this is intentional for SSR useEffect(() => { + // eslint-disable-next-line react-hooks/set-state-in-effect setMounted(true); }, []); diff --git a/apps/playground/src/components/chat/MessageBubble.tsx b/apps/playground/src/components/chat/MessageBubble.tsx index 45a03b8..85f9285 100644 --- a/apps/playground/src/components/chat/MessageBubble.tsx +++ b/apps/playground/src/components/chat/MessageBubble.tsx @@ -53,6 +53,7 @@ export function MessageBubble({ const now = Date.now(); + // eslint-disable-next-line react-hooks/set-state-in-effect setPartTimings((prev) => { const updated = new Map(prev); diff --git a/apps/playground/src/components/sidebar/SettingsSidebar.tsx b/apps/playground/src/components/sidebar/SettingsSidebar.tsx index 94ecd51..73b14ad 100644 --- a/apps/playground/src/components/sidebar/SettingsSidebar.tsx +++ b/apps/playground/src/components/sidebar/SettingsSidebar.tsx @@ -22,6 +22,7 @@ export function SettingsSidebar(): React.ReactElement { try { const stored = localStorage.getItem(ENV_STORAGE_KEY); if (stored) { + // eslint-disable-next-line react-hooks/set-state-in-effect setEnvVars(JSON.parse(stored)); } } catch (error) {