Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Jack <jack@anoma.ly> Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: Shoubhit Dash <shoubhit2005@gmail.com> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: James Long <longster@gmail.com> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: starptech <starptech@starptechs-MBP.fritz.box> Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <little-frank@opencord.local> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: runvip <164729189+runvip@users.noreply.github.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Julian Coy <julian@ex-machina.co> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com> Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: Simon Klee <hello@simonklee.dk> Co-authored-by: Jay <air@live.ca> Co-authored-by: David Hill <1879069+iamdavidhill@users.noreply.github.com>
94 lines
3.8 KiB
TypeScript
94 lines
3.8 KiB
TypeScript
import { Component, createSignal, startTransition } from "solid-js"
|
|
import { Dialog } from "@opencode-ai/ui/dialog"
|
|
import { Tabs } from "@opencode-ai/ui/tabs"
|
|
import { Icon } from "@opencode-ai/ui/icon"
|
|
import { useLanguage } from "@/context/language"
|
|
import { usePlatform } from "@/context/platform"
|
|
import { useDialog } from "@opencode-ai/ui/context/dialog"
|
|
import { SettingsGeneral } from "./settings-general"
|
|
import { SettingsKeybinds } from "./settings-keybinds"
|
|
import { SettingsProviders } from "./settings-providers"
|
|
import { SettingsModels } from "./settings-models"
|
|
import { SettingsServers } from "./settings-servers"
|
|
|
|
export const DialogSettings: Component<{ defaultValue?: string }> = (props) => {
|
|
const language = useLanguage()
|
|
const platform = usePlatform()
|
|
const dialog = useDialog()
|
|
const [tab, setTab] = createSignal(props.defaultValue ?? "general")
|
|
|
|
const showProviders = () => {
|
|
void dialog.show(() => <DialogSettings defaultValue="providers" />)
|
|
}
|
|
|
|
return (
|
|
<Dialog size="x-large" transition>
|
|
<Tabs
|
|
orientation="vertical"
|
|
variant="settings"
|
|
value={tab()}
|
|
onChange={(value) => void startTransition(() => setTab(value))}
|
|
class="h-full settings-dialog"
|
|
>
|
|
<Tabs.List>
|
|
<div class="flex flex-col justify-between h-full w-full gap-4">
|
|
<div class="flex flex-col gap-3 w-full pt-3">
|
|
<div class="flex flex-col gap-3">
|
|
<div class="flex flex-col gap-1.5">
|
|
<Tabs.SectionTitle>{language.t("settings.section.desktop")}</Tabs.SectionTitle>
|
|
<div class="flex flex-col gap-1.5 w-full">
|
|
<Tabs.Trigger value="general">
|
|
<Icon name="sliders" />
|
|
{language.t("settings.tab.general")}
|
|
</Tabs.Trigger>
|
|
<Tabs.Trigger value="shortcuts">
|
|
<Icon name="keyboard" />
|
|
{language.t("settings.tab.shortcuts")}
|
|
</Tabs.Trigger>
|
|
<Tabs.Trigger value="servers">
|
|
<Icon name="server" />
|
|
{language.t("status.popover.tab.servers")}
|
|
</Tabs.Trigger>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex flex-col gap-1.5">
|
|
<Tabs.SectionTitle>{language.t("settings.section.server")}</Tabs.SectionTitle>
|
|
<div class="flex flex-col gap-1.5 w-full">
|
|
<Tabs.Trigger value="providers">
|
|
<Icon name="providers" />
|
|
{language.t("settings.providers.title")}
|
|
</Tabs.Trigger>
|
|
<Tabs.Trigger value="models">
|
|
<Icon name="models" />
|
|
{language.t("settings.models.title")}
|
|
</Tabs.Trigger>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="flex flex-col gap-1 pl-1 py-1 text-12-medium text-text-weak">
|
|
<span>{language.t("app.name.desktop")}</span>
|
|
<span class="text-11-regular">v{platform.version}</span>
|
|
</div>
|
|
</div>
|
|
</Tabs.List>
|
|
<Tabs.Content value="general" class="no-scrollbar">
|
|
<SettingsGeneral />
|
|
</Tabs.Content>
|
|
<Tabs.Content value="shortcuts" class="no-scrollbar">
|
|
<SettingsKeybinds />
|
|
</Tabs.Content>
|
|
<Tabs.Content value="servers" class="no-scrollbar">
|
|
<SettingsServers />
|
|
</Tabs.Content>
|
|
<Tabs.Content value="providers" class="no-scrollbar">
|
|
<SettingsProviders onBack={showProviders} />
|
|
</Tabs.Content>
|
|
<Tabs.Content value="models" class="no-scrollbar">
|
|
<SettingsModels />
|
|
</Tabs.Content>
|
|
</Tabs>
|
|
</Dialog>
|
|
)
|
|
}
|