Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3e988d640d | ||
|
|
2ba1ecabc9 | ||
|
|
e3b6d84b57 | ||
|
|
0638e49b02 | ||
|
|
2c58964a6b | ||
|
|
9507b0eace | ||
|
|
4da199697b | ||
|
|
9cccaa693a | ||
|
|
bb37e908ad | ||
|
|
d802e28381 | ||
|
|
7665b8e30d | ||
|
|
a3d4ea0de1 | ||
|
|
152df2428d | ||
|
|
1a420a1a71 | ||
|
|
4c185c70f2 | ||
|
|
6f9e5335dc | ||
|
|
6c9ae5ce9f | ||
|
|
8cbe7b4a01 |
@@ -26,7 +26,7 @@
|
|||||||
},
|
},
|
||||||
"packages/app": {
|
"packages/app": {
|
||||||
"name": "@opencode-ai/app",
|
"name": "@opencode-ai/app",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@kobalte/core": "catalog:",
|
"@kobalte/core": "catalog:",
|
||||||
"@opencode-ai/sdk": "workspace:*",
|
"@opencode-ai/sdk": "workspace:*",
|
||||||
@@ -47,7 +47,7 @@
|
|||||||
"@thisbeyond/solid-dnd": "0.7.5",
|
"@thisbeyond/solid-dnd": "0.7.5",
|
||||||
"diff": "catalog:",
|
"diff": "catalog:",
|
||||||
"fuzzysort": "catalog:",
|
"fuzzysort": "catalog:",
|
||||||
"ghostty-web": "0.4.0",
|
"ghostty-web": "github:anomalyco/ghostty-web#main",
|
||||||
"luxon": "catalog:",
|
"luxon": "catalog:",
|
||||||
"marked": "catalog:",
|
"marked": "catalog:",
|
||||||
"marked-shiki": "catalog:",
|
"marked-shiki": "catalog:",
|
||||||
@@ -76,7 +76,7 @@
|
|||||||
},
|
},
|
||||||
"packages/console/app": {
|
"packages/console/app": {
|
||||||
"name": "@opencode-ai/console-app",
|
"name": "@opencode-ai/console-app",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@cloudflare/vite-plugin": "1.15.2",
|
"@cloudflare/vite-plugin": "1.15.2",
|
||||||
"@ibm/plex": "6.4.1",
|
"@ibm/plex": "6.4.1",
|
||||||
@@ -110,7 +110,7 @@
|
|||||||
},
|
},
|
||||||
"packages/console/core": {
|
"packages/console/core": {
|
||||||
"name": "@opencode-ai/console-core",
|
"name": "@opencode-ai/console-core",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@aws-sdk/client-sts": "3.782.0",
|
"@aws-sdk/client-sts": "3.782.0",
|
||||||
"@jsx-email/render": "1.1.1",
|
"@jsx-email/render": "1.1.1",
|
||||||
@@ -137,7 +137,7 @@
|
|||||||
},
|
},
|
||||||
"packages/console/function": {
|
"packages/console/function": {
|
||||||
"name": "@opencode-ai/console-function",
|
"name": "@opencode-ai/console-function",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@ai-sdk/anthropic": "2.0.0",
|
"@ai-sdk/anthropic": "2.0.0",
|
||||||
"@ai-sdk/openai": "2.0.2",
|
"@ai-sdk/openai": "2.0.2",
|
||||||
@@ -161,7 +161,7 @@
|
|||||||
},
|
},
|
||||||
"packages/console/mail": {
|
"packages/console/mail": {
|
||||||
"name": "@opencode-ai/console-mail",
|
"name": "@opencode-ai/console-mail",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jsx-email/all": "2.2.3",
|
"@jsx-email/all": "2.2.3",
|
||||||
"@jsx-email/cli": "1.4.3",
|
"@jsx-email/cli": "1.4.3",
|
||||||
@@ -185,7 +185,7 @@
|
|||||||
},
|
},
|
||||||
"packages/desktop": {
|
"packages/desktop": {
|
||||||
"name": "@opencode-ai/desktop",
|
"name": "@opencode-ai/desktop",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@opencode-ai/app": "workspace:*",
|
"@opencode-ai/app": "workspace:*",
|
||||||
"@opencode-ai/ui": "workspace:*",
|
"@opencode-ai/ui": "workspace:*",
|
||||||
@@ -218,7 +218,7 @@
|
|||||||
},
|
},
|
||||||
"packages/desktop-electron": {
|
"packages/desktop-electron": {
|
||||||
"name": "@opencode-ai/desktop-electron",
|
"name": "@opencode-ai/desktop-electron",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@opencode-ai/app": "workspace:*",
|
"@opencode-ai/app": "workspace:*",
|
||||||
"@opencode-ai/ui": "workspace:*",
|
"@opencode-ai/ui": "workspace:*",
|
||||||
@@ -248,7 +248,7 @@
|
|||||||
},
|
},
|
||||||
"packages/enterprise": {
|
"packages/enterprise": {
|
||||||
"name": "@opencode-ai/enterprise",
|
"name": "@opencode-ai/enterprise",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@opencode-ai/ui": "workspace:*",
|
"@opencode-ai/ui": "workspace:*",
|
||||||
"@opencode-ai/util": "workspace:*",
|
"@opencode-ai/util": "workspace:*",
|
||||||
@@ -277,7 +277,7 @@
|
|||||||
},
|
},
|
||||||
"packages/function": {
|
"packages/function": {
|
||||||
"name": "@opencode-ai/function",
|
"name": "@opencode-ai/function",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@octokit/auth-app": "8.0.1",
|
"@octokit/auth-app": "8.0.1",
|
||||||
"@octokit/rest": "catalog:",
|
"@octokit/rest": "catalog:",
|
||||||
@@ -293,7 +293,7 @@
|
|||||||
},
|
},
|
||||||
"packages/opencode": {
|
"packages/opencode": {
|
||||||
"name": "opencode",
|
"name": "opencode",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"bin": {
|
"bin": {
|
||||||
"opencode": "./bin/opencode",
|
"opencode": "./bin/opencode",
|
||||||
},
|
},
|
||||||
@@ -407,7 +407,7 @@
|
|||||||
},
|
},
|
||||||
"packages/plugin": {
|
"packages/plugin": {
|
||||||
"name": "@opencode-ai/plugin",
|
"name": "@opencode-ai/plugin",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@opencode-ai/sdk": "workspace:*",
|
"@opencode-ai/sdk": "workspace:*",
|
||||||
"zod": "catalog:",
|
"zod": "catalog:",
|
||||||
@@ -427,7 +427,7 @@
|
|||||||
},
|
},
|
||||||
"packages/sdk/js": {
|
"packages/sdk/js": {
|
||||||
"name": "@opencode-ai/sdk",
|
"name": "@opencode-ai/sdk",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@hey-api/openapi-ts": "0.90.10",
|
"@hey-api/openapi-ts": "0.90.10",
|
||||||
"@tsconfig/node22": "catalog:",
|
"@tsconfig/node22": "catalog:",
|
||||||
@@ -438,7 +438,7 @@
|
|||||||
},
|
},
|
||||||
"packages/slack": {
|
"packages/slack": {
|
||||||
"name": "@opencode-ai/slack",
|
"name": "@opencode-ai/slack",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@opencode-ai/sdk": "workspace:*",
|
"@opencode-ai/sdk": "workspace:*",
|
||||||
"@slack/bolt": "^3.17.1",
|
"@slack/bolt": "^3.17.1",
|
||||||
@@ -473,7 +473,7 @@
|
|||||||
},
|
},
|
||||||
"packages/ui": {
|
"packages/ui": {
|
||||||
"name": "@opencode-ai/ui",
|
"name": "@opencode-ai/ui",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@kobalte/core": "catalog:",
|
"@kobalte/core": "catalog:",
|
||||||
"@opencode-ai/sdk": "workspace:*",
|
"@opencode-ai/sdk": "workspace:*",
|
||||||
@@ -519,7 +519,7 @@
|
|||||||
},
|
},
|
||||||
"packages/util": {
|
"packages/util": {
|
||||||
"name": "@opencode-ai/util",
|
"name": "@opencode-ai/util",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"zod": "catalog:",
|
"zod": "catalog:",
|
||||||
},
|
},
|
||||||
@@ -530,7 +530,7 @@
|
|||||||
},
|
},
|
||||||
"packages/web": {
|
"packages/web": {
|
||||||
"name": "@opencode-ai/web",
|
"name": "@opencode-ai/web",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@astrojs/cloudflare": "12.6.3",
|
"@astrojs/cloudflare": "12.6.3",
|
||||||
"@astrojs/markdown-remark": "6.3.1",
|
"@astrojs/markdown-remark": "6.3.1",
|
||||||
@@ -2958,7 +2958,7 @@
|
|||||||
|
|
||||||
"get-tsconfig": ["get-tsconfig@4.13.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw=="],
|
"get-tsconfig": ["get-tsconfig@4.13.6", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-shZT/QMiSHc/YBLxxOkMtgSid5HFoauqCE3/exfsEcwg1WkeqjG+V40yBbBrsD+jW2HDXcs28xOfcbm2jI8Ddw=="],
|
||||||
|
|
||||||
"ghostty-web": ["ghostty-web@0.4.0", "", {}, "sha512-0puDBik2qapbD/QQBW9o5ZHfXnZBqZWx/ctBiVtKZ6ZLds4NYb+wZuw1cRLXZk9zYovIQ908z3rvFhexAvc5Hg=="],
|
"ghostty-web": ["ghostty-web@github:anomalyco/ghostty-web#4af877d", {}, "anomalyco-ghostty-web-4af877d", "sha512-fbEK8mtr7ar4ySsF+JUGjhaZrane7dKphanN+SxHt5XXI6yLMAh/Hpf6sNCOyyVa2UlGCd7YpXG/T2v2RUAX+A=="],
|
||||||
|
|
||||||
"gifwrap": ["gifwrap@0.10.1", "", { "dependencies": { "image-q": "^4.0.0", "omggif": "^1.0.10" } }, "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw=="],
|
"gifwrap": ["gifwrap@0.10.1", "", { "dependencies": { "image-q": "^4.0.0", "omggif": "^1.0.10" } }, "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw=="],
|
||||||
|
|
||||||
|
|||||||
+4
-4
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"nodeModules": {
|
"nodeModules": {
|
||||||
"x86_64-linux": "sha256-ZmxeRNy2chc9py4m1iW6B+c/NSccMnVZ0lfni/EMdHw=",
|
"x86_64-linux": "sha256-v83hWzYVg/g4zJiBpGsQ71wTdndPk3BQVZ2mjMApUIQ=",
|
||||||
"aarch64-linux": "sha256-R+1mxsmAQicerN8ixVy0ff6V8bZ4GH18MHpihvWnaTg=",
|
"aarch64-linux": "sha256-inpMwkQqwBFP2wL8w/pTOP7q3fg1aOqvE0wgzVd3/B8=",
|
||||||
"aarch64-darwin": "sha256-m+QT20ohlqo9e86qXu67eKthZm6VDRLwlqJ9CNlEV+0=",
|
"aarch64-darwin": "sha256-r42LGrQWqDyIy62mBSU5Nf3M22dJ3NNo7mjN/1h8d8Y=",
|
||||||
"x86_64-darwin": "sha256-4GeNPyTT2Hq4rxHGSON23ul5Ud3yFGE0QUVsB03Gidc="
|
"x86_64-darwin": "sha256-J6XrrdK5qBK3sQBQOO/B3ZluOnsAf5f65l4q/K1nDTI="
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@opencode-ai/app",
|
"name": "@opencode-ai/app",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"description": "",
|
"description": "",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"exports": {
|
"exports": {
|
||||||
@@ -57,7 +57,7 @@
|
|||||||
"@thisbeyond/solid-dnd": "0.7.5",
|
"@thisbeyond/solid-dnd": "0.7.5",
|
||||||
"diff": "catalog:",
|
"diff": "catalog:",
|
||||||
"fuzzysort": "catalog:",
|
"fuzzysort": "catalog:",
|
||||||
"ghostty-web": "0.4.0",
|
"ghostty-web": "github:anomalyco/ghostty-web#main",
|
||||||
"luxon": "catalog:",
|
"luxon": "catalog:",
|
||||||
"marked": "catalog:",
|
"marked": "catalog:",
|
||||||
"marked-shiki": "catalog:",
|
"marked-shiki": "catalog:",
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ export function SessionContextUsage(props: SessionContextUsageProps) {
|
|||||||
|
|
||||||
const usd = createMemo(
|
const usd = createMemo(
|
||||||
() =>
|
() =>
|
||||||
new Intl.NumberFormat(language.locale(), {
|
new Intl.NumberFormat(language.intl(), {
|
||||||
style: "currency",
|
style: "currency",
|
||||||
currency: "USD",
|
currency: "USD",
|
||||||
}),
|
}),
|
||||||
@@ -77,7 +77,7 @@ export function SessionContextUsage(props: SessionContextUsageProps) {
|
|||||||
{(ctx) => (
|
{(ctx) => (
|
||||||
<>
|
<>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
<span class="text-text-invert-strong">{ctx().total.toLocaleString(language.locale())}</span>
|
<span class="text-text-invert-strong">{ctx().total.toLocaleString(language.intl())}</span>
|
||||||
<span class="text-text-invert-base">{language.t("context.usage.tokens")}</span>
|
<span class="text-text-invert-base">{language.t("context.usage.tokens")}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="flex items-center gap-2">
|
<div class="flex items-center gap-2">
|
||||||
|
|||||||
@@ -128,7 +128,7 @@ export function SessionContextTab() {
|
|||||||
|
|
||||||
const usd = createMemo(
|
const usd = createMemo(
|
||||||
() =>
|
() =>
|
||||||
new Intl.NumberFormat(language.locale(), {
|
new Intl.NumberFormat(language.intl(), {
|
||||||
style: "currency",
|
style: "currency",
|
||||||
currency: "USD",
|
currency: "USD",
|
||||||
}),
|
}),
|
||||||
@@ -136,7 +136,7 @@ export function SessionContextTab() {
|
|||||||
|
|
||||||
const metrics = createMemo(() => getSessionContextMetrics(messages(), sync.data.provider.all))
|
const metrics = createMemo(() => getSessionContextMetrics(messages(), sync.data.provider.all))
|
||||||
const ctx = createMemo(() => metrics().context)
|
const ctx = createMemo(() => metrics().context)
|
||||||
const formatter = createMemo(() => createSessionContextFormatter(language.locale()))
|
const formatter = createMemo(() => createSessionContextFormatter(language.intl()))
|
||||||
|
|
||||||
const cost = createMemo(() => {
|
const cost = createMemo(() => {
|
||||||
return usd().format(metrics().totalCost)
|
return usd().format(metrics().totalCost)
|
||||||
@@ -200,7 +200,7 @@ export function SessionContextTab() {
|
|||||||
|
|
||||||
const stats = [
|
const stats = [
|
||||||
{ label: "context.stats.session", value: () => info()?.title ?? params.id ?? "—" },
|
{ label: "context.stats.session", value: () => info()?.title ?? params.id ?? "—" },
|
||||||
{ label: "context.stats.messages", value: () => counts().all.toLocaleString(language.locale()) },
|
{ label: "context.stats.messages", value: () => counts().all.toLocaleString(language.intl()) },
|
||||||
{ label: "context.stats.provider", value: providerLabel },
|
{ label: "context.stats.provider", value: providerLabel },
|
||||||
{ label: "context.stats.model", value: modelLabel },
|
{ label: "context.stats.model", value: modelLabel },
|
||||||
{ label: "context.stats.limit", value: () => formatter().number(ctx()?.limit) },
|
{ label: "context.stats.limit", value: () => formatter().number(ctx()?.limit) },
|
||||||
@@ -213,8 +213,8 @@ export function SessionContextTab() {
|
|||||||
label: "context.stats.cacheTokens",
|
label: "context.stats.cacheTokens",
|
||||||
value: () => `${formatter().number(ctx()?.cacheRead)} / ${formatter().number(ctx()?.cacheWrite)}`,
|
value: () => `${formatter().number(ctx()?.cacheRead)} / ${formatter().number(ctx()?.cacheWrite)}`,
|
||||||
},
|
},
|
||||||
{ label: "context.stats.userMessages", value: () => counts().user.toLocaleString(language.locale()) },
|
{ label: "context.stats.userMessages", value: () => counts().user.toLocaleString(language.intl()) },
|
||||||
{ label: "context.stats.assistantMessages", value: () => counts().assistant.toLocaleString(language.locale()) },
|
{ label: "context.stats.assistantMessages", value: () => counts().assistant.toLocaleString(language.intl()) },
|
||||||
{ label: "context.stats.totalCost", value: cost },
|
{ label: "context.stats.totalCost", value: cost },
|
||||||
{ label: "context.stats.sessionCreated", value: () => formatter().time(info()?.time.created) },
|
{ label: "context.stats.sessionCreated", value: () => formatter().time(info()?.time.created) },
|
||||||
{ label: "context.stats.lastActivity", value: () => formatter().time(ctx()?.message.time.created) },
|
{ label: "context.stats.lastActivity", value: () => formatter().time(ctx()?.message.time.created) },
|
||||||
@@ -307,7 +307,7 @@ export function SessionContextTab() {
|
|||||||
<div class="flex items-center gap-1 text-11-regular text-text-weak">
|
<div class="flex items-center gap-1 text-11-regular text-text-weak">
|
||||||
<div class="size-2 rounded-sm" style={{ "background-color": BREAKDOWN_COLOR[segment.key] }} />
|
<div class="size-2 rounded-sm" style={{ "background-color": BREAKDOWN_COLOR[segment.key] }} />
|
||||||
<div>{breakdownLabel(segment.key)}</div>
|
<div>{breakdownLabel(segment.key)}</div>
|
||||||
<div class="text-text-weaker">{segment.percent.toLocaleString(language.locale())}%</div>
|
<div class="text-text-weaker">{segment.percent.toLocaleString(language.intl())}%</div>
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</For>
|
</For>
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ export function NewSessionView(props: NewSessionViewProps) {
|
|||||||
{language.t("session.new.lastModified")}
|
{language.t("session.new.lastModified")}
|
||||||
<span class="text-text-strong">
|
<span class="text-text-strong">
|
||||||
{DateTime.fromMillis(project().time.updated ?? project().time.created)
|
{DateTime.fromMillis(project().time.updated ?? project().time.created)
|
||||||
.setLocale(language.locale())
|
.setLocale(language.intl())
|
||||||
.toRelative()}
|
.toRelative()}
|
||||||
</span>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ type ProviderItem = ReturnType<ReturnType<typeof useProviders>["connected"]>[num
|
|||||||
|
|
||||||
const PROVIDER_NOTES = [
|
const PROVIDER_NOTES = [
|
||||||
{ match: (id: string) => id === "opencode", key: "dialog.provider.opencode.note" },
|
{ match: (id: string) => id === "opencode", key: "dialog.provider.opencode.note" },
|
||||||
|
{ match: (id: string) => id === "opencode-go", key: "dialog.provider.opencodeGo.tagline" },
|
||||||
{ match: (id: string) => id === "anthropic", key: "dialog.provider.anthropic.note" },
|
{ match: (id: string) => id === "anthropic", key: "dialog.provider.anthropic.note" },
|
||||||
{ match: (id: string) => id.startsWith("github-copilot"), key: "dialog.provider.copilot.note" },
|
{ match: (id: string) => id.startsWith("github-copilot"), key: "dialog.provider.copilot.note" },
|
||||||
{ match: (id: string) => id === "openai", key: "dialog.provider.openai.note" },
|
{ match: (id: string) => id === "openai", key: "dialog.provider.openai.note" },
|
||||||
@@ -181,21 +182,11 @@ export const SettingsProviders: Component = () => {
|
|||||||
<div class="flex items-center gap-x-3">
|
<div class="flex items-center gap-x-3">
|
||||||
<ProviderIcon id={item.id} class="size-5 shrink-0 icon-strong-base" />
|
<ProviderIcon id={item.id} class="size-5 shrink-0 icon-strong-base" />
|
||||||
<span class="text-14-medium text-text-strong">{item.name}</span>
|
<span class="text-14-medium text-text-strong">{item.name}</span>
|
||||||
<Show when={item.id === "opencode"}>
|
|
||||||
<span class="text-14-regular text-text-weak">
|
|
||||||
{language.t("dialog.provider.opencode.tagline")}
|
|
||||||
</span>
|
|
||||||
</Show>
|
|
||||||
<Show when={item.id === "opencode"}>
|
<Show when={item.id === "opencode"}>
|
||||||
<Tag>{language.t("dialog.provider.tag.recommended")}</Tag>
|
<Tag>{language.t("dialog.provider.tag.recommended")}</Tag>
|
||||||
</Show>
|
</Show>
|
||||||
<Show when={item.id === "opencode-go"}>
|
<Show when={item.id === "opencode-go"}>
|
||||||
<>
|
|
||||||
<span class="text-14-regular text-text-weak">
|
|
||||||
{language.t("dialog.provider.opencodeGo.tagline")}
|
|
||||||
</span>
|
|
||||||
<Tag>{language.t("dialog.provider.tag.recommended")}</Tag>
|
<Tag>{language.t("dialog.provider.tag.recommended")}</Tag>
|
||||||
</>
|
|
||||||
</Show>
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
<Show when={note(item.id)}>
|
<Show when={note(item.id)}>
|
||||||
|
|||||||
@@ -217,7 +217,7 @@ export const Terminal = (props: TerminalProps) => {
|
|||||||
const currentTheme = theme.themes()[theme.themeId()]
|
const currentTheme = theme.themes()[theme.themeId()]
|
||||||
if (!currentTheme) return fallback
|
if (!currentTheme) return fallback
|
||||||
const variant = mode === "dark" ? currentTheme.dark : currentTheme.light
|
const variant = mode === "dark" ? currentTheme.dark : currentTheme.light
|
||||||
if (!variant?.seeds) return fallback
|
if (!variant?.seeds && !variant?.palette) return fallback
|
||||||
const resolved = resolveThemeVariant(variant, mode === "dark")
|
const resolved = resolveThemeVariant(variant, mode === "dark")
|
||||||
const text = resolved["text-stronger"] ?? fallback.foreground
|
const text = resolved["text-stronger"] ?? fallback.foreground
|
||||||
const background = resolved["background-stronger"] ?? fallback.background
|
const background = resolved["background-stronger"] ?? fallback.background
|
||||||
|
|||||||
@@ -84,6 +84,26 @@ const LOCALES: readonly Locale[] = [
|
|||||||
"tr",
|
"tr",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
const INTL: Record<Locale, string> = {
|
||||||
|
en: "en",
|
||||||
|
zh: "zh-Hans",
|
||||||
|
zht: "zh-Hant",
|
||||||
|
ko: "ko",
|
||||||
|
de: "de",
|
||||||
|
es: "es",
|
||||||
|
fr: "fr",
|
||||||
|
da: "da",
|
||||||
|
ja: "ja",
|
||||||
|
pl: "pl",
|
||||||
|
ru: "ru",
|
||||||
|
ar: "ar",
|
||||||
|
no: "nb-NO",
|
||||||
|
br: "pt-BR",
|
||||||
|
th: "th",
|
||||||
|
bs: "bs",
|
||||||
|
tr: "tr",
|
||||||
|
}
|
||||||
|
|
||||||
const LABEL_KEY: Record<Locale, keyof Dictionary> = {
|
const LABEL_KEY: Record<Locale, keyof Dictionary> = {
|
||||||
en: "language.en",
|
en: "language.en",
|
||||||
zh: "language.zh",
|
zh: "language.zh",
|
||||||
@@ -197,6 +217,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont
|
|||||||
)
|
)
|
||||||
|
|
||||||
const locale = createMemo<Locale>(() => normalizeLocale(store.locale))
|
const locale = createMemo<Locale>(() => normalizeLocale(store.locale))
|
||||||
|
const intl = createMemo(() => INTL[locale()])
|
||||||
|
|
||||||
const dict = createMemo<Dictionary>(() => DICT[locale()])
|
const dict = createMemo<Dictionary>(() => DICT[locale()])
|
||||||
|
|
||||||
@@ -213,6 +234,7 @@ export const { use: useLanguage, provider: LanguageProvider } = createSimpleCont
|
|||||||
return {
|
return {
|
||||||
ready,
|
ready,
|
||||||
locale,
|
locale,
|
||||||
|
intl,
|
||||||
locales: LOCALES,
|
locales: LOCALES,
|
||||||
label,
|
label,
|
||||||
t,
|
t,
|
||||||
|
|||||||
@@ -1846,7 +1846,7 @@ export default function Layout(props: ParentProps) {
|
|||||||
}}
|
}}
|
||||||
style={{ width: panelProps.mobile ? undefined : `${Math.max(layout.sidebar.width() - 64, 0)}px` }}
|
style={{ width: panelProps.mobile ? undefined : `${Math.max(layout.sidebar.width() - 64, 0)}px` }}
|
||||||
>
|
>
|
||||||
<Show when={panelProps.project}>
|
<Show when={panelProps.project} keyed>
|
||||||
{(p) => (
|
{(p) => (
|
||||||
<>
|
<>
|
||||||
<div class="shrink-0 px-2 py-1">
|
<div class="shrink-0 px-2 py-1">
|
||||||
@@ -1855,7 +1855,7 @@ export default function Layout(props: ParentProps) {
|
|||||||
<InlineEditor
|
<InlineEditor
|
||||||
id={`project:${projectId()}`}
|
id={`project:${projectId()}`}
|
||||||
value={projectName}
|
value={projectName}
|
||||||
onSave={(next) => renameProject(p(), next)}
|
onSave={(next) => renameProject(p, next)}
|
||||||
class="text-14-medium text-text-strong truncate"
|
class="text-14-medium text-text-strong truncate"
|
||||||
displayClass="text-14-medium text-text-strong truncate"
|
displayClass="text-14-medium text-text-strong truncate"
|
||||||
stopPropagation
|
stopPropagation
|
||||||
@@ -1864,7 +1864,7 @@ export default function Layout(props: ParentProps) {
|
|||||||
<Tooltip
|
<Tooltip
|
||||||
placement="bottom"
|
placement="bottom"
|
||||||
gutter={2}
|
gutter={2}
|
||||||
value={p().worktree}
|
value={p.worktree}
|
||||||
class="shrink-0"
|
class="shrink-0"
|
||||||
contentStyle={{
|
contentStyle={{
|
||||||
"max-width": "640px",
|
"max-width": "640px",
|
||||||
@@ -1872,7 +1872,7 @@ export default function Layout(props: ParentProps) {
|
|||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<span class="text-12-regular text-text-base truncate select-text">
|
<span class="text-12-regular text-text-base truncate select-text">
|
||||||
{p().worktree.replace(homedir(), "~")}
|
{p.worktree.replace(homedir(), "~")}
|
||||||
</span>
|
</span>
|
||||||
</Tooltip>
|
</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
@@ -1883,7 +1883,7 @@ export default function Layout(props: ParentProps) {
|
|||||||
icon="dot-grid"
|
icon="dot-grid"
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
data-action="project-menu"
|
data-action="project-menu"
|
||||||
data-project={base64Encode(p().worktree)}
|
data-project={base64Encode(p.worktree)}
|
||||||
class="shrink-0 size-6 rounded-md data-[expanded]:bg-surface-base-active"
|
class="shrink-0 size-6 rounded-md data-[expanded]:bg-surface-base-active"
|
||||||
classList={{
|
classList={{
|
||||||
"opacity-0 group-hover/project:opacity-100 data-[expanded]:opacity-100": !panelProps.mobile,
|
"opacity-0 group-hover/project:opacity-100 data-[expanded]:opacity-100": !panelProps.mobile,
|
||||||
@@ -1892,24 +1892,24 @@ export default function Layout(props: ParentProps) {
|
|||||||
/>
|
/>
|
||||||
<DropdownMenu.Portal mount={!panelProps.mobile ? state.nav : undefined}>
|
<DropdownMenu.Portal mount={!panelProps.mobile ? state.nav : undefined}>
|
||||||
<DropdownMenu.Content class="mt-1">
|
<DropdownMenu.Content class="mt-1">
|
||||||
<DropdownMenu.Item onSelect={() => showEditProjectDialog(p())}>
|
<DropdownMenu.Item onSelect={() => showEditProjectDialog(p)}>
|
||||||
<DropdownMenu.ItemLabel>{language.t("common.edit")}</DropdownMenu.ItemLabel>
|
<DropdownMenu.ItemLabel>{language.t("common.edit")}</DropdownMenu.ItemLabel>
|
||||||
</DropdownMenu.Item>
|
</DropdownMenu.Item>
|
||||||
<DropdownMenu.Item
|
<DropdownMenu.Item
|
||||||
data-action="project-workspaces-toggle"
|
data-action="project-workspaces-toggle"
|
||||||
data-project={base64Encode(p().worktree)}
|
data-project={base64Encode(p.worktree)}
|
||||||
disabled={p().vcs !== "git" && !layout.sidebar.workspaces(p().worktree)()}
|
disabled={p.vcs !== "git" && !layout.sidebar.workspaces(p.worktree)()}
|
||||||
onSelect={() => toggleProjectWorkspaces(p())}
|
onSelect={() => toggleProjectWorkspaces(p)}
|
||||||
>
|
>
|
||||||
<DropdownMenu.ItemLabel>
|
<DropdownMenu.ItemLabel>
|
||||||
{layout.sidebar.workspaces(p().worktree)()
|
{layout.sidebar.workspaces(p.worktree)()
|
||||||
? language.t("sidebar.workspaces.disable")
|
? language.t("sidebar.workspaces.disable")
|
||||||
: language.t("sidebar.workspaces.enable")}
|
: language.t("sidebar.workspaces.enable")}
|
||||||
</DropdownMenu.ItemLabel>
|
</DropdownMenu.ItemLabel>
|
||||||
</DropdownMenu.Item>
|
</DropdownMenu.Item>
|
||||||
<DropdownMenu.Item
|
<DropdownMenu.Item
|
||||||
data-action="project-clear-notifications"
|
data-action="project-clear-notifications"
|
||||||
data-project={base64Encode(p().worktree)}
|
data-project={base64Encode(p.worktree)}
|
||||||
disabled={unseenCount() === 0}
|
disabled={unseenCount() === 0}
|
||||||
onSelect={clearNotifications}
|
onSelect={clearNotifications}
|
||||||
>
|
>
|
||||||
@@ -1920,8 +1920,8 @@ export default function Layout(props: ParentProps) {
|
|||||||
<DropdownMenu.Separator />
|
<DropdownMenu.Separator />
|
||||||
<DropdownMenu.Item
|
<DropdownMenu.Item
|
||||||
data-action="project-close-menu"
|
data-action="project-close-menu"
|
||||||
data-project={base64Encode(p().worktree)}
|
data-project={base64Encode(p.worktree)}
|
||||||
onSelect={() => closeProject(p().worktree)}
|
onSelect={() => closeProject(p.worktree)}
|
||||||
>
|
>
|
||||||
<DropdownMenu.ItemLabel>{language.t("common.close")}</DropdownMenu.ItemLabel>
|
<DropdownMenu.ItemLabel>{language.t("common.close")}</DropdownMenu.ItemLabel>
|
||||||
</DropdownMenu.Item>
|
</DropdownMenu.Item>
|
||||||
@@ -1946,7 +1946,7 @@ export default function Layout(props: ParentProps) {
|
|||||||
size="large"
|
size="large"
|
||||||
icon="plus-small"
|
icon="plus-small"
|
||||||
class="w-full"
|
class="w-full"
|
||||||
onClick={() => navigateWithSidebarReset(`/${base64Encode(p().worktree)}/session`)}
|
onClick={() => navigateWithSidebarReset(`/${base64Encode(p.worktree)}/session`)}
|
||||||
>
|
>
|
||||||
{language.t("command.session.new")}
|
{language.t("command.session.new")}
|
||||||
</Button>
|
</Button>
|
||||||
@@ -1955,7 +1955,7 @@ export default function Layout(props: ParentProps) {
|
|||||||
<div class="flex-1 min-h-0">
|
<div class="flex-1 min-h-0">
|
||||||
<LocalWorkspace
|
<LocalWorkspace
|
||||||
ctx={workspaceSidebarCtx}
|
ctx={workspaceSidebarCtx}
|
||||||
project={p()}
|
project={p}
|
||||||
sortNow={sortNow}
|
sortNow={sortNow}
|
||||||
mobile={panelProps.mobile}
|
mobile={panelProps.mobile}
|
||||||
/>
|
/>
|
||||||
@@ -1970,7 +1970,7 @@ export default function Layout(props: ParentProps) {
|
|||||||
keybind={command.keybind("workspace.new")}
|
keybind={command.keybind("workspace.new")}
|
||||||
placement="top"
|
placement="top"
|
||||||
>
|
>
|
||||||
<Button size="large" icon="plus-small" class="w-full" onClick={() => createWorkspace(p())}>
|
<Button size="large" icon="plus-small" class="w-full" onClick={() => createWorkspace(p)}>
|
||||||
{language.t("workspace.new")}
|
{language.t("workspace.new")}
|
||||||
</Button>
|
</Button>
|
||||||
</TooltipKeybind>
|
</TooltipKeybind>
|
||||||
@@ -1996,7 +1996,7 @@ export default function Layout(props: ParentProps) {
|
|||||||
<SortableWorkspace
|
<SortableWorkspace
|
||||||
ctx={workspaceSidebarCtx}
|
ctx={workspaceSidebarCtx}
|
||||||
directory={directory}
|
directory={directory}
|
||||||
project={p()}
|
project={p}
|
||||||
sortNow={sortNow}
|
sortNow={sortNow}
|
||||||
mobile={panelProps.mobile}
|
mobile={panelProps.mobile}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@@ -720,6 +720,7 @@ export default function Page() {
|
|||||||
showAllFiles,
|
showAllFiles,
|
||||||
tabForPath: file.tab,
|
tabForPath: file.tab,
|
||||||
openTab: tabs().open,
|
openTab: tabs().open,
|
||||||
|
setActive: tabs().setActive,
|
||||||
loadFile: file.load,
|
loadFile: file.load,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -11,12 +11,13 @@ describe("createOpenReviewFile", () => {
|
|||||||
return `file://${path}`
|
return `file://${path}`
|
||||||
},
|
},
|
||||||
openTab: (tab) => calls.push(`open:${tab}`),
|
openTab: (tab) => calls.push(`open:${tab}`),
|
||||||
|
setActive: (tab) => calls.push(`active:${tab}`),
|
||||||
loadFile: (path) => calls.push(`load:${path}`),
|
loadFile: (path) => calls.push(`load:${path}`),
|
||||||
})
|
})
|
||||||
|
|
||||||
openReviewFile("src/a.ts")
|
openReviewFile("src/a.ts")
|
||||||
|
|
||||||
expect(calls).toEqual(["show", "load:src/a.ts", "tab:src/a.ts", "open:file://src/a.ts"])
|
expect(calls).toEqual(["show", "load:src/a.ts", "tab:src/a.ts", "open:file://src/a.ts", "active:file://src/a.ts"])
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|||||||
@@ -24,15 +24,20 @@ export const createOpenReviewFile = (input: {
|
|||||||
showAllFiles: () => void
|
showAllFiles: () => void
|
||||||
tabForPath: (path: string) => string
|
tabForPath: (path: string) => string
|
||||||
openTab: (tab: string) => void
|
openTab: (tab: string) => void
|
||||||
|
setActive: (tab: string) => void
|
||||||
loadFile: (path: string) => any | Promise<void>
|
loadFile: (path: string) => any | Promise<void>
|
||||||
}) => {
|
}) => {
|
||||||
return (path: string) => {
|
return (path: string) => {
|
||||||
batch(() => {
|
batch(() => {
|
||||||
input.showAllFiles()
|
input.showAllFiles()
|
||||||
const maybePromise = input.loadFile(path)
|
const maybePromise = input.loadFile(path)
|
||||||
const openTab = () => input.openTab(input.tabForPath(path))
|
const open = () => {
|
||||||
if (maybePromise instanceof Promise) maybePromise.then(openTab)
|
const tab = input.tabForPath(path)
|
||||||
else openTab()
|
input.openTab(tab)
|
||||||
|
input.setActive(tab)
|
||||||
|
}
|
||||||
|
if (maybePromise instanceof Promise) maybePromise.then(open)
|
||||||
|
else open()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -611,7 +611,7 @@ export function MessageTimeline(props: {
|
|||||||
</Show>
|
</Show>
|
||||||
</Show>
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
<Show when={sessionID()}>
|
<Show when={sessionID()} keyed>
|
||||||
{(id) => (
|
{(id) => (
|
||||||
<div class="shrink-0 flex items-center gap-3">
|
<div class="shrink-0 flex items-center gap-3">
|
||||||
<SessionContextUsage placement="bottom" />
|
<SessionContextUsage placement="bottom" />
|
||||||
@@ -646,12 +646,12 @@ export function MessageTimeline(props: {
|
|||||||
>
|
>
|
||||||
<DropdownMenu.ItemLabel>{language.t("common.rename")}</DropdownMenu.ItemLabel>
|
<DropdownMenu.ItemLabel>{language.t("common.rename")}</DropdownMenu.ItemLabel>
|
||||||
</DropdownMenu.Item>
|
</DropdownMenu.Item>
|
||||||
<DropdownMenu.Item onSelect={() => void archiveSession(id())}>
|
<DropdownMenu.Item onSelect={() => void archiveSession(id)}>
|
||||||
<DropdownMenu.ItemLabel>{language.t("common.archive")}</DropdownMenu.ItemLabel>
|
<DropdownMenu.ItemLabel>{language.t("common.archive")}</DropdownMenu.ItemLabel>
|
||||||
</DropdownMenu.Item>
|
</DropdownMenu.Item>
|
||||||
<DropdownMenu.Separator />
|
<DropdownMenu.Separator />
|
||||||
<DropdownMenu.Item
|
<DropdownMenu.Item
|
||||||
onSelect={() => dialog.show(() => <DialogDeleteSession sessionID={id()} />)}
|
onSelect={() => dialog.show(() => <DialogDeleteSession sessionID={id} />)}
|
||||||
>
|
>
|
||||||
<DropdownMenu.ItemLabel>{language.t("common.delete")}</DropdownMenu.ItemLabel>
|
<DropdownMenu.ItemLabel>{language.t("common.delete")}</DropdownMenu.ItemLabel>
|
||||||
</DropdownMenu.Item>
|
</DropdownMenu.Item>
|
||||||
|
|||||||
@@ -331,7 +331,9 @@ export function SessionSidePanel(props: {
|
|||||||
const path = createMemo(() => file.pathFromTab(tab))
|
const path = createMemo(() => file.pathFromTab(tab))
|
||||||
return (
|
return (
|
||||||
<div data-component="tabs-drag-preview">
|
<div data-component="tabs-drag-preview">
|
||||||
<Show when={path()}>{(p) => <FileVisual active path={p()} />}</Show>
|
<Show when={path()} keyed>
|
||||||
|
{(p) => <FileVisual active path={p} />}
|
||||||
|
</Show>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
}}
|
}}
|
||||||
|
|||||||
@@ -191,8 +191,8 @@ export function TerminalPanel() {
|
|||||||
<SortableProvider ids={ids()}>
|
<SortableProvider ids={ids()}>
|
||||||
<For each={ids()}>
|
<For each={ids()}>
|
||||||
{(id) => (
|
{(id) => (
|
||||||
<Show when={byId().get(id)}>
|
<Show when={byId().get(id)} keyed>
|
||||||
{(pty) => <SortableTerminalTab terminal={pty()} onClose={close} />}
|
{(pty) => <SortableTerminalTab terminal={pty} onClose={close} />}
|
||||||
</Show>
|
</Show>
|
||||||
)}
|
)}
|
||||||
</For>
|
</For>
|
||||||
@@ -217,10 +217,10 @@ export function TerminalPanel() {
|
|||||||
<div class="flex-1 min-h-0 relative">
|
<div class="flex-1 min-h-0 relative">
|
||||||
<Show when={terminal.active()} keyed>
|
<Show when={terminal.active()} keyed>
|
||||||
{(id) => (
|
{(id) => (
|
||||||
<Show when={byId().get(id)}>
|
<Show when={byId().get(id)} keyed>
|
||||||
{(pty) => (
|
{(pty) => (
|
||||||
<div id={`terminal-wrapper-${id}`} class="absolute inset-0">
|
<div id={`terminal-wrapper-${id}`} class="absolute inset-0">
|
||||||
<Terminal pty={pty()} onCleanup={terminal.update} onConnectError={() => terminal.clone(id)} />
|
<Terminal pty={pty} onCleanup={terminal.update} onConnectError={() => terminal.clone(id)} />
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</Show>
|
</Show>
|
||||||
@@ -229,14 +229,14 @@ export function TerminalPanel() {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<DragOverlay>
|
<DragOverlay>
|
||||||
<Show when={store.activeDraggable}>
|
<Show when={store.activeDraggable} keyed>
|
||||||
{(draggedId) => (
|
{(draggedId) => (
|
||||||
<Show when={byId().get(draggedId())}>
|
<Show when={byId().get(draggedId)} keyed>
|
||||||
{(t) => (
|
{(t) => (
|
||||||
<div class="relative p-1 h-10 flex items-center bg-background-stronger text-14-regular">
|
<div class="relative p-1 h-10 flex items-center bg-background-stronger text-14-regular">
|
||||||
{terminalTabLabel({
|
{terminalTabLabel({
|
||||||
title: t().title,
|
title: t.title,
|
||||||
titleNumber: t().titleNumber,
|
titleNumber: t.titleNumber,
|
||||||
t: language.t as (key: string, vars?: Record<string, string | number | boolean>) => string,
|
t: language.t as (key: string, vars?: Record<string, string | number | boolean>) => string,
|
||||||
})}
|
})}
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -22,6 +22,5 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"include": ["src", "package.json"],
|
"include": ["src", "package.json"],
|
||||||
"exclude": ["dist", "ts-dist"],
|
"exclude": ["dist", "ts-dist"]
|
||||||
"references": [{ "path": "../sdk/js" }]
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@opencode-ai/console-app",
|
"name": "@opencode-ai/console-app",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://json.schemastore.org/package.json",
|
"$schema": "https://json.schemastore.org/package.json",
|
||||||
"name": "@opencode-ai/console-core",
|
"name": "@opencode-ai/console-core",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@opencode-ai/console-function",
|
"name": "@opencode-ai/console-function",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"$schema": "https://json.schemastore.org/package.json",
|
"$schema": "https://json.schemastore.org/package.json",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@opencode-ai/console-mail",
|
"name": "@opencode-ai/console-mail",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@jsx-email/all": "2.2.3",
|
"@jsx-email/all": "2.2.3",
|
||||||
"@jsx-email/cli": "1.4.3",
|
"@jsx-email/cli": "1.4.3",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@opencode-ai/desktop-electron",
|
"name": "@opencode-ai/desktop-electron",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"homepage": "https://opencode.ai",
|
"homepage": "https://opencode.ai",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@opencode-ai/desktop",
|
"name": "@opencode-ai/desktop",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@opencode-ai/enterprise",
|
"name": "@opencode-ai/enterprise",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
id = "opencode"
|
id = "opencode"
|
||||||
name = "OpenCode"
|
name = "OpenCode"
|
||||||
description = "The open source coding agent."
|
description = "The open source coding agent."
|
||||||
version = "1.2.17"
|
version = "1.2.18"
|
||||||
schema_version = 1
|
schema_version = 1
|
||||||
authors = ["Anomaly"]
|
authors = ["Anomaly"]
|
||||||
repository = "https://github.com/anomalyco/opencode"
|
repository = "https://github.com/anomalyco/opencode"
|
||||||
@@ -11,26 +11,26 @@ name = "OpenCode"
|
|||||||
icon = "./icons/opencode.svg"
|
icon = "./icons/opencode.svg"
|
||||||
|
|
||||||
[agent_servers.opencode.targets.darwin-aarch64]
|
[agent_servers.opencode.targets.darwin-aarch64]
|
||||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.2.17/opencode-darwin-arm64.zip"
|
archive = "https://github.com/anomalyco/opencode/releases/download/v1.2.18/opencode-darwin-arm64.zip"
|
||||||
cmd = "./opencode"
|
cmd = "./opencode"
|
||||||
args = ["acp"]
|
args = ["acp"]
|
||||||
|
|
||||||
[agent_servers.opencode.targets.darwin-x86_64]
|
[agent_servers.opencode.targets.darwin-x86_64]
|
||||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.2.17/opencode-darwin-x64.zip"
|
archive = "https://github.com/anomalyco/opencode/releases/download/v1.2.18/opencode-darwin-x64.zip"
|
||||||
cmd = "./opencode"
|
cmd = "./opencode"
|
||||||
args = ["acp"]
|
args = ["acp"]
|
||||||
|
|
||||||
[agent_servers.opencode.targets.linux-aarch64]
|
[agent_servers.opencode.targets.linux-aarch64]
|
||||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.2.17/opencode-linux-arm64.tar.gz"
|
archive = "https://github.com/anomalyco/opencode/releases/download/v1.2.18/opencode-linux-arm64.tar.gz"
|
||||||
cmd = "./opencode"
|
cmd = "./opencode"
|
||||||
args = ["acp"]
|
args = ["acp"]
|
||||||
|
|
||||||
[agent_servers.opencode.targets.linux-x86_64]
|
[agent_servers.opencode.targets.linux-x86_64]
|
||||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.2.17/opencode-linux-x64.tar.gz"
|
archive = "https://github.com/anomalyco/opencode/releases/download/v1.2.18/opencode-linux-x64.tar.gz"
|
||||||
cmd = "./opencode"
|
cmd = "./opencode"
|
||||||
args = ["acp"]
|
args = ["acp"]
|
||||||
|
|
||||||
[agent_servers.opencode.targets.windows-x86_64]
|
[agent_servers.opencode.targets.windows-x86_64]
|
||||||
archive = "https://github.com/anomalyco/opencode/releases/download/v1.2.17/opencode-windows-x64.zip"
|
archive = "https://github.com/anomalyco/opencode/releases/download/v1.2.18/opencode-windows-x64.zip"
|
||||||
cmd = "./opencode.exe"
|
cmd = "./opencode.exe"
|
||||||
args = ["acp"]
|
args = ["acp"]
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@opencode-ai/function",
|
"name": "@opencode-ai/function",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"$schema": "https://json.schemastore.org/package.json",
|
"$schema": "https://json.schemastore.org/package.json",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://json.schemastore.org/package.json",
|
"$schema": "https://json.schemastore.org/package.json",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"name": "opencode",
|
"name": "opencode",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -128,11 +128,6 @@ export function Session() {
|
|||||||
.filter((x) => x.parentID === parentID || x.id === parentID)
|
.filter((x) => x.parentID === parentID || x.id === parentID)
|
||||||
.toSorted((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))
|
.toSorted((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))
|
||||||
})
|
})
|
||||||
const subagents = createMemo(() => {
|
|
||||||
return sync.data.session
|
|
||||||
.filter((x) => x.parentID === route.sessionID)
|
|
||||||
.toSorted((a, b) => (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))
|
|
||||||
})
|
|
||||||
const messages = createMemo(() => sync.data.message[route.sessionID] ?? [])
|
const messages = createMemo(() => sync.data.message[route.sessionID] ?? [])
|
||||||
const permissions = createMemo(() => {
|
const permissions = createMemo(() => {
|
||||||
if (session()?.parentID) return []
|
if (session()?.parentID) return []
|
||||||
@@ -321,14 +316,20 @@ export function Session() {
|
|||||||
const local = useLocal()
|
const local = useLocal()
|
||||||
|
|
||||||
function moveFirstChild() {
|
function moveFirstChild() {
|
||||||
const next = subagents()[0]
|
if (children().length === 1) return
|
||||||
if (!next) return
|
const next = children().find((x) => !!x.parentID)
|
||||||
navigate({ type: "session", sessionID: next.id })
|
if (next) {
|
||||||
|
navigate({
|
||||||
|
type: "session",
|
||||||
|
sessionID: next.id,
|
||||||
|
})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function moveChild(direction: number) {
|
function moveChild(direction: number) {
|
||||||
|
if (children().length === 1) return
|
||||||
|
|
||||||
const sessions = children().filter((x) => !!x.parentID)
|
const sessions = children().filter((x) => !!x.parentID)
|
||||||
if (sessions.length === 0) return
|
|
||||||
let next = sessions.findIndex((x) => x.id === session()?.id) + direction
|
let next = sessions.findIndex((x) => x.id === session()?.id) + direction
|
||||||
|
|
||||||
if (next >= sessions.length) next = 0
|
if (next >= sessions.length) next = 0
|
||||||
@@ -1123,7 +1124,7 @@ export function Session() {
|
|||||||
<UserMessage
|
<UserMessage
|
||||||
index={index()}
|
index={index()}
|
||||||
onMouseUp={() => {
|
onMouseUp={() => {
|
||||||
if (renderer.hasSelection) return
|
if (renderer.getSelection()?.getSelectedText()) return
|
||||||
dialog.replace(() => (
|
dialog.replace(() => (
|
||||||
<DialogMessage
|
<DialogMessage
|
||||||
messageID={message.id}
|
messageID={message.id}
|
||||||
@@ -1622,9 +1623,9 @@ function InlineTool(props: {
|
|||||||
complete: any
|
complete: any
|
||||||
pending: string
|
pending: string
|
||||||
spinner?: boolean
|
spinner?: boolean
|
||||||
onClick?: () => void
|
|
||||||
children: JSX.Element
|
children: JSX.Element
|
||||||
part: ToolPart
|
part: ToolPart
|
||||||
|
onClick?: () => void
|
||||||
}) {
|
}) {
|
||||||
const [margin, setMargin] = createSignal(0)
|
const [margin, setMargin] = createSignal(0)
|
||||||
const { theme } = useTheme()
|
const { theme } = useTheme()
|
||||||
@@ -1641,6 +1642,7 @@ function InlineTool(props: {
|
|||||||
|
|
||||||
const fg = createMemo(() => {
|
const fg = createMemo(() => {
|
||||||
if (permission()) return theme.warning
|
if (permission()) return theme.warning
|
||||||
|
if (hover() && props.onClick) return theme.text
|
||||||
if (props.complete) return theme.textMuted
|
if (props.complete) return theme.textMuted
|
||||||
return theme.text
|
return theme.text
|
||||||
})
|
})
|
||||||
@@ -1658,6 +1660,12 @@ function InlineTool(props: {
|
|||||||
<box
|
<box
|
||||||
marginTop={margin()}
|
marginTop={margin()}
|
||||||
paddingLeft={3}
|
paddingLeft={3}
|
||||||
|
onMouseOver={() => props.onClick && setHover(true)}
|
||||||
|
onMouseOut={() => setHover(false)}
|
||||||
|
onMouseUp={() => {
|
||||||
|
if (renderer.getSelection()?.getSelectedText()) return
|
||||||
|
props.onClick?.()
|
||||||
|
}}
|
||||||
renderBefore={function () {
|
renderBefore={function () {
|
||||||
const el = this as BoxRenderable
|
const el = this as BoxRenderable
|
||||||
const parent = el.parent
|
const parent = el.parent
|
||||||
@@ -1680,23 +1688,13 @@ function InlineTool(props: {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
}}
|
}}
|
||||||
onMouseOver={() => props.onClick && setHover(true)}
|
|
||||||
onMouseOut={() => setHover(false)}
|
|
||||||
onMouseUp={() => {
|
|
||||||
if (renderer.hasSelection) return
|
|
||||||
props.onClick?.()
|
|
||||||
}}
|
|
||||||
>
|
>
|
||||||
<Switch>
|
<Switch>
|
||||||
<Match when={props.spinner}>
|
<Match when={props.spinner}>
|
||||||
<Spinner color={hover() ? theme.text : fg()} children={props.children} />
|
<Spinner color={fg()} children={props.children} />
|
||||||
</Match>
|
</Match>
|
||||||
<Match when={true}>
|
<Match when={true}>
|
||||||
<text
|
<text paddingLeft={3} fg={fg()} attributes={denied() ? TextAttributes.STRIKETHROUGH : undefined}>
|
||||||
paddingLeft={3}
|
|
||||||
fg={hover() ? theme.text : fg()}
|
|
||||||
attributes={denied() ? TextAttributes.STRIKETHROUGH : undefined}
|
|
||||||
>
|
|
||||||
<Show fallback={<>~ {props.pending}</>} when={props.complete}>
|
<Show fallback={<>~ {props.pending}</>} when={props.complete}>
|
||||||
<span style={{ fg: props.iconColor }}>{props.icon}</span> {props.children}
|
<span style={{ fg: props.iconColor }}>{props.icon}</span> {props.children}
|
||||||
</Show>
|
</Show>
|
||||||
@@ -1735,7 +1733,7 @@ function BlockTool(props: {
|
|||||||
onMouseOver={() => props.onClick && setHover(true)}
|
onMouseOver={() => props.onClick && setHover(true)}
|
||||||
onMouseOut={() => setHover(false)}
|
onMouseOut={() => setHover(false)}
|
||||||
onMouseUp={() => {
|
onMouseUp={() => {
|
||||||
if (renderer.hasSelection) return
|
if (renderer.getSelection()?.getSelectedText()) return
|
||||||
props.onClick?.()
|
props.onClick?.()
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
@@ -1955,7 +1953,10 @@ function WebSearch(props: ToolProps<any>) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function Task(props: ToolProps<typeof TaskTool>) {
|
function Task(props: ToolProps<typeof TaskTool>) {
|
||||||
|
const { theme } = useTheme()
|
||||||
|
const keybind = useKeybind()
|
||||||
const { navigate } = useRoute()
|
const { navigate } = useRoute()
|
||||||
|
const local = useLocal()
|
||||||
const sync = useSync()
|
const sync = useSync()
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
@@ -2008,15 +2009,11 @@ function Task(props: ToolProps<typeof TaskTool>) {
|
|||||||
complete={props.input.description}
|
complete={props.input.description}
|
||||||
pending="Delegating..."
|
pending="Delegating..."
|
||||||
part={props.part}
|
part={props.part}
|
||||||
onClick={
|
onClick={() => {
|
||||||
props.metadata.sessionId
|
if (props.metadata.sessionId) {
|
||||||
? () => {
|
navigate({ type: "session", sessionID: props.metadata.sessionId })
|
||||||
const id = props.metadata.sessionId
|
|
||||||
if (!id) return
|
|
||||||
navigate({ type: "session", sessionID: id })
|
|
||||||
}
|
|
||||||
: undefined
|
|
||||||
}
|
}
|
||||||
|
}}
|
||||||
>
|
>
|
||||||
{content()}
|
{content()}
|
||||||
</InlineTool>
|
</InlineTool>
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://json.schemastore.org/package.json",
|
"$schema": "https://json.schemastore.org/package.json",
|
||||||
"name": "@opencode-ai/plugin",
|
"name": "@opencode-ai/plugin",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://json.schemastore.org/package.json",
|
"$schema": "https://json.schemastore.org/package.json",
|
||||||
"name": "@opencode-ai/sdk",
|
"name": "@opencode-ai/sdk",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@@ -12,18 +12,9 @@
|
|||||||
".": "./src/index.ts",
|
".": "./src/index.ts",
|
||||||
"./client": "./src/client.ts",
|
"./client": "./src/client.ts",
|
||||||
"./server": "./src/server.ts",
|
"./server": "./src/server.ts",
|
||||||
"./v2": {
|
"./v2": "./src/v2/index.ts",
|
||||||
"types": "./dist/v2/index.d.ts",
|
"./v2/client": "./src/v2/client.ts",
|
||||||
"default": "./src/v2/index.ts"
|
"./v2/gen/client": "./src/v2/gen/client/index.ts",
|
||||||
},
|
|
||||||
"./v2/client": {
|
|
||||||
"types": "./dist/v2/client.d.ts",
|
|
||||||
"default": "./src/v2/client.ts"
|
|
||||||
},
|
|
||||||
"./v2/gen/client": {
|
|
||||||
"types": "./dist/v2/gen/client/index.d.ts",
|
|
||||||
"default": "./src/v2/gen/client/index.ts"
|
|
||||||
},
|
|
||||||
"./v2/server": "./src/v2/server.ts"
|
"./v2/server": "./src/v2/server.ts"
|
||||||
},
|
},
|
||||||
"files": [
|
"files": [
|
||||||
@@ -36,8 +27,5 @@
|
|||||||
"typescript": "catalog:",
|
"typescript": "catalog:",
|
||||||
"@typescript/native-preview": "catalog:"
|
"@typescript/native-preview": "catalog:"
|
||||||
},
|
},
|
||||||
"dependencies": {},
|
"dependencies": {}
|
||||||
"publishConfig": {
|
|
||||||
"directory": "dist"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@opencode-ai/slack",
|
"name": "@opencode-ai/slack",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@opencode-ai/ui",
|
"name": "@opencode-ai/ui",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"exports": {
|
"exports": {
|
||||||
|
|||||||
@@ -203,6 +203,41 @@ export function BasicTool(props: BasicToolProps) {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
export function GenericTool(props: { tool: string; status?: string; hideDetails?: boolean }) {
|
function label(input: Record<string, unknown> | undefined) {
|
||||||
return <BasicTool icon="mcp" status={props.status} trigger={{ title: props.tool }} hideDetails={props.hideDetails} />
|
const keys = ["description", "query", "url", "filePath", "path", "pattern", "name"]
|
||||||
|
return keys.map((key) => input?.[key]).find((value): value is string => typeof value === "string" && value.length > 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
function args(input: Record<string, unknown> | undefined) {
|
||||||
|
if (!input) return []
|
||||||
|
const skip = new Set(["description", "query", "url", "filePath", "path", "pattern", "name"])
|
||||||
|
return Object.entries(input)
|
||||||
|
.filter(([key]) => !skip.has(key))
|
||||||
|
.flatMap(([key, value]) => {
|
||||||
|
if (typeof value === "string") return [`${key}=${value}`]
|
||||||
|
if (typeof value === "number") return [`${key}=${value}`]
|
||||||
|
if (typeof value === "boolean") return [`${key}=${value}`]
|
||||||
|
return []
|
||||||
|
})
|
||||||
|
.slice(0, 3)
|
||||||
|
}
|
||||||
|
|
||||||
|
export function GenericTool(props: {
|
||||||
|
tool: string
|
||||||
|
status?: string
|
||||||
|
hideDetails?: boolean
|
||||||
|
input?: Record<string, unknown>
|
||||||
|
}) {
|
||||||
|
return (
|
||||||
|
<BasicTool
|
||||||
|
icon="mcp"
|
||||||
|
status={props.status}
|
||||||
|
trigger={{
|
||||||
|
title: `Called \`${props.tool}\``,
|
||||||
|
subtitle: label(props.input),
|
||||||
|
args: args(props.input),
|
||||||
|
}}
|
||||||
|
hideDetails={props.hideDetails}
|
||||||
|
/>
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
[data-component="file-icon"] {
|
[data-component="file-icon"] {
|
||||||
|
display: block;
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
width: 16px;
|
width: 16px;
|
||||||
height: 16px;
|
height: 16px;
|
||||||
|
|||||||
@@ -1,10 +1,8 @@
|
|||||||
import type { Component, JSX } from "solid-js"
|
import type { Component, JSX } from "solid-js"
|
||||||
import { createMemo, splitProps, Show } from "solid-js"
|
import { createMemo, createUniqueId, splitProps, Show } from "solid-js"
|
||||||
import sprite from "./file-icons/sprite.svg"
|
import sprite from "./file-icons/sprite.svg"
|
||||||
import type { IconName } from "./file-icons/types"
|
import type { IconName } from "./file-icons/types"
|
||||||
|
|
||||||
let filter = 0
|
|
||||||
|
|
||||||
export type FileIconProps = JSX.GSVGAttributes<SVGSVGElement> & {
|
export type FileIconProps = JSX.GSVGAttributes<SVGSVGElement> & {
|
||||||
node: { path: string; type: "file" | "directory" }
|
node: { path: string; type: "file" | "directory" }
|
||||||
expanded?: boolean
|
expanded?: boolean
|
||||||
@@ -14,7 +12,7 @@ export type FileIconProps = JSX.GSVGAttributes<SVGSVGElement> & {
|
|||||||
export const FileIcon: Component<FileIconProps> = (props) => {
|
export const FileIcon: Component<FileIconProps> = (props) => {
|
||||||
const [local, rest] = splitProps(props, ["node", "class", "classList", "expanded", "mono"])
|
const [local, rest] = splitProps(props, ["node", "class", "classList", "expanded", "mono"])
|
||||||
const name = createMemo(() => chooseIconName(local.node.path, local.node.type, local.expanded || false))
|
const name = createMemo(() => chooseIconName(local.node.path, local.node.type, local.expanded || false))
|
||||||
const id = `file-icon-mono-${filter++}`
|
const id = `file-icon-mono-${createUniqueId()}`
|
||||||
return (
|
return (
|
||||||
<svg
|
<svg
|
||||||
data-component="file-icon"
|
data-component="file-icon"
|
||||||
@@ -24,15 +22,14 @@ export const FileIcon: Component<FileIconProps> = (props) => {
|
|||||||
[local.class ?? ""]: !!local.class,
|
[local.class ?? ""]: !!local.class,
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
<Show when={local.mono}>
|
<Show when={local.mono} fallback={<use href={`${sprite}#${name()}`} />}>
|
||||||
<defs>
|
<defs>
|
||||||
<filter id={id} color-interpolation-filters="sRGB">
|
<mask id={id} mask-type="alpha">
|
||||||
<feFlood flood-color="currentColor" result="flood" />
|
<use href={`${sprite}#${name()}`} />
|
||||||
<feComposite in="flood" in2="SourceAlpha" operator="in" />
|
</mask>
|
||||||
</filter>
|
|
||||||
</defs>
|
</defs>
|
||||||
|
<rect width="100%" height="100%" fill="currentColor" mask={`url(#${id})`} />
|
||||||
</Show>
|
</Show>
|
||||||
<use href={`${sprite}#${name()}`} filter={local.mono ? `url(#${id})` : undefined} />
|
|
||||||
</svg>
|
</svg>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -577,6 +577,46 @@
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[data-component="exa-tool-output"] {
|
||||||
|
width: 100%;
|
||||||
|
padding-top: 8px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-slot="basic-tool-tool-subtitle"].exa-tool-query {
|
||||||
|
display: block;
|
||||||
|
max-width: 100%;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-slot="exa-tool-links"] {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 4px;
|
||||||
|
}
|
||||||
|
|
||||||
|
[data-slot="exa-tool-link"] {
|
||||||
|
display: block;
|
||||||
|
max-width: 100%;
|
||||||
|
color: var(--text-interactive-base);
|
||||||
|
text-decoration: underline;
|
||||||
|
text-underline-offset: 2px;
|
||||||
|
overflow: hidden;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
white-space: nowrap;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
color: var(--text-interactive-base);
|
||||||
|
}
|
||||||
|
|
||||||
|
&:visited {
|
||||||
|
color: var(--text-interactive-base);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[data-component="todos"] {
|
[data-component="todos"] {
|
||||||
padding: 10px 0 24px 0;
|
padding: 10px 0 24px 0;
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|||||||
@@ -243,6 +243,18 @@ export function getToolInfo(tool: string, input: any = {}): ToolInfo {
|
|||||||
title: i18n.t("ui.tool.webfetch"),
|
title: i18n.t("ui.tool.webfetch"),
|
||||||
subtitle: input.url,
|
subtitle: input.url,
|
||||||
}
|
}
|
||||||
|
case "websearch":
|
||||||
|
return {
|
||||||
|
icon: "window-cursor",
|
||||||
|
title: i18n.t("ui.tool.websearch"),
|
||||||
|
subtitle: input.query,
|
||||||
|
}
|
||||||
|
case "codesearch":
|
||||||
|
return {
|
||||||
|
icon: "code",
|
||||||
|
title: i18n.t("ui.tool.codesearch"),
|
||||||
|
subtitle: input.query,
|
||||||
|
}
|
||||||
case "task":
|
case "task":
|
||||||
return {
|
return {
|
||||||
icon: "task",
|
icon: "task",
|
||||||
@@ -303,6 +315,18 @@ export function getToolInfo(tool: string, input: any = {}): ToolInfo {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function urls(text: string | undefined) {
|
||||||
|
if (!text) return []
|
||||||
|
const seen = new Set<string>()
|
||||||
|
return [...text.matchAll(/https?:\/\/[^\s<>"'`)\]]+/g)]
|
||||||
|
.map((item) => item[0].replace(/[),.;:!?]+$/g, ""))
|
||||||
|
.filter((item) => {
|
||||||
|
if (seen.has(item)) return false
|
||||||
|
seen.add(item)
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
const CONTEXT_GROUP_TOOLS = new Set(["read", "glob", "grep", "list"])
|
const CONTEXT_GROUP_TOOLS = new Set(["read", "glob", "grep", "list"])
|
||||||
const HIDDEN_TOOLS = new Set(["todowrite", "todoread"])
|
const HIDDEN_TOOLS = new Set(["todowrite", "todoread"])
|
||||||
|
|
||||||
@@ -598,6 +622,32 @@ function contextToolSummary(parts: ToolPart[]) {
|
|||||||
return { read, search, list }
|
return { read, search, list }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ExaOutput(props: { output?: string }) {
|
||||||
|
const links = createMemo(() => urls(props.output))
|
||||||
|
|
||||||
|
return (
|
||||||
|
<Show when={links().length > 0}>
|
||||||
|
<div data-component="exa-tool-output">
|
||||||
|
<div data-slot="exa-tool-links">
|
||||||
|
<For each={links()}>
|
||||||
|
{(url) => (
|
||||||
|
<a
|
||||||
|
data-slot="exa-tool-link"
|
||||||
|
href={url}
|
||||||
|
target="_blank"
|
||||||
|
rel="noopener noreferrer"
|
||||||
|
onClick={(event) => event.stopPropagation()}
|
||||||
|
>
|
||||||
|
{url}
|
||||||
|
</a>
|
||||||
|
)}
|
||||||
|
</For>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</Show>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
export function registerPartComponent(type: string, component: PartComponent) {
|
export function registerPartComponent(type: string, component: PartComponent) {
|
||||||
PART_MAPPING[type] = component
|
PART_MAPPING[type] = component
|
||||||
}
|
}
|
||||||
@@ -1467,6 +1517,58 @@ ToolRegistry.register({
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
ToolRegistry.register({
|
||||||
|
name: "websearch",
|
||||||
|
render(props) {
|
||||||
|
const i18n = useI18n()
|
||||||
|
const query = createMemo(() => {
|
||||||
|
const value = props.input.query
|
||||||
|
if (typeof value !== "string") return ""
|
||||||
|
return value
|
||||||
|
})
|
||||||
|
|
||||||
|
return (
|
||||||
|
<BasicTool
|
||||||
|
{...props}
|
||||||
|
icon="window-cursor"
|
||||||
|
trigger={{
|
||||||
|
title: i18n.t("ui.tool.websearch"),
|
||||||
|
subtitle: query(),
|
||||||
|
subtitleClass: "exa-tool-query",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<ExaOutput output={props.output} />
|
||||||
|
</BasicTool>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
|
ToolRegistry.register({
|
||||||
|
name: "codesearch",
|
||||||
|
render(props) {
|
||||||
|
const i18n = useI18n()
|
||||||
|
const query = createMemo(() => {
|
||||||
|
const value = props.input.query
|
||||||
|
if (typeof value !== "string") return ""
|
||||||
|
return value
|
||||||
|
})
|
||||||
|
|
||||||
|
return (
|
||||||
|
<BasicTool
|
||||||
|
{...props}
|
||||||
|
icon="code"
|
||||||
|
trigger={{
|
||||||
|
title: i18n.t("ui.tool.codesearch"),
|
||||||
|
subtitle: query(),
|
||||||
|
subtitleClass: "exa-tool-query",
|
||||||
|
}}
|
||||||
|
>
|
||||||
|
<ExaOutput output={props.output} />
|
||||||
|
</BasicTool>
|
||||||
|
)
|
||||||
|
},
|
||||||
|
})
|
||||||
|
|
||||||
ToolRegistry.register({
|
ToolRegistry.register({
|
||||||
name: "task",
|
name: "task",
|
||||||
render(props) {
|
render(props) {
|
||||||
|
|||||||
@@ -171,10 +171,8 @@
|
|||||||
|
|
||||||
[data-slot="session-turn-diff-path"] {
|
[data-slot="session-turn-diff-path"] {
|
||||||
display: flex;
|
display: flex;
|
||||||
|
flex-grow: 1;
|
||||||
min-width: 0;
|
min-width: 0;
|
||||||
align-items: baseline;
|
|
||||||
overflow: hidden;
|
|
||||||
white-space: nowrap;
|
|
||||||
|
|
||||||
font-family: var(--font-family-sans);
|
font-family: var(--font-family-sans);
|
||||||
font-size: var(--font-size-small);
|
font-size: var(--font-size-small);
|
||||||
@@ -182,24 +180,16 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
[data-slot="session-turn-diff-directory"] {
|
[data-slot="session-turn-diff-directory"] {
|
||||||
flex: 1 1 auto;
|
color: var(--text-base);
|
||||||
color: var(--text-weak);
|
|
||||||
min-width: 0;
|
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
text-overflow: ellipsis;
|
text-overflow: ellipsis;
|
||||||
white-space: nowrap;
|
white-space: nowrap;
|
||||||
direction: rtl;
|
direction: rtl;
|
||||||
unicode-bidi: plaintext;
|
|
||||||
text-align: left;
|
text-align: left;
|
||||||
}
|
}
|
||||||
|
|
||||||
[data-slot="session-turn-diff-filename"] {
|
[data-slot="session-turn-diff-filename"] {
|
||||||
flex-shrink: 0;
|
flex-shrink: 0;
|
||||||
max-width: 100%;
|
|
||||||
min-width: 0;
|
|
||||||
overflow: hidden;
|
|
||||||
text-overflow: ellipsis;
|
|
||||||
white-space: nowrap;
|
|
||||||
color: var(--text-strong);
|
color: var(--text-strong);
|
||||||
font-weight: var(--font-weight-medium);
|
font-weight: var(--font-weight-medium);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -241,26 +241,26 @@
|
|||||||
[data-slot="tabs-trigger"] {
|
[data-slot="tabs-trigger"] {
|
||||||
.tab-fileicon-color,
|
.tab-fileicon-color,
|
||||||
.tab-fileicon-mono {
|
.tab-fileicon-mono {
|
||||||
transition: opacity 120ms ease;
|
pointer-events: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-fileicon-color {
|
.tab-fileicon-color {
|
||||||
opacity: 0;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-fileicon-mono {
|
.tab-fileicon-mono {
|
||||||
opacity: 1;
|
display: block;
|
||||||
color: currentColor;
|
color: currentColor;
|
||||||
}
|
}
|
||||||
|
|
||||||
&[data-selected],
|
&[data-selected],
|
||||||
&:hover {
|
&:hover {
|
||||||
.tab-fileicon-color {
|
.tab-fileicon-color {
|
||||||
opacity: 1;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tab-fileicon-mono {
|
.tab-fileicon-mono {
|
||||||
opacity: 0;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -94,6 +94,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "جلب الويب",
|
"ui.tool.webfetch": "جلب الويب",
|
||||||
|
"ui.tool.websearch": "بحث الويب",
|
||||||
|
"ui.tool.codesearch": "بحث الكود",
|
||||||
"ui.tool.shell": "Shell",
|
"ui.tool.shell": "Shell",
|
||||||
"ui.tool.patch": "تصحيح",
|
"ui.tool.patch": "تصحيح",
|
||||||
"ui.tool.todos": "المهام",
|
"ui.tool.todos": "المهام",
|
||||||
|
|||||||
@@ -94,6 +94,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Buscar Web",
|
"ui.tool.webfetch": "Buscar Web",
|
||||||
|
"ui.tool.websearch": "Pesquisa na Web",
|
||||||
|
"ui.tool.codesearch": "Pesquisa de Código",
|
||||||
"ui.tool.shell": "Shell",
|
"ui.tool.shell": "Shell",
|
||||||
"ui.tool.patch": "Patch",
|
"ui.tool.patch": "Patch",
|
||||||
"ui.tool.todos": "Tarefas",
|
"ui.tool.todos": "Tarefas",
|
||||||
|
|||||||
@@ -98,6 +98,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Web preuzimanje",
|
"ui.tool.webfetch": "Web preuzimanje",
|
||||||
|
"ui.tool.websearch": "Pretraga weba",
|
||||||
|
"ui.tool.codesearch": "Pretraga koda",
|
||||||
"ui.tool.shell": "Shell",
|
"ui.tool.shell": "Shell",
|
||||||
"ui.tool.patch": "Patch",
|
"ui.tool.patch": "Patch",
|
||||||
"ui.tool.todos": "Lista zadataka",
|
"ui.tool.todos": "Lista zadataka",
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Webhentning",
|
"ui.tool.webfetch": "Webhentning",
|
||||||
|
"ui.tool.websearch": "Websøgning",
|
||||||
|
"ui.tool.codesearch": "Kodesøgning",
|
||||||
"ui.tool.shell": "Shell",
|
"ui.tool.shell": "Shell",
|
||||||
"ui.tool.patch": "Patch",
|
"ui.tool.patch": "Patch",
|
||||||
"ui.tool.todos": "Opgaver",
|
"ui.tool.todos": "Opgaver",
|
||||||
|
|||||||
@@ -99,6 +99,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Webabruf",
|
"ui.tool.webfetch": "Webabruf",
|
||||||
|
"ui.tool.websearch": "Websuche",
|
||||||
|
"ui.tool.codesearch": "Codesuche",
|
||||||
"ui.tool.shell": "Shell",
|
"ui.tool.shell": "Shell",
|
||||||
"ui.tool.patch": "Patch",
|
"ui.tool.patch": "Patch",
|
||||||
"ui.tool.todos": "Aufgaben",
|
"ui.tool.todos": "Aufgaben",
|
||||||
|
|||||||
@@ -95,6 +95,8 @@ export const dict: Record<string, string> = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Webfetch",
|
"ui.tool.webfetch": "Webfetch",
|
||||||
|
"ui.tool.websearch": "Web Search",
|
||||||
|
"ui.tool.codesearch": "Code Search",
|
||||||
"ui.tool.shell": "Shell",
|
"ui.tool.shell": "Shell",
|
||||||
"ui.tool.patch": "Patch",
|
"ui.tool.patch": "Patch",
|
||||||
"ui.tool.todos": "To-dos",
|
"ui.tool.todos": "To-dos",
|
||||||
|
|||||||
@@ -94,6 +94,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Webfetch",
|
"ui.tool.webfetch": "Webfetch",
|
||||||
|
"ui.tool.websearch": "Búsqueda web",
|
||||||
|
"ui.tool.codesearch": "Búsqueda de código",
|
||||||
"ui.tool.shell": "Shell",
|
"ui.tool.shell": "Shell",
|
||||||
"ui.tool.patch": "Parche",
|
"ui.tool.patch": "Parche",
|
||||||
"ui.tool.todos": "Tareas",
|
"ui.tool.todos": "Tareas",
|
||||||
|
|||||||
@@ -94,6 +94,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Webfetch",
|
"ui.tool.webfetch": "Webfetch",
|
||||||
|
"ui.tool.websearch": "Recherche Web",
|
||||||
|
"ui.tool.codesearch": "Recherche de code",
|
||||||
"ui.tool.shell": "Shell",
|
"ui.tool.shell": "Shell",
|
||||||
"ui.tool.patch": "Patch",
|
"ui.tool.patch": "Patch",
|
||||||
"ui.tool.todos": "Tâches",
|
"ui.tool.todos": "Tâches",
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Webfetch",
|
"ui.tool.webfetch": "Webfetch",
|
||||||
|
"ui.tool.websearch": "Web検索",
|
||||||
|
"ui.tool.codesearch": "コード検索",
|
||||||
"ui.tool.shell": "Shell",
|
"ui.tool.shell": "Shell",
|
||||||
"ui.tool.patch": "Patch",
|
"ui.tool.patch": "Patch",
|
||||||
"ui.tool.todos": "Todo",
|
"ui.tool.todos": "Todo",
|
||||||
|
|||||||
@@ -94,6 +94,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "웹 가져오기",
|
"ui.tool.webfetch": "웹 가져오기",
|
||||||
|
"ui.tool.websearch": "웹 검색",
|
||||||
|
"ui.tool.codesearch": "코드 검색",
|
||||||
"ui.tool.shell": "셸",
|
"ui.tool.shell": "셸",
|
||||||
"ui.tool.patch": "패치",
|
"ui.tool.patch": "패치",
|
||||||
"ui.tool.todos": "할 일",
|
"ui.tool.todos": "할 일",
|
||||||
|
|||||||
@@ -97,6 +97,8 @@ export const dict: Record<Keys, string> = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Webhenting",
|
"ui.tool.webfetch": "Webhenting",
|
||||||
|
"ui.tool.websearch": "Nettsøk",
|
||||||
|
"ui.tool.codesearch": "Kodesøk",
|
||||||
"ui.tool.shell": "Shell",
|
"ui.tool.shell": "Shell",
|
||||||
"ui.tool.patch": "Patch",
|
"ui.tool.patch": "Patch",
|
||||||
"ui.tool.todos": "Gjøremål",
|
"ui.tool.todos": "Gjøremål",
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Pobieranie sieciowe",
|
"ui.tool.webfetch": "Pobieranie sieciowe",
|
||||||
|
"ui.tool.websearch": "Wyszukiwanie w sieci",
|
||||||
|
"ui.tool.codesearch": "Wyszukiwanie kodu",
|
||||||
"ui.tool.shell": "Terminal",
|
"ui.tool.shell": "Terminal",
|
||||||
"ui.tool.patch": "Patch",
|
"ui.tool.patch": "Patch",
|
||||||
"ui.tool.todos": "Zadania",
|
"ui.tool.todos": "Zadania",
|
||||||
|
|||||||
@@ -93,6 +93,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Webfetch",
|
"ui.tool.webfetch": "Webfetch",
|
||||||
|
"ui.tool.websearch": "Веб-поиск",
|
||||||
|
"ui.tool.codesearch": "Поиск кода",
|
||||||
"ui.tool.shell": "Оболочка",
|
"ui.tool.shell": "Оболочка",
|
||||||
"ui.tool.patch": "Патч",
|
"ui.tool.patch": "Патч",
|
||||||
"ui.tool.todos": "Задачи",
|
"ui.tool.todos": "Задачи",
|
||||||
|
|||||||
@@ -95,6 +95,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "ดึงจากเว็บ",
|
"ui.tool.webfetch": "ดึงจากเว็บ",
|
||||||
|
"ui.tool.websearch": "ค้นหาเว็บ",
|
||||||
|
"ui.tool.codesearch": "ค้นหาโค้ด",
|
||||||
"ui.tool.shell": "เชลล์",
|
"ui.tool.shell": "เชลล์",
|
||||||
"ui.tool.patch": "แพตช์",
|
"ui.tool.patch": "แพตช์",
|
||||||
"ui.tool.todos": "รายการงาน",
|
"ui.tool.todos": "รายการงาน",
|
||||||
|
|||||||
@@ -90,6 +90,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Web getir",
|
"ui.tool.webfetch": "Web getir",
|
||||||
|
"ui.tool.websearch": "Web Araması",
|
||||||
|
"ui.tool.codesearch": "Kod Araması",
|
||||||
"ui.tool.shell": "Kabuk",
|
"ui.tool.shell": "Kabuk",
|
||||||
"ui.tool.patch": "Yama",
|
"ui.tool.patch": "Yama",
|
||||||
"ui.tool.todos": "Görevler",
|
"ui.tool.todos": "Görevler",
|
||||||
|
|||||||
@@ -98,6 +98,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Webfetch",
|
"ui.tool.webfetch": "Webfetch",
|
||||||
|
"ui.tool.websearch": "网络搜索",
|
||||||
|
"ui.tool.codesearch": "代码搜索",
|
||||||
"ui.tool.shell": "Shell",
|
"ui.tool.shell": "Shell",
|
||||||
"ui.tool.patch": "补丁",
|
"ui.tool.patch": "补丁",
|
||||||
"ui.tool.todos": "待办",
|
"ui.tool.todos": "待办",
|
||||||
|
|||||||
@@ -98,6 +98,8 @@ export const dict = {
|
|||||||
"ui.tool.glob": "Glob",
|
"ui.tool.glob": "Glob",
|
||||||
"ui.tool.grep": "Grep",
|
"ui.tool.grep": "Grep",
|
||||||
"ui.tool.webfetch": "Webfetch",
|
"ui.tool.webfetch": "Webfetch",
|
||||||
|
"ui.tool.websearch": "網頁搜尋",
|
||||||
|
"ui.tool.codesearch": "程式碼搜尋",
|
||||||
"ui.tool.shell": "Shell",
|
"ui.tool.shell": "Shell",
|
||||||
"ui.tool.patch": "修補",
|
"ui.tool.patch": "修補",
|
||||||
"ui.tool.todos": "待辦",
|
"ui.tool.todos": "待辦",
|
||||||
|
|||||||
@@ -1,16 +1,25 @@
|
|||||||
import type { HexColor, OklchColor } from "./types"
|
import type { HexColor, OklchColor } from "./types"
|
||||||
|
|
||||||
|
function clamp(v: number, min: number, max: number) {
|
||||||
|
return Math.max(min, Math.min(max, v))
|
||||||
|
}
|
||||||
|
|
||||||
|
function hue(v: number) {
|
||||||
|
return ((v % 360) + 360) % 360
|
||||||
|
}
|
||||||
|
|
||||||
export function hexToRgb(hex: HexColor): { r: number; g: number; b: number } {
|
export function hexToRgb(hex: HexColor): { r: number; g: number; b: number } {
|
||||||
const h = hex.replace("#", "")
|
const h = hex.replace("#", "")
|
||||||
const full =
|
const full =
|
||||||
h.length === 3
|
h.length === 3 || h.length === 4
|
||||||
? h
|
? h
|
||||||
.split("")
|
.split("")
|
||||||
.map((c) => c + c)
|
.map((c) => c + c)
|
||||||
.join("")
|
.join("")
|
||||||
: h
|
: h
|
||||||
|
const rgb = full.length === 8 ? full.slice(0, 6) : full
|
||||||
|
|
||||||
const num = parseInt(full, 16)
|
const num = parseInt(rgb, 16)
|
||||||
return {
|
return {
|
||||||
r: ((num >> 16) & 255) / 255,
|
r: ((num >> 16) & 255) / 255,
|
||||||
g: ((num >> 8) & 255) / 255,
|
g: ((num >> 8) & 255) / 255,
|
||||||
@@ -20,7 +29,7 @@ export function hexToRgb(hex: HexColor): { r: number; g: number; b: number } {
|
|||||||
|
|
||||||
export function rgbToHex(r: number, g: number, b: number): HexColor {
|
export function rgbToHex(r: number, g: number, b: number): HexColor {
|
||||||
const toHex = (v: number) => {
|
const toHex = (v: number) => {
|
||||||
const clamped = Math.max(0, Math.min(1, v))
|
const clamped = clamp(v, 0, 1)
|
||||||
const int = Math.round(clamped * 255)
|
const int = Math.round(clamped * 255)
|
||||||
return int.toString(16).padStart(2, "0")
|
return int.toString(16).padStart(2, "0")
|
||||||
}
|
}
|
||||||
@@ -91,8 +100,33 @@ export function hexToOklch(hex: HexColor): OklchColor {
|
|||||||
return rgbToOklch(r, g, b)
|
return rgbToOklch(r, g, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function fitOklch(oklch: OklchColor): OklchColor {
|
||||||
|
const base = {
|
||||||
|
l: clamp(oklch.l, 0, 1),
|
||||||
|
c: Math.max(0, oklch.c),
|
||||||
|
h: hue(oklch.h),
|
||||||
|
}
|
||||||
|
|
||||||
|
const rgb = oklchToRgb(base)
|
||||||
|
if (rgb.r >= 0 && rgb.r <= 1 && rgb.g >= 0 && rgb.g <= 1 && rgb.b >= 0 && rgb.b <= 1) {
|
||||||
|
return base
|
||||||
|
}
|
||||||
|
|
||||||
|
let c = base.c
|
||||||
|
for (let i = 0; i < 24; i++) {
|
||||||
|
c *= 0.9
|
||||||
|
const next = { ...base, c }
|
||||||
|
const out = oklchToRgb(next)
|
||||||
|
if (out.r >= 0 && out.r <= 1 && out.g >= 0 && out.g <= 1 && out.b >= 0 && out.b <= 1) {
|
||||||
|
return next
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return { ...base, c: 0 }
|
||||||
|
}
|
||||||
|
|
||||||
export function oklchToHex(oklch: OklchColor): HexColor {
|
export function oklchToHex(oklch: OklchColor): HexColor {
|
||||||
const { r, g, b } = oklchToRgb(oklch)
|
const { r, g, b } = oklchToRgb(fitOklch(oklch))
|
||||||
return rgbToHex(r, g, b)
|
return rgbToHex(r, g, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -164,19 +198,39 @@ export function generateAlphaScale(scale: HexColor[], isDark: boolean): HexColor
|
|||||||
export function mixColors(color1: HexColor, color2: HexColor, amount: number): HexColor {
|
export function mixColors(color1: HexColor, color2: HexColor, amount: number): HexColor {
|
||||||
const c1 = hexToOklch(color1)
|
const c1 = hexToOklch(color1)
|
||||||
const c2 = hexToOklch(color2)
|
const c2 = hexToOklch(color2)
|
||||||
|
const delta = ((((c2.h - c1.h) % 360) + 540) % 360) - 180
|
||||||
|
|
||||||
return oklchToHex({
|
return oklchToHex({
|
||||||
l: c1.l + (c2.l - c1.l) * amount,
|
l: c1.l + (c2.l - c1.l) * amount,
|
||||||
c: c1.c + (c2.c - c1.c) * amount,
|
c: c1.c + (c2.c - c1.c) * amount,
|
||||||
h: c1.h + (c2.h - c1.h) * amount,
|
h: c1.h + delta * amount,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function shift(color: HexColor, value: { l?: number; c?: number; h?: number }): HexColor {
|
||||||
|
const base = hexToOklch(color)
|
||||||
|
return oklchToHex({
|
||||||
|
l: base.l + (value.l ?? 0),
|
||||||
|
c: base.c * (value.c ?? 1),
|
||||||
|
h: base.h + (value.h ?? 0),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
export function blend(color: HexColor, background: HexColor, alpha: number): HexColor {
|
||||||
|
const fg = hexToRgb(color)
|
||||||
|
const bg = hexToRgb(background)
|
||||||
|
return rgbToHex(
|
||||||
|
fg.r * alpha + bg.r * (1 - alpha),
|
||||||
|
fg.g * alpha + bg.g * (1 - alpha),
|
||||||
|
fg.b * alpha + bg.b * (1 - alpha),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
export function lighten(color: HexColor, amount: number): HexColor {
|
export function lighten(color: HexColor, amount: number): HexColor {
|
||||||
const oklch = hexToOklch(color)
|
const oklch = hexToOklch(color)
|
||||||
return oklchToHex({
|
return oklchToHex({
|
||||||
...oklch,
|
...oklch,
|
||||||
l: Math.min(1, oklch.l + amount),
|
l: clamp(oklch.l + amount, 0, 1),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -184,7 +238,7 @@ export function darken(color: HexColor, amount: number): HexColor {
|
|||||||
const oklch = hexToOklch(color)
|
const oklch = hexToOklch(color)
|
||||||
return oklchToHex({
|
return oklchToHex({
|
||||||
...oklch,
|
...oklch,
|
||||||
l: Math.max(0, oklch.l - amount),
|
l: clamp(oklch.l - amount, 0, 1),
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -36,12 +36,13 @@
|
|||||||
},
|
},
|
||||||
"ColorValue": {
|
"ColorValue": {
|
||||||
"type": "string",
|
"type": "string",
|
||||||
"pattern": "^(#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|var\(--[a-z0-9-]+\))$",
|
"pattern": "^(#([0-9a-fA-F]{3}|[0-9a-fA-F]{4}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})|var\\(--[a-z0-9-]+\\))$",
|
||||||
"description": "Either a hex color value (#rgb/#rgba/#rrggbb/#rrggbbaa) or a CSS variable reference"
|
"description": "Either a hex color value (#rgb/#rgba/#rrggbb/#rrggbbaa) or a CSS variable reference"
|
||||||
},
|
},
|
||||||
"ThemeSeedColors": {
|
"ThemeSeedColors": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"description": "The minimum set of colors needed to generate a theme",
|
"description": "The legacy semantic seed set used to generate a theme",
|
||||||
|
"additionalProperties": false,
|
||||||
"required": ["neutral", "primary", "success", "warning", "error", "info", "interactive", "diffAdd", "diffDelete"],
|
"required": ["neutral", "primary", "success", "warning", "error", "info", "interactive", "diffAdd", "diffDelete"],
|
||||||
"properties": {
|
"properties": {
|
||||||
"neutral": {
|
"neutral": {
|
||||||
@@ -82,14 +83,70 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"ThemePaletteColors": {
|
||||||
|
"type": "object",
|
||||||
|
"description": "A compact semantic palette used to derive the full theme programmatically",
|
||||||
|
"additionalProperties": false,
|
||||||
|
"required": ["neutral", "primary", "success", "warning", "error", "info"],
|
||||||
|
"properties": {
|
||||||
|
"neutral": {
|
||||||
|
"$ref": "#/definitions/HexColor",
|
||||||
|
"description": "Base neutral color for generating the gray scale"
|
||||||
|
},
|
||||||
|
"ink": {
|
||||||
|
"$ref": "#/definitions/HexColor",
|
||||||
|
"description": "Optional foreground or chrome color used to derive text and border tones"
|
||||||
|
},
|
||||||
|
"primary": {
|
||||||
|
"$ref": "#/definitions/HexColor",
|
||||||
|
"description": "Primary brand color used for brand surfaces and strong emphasis"
|
||||||
|
},
|
||||||
|
"success": {
|
||||||
|
"$ref": "#/definitions/HexColor",
|
||||||
|
"description": "Success state color"
|
||||||
|
},
|
||||||
|
"warning": {
|
||||||
|
"$ref": "#/definitions/HexColor",
|
||||||
|
"description": "Warning state color"
|
||||||
|
},
|
||||||
|
"error": {
|
||||||
|
"$ref": "#/definitions/HexColor",
|
||||||
|
"description": "Error or critical state color"
|
||||||
|
},
|
||||||
|
"info": {
|
||||||
|
"$ref": "#/definitions/HexColor",
|
||||||
|
"description": "Informational state color"
|
||||||
|
},
|
||||||
|
"accent": {
|
||||||
|
"$ref": "#/definitions/HexColor",
|
||||||
|
"description": "Optional extra expressive accent for syntax and rich content"
|
||||||
|
},
|
||||||
|
"interactive": {
|
||||||
|
"$ref": "#/definitions/HexColor",
|
||||||
|
"description": "Optional dedicated interactive color; falls back to primary"
|
||||||
|
},
|
||||||
|
"diffAdd": {
|
||||||
|
"$ref": "#/definitions/HexColor",
|
||||||
|
"description": "Optional diff-add seed; falls back to a softened success color"
|
||||||
|
},
|
||||||
|
"diffDelete": {
|
||||||
|
"$ref": "#/definitions/HexColor",
|
||||||
|
"description": "Optional diff-delete seed; falls back to error"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"ThemeVariant": {
|
"ThemeVariant": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
"description": "A theme variant (light or dark) with seed colors and optional overrides",
|
"description": "A theme variant (light or dark) with either a compact palette or legacy seeds and optional overrides",
|
||||||
"required": ["seeds"],
|
"oneOf": [{ "required": ["seeds"] }, { "required": ["palette"] }],
|
||||||
"properties": {
|
"properties": {
|
||||||
"seeds": {
|
"seeds": {
|
||||||
"$ref": "#/definitions/ThemeSeedColors",
|
"$ref": "#/definitions/ThemeSeedColors",
|
||||||
"description": "Seed colors used to generate the full palette"
|
"description": "Legacy seed colors used to generate the full palette"
|
||||||
|
},
|
||||||
|
"palette": {
|
||||||
|
"$ref": "#/definitions/ThemePaletteColors",
|
||||||
|
"description": "Compact palette used to derive the full token set"
|
||||||
},
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"type": "object",
|
"type": "object",
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
export type {
|
export type {
|
||||||
DesktopTheme,
|
DesktopTheme,
|
||||||
|
ThemePaletteColors,
|
||||||
ThemeSeedColors,
|
ThemeSeedColors,
|
||||||
ThemeVariant,
|
ThemeVariant,
|
||||||
HexColor,
|
HexColor,
|
||||||
@@ -19,7 +20,10 @@ export {
|
|||||||
generateScale,
|
generateScale,
|
||||||
generateNeutralScale,
|
generateNeutralScale,
|
||||||
generateAlphaScale,
|
generateAlphaScale,
|
||||||
|
fitOklch,
|
||||||
|
blend,
|
||||||
mixColors,
|
mixColors,
|
||||||
|
shift,
|
||||||
lighten,
|
lighten,
|
||||||
darken,
|
darken,
|
||||||
withAlpha,
|
withAlpha,
|
||||||
|
|||||||
@@ -1,27 +1,117 @@
|
|||||||
import type { ColorValue, DesktopTheme, HexColor, ResolvedTheme, ThemeVariant } from "./types"
|
import type { ColorValue, DesktopTheme, HexColor, ResolvedTheme, ThemeVariant } from "./types"
|
||||||
import { generateNeutralScale, generateScale, hexToOklch, oklchToHex, withAlpha } from "./color"
|
import { blend, generateNeutralScale, generateScale, hexToOklch, oklchToHex, shift, withAlpha } from "./color"
|
||||||
|
|
||||||
export function resolveThemeVariant(variant: ThemeVariant, isDark: boolean): ResolvedTheme {
|
export function resolveThemeVariant(variant: ThemeVariant, isDark: boolean): ResolvedTheme {
|
||||||
const { seeds, overrides = {} } = variant
|
const colors = getColors(variant)
|
||||||
|
const { overrides = {} } = variant
|
||||||
|
|
||||||
const neutral = generateNeutralScale(seeds.neutral, isDark)
|
const neutral = generateNeutralScale(colors.neutral, isDark)
|
||||||
const primary = generateScale(seeds.primary, isDark)
|
const primary = generateScale(colors.primary, isDark)
|
||||||
const success = generateScale(seeds.success, isDark)
|
const accent = generateScale(colors.accent, isDark)
|
||||||
const warning = generateScale(seeds.warning, isDark)
|
const success = generateScale(colors.success, isDark)
|
||||||
const error = generateScale(seeds.error, isDark)
|
const warning = generateScale(colors.warning, isDark)
|
||||||
const info = generateScale(seeds.info, isDark)
|
const error = generateScale(colors.error, isDark)
|
||||||
const interactive = generateScale(seeds.interactive, isDark)
|
const info = generateScale(colors.info, isDark)
|
||||||
const diffAdd = generateScale(seeds.diffAdd, isDark)
|
const interactive = generateScale(colors.interactive, isDark)
|
||||||
const diffDelete = generateScale(seeds.diffDelete, isDark)
|
const hasInk = colors.compact && Boolean(colors.ink)
|
||||||
|
const noInk = colors.compact && !hasInk
|
||||||
|
const diffAdd = generateScale(
|
||||||
|
colors.diffAdd ??
|
||||||
|
(noInk
|
||||||
|
? shift(colors.success, { c: isDark ? 0.54 : 0.6, l: isDark ? 0.22 : 0.16 })
|
||||||
|
: shift(colors.success, { c: isDark ? 0.7 : 0.55, l: isDark ? -0.18 : 0.14 })),
|
||||||
|
isDark,
|
||||||
|
)
|
||||||
|
const diffDelete = generateScale(
|
||||||
|
colors.diffDelete ??
|
||||||
|
(noInk ? colors.error : shift(colors.error, { c: isDark ? 0.82 : 0.7, l: isDark ? -0.08 : 0.08 })),
|
||||||
|
isDark,
|
||||||
|
)
|
||||||
|
const ink = colors.ink ?? colors.neutral
|
||||||
|
const backgroundOverride = overrides["background-base"]
|
||||||
|
const backgroundHex = getHex(backgroundOverride)
|
||||||
|
const overlay = noInk || (Boolean(backgroundOverride) && !backgroundHex)
|
||||||
|
const content = (seed: HexColor, scale: HexColor[]) => {
|
||||||
|
if (isDark) return seed
|
||||||
|
return hexToOklch(seed).l > 0.82 ? scale[10] : seed
|
||||||
|
}
|
||||||
|
const modified = () => {
|
||||||
|
if (!colors.compact) return isDark ? "#ffba92" : "#FF8C00"
|
||||||
|
if (!hasInk) return isDark ? "#ffba92" : "#FF8C00"
|
||||||
|
const warningHue = hexToOklch(colors.warning).h
|
||||||
|
const deleteHue = hexToOklch(colors.diffDelete ?? colors.error).h
|
||||||
|
const delta = Math.abs(((((deleteHue - warningHue) % 360) + 540) % 360) - 180)
|
||||||
|
if (delta < 48) return isDark ? "#ffba92" : "#FF8C00"
|
||||||
|
return content(colors.warning, warning)
|
||||||
|
}
|
||||||
|
const surface = (
|
||||||
|
seed: HexColor,
|
||||||
|
alpha: { base: number; weak: number; weaker: number; strong: number; stronger: number },
|
||||||
|
) => {
|
||||||
|
const base = alphaTone(seed, alpha.base)
|
||||||
|
return {
|
||||||
|
base,
|
||||||
|
weak: alphaTone(seed, alpha.weak),
|
||||||
|
weaker: alphaTone(seed, alpha.weaker),
|
||||||
|
strong: alphaTone(seed, alpha.strong),
|
||||||
|
stronger: alphaTone(seed, alpha.stronger),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const compactBackground =
|
||||||
|
colors.compact && !hasInk
|
||||||
|
? isDark
|
||||||
|
? {
|
||||||
|
base: shift(blend(colors.neutral, "#000000", 0.145), { c: 0 }),
|
||||||
|
weak: shift(blend(colors.neutral, "#000000", 0.27), { c: 0 }),
|
||||||
|
strong: shift(blend(colors.neutral, "#000000", 0.165), { c: 0 }),
|
||||||
|
stronger: shift(blend(colors.neutral, "#000000", 0.19), { c: 0 }),
|
||||||
|
}
|
||||||
|
: {
|
||||||
|
base: blend(colors.neutral, "#ffffff", 0.066),
|
||||||
|
weak: blend(colors.neutral, "#ffffff", 0.12),
|
||||||
|
strong: blend(colors.neutral, "#ffffff", 0.022),
|
||||||
|
stronger: blend(colors.neutral, "#ffffff", 0.024),
|
||||||
|
}
|
||||||
|
: undefined
|
||||||
|
const compactInkBackground =
|
||||||
|
colors.compact && hasInk && isDark
|
||||||
|
? {
|
||||||
|
base: neutral[2],
|
||||||
|
weak: neutral[3],
|
||||||
|
strong: neutral[1],
|
||||||
|
stronger: neutral[2],
|
||||||
|
}
|
||||||
|
: undefined
|
||||||
|
|
||||||
const neutralAlpha = generateNeutralAlphaScale(neutral, isDark)
|
const background = backgroundHex ?? compactInkBackground?.base ?? compactBackground?.base ?? neutral[0]
|
||||||
|
const alphaTone = (color: HexColor, alpha: number) =>
|
||||||
|
overlay ? (withAlpha(color, alpha) as ColorValue) : blend(color, background, alpha)
|
||||||
|
const borderTone = (light: number, dark: number) =>
|
||||||
|
alphaTone(ink, isDark ? Math.min(1, dark + (colors.compact && hasInk ? 0.08 : 0)) : light)
|
||||||
|
const diffHiddenSurface = noInk
|
||||||
|
? {
|
||||||
|
base: interactive[isDark ? 1 : 2],
|
||||||
|
weak: interactive[isDark ? 0 : 1],
|
||||||
|
weaker: interactive[isDark ? 2 : 0],
|
||||||
|
strong: interactive[4],
|
||||||
|
stronger: interactive[isDark ? 10 : 8],
|
||||||
|
}
|
||||||
|
: surface(
|
||||||
|
isDark ? shift(colors.interactive, { c: 0.55, l: 0 }) : shift(colors.interactive, { c: 0.45, l: 0.08 }),
|
||||||
|
isDark
|
||||||
|
? { base: 0.14, weak: 0.08, weaker: 0.18, strong: 0.26, stronger: 0.42 }
|
||||||
|
: { base: 0.12, weak: 0.08, weaker: 0.16, strong: 0.24, stronger: 0.36 },
|
||||||
|
)
|
||||||
|
|
||||||
|
const neutralAlpha = noInk ? generateNeutralOverlayScale(neutral, isDark) : generateNeutralAlphaScale(neutral, isDark)
|
||||||
|
|
||||||
const tokens: ResolvedTheme = {}
|
const tokens: ResolvedTheme = {}
|
||||||
|
|
||||||
tokens["background-base"] = neutral[0]
|
tokens["background-base"] = compactInkBackground?.base ?? compactBackground?.base ?? neutral[0]
|
||||||
tokens["background-weak"] = neutral[2]
|
tokens["background-weak"] = compactInkBackground?.weak ?? compactBackground?.weak ?? neutral[2]
|
||||||
tokens["background-strong"] = neutral[0]
|
tokens["background-strong"] = compactInkBackground?.strong ?? compactBackground?.strong ?? neutral[0]
|
||||||
tokens["background-stronger"] = isDark ? neutral[1] : "#fcfcfc"
|
tokens["background-stronger"] =
|
||||||
|
compactInkBackground?.stronger ?? compactBackground?.stronger ?? (isDark ? neutral[1] : "#fcfcfc")
|
||||||
|
|
||||||
tokens["surface-base"] = neutralAlpha[1]
|
tokens["surface-base"] = neutralAlpha[1]
|
||||||
tokens["base"] = neutralAlpha[1]
|
tokens["base"] = neutralAlpha[1]
|
||||||
@@ -73,11 +163,11 @@ export function resolveThemeVariant(variant: ThemeVariant, isDark: boolean): Res
|
|||||||
|
|
||||||
tokens["surface-diff-unchanged-base"] = isDark ? neutral[0] : "#ffffff00"
|
tokens["surface-diff-unchanged-base"] = isDark ? neutral[0] : "#ffffff00"
|
||||||
tokens["surface-diff-skip-base"] = isDark ? neutralAlpha[0] : neutral[1]
|
tokens["surface-diff-skip-base"] = isDark ? neutralAlpha[0] : neutral[1]
|
||||||
tokens["surface-diff-hidden-base"] = interactive[isDark ? 1 : 2]
|
tokens["surface-diff-hidden-base"] = diffHiddenSurface.base
|
||||||
tokens["surface-diff-hidden-weak"] = interactive[isDark ? 0 : 1]
|
tokens["surface-diff-hidden-weak"] = diffHiddenSurface.weak
|
||||||
tokens["surface-diff-hidden-weaker"] = interactive[isDark ? 2 : 0]
|
tokens["surface-diff-hidden-weaker"] = diffHiddenSurface.weaker
|
||||||
tokens["surface-diff-hidden-strong"] = interactive[4]
|
tokens["surface-diff-hidden-strong"] = diffHiddenSurface.strong
|
||||||
tokens["surface-diff-hidden-stronger"] = interactive[isDark ? 10 : 8]
|
tokens["surface-diff-hidden-stronger"] = diffHiddenSurface.stronger
|
||||||
tokens["surface-diff-add-base"] = diffAdd[2]
|
tokens["surface-diff-add-base"] = diffAdd[2]
|
||||||
tokens["surface-diff-add-weak"] = diffAdd[isDark ? 3 : 1]
|
tokens["surface-diff-add-weak"] = diffAdd[isDark ? 3 : 1]
|
||||||
tokens["surface-diff-add-weaker"] = diffAdd[isDark ? 2 : 0]
|
tokens["surface-diff-add-weaker"] = diffAdd[isDark ? 2 : 0]
|
||||||
@@ -96,10 +186,44 @@ export function resolveThemeVariant(variant: ThemeVariant, isDark: boolean): Res
|
|||||||
tokens["input-focus"] = interactive[0]
|
tokens["input-focus"] = interactive[0]
|
||||||
tokens["input-disabled"] = neutral[3]
|
tokens["input-disabled"] = neutral[3]
|
||||||
|
|
||||||
tokens["text-base"] = neutral[10]
|
tokens["text-base"] = hasInk
|
||||||
tokens["text-weak"] = neutral[8]
|
? ink
|
||||||
tokens["text-weaker"] = neutral[7]
|
: noInk && isDark
|
||||||
tokens["text-strong"] = neutral[11]
|
? neutralAlpha[10]
|
||||||
|
: noInk
|
||||||
|
? isDark
|
||||||
|
? blend(neutral[10], neutral[9], 0.65)
|
||||||
|
: blend(neutral[10], neutral[9], 0.6)
|
||||||
|
: neutral[10]
|
||||||
|
tokens["text-weak"] = hasInk
|
||||||
|
? shift(ink, { l: isDark ? -0.14 : 0.12, c: 0.8 })
|
||||||
|
: noInk && isDark
|
||||||
|
? neutralAlpha[8]
|
||||||
|
: noInk
|
||||||
|
? isDark
|
||||||
|
? blend(neutral[8], neutral[7], 0.45)
|
||||||
|
: blend(neutral[8], neutral[7], 0.88)
|
||||||
|
: neutral[8]
|
||||||
|
tokens["text-weaker"] = hasInk
|
||||||
|
? shift(ink, { l: isDark ? -0.24 : 0.2, c: isDark ? 0.65 : 0.6 })
|
||||||
|
: noInk && isDark
|
||||||
|
? neutralAlpha[7]
|
||||||
|
: noInk
|
||||||
|
? isDark
|
||||||
|
? blend(neutral[7], neutral[6], 0.75)
|
||||||
|
: blend(neutral[7], neutral[6], 0.9)
|
||||||
|
: neutral[7]
|
||||||
|
tokens["text-strong"] = hasInk
|
||||||
|
? isDark && colors.compact
|
||||||
|
? blend("#ffffff", ink, 0.82)
|
||||||
|
: shift(ink, { l: isDark ? 0.03 : -0.06, c: 0.96 })
|
||||||
|
: noInk && isDark
|
||||||
|
? neutralAlpha[11]
|
||||||
|
: noInk
|
||||||
|
? isDark
|
||||||
|
? blend(neutral[11], neutral[10], 0.9)
|
||||||
|
: blend(neutral[11], neutral[10], 0.86)
|
||||||
|
: neutral[11]
|
||||||
tokens["text-invert-base"] = isDark ? neutral[10] : neutral[1]
|
tokens["text-invert-base"] = isDark ? neutral[10] : neutral[1]
|
||||||
tokens["text-invert-weak"] = isDark ? neutral[8] : neutral[2]
|
tokens["text-invert-weak"] = isDark ? neutral[8] : neutral[2]
|
||||||
tokens["text-invert-weaker"] = isDark ? neutral[7] : neutral[3]
|
tokens["text-invert-weaker"] = isDark ? neutral[7] : neutral[3]
|
||||||
@@ -133,30 +257,59 @@ export function resolveThemeVariant(variant: ThemeVariant, isDark: boolean): Res
|
|||||||
tokens["button-ghost-hover"] = neutralAlpha[1]
|
tokens["button-ghost-hover"] = neutralAlpha[1]
|
||||||
tokens["button-ghost-hover2"] = neutralAlpha[2]
|
tokens["button-ghost-hover2"] = neutralAlpha[2]
|
||||||
|
|
||||||
tokens["border-base"] = neutralAlpha[6]
|
if (noInk) {
|
||||||
tokens["border-hover"] = neutralAlpha[7]
|
const tone = (alpha: number) => alphaTone((isDark ? "#fdfbfb" : neutral[11]) as HexColor, alpha)
|
||||||
tokens["border-active"] = neutralAlpha[8]
|
if (isDark) {
|
||||||
|
tokens["surface-base"] = tone(0.043)
|
||||||
|
tokens["surface-base-hover"] = tone(0.039)
|
||||||
|
tokens["surface-base-active"] = tone(0.086)
|
||||||
|
tokens["surface-raised-base"] = tone(0.086)
|
||||||
|
tokens["surface-raised-base-hover"] = tone(0.118)
|
||||||
|
tokens["surface-raised-base-active"] = tone(0.149)
|
||||||
|
tokens["button-secondary-hover"] = tone(0.039)
|
||||||
|
tokens["button-ghost-hover"] = tone(0.043)
|
||||||
|
tokens["button-ghost-hover2"] = tone(0.086)
|
||||||
|
tokens["input-base"] = tone(0.043)
|
||||||
|
tokens["input-hover"] = tone(0.043)
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!isDark) {
|
||||||
|
tokens["surface-base"] = tone(0.027)
|
||||||
|
tokens["surface-base-hover"] = tone(0.059)
|
||||||
|
tokens["surface-base-active"] = tone(0.059)
|
||||||
|
tokens["surface-raised-base"] = tone(0.027)
|
||||||
|
tokens["surface-raised-base-hover"] = tone(0.059)
|
||||||
|
tokens["surface-raised-base-active"] = tone(0.122)
|
||||||
|
tokens["button-secondary-hover"] = blend("#ffffff", background, 0.04)
|
||||||
|
tokens["button-ghost-hover"] = tone(0.027)
|
||||||
|
tokens["button-ghost-hover2"] = tone(0.059)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tokens["border-base"] = hasInk ? borderTone(0.22, 0.16) : neutralAlpha[6]
|
||||||
|
tokens["border-hover"] = hasInk ? borderTone(0.28, 0.2) : neutralAlpha[7]
|
||||||
|
tokens["border-active"] = hasInk ? borderTone(0.34, 0.24) : neutralAlpha[8]
|
||||||
tokens["border-selected"] = withAlpha(interactive[8], isDark ? 0.9 : 0.99) as ColorValue
|
tokens["border-selected"] = withAlpha(interactive[8], isDark ? 0.9 : 0.99) as ColorValue
|
||||||
tokens["border-disabled"] = neutralAlpha[7]
|
tokens["border-disabled"] = hasInk ? borderTone(0.18, 0.12) : neutralAlpha[7]
|
||||||
tokens["border-focus"] = neutralAlpha[8]
|
tokens["border-focus"] = hasInk ? borderTone(0.34, 0.24) : neutralAlpha[8]
|
||||||
tokens["border-weak-base"] = neutralAlpha[isDark ? 5 : 4]
|
tokens["border-weak-base"] = hasInk ? borderTone(0.1, 0.08) : neutralAlpha[isDark ? 5 : 4]
|
||||||
tokens["border-strong-base"] = neutralAlpha[isDark ? 7 : 6]
|
tokens["border-strong-base"] = hasInk ? borderTone(0.34, 0.24) : neutralAlpha[isDark ? 7 : 6]
|
||||||
tokens["border-strong-hover"] = neutralAlpha[7]
|
tokens["border-strong-hover"] = hasInk ? borderTone(0.4, 0.28) : neutralAlpha[7]
|
||||||
tokens["border-strong-active"] = neutralAlpha[isDark ? 7 : 6]
|
tokens["border-strong-active"] = hasInk ? borderTone(0.46, 0.32) : neutralAlpha[isDark ? 7 : 6]
|
||||||
tokens["border-strong-selected"] = withAlpha(interactive[5], 0.6) as ColorValue
|
tokens["border-strong-selected"] = withAlpha(interactive[5], 0.6) as ColorValue
|
||||||
tokens["border-strong-disabled"] = neutralAlpha[5]
|
tokens["border-strong-disabled"] = hasInk ? borderTone(0.14, 0.1) : neutralAlpha[5]
|
||||||
tokens["border-strong-focus"] = neutralAlpha[isDark ? 7 : 6]
|
tokens["border-strong-focus"] = hasInk ? borderTone(0.46, 0.32) : neutralAlpha[isDark ? 7 : 6]
|
||||||
tokens["border-weak-hover"] = neutralAlpha[isDark ? 6 : 5]
|
tokens["border-weak-hover"] = hasInk ? borderTone(0.16, 0.12) : neutralAlpha[isDark ? 6 : 5]
|
||||||
tokens["border-weak-active"] = neutralAlpha[isDark ? 7 : 6]
|
tokens["border-weak-active"] = hasInk ? borderTone(0.22, 0.16) : neutralAlpha[isDark ? 7 : 6]
|
||||||
tokens["border-weak-selected"] = withAlpha(interactive[4], isDark ? 0.6 : 0.5) as ColorValue
|
tokens["border-weak-selected"] = withAlpha(interactive[4], isDark ? 0.6 : 0.5) as ColorValue
|
||||||
tokens["border-weak-disabled"] = neutralAlpha[5]
|
tokens["border-weak-disabled"] = hasInk ? borderTone(0.08, 0.06) : neutralAlpha[5]
|
||||||
tokens["border-weak-focus"] = neutralAlpha[isDark ? 7 : 6]
|
tokens["border-weak-focus"] = hasInk ? borderTone(0.22, 0.16) : neutralAlpha[isDark ? 7 : 6]
|
||||||
tokens["border-weaker-base"] = neutralAlpha[2]
|
tokens["border-weaker-base"] = hasInk ? borderTone(0.06, 0.04) : neutralAlpha[2]
|
||||||
tokens["border-weaker-hover"] = neutralAlpha[3]
|
tokens["border-weaker-hover"] = hasInk ? borderTone(0.1, 0.08) : neutralAlpha[3]
|
||||||
tokens["border-weaker-active"] = neutralAlpha[5]
|
tokens["border-weaker-active"] = hasInk ? borderTone(0.16, 0.12) : neutralAlpha[5]
|
||||||
tokens["border-weaker-selected"] = withAlpha(interactive[3], isDark ? 0.3 : 0.4) as ColorValue
|
tokens["border-weaker-selected"] = withAlpha(interactive[3], isDark ? 0.3 : 0.4) as ColorValue
|
||||||
tokens["border-weaker-disabled"] = neutralAlpha[1]
|
tokens["border-weaker-disabled"] = hasInk ? borderTone(0.04, 0.02) : neutralAlpha[1]
|
||||||
tokens["border-weaker-focus"] = neutralAlpha[5]
|
tokens["border-weaker-focus"] = hasInk ? borderTone(0.16, 0.12) : neutralAlpha[5]
|
||||||
|
|
||||||
tokens["border-interactive-base"] = interactive[6]
|
tokens["border-interactive-base"] = interactive[6]
|
||||||
tokens["border-interactive-hover"] = interactive[7]
|
tokens["border-interactive-hover"] = interactive[7]
|
||||||
@@ -240,8 +393,10 @@ export function resolveThemeVariant(variant: ThemeVariant, isDark: boolean): Res
|
|||||||
tokens["icon-diff-add-active"] = diffAdd[isDark ? 10 : 11]
|
tokens["icon-diff-add-active"] = diffAdd[isDark ? 10 : 11]
|
||||||
tokens["icon-diff-delete-base"] = diffDelete[isDark ? 8 : 9]
|
tokens["icon-diff-delete-base"] = diffDelete[isDark ? 8 : 9]
|
||||||
tokens["icon-diff-delete-hover"] = diffDelete[isDark ? 9 : 10]
|
tokens["icon-diff-delete-hover"] = diffDelete[isDark ? 9 : 10]
|
||||||
tokens["icon-diff-modified-base"] = isDark ? "#ffba92" : "#FF8C00"
|
tokens["icon-diff-modified-base"] = modified()
|
||||||
|
|
||||||
|
if (colors.compact) {
|
||||||
|
if (!hasInk) {
|
||||||
tokens["syntax-comment"] = "var(--text-weak)"
|
tokens["syntax-comment"] = "var(--text-weak)"
|
||||||
tokens["syntax-regexp"] = "var(--text-base)"
|
tokens["syntax-regexp"] = "var(--text-base)"
|
||||||
tokens["syntax-string"] = isDark ? "#00ceb9" : "#006656"
|
tokens["syntax-string"] = isDark ? "#00ceb9" : "#006656"
|
||||||
@@ -256,7 +411,7 @@ export function resolveThemeVariant(variant: ThemeVariant, isDark: boolean): Res
|
|||||||
tokens["syntax-object"] = "var(--text-strong)"
|
tokens["syntax-object"] = "var(--text-strong)"
|
||||||
tokens["syntax-success"] = success[9]
|
tokens["syntax-success"] = success[9]
|
||||||
tokens["syntax-warning"] = warning[9]
|
tokens["syntax-warning"] = warning[9]
|
||||||
tokens["syntax-critical"] = error[isDark ? 9 : 9]
|
tokens["syntax-critical"] = error[9]
|
||||||
tokens["syntax-info"] = isDark ? "#93e9f6" : "#0092a8"
|
tokens["syntax-info"] = isDark ? "#93e9f6" : "#0092a8"
|
||||||
tokens["syntax-diff-add"] = diffAdd[10]
|
tokens["syntax-diff-add"] = diffAdd[10]
|
||||||
tokens["syntax-diff-delete"] = diffDelete[10]
|
tokens["syntax-diff-delete"] = diffDelete[10]
|
||||||
@@ -276,6 +431,82 @@ export function resolveThemeVariant(variant: ThemeVariant, isDark: boolean): Res
|
|||||||
tokens["markdown-image"] = isDark ? "#fab283" : "#3b7dd8"
|
tokens["markdown-image"] = isDark ? "#fab283" : "#3b7dd8"
|
||||||
tokens["markdown-image-text"] = isDark ? "#56b6c2" : "#318795"
|
tokens["markdown-image-text"] = isDark ? "#56b6c2" : "#318795"
|
||||||
tokens["markdown-code-block"] = isDark ? "#eeeeee" : "#1a1a1a"
|
tokens["markdown-code-block"] = isDark ? "#eeeeee" : "#1a1a1a"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (hasInk) {
|
||||||
|
tokens["syntax-comment"] = "var(--text-weak)"
|
||||||
|
tokens["syntax-regexp"] = "var(--text-base)"
|
||||||
|
tokens["syntax-string"] = content(colors.success, success)
|
||||||
|
tokens["syntax-keyword"] = "var(--text-weak)"
|
||||||
|
tokens["syntax-primitive"] = content(colors.accent, accent)
|
||||||
|
tokens["syntax-operator"] = isDark ? "var(--text-weak)" : "var(--text-base)"
|
||||||
|
tokens["syntax-variable"] = "var(--text-strong)"
|
||||||
|
tokens["syntax-property"] = content(colors.primary, primary)
|
||||||
|
tokens["syntax-type"] = content(colors.warning, warning)
|
||||||
|
tokens["syntax-constant"] = content(colors.info, info)
|
||||||
|
tokens["syntax-punctuation"] = isDark ? "var(--text-weak)" : "var(--text-base)"
|
||||||
|
tokens["syntax-object"] = "var(--text-strong)"
|
||||||
|
tokens["syntax-success"] = success[9]
|
||||||
|
tokens["syntax-warning"] = warning[9]
|
||||||
|
tokens["syntax-critical"] = error[9]
|
||||||
|
tokens["syntax-info"] = content(colors.info, info)
|
||||||
|
tokens["syntax-diff-add"] = diffAdd[10]
|
||||||
|
tokens["syntax-diff-delete"] = diffDelete[10]
|
||||||
|
tokens["syntax-diff-unknown"] = "#ff0000"
|
||||||
|
|
||||||
|
tokens["markdown-heading"] = content(colors.primary, primary)
|
||||||
|
tokens["markdown-text"] = tokens["text-base"]
|
||||||
|
tokens["markdown-link"] = content(colors.interactive, interactive)
|
||||||
|
tokens["markdown-link-text"] = content(colors.info, info)
|
||||||
|
tokens["markdown-code"] = content(colors.success, success)
|
||||||
|
tokens["markdown-block-quote"] = content(colors.warning, warning)
|
||||||
|
tokens["markdown-emph"] = content(colors.warning, warning)
|
||||||
|
tokens["markdown-strong"] = content(colors.accent, accent)
|
||||||
|
tokens["markdown-horizontal-rule"] = tokens["border-base"]
|
||||||
|
tokens["markdown-list-item"] = content(colors.interactive, interactive)
|
||||||
|
tokens["markdown-list-enumeration"] = content(colors.info, info)
|
||||||
|
tokens["markdown-image"] = content(colors.interactive, interactive)
|
||||||
|
tokens["markdown-image-text"] = content(colors.info, info)
|
||||||
|
tokens["markdown-code-block"] = tokens["text-base"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!colors.compact) {
|
||||||
|
tokens["syntax-comment"] = "var(--text-weak)"
|
||||||
|
tokens["syntax-regexp"] = "var(--text-base)"
|
||||||
|
tokens["syntax-string"] = isDark ? "#00ceb9" : "#006656"
|
||||||
|
tokens["syntax-keyword"] = "var(--text-weak)"
|
||||||
|
tokens["syntax-primitive"] = isDark ? "#ffba92" : "#fb4804"
|
||||||
|
tokens["syntax-operator"] = isDark ? "var(--text-weak)" : "var(--text-base)"
|
||||||
|
tokens["syntax-variable"] = "var(--text-strong)"
|
||||||
|
tokens["syntax-property"] = isDark ? "#ff9ae2" : "#ed6dc8"
|
||||||
|
tokens["syntax-type"] = isDark ? "#ecf58c" : "#596600"
|
||||||
|
tokens["syntax-constant"] = isDark ? "#93e9f6" : "#007b80"
|
||||||
|
tokens["syntax-punctuation"] = isDark ? "var(--text-weak)" : "var(--text-base)"
|
||||||
|
tokens["syntax-object"] = "var(--text-strong)"
|
||||||
|
tokens["syntax-success"] = success[9]
|
||||||
|
tokens["syntax-warning"] = warning[9]
|
||||||
|
tokens["syntax-critical"] = error[9]
|
||||||
|
tokens["syntax-info"] = isDark ? "#93e9f6" : "#0092a8"
|
||||||
|
tokens["syntax-diff-add"] = diffAdd[10]
|
||||||
|
tokens["syntax-diff-delete"] = diffDelete[10]
|
||||||
|
tokens["syntax-diff-unknown"] = "#ff0000"
|
||||||
|
|
||||||
|
tokens["markdown-heading"] = isDark ? "#9d7cd8" : "#d68c27"
|
||||||
|
tokens["markdown-text"] = isDark ? "#eeeeee" : "#1a1a1a"
|
||||||
|
tokens["markdown-link"] = isDark ? "#fab283" : "#3b7dd8"
|
||||||
|
tokens["markdown-link-text"] = isDark ? "#56b6c2" : "#318795"
|
||||||
|
tokens["markdown-code"] = isDark ? "#7fd88f" : "#3d9a57"
|
||||||
|
tokens["markdown-block-quote"] = isDark ? "#e5c07b" : "#b0851f"
|
||||||
|
tokens["markdown-emph"] = isDark ? "#e5c07b" : "#b0851f"
|
||||||
|
tokens["markdown-strong"] = isDark ? "#f5a742" : "#d68c27"
|
||||||
|
tokens["markdown-horizontal-rule"] = isDark ? "#808080" : "#8a8a8a"
|
||||||
|
tokens["markdown-list-item"] = isDark ? "#fab283" : "#3b7dd8"
|
||||||
|
tokens["markdown-list-enumeration"] = isDark ? "#56b6c2" : "#318795"
|
||||||
|
tokens["markdown-image"] = isDark ? "#fab283" : "#3b7dd8"
|
||||||
|
tokens["markdown-image-text"] = isDark ? "#56b6c2" : "#318795"
|
||||||
|
tokens["markdown-code-block"] = isDark ? "#eeeeee" : "#1a1a1a"
|
||||||
|
}
|
||||||
|
|
||||||
tokens["avatar-background-pink"] = isDark ? "#501b3f" : "#feeef8"
|
tokens["avatar-background-pink"] = isDark ? "#501b3f" : "#feeef8"
|
||||||
tokens["avatar-background-mint"] = isDark ? "#033a34" : "#e1fbf4"
|
tokens["avatar-background-mint"] = isDark ? "#033a34" : "#e1fbf4"
|
||||||
@@ -294,9 +525,97 @@ export function resolveThemeVariant(variant: ThemeVariant, isDark: boolean): Res
|
|||||||
tokens[key] = value
|
tokens[key] = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (hasInk && "text-weak" in overrides && !("text-weaker" in overrides)) {
|
||||||
|
const weak = tokens["text-weak"]
|
||||||
|
if (weak.startsWith("#")) {
|
||||||
|
tokens["text-weaker"] = shift(weak as HexColor, { l: isDark ? -0.12 : 0.12, c: 0.75 })
|
||||||
|
} else {
|
||||||
|
tokens["text-weaker"] = weak
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (colors.compact && hasInk) {
|
||||||
|
if (!("markdown-text" in overrides)) {
|
||||||
|
tokens["markdown-text"] = tokens["text-base"]
|
||||||
|
}
|
||||||
|
if (!("markdown-code-block" in overrides)) {
|
||||||
|
tokens["markdown-code-block"] = tokens["text-base"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!("text-stronger" in overrides)) {
|
||||||
|
tokens["text-stronger"] = tokens["text-strong"]
|
||||||
|
}
|
||||||
|
|
||||||
return tokens
|
return tokens
|
||||||
}
|
}
|
||||||
|
|
||||||
|
interface ThemeColors {
|
||||||
|
compact: boolean
|
||||||
|
neutral: HexColor
|
||||||
|
ink?: HexColor
|
||||||
|
primary: HexColor
|
||||||
|
accent: HexColor
|
||||||
|
success: HexColor
|
||||||
|
warning: HexColor
|
||||||
|
error: HexColor
|
||||||
|
info: HexColor
|
||||||
|
interactive: HexColor
|
||||||
|
diffAdd?: HexColor
|
||||||
|
diffDelete?: HexColor
|
||||||
|
}
|
||||||
|
|
||||||
|
function getColors(variant: ThemeVariant): ThemeColors {
|
||||||
|
const input = variant as { palette?: unknown; seeds?: unknown }
|
||||||
|
if (input.palette && input.seeds) {
|
||||||
|
throw new Error("Theme variant cannot define both `palette` and `seeds`")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (variant.palette) {
|
||||||
|
return {
|
||||||
|
compact: true,
|
||||||
|
neutral: variant.palette.neutral,
|
||||||
|
ink: variant.palette.ink,
|
||||||
|
primary: variant.palette.primary,
|
||||||
|
accent: variant.palette.accent ?? variant.palette.info,
|
||||||
|
success: variant.palette.success,
|
||||||
|
warning: variant.palette.warning,
|
||||||
|
error: variant.palette.error,
|
||||||
|
info: variant.palette.info,
|
||||||
|
interactive: variant.palette.interactive ?? variant.palette.primary,
|
||||||
|
diffAdd: variant.palette.diffAdd,
|
||||||
|
diffDelete: variant.palette.diffDelete,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (variant.seeds) {
|
||||||
|
return {
|
||||||
|
compact: false,
|
||||||
|
neutral: variant.seeds.neutral,
|
||||||
|
ink: undefined,
|
||||||
|
primary: variant.seeds.primary,
|
||||||
|
accent: variant.seeds.info,
|
||||||
|
success: variant.seeds.success,
|
||||||
|
warning: variant.seeds.warning,
|
||||||
|
error: variant.seeds.error,
|
||||||
|
info: variant.seeds.info,
|
||||||
|
interactive: variant.seeds.interactive,
|
||||||
|
diffAdd: variant.seeds.diffAdd,
|
||||||
|
diffDelete: variant.seeds.diffDelete,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
throw new Error("Theme variant requires `palette` or `seeds`")
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateNeutralOverlayScale(neutralScale: HexColor[], isDark: boolean): ColorValue[] {
|
||||||
|
const alphas = isDark
|
||||||
|
? [0.012, 0.043, 0.086, 0.118, 0.149, 0.192, 0.247, 0.349, 0.404, 0.463, 0.698, 0.941]
|
||||||
|
: [0.012, 0.027, 0.059, 0.09, 0.122, 0.149, 0.196, 0.267, 0.455, 0.612, 0.494, 0.875]
|
||||||
|
const color = (isDark ? "#fdfbfb" : "#000000") as HexColor
|
||||||
|
return alphas.map((alpha) => withAlpha(color, alpha) as ColorValue)
|
||||||
|
}
|
||||||
|
|
||||||
function generateNeutralAlphaScale(neutralScale: HexColor[], isDark: boolean): HexColor[] {
|
function generateNeutralAlphaScale(neutralScale: HexColor[], isDark: boolean): HexColor[] {
|
||||||
const alphas = isDark
|
const alphas = isDark
|
||||||
? [0.02, 0.04, 0.08, 0.12, 0.16, 0.2, 0.26, 0.36, 0.44, 0.52, 0.72, 0.94]
|
? [0.02, 0.04, 0.08, 0.12, 0.16, 0.2, 0.26, 0.36, 0.44, 0.52, 0.72, 0.94]
|
||||||
@@ -312,6 +631,11 @@ function generateNeutralAlphaScale(neutralScale: HexColor[], isDark: boolean): H
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getHex(value: ColorValue | undefined): HexColor | undefined {
|
||||||
|
if (!value?.startsWith("#")) return
|
||||||
|
return value as HexColor
|
||||||
|
}
|
||||||
|
|
||||||
export function resolveTheme(theme: DesktopTheme): { light: ResolvedTheme; dark: ResolvedTheme } {
|
export function resolveTheme(theme: DesktopTheme): { light: ResolvedTheme; dark: ResolvedTheme } {
|
||||||
return {
|
return {
|
||||||
light: resolveThemeVariant(theme.light, false),
|
light: resolveThemeVariant(theme.light, false),
|
||||||
|
|||||||
@@ -3,129 +3,31 @@
|
|||||||
"name": "Aura",
|
"name": "Aura",
|
||||||
"id": "aura",
|
"id": "aura",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#f5f0ff",
|
"neutral": "#f5f0ff",
|
||||||
|
"ink": "#2d2640",
|
||||||
"primary": "#a277ff",
|
"primary": "#a277ff",
|
||||||
|
"accent": "#d94f4f",
|
||||||
"success": "#40bf7a",
|
"success": "#40bf7a",
|
||||||
"warning": "#d9a24a",
|
"warning": "#d9a24a",
|
||||||
"error": "#d94f4f",
|
"error": "#d94f4f",
|
||||||
"info": "#5bb8d9",
|
"info": "#5bb8d9",
|
||||||
"interactive": "#a277ff",
|
|
||||||
"diffAdd": "#b3e6cc",
|
"diffAdd": "#b3e6cc",
|
||||||
"diffDelete": "#f5b3b3"
|
"diffDelete": "#f5b3b3"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#f5f0ff",
|
|
||||||
"background-weak": "#efe8fc",
|
|
||||||
"background-strong": "#faf7ff",
|
|
||||||
"background-stronger": "#fdfcff",
|
|
||||||
"border-weak-base": "#e0d6f2",
|
|
||||||
"border-weak-hover": "#d5c9eb",
|
|
||||||
"border-weak-active": "#cbbee3",
|
|
||||||
"border-weak-selected": "#c0b3dc",
|
|
||||||
"border-weak-disabled": "#f9f6ff",
|
|
||||||
"border-weak-focus": "#c5b8df",
|
|
||||||
"border-base": "#b5a6d4",
|
|
||||||
"border-hover": "#aa99cc",
|
|
||||||
"border-active": "#9f8dc4",
|
|
||||||
"border-selected": "#9480bc",
|
|
||||||
"border-disabled": "#ede7f9",
|
|
||||||
"border-focus": "#a593c8",
|
|
||||||
"border-strong-base": "#8068a8",
|
|
||||||
"border-strong-hover": "#735a9c",
|
|
||||||
"border-strong-active": "#664d90",
|
|
||||||
"border-strong-selected": "#5a4184",
|
|
||||||
"border-strong-disabled": "#d4c8ed",
|
|
||||||
"border-strong-focus": "#6d5396",
|
|
||||||
"surface-diff-add-base": "#e8f5ed",
|
|
||||||
"surface-diff-delete-base": "#fae8e8",
|
|
||||||
"surface-diff-hidden-base": "#e8e4f5",
|
|
||||||
"text-base": "#2d2640",
|
|
||||||
"text-weak": "#5c5270",
|
|
||||||
"text-strong": "#15101f",
|
|
||||||
"syntax-string": "#40bf7a",
|
|
||||||
"syntax-primitive": "#d94f4f",
|
|
||||||
"syntax-property": "#a277ff",
|
|
||||||
"syntax-type": "#d9a24a",
|
|
||||||
"syntax-constant": "#5bb8d9",
|
|
||||||
"syntax-info": "#5bb8d9",
|
|
||||||
"markdown-heading": "#a277ff",
|
|
||||||
"markdown-text": "#2d2640",
|
|
||||||
"markdown-link": "#c17ac8",
|
|
||||||
"markdown-link-text": "#a277ff",
|
|
||||||
"markdown-code": "#40bf7a",
|
|
||||||
"markdown-block-quote": "#6d6d6d",
|
|
||||||
"markdown-emph": "#d9a24a",
|
|
||||||
"markdown-strong": "#a277ff",
|
|
||||||
"markdown-horizontal-rule": "#d4c8ed",
|
|
||||||
"markdown-list-item": "#a277ff",
|
|
||||||
"markdown-list-enumeration": "#a277ff",
|
|
||||||
"markdown-image": "#c17ac8",
|
|
||||||
"markdown-image-text": "#a277ff",
|
|
||||||
"markdown-code-block": "#5bb8d9"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#15141b",
|
"neutral": "#15141b",
|
||||||
|
"ink": "#edecee",
|
||||||
"primary": "#a277ff",
|
"primary": "#a277ff",
|
||||||
|
"accent": "#ff6767",
|
||||||
"success": "#61ffca",
|
"success": "#61ffca",
|
||||||
"warning": "#ffca85",
|
"warning": "#ffca85",
|
||||||
"error": "#ff6767",
|
"error": "#ff6767",
|
||||||
"info": "#82e2ff",
|
"info": "#82e2ff",
|
||||||
"interactive": "#a277ff",
|
|
||||||
"diffAdd": "#61ffca",
|
"diffAdd": "#61ffca",
|
||||||
"diffDelete": "#ff6767"
|
"diffDelete": "#ff6767"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#15141b",
|
|
||||||
"background-weak": "#1a1921",
|
|
||||||
"background-strong": "#121118",
|
|
||||||
"background-stronger": "#0f0e14",
|
|
||||||
"border-weak-base": "#2d2b38",
|
|
||||||
"border-weak-hover": "#332f42",
|
|
||||||
"border-weak-active": "#38354c",
|
|
||||||
"border-weak-selected": "#3e3a56",
|
|
||||||
"border-weak-disabled": "#1a1921",
|
|
||||||
"border-weak-focus": "#363350",
|
|
||||||
"border-base": "#433f5a",
|
|
||||||
"border-hover": "#4a4565",
|
|
||||||
"border-active": "#514c70",
|
|
||||||
"border-selected": "#58527b",
|
|
||||||
"border-disabled": "#1f1e28",
|
|
||||||
"border-focus": "#4e496c",
|
|
||||||
"border-strong-base": "#635c8a",
|
|
||||||
"border-strong-hover": "#6d6597",
|
|
||||||
"border-strong-active": "#776fa4",
|
|
||||||
"border-strong-selected": "#8179b1",
|
|
||||||
"border-strong-disabled": "#2a283a",
|
|
||||||
"border-strong-focus": "#716a9e",
|
|
||||||
"surface-diff-add-base": "#162620",
|
|
||||||
"surface-diff-delete-base": "#26161a",
|
|
||||||
"surface-diff-hidden-base": "#1e1d2a",
|
|
||||||
"text-base": "#edecee",
|
|
||||||
"text-weak": "#6d6d6d",
|
|
||||||
"text-strong": "#ffffff",
|
|
||||||
"syntax-string": "#61ffca",
|
|
||||||
"syntax-primitive": "#ff6767",
|
|
||||||
"syntax-property": "#a277ff",
|
|
||||||
"syntax-type": "#ffca85",
|
|
||||||
"syntax-constant": "#82e2ff",
|
|
||||||
"syntax-info": "#82e2ff",
|
|
||||||
"markdown-heading": "#a277ff",
|
|
||||||
"markdown-text": "#edecee",
|
|
||||||
"markdown-link": "#f694ff",
|
|
||||||
"markdown-link-text": "#a277ff",
|
|
||||||
"markdown-code": "#61ffca",
|
|
||||||
"markdown-block-quote": "#6d6d6d",
|
|
||||||
"markdown-emph": "#ffca85",
|
|
||||||
"markdown-strong": "#a277ff",
|
|
||||||
"markdown-horizontal-rule": "#2d2b38",
|
|
||||||
"markdown-list-item": "#a277ff",
|
|
||||||
"markdown-list-enumeration": "#a277ff",
|
|
||||||
"markdown-image": "#f694ff",
|
|
||||||
"markdown-image-text": "#a277ff",
|
|
||||||
"markdown-code-block": "#edecee"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,131 +3,31 @@
|
|||||||
"name": "Ayu",
|
"name": "Ayu",
|
||||||
"id": "ayu",
|
"id": "ayu",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#fdfaf4",
|
"neutral": "#fdfaf4",
|
||||||
|
"ink": "#4f5964",
|
||||||
"primary": "#4aa8c8",
|
"primary": "#4aa8c8",
|
||||||
|
"accent": "#ef7d71",
|
||||||
"success": "#5fb978",
|
"success": "#5fb978",
|
||||||
"warning": "#ea9f41",
|
"warning": "#ea9f41",
|
||||||
"error": "#e6656a",
|
"error": "#e6656a",
|
||||||
"info": "#2f9bce",
|
"info": "#2f9bce",
|
||||||
"interactive": "#4aa8c8",
|
|
||||||
"diffAdd": "#b1d780",
|
"diffAdd": "#b1d780",
|
||||||
"diffDelete": "#e6656a"
|
"diffDelete": "#e6656a"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#fdfaf4",
|
|
||||||
"background-weak": "#fcf9f3",
|
|
||||||
"background-strong": "#fbf8f2",
|
|
||||||
"background-stronger": "#faf7f1",
|
|
||||||
"surface-raised-base-hover": "#f4f0e9",
|
|
||||||
"border-weak-base": "#e6ddcf",
|
|
||||||
"border-weak-hover": "#dcd3c5",
|
|
||||||
"border-weak-active": "#d1c9ba",
|
|
||||||
"border-weak-selected": "#c6bfaf",
|
|
||||||
"border-weak-disabled": "#f7f0e6",
|
|
||||||
"border-weak-focus": "#cbc4b6",
|
|
||||||
"border-base": "#bfb3a3",
|
|
||||||
"border-hover": "#b4a898",
|
|
||||||
"border-active": "#a99e8e",
|
|
||||||
"border-selected": "#9e9383",
|
|
||||||
"border-disabled": "#efe5d8",
|
|
||||||
"border-focus": "#b09f8f",
|
|
||||||
"border-strong-base": "#837765",
|
|
||||||
"border-strong-hover": "#7a6f5f",
|
|
||||||
"border-strong-active": "#716655",
|
|
||||||
"border-strong-selected": "#685e4e",
|
|
||||||
"border-strong-disabled": "#d8cabc",
|
|
||||||
"border-strong-focus": "#766b5c",
|
|
||||||
"surface-diff-add-base": "#eef5e4",
|
|
||||||
"surface-diff-delete-base": "#fde5e5",
|
|
||||||
"surface-diff-hidden-base": "#e3edf3",
|
|
||||||
"text-base": "#4f5964",
|
|
||||||
"text-weak": "#77818d",
|
|
||||||
"text-strong": "#1b232b",
|
|
||||||
"syntax-string": "#7fad00",
|
|
||||||
"syntax-primitive": "#ef7d71",
|
|
||||||
"syntax-property": "#4aa8c8",
|
|
||||||
"syntax-type": "#ed982e",
|
|
||||||
"syntax-constant": "#2f9bce",
|
|
||||||
"syntax-info": "#2f9bce",
|
|
||||||
"markdown-heading": "#4aa8c8",
|
|
||||||
"markdown-text": "#4f5964",
|
|
||||||
"markdown-link": "#4aa8c8",
|
|
||||||
"markdown-link-text": "#2f9bce",
|
|
||||||
"markdown-code": "#7fad00",
|
|
||||||
"markdown-block-quote": "#ed982e",
|
|
||||||
"markdown-emph": "#ed982e",
|
|
||||||
"markdown-strong": "#f07f72",
|
|
||||||
"markdown-horizontal-rule": "#d7cec0",
|
|
||||||
"markdown-list-item": "#4aa8c8",
|
|
||||||
"markdown-list-enumeration": "#2f9bce",
|
|
||||||
"markdown-image": "#4aa8c8",
|
|
||||||
"markdown-image-text": "#2f9bce",
|
|
||||||
"markdown-code-block": "#4aa8c8"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#0f1419",
|
"neutral": "#0f1419",
|
||||||
|
"ink": "#d6dae0",
|
||||||
"primary": "#3fb7e3",
|
"primary": "#3fb7e3",
|
||||||
|
"accent": "#f2856f",
|
||||||
"success": "#78d05c",
|
"success": "#78d05c",
|
||||||
"warning": "#e4a75c",
|
"warning": "#e4a75c",
|
||||||
"error": "#f58572",
|
"error": "#f58572",
|
||||||
"info": "#66c6f1",
|
"info": "#66c6f1",
|
||||||
"interactive": "#3fb7e3",
|
|
||||||
"diffAdd": "#59c57c",
|
"diffAdd": "#59c57c",
|
||||||
"diffDelete": "#f58572"
|
"diffDelete": "#f58572"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#0f1419",
|
|
||||||
"background-weak": "#18222c",
|
|
||||||
"background-strong": "#0b1015",
|
|
||||||
"background-stronger": "#080c10",
|
|
||||||
"surface-raised-base-hover": "#0f1419",
|
|
||||||
"border-weak-base": "#2b3440",
|
|
||||||
"border-weak-hover": "#323c49",
|
|
||||||
"border-weak-active": "#394454",
|
|
||||||
"border-weak-selected": "#415063",
|
|
||||||
"border-weak-disabled": "#0a0e12",
|
|
||||||
"border-weak-focus": "#374453",
|
|
||||||
"border-base": "#475367",
|
|
||||||
"border-hover": "#515f75",
|
|
||||||
"border-active": "#5d6b83",
|
|
||||||
"border-selected": "#687795",
|
|
||||||
"border-disabled": "#11161d",
|
|
||||||
"border-focus": "#56647c",
|
|
||||||
"border-strong-base": "#73819b",
|
|
||||||
"border-strong-hover": "#7f8da8",
|
|
||||||
"border-strong-active": "#8b99b5",
|
|
||||||
"border-strong-selected": "#98a6c3",
|
|
||||||
"border-strong-disabled": "#1b222c",
|
|
||||||
"border-strong-focus": "#8391ad",
|
|
||||||
"surface-diff-add-base": "#132f27",
|
|
||||||
"surface-diff-delete-base": "#361d20",
|
|
||||||
"surface-diff-hidden-base": "#1b2632",
|
|
||||||
"text-base": "#d6dae0",
|
|
||||||
"text-weak": "#a3adba",
|
|
||||||
"text-strong": "#fbfbfd",
|
|
||||||
"syntax-string": "#b1c74a",
|
|
||||||
"syntax-primitive": "#f2856f",
|
|
||||||
"syntax-property": "#3fb7e3",
|
|
||||||
"syntax-type": "#e4a75c",
|
|
||||||
"syntax-constant": "#66c6f1",
|
|
||||||
"syntax-info": "#66c6f1",
|
|
||||||
"markdown-heading": "#3fb7e3",
|
|
||||||
"markdown-text": "#d6dae0",
|
|
||||||
"markdown-link": "#3fb7e3",
|
|
||||||
"markdown-link-text": "#66c6f1",
|
|
||||||
"markdown-code": "#b1c74a",
|
|
||||||
"markdown-block-quote": "#e4a75c",
|
|
||||||
"markdown-emph": "#e4a75c",
|
|
||||||
"markdown-strong": "#f2856f",
|
|
||||||
"markdown-horizontal-rule": "#2b3542",
|
|
||||||
"markdown-list-item": "#3fb7e3",
|
|
||||||
"markdown-list-enumeration": "#66c6f1",
|
|
||||||
"markdown-image": "#3fb7e3",
|
|
||||||
"markdown-image-text": "#66c6f1",
|
|
||||||
"markdown-code-block": "#d6dae0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,11 @@
|
|||||||
"name": "Carbonfox",
|
"name": "Carbonfox",
|
||||||
"id": "carbonfox",
|
"id": "carbonfox",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#8e8e8e",
|
"neutral": "#8e8e8e",
|
||||||
|
"ink": "#161616",
|
||||||
"primary": "#0072c3",
|
"primary": "#0072c3",
|
||||||
|
"accent": "#da1e28",
|
||||||
"success": "#198038",
|
"success": "#198038",
|
||||||
"warning": "#f1c21b",
|
"warning": "#f1c21b",
|
||||||
"error": "#da1e28",
|
"error": "#da1e28",
|
||||||
@@ -13,46 +15,14 @@
|
|||||||
"interactive": "#0f62fe",
|
"interactive": "#0f62fe",
|
||||||
"diffAdd": "#198038",
|
"diffAdd": "#198038",
|
||||||
"diffDelete": "#da1e28"
|
"diffDelete": "#da1e28"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#ffffff",
|
|
||||||
"background-weak": "#f4f4f4",
|
|
||||||
"background-strong": "#e8e8e8",
|
|
||||||
"background-stronger": "#dcdcdc",
|
|
||||||
"surface-raised-strong": "#ffffff",
|
|
||||||
"surface-raised-stronger": "#ffffff",
|
|
||||||
"surface-float-base": "#161616",
|
|
||||||
"surface-float-base-hover": "#262626",
|
|
||||||
"text-base": "#161616",
|
|
||||||
"text-weak": "#525252",
|
|
||||||
"text-strong": "#000000",
|
|
||||||
"syntax-string": "#198038",
|
|
||||||
"syntax-primitive": "#da1e28",
|
|
||||||
"syntax-property": "#0043ce",
|
|
||||||
"syntax-type": "#007d79",
|
|
||||||
"syntax-constant": "#6929c4",
|
|
||||||
"syntax-keyword": "#525252",
|
|
||||||
"syntax-info": "#0043ce",
|
|
||||||
"markdown-heading": "#0043ce",
|
|
||||||
"markdown-text": "#161616",
|
|
||||||
"markdown-link": "#0043ce",
|
|
||||||
"markdown-link-text": "#0072c3",
|
|
||||||
"markdown-code": "#198038",
|
|
||||||
"markdown-block-quote": "#525252",
|
|
||||||
"markdown-emph": "#6929c4",
|
|
||||||
"markdown-strong": "#161616",
|
|
||||||
"markdown-horizontal-rule": "#c6c6c6",
|
|
||||||
"markdown-list-item": "#0072c3",
|
|
||||||
"markdown-list-enumeration": "#0072c3",
|
|
||||||
"markdown-image": "#0043ce",
|
|
||||||
"markdown-image-text": "#0072c3",
|
|
||||||
"markdown-code-block": "#393939"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#393939",
|
"neutral": "#393939",
|
||||||
|
"ink": "#f2f4f8",
|
||||||
"primary": "#33b1ff",
|
"primary": "#33b1ff",
|
||||||
|
"accent": "#ff8389",
|
||||||
"success": "#42be65",
|
"success": "#42be65",
|
||||||
"warning": "#f1c21b",
|
"warning": "#f1c21b",
|
||||||
"error": "#ff8389",
|
"error": "#ff8389",
|
||||||
@@ -60,63 +30,6 @@
|
|||||||
"interactive": "#4589ff",
|
"interactive": "#4589ff",
|
||||||
"diffAdd": "#42be65",
|
"diffAdd": "#42be65",
|
||||||
"diffDelete": "#ff8389"
|
"diffDelete": "#ff8389"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#161616",
|
|
||||||
"background-weak": "#262626",
|
|
||||||
"background-strong": "#0d0d0d",
|
|
||||||
"background-stronger": "#000000",
|
|
||||||
"surface-raised-base": "#1c1c1c",
|
|
||||||
"surface-raised-base-hover": "#262626",
|
|
||||||
"surface-raised-strong": "#262626",
|
|
||||||
"surface-raised-strong-hover": "#303030",
|
|
||||||
"surface-raised-stronger": "#303030",
|
|
||||||
"surface-raised-stronger-hover": "#393939",
|
|
||||||
"surface-raised-stronger-non-alpha": "#303030",
|
|
||||||
"surface-float-base": "#0d0d0d",
|
|
||||||
"surface-float-base-hover": "#1a1a1a",
|
|
||||||
"surface-inset-base": "#0d0d0d",
|
|
||||||
"surface-inset-strong": "#000000",
|
|
||||||
"surface-base": "#1e1e1e",
|
|
||||||
"surface-base-hover": "#262626",
|
|
||||||
"surface-diff-add-base": "#0e3a22",
|
|
||||||
"surface-diff-delete-base": "#4d1a1f",
|
|
||||||
"input-base": "#262626",
|
|
||||||
"input-hover": "#303030",
|
|
||||||
"button-secondary-base": "#393939",
|
|
||||||
"button-secondary-hover": "#4c4c4c",
|
|
||||||
"border-weak-base": "#393939",
|
|
||||||
"border-weak-hover": "#4c4c4c",
|
|
||||||
"border-base": "#525252",
|
|
||||||
"border-hover": "#636363",
|
|
||||||
"border-strong-base": "#6f6f6f",
|
|
||||||
"text-base": "#f2f4f8",
|
|
||||||
"text-weak": "#8d8d8d",
|
|
||||||
"text-weaker": "#6f6f6f",
|
|
||||||
"text-strong": "#ffffff",
|
|
||||||
"icon-base": "#8d8d8d",
|
|
||||||
"icon-weak-base": "#6f6f6f",
|
|
||||||
"syntax-string": "#42be65",
|
|
||||||
"syntax-primitive": "#ff8389",
|
|
||||||
"syntax-property": "#78a9ff",
|
|
||||||
"syntax-type": "#08bdba",
|
|
||||||
"syntax-constant": "#be95ff",
|
|
||||||
"syntax-keyword": "#8d8d8d",
|
|
||||||
"syntax-info": "#78a9ff",
|
|
||||||
"markdown-heading": "#82cfff",
|
|
||||||
"markdown-text": "#f2f4f8",
|
|
||||||
"markdown-link": "#78a9ff",
|
|
||||||
"markdown-link-text": "#33b1ff",
|
|
||||||
"markdown-code": "#42be65",
|
|
||||||
"markdown-block-quote": "#8d8d8d",
|
|
||||||
"markdown-emph": "#be95ff",
|
|
||||||
"markdown-strong": "#ffffff",
|
|
||||||
"markdown-horizontal-rule": "#393939",
|
|
||||||
"markdown-list-item": "#33b1ff",
|
|
||||||
"markdown-list-enumeration": "#33b1ff",
|
|
||||||
"markdown-image": "#78a9ff",
|
|
||||||
"markdown-image-text": "#33b1ff",
|
|
||||||
"markdown-code-block": "#c6c6c6"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,129 +3,31 @@
|
|||||||
"name": "Catppuccin",
|
"name": "Catppuccin",
|
||||||
"id": "catppuccin",
|
"id": "catppuccin",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#f5e0dc",
|
"neutral": "#f5e0dc",
|
||||||
|
"ink": "#4c4f69",
|
||||||
"primary": "#7287fd",
|
"primary": "#7287fd",
|
||||||
|
"accent": "#d20f39",
|
||||||
"success": "#40a02b",
|
"success": "#40a02b",
|
||||||
"warning": "#df8e1d",
|
"warning": "#df8e1d",
|
||||||
"error": "#d20f39",
|
"error": "#d20f39",
|
||||||
"info": "#04a5e5",
|
"info": "#04a5e5",
|
||||||
"interactive": "#7287fd",
|
|
||||||
"diffAdd": "#a6d189",
|
"diffAdd": "#a6d189",
|
||||||
"diffDelete": "#e78284"
|
"diffDelete": "#e78284"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#f5e0dc",
|
|
||||||
"background-weak": "#f2d8d4",
|
|
||||||
"background-strong": "#f9e8e4",
|
|
||||||
"background-stronger": "#fdeeee",
|
|
||||||
"border-weak-base": "#e0cfd3",
|
|
||||||
"border-weak-hover": "#d6c4c8",
|
|
||||||
"border-weak-active": "#cdb9be",
|
|
||||||
"border-weak-selected": "#c2aeb4",
|
|
||||||
"border-weak-disabled": "#fbeff2",
|
|
||||||
"border-weak-focus": "#c7b4ba",
|
|
||||||
"border-base": "#bca6b2",
|
|
||||||
"border-hover": "#b19ca8",
|
|
||||||
"border-active": "#a6929e",
|
|
||||||
"border-selected": "#9a8894",
|
|
||||||
"border-disabled": "#f3e4e7",
|
|
||||||
"border-focus": "#ab97a1",
|
|
||||||
"border-strong-base": "#83677f",
|
|
||||||
"border-strong-hover": "#775b73",
|
|
||||||
"border-strong-active": "#6b5068",
|
|
||||||
"border-strong-selected": "#5f465d",
|
|
||||||
"border-strong-disabled": "#d9c5cf",
|
|
||||||
"border-strong-focus": "#714f66",
|
|
||||||
"surface-diff-add-base": "#edf5e6",
|
|
||||||
"surface-diff-delete-base": "#fde1e3",
|
|
||||||
"surface-diff-hidden-base": "#e4e2f6",
|
|
||||||
"text-base": "#4c4f69",
|
|
||||||
"text-weak": "#6c6f85",
|
|
||||||
"text-strong": "#1f1f2a",
|
|
||||||
"syntax-string": "#40a02b",
|
|
||||||
"syntax-primitive": "#d20f39",
|
|
||||||
"syntax-property": "#7287fd",
|
|
||||||
"syntax-type": "#df8e1d",
|
|
||||||
"syntax-constant": "#04a5e5",
|
|
||||||
"syntax-info": "#04a5e5",
|
|
||||||
"markdown-heading": "#7287fd",
|
|
||||||
"markdown-text": "#4c4f69",
|
|
||||||
"markdown-link": "#7287fd",
|
|
||||||
"markdown-link-text": "#04a5e5",
|
|
||||||
"markdown-code": "#40a02b",
|
|
||||||
"markdown-block-quote": "#df8e1d",
|
|
||||||
"markdown-emph": "#df8e1d",
|
|
||||||
"markdown-strong": "#d20f39",
|
|
||||||
"markdown-horizontal-rule": "#d4c5cf",
|
|
||||||
"markdown-list-item": "#7287fd",
|
|
||||||
"markdown-list-enumeration": "#04a5e5",
|
|
||||||
"markdown-image": "#7287fd",
|
|
||||||
"markdown-image-text": "#04a5e5",
|
|
||||||
"markdown-code-block": "#7287fd"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#1e1e2e",
|
"neutral": "#1e1e2e",
|
||||||
|
"ink": "#cdd6f4",
|
||||||
"primary": "#b4befe",
|
"primary": "#b4befe",
|
||||||
|
"accent": "#f38ba8",
|
||||||
"success": "#a6d189",
|
"success": "#a6d189",
|
||||||
"warning": "#f4b8e4",
|
"warning": "#f4b8e4",
|
||||||
"error": "#f38ba8",
|
"error": "#f38ba8",
|
||||||
"info": "#89dceb",
|
"info": "#89dceb",
|
||||||
"interactive": "#b4befe",
|
|
||||||
"diffAdd": "#94e2d5",
|
"diffAdd": "#94e2d5",
|
||||||
"diffDelete": "#f38ba8"
|
"diffDelete": "#f38ba8"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#1e1e2e",
|
|
||||||
"background-weak": "#211f31",
|
|
||||||
"background-strong": "#1c1c29",
|
|
||||||
"background-stronger": "#191926",
|
|
||||||
"border-weak-base": "#35324a",
|
|
||||||
"border-weak-hover": "#393655",
|
|
||||||
"border-weak-active": "#403c61",
|
|
||||||
"border-weak-selected": "#47436d",
|
|
||||||
"border-weak-disabled": "#141426",
|
|
||||||
"border-weak-focus": "#3d3a63",
|
|
||||||
"border-base": "#4a4763",
|
|
||||||
"border-hover": "#524f70",
|
|
||||||
"border-active": "#5a577d",
|
|
||||||
"border-selected": "#625f8a",
|
|
||||||
"border-disabled": "#1b1a2c",
|
|
||||||
"border-focus": "#575379",
|
|
||||||
"border-strong-base": "#6e6a8c",
|
|
||||||
"border-strong-hover": "#787497",
|
|
||||||
"border-strong-active": "#8380a2",
|
|
||||||
"border-strong-selected": "#8d8bad",
|
|
||||||
"border-strong-disabled": "#232237",
|
|
||||||
"border-strong-focus": "#7b779b",
|
|
||||||
"surface-diff-add-base": "#1d2c30",
|
|
||||||
"surface-diff-delete-base": "#2c1f2a",
|
|
||||||
"surface-diff-hidden-base": "#232538",
|
|
||||||
"text-base": "#cdd6f4",
|
|
||||||
"text-weak": "#a6adc8",
|
|
||||||
"text-strong": "#f4f2ff",
|
|
||||||
"syntax-string": "#a6e3a1",
|
|
||||||
"syntax-primitive": "#f38ba8",
|
|
||||||
"syntax-property": "#b4befe",
|
|
||||||
"syntax-type": "#f9e2af",
|
|
||||||
"syntax-constant": "#89dceb",
|
|
||||||
"syntax-info": "#89dceb",
|
|
||||||
"markdown-heading": "#b4befe",
|
|
||||||
"markdown-text": "#cdd6f4",
|
|
||||||
"markdown-link": "#b4befe",
|
|
||||||
"markdown-link-text": "#89dceb",
|
|
||||||
"markdown-code": "#a6e3a1",
|
|
||||||
"markdown-block-quote": "#f9e2af",
|
|
||||||
"markdown-emph": "#f9e2af",
|
|
||||||
"markdown-strong": "#f38ba8",
|
|
||||||
"markdown-horizontal-rule": "#2e2d45",
|
|
||||||
"markdown-list-item": "#b4befe",
|
|
||||||
"markdown-list-enumeration": "#89dceb",
|
|
||||||
"markdown-image": "#b4befe",
|
|
||||||
"markdown-image-text": "#89dceb",
|
|
||||||
"markdown-code-block": "#cdd6f4"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,129 +3,31 @@
|
|||||||
"name": "Dracula",
|
"name": "Dracula",
|
||||||
"id": "dracula",
|
"id": "dracula",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#f8f8f2",
|
"neutral": "#f8f8f2",
|
||||||
|
"ink": "#1f1f2f",
|
||||||
"primary": "#7c6bf5",
|
"primary": "#7c6bf5",
|
||||||
|
"accent": "#d16090",
|
||||||
"success": "#2fbf71",
|
"success": "#2fbf71",
|
||||||
"warning": "#f7a14d",
|
"warning": "#f7a14d",
|
||||||
"error": "#d9536f",
|
"error": "#d9536f",
|
||||||
"info": "#1d7fc5",
|
"info": "#1d7fc5",
|
||||||
"interactive": "#7c6bf5",
|
|
||||||
"diffAdd": "#9fe3b3",
|
"diffAdd": "#9fe3b3",
|
||||||
"diffDelete": "#f8a1b8"
|
"diffDelete": "#f8a1b8"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#f8f8f2",
|
|
||||||
"background-weak": "#f1f2ed",
|
|
||||||
"background-strong": "#f6f6f1",
|
|
||||||
"background-stronger": "#f2f2ec",
|
|
||||||
"border-weak-base": "#e2e3da",
|
|
||||||
"border-weak-hover": "#d8d9d0",
|
|
||||||
"border-weak-active": "#cfd0c7",
|
|
||||||
"border-weak-selected": "#c4c6bc",
|
|
||||||
"border-weak-disabled": "#eceee3",
|
|
||||||
"border-weak-focus": "#c9cabf",
|
|
||||||
"border-base": "#c4c6ba",
|
|
||||||
"border-hover": "#b8baae",
|
|
||||||
"border-active": "#abada3",
|
|
||||||
"border-selected": "#979a90",
|
|
||||||
"border-disabled": "#e5e7dd",
|
|
||||||
"border-focus": "#b0b2a7",
|
|
||||||
"border-strong-base": "#9fa293",
|
|
||||||
"border-strong-hover": "#8e9185",
|
|
||||||
"border-strong-active": "#7e8176",
|
|
||||||
"border-strong-selected": "#6f7268",
|
|
||||||
"border-strong-disabled": "#c7c9be",
|
|
||||||
"border-strong-focus": "#878b7f",
|
|
||||||
"surface-diff-add-base": "#e4f5e6",
|
|
||||||
"surface-diff-delete-base": "#fae4eb",
|
|
||||||
"surface-diff-hidden-base": "#dedfe9",
|
|
||||||
"text-base": "#1f1f2f",
|
|
||||||
"text-weak": "#52526b",
|
|
||||||
"text-strong": "#05040c",
|
|
||||||
"syntax-string": "#2fbf71",
|
|
||||||
"syntax-primitive": "#d16090",
|
|
||||||
"syntax-property": "#7c6bf5",
|
|
||||||
"syntax-type": "#f7a14d",
|
|
||||||
"syntax-constant": "#1d7fc5",
|
|
||||||
"syntax-info": "#1d7fc5",
|
|
||||||
"markdown-heading": "#7c6bf5",
|
|
||||||
"markdown-text": "#1f1f2f",
|
|
||||||
"markdown-link": "#7c6bf5",
|
|
||||||
"markdown-link-text": "#1d7fc5",
|
|
||||||
"markdown-code": "#2fbf71",
|
|
||||||
"markdown-block-quote": "#f7a14d",
|
|
||||||
"markdown-emph": "#f7a14d",
|
|
||||||
"markdown-strong": "#d16090",
|
|
||||||
"markdown-horizontal-rule": "#c3c5d4",
|
|
||||||
"markdown-list-item": "#7c6bf5",
|
|
||||||
"markdown-list-enumeration": "#1d7fc5",
|
|
||||||
"markdown-image": "#7c6bf5",
|
|
||||||
"markdown-image-text": "#1d7fc5",
|
|
||||||
"markdown-code-block": "#1d7fc5"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#1d1e28",
|
"neutral": "#1d1e28",
|
||||||
|
"ink": "#f8f8f2",
|
||||||
"primary": "#bd93f9",
|
"primary": "#bd93f9",
|
||||||
|
"accent": "#ff79c6",
|
||||||
"success": "#50fa7b",
|
"success": "#50fa7b",
|
||||||
"warning": "#ffb86c",
|
"warning": "#ffb86c",
|
||||||
"error": "#ff5555",
|
"error": "#ff5555",
|
||||||
"info": "#8be9fd",
|
"info": "#8be9fd",
|
||||||
"interactive": "#bd93f9",
|
|
||||||
"diffAdd": "#2fb27d",
|
"diffAdd": "#2fb27d",
|
||||||
"diffDelete": "#ff6b81"
|
"diffDelete": "#ff6b81"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#14151f",
|
|
||||||
"background-weak": "#181926",
|
|
||||||
"background-strong": "#161722",
|
|
||||||
"background-stronger": "#191a26",
|
|
||||||
"border-weak-base": "#2d2f3c",
|
|
||||||
"border-weak-hover": "#303244",
|
|
||||||
"border-weak-active": "#35364c",
|
|
||||||
"border-weak-selected": "#3b3d55",
|
|
||||||
"border-weak-disabled": "#1e1f2b",
|
|
||||||
"border-weak-focus": "#383a50",
|
|
||||||
"border-base": "#3f415a",
|
|
||||||
"border-hover": "#464967",
|
|
||||||
"border-active": "#4d5073",
|
|
||||||
"border-selected": "#55587f",
|
|
||||||
"border-disabled": "#272834",
|
|
||||||
"border-focus": "#4a4d6d",
|
|
||||||
"border-strong-base": "#606488",
|
|
||||||
"border-strong-hover": "#6a6e96",
|
|
||||||
"border-strong-active": "#7378a3",
|
|
||||||
"border-strong-selected": "#7d82b1",
|
|
||||||
"border-strong-disabled": "#343649",
|
|
||||||
"border-strong-focus": "#6f739c",
|
|
||||||
"surface-diff-add-base": "#1f2a2f",
|
|
||||||
"surface-diff-delete-base": "#2d1f27",
|
|
||||||
"surface-diff-hidden-base": "#24253a",
|
|
||||||
"text-base": "#f8f8f2",
|
|
||||||
"text-weak": "#b6b9e4",
|
|
||||||
"text-strong": "#ffffff",
|
|
||||||
"syntax-string": "#50fa7b",
|
|
||||||
"syntax-primitive": "#ff79c6",
|
|
||||||
"syntax-property": "#bd93f9",
|
|
||||||
"syntax-type": "#ffb86c",
|
|
||||||
"syntax-constant": "#8be9fd",
|
|
||||||
"syntax-info": "#8be9fd",
|
|
||||||
"markdown-heading": "#bd93f9",
|
|
||||||
"markdown-text": "#f8f8f2",
|
|
||||||
"markdown-link": "#bd93f9",
|
|
||||||
"markdown-link-text": "#8be9fd",
|
|
||||||
"markdown-code": "#50fa7b",
|
|
||||||
"markdown-block-quote": "#ffb86c",
|
|
||||||
"markdown-emph": "#ffb86c",
|
|
||||||
"markdown-strong": "#ff79c6",
|
|
||||||
"markdown-horizontal-rule": "#44475a",
|
|
||||||
"markdown-list-item": "#bd93f9",
|
|
||||||
"markdown-list-enumeration": "#8be9fd",
|
|
||||||
"markdown-image": "#bd93f9",
|
|
||||||
"markdown-image-text": "#8be9fd",
|
|
||||||
"markdown-code-block": "#f8f8f2"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,130 +3,31 @@
|
|||||||
"name": "Gruvbox",
|
"name": "Gruvbox",
|
||||||
"id": "gruvbox",
|
"id": "gruvbox",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#fbf1c7",
|
"neutral": "#fbf1c7",
|
||||||
|
"ink": "#3c3836",
|
||||||
"primary": "#076678",
|
"primary": "#076678",
|
||||||
|
"accent": "#9d0006",
|
||||||
"success": "#79740e",
|
"success": "#79740e",
|
||||||
"warning": "#b57614",
|
"warning": "#b57614",
|
||||||
"error": "#9d0006",
|
"error": "#9d0006",
|
||||||
"info": "#8f3f71",
|
"info": "#8f3f71",
|
||||||
"interactive": "#076678",
|
|
||||||
"diffAdd": "#79740e",
|
"diffAdd": "#79740e",
|
||||||
"diffDelete": "#9d0006"
|
"diffDelete": "#9d0006"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#fbf1c7",
|
|
||||||
"background-weak": "#f2e5bc",
|
|
||||||
"background-strong": "#f9f5d7",
|
|
||||||
"background-stronger": "#fdf9e8",
|
|
||||||
"surface-raised-stronger-non-alpha": "#fbfaf5",
|
|
||||||
"border-weak-base": "#d5c4a1",
|
|
||||||
"border-weak-hover": "#c9b897",
|
|
||||||
"border-weak-active": "#bdae93",
|
|
||||||
"border-weak-selected": "#b0a285",
|
|
||||||
"border-weak-disabled": "#f0e4b8",
|
|
||||||
"border-weak-focus": "#c4b590",
|
|
||||||
"border-base": "#bdae93",
|
|
||||||
"border-hover": "#b0a285",
|
|
||||||
"border-active": "#a89984",
|
|
||||||
"border-selected": "#928374",
|
|
||||||
"border-disabled": "#e5d9ad",
|
|
||||||
"border-focus": "#a89984",
|
|
||||||
"border-strong-base": "#7c6f64",
|
|
||||||
"border-strong-hover": "#6e6259",
|
|
||||||
"border-strong-active": "#665c54",
|
|
||||||
"border-strong-selected": "#5a524b",
|
|
||||||
"border-strong-disabled": "#c9bda1",
|
|
||||||
"border-strong-focus": "#665c54",
|
|
||||||
"surface-diff-add-base": "#dde3b1",
|
|
||||||
"surface-diff-delete-base": "#e8c7c3",
|
|
||||||
"surface-diff-hidden-base": "#ebdfb5",
|
|
||||||
"text-base": "#3c3836",
|
|
||||||
"text-weak": "#7c6f64",
|
|
||||||
"text-strong": "#282828",
|
|
||||||
"syntax-string": "#79740e",
|
|
||||||
"syntax-primitive": "#9d0006",
|
|
||||||
"syntax-property": "#076678",
|
|
||||||
"syntax-type": "#b57614",
|
|
||||||
"syntax-constant": "#8f3f71",
|
|
||||||
"syntax-info": "#427b58",
|
|
||||||
"markdown-heading": "#076678",
|
|
||||||
"markdown-text": "#3c3836",
|
|
||||||
"markdown-link": "#076678",
|
|
||||||
"markdown-link-text": "#427b58",
|
|
||||||
"markdown-code": "#79740e",
|
|
||||||
"markdown-block-quote": "#928374",
|
|
||||||
"markdown-emph": "#8f3f71",
|
|
||||||
"markdown-strong": "#af3a03",
|
|
||||||
"markdown-horizontal-rule": "#d5c4a1",
|
|
||||||
"markdown-list-item": "#076678",
|
|
||||||
"markdown-list-enumeration": "#427b58",
|
|
||||||
"markdown-image": "#076678",
|
|
||||||
"markdown-image-text": "#427b58",
|
|
||||||
"markdown-code-block": "#3c3836"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#282828",
|
"neutral": "#282828",
|
||||||
|
"ink": "#ebdbb2",
|
||||||
"primary": "#83a598",
|
"primary": "#83a598",
|
||||||
|
"accent": "#fb4934",
|
||||||
"success": "#b8bb26",
|
"success": "#b8bb26",
|
||||||
"warning": "#fabd2f",
|
"warning": "#fabd2f",
|
||||||
"error": "#fb4934",
|
"error": "#fb4934",
|
||||||
"info": "#d3869b",
|
"info": "#d3869b",
|
||||||
"interactive": "#83a598",
|
|
||||||
"diffAdd": "#b8bb26",
|
"diffAdd": "#b8bb26",
|
||||||
"diffDelete": "#fb4934"
|
"diffDelete": "#fb4934"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#282828",
|
|
||||||
"background-weak": "#32302f",
|
|
||||||
"background-strong": "#1d2021",
|
|
||||||
"background-stronger": "#141617",
|
|
||||||
"border-weak-base": "#504945",
|
|
||||||
"border-weak-hover": "#5a524b",
|
|
||||||
"border-weak-active": "#665c54",
|
|
||||||
"border-weak-selected": "#70665d",
|
|
||||||
"border-weak-disabled": "#1e1d1c",
|
|
||||||
"border-weak-focus": "#5e5650",
|
|
||||||
"border-base": "#665c54",
|
|
||||||
"border-hover": "#70665d",
|
|
||||||
"border-active": "#7c6f64",
|
|
||||||
"border-selected": "#928374",
|
|
||||||
"border-disabled": "#2a2827",
|
|
||||||
"border-focus": "#7c6f64",
|
|
||||||
"border-strong-base": "#928374",
|
|
||||||
"border-strong-hover": "#9d8e7f",
|
|
||||||
"border-strong-active": "#a89984",
|
|
||||||
"border-strong-selected": "#b3a48f",
|
|
||||||
"border-strong-disabled": "#3c3836",
|
|
||||||
"border-strong-focus": "#a89984",
|
|
||||||
"surface-diff-add-base": "#2a3325",
|
|
||||||
"surface-diff-delete-base": "#3c2222",
|
|
||||||
"surface-diff-hidden-base": "#32302f",
|
|
||||||
"text-base": "#ebdbb2",
|
|
||||||
"text-weak": "#a89984",
|
|
||||||
"text-strong": "#fbf1c7",
|
|
||||||
"syntax-string": "#b8bb26",
|
|
||||||
"syntax-primitive": "#fb4934",
|
|
||||||
"syntax-property": "#83a598",
|
|
||||||
"syntax-type": "#fabd2f",
|
|
||||||
"syntax-constant": "#d3869b",
|
|
||||||
"syntax-info": "#8ec07c",
|
|
||||||
"markdown-heading": "#83a598",
|
|
||||||
"markdown-text": "#ebdbb2",
|
|
||||||
"markdown-link": "#83a598",
|
|
||||||
"markdown-link-text": "#8ec07c",
|
|
||||||
"markdown-code": "#b8bb26",
|
|
||||||
"markdown-block-quote": "#928374",
|
|
||||||
"markdown-emph": "#d3869b",
|
|
||||||
"markdown-strong": "#fe8019",
|
|
||||||
"markdown-horizontal-rule": "#504945",
|
|
||||||
"markdown-list-item": "#83a598",
|
|
||||||
"markdown-list-enumeration": "#8ec07c",
|
|
||||||
"markdown-image": "#83a598",
|
|
||||||
"markdown-image-text": "#8ec07c",
|
|
||||||
"markdown-code-block": "#ebdbb2"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,129 +3,31 @@
|
|||||||
"name": "Monokai",
|
"name": "Monokai",
|
||||||
"id": "monokai",
|
"id": "monokai",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#fdf8ec",
|
"neutral": "#fdf8ec",
|
||||||
|
"ink": "#292318",
|
||||||
"primary": "#bf7bff",
|
"primary": "#bf7bff",
|
||||||
|
"accent": "#d9487c",
|
||||||
"success": "#4fb54b",
|
"success": "#4fb54b",
|
||||||
"warning": "#f1a948",
|
"warning": "#f1a948",
|
||||||
"error": "#e54b4b",
|
"error": "#e54b4b",
|
||||||
"info": "#2d9ad7",
|
"info": "#2d9ad7",
|
||||||
"interactive": "#bf7bff",
|
|
||||||
"diffAdd": "#bfe7a3",
|
"diffAdd": "#bfe7a3",
|
||||||
"diffDelete": "#f6a3ae"
|
"diffDelete": "#f6a3ae"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#fdf8ec",
|
|
||||||
"background-weak": "#f8f2e6",
|
|
||||||
"background-strong": "#fbf5e8",
|
|
||||||
"background-stronger": "#f7efdd",
|
|
||||||
"border-weak-base": "#e9e0cf",
|
|
||||||
"border-weak-hover": "#dfd5c3",
|
|
||||||
"border-weak-active": "#d5cab7",
|
|
||||||
"border-weak-selected": "#cabfad",
|
|
||||||
"border-weak-disabled": "#f3ebdd",
|
|
||||||
"border-weak-focus": "#d0c2b1",
|
|
||||||
"border-base": "#c7b9a5",
|
|
||||||
"border-hover": "#bcae98",
|
|
||||||
"border-active": "#b0a28c",
|
|
||||||
"border-selected": "#a49781",
|
|
||||||
"border-disabled": "#efe5d6",
|
|
||||||
"border-focus": "#b6a893",
|
|
||||||
"border-strong-base": "#998b76",
|
|
||||||
"border-strong-hover": "#8a7c67",
|
|
||||||
"border-strong-active": "#7a6d58",
|
|
||||||
"border-strong-selected": "#6c604c",
|
|
||||||
"border-strong-disabled": "#d7cabc",
|
|
||||||
"border-strong-focus": "#82745f",
|
|
||||||
"surface-diff-add-base": "#e8f7e1",
|
|
||||||
"surface-diff-delete-base": "#fde5e4",
|
|
||||||
"surface-diff-hidden-base": "#e9e0d0",
|
|
||||||
"text-base": "#292318",
|
|
||||||
"text-weak": "#6d5c40",
|
|
||||||
"text-strong": "#1c150c",
|
|
||||||
"syntax-string": "#4fb54b",
|
|
||||||
"syntax-primitive": "#d9487c",
|
|
||||||
"syntax-property": "#bf7bff",
|
|
||||||
"syntax-type": "#f1a948",
|
|
||||||
"syntax-constant": "#2d9ad7",
|
|
||||||
"syntax-info": "#2d9ad7",
|
|
||||||
"markdown-heading": "#bf7bff",
|
|
||||||
"markdown-text": "#292318",
|
|
||||||
"markdown-link": "#bf7bff",
|
|
||||||
"markdown-link-text": "#2d9ad7",
|
|
||||||
"markdown-code": "#4fb54b",
|
|
||||||
"markdown-block-quote": "#f1a948",
|
|
||||||
"markdown-emph": "#f1a948",
|
|
||||||
"markdown-strong": "#d9487c",
|
|
||||||
"markdown-horizontal-rule": "#cdbdab",
|
|
||||||
"markdown-list-item": "#bf7bff",
|
|
||||||
"markdown-list-enumeration": "#2d9ad7",
|
|
||||||
"markdown-image": "#bf7bff",
|
|
||||||
"markdown-image-text": "#2d9ad7",
|
|
||||||
"markdown-code-block": "#2d9ad7"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#272822",
|
"neutral": "#272822",
|
||||||
|
"ink": "#f8f8f2",
|
||||||
"primary": "#ae81ff",
|
"primary": "#ae81ff",
|
||||||
|
"accent": "#f92672",
|
||||||
"success": "#a6e22e",
|
"success": "#a6e22e",
|
||||||
"warning": "#fd971f",
|
"warning": "#fd971f",
|
||||||
"error": "#f92672",
|
"error": "#f92672",
|
||||||
"info": "#66d9ef",
|
"info": "#66d9ef",
|
||||||
"interactive": "#ae81ff",
|
|
||||||
"diffAdd": "#4d7f2a",
|
"diffAdd": "#4d7f2a",
|
||||||
"diffDelete": "#f4477c"
|
"diffDelete": "#f4477c"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#23241e",
|
|
||||||
"background-weak": "#27281f",
|
|
||||||
"background-strong": "#25261f",
|
|
||||||
"background-stronger": "#292a23",
|
|
||||||
"border-weak-base": "#343528",
|
|
||||||
"border-weak-hover": "#393a2d",
|
|
||||||
"border-weak-active": "#3f4033",
|
|
||||||
"border-weak-selected": "#454639",
|
|
||||||
"border-weak-disabled": "#1d1e16",
|
|
||||||
"border-weak-focus": "#414235",
|
|
||||||
"border-base": "#494a3a",
|
|
||||||
"border-hover": "#50523f",
|
|
||||||
"border-active": "#585a45",
|
|
||||||
"border-selected": "#60624b",
|
|
||||||
"border-disabled": "#23241b",
|
|
||||||
"border-focus": "#555741",
|
|
||||||
"border-strong-base": "#6a6c55",
|
|
||||||
"border-strong-hover": "#73755d",
|
|
||||||
"border-strong-active": "#7d7f66",
|
|
||||||
"border-strong-selected": "#878970",
|
|
||||||
"border-strong-disabled": "#2c2d23",
|
|
||||||
"border-strong-focus": "#7a7c63",
|
|
||||||
"surface-diff-add-base": "#1e2a1d",
|
|
||||||
"surface-diff-delete-base": "#301c24",
|
|
||||||
"surface-diff-hidden-base": "#2f2f24",
|
|
||||||
"text-base": "#f8f8f2",
|
|
||||||
"text-weak": "#c5c5c0",
|
|
||||||
"text-strong": "#ffffff",
|
|
||||||
"syntax-string": "#a6e22e",
|
|
||||||
"syntax-primitive": "#f92672",
|
|
||||||
"syntax-property": "#ae81ff",
|
|
||||||
"syntax-type": "#fd971f",
|
|
||||||
"syntax-constant": "#66d9ef",
|
|
||||||
"syntax-info": "#66d9ef",
|
|
||||||
"markdown-heading": "#ae81ff",
|
|
||||||
"markdown-text": "#f8f8f2",
|
|
||||||
"markdown-link": "#ae81ff",
|
|
||||||
"markdown-link-text": "#66d9ef",
|
|
||||||
"markdown-code": "#a6e22e",
|
|
||||||
"markdown-block-quote": "#fd971f",
|
|
||||||
"markdown-emph": "#fd971f",
|
|
||||||
"markdown-strong": "#f92672",
|
|
||||||
"markdown-horizontal-rule": "#3b3c34",
|
|
||||||
"markdown-list-item": "#ae81ff",
|
|
||||||
"markdown-list-enumeration": "#66d9ef",
|
|
||||||
"markdown-image": "#ae81ff",
|
|
||||||
"markdown-image-text": "#66d9ef",
|
|
||||||
"markdown-code-block": "#f8f8f2"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,129 +3,31 @@
|
|||||||
"name": "Night Owl",
|
"name": "Night Owl",
|
||||||
"id": "nightowl",
|
"id": "nightowl",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#f0f0f0",
|
"neutral": "#f0f0f0",
|
||||||
|
"ink": "#403f53",
|
||||||
"primary": "#4876d6",
|
"primary": "#4876d6",
|
||||||
|
"accent": "#aa0982",
|
||||||
"success": "#2aa298",
|
"success": "#2aa298",
|
||||||
"warning": "#c96765",
|
"warning": "#c96765",
|
||||||
"error": "#de3d3b",
|
"error": "#de3d3b",
|
||||||
"info": "#4876d6",
|
"info": "#4876d6",
|
||||||
"interactive": "#4876d6",
|
|
||||||
"diffAdd": "#2aa298",
|
"diffAdd": "#2aa298",
|
||||||
"diffDelete": "#de3d3b"
|
"diffDelete": "#de3d3b"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#fbfbfb",
|
|
||||||
"background-weak": "#f0f0f0",
|
|
||||||
"background-strong": "#ffffff",
|
|
||||||
"background-stronger": "#ffffff",
|
|
||||||
"border-weak-base": "#d9d9d9",
|
|
||||||
"border-weak-hover": "#cccccc",
|
|
||||||
"border-weak-active": "#bfbfbf",
|
|
||||||
"border-weak-selected": "#4876d6",
|
|
||||||
"border-weak-disabled": "#e6e6e6",
|
|
||||||
"border-weak-focus": "#4876d6",
|
|
||||||
"border-base": "#c0c0c0",
|
|
||||||
"border-hover": "#b3b3b3",
|
|
||||||
"border-active": "#a6a6a6",
|
|
||||||
"border-selected": "#4876d6",
|
|
||||||
"border-disabled": "#d9d9d9",
|
|
||||||
"border-focus": "#4876d6",
|
|
||||||
"border-strong-base": "#90a7b2",
|
|
||||||
"border-strong-hover": "#7d9aa6",
|
|
||||||
"border-strong-active": "#6a8d9a",
|
|
||||||
"border-strong-selected": "#4876d6",
|
|
||||||
"border-strong-disabled": "#c0c0c0",
|
|
||||||
"border-strong-focus": "#4876d6",
|
|
||||||
"surface-diff-add-base": "#eaf8f6",
|
|
||||||
"surface-diff-delete-base": "#fbe9e9",
|
|
||||||
"surface-diff-hidden-base": "#e8f0fc",
|
|
||||||
"text-base": "#403f53",
|
|
||||||
"text-weak": "#7a8181",
|
|
||||||
"text-strong": "#1a1a1a",
|
|
||||||
"syntax-string": "#c96765",
|
|
||||||
"syntax-primitive": "#aa0982",
|
|
||||||
"syntax-property": "#4876d6",
|
|
||||||
"syntax-type": "#994cc3",
|
|
||||||
"syntax-constant": "#2aa298",
|
|
||||||
"syntax-info": "#4876d6",
|
|
||||||
"markdown-heading": "#4876d6",
|
|
||||||
"markdown-text": "#403f53",
|
|
||||||
"markdown-link": "#4876d6",
|
|
||||||
"markdown-link-text": "#2aa298",
|
|
||||||
"markdown-code": "#2aa298",
|
|
||||||
"markdown-block-quote": "#7a8181",
|
|
||||||
"markdown-emph": "#994cc3",
|
|
||||||
"markdown-strong": "#c96765",
|
|
||||||
"markdown-horizontal-rule": "#90a7b2",
|
|
||||||
"markdown-list-item": "#4876d6",
|
|
||||||
"markdown-list-enumeration": "#2aa298",
|
|
||||||
"markdown-image": "#4876d6",
|
|
||||||
"markdown-image-text": "#2aa298",
|
|
||||||
"markdown-code-block": "#403f53"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#011627",
|
"neutral": "#011627",
|
||||||
|
"ink": "#d6deeb",
|
||||||
"primary": "#82aaff",
|
"primary": "#82aaff",
|
||||||
|
"accent": "#f78c6c",
|
||||||
"success": "#c5e478",
|
"success": "#c5e478",
|
||||||
"warning": "#ecc48d",
|
"warning": "#ecc48d",
|
||||||
"error": "#ef5350",
|
"error": "#ef5350",
|
||||||
"info": "#82aaff",
|
"info": "#82aaff",
|
||||||
"interactive": "#82aaff",
|
|
||||||
"diffAdd": "#c5e478",
|
"diffAdd": "#c5e478",
|
||||||
"diffDelete": "#ef5350"
|
"diffDelete": "#ef5350"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#011627",
|
|
||||||
"background-weak": "#0b253a",
|
|
||||||
"background-strong": "#001122",
|
|
||||||
"background-stronger": "#000c17",
|
|
||||||
"border-weak-base": "#1d3b53",
|
|
||||||
"border-weak-hover": "#234561",
|
|
||||||
"border-weak-active": "#2a506f",
|
|
||||||
"border-weak-selected": "#82aaff",
|
|
||||||
"border-weak-disabled": "#0f2132",
|
|
||||||
"border-weak-focus": "#82aaff",
|
|
||||||
"border-base": "#3a5a75",
|
|
||||||
"border-hover": "#456785",
|
|
||||||
"border-active": "#507494",
|
|
||||||
"border-selected": "#82aaff",
|
|
||||||
"border-disabled": "#1a3347",
|
|
||||||
"border-focus": "#82aaff",
|
|
||||||
"border-strong-base": "#5f7e97",
|
|
||||||
"border-strong-hover": "#6e8da6",
|
|
||||||
"border-strong-active": "#7d9cb5",
|
|
||||||
"border-strong-selected": "#82aaff",
|
|
||||||
"border-strong-disabled": "#2c4a63",
|
|
||||||
"border-strong-focus": "#82aaff",
|
|
||||||
"surface-diff-add-base": "#0a2e1a",
|
|
||||||
"surface-diff-delete-base": "#2d1b1b",
|
|
||||||
"surface-diff-hidden-base": "#0b253a",
|
|
||||||
"text-base": "#d6deeb",
|
|
||||||
"text-weak": "#5f7e97",
|
|
||||||
"text-strong": "#ffffff",
|
|
||||||
"syntax-string": "#ecc48d",
|
|
||||||
"syntax-primitive": "#f78c6c",
|
|
||||||
"syntax-property": "#82aaff",
|
|
||||||
"syntax-type": "#c5e478",
|
|
||||||
"syntax-constant": "#7fdbca",
|
|
||||||
"syntax-info": "#82aaff",
|
|
||||||
"markdown-heading": "#82aaff",
|
|
||||||
"markdown-text": "#d6deeb",
|
|
||||||
"markdown-link": "#82aaff",
|
|
||||||
"markdown-link-text": "#7fdbca",
|
|
||||||
"markdown-code": "#c5e478",
|
|
||||||
"markdown-block-quote": "#5f7e97",
|
|
||||||
"markdown-emph": "#c792ea",
|
|
||||||
"markdown-strong": "#ecc48d",
|
|
||||||
"markdown-horizontal-rule": "#5f7e97",
|
|
||||||
"markdown-list-item": "#82aaff",
|
|
||||||
"markdown-list-enumeration": "#7fdbca",
|
|
||||||
"markdown-image": "#82aaff",
|
|
||||||
"markdown-image-text": "#7fdbca",
|
|
||||||
"markdown-code-block": "#d6deeb"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,129 +3,31 @@
|
|||||||
"name": "Nord",
|
"name": "Nord",
|
||||||
"id": "nord",
|
"id": "nord",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#eceff4",
|
"neutral": "#eceff4",
|
||||||
|
"ink": "#2e3440",
|
||||||
"primary": "#5e81ac",
|
"primary": "#5e81ac",
|
||||||
|
"accent": "#bf616a",
|
||||||
"success": "#8fbcbb",
|
"success": "#8fbcbb",
|
||||||
"warning": "#d08770",
|
"warning": "#d08770",
|
||||||
"error": "#bf616a",
|
"error": "#bf616a",
|
||||||
"info": "#81a1c1",
|
"info": "#81a1c1",
|
||||||
"interactive": "#5e81ac",
|
|
||||||
"diffAdd": "#a3be8c",
|
"diffAdd": "#a3be8c",
|
||||||
"diffDelete": "#bf616a"
|
"diffDelete": "#bf616a"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#eceff4",
|
|
||||||
"background-weak": "#e4e8f0",
|
|
||||||
"background-strong": "#f1f3f8",
|
|
||||||
"background-stronger": "#f6f8fc",
|
|
||||||
"border-weak-base": "#d5dbe7",
|
|
||||||
"border-weak-hover": "#c9d0de",
|
|
||||||
"border-weak-active": "#bec5d4",
|
|
||||||
"border-weak-selected": "#b2bacc",
|
|
||||||
"border-weak-disabled": "#f0f3fa",
|
|
||||||
"border-weak-focus": "#b9bfd0",
|
|
||||||
"border-base": "#afb7cb",
|
|
||||||
"border-hover": "#a3abc1",
|
|
||||||
"border-active": "#979fb7",
|
|
||||||
"border-selected": "#8b94ad",
|
|
||||||
"border-disabled": "#e5e9f2",
|
|
||||||
"border-focus": "#9ca4ba",
|
|
||||||
"border-strong-base": "#757f97",
|
|
||||||
"border-strong-hover": "#69718a",
|
|
||||||
"border-strong-active": "#5d647d",
|
|
||||||
"border-strong-selected": "#525970",
|
|
||||||
"border-strong-disabled": "#c9cedc",
|
|
||||||
"border-strong-focus": "#636c84",
|
|
||||||
"surface-diff-add-base": "#e4f0e4",
|
|
||||||
"surface-diff-delete-base": "#f4e1e4",
|
|
||||||
"surface-diff-hidden-base": "#dfe6f2",
|
|
||||||
"text-base": "#2e3440",
|
|
||||||
"text-weak": "#4c566a",
|
|
||||||
"text-strong": "#1f2530",
|
|
||||||
"syntax-string": "#a3be8c",
|
|
||||||
"syntax-primitive": "#bf616a",
|
|
||||||
"syntax-property": "#5e81ac",
|
|
||||||
"syntax-type": "#d08770",
|
|
||||||
"syntax-constant": "#81a1c1",
|
|
||||||
"syntax-info": "#81a1c1",
|
|
||||||
"markdown-heading": "#5e81ac",
|
|
||||||
"markdown-text": "#2e3440",
|
|
||||||
"markdown-link": "#5e81ac",
|
|
||||||
"markdown-link-text": "#81a1c1",
|
|
||||||
"markdown-code": "#a3be8c",
|
|
||||||
"markdown-block-quote": "#d08770",
|
|
||||||
"markdown-emph": "#d08770",
|
|
||||||
"markdown-strong": "#bf616a",
|
|
||||||
"markdown-horizontal-rule": "#cbd3e1",
|
|
||||||
"markdown-list-item": "#5e81ac",
|
|
||||||
"markdown-list-enumeration": "#81a1c1",
|
|
||||||
"markdown-image": "#5e81ac",
|
|
||||||
"markdown-image-text": "#81a1c1",
|
|
||||||
"markdown-code-block": "#5e81ac"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#2e3440",
|
"neutral": "#2e3440",
|
||||||
|
"ink": "#e5e9f0",
|
||||||
"primary": "#88c0d0",
|
"primary": "#88c0d0",
|
||||||
|
"accent": "#d57780",
|
||||||
"success": "#a3be8c",
|
"success": "#a3be8c",
|
||||||
"warning": "#d08770",
|
"warning": "#d08770",
|
||||||
"error": "#bf616a",
|
"error": "#bf616a",
|
||||||
"info": "#81a1c1",
|
"info": "#81a1c1",
|
||||||
"interactive": "#88c0d0",
|
|
||||||
"diffAdd": "#81a1c1",
|
"diffAdd": "#81a1c1",
|
||||||
"diffDelete": "#bf616a"
|
"diffDelete": "#bf616a"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#1f2430",
|
|
||||||
"background-weak": "#222938",
|
|
||||||
"background-strong": "#1c202a",
|
|
||||||
"background-stronger": "#181c24",
|
|
||||||
"border-weak-base": "#343a47",
|
|
||||||
"border-weak-hover": "#383f50",
|
|
||||||
"border-weak-active": "#3d4458",
|
|
||||||
"border-weak-selected": "#434a62",
|
|
||||||
"border-weak-disabled": "#151923",
|
|
||||||
"border-weak-focus": "#3f4359",
|
|
||||||
"border-base": "#4a5163",
|
|
||||||
"border-hover": "#515870",
|
|
||||||
"border-active": "#585f7c",
|
|
||||||
"border-selected": "#606889",
|
|
||||||
"border-disabled": "#1b202a",
|
|
||||||
"border-focus": "#545b78",
|
|
||||||
"border-strong-base": "#6a7492",
|
|
||||||
"border-strong-hover": "#747e9f",
|
|
||||||
"border-strong-active": "#7e88ac",
|
|
||||||
"border-strong-selected": "#8993b9",
|
|
||||||
"border-strong-disabled": "#232836",
|
|
||||||
"border-strong-focus": "#76819f",
|
|
||||||
"surface-diff-add-base": "#1f2e33",
|
|
||||||
"surface-diff-delete-base": "#2e212a",
|
|
||||||
"surface-diff-hidden-base": "#222b3a",
|
|
||||||
"text-base": "#e5e9f0",
|
|
||||||
"text-weak": "#a4adbf",
|
|
||||||
"text-strong": "#f8fafc",
|
|
||||||
"syntax-string": "#a3be8c",
|
|
||||||
"syntax-primitive": "#d57780",
|
|
||||||
"syntax-property": "#88c0d0",
|
|
||||||
"syntax-type": "#eac196",
|
|
||||||
"syntax-constant": "#81a1c1",
|
|
||||||
"syntax-info": "#81a1c1",
|
|
||||||
"markdown-heading": "#88c0d0",
|
|
||||||
"markdown-text": "#e5e9f0",
|
|
||||||
"markdown-link": "#88c0d0",
|
|
||||||
"markdown-link-text": "#81a1c1",
|
|
||||||
"markdown-code": "#a3be8c",
|
|
||||||
"markdown-block-quote": "#d08770",
|
|
||||||
"markdown-emph": "#d08770",
|
|
||||||
"markdown-strong": "#bf616a",
|
|
||||||
"markdown-horizontal-rule": "#2f384a",
|
|
||||||
"markdown-list-item": "#88c0d0",
|
|
||||||
"markdown-list-enumeration": "#81a1c1",
|
|
||||||
"markdown-image": "#88c0d0",
|
|
||||||
"markdown-image-text": "#81a1c1",
|
|
||||||
"markdown-code-block": "#cbd3e1"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,11 @@
|
|||||||
"name": "OC-1",
|
"name": "OC-1",
|
||||||
"id": "oc-1",
|
"id": "oc-1",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#8e8b8b",
|
"neutral": "#8e8b8b",
|
||||||
|
"ink": "#656363",
|
||||||
"primary": "#dcde8d",
|
"primary": "#dcde8d",
|
||||||
|
"accent": "#fb4804",
|
||||||
"success": "#12c905",
|
"success": "#12c905",
|
||||||
"warning": "#ffdc17",
|
"warning": "#ffdc17",
|
||||||
"error": "#fc533a",
|
"error": "#fc533a",
|
||||||
@@ -13,265 +15,14 @@
|
|||||||
"interactive": "#034cff",
|
"interactive": "#034cff",
|
||||||
"diffAdd": "#9ff29a",
|
"diffAdd": "#9ff29a",
|
||||||
"diffDelete": "#fc533a"
|
"diffDelete": "#fc533a"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#f8f7f7",
|
|
||||||
"background-weak": "var(--smoke-light-3)",
|
|
||||||
"background-strong": "var(--smoke-light-1)",
|
|
||||||
"background-stronger": "#fcfcfc",
|
|
||||||
"surface-base": "var(--smoke-light-alpha-2)",
|
|
||||||
"base": "var(--smoke-light-alpha-2)",
|
|
||||||
"surface-base-hover": "#0500000f",
|
|
||||||
"surface-base-active": "var(--smoke-light-alpha-3)",
|
|
||||||
"surface-base-interactive-active": "var(--cobalt-light-alpha-3)",
|
|
||||||
"base2": "var(--smoke-light-alpha-2)",
|
|
||||||
"base3": "var(--smoke-light-alpha-2)",
|
|
||||||
"surface-inset-base": "var(--smoke-light-alpha-2)",
|
|
||||||
"surface-inset-base-hover": "var(--smoke-light-alpha-3)",
|
|
||||||
"surface-inset-strong": "#1f000017",
|
|
||||||
"surface-inset-strong-hover": "#1f000017",
|
|
||||||
"surface-raised-base": "var(--smoke-light-alpha-2)",
|
|
||||||
"surface-float-base": "var(--smoke-dark-1)",
|
|
||||||
"surface-float-base-hover": "var(--smoke-dark-2)",
|
|
||||||
"surface-raised-base-hover": "var(--smoke-light-alpha-3)",
|
|
||||||
"surface-raised-base-active": "var(--smoke-light-alpha-4)",
|
|
||||||
"surface-raised-strong": "var(--smoke-light-1)",
|
|
||||||
"surface-raised-strong-hover": "var(--white)",
|
|
||||||
"surface-raised-stronger": "var(--white)",
|
|
||||||
"surface-raised-stronger-hover": "var(--white)",
|
|
||||||
"surface-weak": "var(--smoke-light-alpha-3)",
|
|
||||||
"surface-weaker": "var(--smoke-light-alpha-4)",
|
|
||||||
"surface-strong": "#ffffff",
|
|
||||||
"surface-raised-stronger-non-alpha": "var(--white)",
|
|
||||||
"surface-brand-base": "var(--yuzu-light-9)",
|
|
||||||
"surface-brand-hover": "var(--yuzu-light-10)",
|
|
||||||
"surface-interactive-base": "var(--cobalt-light-3)",
|
|
||||||
"surface-interactive-hover": "#E5F0FF",
|
|
||||||
"surface-interactive-weak": "var(--cobalt-light-2)",
|
|
||||||
"surface-interactive-weak-hover": "var(--cobalt-light-3)",
|
|
||||||
"surface-success-base": "var(--apple-light-3)",
|
|
||||||
"surface-success-weak": "var(--apple-light-2)",
|
|
||||||
"surface-success-strong": "var(--apple-light-9)",
|
|
||||||
"surface-warning-base": "var(--solaris-light-3)",
|
|
||||||
"surface-warning-weak": "var(--solaris-light-2)",
|
|
||||||
"surface-warning-strong": "var(--solaris-light-9)",
|
|
||||||
"surface-critical-base": "var(--ember-light-3)",
|
|
||||||
"surface-critical-weak": "var(--ember-light-2)",
|
|
||||||
"surface-critical-strong": "var(--ember-light-9)",
|
|
||||||
"surface-info-base": "var(--lilac-light-3)",
|
|
||||||
"surface-info-weak": "var(--lilac-light-2)",
|
|
||||||
"surface-info-strong": "var(--lilac-light-9)",
|
|
||||||
"surface-diff-unchanged-base": "#ffffff00",
|
|
||||||
"surface-diff-skip-base": "var(--smoke-light-2)",
|
|
||||||
"surface-diff-hidden-base": "var(--blue-light-3)",
|
|
||||||
"surface-diff-hidden-weak": "var(--blue-light-2)",
|
|
||||||
"surface-diff-hidden-weaker": "var(--blue-light-1)",
|
|
||||||
"surface-diff-hidden-strong": "var(--blue-light-5)",
|
|
||||||
"surface-diff-hidden-stronger": "var(--blue-light-9)",
|
|
||||||
"surface-diff-add-base": "#dafbe0",
|
|
||||||
"surface-diff-add-weak": "var(--mint-light-2)",
|
|
||||||
"surface-diff-add-weaker": "var(--mint-light-1)",
|
|
||||||
"surface-diff-add-strong": "var(--mint-light-5)",
|
|
||||||
"surface-diff-add-stronger": "var(--mint-light-9)",
|
|
||||||
"surface-diff-delete-base": "var(--ember-light-3)",
|
|
||||||
"surface-diff-delete-weak": "var(--ember-light-2)",
|
|
||||||
"surface-diff-delete-weaker": "var(--ember-light-1)",
|
|
||||||
"surface-diff-delete-strong": "var(--ember-light-6)",
|
|
||||||
"surface-diff-delete-stronger": "var(--ember-light-9)",
|
|
||||||
"input-base": "var(--smoke-light-1)",
|
|
||||||
"input-hover": "var(--smoke-light-2)",
|
|
||||||
"input-active": "var(--cobalt-light-1)",
|
|
||||||
"input-selected": "var(--cobalt-light-4)",
|
|
||||||
"input-focus": "var(--cobalt-light-1)",
|
|
||||||
"input-disabled": "var(--smoke-light-4)",
|
|
||||||
"text-base": "var(--smoke-light-11)",
|
|
||||||
"text-weak": "var(--smoke-light-9)",
|
|
||||||
"text-weaker": "var(--smoke-light-8)",
|
|
||||||
"text-strong": "var(--smoke-light-12)",
|
|
||||||
"text-invert-base": "var(--smoke-dark-alpha-11)",
|
|
||||||
"text-invert-weak": "var(--smoke-dark-alpha-9)",
|
|
||||||
"text-invert-weaker": "var(--smoke-dark-alpha-8)",
|
|
||||||
"text-invert-strong": "var(--smoke-dark-alpha-12)",
|
|
||||||
"text-interactive-base": "var(--cobalt-light-9)",
|
|
||||||
"text-on-brand-base": "var(--smoke-light-alpha-11)",
|
|
||||||
"text-on-interactive-base": "var(--smoke-light-1)",
|
|
||||||
"text-on-interactive-weak": "var(--smoke-dark-alpha-11)",
|
|
||||||
"text-on-success-base": "var(--apple-light-10)",
|
|
||||||
"text-on-critical-base": "var(--ember-light-10)",
|
|
||||||
"text-on-critical-weak": "var(--ember-light-8)",
|
|
||||||
"text-on-critical-strong": "var(--ember-light-12)",
|
|
||||||
"text-on-warning-base": "var(--smoke-dark-alpha-11)",
|
|
||||||
"text-on-info-base": "var(--smoke-dark-alpha-11)",
|
|
||||||
"text-diff-add-base": "var(--mint-light-11)",
|
|
||||||
"text-diff-delete-base": "var(--ember-light-10)",
|
|
||||||
"text-diff-delete-strong": "var(--ember-light-12)",
|
|
||||||
"text-diff-add-strong": "var(--mint-light-12)",
|
|
||||||
"text-on-info-weak": "var(--smoke-dark-alpha-9)",
|
|
||||||
"text-on-info-strong": "var(--smoke-dark-alpha-12)",
|
|
||||||
"text-on-warning-weak": "var(--smoke-dark-alpha-9)",
|
|
||||||
"text-on-warning-strong": "var(--smoke-dark-alpha-12)",
|
|
||||||
"text-on-success-weak": "var(--apple-light-6)",
|
|
||||||
"text-on-success-strong": "var(--apple-light-12)",
|
|
||||||
"text-on-brand-weak": "var(--smoke-light-alpha-9)",
|
|
||||||
"text-on-brand-weaker": "var(--smoke-light-alpha-8)",
|
|
||||||
"text-on-brand-strong": "var(--smoke-light-alpha-12)",
|
|
||||||
"button-primary-base": "var(--smoke-light-12)",
|
|
||||||
"button-secondary-base": "#fdfcfc",
|
|
||||||
"button-secondary-hover": "#faf9f9",
|
|
||||||
"border-base": "var(--smoke-light-alpha-7)",
|
|
||||||
"border-hover": "var(--smoke-light-alpha-8)",
|
|
||||||
"border-active": "var(--smoke-light-alpha-9)",
|
|
||||||
"border-selected": "var(--cobalt-light-alpha-9)",
|
|
||||||
"border-disabled": "var(--smoke-light-alpha-8)",
|
|
||||||
"border-focus": "var(--smoke-light-alpha-9)",
|
|
||||||
"border-weak-base": "var(--smoke-light-alpha-5)",
|
|
||||||
"border-strong-base": "var(--smoke-light-alpha-7)",
|
|
||||||
"border-strong-hover": "var(--smoke-light-alpha-8)",
|
|
||||||
"border-strong-active": "var(--smoke-light-alpha-7)",
|
|
||||||
"border-strong-selected": "var(--cobalt-light-alpha-6)",
|
|
||||||
"border-strong-disabled": "var(--smoke-light-alpha-6)",
|
|
||||||
"border-strong-focus": "var(--smoke-light-alpha-7)",
|
|
||||||
"border-weak-hover": "var(--smoke-light-alpha-6)",
|
|
||||||
"border-weak-active": "var(--smoke-light-alpha-7)",
|
|
||||||
"border-weak-selected": "var(--cobalt-light-alpha-5)",
|
|
||||||
"border-weak-disabled": "var(--smoke-light-alpha-6)",
|
|
||||||
"border-weak-focus": "var(--smoke-light-alpha-7)",
|
|
||||||
"border-interactive-base": "var(--cobalt-light-7)",
|
|
||||||
"border-interactive-hover": "var(--cobalt-light-8)",
|
|
||||||
"border-interactive-active": "var(--cobalt-light-9)",
|
|
||||||
"border-interactive-selected": "var(--cobalt-light-9)",
|
|
||||||
"border-interactive-disabled": "var(--smoke-light-8)",
|
|
||||||
"border-interactive-focus": "var(--cobalt-light-9)",
|
|
||||||
"border-success-base": "var(--apple-light-6)",
|
|
||||||
"border-success-hover": "var(--apple-light-7)",
|
|
||||||
"border-success-selected": "var(--apple-light-9)",
|
|
||||||
"border-warning-base": "var(--solaris-light-6)",
|
|
||||||
"border-warning-hover": "var(--solaris-light-7)",
|
|
||||||
"border-warning-selected": "var(--solaris-light-9)",
|
|
||||||
"border-critical-base": "var(--ember-light-6)",
|
|
||||||
"border-critical-hover": "var(--ember-light-7)",
|
|
||||||
"border-critical-selected": "var(--ember-light-9)",
|
|
||||||
"border-info-base": "var(--lilac-light-6)",
|
|
||||||
"border-info-hover": "var(--lilac-light-7)",
|
|
||||||
"border-info-selected": "var(--lilac-light-9)",
|
|
||||||
"icon-base": "var(--smoke-light-9)",
|
|
||||||
"icon-hover": "var(--smoke-light-11)",
|
|
||||||
"icon-active": "var(--smoke-light-12)",
|
|
||||||
"icon-selected": "var(--smoke-light-12)",
|
|
||||||
"icon-disabled": "var(--smoke-light-8)",
|
|
||||||
"icon-focus": "var(--smoke-light-12)",
|
|
||||||
"icon-invert-base": "#ffffff",
|
|
||||||
"icon-weak-base": "var(--smoke-light-7)",
|
|
||||||
"icon-weak-hover": "var(--smoke-light-8)",
|
|
||||||
"icon-weak-active": "var(--smoke-light-9)",
|
|
||||||
"icon-weak-selected": "var(--smoke-light-10)",
|
|
||||||
"icon-weak-disabled": "var(--smoke-light-6)",
|
|
||||||
"icon-weak-focus": "var(--smoke-light-9)",
|
|
||||||
"icon-strong-base": "var(--smoke-light-12)",
|
|
||||||
"icon-strong-hover": "#151313",
|
|
||||||
"icon-strong-active": "#020202",
|
|
||||||
"icon-strong-selected": "#020202",
|
|
||||||
"icon-strong-disabled": "var(--smoke-light-8)",
|
|
||||||
"icon-strong-focus": "#020202",
|
|
||||||
"icon-brand-base": "var(--smoke-light-12)",
|
|
||||||
"icon-interactive-base": "var(--cobalt-light-9)",
|
|
||||||
"icon-success-base": "var(--apple-light-7)",
|
|
||||||
"icon-success-hover": "var(--apple-light-8)",
|
|
||||||
"icon-success-active": "var(--apple-light-11)",
|
|
||||||
"icon-warning-base": "var(--amber-light-7)",
|
|
||||||
"icon-warning-hover": "var(--amber-light-8)",
|
|
||||||
"icon-warning-active": "var(--amber-light-11)",
|
|
||||||
"icon-critical-base": "var(--ember-light-10)",
|
|
||||||
"icon-critical-hover": "var(--ember-light-11)",
|
|
||||||
"icon-critical-active": "var(--ember-light-12)",
|
|
||||||
"icon-info-base": "var(--lilac-light-7)",
|
|
||||||
"icon-info-hover": "var(--lilac-light-8)",
|
|
||||||
"icon-info-active": "var(--lilac-light-11)",
|
|
||||||
"icon-on-brand-base": "var(--smoke-light-alpha-11)",
|
|
||||||
"icon-on-brand-hover": "var(--smoke-light-alpha-12)",
|
|
||||||
"icon-on-brand-selected": "var(--smoke-light-alpha-12)",
|
|
||||||
"icon-on-interactive-base": "var(--smoke-light-1)",
|
|
||||||
"icon-agent-plan-base": "var(--purple-light-9)",
|
|
||||||
"icon-agent-docs-base": "var(--amber-light-9)",
|
|
||||||
"icon-agent-ask-base": "var(--cyan-light-9)",
|
|
||||||
"icon-agent-build-base": "var(--cobalt-light-9)",
|
|
||||||
"icon-on-success-base": "var(--apple-light-alpha-9)",
|
|
||||||
"icon-on-success-hover": "var(--apple-light-alpha-10)",
|
|
||||||
"icon-on-success-selected": "var(--apple-light-alpha-11)",
|
|
||||||
"icon-on-warning-base": "var(--amber-lightalpha-9)",
|
|
||||||
"icon-on-warning-hover": "var(--amber-lightalpha-10)",
|
|
||||||
"icon-on-warning-selected": "var(--amber-lightalpha-11)",
|
|
||||||
"icon-on-critical-base": "var(--ember-light-alpha-9)",
|
|
||||||
"icon-on-critical-hover": "var(--ember-light-alpha-10)",
|
|
||||||
"icon-on-critical-selected": "var(--ember-light-alpha-11)",
|
|
||||||
"icon-on-info-base": "var(--lilac-light-9)",
|
|
||||||
"icon-on-info-hover": "var(--lilac-light-alpha-10)",
|
|
||||||
"icon-on-info-selected": "var(--lilac-light-alpha-11)",
|
|
||||||
"icon-diff-add-base": "var(--mint-light-11)",
|
|
||||||
"icon-diff-add-hover": "var(--mint-light-12)",
|
|
||||||
"icon-diff-add-active": "var(--mint-light-12)",
|
|
||||||
"icon-diff-delete-base": "var(--ember-light-10)",
|
|
||||||
"icon-diff-delete-hover": "var(--ember-light-11)",
|
|
||||||
"syntax-comment": "var(--text-weak)",
|
|
||||||
"syntax-regexp": "var(--text-base)",
|
|
||||||
"syntax-string": "#006656",
|
|
||||||
"syntax-keyword": "var(--text-weak)",
|
|
||||||
"syntax-primitive": "#fb4804",
|
|
||||||
"syntax-operator": "var(--text-base)",
|
|
||||||
"syntax-variable": "var(--text-strong)",
|
|
||||||
"syntax-property": "#ed6dc8",
|
|
||||||
"syntax-type": "#596600",
|
|
||||||
"syntax-constant": "#007b80",
|
|
||||||
"syntax-punctuation": "var(--text-base)",
|
|
||||||
"syntax-object": "var(--text-strong)",
|
|
||||||
"syntax-success": "var(--apple-light-10)",
|
|
||||||
"syntax-warning": "var(--amber-light-10)",
|
|
||||||
"syntax-critical": "var(--ember-light-10)",
|
|
||||||
"syntax-info": "#0092a8",
|
|
||||||
"syntax-diff-add": "var(--mint-light-11)",
|
|
||||||
"syntax-diff-delete": "var(--ember-light-11)",
|
|
||||||
"syntax-diff-unknown": "#ff0000",
|
|
||||||
"markdown-heading": "#d68c27",
|
|
||||||
"markdown-text": "#1a1a1a",
|
|
||||||
"markdown-link": "#3b7dd8",
|
|
||||||
"markdown-link-text": "#318795",
|
|
||||||
"markdown-code": "#3d9a57",
|
|
||||||
"markdown-block-quote": "#b0851f",
|
|
||||||
"markdown-emph": "#b0851f",
|
|
||||||
"markdown-strong": "#d68c27",
|
|
||||||
"markdown-horizontal-rule": "#8a8a8a",
|
|
||||||
"markdown-list-item": "#3b7dd8",
|
|
||||||
"markdown-list-enumeration": "#318795",
|
|
||||||
"markdown-image": "#3b7dd8",
|
|
||||||
"markdown-image-text": "#318795",
|
|
||||||
"markdown-code-block": "#1a1a1a",
|
|
||||||
"border-color": "#ffffff",
|
|
||||||
"border-weaker-base": "var(--smoke-light-alpha-3)",
|
|
||||||
"border-weaker-hover": "var(--smoke-light-alpha-4)",
|
|
||||||
"border-weaker-active": "var(--smoke-light-alpha-6)",
|
|
||||||
"border-weaker-selected": "var(--cobalt-light-alpha-4)",
|
|
||||||
"border-weaker-disabled": "var(--smoke-light-alpha-2)",
|
|
||||||
"border-weaker-focus": "var(--smoke-light-alpha-6)",
|
|
||||||
"button-ghost-hover": "var(--smoke-light-alpha-2)",
|
|
||||||
"button-ghost-hover2": "var(--smoke-light-alpha-3)",
|
|
||||||
"avatar-background-pink": "#feeef8",
|
|
||||||
"avatar-background-mint": "#e1fbf4",
|
|
||||||
"avatar-background-orange": "#fff1e7",
|
|
||||||
"avatar-background-purple": "#f9f1fe",
|
|
||||||
"avatar-background-cyan": "#e7f9fb",
|
|
||||||
"avatar-background-lime": "#eefadc",
|
|
||||||
"avatar-text-pink": "#cd1d8d",
|
|
||||||
"avatar-text-mint": "#147d6f",
|
|
||||||
"avatar-text-orange": "#ed5f00",
|
|
||||||
"avatar-text-purple": "#8445bc",
|
|
||||||
"avatar-text-cyan": "#0894b3",
|
|
||||||
"avatar-text-lime": "#5d770d"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#716c6b",
|
"neutral": "#716c6b",
|
||||||
|
"ink": "#b7b1b1",
|
||||||
"primary": "#fab283",
|
"primary": "#fab283",
|
||||||
|
"accent": "#ffba92",
|
||||||
"success": "#12c905",
|
"success": "#12c905",
|
||||||
"warning": "#fcd53a",
|
"warning": "#fcd53a",
|
||||||
"error": "#fc533a",
|
"error": "#fc533a",
|
||||||
@@ -279,259 +30,6 @@
|
|||||||
"interactive": "#034cff",
|
"interactive": "#034cff",
|
||||||
"diffAdd": "#c8ffc4",
|
"diffAdd": "#c8ffc4",
|
||||||
"diffDelete": "#fc533a"
|
"diffDelete": "#fc533a"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "var(--smoke-dark-1)",
|
|
||||||
"background-weak": "#1c1717",
|
|
||||||
"background-strong": "#151313",
|
|
||||||
"background-stronger": "#191515",
|
|
||||||
"surface-base": "var(--smoke-dark-alpha-2)",
|
|
||||||
"base": "var(--smoke-dark-alpha-2)",
|
|
||||||
"surface-base-hover": "#e0b7b716",
|
|
||||||
"surface-base-active": "var(--smoke-dark-alpha-3)",
|
|
||||||
"surface-base-interactive-active": "var(--cobalt-dark-alpha-2)",
|
|
||||||
"base2": "var(--smoke-dark-alpha-2)",
|
|
||||||
"base3": "var(--smoke-dark-alpha-2)",
|
|
||||||
"surface-inset-base": "#0e0b0b7f",
|
|
||||||
"surface-inset-base-hover": "#0e0b0b7f",
|
|
||||||
"surface-inset-strong": "#060505cc",
|
|
||||||
"surface-inset-strong-hover": "#060505cc",
|
|
||||||
"surface-raised-base": "var(--smoke-dark-alpha-3)",
|
|
||||||
"surface-float-base": "var(--smoke-dark-1)",
|
|
||||||
"surface-float-base-hover": "var(--smoke-dark-2)",
|
|
||||||
"surface-raised-base-hover": "var(--smoke-dark-alpha-4)",
|
|
||||||
"surface-raised-base-active": "var(--smoke-dark-alpha-5)",
|
|
||||||
"surface-raised-strong": "var(--smoke-dark-alpha-4)",
|
|
||||||
"surface-raised-strong-hover": "var(--smoke-dark-alpha-6)",
|
|
||||||
"surface-raised-stronger": "var(--smoke-dark-alpha-6)",
|
|
||||||
"surface-raised-stronger-hover": "var(--smoke-dark-alpha-7)",
|
|
||||||
"surface-weak": "var(--smoke-dark-alpha-4)",
|
|
||||||
"surface-weaker": "var(--smoke-dark-alpha-5)",
|
|
||||||
"surface-strong": "var(--smoke-dark-alpha-7)",
|
|
||||||
"surface-raised-stronger-non-alpha": "var(--smoke-dark-3)",
|
|
||||||
"surface-brand-base": "var(--yuzu-light-9)",
|
|
||||||
"surface-brand-hover": "var(--yuzu-light-10)",
|
|
||||||
"surface-interactive-base": "var(--cobalt-dark-3)",
|
|
||||||
"surface-interactive-hover": "#0A1D4D",
|
|
||||||
"surface-interactive-weak": "var(--cobalt-dark-2)",
|
|
||||||
"surface-interactive-weak-hover": "var(--cobalt-light-3)",
|
|
||||||
"surface-success-base": "var(--apple-dark-3)",
|
|
||||||
"surface-success-weak": "var(--apple-dark-2)",
|
|
||||||
"surface-success-strong": "var(--apple-dark-9)",
|
|
||||||
"surface-warning-base": "var(--solaris-light-3)",
|
|
||||||
"surface-warning-weak": "var(--solaris-light-2)",
|
|
||||||
"surface-warning-strong": "var(--solaris-light-9)",
|
|
||||||
"surface-critical-base": "var(--ember-dark-3)",
|
|
||||||
"surface-critical-weak": "var(--ember-dark-2)",
|
|
||||||
"surface-critical-strong": "var(--ember-dark-9)",
|
|
||||||
"surface-info-base": "var(--lilac-light-3)",
|
|
||||||
"surface-info-weak": "var(--lilac-light-2)",
|
|
||||||
"surface-info-strong": "var(--lilac-light-9)",
|
|
||||||
"surface-diff-unchanged-base": "var(--smoke-dark-1)",
|
|
||||||
"surface-diff-skip-base": "var(--smoke-dark-alpha-1)",
|
|
||||||
"surface-diff-hidden-base": "var(--blue-dark-2)",
|
|
||||||
"surface-diff-hidden-weak": "var(--blue-dark-1)",
|
|
||||||
"surface-diff-hidden-weaker": "var(--blue-dark-3)",
|
|
||||||
"surface-diff-hidden-strong": "var(--blue-dark-5)",
|
|
||||||
"surface-diff-hidden-stronger": "var(--blue-dark-11)",
|
|
||||||
"surface-diff-add-base": "var(--mint-dark-3)",
|
|
||||||
"surface-diff-add-weak": "var(--mint-dark-4)",
|
|
||||||
"surface-diff-add-weaker": "var(--mint-dark-3)",
|
|
||||||
"surface-diff-add-strong": "var(--mint-dark-5)",
|
|
||||||
"surface-diff-add-stronger": "var(--mint-dark-11)",
|
|
||||||
"surface-diff-delete-base": "var(--ember-dark-3)",
|
|
||||||
"surface-diff-delete-weak": "var(--ember-dark-4)",
|
|
||||||
"surface-diff-delete-weaker": "var(--ember-dark-3)",
|
|
||||||
"surface-diff-delete-strong": "var(--ember-dark-5)",
|
|
||||||
"surface-diff-delete-stronger": "var(--ember-dark-11)",
|
|
||||||
"input-base": "var(--smoke-dark-2)",
|
|
||||||
"input-hover": "var(--smoke-dark-2)",
|
|
||||||
"input-active": "var(--cobalt-dark-1)",
|
|
||||||
"input-selected": "var(--cobalt-dark-2)",
|
|
||||||
"input-focus": "var(--cobalt-dark-1)",
|
|
||||||
"input-disabled": "var(--smoke-dark-4)",
|
|
||||||
"text-base": "var(--smoke-dark-alpha-11)",
|
|
||||||
"text-weak": "var(--smoke-dark-alpha-9)",
|
|
||||||
"text-weaker": "var(--smoke-dark-alpha-8)",
|
|
||||||
"text-strong": "var(--smoke-dark-alpha-12)",
|
|
||||||
"text-invert-base": "var(--smoke-dark-alpha-11)",
|
|
||||||
"text-invert-weak": "var(--smoke-dark-alpha-9)",
|
|
||||||
"text-invert-weaker": "var(--smoke-dark-alpha-8)",
|
|
||||||
"text-invert-strong": "var(--smoke-dark-alpha-12)",
|
|
||||||
"text-interactive-base": "var(--cobalt-dark-11)",
|
|
||||||
"text-on-brand-base": "var(--smoke-dark-alpha-11)",
|
|
||||||
"text-on-interactive-base": "var(--smoke-dark-12)",
|
|
||||||
"text-on-interactive-weak": "var(--smoke-dark-alpha-11)",
|
|
||||||
"text-on-success-base": "var(--apple-dark-9)",
|
|
||||||
"text-on-critical-base": "var(--ember-dark-9)",
|
|
||||||
"text-on-critical-weak": "var(--ember-dark-8)",
|
|
||||||
"text-on-critical-strong": "var(--ember-dark-12)",
|
|
||||||
"text-on-warning-base": "var(--smoke-dark-alpha-11)",
|
|
||||||
"text-on-info-base": "var(--smoke-dark-alpha-11)",
|
|
||||||
"text-diff-add-base": "var(--mint-dark-11)",
|
|
||||||
"text-diff-delete-base": "var(--ember-dark-9)",
|
|
||||||
"text-diff-delete-strong": "var(--ember-dark-12)",
|
|
||||||
"text-diff-add-strong": "var(--mint-dark-8)",
|
|
||||||
"text-on-info-weak": "var(--smoke-dark-alpha-9)",
|
|
||||||
"text-on-info-strong": "var(--smoke-dark-alpha-12)",
|
|
||||||
"text-on-warning-weak": "var(--smoke-dark-alpha-9)",
|
|
||||||
"text-on-warning-strong": "var(--smoke-dark-alpha-12)",
|
|
||||||
"text-on-success-weak": "var(--apple-dark-8)",
|
|
||||||
"text-on-success-strong": "var(--apple-dark-12)",
|
|
||||||
"text-on-brand-weak": "var(--smoke-dark-alpha-9)",
|
|
||||||
"text-on-brand-weaker": "var(--smoke-dark-alpha-8)",
|
|
||||||
"text-on-brand-strong": "var(--smoke-dark-alpha-12)",
|
|
||||||
"button-primary-base": "var(--smoke-dark-12)",
|
|
||||||
"button-secondary-base": "#231f1f",
|
|
||||||
"button-secondary-hover": "#2a2727",
|
|
||||||
"border-base": "var(--smoke-dark-alpha-7)",
|
|
||||||
"border-hover": "var(--smoke-dark-alpha-8)",
|
|
||||||
"border-active": "var(--smoke-dark-alpha-9)",
|
|
||||||
"border-selected": "var(--cobalt-dark-alpha-11)",
|
|
||||||
"border-disabled": "var(--smoke-dark-alpha-8)",
|
|
||||||
"border-focus": "var(--smoke-dark-alpha-9)",
|
|
||||||
"border-weak-base": "var(--smoke-dark-alpha-6)",
|
|
||||||
"border-strong-base": "var(--smoke-dark-alpha-8)",
|
|
||||||
"border-strong-hover": "var(--smoke-dark-alpha-7)",
|
|
||||||
"border-strong-active": "var(--smoke-dark-alpha-8)",
|
|
||||||
"border-strong-selected": "var(--cobalt-dark-alpha-6)",
|
|
||||||
"border-strong-disabled": "var(--smoke-dark-alpha-6)",
|
|
||||||
"border-strong-focus": "var(--smoke-dark-alpha-8)",
|
|
||||||
"border-weak-hover": "var(--smoke-dark-alpha-7)",
|
|
||||||
"border-weak-active": "var(--smoke-dark-alpha-8)",
|
|
||||||
"border-weak-selected": "var(--cobalt-dark-alpha-6)",
|
|
||||||
"border-weak-disabled": "var(--smoke-dark-alpha-6)",
|
|
||||||
"border-weak-focus": "var(--smoke-dark-alpha-8)",
|
|
||||||
"border-interactive-base": "var(--cobalt-light-7)",
|
|
||||||
"border-interactive-hover": "var(--cobalt-light-8)",
|
|
||||||
"border-interactive-active": "var(--cobalt-light-9)",
|
|
||||||
"border-interactive-selected": "var(--cobalt-light-9)",
|
|
||||||
"border-interactive-disabled": "var(--smoke-light-8)",
|
|
||||||
"border-interactive-focus": "var(--cobalt-light-9)",
|
|
||||||
"border-success-base": "var(--apple-light-6)",
|
|
||||||
"border-success-hover": "var(--apple-light-7)",
|
|
||||||
"border-success-selected": "var(--apple-light-9)",
|
|
||||||
"border-warning-base": "var(--solaris-light-6)",
|
|
||||||
"border-warning-hover": "var(--solaris-light-7)",
|
|
||||||
"border-warning-selected": "var(--solaris-light-9)",
|
|
||||||
"border-critical-base": "var(--ember-dark-5)",
|
|
||||||
"border-critical-hover": "var(--ember-dark-7)",
|
|
||||||
"border-critical-selected": "var(--ember-dark-9)",
|
|
||||||
"border-info-base": "var(--lilac-light-6)",
|
|
||||||
"border-info-hover": "var(--lilac-light-7)",
|
|
||||||
"border-info-selected": "var(--lilac-light-9)",
|
|
||||||
"icon-base": "var(--smoke-dark-9)",
|
|
||||||
"icon-hover": "var(--smoke-dark-10)",
|
|
||||||
"icon-active": "var(--smoke-dark-11)",
|
|
||||||
"icon-selected": "var(--smoke-dark-12)",
|
|
||||||
"icon-disabled": "var(--smoke-dark-7)",
|
|
||||||
"icon-focus": "var(--smoke-dark-12)",
|
|
||||||
"icon-invert-base": "var(--smoke-dark-1)",
|
|
||||||
"icon-weak-base": "var(--smoke-dark-6)",
|
|
||||||
"icon-weak-hover": "var(--smoke-light-7)",
|
|
||||||
"icon-weak-active": "var(--smoke-light-8)",
|
|
||||||
"icon-weak-selected": "var(--smoke-light-9)",
|
|
||||||
"icon-weak-disabled": "var(--smoke-light-4)",
|
|
||||||
"icon-weak-focus": "var(--smoke-light-9)",
|
|
||||||
"icon-strong-base": "var(--smoke-dark-12)",
|
|
||||||
"icon-strong-hover": "#f6f3f3",
|
|
||||||
"icon-strong-active": "#fcfcfc",
|
|
||||||
"icon-strong-selected": "#fdfcfc",
|
|
||||||
"icon-strong-disabled": "var(--smoke-dark-8)",
|
|
||||||
"icon-strong-focus": "#fdfcfc",
|
|
||||||
"icon-brand-base": "var(--white)",
|
|
||||||
"icon-interactive-base": "var(--cobalt-dark-11)",
|
|
||||||
"icon-success-base": "var(--apple-dark-9)",
|
|
||||||
"icon-success-hover": "var(--apple-dark-10)",
|
|
||||||
"icon-success-active": "var(--apple-dark-11)",
|
|
||||||
"icon-warning-base": "var(--amber-dark-9)",
|
|
||||||
"icon-warning-hover": "var(--amber-dark-8)",
|
|
||||||
"icon-warning-active": "var(--amber-dark-11)",
|
|
||||||
"icon-critical-base": "var(--ember-dark-9)",
|
|
||||||
"icon-critical-hover": "var(--ember-dark-11)",
|
|
||||||
"icon-critical-active": "var(--ember-dark-12)",
|
|
||||||
"icon-info-base": "var(--lilac-dark-7)",
|
|
||||||
"icon-info-hover": "var(--lilac-dark-8)",
|
|
||||||
"icon-info-active": "var(--lilac-dark-11)",
|
|
||||||
"icon-on-brand-base": "var(--smoke-light-alpha-11)",
|
|
||||||
"icon-on-brand-hover": "var(--smoke-light-alpha-12)",
|
|
||||||
"icon-on-brand-selected": "var(--smoke-light-alpha-12)",
|
|
||||||
"icon-on-interactive-base": "var(--smoke-dark-12)",
|
|
||||||
"icon-agent-plan-base": "var(--purple-dark-9)",
|
|
||||||
"icon-agent-docs-base": "var(--amber-dark-9)",
|
|
||||||
"icon-agent-ask-base": "var(--cyan-dark-9)",
|
|
||||||
"icon-agent-build-base": "var(--cobalt-dark-11)",
|
|
||||||
"icon-on-success-base": "var(--apple-dark-alpha-9)",
|
|
||||||
"icon-on-success-hover": "var(--apple-dark-alpha-10)",
|
|
||||||
"icon-on-success-selected": "var(--apple-dark-alpha-11)",
|
|
||||||
"icon-on-warning-base": "var(--amber-darkalpha-9)",
|
|
||||||
"icon-on-warning-hover": "var(--amber-darkalpha-10)",
|
|
||||||
"icon-on-warning-selected": "var(--amber-darkalpha-11)",
|
|
||||||
"icon-on-critical-base": "var(--ember-dark-alpha-9)",
|
|
||||||
"icon-on-critical-hover": "var(--ember-dark-alpha-10)",
|
|
||||||
"icon-on-critical-selected": "var(--ember-dark-alpha-11)",
|
|
||||||
"icon-on-info-base": "var(--lilac-dark-9)",
|
|
||||||
"icon-on-info-hover": "var(--lilac-dark-alpha-10)",
|
|
||||||
"icon-on-info-selected": "var(--lilac-dark-alpha-11)",
|
|
||||||
"icon-diff-add-base": "var(--mint-dark-11)",
|
|
||||||
"icon-diff-add-hover": "var(--mint-dark-10)",
|
|
||||||
"icon-diff-add-active": "var(--mint-dark-11)",
|
|
||||||
"icon-diff-delete-base": "var(--ember-dark-9)",
|
|
||||||
"icon-diff-delete-hover": "var(--ember-dark-10)",
|
|
||||||
"syntax-comment": "var(--text-weak)",
|
|
||||||
"syntax-regexp": "var(--text-base)",
|
|
||||||
"syntax-string": "#00ceb9",
|
|
||||||
"syntax-keyword": "var(--text-weak)",
|
|
||||||
"syntax-primitive": "#ffba92",
|
|
||||||
"syntax-operator": "var(--text-weak)",
|
|
||||||
"syntax-variable": "var(--text-strong)",
|
|
||||||
"syntax-property": "#ff9ae2",
|
|
||||||
"syntax-type": "#ecf58c",
|
|
||||||
"syntax-constant": "#93e9f6",
|
|
||||||
"syntax-punctuation": "var(--text-weak)",
|
|
||||||
"syntax-object": "var(--text-strong)",
|
|
||||||
"syntax-success": "var(--apple-dark-10)",
|
|
||||||
"syntax-warning": "var(--amber-dark-10)",
|
|
||||||
"syntax-critical": "var(--ember-dark-10)",
|
|
||||||
"syntax-info": "#93e9f6",
|
|
||||||
"syntax-diff-add": "var(--mint-dark-11)",
|
|
||||||
"syntax-diff-delete": "var(--ember-dark-11)",
|
|
||||||
"syntax-diff-unknown": "#ff0000",
|
|
||||||
"markdown-heading": "#9d7cd8",
|
|
||||||
"markdown-text": "#eeeeee",
|
|
||||||
"markdown-link": "#fab283",
|
|
||||||
"markdown-link-text": "#56b6c2",
|
|
||||||
"markdown-code": "#7fd88f",
|
|
||||||
"markdown-block-quote": "#e5c07b",
|
|
||||||
"markdown-emph": "#e5c07b",
|
|
||||||
"markdown-strong": "#f5a742",
|
|
||||||
"markdown-horizontal-rule": "#808080",
|
|
||||||
"markdown-list-item": "#fab283",
|
|
||||||
"markdown-list-enumeration": "#56b6c2",
|
|
||||||
"markdown-image": "#fab283",
|
|
||||||
"markdown-image-text": "#56b6c2",
|
|
||||||
"markdown-code-block": "#eeeeee",
|
|
||||||
"border-color": "#ffffff",
|
|
||||||
"border-weaker-base": "var(--smoke-dark-alpha-3)",
|
|
||||||
"border-weaker-hover": "var(--smoke-dark-alpha-4)",
|
|
||||||
"border-weaker-active": "var(--smoke-dark-alpha-6)",
|
|
||||||
"border-weaker-selected": "var(--cobalt-dark-alpha-3)",
|
|
||||||
"border-weaker-disabled": "var(--smoke-dark-alpha-2)",
|
|
||||||
"border-weaker-focus": "var(--smoke-dark-alpha-6)",
|
|
||||||
"button-ghost-hover": "var(--smoke-dark-alpha-2)",
|
|
||||||
"button-ghost-hover2": "var(--smoke-dark-alpha-3)",
|
|
||||||
"avatar-background-pink": "#501b3f",
|
|
||||||
"avatar-background-mint": "#033a34",
|
|
||||||
"avatar-background-orange": "#5f2a06",
|
|
||||||
"avatar-background-purple": "#432155",
|
|
||||||
"avatar-background-cyan": "#0f3058",
|
|
||||||
"avatar-background-lime": "#2b3711",
|
|
||||||
"avatar-text-pink": "#e34ba9",
|
|
||||||
"avatar-text-mint": "#95f3d9",
|
|
||||||
"avatar-text-orange": "#ff802b",
|
|
||||||
"avatar-text-purple": "#9d5bd2",
|
|
||||||
"avatar-text-cyan": "#369eff",
|
|
||||||
"avatar-text-lime": "#c4f042"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,9 +3,10 @@
|
|||||||
"name": "OC-2",
|
"name": "OC-2",
|
||||||
"id": "oc-2",
|
"id": "oc-2",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#8e8b8b",
|
"neutral": "#8e8b8b",
|
||||||
"primary": "#dcde8d",
|
"primary": "#dcde8d",
|
||||||
|
"accent": "#ed6dc8",
|
||||||
"success": "#12c905",
|
"success": "#12c905",
|
||||||
"warning": "#ffdc17",
|
"warning": "#ffdc17",
|
||||||
"error": "#fc533a",
|
"error": "#fc533a",
|
||||||
@@ -13,265 +14,13 @@
|
|||||||
"interactive": "#034cff",
|
"interactive": "#034cff",
|
||||||
"diffAdd": "#9ff29a",
|
"diffAdd": "#9ff29a",
|
||||||
"diffDelete": "#fc533a"
|
"diffDelete": "#fc533a"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#f8f7f7",
|
|
||||||
"background-weak": "var(--gray-light-3)",
|
|
||||||
"background-strong": "var(--gray-light-1)",
|
|
||||||
"background-stronger": "#fcfcfc",
|
|
||||||
"surface-base": "var(--gray-light-alpha-2)",
|
|
||||||
"base": "var(--gray-light-alpha-2)",
|
|
||||||
"surface-base-hover": "#0500000f",
|
|
||||||
"surface-base-active": "var(--gray-light-alpha-3)",
|
|
||||||
"surface-base-interactive-active": "var(--cobalt-light-alpha-3)",
|
|
||||||
"base2": "var(--gray-light-alpha-2)",
|
|
||||||
"base3": "var(--gray-light-alpha-2)",
|
|
||||||
"surface-inset-base": "var(--gray-light-alpha-2)",
|
|
||||||
"surface-inset-base-hover": "var(--gray-light-alpha-3)",
|
|
||||||
"surface-inset-strong": "#1f000017",
|
|
||||||
"surface-inset-strong-hover": "#1f000017",
|
|
||||||
"surface-raised-base": "var(--gray-light-alpha-2)",
|
|
||||||
"surface-float-base": "var(--gray-dark-1)",
|
|
||||||
"surface-float-base-hover": "var(--gray-dark-2)",
|
|
||||||
"surface-raised-base-hover": "var(--gray-light-alpha-3)",
|
|
||||||
"surface-raised-base-active": "var(--gray-light-alpha-5)",
|
|
||||||
"surface-raised-strong": "var(--gray-light-1)",
|
|
||||||
"surface-raised-strong-hover": "var(--white)",
|
|
||||||
"surface-raised-stronger": "var(--white)",
|
|
||||||
"surface-raised-stronger-hover": "var(--white)",
|
|
||||||
"surface-weak": "var(--gray-light-alpha-3)",
|
|
||||||
"surface-weaker": "var(--gray-light-alpha-4)",
|
|
||||||
"surface-strong": "#ffffff",
|
|
||||||
"surface-raised-stronger-non-alpha": "var(--white)",
|
|
||||||
"surface-brand-base": "var(--yuzu-light-9)",
|
|
||||||
"surface-brand-hover": "var(--yuzu-light-10)",
|
|
||||||
"surface-interactive-base": "var(--cobalt-light-3)",
|
|
||||||
"surface-interactive-hover": "#E5F0FF",
|
|
||||||
"surface-interactive-weak": "var(--cobalt-light-2)",
|
|
||||||
"surface-interactive-weak-hover": "var(--cobalt-light-3)",
|
|
||||||
"surface-success-base": "var(--apple-light-3)",
|
|
||||||
"surface-success-weak": "var(--apple-light-2)",
|
|
||||||
"surface-success-strong": "var(--apple-light-9)",
|
|
||||||
"surface-warning-base": "var(--solaris-light-3)",
|
|
||||||
"surface-warning-weak": "var(--solaris-light-2)",
|
|
||||||
"surface-warning-strong": "var(--solaris-light-9)",
|
|
||||||
"surface-critical-base": "var(--ember-light-3)",
|
|
||||||
"surface-critical-weak": "var(--ember-light-2)",
|
|
||||||
"surface-critical-strong": "var(--ember-light-9)",
|
|
||||||
"surface-info-base": "var(--lilac-light-3)",
|
|
||||||
"surface-info-weak": "var(--lilac-light-2)",
|
|
||||||
"surface-info-strong": "var(--lilac-light-9)",
|
|
||||||
"surface-diff-unchanged-base": "#ffffff00",
|
|
||||||
"surface-diff-skip-base": "var(--gray-light-2)",
|
|
||||||
"surface-diff-hidden-base": "var(--blue-light-3)",
|
|
||||||
"surface-diff-hidden-weak": "var(--blue-light-2)",
|
|
||||||
"surface-diff-hidden-weaker": "var(--blue-light-1)",
|
|
||||||
"surface-diff-hidden-strong": "var(--blue-light-5)",
|
|
||||||
"surface-diff-hidden-stronger": "var(--blue-light-9)",
|
|
||||||
"surface-diff-add-base": "#dafbe0",
|
|
||||||
"surface-diff-add-weak": "var(--mint-light-2)",
|
|
||||||
"surface-diff-add-weaker": "var(--mint-light-1)",
|
|
||||||
"surface-diff-add-strong": "var(--mint-light-5)",
|
|
||||||
"surface-diff-add-stronger": "var(--mint-light-9)",
|
|
||||||
"surface-diff-delete-base": "var(--ember-light-3)",
|
|
||||||
"surface-diff-delete-weak": "var(--ember-light-2)",
|
|
||||||
"surface-diff-delete-weaker": "var(--ember-light-1)",
|
|
||||||
"surface-diff-delete-strong": "var(--ember-light-6)",
|
|
||||||
"surface-diff-delete-stronger": "var(--ember-light-9)",
|
|
||||||
"input-base": "var(--gray-light-1)",
|
|
||||||
"input-hover": "var(--gray-light-2)",
|
|
||||||
"input-active": "var(--cobalt-light-1)",
|
|
||||||
"input-selected": "var(--cobalt-light-4)",
|
|
||||||
"input-focus": "var(--cobalt-light-1)",
|
|
||||||
"input-disabled": "var(--gray-light-4)",
|
|
||||||
"text-base": "var(--gray-light-11)",
|
|
||||||
"text-weak": "var(--gray-light-9)",
|
|
||||||
"text-weaker": "var(--gray-light-8)",
|
|
||||||
"text-strong": "var(--gray-light-12)",
|
|
||||||
"text-invert-base": "var(--gray-dark-alpha-11)",
|
|
||||||
"text-invert-weak": "var(--gray-dark-alpha-9)",
|
|
||||||
"text-invert-weaker": "var(--gray-dark-alpha-8)",
|
|
||||||
"text-invert-strong": "var(--gray-dark-alpha-12)",
|
|
||||||
"text-interactive-base": "var(--cobalt-light-9)",
|
|
||||||
"text-on-brand-base": "var(--gray-light-alpha-11)",
|
|
||||||
"text-on-interactive-base": "var(--gray-light-1)",
|
|
||||||
"text-on-interactive-weak": "var(--gray-dark-alpha-11)",
|
|
||||||
"text-on-success-base": "var(--apple-light-10)",
|
|
||||||
"text-on-critical-base": "var(--ember-light-10)",
|
|
||||||
"text-on-critical-weak": "var(--ember-light-8)",
|
|
||||||
"text-on-critical-strong": "var(--ember-light-12)",
|
|
||||||
"text-on-warning-base": "var(--gray-dark-alpha-11)",
|
|
||||||
"text-on-info-base": "var(--gray-dark-alpha-11)",
|
|
||||||
"text-diff-add-base": "var(--mint-light-11)",
|
|
||||||
"text-diff-delete-base": "var(--ember-light-10)",
|
|
||||||
"text-diff-delete-strong": "var(--ember-light-12)",
|
|
||||||
"text-diff-add-strong": "var(--mint-light-12)",
|
|
||||||
"text-on-info-weak": "var(--gray-dark-alpha-9)",
|
|
||||||
"text-on-info-strong": "var(--gray-dark-alpha-12)",
|
|
||||||
"text-on-warning-weak": "var(--gray-dark-alpha-9)",
|
|
||||||
"text-on-warning-strong": "var(--gray-dark-alpha-12)",
|
|
||||||
"text-on-success-weak": "var(--apple-light-6)",
|
|
||||||
"text-on-success-strong": "var(--apple-light-12)",
|
|
||||||
"text-on-brand-weak": "var(--gray-light-alpha-9)",
|
|
||||||
"text-on-brand-weaker": "var(--gray-light-alpha-8)",
|
|
||||||
"text-on-brand-strong": "var(--gray-light-alpha-12)",
|
|
||||||
"button-primary-base": "var(--gray-light-12)",
|
|
||||||
"button-secondary-base": "var(--gray-light-1)",
|
|
||||||
"button-secondary-hover": "FFFFFF0A",
|
|
||||||
"border-base": "var(--gray-light-alpha-7)",
|
|
||||||
"border-hover": "var(--gray-light-alpha-8)",
|
|
||||||
"border-active": "var(--gray-light-alpha-9)",
|
|
||||||
"border-selected": "var(--cobalt-light-alpha-9)",
|
|
||||||
"border-disabled": "var(--gray-light-alpha-8)",
|
|
||||||
"border-focus": "var(--gray-light-alpha-9)",
|
|
||||||
"border-weak-base": "var(--gray-light-alpha-5)",
|
|
||||||
"border-strong-base": "var(--gray-light-alpha-7)",
|
|
||||||
"border-strong-hover": "var(--gray-light-alpha-8)",
|
|
||||||
"border-strong-active": "var(--gray-light-alpha-7)",
|
|
||||||
"border-strong-selected": "var(--cobalt-light-alpha-6)",
|
|
||||||
"border-strong-disabled": "var(--gray-light-alpha-6)",
|
|
||||||
"border-strong-focus": "var(--gray-light-alpha-7)",
|
|
||||||
"border-weak-hover": "var(--gray-light-alpha-6)",
|
|
||||||
"border-weak-active": "var(--gray-light-alpha-7)",
|
|
||||||
"border-weak-selected": "var(--cobalt-light-alpha-5)",
|
|
||||||
"border-weak-disabled": "var(--gray-light-alpha-6)",
|
|
||||||
"border-weak-focus": "var(--gray-light-alpha-7)",
|
|
||||||
"border-interactive-base": "var(--cobalt-light-7)",
|
|
||||||
"border-interactive-hover": "var(--cobalt-light-8)",
|
|
||||||
"border-interactive-active": "var(--cobalt-light-9)",
|
|
||||||
"border-interactive-selected": "var(--cobalt-light-9)",
|
|
||||||
"border-interactive-disabled": "var(--gray-light-8)",
|
|
||||||
"border-interactive-focus": "var(--cobalt-light-9)",
|
|
||||||
"border-success-base": "var(--apple-light-6)",
|
|
||||||
"border-success-hover": "var(--apple-light-7)",
|
|
||||||
"border-success-selected": "var(--apple-light-9)",
|
|
||||||
"border-warning-base": "var(--solaris-light-6)",
|
|
||||||
"border-warning-hover": "var(--solaris-light-7)",
|
|
||||||
"border-warning-selected": "var(--solaris-light-9)",
|
|
||||||
"border-critical-base": "var(--ember-light-6)",
|
|
||||||
"border-critical-hover": "var(--ember-light-7)",
|
|
||||||
"border-critical-selected": "var(--ember-light-9)",
|
|
||||||
"border-info-base": "var(--lilac-light-6)",
|
|
||||||
"border-info-hover": "var(--lilac-light-7)",
|
|
||||||
"border-info-selected": "var(--lilac-light-9)",
|
|
||||||
"icon-base": "var(--gray-light-9)",
|
|
||||||
"icon-hover": "var(--gray-light-11)",
|
|
||||||
"icon-active": "var(--gray-light-12)",
|
|
||||||
"icon-selected": "var(--gray-light-12)",
|
|
||||||
"icon-disabled": "var(--gray-light-8)",
|
|
||||||
"icon-focus": "var(--gray-light-12)",
|
|
||||||
"icon-invert-base": "#ffffff",
|
|
||||||
"icon-weak-base": "var(--gray-light-7)",
|
|
||||||
"icon-weak-hover": "var(--gray-light-8)",
|
|
||||||
"icon-weak-active": "var(--gray-light-9)",
|
|
||||||
"icon-weak-selected": "var(--gray-light-10)",
|
|
||||||
"icon-weak-disabled": "var(--gray-light-6)",
|
|
||||||
"icon-weak-focus": "var(--gray-light-9)",
|
|
||||||
"icon-strong-base": "var(--gray-light-12)",
|
|
||||||
"icon-strong-hover": "#151313",
|
|
||||||
"icon-strong-active": "#020202",
|
|
||||||
"icon-strong-selected": "#020202",
|
|
||||||
"icon-strong-disabled": "var(--gray-light-6)",
|
|
||||||
"icon-strong-focus": "#020202",
|
|
||||||
"icon-brand-base": "var(--gray-light-12)",
|
|
||||||
"icon-interactive-base": "var(--cobalt-light-9)",
|
|
||||||
"icon-success-base": "var(--apple-light-7)",
|
|
||||||
"icon-success-hover": "var(--apple-light-8)",
|
|
||||||
"icon-success-active": "var(--apple-light-11)",
|
|
||||||
"icon-warning-base": "var(--amber-light-7)",
|
|
||||||
"icon-warning-hover": "var(--amber-light-8)",
|
|
||||||
"icon-warning-active": "var(--amber-light-11)",
|
|
||||||
"icon-critical-base": "var(--ember-light-10)",
|
|
||||||
"icon-critical-hover": "var(--ember-light-11)",
|
|
||||||
"icon-critical-active": "var(--ember-light-12)",
|
|
||||||
"icon-info-base": "var(--lilac-light-7)",
|
|
||||||
"icon-info-hover": "var(--lilac-light-8)",
|
|
||||||
"icon-info-active": "var(--lilac-light-11)",
|
|
||||||
"icon-on-brand-base": "var(--gray-light-alpha-11)",
|
|
||||||
"icon-on-brand-hover": "var(--gray-light-alpha-12)",
|
|
||||||
"icon-on-brand-selected": "var(--gray-light-alpha-12)",
|
|
||||||
"icon-on-interactive-base": "var(--gray-light-1)",
|
|
||||||
"icon-agent-plan-base": "var(--purple-light-9)",
|
|
||||||
"icon-agent-docs-base": "var(--amber-light-9)",
|
|
||||||
"icon-agent-ask-base": "var(--cyan-light-9)",
|
|
||||||
"icon-agent-build-base": "var(--cobalt-light-9)",
|
|
||||||
"icon-on-success-base": "var(--apple-light-alpha-9)",
|
|
||||||
"icon-on-success-hover": "var(--apple-light-alpha-10)",
|
|
||||||
"icon-on-success-selected": "var(--apple-light-alpha-11)",
|
|
||||||
"icon-on-warning-base": "var(--amber-lightalpha-9)",
|
|
||||||
"icon-on-warning-hover": "var(--amber-lightalpha-10)",
|
|
||||||
"icon-on-warning-selected": "var(--amber-lightalpha-11)",
|
|
||||||
"icon-on-critical-base": "var(--ember-light-alpha-9)",
|
|
||||||
"icon-on-critical-hover": "var(--ember-light-alpha-10)",
|
|
||||||
"icon-on-critical-selected": "var(--ember-light-alpha-11)",
|
|
||||||
"icon-on-info-base": "var(--lilac-light-9)",
|
|
||||||
"icon-on-info-hover": "var(--lilac-light-alpha-10)",
|
|
||||||
"icon-on-info-selected": "var(--lilac-light-alpha-11)",
|
|
||||||
"icon-diff-add-base": "var(--mint-light-11)",
|
|
||||||
"icon-diff-add-hover": "var(--mint-light-12)",
|
|
||||||
"icon-diff-add-active": "var(--mint-light-12)",
|
|
||||||
"icon-diff-delete-base": "var(--ember-light-10)",
|
|
||||||
"icon-diff-delete-hover": "var(--ember-light-11)",
|
|
||||||
"syntax-comment": "var(--text-weak)",
|
|
||||||
"syntax-regexp": "var(--text-base)",
|
|
||||||
"syntax-string": "#006656",
|
|
||||||
"syntax-keyword": "var(--text-weak)",
|
|
||||||
"syntax-primitive": "#fb4804",
|
|
||||||
"syntax-operator": "var(--text-base)",
|
|
||||||
"syntax-variable": "var(--text-strong)",
|
|
||||||
"syntax-property": "#ed6dc8",
|
|
||||||
"syntax-type": "#596600",
|
|
||||||
"syntax-constant": "#007b80",
|
|
||||||
"syntax-punctuation": "var(--text-base)",
|
|
||||||
"syntax-object": "var(--text-strong)",
|
|
||||||
"syntax-success": "var(--apple-light-10)",
|
|
||||||
"syntax-warning": "var(--amber-light-10)",
|
|
||||||
"syntax-critical": "var(--ember-light-10)",
|
|
||||||
"syntax-info": "#0092a8",
|
|
||||||
"syntax-diff-add": "var(--mint-light-11)",
|
|
||||||
"syntax-diff-delete": "var(--ember-light-11)",
|
|
||||||
"syntax-diff-unknown": "#ff0000",
|
|
||||||
"markdown-heading": "#d68c27",
|
|
||||||
"markdown-text": "#1a1a1a",
|
|
||||||
"markdown-link": "#3b7dd8",
|
|
||||||
"markdown-link-text": "#318795",
|
|
||||||
"markdown-code": "#3d9a57",
|
|
||||||
"markdown-block-quote": "#b0851f",
|
|
||||||
"markdown-emph": "#b0851f",
|
|
||||||
"markdown-strong": "#d68c27",
|
|
||||||
"markdown-horizontal-rule": "#8a8a8a",
|
|
||||||
"markdown-list-item": "#3b7dd8",
|
|
||||||
"markdown-list-enumeration": "#318795",
|
|
||||||
"markdown-image": "#3b7dd8",
|
|
||||||
"markdown-image-text": "#318795",
|
|
||||||
"markdown-code-block": "#1a1a1a",
|
|
||||||
"border-color": "#ffffff",
|
|
||||||
"border-weaker-base": "var(--gray-light-alpha-3)",
|
|
||||||
"border-weaker-hover": "var(--gray-light-alpha-4)",
|
|
||||||
"border-weaker-active": "var(--gray-light-alpha-6)",
|
|
||||||
"border-weaker-selected": "var(--cobalt-light-alpha-4)",
|
|
||||||
"border-weaker-disabled": "var(--gray-light-alpha-2)",
|
|
||||||
"border-weaker-focus": "var(--gray-light-alpha-6)",
|
|
||||||
"button-ghost-hover": "var(--gray-light-alpha-2)",
|
|
||||||
"button-ghost-hover2": "var(--gray-light-alpha-3)",
|
|
||||||
"avatar-background-pink": "#feeef8",
|
|
||||||
"avatar-background-mint": "#e1fbf4",
|
|
||||||
"avatar-background-orange": "#fff1e7",
|
|
||||||
"avatar-background-purple": "#f9f1fe",
|
|
||||||
"avatar-background-cyan": "#e7f9fb",
|
|
||||||
"avatar-background-lime": "#eefadc",
|
|
||||||
"avatar-text-pink": "#cd1d8d",
|
|
||||||
"avatar-text-mint": "#147d6f",
|
|
||||||
"avatar-text-orange": "#ed5f00",
|
|
||||||
"avatar-text-purple": "#8445bc",
|
|
||||||
"avatar-text-cyan": "#0894b3",
|
|
||||||
"avatar-text-lime": "#5d770d"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#716c6b",
|
"neutral": "#716c6b",
|
||||||
"primary": "#fab283",
|
"primary": "#fab283",
|
||||||
|
"accent": "#ff9ae2",
|
||||||
"success": "#12c905",
|
"success": "#12c905",
|
||||||
"warning": "#fcd53a",
|
"warning": "#fcd53a",
|
||||||
"error": "#fc533a",
|
"error": "#fc533a",
|
||||||
@@ -279,254 +28,6 @@
|
|||||||
"interactive": "#034cff",
|
"interactive": "#034cff",
|
||||||
"diffAdd": "#c8ffc4",
|
"diffAdd": "#c8ffc4",
|
||||||
"diffDelete": "#fc533a"
|
"diffDelete": "#fc533a"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"base": "var(--gray-dark-alpha-2)",
|
|
||||||
"base2": "var(--gray-dark-alpha-2)",
|
|
||||||
"base3": "var(--gray-dark-alpha-2)",
|
|
||||||
"background-base": "#101010",
|
|
||||||
"background-weak": "#1E1E1E",
|
|
||||||
"background-strong": "#121212",
|
|
||||||
"background-stronger": "#151515",
|
|
||||||
"surface-base": "var(--gray-dark-alpha-2)",
|
|
||||||
"surface-base-hover": "#FFFFFF0A",
|
|
||||||
"surface-base-active": "var(--gray-dark-alpha-3)",
|
|
||||||
"surface-base-interactive-active": "var(--cobalt-dark-alpha-2)",
|
|
||||||
"surface-inset-base": "#0e0b0b7f",
|
|
||||||
"surface-inset-base-hover": "#0e0b0b7f",
|
|
||||||
"surface-inset-strong": "#060505cc",
|
|
||||||
"surface-inset-strong-hover": "#060505cc",
|
|
||||||
"surface-raised-base": "var(--gray-dark-alpha-3)",
|
|
||||||
"surface-float-base": "var(--gray-dark-1)",
|
|
||||||
"surface-float-base-hover": "var(--gray-dark-2)",
|
|
||||||
"surface-raised-base-hover": "var(--gray-dark-alpha-4)",
|
|
||||||
"surface-raised-base-active": "var(--gray-dark-alpha-5)",
|
|
||||||
"surface-raised-strong": "var(--gray-dark-alpha-4)",
|
|
||||||
"surface-raised-strong-hover": "var(--gray-dark-alpha-6)",
|
|
||||||
"surface-raised-stronger": "var(--gray-dark-alpha-6)",
|
|
||||||
"surface-raised-stronger-hover": "var(--gray-dark-alpha-7)",
|
|
||||||
"surface-weak": "var(--gray-dark-alpha-4)",
|
|
||||||
"surface-weaker": "var(--gray-dark-alpha-5)",
|
|
||||||
"surface-strong": "var(--gray-dark-alpha-7)",
|
|
||||||
"surface-raised-stronger-non-alpha": "#1B1B1B",
|
|
||||||
"surface-brand-base": "var(--yuzu-light-9)",
|
|
||||||
"surface-brand-hover": "var(--yuzu-light-10)",
|
|
||||||
"surface-interactive-base": "var(--cobalt-dark-3)",
|
|
||||||
"surface-interactive-hover": "#0A1D4D",
|
|
||||||
"surface-interactive-weak": "var(--cobalt-dark-2)",
|
|
||||||
"surface-interactive-weak-hover": "var(--cobalt-light-3)",
|
|
||||||
"surface-success-base": "var(--apple-dark-3)",
|
|
||||||
"surface-success-weak": "var(--apple-dark-2)",
|
|
||||||
"surface-success-strong": "var(--apple-dark-9)",
|
|
||||||
"surface-warning-base": "var(--solaris-light-3)",
|
|
||||||
"surface-warning-weak": "var(--solaris-light-2)",
|
|
||||||
"surface-warning-strong": "var(--solaris-light-9)",
|
|
||||||
"surface-critical-base": "var(--ember-dark-3)",
|
|
||||||
"surface-critical-weak": "var(--ember-dark-2)",
|
|
||||||
"surface-critical-strong": "var(--ember-dark-9)",
|
|
||||||
"surface-info-base": "var(--lilac-light-3)",
|
|
||||||
"surface-info-weak": "var(--lilac-light-2)",
|
|
||||||
"surface-info-strong": "var(--lilac-light-9)",
|
|
||||||
"surface-diff-unchanged-base": "var(--gray-dark-1)",
|
|
||||||
"surface-diff-skip-base": "var(--gray-dark-alpha-1)",
|
|
||||||
"surface-diff-hidden-base": "var(--blue-dark-2)",
|
|
||||||
"surface-diff-hidden-weak": "var(--blue-dark-1)",
|
|
||||||
"surface-diff-hidden-weaker": "var(--blue-dark-3)",
|
|
||||||
"surface-diff-hidden-strong": "var(--blue-dark-5)",
|
|
||||||
"surface-diff-hidden-stronger": "var(--blue-dark-11)",
|
|
||||||
"surface-diff-add-base": "var(--mint-dark-3)",
|
|
||||||
"surface-diff-add-weak": "var(--mint-dark-4)",
|
|
||||||
"surface-diff-add-weaker": "var(--mint-dark-3)",
|
|
||||||
"surface-diff-add-strong": "var(--mint-dark-5)",
|
|
||||||
"surface-diff-add-stronger": "var(--mint-dark-11)",
|
|
||||||
"surface-diff-delete-base": "var(--ember-dark-3)",
|
|
||||||
"surface-diff-delete-weak": "var(--ember-dark-4)",
|
|
||||||
"surface-diff-delete-weaker": "var(--ember-dark-3)",
|
|
||||||
"surface-diff-delete-strong": "var(--ember-dark-5)",
|
|
||||||
"surface-diff-delete-stronger": "var(--ember-dark-11)",
|
|
||||||
"input-base": "var(--gray-dark-2)",
|
|
||||||
"input-hover": "var(--gray-dark-2)",
|
|
||||||
"input-active": "var(--cobalt-dark-1)",
|
|
||||||
"input-selected": "var(--cobalt-dark-2)",
|
|
||||||
"input-focus": "var(--cobalt-dark-1)",
|
|
||||||
"input-disabled": "var(--gray-dark-4)",
|
|
||||||
"text-base": "var(--gray-dark-alpha-11)",
|
|
||||||
"text-weak": "var(--gray-dark-alpha-9)",
|
|
||||||
"text-weaker": "var(--gray-dark-alpha-8)",
|
|
||||||
"text-strong": "var(--gray-dark-alpha-12)",
|
|
||||||
"text-invert-base": "var(--gray-dark-alpha-11)",
|
|
||||||
"text-invert-weak": "var(--gray-dark-alpha-9)",
|
|
||||||
"text-invert-weaker": "var(--gray-dark-alpha-8)",
|
|
||||||
"text-invert-strong": "var(--gray-dark-alpha-12)",
|
|
||||||
"text-interactive-base": "var(--cobalt-dark-11)",
|
|
||||||
"text-on-brand-base": "var(--gray-dark-alpha-11)",
|
|
||||||
"text-on-interactive-base": "var(--gray-dark-12)",
|
|
||||||
"text-on-interactive-weak": "var(--gray-dark-alpha-11)",
|
|
||||||
"text-on-success-base": "var(--apple-dark-9)",
|
|
||||||
"text-on-critical-base": "var(--ember-dark-9)",
|
|
||||||
"text-on-critical-weak": "var(--ember-dark-8)",
|
|
||||||
"text-on-critical-strong": "var(--ember-dark-12)",
|
|
||||||
"text-on-warning-base": "var(--gray-dark-alpha-11)",
|
|
||||||
"text-on-info-base": "var(--gray-dark-alpha-11)",
|
|
||||||
"text-diff-add-base": "var(--mint-dark-11)",
|
|
||||||
"text-diff-delete-base": "var(--ember-dark-9)",
|
|
||||||
"text-diff-delete-strong": "var(--ember-dark-12)",
|
|
||||||
"text-diff-add-strong": "var(--mint-dark-8)",
|
|
||||||
"text-on-info-weak": "var(--gray-dark-alpha-9)",
|
|
||||||
"text-on-info-strong": "var(--gray-dark-alpha-12)",
|
|
||||||
"text-on-warning-weak": "var(--gray-dark-alpha-9)",
|
|
||||||
"text-on-warning-strong": "var(--gray-dark-alpha-12)",
|
|
||||||
"text-on-success-weak": "var(--apple-dark-8)",
|
|
||||||
"text-on-success-strong": "var(--apple-dark-12)",
|
|
||||||
"text-on-brand-weak": "var(--gray-dark-alpha-9)",
|
|
||||||
"text-on-brand-weaker": "var(--gray-dark-alpha-8)",
|
|
||||||
"text-on-brand-strong": "var(--gray-dark-alpha-12)",
|
|
||||||
"button-primary-base": "var(--gray-dark-12)",
|
|
||||||
"button-secondary-base": "var(--gray-dark-2)",
|
|
||||||
"button-secondary-hover": "#FFFFFF0A",
|
|
||||||
"border-base": "var(--gray-dark-alpha-7)",
|
|
||||||
"border-hover": "var(--gray-dark-alpha-8)",
|
|
||||||
"border-active": "var(--gray-dark-alpha-9)",
|
|
||||||
"border-selected": "var(--cobalt-dark-alpha-11)",
|
|
||||||
"border-disabled": "var(--gray-dark-alpha-8)",
|
|
||||||
"border-focus": "var(--gray-dark-alpha-9)",
|
|
||||||
"border-weak-base": "var(--gray-dark-alpha-5)",
|
|
||||||
"border-weak-hover": "var(--gray-dark-alpha-7)",
|
|
||||||
"border-weak-active": "var(--gray-dark-alpha-8)",
|
|
||||||
"border-weak-selected": "var(--cobalt-dark-alpha-6)",
|
|
||||||
"border-weak-disabled": "var(--gray-dark-alpha-6)",
|
|
||||||
"border-weak-focus": "var(--gray-dark-alpha-8)",
|
|
||||||
"border-strong-base": "var(--gray-dark-alpha-8)",
|
|
||||||
"border-interactive-base": "var(--cobalt-light-7)",
|
|
||||||
"border-interactive-hover": "var(--cobalt-light-8)",
|
|
||||||
"border-interactive-active": "var(--cobalt-light-9)",
|
|
||||||
"border-interactive-selected": "var(--cobalt-light-9)",
|
|
||||||
"border-interactive-disabled": "var(--gray-light-8)",
|
|
||||||
"border-interactive-focus": "var(--cobalt-light-9)",
|
|
||||||
"border-success-base": "var(--apple-light-6)",
|
|
||||||
"border-success-hover": "var(--apple-light-7)",
|
|
||||||
"border-success-selected": "var(--apple-light-9)",
|
|
||||||
"border-warning-base": "var(--solaris-light-6)",
|
|
||||||
"border-warning-hover": "var(--solaris-light-7)",
|
|
||||||
"border-warning-selected": "var(--solaris-light-9)",
|
|
||||||
"border-critical-base": "var(--ember-dark-5)",
|
|
||||||
"border-critical-hover": "var(--ember-dark-7)",
|
|
||||||
"border-critical-selected": "var(--ember-dark-9)",
|
|
||||||
"border-info-base": "var(--lilac-light-6)",
|
|
||||||
"border-info-hover": "var(--lilac-light-7)",
|
|
||||||
"border-info-selected": "var(--lilac-light-9)",
|
|
||||||
"icon-base": "var(--gray-dark-10)",
|
|
||||||
"icon-hover": "var(--gray-dark-11)",
|
|
||||||
"icon-active": "var(--gray-dark-12)",
|
|
||||||
"icon-selected": "var(--gray-dark-12)",
|
|
||||||
"icon-disabled": "var(--gray-dark-8)",
|
|
||||||
"icon-focus": "var(--gray-dark-12)",
|
|
||||||
"icon-invert-base": "var(--gray-dark-1)",
|
|
||||||
"icon-weak-base": "var(--gray-dark-6)",
|
|
||||||
"icon-weak-hover": "var(--gray-light-7)",
|
|
||||||
"icon-weak-active": "var(--gray-light-8)",
|
|
||||||
"icon-weak-selected": "var(--gray-light-9)",
|
|
||||||
"icon-weak-disabled": "var(--gray-light-4)",
|
|
||||||
"icon-weak-focus": "var(--gray-light-9)",
|
|
||||||
"icon-strong-base": "var(--gray-dark-12)",
|
|
||||||
"icon-strong-hover": "#F3F3F3",
|
|
||||||
"icon-strong-active": "#EBEBEB",
|
|
||||||
"icon-strong-selected": "#FCFCFC",
|
|
||||||
"icon-strong-disabled": "var(--gray-dark-7)",
|
|
||||||
"icon-strong-focus": "#FCFCFC",
|
|
||||||
"icon-brand-base": "var(--white)",
|
|
||||||
"icon-interactive-base": "var(--cobalt-dark-11)",
|
|
||||||
"icon-success-base": "var(--apple-dark-9)",
|
|
||||||
"icon-success-hover": "var(--apple-dark-10)",
|
|
||||||
"icon-success-active": "var(--apple-dark-11)",
|
|
||||||
"icon-warning-base": "var(--amber-dark-9)",
|
|
||||||
"icon-warning-hover": "var(--amber-dark-8)",
|
|
||||||
"icon-warning-active": "var(--amber-dark-11)",
|
|
||||||
"icon-critical-base": "var(--ember-dark-9)",
|
|
||||||
"icon-critical-hover": "var(--ember-dark-11)",
|
|
||||||
"icon-critical-active": "var(--ember-dark-12)",
|
|
||||||
"icon-info-base": "var(--lilac-dark-7)",
|
|
||||||
"icon-info-hover": "var(--lilac-dark-8)",
|
|
||||||
"icon-info-active": "var(--lilac-dark-11)",
|
|
||||||
"icon-on-brand-base": "var(--gray-light-alpha-11)",
|
|
||||||
"icon-on-brand-hover": "var(--gray-light-alpha-12)",
|
|
||||||
"icon-on-brand-selected": "var(--gray-light-alpha-12)",
|
|
||||||
"icon-on-interactive-base": "var(--gray-dark-12)",
|
|
||||||
"icon-agent-plan-base": "var(--purple-dark-9)",
|
|
||||||
"icon-agent-docs-base": "var(--amber-dark-9)",
|
|
||||||
"icon-agent-ask-base": "var(--cyan-dark-9)",
|
|
||||||
"icon-agent-build-base": "var(--cobalt-dark-11)",
|
|
||||||
"icon-on-success-base": "var(--apple-dark-alpha-9)",
|
|
||||||
"icon-on-success-hover": "var(--apple-dark-alpha-10)",
|
|
||||||
"icon-on-success-selected": "var(--apple-dark-alpha-11)",
|
|
||||||
"icon-on-warning-base": "var(--amber-darkalpha-9)",
|
|
||||||
"icon-on-warning-hover": "var(--amber-darkalpha-10)",
|
|
||||||
"icon-on-warning-selected": "var(--amber-darkalpha-11)",
|
|
||||||
"icon-on-critical-base": "var(--ember-dark-alpha-9)",
|
|
||||||
"icon-on-critical-hover": "var(--ember-dark-alpha-10)",
|
|
||||||
"icon-on-critical-selected": "var(--ember-dark-alpha-11)",
|
|
||||||
"icon-on-info-base": "var(--lilac-dark-9)",
|
|
||||||
"icon-on-info-hover": "var(--lilac-dark-alpha-10)",
|
|
||||||
"icon-on-info-selected": "var(--lilac-dark-alpha-11)",
|
|
||||||
"icon-diff-add-base": "var(--mint-dark-11)",
|
|
||||||
"icon-diff-add-hover": "var(--mint-dark-10)",
|
|
||||||
"icon-diff-add-active": "var(--mint-dark-11)",
|
|
||||||
"icon-diff-delete-base": "var(--ember-dark-9)",
|
|
||||||
"icon-diff-delete-hover": "var(--ember-dark-10)",
|
|
||||||
"syntax-comment": "var(--text-weak)",
|
|
||||||
"syntax-regexp": "var(--text-base)",
|
|
||||||
"syntax-string": "#00ceb9",
|
|
||||||
"syntax-keyword": "var(--text-weak)",
|
|
||||||
"syntax-primitive": "#ffba92",
|
|
||||||
"syntax-operator": "var(--text-weak)",
|
|
||||||
"syntax-variable": "var(--text-strong)",
|
|
||||||
"syntax-property": "#ff9ae2",
|
|
||||||
"syntax-type": "#ecf58c",
|
|
||||||
"syntax-constant": "#93e9f6",
|
|
||||||
"syntax-punctuation": "var(--text-weak)",
|
|
||||||
"syntax-object": "var(--text-strong)",
|
|
||||||
"syntax-success": "var(--apple-dark-10)",
|
|
||||||
"syntax-warning": "var(--amber-dark-10)",
|
|
||||||
"syntax-critical": "var(--ember-dark-10)",
|
|
||||||
"syntax-info": "#93e9f6",
|
|
||||||
"syntax-diff-add": "var(--mint-dark-11)",
|
|
||||||
"syntax-diff-delete": "var(--ember-dark-11)",
|
|
||||||
"syntax-diff-unknown": "#ff0000",
|
|
||||||
"markdown-heading": "#9d7cd8",
|
|
||||||
"markdown-text": "#eeeeee",
|
|
||||||
"markdown-link": "#fab283",
|
|
||||||
"markdown-link-text": "#56b6c2",
|
|
||||||
"markdown-code": "#7fd88f",
|
|
||||||
"markdown-block-quote": "#e5c07b",
|
|
||||||
"markdown-emph": "#e5c07b",
|
|
||||||
"markdown-strong": "#f5a742",
|
|
||||||
"markdown-horizontal-rule": "#808080",
|
|
||||||
"markdown-list-item": "#fab283",
|
|
||||||
"markdown-list-enumeration": "#56b6c2",
|
|
||||||
"markdown-image": "#fab283",
|
|
||||||
"markdown-image-text": "#56b6c2",
|
|
||||||
"markdown-code-block": "#eeeeee",
|
|
||||||
"border-color": "#ffffff",
|
|
||||||
"border-weaker-base": "var(--gray-dark-alpha-3)",
|
|
||||||
"border-weaker-hover": "var(--gray-dark-alpha-4)",
|
|
||||||
"border-weaker-active": "var(--gray-dark-alpha-6)",
|
|
||||||
"border-weaker-selected": "var(--cobalt-dark-alpha-3)",
|
|
||||||
"border-weaker-disabled": "var(--gray-dark-alpha-2)",
|
|
||||||
"border-weaker-focus": "var(--gray-dark-alpha-6)",
|
|
||||||
"button-ghost-hover": "var(--gray-dark-alpha-2)",
|
|
||||||
"button-ghost-hover2": "var(--gray-dark-alpha-3)",
|
|
||||||
"avatar-background-pink": "#501b3f",
|
|
||||||
"avatar-background-mint": "#033a34",
|
|
||||||
"avatar-background-orange": "#5f2a06",
|
|
||||||
"avatar-background-purple": "#432155",
|
|
||||||
"avatar-background-cyan": "#0f3058",
|
|
||||||
"avatar-background-lime": "#2b3711",
|
|
||||||
"avatar-text-pink": "#e34ba9",
|
|
||||||
"avatar-text-mint": "#95f3d9",
|
|
||||||
"avatar-text-orange": "#ff802b",
|
|
||||||
"avatar-text-purple": "#9d5bd2",
|
|
||||||
"avatar-text-cyan": "#369eff",
|
|
||||||
"avatar-text-lime": "#c4f042"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,129 +3,31 @@
|
|||||||
"name": "One Dark Pro",
|
"name": "One Dark Pro",
|
||||||
"id": "onedarkpro",
|
"id": "onedarkpro",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#f5f6f8",
|
"neutral": "#f5f6f8",
|
||||||
|
"ink": "#2b303b",
|
||||||
"primary": "#528bff",
|
"primary": "#528bff",
|
||||||
|
"accent": "#d85462",
|
||||||
"success": "#4fa66d",
|
"success": "#4fa66d",
|
||||||
"warning": "#d19a66",
|
"warning": "#d19a66",
|
||||||
"error": "#e06c75",
|
"error": "#e06c75",
|
||||||
"info": "#61afef",
|
"info": "#61afef",
|
||||||
"interactive": "#528bff",
|
|
||||||
"diffAdd": "#c2ebcf",
|
"diffAdd": "#c2ebcf",
|
||||||
"diffDelete": "#f7c1c5"
|
"diffDelete": "#f7c1c5"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#f5f6f8",
|
|
||||||
"background-weak": "#eef0f4",
|
|
||||||
"background-strong": "#fafbfc",
|
|
||||||
"background-stronger": "#ffffff",
|
|
||||||
"border-weak-base": "#dee2eb",
|
|
||||||
"border-weak-hover": "#d4d9e3",
|
|
||||||
"border-weak-active": "#caced6",
|
|
||||||
"border-weak-selected": "#bec4d0",
|
|
||||||
"border-weak-disabled": "#f4f6fb",
|
|
||||||
"border-weak-focus": "#c4cada",
|
|
||||||
"border-base": "#b5bccd",
|
|
||||||
"border-hover": "#aab1c2",
|
|
||||||
"border-active": "#a0a7b8",
|
|
||||||
"border-selected": "#959cae",
|
|
||||||
"border-disabled": "#eceef4",
|
|
||||||
"border-focus": "#a6adbf",
|
|
||||||
"border-strong-base": "#747c92",
|
|
||||||
"border-strong-hover": "#6a7287",
|
|
||||||
"border-strong-active": "#60687c",
|
|
||||||
"border-strong-selected": "#565e71",
|
|
||||||
"border-strong-disabled": "#cbd0dd",
|
|
||||||
"border-strong-focus": "#666d82",
|
|
||||||
"surface-diff-add-base": "#e5f4ea",
|
|
||||||
"surface-diff-delete-base": "#fde7ea",
|
|
||||||
"surface-diff-hidden-base": "#e4e8f4",
|
|
||||||
"text-base": "#2b303b",
|
|
||||||
"text-weak": "#6b717f",
|
|
||||||
"text-strong": "#0e1118",
|
|
||||||
"syntax-string": "#4fa66d",
|
|
||||||
"syntax-primitive": "#d85462",
|
|
||||||
"syntax-property": "#528bff",
|
|
||||||
"syntax-type": "#d19a66",
|
|
||||||
"syntax-constant": "#61afef",
|
|
||||||
"syntax-info": "#61afef",
|
|
||||||
"markdown-heading": "#528bff",
|
|
||||||
"markdown-text": "#2b303b",
|
|
||||||
"markdown-link": "#528bff",
|
|
||||||
"markdown-link-text": "#61afef",
|
|
||||||
"markdown-code": "#4fa66d",
|
|
||||||
"markdown-block-quote": "#d19a66",
|
|
||||||
"markdown-emph": "#d19a66",
|
|
||||||
"markdown-strong": "#d85462",
|
|
||||||
"markdown-horizontal-rule": "#d3d7e4",
|
|
||||||
"markdown-list-item": "#528bff",
|
|
||||||
"markdown-list-enumeration": "#61afef",
|
|
||||||
"markdown-image": "#528bff",
|
|
||||||
"markdown-image-text": "#61afef",
|
|
||||||
"markdown-code-block": "#528bff"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#1e222a",
|
"neutral": "#1e222a",
|
||||||
|
"ink": "#abb2bf",
|
||||||
"primary": "#61afef",
|
"primary": "#61afef",
|
||||||
|
"accent": "#e06c75",
|
||||||
"success": "#98c379",
|
"success": "#98c379",
|
||||||
"warning": "#e5c07b",
|
"warning": "#e5c07b",
|
||||||
"error": "#e06c75",
|
"error": "#e06c75",
|
||||||
"info": "#56b6c2",
|
"info": "#56b6c2",
|
||||||
"interactive": "#61afef",
|
|
||||||
"diffAdd": "#4b815a",
|
"diffAdd": "#4b815a",
|
||||||
"diffDelete": "#b2555f"
|
"diffDelete": "#b2555f"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#1e222a",
|
|
||||||
"background-weak": "#212631",
|
|
||||||
"background-strong": "#1b1f27",
|
|
||||||
"background-stronger": "#171b23",
|
|
||||||
"border-weak-base": "#323848",
|
|
||||||
"border-weak-hover": "#363d52",
|
|
||||||
"border-weak-active": "#3c435c",
|
|
||||||
"border-weak-selected": "#424967",
|
|
||||||
"border-weak-disabled": "#141720",
|
|
||||||
"border-weak-focus": "#3f4560",
|
|
||||||
"border-base": "#4a5164",
|
|
||||||
"border-hover": "#515871",
|
|
||||||
"border-active": "#585f7e",
|
|
||||||
"border-selected": "#60688a",
|
|
||||||
"border-disabled": "#1a1e27",
|
|
||||||
"border-focus": "#555c79",
|
|
||||||
"border-strong-base": "#6a7390",
|
|
||||||
"border-strong-hover": "#737c9d",
|
|
||||||
"border-strong-active": "#7d87ab",
|
|
||||||
"border-strong-selected": "#8791b8",
|
|
||||||
"border-strong-disabled": "#212533",
|
|
||||||
"border-strong-focus": "#7680a2",
|
|
||||||
"surface-diff-add-base": "#1c2a26",
|
|
||||||
"surface-diff-delete-base": "#2a1c22",
|
|
||||||
"surface-diff-hidden-base": "#232836",
|
|
||||||
"text-base": "#abb2bf",
|
|
||||||
"text-weak": "#818899",
|
|
||||||
"text-strong": "#f6f7fb",
|
|
||||||
"syntax-string": "#98c379",
|
|
||||||
"syntax-primitive": "#e06c75",
|
|
||||||
"syntax-property": "#61afef",
|
|
||||||
"syntax-type": "#e5c07b",
|
|
||||||
"syntax-constant": "#56b6c2",
|
|
||||||
"syntax-info": "#56b6c2",
|
|
||||||
"markdown-heading": "#61afef",
|
|
||||||
"markdown-text": "#abb2bf",
|
|
||||||
"markdown-link": "#61afef",
|
|
||||||
"markdown-link-text": "#56b6c2",
|
|
||||||
"markdown-code": "#98c379",
|
|
||||||
"markdown-block-quote": "#e5c07b",
|
|
||||||
"markdown-emph": "#e5c07b",
|
|
||||||
"markdown-strong": "#e06c75",
|
|
||||||
"markdown-horizontal-rule": "#2d3444",
|
|
||||||
"markdown-list-item": "#61afef",
|
|
||||||
"markdown-list-enumeration": "#56b6c2",
|
|
||||||
"markdown-image": "#61afef",
|
|
||||||
"markdown-image-text": "#56b6c2",
|
|
||||||
"markdown-code-block": "#abb2bf"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,129 +3,31 @@
|
|||||||
"name": "Shades of Purple",
|
"name": "Shades of Purple",
|
||||||
"id": "shadesofpurple",
|
"id": "shadesofpurple",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#f7ebff",
|
"neutral": "#f7ebff",
|
||||||
|
"ink": "#3b2c59",
|
||||||
"primary": "#7a5af8",
|
"primary": "#7a5af8",
|
||||||
|
"accent": "#ff6bd5",
|
||||||
"success": "#3dd598",
|
"success": "#3dd598",
|
||||||
"warning": "#f7c948",
|
"warning": "#f7c948",
|
||||||
"error": "#ff6bd5",
|
"error": "#ff6bd5",
|
||||||
"info": "#62d4ff",
|
"info": "#62d4ff",
|
||||||
"interactive": "#7a5af8",
|
|
||||||
"diffAdd": "#c8f8da",
|
"diffAdd": "#c8f8da",
|
||||||
"diffDelete": "#ffc3ef"
|
"diffDelete": "#ffc3ef"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#f7ebff",
|
|
||||||
"background-weak": "#f2e2ff",
|
|
||||||
"background-strong": "#fbf2ff",
|
|
||||||
"background-stronger": "#fff7ff",
|
|
||||||
"border-weak-base": "#e5d3ff",
|
|
||||||
"border-weak-hover": "#dac8f5",
|
|
||||||
"border-weak-active": "#d1bdeb",
|
|
||||||
"border-weak-selected": "#c6b3e1",
|
|
||||||
"border-weak-disabled": "#fcf6ff",
|
|
||||||
"border-weak-focus": "#ccb9e7",
|
|
||||||
"border-base": "#baa4d5",
|
|
||||||
"border-hover": "#b098cb",
|
|
||||||
"border-active": "#a68dc2",
|
|
||||||
"border-selected": "#9b82b8",
|
|
||||||
"border-disabled": "#f1e7ff",
|
|
||||||
"border-focus": "#a692c6",
|
|
||||||
"border-strong-base": "#8769a9",
|
|
||||||
"border-strong-hover": "#7b5c9d",
|
|
||||||
"border-strong-active": "#704f91",
|
|
||||||
"border-strong-selected": "#664587",
|
|
||||||
"border-strong-disabled": "#d8c4f0",
|
|
||||||
"border-strong-focus": "#755495",
|
|
||||||
"surface-diff-add-base": "#edf8f1",
|
|
||||||
"surface-diff-delete-base": "#ffe4f4",
|
|
||||||
"surface-diff-hidden-base": "#e9e4ff",
|
|
||||||
"text-base": "#3b2c59",
|
|
||||||
"text-weak": "#6c568f",
|
|
||||||
"text-strong": "#1c1033",
|
|
||||||
"syntax-string": "#3dd598",
|
|
||||||
"syntax-primitive": "#ff6bd5",
|
|
||||||
"syntax-property": "#7a5af8",
|
|
||||||
"syntax-type": "#f7c948",
|
|
||||||
"syntax-constant": "#62d4ff",
|
|
||||||
"syntax-info": "#62d4ff",
|
|
||||||
"markdown-heading": "#7a5af8",
|
|
||||||
"markdown-text": "#3b2c59",
|
|
||||||
"markdown-link": "#7a5af8",
|
|
||||||
"markdown-link-text": "#62d4ff",
|
|
||||||
"markdown-code": "#3dd598",
|
|
||||||
"markdown-block-quote": "#f7c948",
|
|
||||||
"markdown-emph": "#f7c948",
|
|
||||||
"markdown-strong": "#ff6bd5",
|
|
||||||
"markdown-horizontal-rule": "#decbed",
|
|
||||||
"markdown-list-item": "#7a5af8",
|
|
||||||
"markdown-list-enumeration": "#62d4ff",
|
|
||||||
"markdown-image": "#7a5af8",
|
|
||||||
"markdown-image-text": "#62d4ff",
|
|
||||||
"markdown-code-block": "#7a5af8"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#1a102b",
|
"neutral": "#1a102b",
|
||||||
|
"ink": "#f5f0ff",
|
||||||
"primary": "#c792ff",
|
"primary": "#c792ff",
|
||||||
|
"accent": "#ff7ac6",
|
||||||
"success": "#7be0b0",
|
"success": "#7be0b0",
|
||||||
"warning": "#ffd580",
|
"warning": "#ffd580",
|
||||||
"error": "#ff7ac6",
|
"error": "#ff7ac6",
|
||||||
"info": "#7dd4ff",
|
"info": "#7dd4ff",
|
||||||
"interactive": "#c792ff",
|
|
||||||
"diffAdd": "#53c39f",
|
"diffAdd": "#53c39f",
|
||||||
"diffDelete": "#d85aa0"
|
"diffDelete": "#d85aa0"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#1a102b",
|
|
||||||
"background-weak": "#1f1434",
|
|
||||||
"background-strong": "#1c122f",
|
|
||||||
"background-stronger": "#170e26",
|
|
||||||
"border-weak-base": "#352552",
|
|
||||||
"border-weak-hover": "#3a2a5d",
|
|
||||||
"border-weak-active": "#402f68",
|
|
||||||
"border-weak-selected": "#463674",
|
|
||||||
"border-weak-disabled": "#10091b",
|
|
||||||
"border-weak-focus": "#3d2d65",
|
|
||||||
"border-base": "#4d3a73",
|
|
||||||
"border-hover": "#553f7f",
|
|
||||||
"border-active": "#5d468c",
|
|
||||||
"border-selected": "#654c99",
|
|
||||||
"border-disabled": "#150d21",
|
|
||||||
"border-focus": "#594283",
|
|
||||||
"border-strong-base": "#7659b0",
|
|
||||||
"border-strong-hover": "#8262be",
|
|
||||||
"border-strong-active": "#8e6ccc",
|
|
||||||
"border-strong-selected": "#9a77da",
|
|
||||||
"border-strong-disabled": "#1c122c",
|
|
||||||
"border-strong-focus": "#8666c4",
|
|
||||||
"surface-diff-add-base": "#142c27",
|
|
||||||
"surface-diff-delete-base": "#2d1424",
|
|
||||||
"surface-diff-hidden-base": "#231737",
|
|
||||||
"text-base": "#f5f0ff",
|
|
||||||
"text-weak": "#c9b6ff",
|
|
||||||
"text-strong": "#ffffff",
|
|
||||||
"syntax-string": "#7be0b0",
|
|
||||||
"syntax-primitive": "#ff7ac6",
|
|
||||||
"syntax-property": "#c792ff",
|
|
||||||
"syntax-type": "#ffd580",
|
|
||||||
"syntax-constant": "#7dd4ff",
|
|
||||||
"syntax-info": "#7dd4ff",
|
|
||||||
"markdown-heading": "#c792ff",
|
|
||||||
"markdown-text": "#f5f0ff",
|
|
||||||
"markdown-link": "#c792ff",
|
|
||||||
"markdown-link-text": "#7dd4ff",
|
|
||||||
"markdown-code": "#7be0b0",
|
|
||||||
"markdown-block-quote": "#ffd580",
|
|
||||||
"markdown-emph": "#ffd580",
|
|
||||||
"markdown-strong": "#ff7ac6",
|
|
||||||
"markdown-horizontal-rule": "#2d1d41",
|
|
||||||
"markdown-list-item": "#c792ff",
|
|
||||||
"markdown-list-enumeration": "#7dd4ff",
|
|
||||||
"markdown-image": "#c792ff",
|
|
||||||
"markdown-image-text": "#7dd4ff",
|
|
||||||
"markdown-code-block": "#f5f0ff"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,129 +3,31 @@
|
|||||||
"name": "Solarized",
|
"name": "Solarized",
|
||||||
"id": "solarized",
|
"id": "solarized",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#fdf6e3",
|
"neutral": "#fdf6e3",
|
||||||
|
"ink": "#586e75",
|
||||||
"primary": "#268bd2",
|
"primary": "#268bd2",
|
||||||
|
"accent": "#d33682",
|
||||||
"success": "#859900",
|
"success": "#859900",
|
||||||
"warning": "#b58900",
|
"warning": "#b58900",
|
||||||
"error": "#dc322f",
|
"error": "#dc322f",
|
||||||
"info": "#2aa198",
|
"info": "#2aa198",
|
||||||
"interactive": "#268bd2",
|
|
||||||
"diffAdd": "#c6dc7a",
|
"diffAdd": "#c6dc7a",
|
||||||
"diffDelete": "#f2a1a1"
|
"diffDelete": "#f2a1a1"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#fdf6e3",
|
|
||||||
"background-weak": "#f6efda",
|
|
||||||
"background-strong": "#faf3dc",
|
|
||||||
"background-stronger": "#f6edd4",
|
|
||||||
"border-weak-base": "#e3e0cd",
|
|
||||||
"border-weak-hover": "#d9d4c2",
|
|
||||||
"border-weak-active": "#cfcab7",
|
|
||||||
"border-weak-selected": "#c5c0ad",
|
|
||||||
"border-weak-disabled": "#f2edda",
|
|
||||||
"border-weak-focus": "#cbc6b2",
|
|
||||||
"border-base": "#bcb5a0",
|
|
||||||
"border-hover": "#b1aa96",
|
|
||||||
"border-active": "#a59f8c",
|
|
||||||
"border-selected": "#999382",
|
|
||||||
"border-disabled": "#ede7d4",
|
|
||||||
"border-focus": "#aca58f",
|
|
||||||
"border-strong-base": "#8c8572",
|
|
||||||
"border-strong-hover": "#7f7866",
|
|
||||||
"border-strong-active": "#716b5b",
|
|
||||||
"border-strong-selected": "#645f50",
|
|
||||||
"border-strong-disabled": "#d5cdb8",
|
|
||||||
"border-strong-focus": "#78715f",
|
|
||||||
"surface-diff-add-base": "#eef5d6",
|
|
||||||
"surface-diff-delete-base": "#fde4dd",
|
|
||||||
"surface-diff-hidden-base": "#e3ecf3",
|
|
||||||
"text-base": "#586e75",
|
|
||||||
"text-weak": "#7a8c8e",
|
|
||||||
"text-strong": "#073642",
|
|
||||||
"syntax-string": "#859900",
|
|
||||||
"syntax-primitive": "#d33682",
|
|
||||||
"syntax-property": "#268bd2",
|
|
||||||
"syntax-type": "#b58900",
|
|
||||||
"syntax-constant": "#2aa198",
|
|
||||||
"syntax-info": "#2aa198",
|
|
||||||
"markdown-heading": "#268bd2",
|
|
||||||
"markdown-text": "#586e75",
|
|
||||||
"markdown-link": "#268bd2",
|
|
||||||
"markdown-link-text": "#2aa198",
|
|
||||||
"markdown-code": "#859900",
|
|
||||||
"markdown-block-quote": "#b58900",
|
|
||||||
"markdown-emph": "#b58900",
|
|
||||||
"markdown-strong": "#d33682",
|
|
||||||
"markdown-horizontal-rule": "#cfd1bf",
|
|
||||||
"markdown-list-item": "#268bd2",
|
|
||||||
"markdown-list-enumeration": "#2aa198",
|
|
||||||
"markdown-image": "#268bd2",
|
|
||||||
"markdown-image-text": "#2aa198",
|
|
||||||
"markdown-code-block": "#2aa198"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#002b36",
|
"neutral": "#002b36",
|
||||||
|
"ink": "#93a1a1",
|
||||||
"primary": "#6c71c4",
|
"primary": "#6c71c4",
|
||||||
|
"accent": "#d33682",
|
||||||
"success": "#859900",
|
"success": "#859900",
|
||||||
"warning": "#b58900",
|
"warning": "#b58900",
|
||||||
"error": "#dc322f",
|
"error": "#dc322f",
|
||||||
"info": "#2aa198",
|
"info": "#2aa198",
|
||||||
"interactive": "#6c71c4",
|
|
||||||
"diffAdd": "#4c7654",
|
"diffAdd": "#4c7654",
|
||||||
"diffDelete": "#c34b4b"
|
"diffDelete": "#c34b4b"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#001f27",
|
|
||||||
"background-weak": "#022733",
|
|
||||||
"background-strong": "#01222b",
|
|
||||||
"background-stronger": "#032830",
|
|
||||||
"border-weak-base": "#20373f",
|
|
||||||
"border-weak-hover": "#243e47",
|
|
||||||
"border-weak-active": "#28434f",
|
|
||||||
"border-weak-selected": "#2d4958",
|
|
||||||
"border-weak-disabled": "#0f2026",
|
|
||||||
"border-weak-focus": "#2a4552",
|
|
||||||
"border-base": "#31505b",
|
|
||||||
"border-hover": "#365765",
|
|
||||||
"border-active": "#3c5e70",
|
|
||||||
"border-selected": "#42657a",
|
|
||||||
"border-disabled": "#13272e",
|
|
||||||
"border-focus": "#3a5a6b",
|
|
||||||
"border-strong-base": "#4a7887",
|
|
||||||
"border-strong-hover": "#528294",
|
|
||||||
"border-strong-active": "#5a8ca1",
|
|
||||||
"border-strong-selected": "#6396ae",
|
|
||||||
"border-strong-disabled": "#1b323b",
|
|
||||||
"border-strong-focus": "#56879a",
|
|
||||||
"surface-diff-add-base": "#0f2f29",
|
|
||||||
"surface-diff-delete-base": "#321c1c",
|
|
||||||
"surface-diff-hidden-base": "#0f3844",
|
|
||||||
"text-base": "#93a1a1",
|
|
||||||
"text-weak": "#6c7f80",
|
|
||||||
"text-strong": "#fdf6e3",
|
|
||||||
"syntax-string": "#859900",
|
|
||||||
"syntax-primitive": "#d33682",
|
|
||||||
"syntax-property": "#6c71c4",
|
|
||||||
"syntax-type": "#b58900",
|
|
||||||
"syntax-constant": "#2aa198",
|
|
||||||
"syntax-info": "#2aa198",
|
|
||||||
"markdown-heading": "#6c71c4",
|
|
||||||
"markdown-text": "#93a1a1",
|
|
||||||
"markdown-link": "#6c71c4",
|
|
||||||
"markdown-link-text": "#2aa198",
|
|
||||||
"markdown-code": "#859900",
|
|
||||||
"markdown-block-quote": "#b58900",
|
|
||||||
"markdown-emph": "#b58900",
|
|
||||||
"markdown-strong": "#d33682",
|
|
||||||
"markdown-horizontal-rule": "#0e3b46",
|
|
||||||
"markdown-list-item": "#6c71c4",
|
|
||||||
"markdown-list-enumeration": "#2aa198",
|
|
||||||
"markdown-image": "#6c71c4",
|
|
||||||
"markdown-image-text": "#2aa198",
|
|
||||||
"markdown-code-block": "#93a1a1"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,153 +3,31 @@
|
|||||||
"name": "Tokyonight",
|
"name": "Tokyonight",
|
||||||
"id": "tokyonight",
|
"id": "tokyonight",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#e1e2e7",
|
"neutral": "#e1e2e7",
|
||||||
|
"ink": "#273153",
|
||||||
"primary": "#2e7de9",
|
"primary": "#2e7de9",
|
||||||
|
"accent": "#b15c00",
|
||||||
"success": "#587539",
|
"success": "#587539",
|
||||||
"warning": "#8c6c3e",
|
"warning": "#8c6c3e",
|
||||||
"error": "#c94060",
|
"error": "#c94060",
|
||||||
"info": "#007197",
|
"info": "#007197",
|
||||||
"interactive": "#2e7de9",
|
|
||||||
"diffAdd": "#4f8f7b",
|
"diffAdd": "#4f8f7b",
|
||||||
"diffDelete": "#d05f7c"
|
"diffDelete": "#d05f7c"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#e1e2e7",
|
|
||||||
"background-weak": "#dee0ea",
|
|
||||||
"background-strong": "#e5e6ee",
|
|
||||||
"background-stronger": "#e9eaf1",
|
|
||||||
"border-weak-base": "#cdd0dc",
|
|
||||||
"border-weak-hover": "#c3c6d2",
|
|
||||||
"border-weak-active": "#b9bcc8",
|
|
||||||
"border-weak-selected": "#aeb2bf",
|
|
||||||
"border-weak-disabled": "#e6e7ef",
|
|
||||||
"border-weak-focus": "#b3b6c3",
|
|
||||||
"border-base": "#a7abbb",
|
|
||||||
"border-hover": "#9ba0b1",
|
|
||||||
"border-active": "#9095a8",
|
|
||||||
"border-selected": "#83889e",
|
|
||||||
"border-disabled": "#dedfe6",
|
|
||||||
"border-focus": "#9599a8",
|
|
||||||
"border-strong-base": "#757b90",
|
|
||||||
"border-strong-hover": "#6a7084",
|
|
||||||
"border-strong-active": "#5f6578",
|
|
||||||
"border-strong-selected": "#545a6d",
|
|
||||||
"border-strong-disabled": "#c4c6d0",
|
|
||||||
"border-strong-focus": "#666b7f",
|
|
||||||
"surface-diff-add-base": "#dfe7da",
|
|
||||||
"surface-diff-delete-base": "#f4dadd",
|
|
||||||
"surface-diff-hidden-base": "#cfd1dd",
|
|
||||||
"text-base": "#273153",
|
|
||||||
"text-weak": "#5c6390",
|
|
||||||
"text-strong": "#1c2544",
|
|
||||||
"syntax-string": "#587539",
|
|
||||||
"syntax-primitive": "#b15c00",
|
|
||||||
"syntax-property": "#9854f1",
|
|
||||||
"syntax-type": "#3760bf",
|
|
||||||
"syntax-constant": "#007197",
|
|
||||||
"syntax-info": "#007197",
|
|
||||||
"markdown-heading": "#9854f1",
|
|
||||||
"markdown-text": "#273153",
|
|
||||||
"markdown-link": "#2e7de9",
|
|
||||||
"markdown-link-text": "#007197",
|
|
||||||
"markdown-code": "#587539",
|
|
||||||
"markdown-block-quote": "#8c6c3e",
|
|
||||||
"markdown-emph": "#8c6c3e",
|
|
||||||
"markdown-strong": "#b15c00",
|
|
||||||
"markdown-horizontal-rule": "#a1a6c5",
|
|
||||||
"markdown-list-item": "#2e7de9",
|
|
||||||
"markdown-list-enumeration": "#007197",
|
|
||||||
"markdown-image": "#2e7de9",
|
|
||||||
"markdown-image-text": "#007197",
|
|
||||||
"markdown-code-block": "#3760bf"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#1a1b26",
|
"neutral": "#1a1b26",
|
||||||
|
"ink": "#c0caf5",
|
||||||
"primary": "#7aa2f7",
|
"primary": "#7aa2f7",
|
||||||
|
"accent": "#ff9e64",
|
||||||
"success": "#9ece6a",
|
"success": "#9ece6a",
|
||||||
"warning": "#e0af68",
|
"warning": "#e0af68",
|
||||||
"error": "#f7768e",
|
"error": "#f7768e",
|
||||||
"info": "#7dcfff",
|
"info": "#7dcfff",
|
||||||
"interactive": "#7aa2f7",
|
|
||||||
"diffAdd": "#41a6b5",
|
"diffAdd": "#41a6b5",
|
||||||
"diffDelete": "#c34043"
|
"diffDelete": "#c34043"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#0f111a",
|
|
||||||
"background-weak": "#111428",
|
|
||||||
"background-strong": "#101324",
|
|
||||||
"background-stronger": "#13172a",
|
|
||||||
"border-weak-base": "#25283b",
|
|
||||||
"border-weak-hover": "#292c43",
|
|
||||||
"border-weak-active": "#2e314b",
|
|
||||||
"border-weak-selected": "#343755",
|
|
||||||
"border-weak-disabled": "#151727",
|
|
||||||
"border-weak-focus": "#30324f",
|
|
||||||
"border-base": "#3a3e57",
|
|
||||||
"border-hover": "#414264",
|
|
||||||
"border-active": "#474972",
|
|
||||||
"border-selected": "#4f507f",
|
|
||||||
"border-disabled": "#1c1d2d",
|
|
||||||
"border-focus": "#45496f",
|
|
||||||
"border-strong-base": "#5a5f82",
|
|
||||||
"border-strong-hover": "#646994",
|
|
||||||
"border-strong-active": "#6f74a6",
|
|
||||||
"border-strong-selected": "#7a7fb8",
|
|
||||||
"border-strong-disabled": "#23243a",
|
|
||||||
"border-strong-focus": "#6a6f9f",
|
|
||||||
"surface-base": "#1f2335",
|
|
||||||
"base": "#1f2335",
|
|
||||||
"surface-base-hover": "#232840",
|
|
||||||
"surface-base-active": "#262c46",
|
|
||||||
"surface-base-interactive-active": "#2b3357",
|
|
||||||
"base2": "#1f2335",
|
|
||||||
"base3": "#1f2335",
|
|
||||||
"surface-inset-base": "#161a2ab3",
|
|
||||||
"surface-inset-base-hover": "#161a2acc",
|
|
||||||
"surface-inset-strong": "#0d111fcc",
|
|
||||||
"surface-inset-strong-hover": "#0d111fcc",
|
|
||||||
"surface-raised-base": "#242a42",
|
|
||||||
"surface-float-base": "#242b45",
|
|
||||||
"surface-float-base-hover": "#2a3154",
|
|
||||||
"surface-raised-base-hover": "#272e49",
|
|
||||||
"surface-raised-base-active": "#2c3353",
|
|
||||||
"surface-raised-strong": "#31385a",
|
|
||||||
"surface-raised-strong-hover": "#373f6b",
|
|
||||||
"surface-raised-stronger": "#3b4261",
|
|
||||||
"surface-raised-stronger-hover": "#444c82",
|
|
||||||
"surface-weak": "#1b2033",
|
|
||||||
"surface-weaker": "#181d2d",
|
|
||||||
"surface-strong": "#323858",
|
|
||||||
"surface-raised-stronger-non-alpha": "#2b3150",
|
|
||||||
"surface-diff-add-base": "#1c2a38",
|
|
||||||
"surface-diff-delete-base": "#2a1f32",
|
|
||||||
"surface-diff-hidden-base": "#24283b",
|
|
||||||
"text-base": "#c0caf5",
|
|
||||||
"text-weak": "#7a88cf",
|
|
||||||
"text-strong": "#eaeaff",
|
|
||||||
"syntax-string": "#9ece6a",
|
|
||||||
"syntax-primitive": "#ff9e64",
|
|
||||||
"syntax-property": "#bb9af7",
|
|
||||||
"syntax-type": "#e0af68",
|
|
||||||
"syntax-constant": "#7dcfff",
|
|
||||||
"syntax-info": "#7dcfff",
|
|
||||||
"markdown-heading": "#bb9af7",
|
|
||||||
"markdown-text": "#c0caf5",
|
|
||||||
"markdown-link": "#7aa2f7",
|
|
||||||
"markdown-link-text": "#7dcfff",
|
|
||||||
"markdown-code": "#9ece6a",
|
|
||||||
"markdown-block-quote": "#e0af68",
|
|
||||||
"markdown-emph": "#e0af68",
|
|
||||||
"markdown-strong": "#ff9e64",
|
|
||||||
"markdown-horizontal-rule": "#3b4261",
|
|
||||||
"markdown-list-item": "#7aa2f7",
|
|
||||||
"markdown-list-enumeration": "#7dcfff",
|
|
||||||
"markdown-image": "#7aa2f7",
|
|
||||||
"markdown-image-text": "#7dcfff",
|
|
||||||
"markdown-code-block": "#c0caf5"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,129 +3,31 @@
|
|||||||
"name": "Vesper",
|
"name": "Vesper",
|
||||||
"id": "vesper",
|
"id": "vesper",
|
||||||
"light": {
|
"light": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#F0F0F0",
|
"neutral": "#F0F0F0",
|
||||||
|
"ink": "#101010",
|
||||||
"primary": "#FFC799",
|
"primary": "#FFC799",
|
||||||
|
"accent": "#B30000",
|
||||||
"success": "#99FFE4",
|
"success": "#99FFE4",
|
||||||
"warning": "#FFC799",
|
"warning": "#FFC799",
|
||||||
"error": "#FF8080",
|
"error": "#FF8080",
|
||||||
"info": "#FFC799",
|
"info": "#FFC799",
|
||||||
"interactive": "#FFC799",
|
|
||||||
"diffAdd": "#99FFE4",
|
"diffAdd": "#99FFE4",
|
||||||
"diffDelete": "#FF8080"
|
"diffDelete": "#FF8080"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#FFF",
|
|
||||||
"background-weak": "#F8F8F8",
|
|
||||||
"background-strong": "#F0F0F0",
|
|
||||||
"background-stronger": "#FBFBFB",
|
|
||||||
"border-weak-hover": "#E0E0E0",
|
|
||||||
"border-weak-active": "#D8D8D8",
|
|
||||||
"border-weak-selected": "#D0D0D0",
|
|
||||||
"border-weak-disabled": "#F0F0F0",
|
|
||||||
"border-weak-focus": "#D8D8D8",
|
|
||||||
"border-base": "#D0D0D0",
|
|
||||||
"border-hover": "#C8C8C8",
|
|
||||||
"border-active": "#C0C0C0",
|
|
||||||
"border-selected": "#B8B8B8",
|
|
||||||
"border-disabled": "#E8E8E8",
|
|
||||||
"border-focus": "#C0C0C0",
|
|
||||||
"border-strong-base": "#A0A0A0",
|
|
||||||
"border-strong-hover": "#989898",
|
|
||||||
"border-strong-active": "#909090",
|
|
||||||
"border-strong-selected": "#888888",
|
|
||||||
"border-strong-disabled": "#D0D0D0",
|
|
||||||
"border-strong-focus": "#909090",
|
|
||||||
"surface-diff-add-base": "#e8f5e8",
|
|
||||||
"surface-diff-delete-base": "#f5e8e8",
|
|
||||||
"surface-diff-hidden-base": "#F0F0F0",
|
|
||||||
"text-base": "#101010",
|
|
||||||
"text-invert-strong": "var(--smoke-dark-alpha-12)",
|
|
||||||
"text-weak": "#606060",
|
|
||||||
"text-strong": "#000000",
|
|
||||||
"syntax-string": "#0D5C4F",
|
|
||||||
"syntax-primitive": "#B30000",
|
|
||||||
"syntax-property": "#C66C00",
|
|
||||||
"syntax-type": "#9C5C12",
|
|
||||||
"syntax-constant": "#404040",
|
|
||||||
"syntax-info": "#606060",
|
|
||||||
"markdown-heading": "#FFC799",
|
|
||||||
"markdown-text": "#101010",
|
|
||||||
"markdown-link": "#FFC799",
|
|
||||||
"markdown-link-text": "#A0A0A0",
|
|
||||||
"markdown-code": "#A0A0A0",
|
|
||||||
"markdown-block-quote": "#101010",
|
|
||||||
"markdown-emph": "#101010",
|
|
||||||
"markdown-strong": "#101010",
|
|
||||||
"markdown-horizontal-rule": "#65737E",
|
|
||||||
"markdown-list-item": "#101010",
|
|
||||||
"markdown-list-enumeration": "#101010",
|
|
||||||
"markdown-image": "#FFC799",
|
|
||||||
"markdown-image-text": "#A0A0A0",
|
|
||||||
"markdown-code-block": "#FFC799"
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"dark": {
|
"dark": {
|
||||||
"seeds": {
|
"palette": {
|
||||||
"neutral": "#101010",
|
"neutral": "#101010",
|
||||||
|
"ink": "#FFF",
|
||||||
"primary": "#FFC799",
|
"primary": "#FFC799",
|
||||||
|
"accent": "#FF8080",
|
||||||
"success": "#99FFE4",
|
"success": "#99FFE4",
|
||||||
"warning": "#FFC799",
|
"warning": "#FFC799",
|
||||||
"error": "#FF8080",
|
"error": "#FF8080",
|
||||||
"info": "#FFC799",
|
"info": "#FFC799",
|
||||||
"interactive": "#FFC799",
|
|
||||||
"diffAdd": "#99FFE4",
|
"diffAdd": "#99FFE4",
|
||||||
"diffDelete": "#FF8080"
|
"diffDelete": "#FF8080"
|
||||||
},
|
|
||||||
"overrides": {
|
|
||||||
"background-base": "#101010",
|
|
||||||
"background-weak": "#141414",
|
|
||||||
"background-strong": "#0C0C0C",
|
|
||||||
"background-stronger": "#080808",
|
|
||||||
"border-weak-base": "#1C1C1C",
|
|
||||||
"border-weak-hover": "#202020",
|
|
||||||
"border-weak-active": "#242424",
|
|
||||||
"border-weak-selected": "#282828",
|
|
||||||
"border-weak-disabled": "#141414",
|
|
||||||
"border-weak-focus": "#242424",
|
|
||||||
"border-base": "#282828",
|
|
||||||
"border-hover": "#303030",
|
|
||||||
"border-active": "#383838",
|
|
||||||
"border-selected": "#404040",
|
|
||||||
"border-disabled": "#181818",
|
|
||||||
"border-focus": "#383838",
|
|
||||||
"border-strong-base": "#505050",
|
|
||||||
"border-strong-hover": "#585858",
|
|
||||||
"border-strong-active": "#606060",
|
|
||||||
"border-strong-selected": "#686868",
|
|
||||||
"border-strong-disabled": "#202020",
|
|
||||||
"border-strong-focus": "#606060",
|
|
||||||
"surface-diff-add-base": "#0d2818",
|
|
||||||
"surface-diff-delete-base": "#281a1a",
|
|
||||||
"surface-diff-hidden-base": "#141414",
|
|
||||||
"text-base": "#FFF",
|
|
||||||
"text-weak": "#A0A0A0",
|
|
||||||
"text-strong": "#FFFFFF",
|
|
||||||
"syntax-string": "#99FFE4",
|
|
||||||
"syntax-primitive": "#FF8080",
|
|
||||||
"syntax-property": "#FFC799",
|
|
||||||
"syntax-type": "#FFC799",
|
|
||||||
"syntax-constant": "#A0A0A0",
|
|
||||||
"syntax-info": "#8b8b8b",
|
|
||||||
"markdown-heading": "#FFC799",
|
|
||||||
"markdown-text": "#FFF",
|
|
||||||
"markdown-link": "#FFC799",
|
|
||||||
"markdown-link-text": "#A0A0A0",
|
|
||||||
"markdown-code": "#A0A0A0",
|
|
||||||
"markdown-block-quote": "#FFF",
|
|
||||||
"markdown-emph": "#FFF",
|
|
||||||
"markdown-strong": "#FFF",
|
|
||||||
"markdown-horizontal-rule": "#65737E",
|
|
||||||
"markdown-list-item": "#FFF",
|
|
||||||
"markdown-list-enumeration": "#FFF",
|
|
||||||
"markdown-image": "#FFC799",
|
|
||||||
"markdown-image-text": "#A0A0A0",
|
|
||||||
"markdown-code-block": "#FFF"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,11 +18,28 @@ export interface ThemeSeedColors {
|
|||||||
diffDelete: HexColor
|
diffDelete: HexColor
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface ThemeVariant {
|
export interface ThemePaletteColors {
|
||||||
seeds: ThemeSeedColors
|
neutral: HexColor
|
||||||
|
ink?: HexColor
|
||||||
|
primary: HexColor
|
||||||
|
success: HexColor
|
||||||
|
warning: HexColor
|
||||||
|
error: HexColor
|
||||||
|
info: HexColor
|
||||||
|
accent?: HexColor
|
||||||
|
interactive?: HexColor
|
||||||
|
diffAdd?: HexColor
|
||||||
|
diffDelete?: HexColor
|
||||||
|
}
|
||||||
|
|
||||||
|
type ThemeVariantBase = {
|
||||||
overrides?: Record<string, ColorValue>
|
overrides?: Record<string, ColorValue>
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type ThemeVariant =
|
||||||
|
| ({ seeds: ThemeSeedColors; palette?: never } & ThemeVariantBase)
|
||||||
|
| ({ palette: ThemePaletteColors; seeds?: never } & ThemeVariantBase)
|
||||||
|
|
||||||
export interface DesktopTheme {
|
export interface DesktopTheme {
|
||||||
$schema?: string
|
$schema?: string
|
||||||
name: string
|
name: string
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@opencode-ai/util",
|
"name": "@opencode-ai/util",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "@opencode-ai/web",
|
"name": "@opencode-ai/web",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "astro dev",
|
"dev": "astro dev",
|
||||||
"dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev",
|
"dev:remote": "VITE_API_URL=https://api.opencode.ai astro dev",
|
||||||
|
|||||||
@@ -59,6 +59,7 @@ OpenCode Zen هو بوابة للذكاء الاصطناعي تتيح لك ال
|
|||||||
|
|
||||||
| النموذج | معرّف النموذج | نقطة النهاية | حزمة AI SDK |
|
| النموذج | معرّف النموذج | نقطة النهاية | حزمة AI SDK |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -141,6 +142,7 @@ https://opencode.ai/zen/v1/models
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -184,6 +186,19 @@ https://opencode.ai/zen/v1/models
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### نماذج مهملة
|
||||||
|
|
||||||
|
| النموذج | تاريخ الإيقاف |
|
||||||
|
| ---------------- | ------------- |
|
||||||
|
| Qwen3 Coder 480B | 6 فبراير 2026 |
|
||||||
|
| Kimi K2 Thinking | 6 مارس 2026 |
|
||||||
|
| Kimi K2 | 6 مارس 2026 |
|
||||||
|
| MiniMax M2.1 | 15 مارس 2026 |
|
||||||
|
| GLM 4.7 | 15 مارس 2026 |
|
||||||
|
| GLM 4.6 | 15 مارس 2026 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## الخصوصية
|
## الخصوصية
|
||||||
|
|
||||||
تتم استضافة جميع نماذجنا في الولايات المتحدة. يلتزم مزوّدونا بسياسة عدم الاحتفاظ بالبيانات (zero-retention) ولا يستخدمون بياناتك لتدريب النماذج، مع الاستثناءات التالية:
|
تتم استضافة جميع نماذجنا في الولايات المتحدة. يلتزم مزوّدونا بسياسة عدم الاحتفاظ بالبيانات (zero-retention) ولا يستخدمون بياناتك لتدريب النماذج، مع الاستثناءات التالية:
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ Nasim modelima mozete pristupiti i preko sljedecih API endpointa.
|
|||||||
|
|
||||||
| Model | Model ID | Endpoint | AI SDK Package |
|
| Model | Model ID | Endpoint | AI SDK Package |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -136,6 +137,7 @@ Podrzavamo pay-as-you-go model. Ispod su cijene **po 1M tokena**.
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -178,6 +180,19 @@ Na primjer, ako postavite mjesecni limit na $20, Zen nece potrositi vise od $20
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Zastarjeli modeli
|
||||||
|
|
||||||
|
| Model | Datum ukidanja |
|
||||||
|
| ---------------- | -------------- |
|
||||||
|
| Qwen3 Coder 480B | 6. feb. 2026. |
|
||||||
|
| Kimi K2 Thinking | 6. mart 2026. |
|
||||||
|
| Kimi K2 | 6. mart 2026. |
|
||||||
|
| MiniMax M2.1 | 15. mart 2026. |
|
||||||
|
| GLM 4.7 | 15. mart 2026. |
|
||||||
|
| GLM 4.6 | 15. mart 2026. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Privatnost
|
## Privatnost
|
||||||
|
|
||||||
Svi nasi modeli su hostovani u SAD-u. Provajderi prate zero-retention politiku i ne koriste vase podatke za treniranje modela, uz sljedece izuzetke:
|
Svi nasi modeli su hostovani u SAD-u. Provajderi prate zero-retention politiku i ne koriste vase podatke za treniranje modela, uz sljedece izuzetke:
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ Du kan også få adgang til vores modeller gennem følgende API-endpoints.
|
|||||||
|
|
||||||
| Model | Model ID | Endpoint | AI SDK Pakke |
|
| Model | Model ID | Endpoint | AI SDK Pakke |
|
||||||
| ------------------- | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------- | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -147,6 +148,7 @@ Vi støtter en pay-as-you-go-model. Nedenfor er priserne **per 1 million tokens*
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2,00 | $12,00 | $0,20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2,00 | $12,00 | $0,20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4,00 | $18,00 | $0,40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4,00 | $18,00 | $0,40 | - |
|
||||||
| Gemini 3 Flash | $0,50 | $3,00 | $0,05 | - |
|
| Gemini 3 Flash | $0,50 | $3,00 | $0,05 | - |
|
||||||
|
| GPT 5.4 | $2,50 | $15,00 | $0,25 | - |
|
||||||
| GPT 5.3 Codex | $1,75 | $14,00 | $0,175 | - |
|
| GPT 5.3 Codex | $1,75 | $14,00 | $0,175 | - |
|
||||||
| GPT 5.2 | $1,75 | $14,00 | $0,175 | - |
|
| GPT 5.2 | $1,75 | $14,00 | $0,175 | - |
|
||||||
| GPT 5.2 Codex | $1,75 | $14,00 | $0,175 | - |
|
| GPT 5.2 Codex | $1,75 | $14,00 | $0,175 | - |
|
||||||
@@ -192,6 +194,19 @@ at opkræve dig mere end $20, hvis din saldo går under $5.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Udfasede modeller
|
||||||
|
|
||||||
|
| Model | Udfasningsdato |
|
||||||
|
| ---------------- | -------------- |
|
||||||
|
| Qwen3-koder 480B | 6. feb. 2026 |
|
||||||
|
| Kimi K2 Tenker | 6. marts 2026 |
|
||||||
|
| Kimi K2 | 6. marts 2026 |
|
||||||
|
| MiniMax M2.1 | 15. marts 2026 |
|
||||||
|
| GLM 4.7 | 15. marts 2026 |
|
||||||
|
| GLM 4.6 | 15. marts 2026 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Privatliv
|
## Privatliv
|
||||||
|
|
||||||
Alle vores modeller er hostet i USA. Vores udbydere følger en nul-opbevaringspolitik og bruger ikke dine data til modeltræning, med følgende undtagelser:
|
Alle vores modeller er hostet i USA. Vores udbydere følger en nul-opbevaringspolitik og bruger ikke dine data til modeltræning, med følgende undtagelser:
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ Du kannst unsere Modelle auch ueber die folgenden API-Endpunkte aufrufen.
|
|||||||
|
|
||||||
| Model | Model ID | Endpoint | AI SDK Package |
|
| Model | Model ID | Endpoint | AI SDK Package |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -114,12 +115,12 @@ Unten siehst du die Preise **pro 1 Mio. Tokens**.
|
|||||||
| --------------------------------- | ------ | ------ | ----------- | ------------ |
|
| --------------------------------- | ------ | ------ | ----------- | ------------ |
|
||||||
| Big Pickle | Free | Free | Free | - |
|
| Big Pickle | Free | Free | Free | - |
|
||||||
| MiniMax M2.5 Free | Free | Free | Free | - |
|
| MiniMax M2.5 Free | Free | Free | Free | - |
|
||||||
| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - |
|
| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 |
|
||||||
| MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - |
|
| MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - |
|
||||||
| GLM 5 | $1.00 | $3.20 | $0.20 | - |
|
| GLM 5 | $1.00 | $3.20 | $0.20 | - |
|
||||||
| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
|
| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
|
||||||
| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
|
| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
|
||||||
| Kimi K2.5 | $0.60 | $3.00 | $0.08 | - |
|
| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - |
|
||||||
| Kimi K2 Thinking | $0.40 | $2.50 | - | - |
|
| Kimi K2 Thinking | $0.40 | $2.50 | - | - |
|
||||||
| Kimi K2 | $0.40 | $2.50 | - | - |
|
| Kimi K2 | $0.40 | $2.50 | - | - |
|
||||||
| Qwen3 Coder 480B | $0.45 | $1.50 | - | - |
|
| Qwen3 Coder 480B | $0.45 | $1.50 | - | - |
|
||||||
@@ -140,6 +141,7 @@ Unten siehst du die Preise **pro 1 Mio. Tokens**.
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -184,6 +186,19 @@ Mit aktiviertem Auto-Reload kann die Abrechnung dennoch darueber liegen, falls d
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Veraltete Modelle
|
||||||
|
|
||||||
|
| Model | Datum der Abschaltung |
|
||||||
|
| ---------------- | --------------------- |
|
||||||
|
| Qwen3 Coder 480B | 6. Feb. 2026 |
|
||||||
|
| Kimi K2 Thinking | 6. Maerz 2026 |
|
||||||
|
| Kimi K2 | 6. Maerz 2026 |
|
||||||
|
| MiniMax M2.1 | 15. Maerz 2026 |
|
||||||
|
| GLM 4.7 | 15. Maerz 2026 |
|
||||||
|
| GLM 4.6 | 15. Maerz 2026 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Datenschutz
|
## Datenschutz
|
||||||
|
|
||||||
Alle Modelle werden in den USA gehostet.
|
Alle Modelle werden in den USA gehostet.
|
||||||
|
|||||||
@@ -62,6 +62,7 @@ También puede acceder a nuestros modelos a través de los siguientes puntos fin
|
|||||||
|
|
||||||
| Modelo | Model ID | Endpoint | AI SDK package |
|
| Modelo | Model ID | Endpoint | AI SDK package |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -145,6 +146,7 @@ Apoyamos un modelo de pago por uso. A continuación se muestran los precios **po
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0,20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0,20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0,40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0,40 | - |
|
||||||
| Gemini 3 Flash | $0,50 | $3.00 | $0,05 | - |
|
| Gemini 3 Flash | $0,50 | $3.00 | $0,05 | - |
|
||||||
|
| GPT 5.4 | $2,50 | $15,00 | $0,25 | - |
|
||||||
| GPT 5.3 Codex | $1,75 | $14.00 | $0,175 | - |
|
| GPT 5.3 Codex | $1,75 | $14.00 | $0,175 | - |
|
||||||
| GPT 5.2 | $1,75 | $14.00 | $0,175 | - |
|
| GPT 5.2 | $1,75 | $14.00 | $0,175 | - |
|
||||||
| GPT 5.2 Codex | $1,75 | $14.00 | $0,175 | - |
|
| GPT 5.2 Codex | $1,75 | $14.00 | $0,175 | - |
|
||||||
@@ -190,6 +192,19 @@ cobrarle más de $20 si su saldo es inferior a $5.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Modelos obsoletos
|
||||||
|
|
||||||
|
| Modelo | Fecha de retiro |
|
||||||
|
| ---------------- | ------------------- |
|
||||||
|
| Qwen3 Coder 480B | 6 de feb. de 2026 |
|
||||||
|
| Kimi K2 Thinking | 6 de marzo de 2026 |
|
||||||
|
| Kimi K2 | 6 de marzo de 2026 |
|
||||||
|
| MiniMax M2.1 | 15 de marzo de 2026 |
|
||||||
|
| GLM 4.7 | 15 de marzo de 2026 |
|
||||||
|
| GLM 4.6 | 15 de marzo de 2026 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Privacidad
|
## Privacidad
|
||||||
|
|
||||||
Todos nuestros modelos están alojados en los EE. UU. Nuestros proveedores siguen una política de retención cero y no utilizan sus datos para la capacitación de modelos, con las siguientes excepciones:
|
Todos nuestros modelos están alojados en los EE. UU. Nuestros proveedores siguen una política de retención cero y no utilizan sus datos para la capacitación de modelos, con las siguientes excepciones:
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ Vous pouvez également accéder à nos modèles via les points de terminaison AP
|
|||||||
|
|
||||||
| Modèle | ID du modèle | Point de terminaison | Package SDK IA |
|
| Modèle | ID du modèle | Point de terminaison | Package SDK IA |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -136,6 +137,7 @@ Nous soutenons un modèle de paiement à l'utilisation. Vous trouverez ci-dessou
|
|||||||
| Gemini 3 Pro (≤ 200K jetons) | 2,00 $ | 12,00 $ | 0,20 $ | - |
|
| Gemini 3 Pro (≤ 200K jetons) | 2,00 $ | 12,00 $ | 0,20 $ | - |
|
||||||
| Gemini 3 Pro (> 200K jetons) | 4,00 $ | 18,00 $ | 0,40 $ | - |
|
| Gemini 3 Pro (> 200K jetons) | 4,00 $ | 18,00 $ | 0,40 $ | - |
|
||||||
| Gemini 3 Flash | 0,50 $ | 3,00 $ | 0,05 $ | - |
|
| Gemini 3 Flash | 0,50 $ | 3,00 $ | 0,05 $ | - |
|
||||||
|
| GPT 5.4 | 2,50 $ | 15,00 $ | 0,25 $ | - |
|
||||||
| GPT 5.3 Codex | 1,75 $ | 14,00 $ | 0,175 $ | - |
|
| GPT 5.3 Codex | 1,75 $ | 14,00 $ | 0,175 $ | - |
|
||||||
| GPT 5.2 | 1,75 $ | 14,00 $ | 0,175 $ | - |
|
| GPT 5.2 | 1,75 $ | 14,00 $ | 0,175 $ | - |
|
||||||
| GPT 5.2 Codex | 1,75 $ | 14,00 $ | 0,175 $ | - |
|
| GPT 5.2 Codex | 1,75 $ | 14,00 $ | 0,175 $ | - |
|
||||||
@@ -178,6 +180,19 @@ Par exemple, disons que vous définissez une limite d'utilisation mensuelle à 2
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Modèles obsolètes
|
||||||
|
|
||||||
|
| Modèle | Date de dépréciation |
|
||||||
|
| ---------------- | -------------------- |
|
||||||
|
| Qwen3 Coder 480B | 6 février 2026 |
|
||||||
|
| Kimi K2 Thinking | 6 mars 2026 |
|
||||||
|
| Kimi K2 | 6 mars 2026 |
|
||||||
|
| MiniMax M2.1 | 15 mars 2026 |
|
||||||
|
| GLM 4.7 | 15 mars 2026 |
|
||||||
|
| GLM 4.6 | 15 mars 2026 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Confidentialité
|
## Confidentialité
|
||||||
|
|
||||||
Tous nos modèles sont hébergés aux États-Unis. Nos fournisseurs suivent une politique de rétention zéro et n'utilisent pas vos données pour la formation de modèles, avec les exceptions suivantes :
|
Tous nos modèles sont hébergés aux États-Unis. Nos fournisseurs suivent une politique de rétention zéro et n'utilisent pas vos données pour la formation de modèles, avec les exceptions suivantes :
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ Puoi anche accedere ai nostri modelli tramite i seguenti endpoint API.
|
|||||||
|
|
||||||
| Modello | ID modello | Endpoint | Pacchetto AI SDK |
|
| Modello | ID modello | Endpoint | Pacchetto AI SDK |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -136,6 +137,7 @@ Supportiamo un modello pay-as-you-go. Qui sotto trovi i prezzi **per 1M token**.
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -178,6 +180,19 @@ Per esempio, se imposti un limite mensile a $20, Zen non usera piu di $20 in un
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Modelli deprecati
|
||||||
|
|
||||||
|
| Modello | Data di deprecazione |
|
||||||
|
| ---------------- | -------------------- |
|
||||||
|
| Qwen3 Coder 480B | 6 feb 2026 |
|
||||||
|
| Kimi K2 Thinking | 6 mar 2026 |
|
||||||
|
| Kimi K2 | 6 mar 2026 |
|
||||||
|
| MiniMax M2.1 | 15 mar 2026 |
|
||||||
|
| GLM 4.7 | 15 mar 2026 |
|
||||||
|
| GLM 4.6 | 15 mar 2026 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Privacy
|
## Privacy
|
||||||
|
|
||||||
Tutti i nostri modelli sono ospitati negli US. I nostri provider seguono una policy di zero-retention e non usano i tuoi dati per training dei modelli, con le seguenti eccezioni:
|
Tutti i nostri modelli sono ospitati negli US. I nostri provider seguono una policy di zero-retention e non usano i tuoi dati per training dei modelli, con le seguenti eccezioni:
|
||||||
|
|||||||
@@ -54,6 +54,7 @@ OpenCode Zen は、OpenCode の他のプロバイダーと同様に機能しま
|
|||||||
|
|
||||||
| Model | Model ID | Endpoint | AI SDK Package |
|
| Model | Model ID | Endpoint | AI SDK Package |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -137,6 +138,7 @@ https://opencode.ai/zen/v1/models
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -179,6 +181,19 @@ https://opencode.ai/zen/v1/models
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### 非推奨モデル
|
||||||
|
|
||||||
|
| Model | Deprecation date |
|
||||||
|
| ---------------- | ---------------- |
|
||||||
|
| Qwen3 Coder 480B | 2026年2月6日 |
|
||||||
|
| Kimi K2 Thinking | 2026年3月6日 |
|
||||||
|
| Kimi K2 | 2026年3月6日 |
|
||||||
|
| MiniMax M2.1 | 2026年3月15日 |
|
||||||
|
| GLM 4.7 | 2026年3月15日 |
|
||||||
|
| GLM 4.6 | 2026年3月15日 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## プライバシー
|
## プライバシー
|
||||||
|
|
||||||
すべてのモデルは米国でホストされています。当社のプロバイダーはゼロ保持ポリシーに従い、次の例外を除いて、モデルのトレーニングにデータを使用しません。
|
すべてのモデルは米国でホストされています。当社のプロバイダーはゼロ保持ポリシーに従い、次の例外を除いて、モデルのトレーニングにデータを使用しません。
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ OpenCode Zen은 OpenCode의 다른 제공자와 동일한 방식으로 작동합
|
|||||||
|
|
||||||
| 모델 | 모델 ID | 엔드포인트 | AI SDK 패키지 |
|
| 모델 | 모델 ID | 엔드포인트 | AI SDK 패키지 |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -111,12 +112,12 @@ https://opencode.ai/zen/v1/models
|
|||||||
| --------------------------------- | ------ | ------ | --------- | --------- |
|
| --------------------------------- | ------ | ------ | --------- | --------- |
|
||||||
| Big Pickle | Free | Free | Free | - |
|
| Big Pickle | Free | Free | Free | - |
|
||||||
| MiniMax M2.5 Free | Free | Free | Free | - |
|
| MiniMax M2.5 Free | Free | Free | Free | - |
|
||||||
| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - |
|
| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 |
|
||||||
| MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - |
|
| MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - |
|
||||||
| GLM 5 | $1.00 | $3.20 | $0.20 | - |
|
| GLM 5 | $1.00 | $3.20 | $0.20 | - |
|
||||||
| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
|
| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
|
||||||
| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
|
| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
|
||||||
| Kimi K2.5 | $0.60 | $3.00 | $0.08 | - |
|
| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - |
|
||||||
| Kimi K2 Thinking | $0.40 | $2.50 | - | - |
|
| Kimi K2 Thinking | $0.40 | $2.50 | - | - |
|
||||||
| Kimi K2 | $0.40 | $2.50 | - | - |
|
| Kimi K2 | $0.40 | $2.50 | - | - |
|
||||||
| Qwen3 Coder 480B | $0.45 | $1.50 | - | - |
|
| Qwen3 Coder 480B | $0.45 | $1.50 | - | - |
|
||||||
@@ -137,6 +138,7 @@ https://opencode.ai/zen/v1/models
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -180,6 +182,19 @@ https://opencode.ai/zen/v1/models
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### 지원 중단 모델
|
||||||
|
|
||||||
|
| 모델 | 지원 중단일 |
|
||||||
|
| ---------------- | --------------- |
|
||||||
|
| Qwen3 Coder 480B | 2026년 2월 6일 |
|
||||||
|
| Kimi K2 Thinking | 2026년 3월 6일 |
|
||||||
|
| Kimi K2 | 2026년 3월 6일 |
|
||||||
|
| MiniMax M2.1 | 2026년 3월 15일 |
|
||||||
|
| GLM 4.7 | 2026년 3월 15일 |
|
||||||
|
| GLM 4.6 | 2026년 3월 15일 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 개인정보 보호
|
## 개인정보 보호
|
||||||
|
|
||||||
당사의 모든 모델은 미국에서 호스팅됩니다. 당사 제공자는 데이터 무보존(zero-retention) 정책을 따르며, 아래의 예외를 제외하고는 귀하의 데이터를 모델 학습에 사용하지 않습니다.
|
당사의 모든 모델은 미국에서 호스팅됩니다. 당사 제공자는 데이터 무보존(zero-retention) 정책을 따르며, 아래의 예외를 제외하고는 귀하의 데이터를 모델 학습에 사용하지 않습니다.
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ Du kan også få tilgang til modellene våre gjennom følgende API-endepunkter.
|
|||||||
|
|
||||||
| Modell | Modell ID | Endepunkt | AI SDK Pakke |
|
| Modell | Modell ID | Endepunkt | AI SDK Pakke |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -121,7 +122,7 @@ Vi støtter en pay-as-you-go-modell. Nedenfor er prisene **per 1 million tokens*
|
|||||||
| --------------------------------- | ------- | ------ | ------------- | --------------- |
|
| --------------------------------- | ------- | ------ | ------------- | --------------- |
|
||||||
| Big Pickle | Gratis | Gratis | Gratis | - |
|
| Big Pickle | Gratis | Gratis | Gratis | - |
|
||||||
| MiniMax M2.5 Free | Gratis | Gratis | Gratis | - |
|
| MiniMax M2.5 Free | Gratis | Gratis | Gratis | - |
|
||||||
| MiniMax M2.5 | $0,30 | $1,20 | $0,06 | - |
|
| MiniMax M2.5 | $0,30 | $1,20 | $0,06 | $0,375 |
|
||||||
| MiniMax M2.1 | $0,30 | $1,20 | $0,10 | - |
|
| MiniMax M2.1 | $0,30 | $1,20 | $0,10 | - |
|
||||||
| GLM 5 | $1,00 | $3,20 | $0,20 | - |
|
| GLM 5 | $1,00 | $3,20 | $0,20 | - |
|
||||||
| GLM 4.7 | $0,60 | $2,20 | $0,10 | - |
|
| GLM 4.7 | $0,60 | $2,20 | $0,10 | - |
|
||||||
@@ -147,6 +148,7 @@ Vi støtter en pay-as-you-go-modell. Nedenfor er prisene **per 1 million tokens*
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2,00 | $12,00 | $0,20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2,00 | $12,00 | $0,20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4,00 | $18,00 | $0,40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4,00 | $18,00 | $0,40 | - |
|
||||||
| Gemini 3 Flash | $0,50 | $3,00 | $0,05 | - |
|
| Gemini 3 Flash | $0,50 | $3,00 | $0,05 | - |
|
||||||
|
| GPT 5.4 | $2,50 | $15,00 | $0,25 | - |
|
||||||
| GPT 5.3 Codex | $1,75 | $14,00 | $0,175 | - |
|
| GPT 5.3 Codex | $1,75 | $14,00 | $0,175 | - |
|
||||||
| GPT 5.2 | $1,75 | $14,00 | $0,175 | - |
|
| GPT 5.2 | $1,75 | $14,00 | $0,175 | - |
|
||||||
| GPT 5.2 Codex | $1,75 | $14,00 | $0,175 | - |
|
| GPT 5.2 Codex | $1,75 | $14,00 | $0,175 | - |
|
||||||
@@ -192,6 +194,19 @@ belaster deg mer enn $20 hvis saldoen din går under $5.
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Utfasede modeller
|
||||||
|
|
||||||
|
| Modell | Utfasingdato |
|
||||||
|
| ---------------- | ------------- |
|
||||||
|
| Qwen3 Coder 480B | 6. feb. 2026 |
|
||||||
|
| Kimi K2 Thinking | 6. mars 2026 |
|
||||||
|
| Kimi K2 | 6. mars 2026 |
|
||||||
|
| MiniMax M2.1 | 15. mars 2026 |
|
||||||
|
| GLM 4.7 | 15. mars 2026 |
|
||||||
|
| GLM 4.6 | 15. mars 2026 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Personvern
|
## Personvern
|
||||||
|
|
||||||
Alle våre modeller er hostet i USA. Leverandørene våre følger retningslinjer om ingen datalagring og bruker ikke dataene dine til modellopplæring, med følgende unntak:
|
Alle våre modeller er hostet i USA. Leverandørene våre følger retningslinjer om ingen datalagring og bruker ikke dataene dine til modellopplæring, med følgende unntak:
|
||||||
|
|||||||
@@ -1,21 +1,21 @@
|
|||||||
---
|
---
|
||||||
title: Zen
|
title: Zen
|
||||||
description: Wyselekcjonowana lista modeli dostarczonych przez opencode.
|
description: Wyselekcjonowana lista modeli dostarczonych przez OpenCode.
|
||||||
---
|
---
|
||||||
|
|
||||||
import config from "../../../../config.mjs"
|
import config from "../../../config.mjs"
|
||||||
export const console = config.console
|
export const console = config.console
|
||||||
export const email = `mailto:${config.email}`
|
export const email = `mailto:${config.email}`
|
||||||
|
|
||||||
OpenCode Zen to lista przetestowanych i zweryfikowanych modeli udostępniona przez zespół opencode.
|
OpenCode Zen to lista przetestowanych i zweryfikowanych modeli udostępniona przez zespół OpenCode.
|
||||||
|
|
||||||
:::note
|
:::note
|
||||||
OpenCode Zen is currently in beta.
|
OpenCode Zen jest obecnie w wersji beta.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
Zen działa jak każdy inny dostawca opencode. Logujesz się do OpenCode Zen i dostajesz
|
Zen działa jak każdy inny dostawca w OpenCode. Logujesz się do OpenCode Zen i otrzymujesz
|
||||||
Twój klucz API. Jest **całkowicie opcjonalny** i nie musisz go używać, aby z niego korzystać
|
swój klucz API. Jest to **całkowicie opcjonalne** i nie musisz tego używać, aby korzystać z
|
||||||
opencode.
|
OpenCode.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -23,23 +23,23 @@ opencode.
|
|||||||
|
|
||||||
Istnieje ogromna liczba modeli, ale tylko kilka z nich
|
Istnieje ogromna liczba modeli, ale tylko kilka z nich
|
||||||
działa dobrze jako agenci kodujący. Dodatkowo większość dostawców jest
|
działa dobrze jako agenci kodujący. Dodatkowo większość dostawców jest
|
||||||
skonfigurowana bardzo różnie; więc otrzymujesz zupełnie inną wydajność i jakość.
|
skonfigurowana bardzo różnie, więc otrzymujesz bardzo różną wydajność i jakość.
|
||||||
|
|
||||||
:::tip
|
:::tip
|
||||||
Przetestowaliśmy wybraną grupę modeli i dostawców, którzy dobrze współpracują z opencode.
|
Przetestowaliśmy wybraną grupę modeli i dostawców, którzy dobrze współpracują z OpenCode.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
Jeśli więc używasz modelu za pośrednictwem czegoś takiego jak OpenRouter, nigdy nie będzie to możliwe
|
Jeśli więc używasz modelu za pośrednictwem czegoś takiego jak OpenRouter, nigdy nie możesz być
|
||||||
pewien, czy otrzymujesz najlepszą wersję modelu, jaki chcesz.
|
pewien, czy otrzymujesz najlepszą wersję modelu, jaki chcesz.
|
||||||
|
|
||||||
Aby to naprawić, zrobiliśmy kilka rzeczy:
|
Aby to naprawić, zrobiliśmy kilka rzeczy:
|
||||||
|
|
||||||
1. Przetestowaliśmy wybraną grupę modeli i rozmawialiśmy z ich zespołami o tym, jak to zrobić
|
1. Przetestowaliśmy wybraną grupę modeli i rozmawialiśmy z ich zespołami o tym, jak
|
||||||
najlepiej je uruchom.
|
najlepiej je uruchamiać.
|
||||||
2. Następnie współpracowaliśmy z kilkoma dostawcami, aby upewnić się, że są one obsługiwane
|
2. Następnie współpracowaliśmy z kilkoma dostawcami, aby upewnić się, że są one obsługiwane
|
||||||
correctly.
|
poprawnie.
|
||||||
3. Na koniec porównaliśmy kombinację modelu/dostawcy i otrzymaliśmy wynik
|
3. Na koniec sprawdziliśmy wydajność kombinacji modelu/dostawcy i stworzyliśmy
|
||||||
z listą, którą z przyjemnością polecamy.
|
listę, którą z czystym sumieniem polecamy.
|
||||||
|
|
||||||
OpenCode Zen to brama AI, która zapewnia dostęp do tych modeli.
|
OpenCode Zen to brama AI, która zapewnia dostęp do tych modeli.
|
||||||
|
|
||||||
@@ -47,14 +47,14 @@ OpenCode Zen to brama AI, która zapewnia dostęp do tych modeli.
|
|||||||
|
|
||||||
## Jak to działa
|
## Jak to działa
|
||||||
|
|
||||||
OpenCode Zen działa jak każdy inny dostawca opencode.
|
OpenCode Zen działa jak każdy inny dostawca w OpenCode.
|
||||||
|
|
||||||
1. Logujesz się do **<a href={console}>OpenCode Zen</a>**, dodajesz swoje rozliczenia
|
1. Logujesz się do **<a href={console}>OpenCode Zen</a>**, dodajesz dane rozliczeniowe
|
||||||
szczegóły i skopiuj klucz API.
|
i kopiujesz swój klucz API.
|
||||||
2. Uruchamiasz polecenie `/connect` w TUI, wybierasz OpenCode Zen i wklejasz klucz API.
|
2. Uruchamiasz polecenie `/connect` w TUI, wybierasz OpenCode Zen i wklejasz klucz API.
|
||||||
3. Uruchom `/models` w TUI, aby zobaczyć listę zalecanych przez nas modeli.
|
3. Uruchom `/models` w TUI, aby zobaczyć listę zalecanych przez nas modeli.
|
||||||
|
|
||||||
Opłata jest pobierana za każde żądanie i możesz dodać kredyty do swojego konta.
|
Opłata jest pobierana za każde żądanie i możesz dodać środki do swojego konta.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -64,6 +64,7 @@ Dostęp do naszych modeli można również uzyskać za pośrednictwem następuj
|
|||||||
|
|
||||||
| Model | Identyfikator modelu | Punkt końcowy | Pakiet SDK AI |
|
| Model | Identyfikator modelu | Punkt końcowy | Pakiet SDK AI |
|
||||||
| ------------------ | -------------------- | -------------------------------------------------- | --------------------------- |
|
| ------------------ | -------------------- | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -97,9 +98,9 @@ Dostęp do naszych modeli można również uzyskać za pośrednictwem następuj
|
|||||||
| Qwen3 Coder 480B | qwen3-coder | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
| Qwen3 Coder 480B | qwen3-coder | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||||
| Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
| Big Pickle | big-pickle | `https://opencode.ai/zen/v1/chat/completions` | `@ai-sdk/openai-compatible` |
|
||||||
|
|
||||||
[Identyfikator modelu](/docs/config/#models) w konfiguracji opencode
|
[Identyfikator modelu](/docs/config/#models) w konfiguracji OpenCode
|
||||||
używa formatu `opencode/<model-id>`. Na przykład w przypadku Kodeksu GPT 5.2 zrobiłbyś to
|
używa formatu `opencode/<model-id>`. Na przykład w przypadku GPT 5.2 Codex użyłbyś
|
||||||
użyj `opencode/gpt-5.2-codex` w swojej konfiguracji.
|
`opencode/gpt-5.2-codex` w swojej konfiguracji.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -121,12 +122,12 @@ Wspieramy model pay-as-you-go. Poniżej znajdują się ceny **za 1M tokenów**.
|
|||||||
| --------------------------------- | ------- | ------- | --------------------------- | -------------------------- |
|
| --------------------------------- | ------- | ------- | --------------------------- | -------------------------- |
|
||||||
| Big Pickle | Free | Free | Free | - |
|
| Big Pickle | Free | Free | Free | - |
|
||||||
| MiniMax M2.5 Free | Free | Free | Free | - |
|
| MiniMax M2.5 Free | Free | Free | Free | - |
|
||||||
| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - |
|
| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 |
|
||||||
| MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - |
|
| MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - |
|
||||||
| GLM 5 | $1.00 | $3.20 | $0.20 | - |
|
| GLM 5 | $1.00 | $3.20 | $0.20 | - |
|
||||||
| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
|
| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
|
||||||
| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
|
| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
|
||||||
| Kimi K2.5 | $0.60 | $3.00 | $0.08 | - |
|
| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - |
|
||||||
| Kimi K2 Thinking | $0.40 | $2.50 | - | - |
|
| Kimi K2 Thinking | $0.40 | $2.50 | - | - |
|
||||||
| Kimi K2 | $0.40 | $2.50 | - | - |
|
| Kimi K2 | $0.40 | $2.50 | - | - |
|
||||||
| Qwen3 Coder 480B | $0.45 | $1.50 | - | - |
|
| Qwen3 Coder 480B | $0.45 | $1.50 | - | - |
|
||||||
@@ -147,6 +148,7 @@ Wspieramy model pay-as-you-go. Poniżej znajdują się ceny **za 1M tokenów**.
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -158,10 +160,10 @@ Wspieramy model pay-as-you-go. Poniżej znajdują się ceny **za 1M tokenów**.
|
|||||||
| GPT 5 Codex | $1.07 | $8.50 | $0.107 | - |
|
| GPT 5 Codex | $1.07 | $8.50 | $0.107 | - |
|
||||||
| GPT 5 Nano | Free | Free | Free | - |
|
| GPT 5 Nano | Free | Free | Free | - |
|
||||||
|
|
||||||
Możesz zauważyć _Claude Haiku 3.5_ w swojej historii użytkowania. To jest [model niskokosztowy](/docs/config/#models), który służy do generowania tytułów sesji.
|
Możesz zauważyć _Claude Haiku 3.5_ w swojej historii użytkowania. Jest to [tani model](/docs/config/#models), który jest używany do generowania tytułów Twoich sesji.
|
||||||
|
|
||||||
:::note
|
:::note
|
||||||
Opłaty za karty kredytowe są przenoszone na koszt (4,4% + 0,30 USD za transakcję); nie pobieramy żadnych dodatkowych opłat.
|
Opłaty za karty kredytowe są przenoszone po kosztach (4,4% + 0,30 USD za transakcję); nie pobieramy nic poza tym.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
Darmowe modele:
|
Darmowe modele:
|
||||||
@@ -177,18 +179,31 @@ Darmowe modele:
|
|||||||
|
|
||||||
Jeśli Twoje saldo spadnie poniżej 5 USD, Zen automatycznie doładuje 20 USD.
|
Jeśli Twoje saldo spadnie poniżej 5 USD, Zen automatycznie doładuje 20 USD.
|
||||||
|
|
||||||
Możesz zmienić kwotę automatycznego doładowania. Możesz także całkowicie wyłączyć automatyczne przeładowywanie.
|
Możesz zmienić kwotę automatycznego doładowania. Możesz także całkowicie wyłączyć automatyczne doładowanie.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### Limity miesięczne
|
### Limity miesięczne
|
||||||
|
|
||||||
Możesz także ustawić miesięczny limit wykorzystania dla całego obszaru roboczego i dla każdego z nich
|
Możesz także ustawić miesięczny limit użytkowania dla całego obszaru roboczego i dla każdego
|
||||||
członek Twojego zespołu.
|
członka Twojego zespołu.
|
||||||
|
|
||||||
Załóżmy na przykład, że ustawiłeś miesięczny limit użytkowania na 20 USD, Zen nie będzie z niego korzystał
|
Na przykład, jeśli ustawisz miesięczny limit użytkowania na 20 USD, Zen nie zużyje
|
||||||
ponad 20 dolarów miesięcznie. Ale jeśli masz włączone automatyczne przeładowywanie, Zen może się skończyć
|
więcej niż 20 dolarów w miesiącu. Ale jeśli masz włączone automatyczne doładowanie, Zen może
|
||||||
obciąży Cię kwotą wyższą niż 20 USD, jeśli saldo spadnie poniżej 5 USD.
|
obciążyć Cię kwotą wyższą niż 20 USD, jeśli saldo spadnie poniżej 5 USD.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Przestarzałe modele
|
||||||
|
|
||||||
|
| Model | Data wycofania |
|
||||||
|
| ---------------- | -------------- |
|
||||||
|
| Qwen3 Coder 480B | 6 lutego 2026 |
|
||||||
|
| Kimi K2 Thinking | 6 marca 2026 |
|
||||||
|
| Kimi K2 | 6 marca 2026 |
|
||||||
|
| MiniMax M2.1 | 15 marca 2026 |
|
||||||
|
| GLM 4.7 | 15 marca 2026 |
|
||||||
|
| GLM 4.6 | 15 marca 2026 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -198,22 +213,22 @@ Wszystkie nasze modele są hostowane w USA. Nasi dostawcy przestrzegają polityk
|
|||||||
|
|
||||||
- Big Pickle: W okresie bezpłatnym zebrane dane mogą zostać wykorzystane do udoskonalenia modelu.
|
- Big Pickle: W okresie bezpłatnym zebrane dane mogą zostać wykorzystane do udoskonalenia modelu.
|
||||||
- MiniMax M2.5 Free: W okresie bezpłatnym zebrane dane mogą zostać wykorzystane do udoskonalenia modelu.
|
- MiniMax M2.5 Free: W okresie bezpłatnym zebrane dane mogą zostać wykorzystane do udoskonalenia modelu.
|
||||||
- Interfejsy API OpenAI: żądania są przechowywane przez 30 dni zgodnie z [Zasadami dotyczącymi danych OpenAI](https://platform.openai.com/docs/guides/your-data).
|
- API OpenAI: Żądania są przechowywane przez 30 dni zgodnie z [Zasadami dotyczącymi danych OpenAI](https://platform.openai.com/docs/guides/your-data).
|
||||||
- Interfejsy API Anthropic: żądania są przechowywane przez 30 dni zgodnie z [Zasadami dotyczącymi danych firmy Anthropic](https://docs.anthropic.com/en/docs/claude-code/data-usage).
|
- API Anthropic: Żądania są przechowywane przez 30 dni zgodnie z [Zasadami dotyczącymi danych Anthropic](https://docs.anthropic.com/en/docs/claude-code/data-usage).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Dla zespołów
|
## Dla zespołów
|
||||||
|
|
||||||
Zen świetnie sprawdza się także w zespołach. Możesz zapraszać członków zespołu, przypisywać role, zarządzać
|
Zen działa świetnie także dla zespołów. Możesz zapraszać członków zespołu, przypisywać role, dobierać
|
||||||
modele, z których korzysta Twój zespół i nie tylko.
|
modele, z których korzysta Twój zespół i nie tylko.
|
||||||
|
|
||||||
:::note
|
:::note
|
||||||
Obszary robocze są obecnie bezpłatne dla zespołów w ramach wersji beta.
|
Obszary robocze są obecnie bezpłatne dla zespołów w ramach wersji beta.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
Zarządzanie obszarem roboczym jest obecnie bezpłatne dla zespołów w ramach wersji beta. Będziemy
|
Zarządzanie obszarem roboczym jest obecnie bezpłatne dla zespołów w ramach wersji beta.
|
||||||
wkrótce udostępnimy więcej szczegółów na temat cen.
|
Wkrótce udostępnimy więcej szczegółów na temat cen.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -221,8 +236,8 @@ wkrótce udostępnimy więcej szczegółów na temat cen.
|
|||||||
|
|
||||||
Możesz zapraszać członków zespołu do swojego obszaru roboczego i przypisywać role:
|
Możesz zapraszać członków zespołu do swojego obszaru roboczego i przypisywać role:
|
||||||
|
|
||||||
- **Administrator**: Zarządzaj modelami, członkami, kluczami API i rozliczeniami
|
- **Admin**: Zarządzanie modelami, członkami, kluczami API i rozliczeniami
|
||||||
- **Członek**: Zarządzaj tylko własnymi kluczami API
|
- **Członek**: Zarządzanie tylko własnymi kluczami API
|
||||||
|
|
||||||
Administratorzy mogą także ustawić miesięczne limity wydatków dla każdego członka, aby utrzymać koszty pod kontrolą.
|
Administratorzy mogą także ustawić miesięczne limity wydatków dla każdego członka, aby utrzymać koszty pod kontrolą.
|
||||||
|
|
||||||
@@ -233,7 +248,7 @@ Administratorzy mogą także ustawić miesięczne limity wydatków dla każdego
|
|||||||
Administratorzy mogą włączać i wyłączać określone modele w obszarze roboczym. Żądania skierowane do wyłączonego modelu zwrócą błąd.
|
Administratorzy mogą włączać i wyłączać określone modele w obszarze roboczym. Żądania skierowane do wyłączonego modelu zwrócą błąd.
|
||||||
|
|
||||||
Jest to przydatne w przypadkach, gdy chcesz wyłączyć korzystanie z modelu, który
|
Jest to przydatne w przypadkach, gdy chcesz wyłączyć korzystanie z modelu, który
|
||||||
collects data.
|
zbiera dane.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -253,6 +268,6 @@ i chcesz go używać zamiast tego, który zapewnia Zen.
|
|||||||
Stworzyliśmy OpenCode Zen, aby:
|
Stworzyliśmy OpenCode Zen, aby:
|
||||||
|
|
||||||
1. **Testować** (Benchmark) najlepsze modele/dostawców dla agentów kodujących.
|
1. **Testować** (Benchmark) najlepsze modele/dostawców dla agentów kodujących.
|
||||||
2. Miej dostęp do opcji **najwyższej jakości**, a nie obniżaj wydajności ani nie kieruj się do tańszych dostawców.
|
2. Mieć dostęp do opcji **najwyższej jakości**, a nie obniżać wydajności ani nie kierować do tańszych dostawców.
|
||||||
3. Przekaż wszelkie **obniżki cen**, sprzedając po kosztach; więc jedyną marżą jest pokrycie naszych opłat manipulacyjnych.
|
3. Przekazywać wszelkie **obniżki cen**, sprzedając po kosztach; więc jedyną marżą jest pokrycie naszych opłat manipulacyjnych.
|
||||||
4. Nie **nie blokuj**, umożliwiając używanie go z dowolnym innym agentem kodującym. I zawsze pozwalaj na korzystanie z opencode dowolnego innego dostawcy.
|
4. Nie **mieć blokady** (no lock-in), umożliwiając używanie go z dowolnym innym agentem kodującym. I zawsze pozwalać na korzystanie z dowolnego innego dostawcy w OpenCode.
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ Você também pode acessar nossos modelos através dos seguintes endpoints da AP
|
|||||||
|
|
||||||
| Modelo | ID do Modelo | Endpoint | Pacote AI SDK |
|
| Modelo | ID do Modelo | Endpoint | Pacote AI SDK |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -136,6 +137,7 @@ Nós suportamos um modelo de pagamento conforme o uso. Abaixo estão os preços
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -178,6 +180,19 @@ Por exemplo, digamos que você defina um limite de uso mensal de $20, o Zen não
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Modelos obsoletos
|
||||||
|
|
||||||
|
| Modelo | Data de descontinuação |
|
||||||
|
| ---------------- | ---------------------- |
|
||||||
|
| Qwen3 Coder 480B | 6 de fev. de 2026 |
|
||||||
|
| Kimi K2 Thinking | 6 de mar. de 2026 |
|
||||||
|
| Kimi K2 | 6 de mar. de 2026 |
|
||||||
|
| MiniMax M2.1 | 15 de mar. de 2026 |
|
||||||
|
| GLM 4.7 | 15 de mar. de 2026 |
|
||||||
|
| GLM 4.6 | 15 de mar. de 2026 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Privacidade
|
## Privacidade
|
||||||
|
|
||||||
Todos os nossos modelos estão hospedados nos EUA. Nossos provedores seguem uma política de zero retenção e não usam seus dados para treinamento de modelos, com as seguintes exceções:
|
Todos os nossos modelos estão hospedados nos EUA. Nossos provedores seguem uma política de zero retenção e não usam seus dados para treinamento de modelos, com as seguintes exceções:
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ OpenCode Zen работает так же, как и любой другой п
|
|||||||
|
|
||||||
| Модель | Идентификатор модели | Конечная точка | Пакет AI SDK |
|
| Модель | Идентификатор модели | Конечная точка | Пакет AI SDK |
|
||||||
| ------------------ | -------------------- | -------------------------------------------------- | --------------------------- |
|
| ------------------ | -------------------- | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -146,6 +147,7 @@ https://opencode.ai/zen/v1/models
|
|||||||
| Gemini 3 Pro (≤ 200 тыс. токенов) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200 тыс. токенов) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200 тыс. токенов) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200 тыс. токенов) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -191,6 +193,19 @@ https://opencode.ai/zen/v1/models
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Устаревшие модели
|
||||||
|
|
||||||
|
| Модель | Дата отключения |
|
||||||
|
| ---------------- | ---------------- |
|
||||||
|
| Qwen3 Coder 480B | 6 февр. 2026 г. |
|
||||||
|
| Kimi K2 Thinking | 6 марта 2026 г. |
|
||||||
|
| Kimi K2 | 6 марта 2026 г. |
|
||||||
|
| MiniMax M2.1 | 15 марта 2026 г. |
|
||||||
|
| GLM 4.7 | 15 марта 2026 г. |
|
||||||
|
| GLM 4.6 | 15 марта 2026 г. |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Конфиденциальность
|
## Конфиденциальность
|
||||||
|
|
||||||
Все наши модели размещены в США. Наши поставщики придерживаются политики нулевого хранения и не используют ваши данные для обучения моделей, за следующими исключениями:
|
Все наши модели размещены в США. Наши поставщики придерживаются политики нулевого хранения и не используют ваши данные для обучения моделей, за следующими исключениями:
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ OpenCode Zen ทำงานเหมือนกับผู้ให้บร
|
|||||||
|
|
||||||
| Model | Model ID | Endpoint | แพ็คเกจ AI SDK |
|
| Model | Model ID | Endpoint | แพ็คเกจ AI SDK |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -121,12 +122,12 @@ https://opencode.ai/zen/v1/models
|
|||||||
| --------------------------------- | ---------- | -------- | ------- | ---------- |
|
| --------------------------------- | ---------- | -------- | ------- | ---------- |
|
||||||
| Big Pickle | ฟรี | ฟรี | ฟรี | - |
|
| Big Pickle | ฟรี | ฟรี | ฟรี | - |
|
||||||
| MiniMax M2.5 Free | ฟรี | ฟรี | ฟรี | - |
|
| MiniMax M2.5 Free | ฟรี | ฟรี | ฟรี | - |
|
||||||
| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | - |
|
| MiniMax M2.5 | $0.30 | $1.20 | $0.06 | $0.375 |
|
||||||
| MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - |
|
| MiniMax M2.1 | $0.30 | $1.20 | $0.10 | - |
|
||||||
| GLM 5 | $1.00 | $3.20 | $0.20 | - |
|
| GLM 5 | $1.00 | $3.20 | $0.20 | - |
|
||||||
| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
|
| GLM 4.7 | $0.60 | $2.20 | $0.10 | - |
|
||||||
| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
|
| GLM 4.6 | $0.60 | $2.20 | $0.10 | - |
|
||||||
| Kimi K2.5 | $0.60 | $3.00 | $0.08 | - |
|
| Kimi K2.5 | $0.60 | $3.00 | $0.10 | - |
|
||||||
| Kimi K2 Thinking | $0.40 | $2.50 | - | - |
|
| Kimi K2 Thinking | $0.40 | $2.50 | - | - |
|
||||||
| Kimi K2 | $0.40 | $2.50 | - | - |
|
| Kimi K2 | $0.40 | $2.50 | - | - |
|
||||||
| Qwen3 Coder 480B | $0.45 | $1.50 | - | - |
|
| Qwen3 Coder 480B | $0.45 | $1.50 | - | - |
|
||||||
@@ -147,6 +148,7 @@ https://opencode.ai/zen/v1/models
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -192,11 +194,24 @@ https://opencode.ai/zen/v1/models
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### โมเดลที่เลิกใช้แล้ว
|
||||||
|
|
||||||
|
| Model | วันที่เลิกใช้ |
|
||||||
|
| ---------------- | ------------- |
|
||||||
|
| Qwen3 Coder 480B | 6 ก.พ. 2026 |
|
||||||
|
| Kimi K2 Thinking | 6 มี.ค. 2026 |
|
||||||
|
| Kimi K2 | 6 มี.ค. 2026 |
|
||||||
|
| MiniMax M2.1 | 15 มี.ค. 2026 |
|
||||||
|
| GLM 4.7 | 15 มี.ค. 2026 |
|
||||||
|
| GLM 4.6 | 15 มี.ค. 2026 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## ความเป็นส่วนตัว
|
## ความเป็นส่วนตัว
|
||||||
|
|
||||||
โมเดลทั้งหมดของเราโฮสต์ในสหรัฐอเมริกา ผู้ให้บริการของเราปฏิบัติตามนโยบายการเก็บรักษาเป็นศูนย์ และไม่ใช้ข้อมูลของคุณสำหรับการฝึกโมเดล โดยมีข้อยกเว้นต่อไปนี้:
|
โมเดลทั้งหมดของเราโฮสต์ในสหรัฐอเมริกา ผู้ให้บริการของเราปฏิบัติตามนโยบายการเก็บรักษาเป็นศูนย์ และไม่ใช้ข้อมูลของคุณสำหรับการฝึกโมเดล โดยมีข้อยกเว้นต่อไปนี้:
|
||||||
|
|
||||||
- Big Pickle: ในช่วงระยะเวลาว่าง ข้อมูลที่รวบรวมอาจนำไปใช้ในการปรับปรุงโมเดลได้
|
- Big Pickle: ในช่วงระยะเวลาฟรี ข้อมูลที่รวบรวมอาจนำไปใช้ในการปรับปรุงโมเดลได้
|
||||||
- MiniMax M2.5 Free: ในช่วงระยะเวลาฟรี ข้อมูลที่รวบรวมอาจนำไปใช้ในการปรับปรุงโมเดล
|
- MiniMax M2.5 Free: ในช่วงระยะเวลาฟรี ข้อมูลที่รวบรวมอาจนำไปใช้ในการปรับปรุงโมเดล
|
||||||
- OpenAI API: คำขอจะถูกเก็บไว้เป็นเวลา 30 วันตาม [นโยบายข้อมูลของ OpenAI](https://platform.openai.com/docs/guides/your-data)
|
- OpenAI API: คำขอจะถูกเก็บไว้เป็นเวลา 30 วันตาม [นโยบายข้อมูลของ OpenAI](https://platform.openai.com/docs/guides/your-data)
|
||||||
- Anthropic API: คำขอจะถูกเก็บไว้เป็นเวลา 30 วันตาม [นโยบายข้อมูลของ Anthropic](https://docs.anthropic.com/en/docs/claude-code/data-usage)
|
- Anthropic API: คำขอจะถูกเก็บไว้เป็นเวลา 30 วันตาม [นโยบายข้อมูลของ Anthropic](https://docs.anthropic.com/en/docs/claude-code/data-usage)
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ Modellerimize aşağıdaki API uç noktaları aracılığıyla da erişebilirsin
|
|||||||
|
|
||||||
| Model | Model ID | Endpoint | AI SDK Package |
|
| Model | Model ID | Endpoint | AI SDK Package |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -136,6 +137,7 @@ Kullandıkça öde modelini destekliyoruz. Aşağıda **1 milyon token başına*
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -178,6 +180,19 @@ Ayrıca tüm çalışma alanı ve ekibinizin her üyesi için aylık kullanım l
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### Kullanımdan kaldırılan modeller
|
||||||
|
|
||||||
|
| Model | Kullanımdan kaldırılma tarihi |
|
||||||
|
| ---------------- | ----------------------------- |
|
||||||
|
| Qwen3 Coder 480B | 6 Şub 2026 |
|
||||||
|
| Kimi K2 Thinking | 6 Mar 2026 |
|
||||||
|
| Kimi K2 | 6 Mar 2026 |
|
||||||
|
| MiniMax M2.1 | 15 Mar 2026 |
|
||||||
|
| GLM 4.7 | 15 Mar 2026 |
|
||||||
|
| GLM 4.6 | 15 Mar 2026 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## Gizlilik
|
## Gizlilik
|
||||||
|
|
||||||
Tüm modellerimiz ABD'de barındırılmaktadır. Sağlayıcılarımız sıfır saklama politikasını izler ve aşağıdaki istisnalar dışında verilerinizi model eğitimi için kullanmaz:
|
Tüm modellerimiz ABD'de barındırılmaktadır. Sağlayıcılarımız sıfır saklama politikasını izler ve aşağıdaki istisnalar dışında verilerinizi model eğitimi için kullanmaz:
|
||||||
|
|||||||
@@ -64,6 +64,7 @@ You can also access our models through the following API endpoints.
|
|||||||
|
|
||||||
| Model | Model ID | Endpoint | AI SDK Package |
|
| Model | Model ID | Endpoint | AI SDK Package |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -147,6 +148,7 @@ We support a pay-as-you-go model. Below are the prices **per 1M tokens**.
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ OpenCode Zen 的工作方式与 OpenCode 中的任何其他提供商相同。
|
|||||||
|
|
||||||
| 模型 | 模型 ID | 端点 | AI SDK 包 |
|
| 模型 | 模型 ID | 端点 | AI SDK 包 |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -136,6 +137,7 @@ https://opencode.ai/zen/v1/models
|
|||||||
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K tokens) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K tokens) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -178,6 +180,19 @@ https://opencode.ai/zen/v1/models
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### 已弃用模型
|
||||||
|
|
||||||
|
| 模型 | 弃用日期 |
|
||||||
|
| ---------------- | ------------------ |
|
||||||
|
| Qwen3 Coder 480B | 2026 年 2 月 6 日 |
|
||||||
|
| Kimi K2 Thinking | 2026 年 3 月 6 日 |
|
||||||
|
| Kimi K2 | 2026 年 3 月 6 日 |
|
||||||
|
| MiniMax M2.1 | 2026 年 3 月 15 日 |
|
||||||
|
| GLM 4.7 | 2026 年 3 月 15 日 |
|
||||||
|
| GLM 4.6 | 2026 年 3 月 15 日 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 隐私
|
## 隐私
|
||||||
|
|
||||||
我们所有的模型都托管在美国。我们的提供商遵循零保留政策,不会将你的数据用于模型训练,但以下情况除外:
|
我们所有的模型都托管在美国。我们的提供商遵循零保留政策,不会将你的数据用于模型训练,但以下情况除外:
|
||||||
|
|||||||
@@ -55,6 +55,7 @@ OpenCode Zen 的工作方式與 OpenCode 中的任何其他供應商相同。
|
|||||||
|
|
||||||
| 模型 | 模型 ID | 端點 | AI SDK 套件 |
|
| 模型 | 模型 ID | 端點 | AI SDK 套件 |
|
||||||
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
| ------------------ | ------------------ | -------------------------------------------------- | --------------------------- |
|
||||||
|
| GPT 5.4 | gpt-5.4 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.3 Codex | gpt-5.3-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 | gpt-5.2 | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
| GPT 5.2 Codex | gpt-5.2-codex | `https://opencode.ai/zen/v1/responses` | `@ai-sdk/openai` |
|
||||||
@@ -136,6 +137,7 @@ https://opencode.ai/zen/v1/models
|
|||||||
| Gemini 3 Pro (≤ 200K Token) | $2.00 | $12.00 | $0.20 | - |
|
| Gemini 3 Pro (≤ 200K Token) | $2.00 | $12.00 | $0.20 | - |
|
||||||
| Gemini 3 Pro (> 200K Token) | $4.00 | $18.00 | $0.40 | - |
|
| Gemini 3 Pro (> 200K Token) | $4.00 | $18.00 | $0.40 | - |
|
||||||
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
| Gemini 3 Flash | $0.50 | $3.00 | $0.05 | - |
|
||||||
|
| GPT 5.4 | $2.50 | $15.00 | $0.25 | - |
|
||||||
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.3 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 | $1.75 | $14.00 | $0.175 | - |
|
||||||
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
| GPT 5.2 Codex | $1.75 | $14.00 | $0.175 | - |
|
||||||
@@ -178,6 +180,19 @@ https://opencode.ai/zen/v1/models
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### 已棄用的模型
|
||||||
|
|
||||||
|
| 模型 | 棄用日期 |
|
||||||
|
| ---------------- | ------------------ |
|
||||||
|
| Qwen3 Coder 480B | 2026 年 2 月 6 日 |
|
||||||
|
| Kimi K2 Thinking | 2026 年 3 月 6 日 |
|
||||||
|
| Kimi K2 | 2026 年 3 月 6 日 |
|
||||||
|
| MiniMax M2.1 | 2026 年 3 月 15 日 |
|
||||||
|
| GLM 4.7 | 2026 年 3 月 15 日 |
|
||||||
|
| GLM 4.6 | 2026 年 3 月 15 日 |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 隱私
|
## 隱私
|
||||||
|
|
||||||
我們所有的模型都託管在美國。我們的供應商遵循零保留政策,不會將你的資料用於模型訓練,但以下情況除外:
|
我們所有的模型都託管在美國。我們的供應商遵循零保留政策,不會將你的資料用於模型訓練,但以下情況除外:
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
"name": "opencode",
|
"name": "opencode",
|
||||||
"displayName": "opencode",
|
"displayName": "opencode",
|
||||||
"description": "opencode for VS Code",
|
"description": "opencode for VS Code",
|
||||||
"version": "1.2.17",
|
"version": "1.2.18",
|
||||||
"publisher": "sst-dev",
|
"publisher": "sst-dev",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
|
|||||||
Reference in New Issue
Block a user