diff options
| author | Adam <[email protected]> | 2025-12-30 20:06:03 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-30 20:06:03 -0600 |
| commit | 1e74560796da159d393210a150ba4fb9d41b8792 (patch) | |
| tree | 847c809961d5930929ac987da64a321a3fa6c01d /packages/app/src/context | |
| parent | 48f2419d9d8495a94af11167a44c29c0efd19766 (diff) | |
| download | opencode-1e74560796da159d393210a150ba4fb9d41b8792.tar.gz opencode-1e74560796da159d393210a150ba4fb9d41b8792.zip | |
feat(app): model variants
Diffstat (limited to 'packages/app/src/context')
| -rw-r--r-- | packages/app/src/context/local.tsx | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/packages/app/src/context/local.tsx b/packages/app/src/context/local.tsx index 23d706bb0..559d5c2f9 100644 --- a/packages/app/src/context/local.tsx +++ b/packages/app/src/context/local.tsx @@ -115,9 +115,11 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ createStore<{ user: (ModelKey & { visibility: "show" | "hide"; favorite?: boolean })[] recent: ModelKey[] + variant?: Record<string, string | undefined> }>({ user: [], recent: [], + variant: {}, }), ) @@ -272,6 +274,45 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ setVisibility(model: ModelKey, visible: boolean) { updateVisibility(model, visible ? "show" : "hide") }, + variant: { + current() { + const m = current() + if (!m) return undefined + const key = `${m.provider.id}/${m.id}` + return store.variant?.[key] + }, + list() { + const m = current() + if (!m) return [] + if (!m.variants) return [] + return Object.keys(m.variants) + }, + set(value: string | undefined) { + const m = current() + if (!m) return + const key = `${m.provider.id}/${m.id}` + if (!store.variant) { + setStore("variant", { [key]: value }) + } else { + setStore("variant", key, value) + } + }, + cycle() { + const variants = this.list() + if (variants.length === 0) return + const currentVariant = this.current() + if (!currentVariant) { + this.set(variants[0]) + return + } + const index = variants.indexOf(currentVariant) + if (index === -1 || index === variants.length - 1) { + this.set(undefined) + return + } + this.set(variants[index + 1]) + }, + }, } })() |
