diff --git a/webview-ui/src/components/settings/TemperatureControl.tsx b/webview-ui/src/components/settings/TemperatureControl.tsx
index 321f25f1b7..ed5bc1b098 100644
--- a/webview-ui/src/components/settings/TemperatureControl.tsx
+++ b/webview-ui/src/components/settings/TemperatureControl.tsx
@@ -51,7 +51,7 @@ export const TemperatureControl = ({ value, onChange, maxValue = 1 }: Temperatur
min="0"
max={maxValue}
step="0.05"
- value={value}
+ value={value ?? 0}
onChange={(e) => {
const newValue = parseFloat(e.target.value)
onChange(isNaN(newValue) ? undefined : newValue)
diff --git a/webview-ui/src/components/settings/__tests__/TemperatureControl.test.tsx b/webview-ui/src/components/settings/__tests__/TemperatureControl.test.tsx
new file mode 100644
index 0000000000..8401f3d5fb
--- /dev/null
+++ b/webview-ui/src/components/settings/__tests__/TemperatureControl.test.tsx
@@ -0,0 +1,75 @@
+import { render, screen, fireEvent } from "@testing-library/react"
+import { TemperatureControl } from "../TemperatureControl"
+
+describe("TemperatureControl", () => {
+ it("renders with default temperature disabled", () => {
+ const onChange = jest.fn()
+ render()
+
+ const checkbox = screen.getByRole("checkbox")
+ expect(checkbox).not.toBeChecked()
+ expect(screen.queryByRole("slider")).not.toBeInTheDocument()
+ })
+
+ it("renders with custom temperature enabled", () => {
+ const onChange = jest.fn()
+ render()
+
+ const checkbox = screen.getByRole("checkbox")
+ expect(checkbox).toBeChecked()
+
+ const slider = screen.getByRole("slider")
+ expect(slider).toBeInTheDocument()
+ expect(slider).toHaveValue("0.7")
+ })
+
+ it("updates when checkbox is toggled", () => {
+ const onChange = jest.fn()
+ render()
+
+ const checkbox = screen.getByRole("checkbox")
+
+ // Uncheck - should clear temperature
+ fireEvent.click(checkbox)
+ expect(onChange).toHaveBeenCalledWith(undefined)
+
+ // Check - should restore previous temperature
+ fireEvent.click(checkbox)
+ expect(onChange).toHaveBeenCalledWith(0.7)
+ })
+
+ it("updates temperature when slider changes", () => {
+ const onChange = jest.fn()
+ render()
+
+ const slider = screen.getByRole("slider")
+ fireEvent.change(slider, { target: { value: "0.8" } })
+
+ expect(onChange).toHaveBeenCalledWith(0.8)
+ })
+
+ it("respects maxValue prop", () => {
+ const onChange = jest.fn()
+ render()
+
+ const slider = screen.getByRole("slider")
+ expect(slider).toHaveAttribute("max", "2")
+ })
+
+ it("syncs checkbox state when value prop changes", () => {
+ const onChange = jest.fn()
+ const { rerender } = render()
+
+ // Initially checked
+ const checkbox = screen.getByRole("checkbox")
+ expect(checkbox).toBeChecked()
+
+ // Update to undefined
+ rerender()
+ expect(checkbox).not.toBeChecked()
+
+ // Update back to a value
+ rerender()
+ expect(checkbox).toBeChecked()
+ })
+})