import { Select } from "@kobalte/core/select" import { createEffect, createMemo, createSignal, type Component } from "solid-js" import { ChevronDown, Terminal } from "lucide-solid" import OpenCodeBinarySelector from "../opencode-binary-selector" import EnvironmentVariablesEditor from "../environment-variables-editor" import { useConfig } from "../../stores/preferences" import type { ServerLogLevel } from "../../stores/preferences" import { useI18n } from "../../lib/i18n" type LogLevelOption = { value: ServerLogLevel label: string } export const OpenCodeSettingsSection: Component = () => { const { t } = useI18n() const { serverSettings, updateLastUsedBinary, updateLogLevel } = useConfig() const [selectedBinary, setSelectedBinary] = createSignal(serverSettings().opencodeBinary || "opencode") const logLevelOptions = createMemo(() => [ { value: "DEBUG", label: t("settings.opencode.logLevel.option.debug") }, { value: "INFO", label: t("settings.opencode.logLevel.option.info") }, { value: "WARN", label: t("settings.opencode.logLevel.option.warn") }, { value: "ERROR", label: t("settings.opencode.logLevel.option.error") }, ]) const selectedLogLevel = createMemo( () => logLevelOptions().find((option) => option.value === serverSettings().logLevel) ?? logLevelOptions()[0], ) createEffect(() => { const binary = serverSettings().opencodeBinary || "opencode" setSelectedBinary((current) => (current === binary ? current : binary)) }) const handleBinaryChange = (binary: string) => { setSelectedBinary(binary) updateLastUsedBinary(binary) } return (

{t("settings.opencode.runtime.title")}

{t("settings.opencode.runtime.subtitle")}

{t("settings.scope.server")}

{t("settings.opencode.logLevel.title")}

{t("settings.opencode.logLevel.subtitle")}

{t("settings.scope.server")}
{t("settings.opencode.logLevel.selector.title")}
{t("settings.opencode.logLevel.selector.subtitle")}
value={selectedLogLevel()} onChange={(option) => { if (!option) return updateLogLevel(option.value) }} options={logLevelOptions()} optionValue="value" optionTextValue="label" itemComponent={(itemProps) => ( {itemProps.item.rawValue.label} )} >
> {(state) => ( {state.selectedOption()?.label} )}

{t("advancedSettings.environmentVariables.title")}

{t("advancedSettings.environmentVariables.subtitle")}

{t("settings.scope.server")}
) }