diff --git a/packages/console/app/src/asset/go-ornate-dark.svg b/packages/console/app/src/asset/go-ornate-dark.svg deleted file mode 100644 index 9b617c6777..0000000000 --- a/packages/console/app/src/asset/go-ornate-dark.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/packages/console/app/src/asset/go-ornate-light.svg b/packages/console/app/src/asset/go-ornate-light.svg deleted file mode 100644 index 79991973d6..0000000000 --- a/packages/console/app/src/asset/go-ornate-light.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/packages/console/app/src/component/go-plan-chart.css b/packages/console/app/src/component/go-plan-chart.css index 5cdea42213..ae0c277aef 100644 --- a/packages/console/app/src/component/go-plan-chart.css +++ b/packages/console/app/src/component/go-plan-chart.css @@ -1,13 +1,5 @@ @import "@opencode-ai/ui/v2/styles/colors.css"; -@font-face { - font-family: "Inter"; - src: url("@opencode-ai/ui/fonts/Inter.ttf") format("truetype"); - font-style: normal; - font-weight: 100 900; - font-display: swap; -} - [data-page="go"] { --go-console-bg: var(--v2-grey-50); --go-console-surface: var(--v2-grey-100); @@ -35,7 +27,7 @@ padding: 2rem var(--padding) 3rem; background: var(--go-console-bg); color: var(--go-console-text); - font-family: "Inter", sans-serif; + font-family: var(--font-mono); font-size: 0.8125rem; font-weight: 440; line-height: 1.25rem; @@ -61,12 +53,23 @@ color: var(--go-console-muted); line-height: 1.25rem; } - [data-slot="tier-switch"] { + [data-slot="legend"] { display: flex; align-items: center; - gap: 0.25rem; + gap: 1rem; + margin: 0; + padding: 0 0 0.375rem; + list-style: none; + color: var(--go-console-secondary); + font-weight: 530; + white-space: nowrap; } - [data-slot="tier-switch"] i { + [data-slot="legend"] li { + display: flex; + align-items: center; + gap: 0.5rem; + } + [data-slot="legend"] i { width: 3px; height: 12px; border-radius: 1px; @@ -90,27 +93,6 @@ cursor: pointer; white-space: nowrap; } - [data-slot="tier-switch"] button { - color: var(--go-console-secondary); - border-radius: 4px; - transition: - background-color 180ms ease, - opacity 180ms ease; - } - [data-slot="tier-switch"] button[aria-pressed="false"] { - opacity: 0.4; - font-weight: 440; - } - [data-slot="tier-switch"] button[aria-pressed="false"]:is(:hover, :focus-visible) { - opacity: 0.75; - } - [data-slot="tier-switch"] button[aria-pressed="true"] { - background: var(--go-console-surface); - color: var(--go-console-text); - } - [data-slot="tier-switch"] button:hover { - color: var(--go-console-text); - } [data-slot="expand"][aria-expanded="true"] svg { transform: rotate(180deg); } @@ -148,28 +130,48 @@ border-start-end-radius: 6px; border-end-end-radius: 6px; } + tbody tr > * { + transition: background-color 120ms ease; + } + tbody tr:hover > * { + background: var(--go-console-surface); + } + tbody tr > :first-child { + border-start-start-radius: 6px; + border-end-start-radius: 6px; + } + tbody tr > :last-child { + border-start-end-radius: 6px; + border-end-end-radius: 6px; + } tbody th { padding: 0.5rem 1rem; text-align: start; font-weight: 400; color: var(--go-console-text); } - [data-slot="model"] { - display: inline-flex; + [data-slot="labels"] { + display: flex; flex-wrap: wrap; - align-items: center; - gap: 0.375rem; + gap: 0.25rem; + margin-top: 0.25rem; } - [data-slot="model"] small { + [data-slot="labels"] :is(small, a) { border: 1px solid var(--go-console-border); padding: 0 0.25rem; font-size: 0.625rem; + line-height: 1rem; } - [data-slot="model"] a { - display: inline-flex; - align-items: center; - color: var(--go-console-muted); + [data-slot="labels"] a { + color: inherit; text-decoration: none; + transition: + background-color 180ms ease, + border-color 180ms ease; + } + [data-slot="labels"] a:hover { + background: var(--go-console-track); + border-color: var(--go-console-track); } [data-slot="bars"] { position: relative; @@ -178,32 +180,20 @@ position: absolute; inset-block: 0; border-inline-start: 1px dashed var(--go-console-border); - transition: inset-inline-start 600ms cubic-bezier(0.22, 1, 0.36, 1); } [data-slot="track"] { position: relative; - display: flex; - gap: 0.25rem; - height: 0.5rem; + display: grid; + grid-template-rows: 0.5rem 0.5rem; + row-gap: 0.5rem; margin: 0.5rem 0; } - [data-slot="track"] > [data-tier] { - position: relative; + [data-slot="lane"] { + display: flex; + gap: 0.25rem; + } + [data-slot="lane"] > [data-tier] { border-radius: 2px; - background: linear-gradient(var(--v2-yellow-500), var(--v2-yellow-600)); - transition: width 600ms cubic-bezier(0.22, 1, 0.36, 1); - } - [data-slot="track"] > [data-tier]::after { - content: ""; - position: absolute; - inset: 0; - border-radius: inherit; - background: linear-gradient(var(--v2-orange-500), var(--v2-orange-600)); - opacity: 0; - transition: opacity 300ms ease; - } - [data-slot="track"] > [data-tier="plus"]::after { - opacity: 1; } [data-slot="remainder"] { flex: 1; @@ -215,12 +205,13 @@ text-align: end; white-space: nowrap; } + :is(thead th, [data-slot="number"]):last-child { + padding-inline-start: 0.5rem; + } [data-slot="number"] span { display: block; - line-height: 1.25rem; - } - [data-slot="plan-value"] { - animation: go-plan-value-in 300ms ease-out both; + /* 13px digits are ~9.5px tall, so this leaves the same ~8px visual gap as the bars. */ + line-height: 1.1rem; } [data-slot="axis"] { position: relative; @@ -232,7 +223,6 @@ position: absolute; top: 0.25rem; transform: translateX(-50%); - transition: inset-inline-start 600ms cubic-bezier(0.22, 1, 0.36, 1); } &:dir(rtl) [data-slot="axis"] span { transform: translateX(50%); @@ -262,27 +252,95 @@ flex-direction: column; } } - @media (prefers-reduced-motion: reduce) { - [data-slot="tier-switch"] button, + /* Phones stack each model name above its bar so the table fits without horizontal scrolling. */ + @media (max-width: 40rem) { + /* Rows share the table's columns through subgrid, so number columns size to their unwrapped headers. */ + table { + display: grid; + grid-template-columns: minmax(0, 1fr) auto auto; + min-width: 0; + } + thead, + tbody, + tfoot { + display: contents; + } + colgroup, + tfoot td:not([data-slot="axis"]) { + display: none; + } + tr { + display: grid; + grid-column: 1 / -1; + grid-template-columns: subgrid; + align-items: center; + } + thead tr { + border: 1px solid var(--go-console-border); + border-radius: 6px; + } + thead th, + thead th:is(:first-child, :last-child) { + border: 0; + padding-inline: 0.375rem; + font-size: 0.75rem; + } + /* The bars are too narrow to label 100 and 1K apart from 10K. */ [data-slot="gridline"], - [data-slot="track"] > [data-tier], - [data-slot="track"] > [data-tier]::after, - [data-slot="axis"] span { - transition: none; + [data-slot="axis"] span:not(:last-child) { + display: none; } - [data-slot="plan-value"] { - animation: none; + thead th:first-child { + padding-inline-start: 1rem; + } + thead th:last-child, + [data-slot="number"]:last-child { + padding-inline-end: 1rem; + } + tbody th { + grid-column: 1 / -1; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.25rem 0.5rem; + padding-block-end: 0; + } + [data-slot="labels"] { + margin-top: 0; + } + /* Bars extend under the requests column's spare header width, stopping short of the right-aligned numbers. */ + [data-slot="bars"], + [data-slot="axis"] { + grid-column: 1 / 3; + margin-inline: 1rem 4rem; + } + [data-slot="bars"] { + grid-row: 2; + } + [data-slot="bars"] + [data-slot="number"] { + grid-row: 2; + grid-column: 2; + } + [data-slot="number"]:last-child { + grid-row: 2; + grid-column: 3; + } + [data-slot="number"] { + padding-inline: 0.375rem; + } + /* Rows are grids here, so highlight the row itself instead of each cell. */ + tbody tr { + padding-block: 0.375rem; + border-radius: 6px; + transition: background-color 120ms ease; + } + tbody tr:hover { + background: var(--go-console-surface); + } + tbody tr > *, + tbody tr:hover > * { + border-radius: 0; + background: none; } } } - -@keyframes go-plan-value-in { - from { - opacity: 0.3; - transform: translateY(3px); - } - to { - opacity: 1; - transform: translateY(0); - } -} diff --git a/packages/console/app/src/component/go-plan-chart.tsx b/packages/console/app/src/component/go-plan-chart.tsx index 0efbb34702..45dd4f786f 100644 --- a/packages/console/app/src/component/go-plan-chart.tsx +++ b/packages/console/app/src/component/go-plan-chart.tsx @@ -5,22 +5,17 @@ import { useLanguage } from "~/context/language" import { goPlanModels } from "./go-models" const ticks = [100, 1000, 10000] +const max = Math.max(...goPlanModels.map((model) => model.plusRequests).filter(Number.isFinite)) export function GoPlanChart(props: { href: string }) { const i18n = useI18n() const language = useLanguage() const id = createUniqueId() const [expanded, setExpanded] = createSignal(false) - const [tier, setTier] = createSignal<"go" | "go-plus">("go") const models = createMemo(() => goPlanModels.filter((model) => expanded() || model.featured)) - const max = createMemo(() => - Math.max( - ...goPlanModels.map((model) => (tier() === "go" ? model.requests : model.plusRequests)).filter(Number.isFinite), - ), - ) const position = (requests: number) => Number.isFinite(requests) - ? 4 + Math.pow(Math.log10(Math.max(requests / 100, 1)) / Math.log10(max() / 100), 2.2) * 78 + ? 4 + Math.pow(Math.log10(Math.max(requests / 100, 1)) / Math.log10(max / 100), 2.2) * 78 : 100 const format = createMemo(() => new Intl.NumberFormat(language.tag(language.locale()))) const currency = createMemo( @@ -40,24 +35,24 @@ export function GoPlanChart(props: { href: string }) {

{i18n.t("go.plans.limits")}

{i18n.t("go.plans.description")}

-
- - -
+ +
- - - + + + @@ -73,60 +68,55 @@ export function GoPlanChart(props: { href: string }) { {(model) => ( )} diff --git a/packages/console/app/src/component/icon.tsx b/packages/console/app/src/component/icon.tsx index ed83a1934b..00bea727b9 100644 --- a/packages/console/app/src/component/icon.tsx +++ b/packages/console/app/src/component/icon.tsx @@ -141,13 +141,9 @@ export function IconAnthropic(props: JSX.SvgSVGAttributes) { export function IconXai(props: JSX.SvgSVGAttributes) { return ( - + - @@ -156,12 +152,10 @@ export function IconXai(props: JSX.SvgSVGAttributes) { export function IconAlibaba(props: JSX.SvgSVGAttributes) { return ( - + ) @@ -196,6 +190,17 @@ export function IconMiniMax(props: JSX.SvgSVGAttributes) { ) } +export function IconGoogle(props: JSX.SvgSVGAttributes) { + return ( + + + + + + + ) +} + export function IconGemini(props: JSX.SvgSVGAttributes) { return ( diff --git a/packages/console/app/src/i18n/ar.ts b/packages/console/app/src/i18n/ar.ts index 0c5441ef29..5f8404194f 100644 --- a/packages/console/app/src/i18n/ar.ts +++ b/packages/console/app/src/i18n/ar.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "يتوفر Space Bunny Free، وهو نموذج مجهول جديد، لفترة محدودة", + "go.referral.ended.label": "تحذير", + "go.referral.ended": "انتهى برنامج الإحالة. لم تعد روابط الإحالة تمنح رصيدًا لك أو للشخص الذي شاركها.", "go.graph.bonus": "استخدام مضاعف {{count}} مرات", "nav.github": "GitHub", "nav.docs": "الوثائق", @@ -260,6 +262,7 @@ export const dict = { "go.title": "OpenCode Go | نماذج برمجة منخفضة التكلفة للجميع", "go.meta.description": "يبلغ سعر Go ‏$10/شهر، مع حدود استخدام سخية ووصول موثوق إلى نماذج البرمجة الرائدة.", "go.hero.title": "نماذج برمجة منخفضة التكلفة للجميع", + "go.hero.tagline": "استخدمه مع أي وكيل. قم بزيادة الرصيد إذا لزم الأمر. الإلغاء في أي وقت.", "go.hero.body": "يجلب Go البرمجة الوكيلة للمبرمجين حول العالم. يوفر حدودًا سخية ووصولًا موثوقًا إلى أقوى النماذج مفتوحة المصدر، حتى تتمكن من البناء باستخدام وكلاء أقوياء دون القلق بشأن التكلفة أو التوفر.", @@ -267,7 +270,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "اشترك في Go", "go.cta.price": "$10/شهر", - "go.plans.month": "/شهر", + "go.plans.month": "شهريًا", "go.plans.plus.cta": "الاشتراك في Go Plus", "go.plans.plus.description": "تبلغ تكلفة Go Plus ‏$40/شهر مع حدود استخدام أعلى.", "go.plans.go.feature1": "نماذج مختارة بأسعار معقولة", @@ -653,7 +656,6 @@ export const dict = { "workspace.payments.type.subscription": "اشتراك", "workspace.payments.view": "عرض", - "workspace.black.loading": "جارٍ التحميل...", "workspace.black.time.day": "يوم", "workspace.black.time.days": "أيام", "workspace.black.time.hour": "ساعة", @@ -663,7 +665,8 @@ export const dict = { "workspace.black.time.fewSeconds": "بضع ثوان", "workspace.black.subscription.title": "الاشتراك", "workspace.black.subscription.message": "أنت مشترك في OpenCode Black مقابل ${{plan}} شهريًا.", - "workspace.black.subscription.manage": "إدارة الاشتراك", + "workspace.black.subscription.ending": + "ينتهي OpenCode Black بنهاية فترة الفوترة الحالية ولن يتم تجديده. سننقلك إلى وحدة التحكم الجديدة.", "workspace.black.subscription.rollingUsage": "استخدام لمدة 5 ساعات", "workspace.black.subscription.weeklyUsage": "الاستخدام الأسبوعي", "workspace.black.subscription.resetsIn": "إعادة تعيين في", diff --git a/packages/console/app/src/i18n/br.ts b/packages/console/app/src/i18n/br.ts index 4d76e2bddd..f80c600fe0 100644 --- a/packages/console/app/src/i18n/br.ts +++ b/packages/console/app/src/i18n/br.ts @@ -4,6 +4,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, um novo modelo anônimo, está disponível por tempo limitado", + "go.referral.ended.label": "Aviso", + "go.referral.ended": + "O programa de indicação foi encerrado. Links de indicação não geram mais crédito para você nem para quem os compartilhou.", "go.graph.bonus": "{{count}}× mais uso", "nav.github": "GitHub", "nav.docs": "Documentação", @@ -265,6 +268,7 @@ export const dict = { "go.meta.description": "O Go custa $10/mês, com limites generosos de uso e acesso confiável aos principais modelos de codificação.", "go.hero.title": "Modelos de codificação de baixo custo para todos", + "go.hero.tagline": "Use com qualquer agente. Adicione créditos se precisar. Cancele quando quiser.", "go.hero.body": "O Go traz a codificação com agentes para programadores em todo o mundo. Oferecendo limites generosos e acesso confiável aos modelos de código aberto mais capazes, para que você possa construir com agentes poderosos sem se preocupar com custos ou disponibilidade.", @@ -272,7 +276,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Assinar o Go", "go.cta.price": "$10/mês", - "go.plans.month": "/mês", + "go.plans.month": "por mês", "go.plans.plus.cta": "Assinar Go Plus", "go.plans.plus.description": "O Go Plus custa $40/mês e oferece limites maiores.", "go.plans.go.feature1": "Modelos selecionados e acessíveis", @@ -664,7 +668,6 @@ export const dict = { "workspace.payments.type.subscription": "assinatura", "workspace.payments.view": "Ver", - "workspace.black.loading": "Carregando...", "workspace.black.time.day": "dia", "workspace.black.time.days": "dias", "workspace.black.time.hour": "hora", @@ -674,7 +677,8 @@ export const dict = { "workspace.black.time.fewSeconds": "alguns segundos", "workspace.black.subscription.title": "Assinatura", "workspace.black.subscription.message": "Você assina o OpenCode Black por ${{plan}} por mês.", - "workspace.black.subscription.manage": "Gerenciar Assinatura", + "workspace.black.subscription.ending": + "O OpenCode Black termina com o seu período de cobrança atual e não será renovado. Vamos migrar você para o novo console.", "workspace.black.subscription.rollingUsage": "Uso de 5 horas", "workspace.black.subscription.weeklyUsage": "Uso Semanal", "workspace.black.subscription.resetsIn": "Reinicia em", diff --git a/packages/console/app/src/i18n/da.ts b/packages/console/app/src/i18n/da.ts index 013eb2e51d..fb854aea97 100644 --- a/packages/console/app/src/i18n/da.ts +++ b/packages/console/app/src/i18n/da.ts @@ -4,6 +4,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, en ny anonym model, er tilgængelig i en begrænset periode", + "go.referral.ended.label": "Advarsel", + "go.referral.ended": + "Henvisningsprogrammet er afsluttet. Henvisningslinks giver ikke længere kredit til dig eller den, der delte dem.", "go.graph.bonus": "{{count}}× forbrug", "nav.github": "GitHub", "nav.docs": "Dokumentation", @@ -263,6 +266,7 @@ export const dict = { "go.meta.description": "Go koster $10/måned, med generøse brugsgrænser og pålidelig adgang til førende kodningsmodeller.", "go.hero.title": "Kodningsmodeller til lav pris for alle", + "go.hero.tagline": "Brug med enhver agent. Tank op med kredit efter behov. Afmeld når som helst.", "go.hero.body": "Go bringer agentisk kodning til programmører over hele verden. Med generøse grænser og pålidelig adgang til de mest kapable open source-modeller, så du kan bygge med kraftfulde agenter uden at bekymre dig om omkostninger eller tilgængelighed.", @@ -270,7 +274,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Abonner på Go", "go.cta.price": "$10/måned", - "go.plans.month": "/måned", + "go.plans.month": "om måneden", "go.plans.plus.cta": "Abonnér på Go Plus", "go.plans.plus.description": "Go Plus koster $40/måned og giver højere brugsgrænser.", "go.plans.go.feature1": "Udvalgte, prisvenlige modeller", @@ -660,7 +664,6 @@ export const dict = { "workspace.payments.type.subscription": "abonnement", "workspace.payments.view": "Vis", - "workspace.black.loading": "Indlæser...", "workspace.black.time.day": "dag", "workspace.black.time.days": "dage", "workspace.black.time.hour": "time", @@ -670,7 +673,8 @@ export const dict = { "workspace.black.time.fewSeconds": "et par sekunder", "workspace.black.subscription.title": "Abonnement", "workspace.black.subscription.message": "Du abonnerer på OpenCode Black for ${{plan}} om måneden.", - "workspace.black.subscription.manage": "Administrer abonnement", + "workspace.black.subscription.ending": + "OpenCode Black slutter med din nuværende faktureringsperiode og fornyes ikke. Vi flytter dig til den nye konsol.", "workspace.black.subscription.rollingUsage": "5-timers brug", "workspace.black.subscription.weeklyUsage": "Ugentlig brug", "workspace.black.subscription.resetsIn": "Nulstiller i", diff --git a/packages/console/app/src/i18n/de.ts b/packages/console/app/src/i18n/de.ts index 021d57ff61..59c533e26e 100644 --- a/packages/console/app/src/i18n/de.ts +++ b/packages/console/app/src/i18n/de.ts @@ -4,6 +4,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, ein neues anonymes Modell, ist für begrenzte Zeit verfügbar", + "go.referral.ended.label": "Warnung", + "go.referral.ended": + "Das Empfehlungsprogramm wurde beendet. Empfehlungslinks bringen weder dir noch der Person, die sie geteilt hat, Guthaben.", "go.graph.bonus": "{{count}}× Nutzung", "nav.github": "GitHub", "nav.docs": "Dokumentation", @@ -265,6 +268,7 @@ export const dict = { "go.meta.description": "Go kostet $10/Monat, mit großzügigen Nutzungslimits und zuverlässigem Zugang zu führenden Coding-Modellen.", "go.hero.title": "Kostengünstige Coding-Modelle für alle", + "go.hero.tagline": "Mit jedem Agenten nutzbar. Guthaben bei Bedarf aufladen. Jederzeit kündbar.", "go.hero.body": "Go bringt Agentic Coding zu Programmierern auf der ganzen Welt. Mit großzügigen Limits und zuverlässigem Zugang zu den leistungsfähigsten Open-Source-Modellen, damit du mit leistungsstarken Agenten entwickeln kannst, ohne dir Gedanken über Kosten oder Verfügbarkeit zu machen.", @@ -272,7 +276,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Go abonnieren", "go.cta.price": "$10/Monat", - "go.plans.month": "/Monat", + "go.plans.month": "pro Monat", "go.plans.plus.cta": "Go Plus abonnieren", "go.plans.plus.description": "Go Plus kostet $40/Monat und bietet höhere Nutzungslimits.", "go.plans.go.feature1": "Ausgewählte, erschwingliche Modelle", @@ -662,7 +666,6 @@ export const dict = { "workspace.payments.type.subscription": "Abonnement", "workspace.payments.view": "Ansehen", - "workspace.black.loading": "Lade...", "workspace.black.time.day": "Tag", "workspace.black.time.days": "Tage", "workspace.black.time.hour": "Stunde", @@ -672,7 +675,8 @@ export const dict = { "workspace.black.time.fewSeconds": "einige Sekunden", "workspace.black.subscription.title": "Abonnement", "workspace.black.subscription.message": "Du hast OpenCode Black für ${{plan}} pro Monat abonniert.", - "workspace.black.subscription.manage": "Abo verwalten", + "workspace.black.subscription.ending": + "OpenCode Black endet mit deinem aktuellen Abrechnungszeitraum und wird nicht verlängert. Wir ziehen dich in die neue Konsole um.", "workspace.black.subscription.rollingUsage": "5-Stunden-Nutzung", "workspace.black.subscription.weeklyUsage": "Wöchentliche Nutzung", "workspace.black.subscription.resetsIn": "Setzt zurück in", diff --git a/packages/console/app/src/i18n/en.ts b/packages/console/app/src/i18n/en.ts index d18bc8d1fc..e14da575dd 100644 --- a/packages/console/app/src/i18n/en.ts +++ b/packages/console/app/src/i18n/en.ts @@ -1,5 +1,8 @@ export const dict = { "go.promo.spaceBunny": "Space Bunny Free, a new anonymous model, is available for a limited time", + "go.referral.ended.label": "Warning", + "go.referral.ended": + "The referral program has ended. Referral links no longer earn credit for you or the person who shared them.", "go.graph.bonus": "{{count}}× usage", "nav.github": "GitHub", "nav.docs": "Docs", @@ -260,6 +263,7 @@ export const dict = { "go.title": "OpenCode Go | Low cost coding models for everyone", "go.meta.description": "Go costs $10/month, with generous usage limits and reliable access to leading coding models.", "go.hero.title": "Low cost coding models for everyone", + "go.hero.tagline": "Use with any agent. Top up credit if needed. Cancel any time.", "go.hero.body": "Go brings agentic coding to programmers around the world. Offering generous limits and reliable access to the most capable open-source models, so you can build with powerful agents without worrying about cost or availability.", @@ -267,7 +271,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Subscribe to Go", "go.cta.price": "$10/month", - "go.plans.month": "/month", + "go.plans.month": "per month", "go.plans.plus.cta": "Subscribe to Go Plus", "go.plans.plus.description": "Go Plus costs $40/month with higher limits.", "go.plans.go.feature1": "Curated, affordable models", @@ -286,14 +290,14 @@ export const dict = { "go.graph.label": "Requests / 5 hours", "go.graph.period": "Usage", "go.graph.model": "Model", - "go.graph.requests": "Est. requests / 5 hr", + "go.graph.requests": "Est. requests / 5h", "go.graph.allowance": "Monthly usage", "go.graph.new": "New", "go.graph.scale": "Nonlinear request scale", "go.graph.showAll": "View all {{count}} models", "go.graph.showLess": "Show fewer models", - "go.graph.limitedRegions": "limited regions", - "go.graph.limitedTime": "limited time", + "go.graph.limitedRegions": "Limited Regions", + "go.graph.limitedTime": "Limited Time", "go.graph.tick": "{{n}}x", "go.graph.usageLimits": "Usage limits", "go.graph.aria": "Requests per 5h: {{free}} vs {{go}}", @@ -659,7 +663,6 @@ export const dict = { "workspace.payments.type.subscription": "subscription", "workspace.payments.view": "View", - "workspace.black.loading": "Loading...", "workspace.black.time.day": "day", "workspace.black.time.days": "days", "workspace.black.time.hour": "hour", @@ -669,7 +672,8 @@ export const dict = { "workspace.black.time.fewSeconds": "a few seconds", "workspace.black.subscription.title": "Subscription", "workspace.black.subscription.message": "You are subscribed to OpenCode Black for ${{plan}} per month.", - "workspace.black.subscription.manage": "Manage Subscription", + "workspace.black.subscription.ending": + "OpenCode Black ends with your current billing period and won't renew. We'll move you to the new console.", "workspace.black.subscription.rollingUsage": "5-hour Usage", "workspace.black.subscription.weeklyUsage": "Weekly Usage", "workspace.black.subscription.resetsIn": "Resets in", diff --git a/packages/console/app/src/i18n/es.ts b/packages/console/app/src/i18n/es.ts index 6e9a02831b..23e026b04b 100644 --- a/packages/console/app/src/i18n/es.ts +++ b/packages/console/app/src/i18n/es.ts @@ -4,6 +4,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, un nuevo modelo anónimo, está disponible por tiempo limitado", + "go.referral.ended.label": "Advertencia", + "go.referral.ended": + "El programa de referidos ha terminado. Los enlaces de referido ya no otorgan crédito ni a ti ni a quien los compartió.", "go.graph.bonus": "{{count}}× de uso", "nav.github": "GitHub", "nav.docs": "Documentación", @@ -266,6 +269,7 @@ export const dict = { "go.meta.description": "Go cuesta 10 $/mes, con límites de uso generosos y acceso fiable a modelos de programación líderes.", "go.hero.title": "Modelos de programación de bajo coste para todos", + "go.hero.tagline": "Úsalo con cualquier agente. Recarga crédito si lo necesitas. Cancela cuando quieras.", "go.hero.body": "Go lleva la programación agéntica a programadores de todo el mundo. Ofrece límites generosos y acceso fiable a los modelos de código abierto más capaces, para que puedas crear con agentes potentes sin preocuparte por el coste o la disponibilidad.", @@ -273,7 +277,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Suscribirse a Go", "go.cta.price": "10 $/mes", - "go.plans.month": "/mes", + "go.plans.month": "al mes", "go.plans.plus.cta": "Suscribirse a Go Plus", "go.plans.plus.description": "Go Plus cuesta 40 $/mes y ofrece límites más altos.", "go.plans.go.feature1": "Modelos seleccionados y asequibles", @@ -665,7 +669,6 @@ export const dict = { "workspace.payments.type.subscription": "suscripción", "workspace.payments.view": "Ver", - "workspace.black.loading": "Cargando...", "workspace.black.time.day": "día", "workspace.black.time.days": "días", "workspace.black.time.hour": "hora", @@ -675,7 +678,8 @@ export const dict = { "workspace.black.time.fewSeconds": "unos pocos segundos", "workspace.black.subscription.title": "Suscripción", "workspace.black.subscription.message": "Estás suscrito a OpenCode Black por ${{plan}} al mes.", - "workspace.black.subscription.manage": "Gestionar Suscripción", + "workspace.black.subscription.ending": + "OpenCode Black finaliza con tu periodo de facturación actual y no se renovará. Te trasladaremos a la nueva consola.", "workspace.black.subscription.rollingUsage": "Uso de 5 horas", "workspace.black.subscription.weeklyUsage": "Uso Semanal", "workspace.black.subscription.resetsIn": "Se reinicia en", diff --git a/packages/console/app/src/i18n/fr.ts b/packages/console/app/src/i18n/fr.ts index bf11f5f964..1858458113 100644 --- a/packages/console/app/src/i18n/fr.ts +++ b/packages/console/app/src/i18n/fr.ts @@ -4,6 +4,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, un nouveau modèle anonyme, est disponible pour une durée limitée", + "go.referral.ended.label": "Avertissement", + "go.referral.ended": + "Le programme de parrainage est terminé. Les liens de parrainage ne donnent plus de crédit, ni à vous ni à la personne qui les a partagés.", "go.graph.bonus": "{{count}}× d’utilisation", "app.meta.description": "OpenCode - L'agent de code open source.", "nav.github": "GitHub", @@ -267,6 +270,7 @@ export const dict = { "go.meta.description": "Go coûte 10 $/mois, avec des limites d'utilisation généreuses et un accès fiable aux principaux modèles de codage.", "go.hero.title": "Modèles de code à faible coût pour tous", + "go.hero.tagline": "Utilisable avec n'importe quel agent. Rechargez du crédit si besoin. Résiliez à tout moment.", "go.hero.body": "Go apporte le codage agentique aux programmeurs du monde entier. Offrant des limites généreuses et un accès fiable aux modèles open source les plus capables, pour que vous puissiez construire avec des agents puissants sans vous soucier du coût ou de la disponibilité.", @@ -274,7 +278,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "S'abonner à Go", "go.cta.price": "10 $/mois", - "go.plans.month": "/mois", + "go.plans.month": "par mois", "go.plans.plus.cta": "S'abonner à Go Plus", "go.plans.plus.description": "Go Plus coûte 40 $/mois et offre des limites plus élevées.", "go.plans.go.feature1": "Modèles sélectionnés et abordables", @@ -667,7 +671,6 @@ export const dict = { "workspace.payments.type.subscription": "abonnement", "workspace.payments.view": "Voir", - "workspace.black.loading": "Chargement...", "workspace.black.time.day": "jour", "workspace.black.time.days": "jours", "workspace.black.time.hour": "heure", @@ -677,7 +680,8 @@ export const dict = { "workspace.black.time.fewSeconds": "quelques secondes", "workspace.black.subscription.title": "Abonnement", "workspace.black.subscription.message": "Vous êtes abonné à OpenCode Black pour {{plan}} $ par mois.", - "workspace.black.subscription.manage": "Gérer l'abonnement", + "workspace.black.subscription.ending": + "OpenCode Black prend fin avec votre période de facturation actuelle et ne sera pas renouvelé. Nous vous migrerons vers la nouvelle console.", "workspace.black.subscription.rollingUsage": "Utilisation 5 heures", "workspace.black.subscription.weeklyUsage": "Utilisation hebdomadaire", "workspace.black.subscription.resetsIn": "Réinitialisation dans", diff --git a/packages/console/app/src/i18n/it.ts b/packages/console/app/src/i18n/it.ts index 5d8527da1e..c837f2fbcb 100644 --- a/packages/console/app/src/i18n/it.ts +++ b/packages/console/app/src/i18n/it.ts @@ -4,6 +4,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, un nuovo modello anonimo, è disponibile per un periodo limitato", + "go.referral.ended.label": "Avviso", + "go.referral.ended": + "Il programma referral è terminato. I link referral non danno più credito né a te né a chi li ha condivisi.", "go.graph.bonus": "Utilizzo {{count}}×", "nav.github": "GitHub", "nav.docs": "Documentazione", @@ -263,6 +266,7 @@ export const dict = { "go.meta.description": "Go costa $10/mese, con limiti di utilizzo generosi e un accesso affidabile ai principali modelli di coding.", "go.hero.title": "Modelli di coding a basso costo per tutti", + "go.hero.tagline": "Usalo con qualsiasi agente. Ricarica il credito se necessario. Annulla quando vuoi.", "go.hero.body": "Go porta il coding agentico ai programmatori di tutto il mondo. Offrendo limiti generosi e un accesso affidabile ai modelli open source più capaci, in modo da poter costruire con agenti potenti senza preoccuparsi dei costi o della disponibilità.", @@ -270,7 +274,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Abbonati a Go", "go.cta.price": "$10/mese", - "go.plans.month": "/mese", + "go.plans.month": "al mese", "go.plans.plus.cta": "Abbonati a Go Plus", "go.plans.plus.description": "Go Plus costa $40/mese e offre limiti più alti.", "go.plans.go.feature1": "Modelli selezionati e convenienti", @@ -663,7 +667,6 @@ export const dict = { "workspace.payments.type.subscription": "abbonamento", "workspace.payments.view": "Visualizza", - "workspace.black.loading": "Caricamento...", "workspace.black.time.day": "giorno", "workspace.black.time.days": "giorni", "workspace.black.time.hour": "ora", @@ -673,7 +676,8 @@ export const dict = { "workspace.black.time.fewSeconds": "pochi secondi", "workspace.black.subscription.title": "Abbonamento", "workspace.black.subscription.message": "Sei abbonato a OpenCode Black per ${{plan}} al mese.", - "workspace.black.subscription.manage": "Gestisci Abbonamento", + "workspace.black.subscription.ending": + "OpenCode Black termina con il periodo di fatturazione in corso e non verrà rinnovato. Ti trasferiremo nella nuova console.", "workspace.black.subscription.rollingUsage": "Utilizzo 5-ore", "workspace.black.subscription.weeklyUsage": "Utilizzo Settimanale", "workspace.black.subscription.resetsIn": "Si resetta tra", diff --git a/packages/console/app/src/i18n/ja.ts b/packages/console/app/src/i18n/ja.ts index 6d941a9b1b..e87bbc7936 100644 --- a/packages/console/app/src/i18n/ja.ts +++ b/packages/console/app/src/i18n/ja.ts @@ -4,6 +4,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "新しい匿名モデル Space Bunny Free が期間限定で利用可能です", + "go.referral.ended.label": "警告", + "go.referral.ended": + "紹介プログラムは終了しました。紹介リンクを使っても、あなたや共有した人にクレジットは付与されません。", "go.graph.bonus": "利用枠{{count}}倍", "nav.github": "GitHub", "nav.docs": "ドキュメント", @@ -262,6 +265,7 @@ export const dict = { "go.meta.description": "Goは月額$10で、主要なコーディングモデルへのゆとりある利用上限と安定したアクセスを提供します。", "go.hero.title": "すべての人のための低価格なコーディングモデル", + "go.hero.tagline": "どのエージェントでも利用できます。必要に応じてクレジットをチャージ。いつでもキャンセル可能。", "go.hero.body": "Goは、世界中のプログラマーにエージェント型コーディングをもたらします。最も高性能なオープンソースモデルへの十分な制限と安定したアクセスを提供し、コストや可用性を気にすることなく強力なエージェントで構築できます。", @@ -660,7 +664,6 @@ export const dict = { "workspace.payments.type.subscription": "サブスクリプション", "workspace.payments.view": "表示", - "workspace.black.loading": "読み込み中...", "workspace.black.time.day": "日", "workspace.black.time.days": "日", "workspace.black.time.hour": "時間", @@ -670,7 +673,8 @@ export const dict = { "workspace.black.time.fewSeconds": "数秒", "workspace.black.subscription.title": "サブスクリプション", "workspace.black.subscription.message": "あなたは OpenCode Black を月額 ${{plan}} で購読しています。", - "workspace.black.subscription.manage": "サブスクリプションの管理", + "workspace.black.subscription.ending": + "OpenCode Black は現在の請求期間の終了とともに終了し、更新されません。新しいコンソールへ移行いたします。", "workspace.black.subscription.rollingUsage": "5時間利用", "workspace.black.subscription.weeklyUsage": "週間利用量", "workspace.black.subscription.resetsIn": "リセットまで", diff --git a/packages/console/app/src/i18n/ko.ts b/packages/console/app/src/i18n/ko.ts index cc8a44f602..ae0cad7d74 100644 --- a/packages/console/app/src/i18n/ko.ts +++ b/packages/console/app/src/i18n/ko.ts @@ -4,6 +4,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "새로운 익명 모델 Space Bunny Free를 한정된 기간 동안 사용할 수 있습니다", + "go.referral.ended.label": "경고", + "go.referral.ended": + "추천 프로그램이 종료되었습니다. 추천 링크로는 더 이상 본인이나 링크를 공유한 사람에게 크레딧이 지급되지 않습니다.", "go.graph.bonus": "사용량 {{count}}배", "nav.github": "GitHub", "nav.docs": "문서", @@ -258,6 +261,7 @@ export const dict = { "go.title": "OpenCode Go | 모두를 위한 저비용 코딩 모델", "go.meta.description": "Go는 월 $10이며, 넉넉한 사용 한도와 주요 코딩 모델에 대한 안정적인 액세스를 제공합니다.", "go.hero.title": "모두를 위한 저비용 코딩 모델", + "go.hero.tagline": "어떤 에이전트와도 사용할 수 있습니다. 필요하면 크레딧을 충전하세요. 언제든지 취소할 수 있습니다.", "go.hero.body": "Go는 전 세계 프로그래머들에게 에이전트 코딩을 제공합니다. 가장 유능한 오픈 소스 모델에 대한 넉넉한 한도와 안정적인 액세스를 제공하므로, 비용이나 가용성 걱정 없이 강력한 에이전트로 빌드할 수 있습니다.", @@ -653,7 +657,6 @@ export const dict = { "workspace.payments.type.subscription": "구독", "workspace.payments.view": "보기", - "workspace.black.loading": "로드 중...", "workspace.black.time.day": "일", "workspace.black.time.days": "일", "workspace.black.time.hour": "시간", @@ -663,7 +666,8 @@ export const dict = { "workspace.black.time.fewSeconds": "몇 초", "workspace.black.subscription.title": "구독", "workspace.black.subscription.message": "현재 월 ${{plan}} OpenCode Black 플랜을 구독 중입니다.", - "workspace.black.subscription.manage": "구독 관리", + "workspace.black.subscription.ending": + "OpenCode Black은 현재 결제 기간이 끝나면 종료되며 갱신되지 않습니다. 새 콘솔로 옮겨 드리겠습니다.", "workspace.black.subscription.rollingUsage": "5시간 사용량", "workspace.black.subscription.weeklyUsage": "주간 사용량", "workspace.black.subscription.resetsIn": "초기화까지 남은 시간:", diff --git a/packages/console/app/src/i18n/no.ts b/packages/console/app/src/i18n/no.ts index 714abb1ed5..92a8d08aeb 100644 --- a/packages/console/app/src/i18n/no.ts +++ b/packages/console/app/src/i18n/no.ts @@ -4,6 +4,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, en ny anonym modell, er tilgjengelig i en begrenset periode", + "go.referral.ended.label": "Advarsel", + "go.referral.ended": + "Henvisningsprogrammet er avsluttet. Henvisningslenker gir ikke lenger kreditt til deg eller den som delte dem.", "go.graph.bonus": "{{count}}× bruk", "nav.github": "GitHub", "nav.docs": "Dokumentasjon", @@ -263,6 +266,7 @@ export const dict = { "go.meta.description": "Go koster $10/måned, med sjenerøse bruksgrenser og pålitelig tilgang til ledende kodemodeller.", "go.hero.title": "Rimelige kodemodeller for alle", + "go.hero.tagline": "Bruk med hvilken som helst agent. Fyll på kreditt ved behov. Avslutt når som helst.", "go.hero.body": "Go bringer agent-koding til programmerere over hele verden. Med rause grenser og pålitelig tilgang til de mest kapable åpen kildekode-modellene, kan du bygge med kraftige agenter uten å bekymre deg for kostnader eller tilgjengelighet.", @@ -270,7 +274,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Abonner på Go", "go.cta.price": "$10/måned", - "go.plans.month": "/måned", + "go.plans.month": "per måned", "go.plans.plus.cta": "Abonner på Go Plus", "go.plans.plus.description": "Go Plus koster $40/måned og gir høyere bruksgrenser.", "go.plans.go.feature1": "Utvalgte, rimelige modeller", @@ -661,7 +665,6 @@ export const dict = { "workspace.payments.type.subscription": "abonnement", "workspace.payments.view": "Vis", - "workspace.black.loading": "Laster...", "workspace.black.time.day": "dag", "workspace.black.time.days": "dager", "workspace.black.time.hour": "time", @@ -671,7 +674,8 @@ export const dict = { "workspace.black.time.fewSeconds": "noen få sekunder", "workspace.black.subscription.title": "Abonnement", "workspace.black.subscription.message": "Du abonnerer på OpenCode Black for ${{plan}} per måned.", - "workspace.black.subscription.manage": "Administrer abonnement", + "workspace.black.subscription.ending": + "OpenCode Black avsluttes med gjeldende faktureringsperiode og fornyes ikke. Vi flytter deg til den nye konsollen.", "workspace.black.subscription.rollingUsage": "5-timers bruk", "workspace.black.subscription.weeklyUsage": "Ukentlig bruk", "workspace.black.subscription.resetsIn": "Nullstilles om", diff --git a/packages/console/app/src/i18n/pl.ts b/packages/console/app/src/i18n/pl.ts index e6b499388c..8656bdc43c 100644 --- a/packages/console/app/src/i18n/pl.ts +++ b/packages/console/app/src/i18n/pl.ts @@ -3,6 +3,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free, nowy anonimowy model, jest dostępny przez ograniczony czas", + "go.referral.ended.label": "Ostrzeżenie", + "go.referral.ended": + "Program poleceń został zakończony. Linki polecające nie dają już środków ani Tobie, ani osobie, która je udostępniła.", "go.graph.bonus": "{{count}}× większy limit", "nav.github": "GitHub", "nav.docs": "Dokumentacja", @@ -264,6 +267,7 @@ export const dict = { "go.meta.description": "Go kosztuje $10/miesiąc, oferując hojne limity użycia i niezawodny dostęp do wiodących modeli do kodowania.", "go.hero.title": "Niskokosztowe modele do kodowania dla każdego", + "go.hero.tagline": "Używaj z dowolnym agentem. Doładuj środki w razie potrzeby. Anuluj w dowolnym momencie.", "go.hero.body": "Go udostępnia programowanie z agentami programistom na całym świecie. Oferuje hojne limity i niezawodny dostęp do najzdolniejszych modeli open source, dzięki czemu możesz budować za pomocą potężnych agentów, nie martwiąc się o koszty czy dostępność.", @@ -271,7 +275,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Zasubskrybuj Go", "go.cta.price": "$10/miesiąc", - "go.plans.month": "/miesiąc", + "go.plans.month": "miesięcznie", "go.plans.plus.cta": "Subskrybuj Go Plus", "go.plans.plus.description": "Go Plus kosztuje $40/miesiąc i oferuje wyższe limity.", "go.plans.go.feature1": "Wyselekcjonowane, przystępne modele", @@ -662,7 +666,6 @@ export const dict = { "workspace.payments.type.subscription": "subskrypcja", "workspace.payments.view": "Zobacz", - "workspace.black.loading": "Ładowanie...", "workspace.black.time.day": "dzień", "workspace.black.time.days": "dni", "workspace.black.time.hour": "godzina", @@ -672,7 +675,8 @@ export const dict = { "workspace.black.time.fewSeconds": "kilka sekund", "workspace.black.subscription.title": "Subskrypcja", "workspace.black.subscription.message": "Subskrybujesz OpenCode Black za ${{plan}} miesięcznie.", - "workspace.black.subscription.manage": "Zarządzaj subskrypcją", + "workspace.black.subscription.ending": + "OpenCode Black kończy się wraz z bieżącym okresem rozliczeniowym i nie zostanie odnowiony. Przeniesiemy Cię do nowej konsoli.", "workspace.black.subscription.rollingUsage": "Użycie (okno 5h)", "workspace.black.subscription.weeklyUsage": "Użycie tygodniowe", "workspace.black.subscription.resetsIn": "Resetuje się za", diff --git a/packages/console/app/src/i18n/ru.ts b/packages/console/app/src/i18n/ru.ts index 903d4d1223..7730660384 100644 --- a/packages/console/app/src/i18n/ru.ts +++ b/packages/console/app/src/i18n/ru.ts @@ -4,6 +4,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free — новая анонимная модель, доступная в течение ограниченного времени", + "go.referral.ended.label": "Предупреждение", + "go.referral.ended": + "Реферальная программа завершена. Реферальные ссылки больше не начисляют кредиты ни вам, ни тому, кто ими поделился.", "go.graph.bonus": "Лимит ×{{count}}", "nav.github": "GitHub", "nav.docs": "Документация", @@ -267,6 +270,7 @@ export const dict = { "go.meta.description": "Go стоит $10/месяц и предлагает щедрые лимиты использования и надежный доступ к ведущим моделям для кодинга.", "go.hero.title": "Недорогие модели для кодинга для всех", + "go.hero.tagline": "Работает с любым агентом. Пополняйте баланс при необходимости. Отменить можно в любой момент.", "go.hero.body": "Go открывает доступ к агентам-программистам разработчикам по всему миру. Предлагая щедрые лимиты и надежный доступ к наиболее способным моделям с открытым исходным кодом, вы можете создавать проекты с мощными агентами, не беспокоясь о затратах или доступности.", @@ -274,7 +278,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Подписаться на Go", "go.cta.price": "$10/месяц", - "go.plans.month": "/мес.", + "go.plans.month": "в месяц", "go.plans.plus.cta": "Подписаться на Go Plus", "go.plans.plus.description": "Go Plus стоит $40/месяц и предлагает более высокие лимиты.", "go.plans.go.feature1": "Отобранные доступные модели", @@ -669,7 +673,6 @@ export const dict = { "workspace.payments.type.subscription": "подписка", "workspace.payments.view": "Просмотр", - "workspace.black.loading": "Загрузка...", "workspace.black.time.day": "день", "workspace.black.time.days": "дней", "workspace.black.time.hour": "час", @@ -679,7 +682,8 @@ export const dict = { "workspace.black.time.fewSeconds": "несколько секунд", "workspace.black.subscription.title": "Подписка", "workspace.black.subscription.message": "Вы подписаны на OpenCode Black за ${{plan}} в месяц.", - "workspace.black.subscription.manage": "Управление подпиской", + "workspace.black.subscription.ending": + "OpenCode Black завершится в конце текущего расчётного периода и не будет продлён. Мы перенесём вас в новую консоль.", "workspace.black.subscription.rollingUsage": "5-часовое использование", "workspace.black.subscription.weeklyUsage": "Недельное использование", "workspace.black.subscription.resetsIn": "Сброс через", diff --git a/packages/console/app/src/i18n/th.ts b/packages/console/app/src/i18n/th.ts index 8eb1f38827..0db1f061f2 100644 --- a/packages/console/app/src/i18n/th.ts +++ b/packages/console/app/src/i18n/th.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free โมเดลนิรนามใหม่ เปิดให้ใช้งานในช่วงเวลาจำกัด", + "go.referral.ended.label": "คำเตือน", + "go.referral.ended": "โปรแกรมแนะนำเพื่อนสิ้นสุดแล้ว ลิงก์แนะนำจะไม่ให้เครดิตแก่คุณหรือผู้ที่แชร์ลิงก์อีกต่อไป", "go.graph.bonus": "ใช้งาน {{count}} เท่า", "nav.github": "GitHub", "nav.docs": "เอกสาร", @@ -262,6 +264,7 @@ export const dict = { "go.meta.description": "Go มีราคา $10/เดือน พร้อมขีดจำกัดการใช้งานที่เอื้อเฟื้อและการเข้าถึงโมเดลเขียนโค้ดชั้นนำอย่างเชื่อถือได้", "go.hero.title": "โมเดลเขียนโค้ดราคาประหยัดสำหรับทุกคน", + "go.hero.tagline": "ใช้กับเอเจนต์ใดก็ได้ เติมเครดิตหากจำเป็น ยกเลิกได้ตลอดเวลา", "go.hero.body": "Go นำการเขียนโค้ดแบบเอเจนต์มาสู่นักเขียนโปรแกรมทั่วโลก เสนอขีดจำกัดที่กว้างขวางและการเข้าถึงโมเดลโอเพนซอร์สที่มีความสามารถสูงสุดได้อย่างน่าเชื่อถือ เพื่อให้คุณสามารถสร้างสรรค์ด้วยเอเจนต์ที่ทรงพลังโดยไม่ต้องกังวลเรื่องค่าใช้จ่ายหรือความพร้อมใช้งาน", @@ -269,7 +272,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "สมัครสมาชิก Go", "go.cta.price": "$10/เดือน", - "go.plans.month": "/เดือน", + "go.plans.month": "ต่อเดือน", "go.plans.plus.cta": "สมัคร Go Plus", "go.plans.plus.description": "Go Plus ราคา $40/เดือน พร้อมขีดจำกัดการใช้งานที่สูงขึ้น", "go.plans.go.feature1": "โมเดลคัดสรรในราคาคุ้มค่า", @@ -658,7 +661,6 @@ export const dict = { "workspace.payments.type.subscription": "subscription", "workspace.payments.view": "ดู", - "workspace.black.loading": "กำลังโหลด...", "workspace.black.time.day": "วัน", "workspace.black.time.days": "วัน", "workspace.black.time.hour": "ชั่วโมง", @@ -668,7 +670,8 @@ export const dict = { "workspace.black.time.fewSeconds": "ไม่กี่วินาที", "workspace.black.subscription.title": "การสมัครสมาชิก", "workspace.black.subscription.message": "คุณสมัครสมาชิก OpenCode Black ในราคา ${{plan}} ต่อเดือน", - "workspace.black.subscription.manage": "จัดการการสมัครสมาชิก", + "workspace.black.subscription.ending": + "OpenCode Black จะสิ้นสุดเมื่อครบรอบการเรียกเก็บเงินปัจจุบันและจะไม่ต่ออายุ เราจะย้ายคุณไปยังคอนโซลใหม่", "workspace.black.subscription.rollingUsage": "การใช้งาน 5 ชั่วโมง", "workspace.black.subscription.weeklyUsage": "การใช้งานรายสัปดาห์", "workspace.black.subscription.resetsIn": "รีเซ็ตใน", diff --git a/packages/console/app/src/i18n/tr.ts b/packages/console/app/src/i18n/tr.ts index fc97cef462..9b5dfb238c 100644 --- a/packages/console/app/src/i18n/tr.ts +++ b/packages/console/app/src/i18n/tr.ts @@ -4,6 +4,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Yeni anonim model Space Bunny Free sınırlı bir süre için kullanılabilir", + "go.referral.ended.label": "Uyarı", + "go.referral.ended": + "Tavsiye programı sona erdi. Tavsiye bağlantıları artık size veya bağlantıyı paylaşan kişiye kredi kazandırmıyor.", "go.graph.bonus": "{{count}}× kullanım", "nav.github": "GitHub", "nav.docs": "Dokümantasyon", @@ -265,6 +268,7 @@ export const dict = { "go.meta.description": "Go ayda 10$'dır; cömert kullanım limitleri ve önde gelen kodlama modellerine güvenilir erişim sunar.", "go.hero.title": "Herkes için düşük maliyetli kodlama modelleri", + "go.hero.tagline": "Herhangi bir ajanla kullanın. Gerekirse kredi yükleyin. İstediğiniz zaman iptal edin.", "go.hero.body": "Go, dünya çapındaki programcılara ajan tabanlı kodlama getiriyor. En yetenekli açık kaynaklı modellere cömert limitler ve güvenilir erişim sunarak, maliyet veya erişilebilirlik konusunda endişelenmeden güçlü ajanlarla geliştirme yapmanızı sağlar.", @@ -272,7 +276,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Go'ya abone ol", "go.cta.price": "Ayda 10$", - "go.plans.month": "/ay", + "go.plans.month": "aylık", "go.plans.plus.cta": "Go Plus'a abone ol", "go.plans.plus.description": "Go Plus ayda 40$'dır ve daha yüksek limitler sunar.", "go.plans.go.feature1": "Seçilmiş, uygun fiyatlı modeller", @@ -664,7 +668,6 @@ export const dict = { "workspace.payments.type.subscription": "abonelik", "workspace.payments.view": "Görüntüle", - "workspace.black.loading": "Yükleniyor...", "workspace.black.time.day": "gün", "workspace.black.time.days": "gün", "workspace.black.time.hour": "saat", @@ -674,7 +677,8 @@ export const dict = { "workspace.black.time.fewSeconds": "birkaç saniye", "workspace.black.subscription.title": "Abonelik", "workspace.black.subscription.message": "Aylık ${{plan}} karşılığında OpenCode Black'e abonesiniz.", - "workspace.black.subscription.manage": "Aboneliği Yönet", + "workspace.black.subscription.ending": + "OpenCode Black mevcut fatura döneminizin sonunda sona erer ve yenilenmez. Sizi yeni konsola taşıyacağız.", "workspace.black.subscription.rollingUsage": "5 Saatlik Kullanım", "workspace.black.subscription.weeklyUsage": "Haftalık Kullanım", "workspace.black.subscription.resetsIn": "Sıfırlama süresi", diff --git a/packages/console/app/src/i18n/uk.ts b/packages/console/app/src/i18n/uk.ts index 7fae5bfaa9..32f5750776 100644 --- a/packages/console/app/src/i18n/uk.ts +++ b/packages/console/app/src/i18n/uk.ts @@ -3,6 +3,9 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "Space Bunny Free — нова анонімна модель, доступна протягом обмеженого часу", + "go.referral.ended.label": "Попередження", + "go.referral.ended": + "Реферальну програму завершено. Реферальні посилання більше не нараховують кредити ні вам, ні тому, хто ними поділився.", "go.graph.bonus": "Ліміт ×{{count}}", "nav.github": "GitHub", "nav.docs": "Документація", @@ -263,6 +266,7 @@ export const dict = { "go.meta.description": "Go коштує $10/місяць, зі щедрими лімітами використання та надійним доступом до провідних моделей для кодування.", "go.hero.title": "Недорогі моделі кодування для всіх", + "go.hero.tagline": "Використовуйте з будь-яким агентом. Поповнюйте за потреби. Скасуйте в будь-який час.", "go.hero.body": "Go надає агентне програмування програмістам у всьому світі, пропонуючи щедрі ліміти та надійний доступ до найкращих моделей з відкритим кодом.", @@ -270,7 +274,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "Підписатися на Go", "go.cta.price": "$10/місяць", - "go.plans.month": "/місяць", + "go.plans.month": "на місяць", "go.plans.plus.cta": "Підписатися на Go Plus", "go.plans.plus.description": "Go Plus коштує $40/місяць і пропонує вищі ліміти.", "go.plans.go.feature1": "Відібрані доступні моделі", @@ -659,7 +663,6 @@ export const dict = { "workspace.payments.type.subscription": "підписка", "workspace.payments.view": "Переглянути", - "workspace.black.loading": "Завантаження...", "workspace.black.time.day": "день", "workspace.black.time.days": "дні", "workspace.black.time.hour": "година", @@ -669,7 +672,8 @@ export const dict = { "workspace.black.time.fewSeconds": "кілька секунд", "workspace.black.subscription.title": "Підписка", "workspace.black.subscription.message": "Ви підписані на OpenCode Black за ${{plan}} на місяць.", - "workspace.black.subscription.manage": "Керувати підпискою", + "workspace.black.subscription.ending": + "OpenCode Black завершиться наприкінці поточного розрахункового періоду й не буде подовжений. Ми перенесемо вас до нової консолі.", "workspace.black.subscription.rollingUsage": "Використання (5 год)", "workspace.black.subscription.weeklyUsage": "Тижневе використання", "workspace.black.subscription.resetsIn": "Скидається через", diff --git a/packages/console/app/src/i18n/zh.ts b/packages/console/app/src/i18n/zh.ts index 9ec2536db8..13bbff9302 100644 --- a/packages/console/app/src/i18n/zh.ts +++ b/packages/console/app/src/i18n/zh.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "全新匿名模型 Space Bunny Free 限时上线", + "go.referral.ended.label": "警告", + "go.referral.ended": "推荐计划已结束。推荐链接不再为你或分享链接的人提供额度。", "go.graph.bonus": "{{count}} 倍用量", "nav.github": "GitHub", "nav.docs": "文档", @@ -252,6 +254,7 @@ export const dict = { "go.title": "OpenCode Go | 人人可用的低成本编程模型", "go.meta.description": "Go 每月 $10,提供充裕的使用限额,并可可靠访问领先的编程模型。", "go.hero.title": "人人可用的低成本编程模型", + "go.hero.tagline": "可配合任何代理使用。如有需要可充值。随时取消。", "go.hero.body": "Go 将代理编程带给全世界的程序员。提供充裕的限额和对最强大的开源模型的可靠访问,让您可以利用强大的代理进行构建,而无需担心成本或可用性。", @@ -259,7 +262,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "订阅 Go", "go.cta.price": "$10/月", - "go.plans.month": "/月", + "go.plans.month": "每月", "go.plans.plus.cta": "订阅 Go Plus", "go.plans.plus.description": "Go Plus 每月 $40,提供更高的使用额度。", "go.plans.go.feature1": "精选实惠的模型", @@ -634,7 +637,6 @@ export const dict = { "workspace.payments.type.subscription": "订阅", "workspace.payments.view": "查看", - "workspace.black.loading": "加载中...", "workspace.black.time.day": "天", "workspace.black.time.days": "天", "workspace.black.time.hour": "小时", @@ -644,7 +646,8 @@ export const dict = { "workspace.black.time.fewSeconds": "几秒钟", "workspace.black.subscription.title": "订阅", "workspace.black.subscription.message": "您已订阅 OpenCode Black,价格为每月 ${{plan}}。", - "workspace.black.subscription.manage": "管理订阅", + "workspace.black.subscription.ending": + "OpenCode Black 将在当前计费周期结束时终止,不会续订。我们会将你迁移到新的控制台。", "workspace.black.subscription.rollingUsage": "5 小时用量", "workspace.black.subscription.weeklyUsage": "每周用量", "workspace.black.subscription.resetsIn": "重置于", diff --git a/packages/console/app/src/i18n/zht.ts b/packages/console/app/src/i18n/zht.ts index be1f613f6f..72bd6418af 100644 --- a/packages/console/app/src/i18n/zht.ts +++ b/packages/console/app/src/i18n/zht.ts @@ -4,6 +4,8 @@ import { dict as en } from "./en" export const dict = { ...en, "go.promo.spaceBunny": "全新匿名模型 Space Bunny Free 限時上線", + "go.referral.ended.label": "警告", + "go.referral.ended": "推薦計畫已結束。推薦連結不再為你或分享連結的人提供額度。", "go.graph.bonus": "{{count}} 倍用量", "nav.github": "GitHub", "nav.docs": "文件", @@ -251,6 +253,7 @@ export const dict = { "go.title": "OpenCode Go | 低成本全民編碼模型", "go.meta.description": "Go 每月 $10,提供充裕的使用限額,並可穩定存取領先的編碼模型。", "go.hero.title": "低成本全民編碼模型", + "go.hero.tagline": "可搭配任何代理使用。如有需要可儲值。隨時取消。", "go.hero.body": "Go 將代理編碼帶給全世界的程式設計師。提供寬裕的限額以及對最強大開源模型的穩定存取,讓你可以使用強大的代理進行構建,而無需擔心成本或可用性。", @@ -258,7 +261,7 @@ export const dict = { "go.cta.template": "{{text}} {{price}}", "go.cta.text": "訂閱 Go", "go.cta.price": "$10/月", - "go.plans.month": "/月", + "go.plans.month": "每月", "go.plans.plus.cta": "訂閱 Go Plus", "go.plans.plus.description": "Go Plus 每月 $40,提供更高的使用額度。", "go.plans.go.feature1": "精選實惠的模型", @@ -633,7 +636,6 @@ export const dict = { "workspace.payments.type.subscription": "訂閱", "workspace.payments.view": "檢視", - "workspace.black.loading": "載入中...", "workspace.black.time.day": "天", "workspace.black.time.days": "天", "workspace.black.time.hour": "小時", @@ -643,7 +645,8 @@ export const dict = { "workspace.black.time.fewSeconds": "幾秒鐘", "workspace.black.subscription.title": "訂閱", "workspace.black.subscription.message": "你已訂閱 OpenCode Black,費用為每月 ${{plan}}。", - "workspace.black.subscription.manage": "管理訂閱", + "workspace.black.subscription.ending": + "OpenCode Black 將於目前計費週期結束時終止,不會續訂。我們會將你遷移至新的控制台。", "workspace.black.subscription.rollingUsage": "5 小時使用量", "workspace.black.subscription.weeklyUsage": "每週使用量", "workspace.black.subscription.resetsIn": "重置於", diff --git a/packages/console/app/src/routes/go/index.css b/packages/console/app/src/routes/go/index.css index 0cae41fa9e..72a78c700d 100644 --- a/packages/console/app/src/routes/go/index.css +++ b/packages/console/app/src/routes/go/index.css @@ -153,6 +153,7 @@ body { } [data-component="container"] { + width: 100%; max-width: 67.5rem; margin: 0 auto; border: 1px solid var(--color-border-weak); @@ -321,21 +322,48 @@ body { flex-direction: column; padding: calc(var(--vertical-padding) * 1.5) var(--padding); - [data-slot="zen logo dark"] { - display: none; - } - @media (max-width: 30rem) { padding: var(--vertical-padding) var(--padding); } + } - @media (prefers-color-scheme: dark) { - [data-slot="zen logo light"] { - display: none; - } - [data-slot="zen logo dark"] { - display: block; - } + [data-component="referral-ended-notice"] { + /* Matches the docs warning callout, which uses fixed colors in both themes. */ + border: 1px solid rgb(98, 71, 31); + background: rgb(28, 20, 8); + color: rgb(239, 239, 239); + line-height: 1.8; + padding: 16px; + margin-bottom: 24px; + + strong { + display: block; + text-transform: uppercase; + margin-bottom: 8px; + } + + p { + margin: 0; + } + } + + [data-component="referral-ended-notice"] { + /* Matches the docs warning callout, which uses fixed colors in both themes. */ + border: 1px solid rgb(98, 71, 31); + background: rgb(28, 20, 8); + color: rgb(239, 239, 239); + line-height: 1.8; + padding: 16px; + margin-bottom: 24px; + + strong { + display: block; + text-transform: uppercase; + margin-bottom: 8px; + } + + p { + margin: 0; } } @@ -343,14 +371,15 @@ body { display: flex; align-items: center; gap: 12px; - margin-bottom: 32px; + margin-bottom: 40px; + font-size: 16px; [data-slot="badge"] { background: var(--color-background-strong); color: var(--color-text-inverted); font-weight: 500; padding: 4px 8px; - line-height: 1; + line-height: 1.1; flex-shrink: 0; } @@ -361,89 +390,57 @@ body { } [data-slot="text"] { - color: var(--color-text-strong); - line-height: 1.4; + color: var(--color-text); + line-height: 1.5; + } + + @media (max-width: 40rem) { + flex-direction: column; + align-items: flex-start; + gap: 8px; } } [data-slot="hero-copy"] { - img { - margin-bottom: 24px; + display: flex; + flex-direction: column; + gap: 40px; + margin-bottom: 80px; + + [data-slot="headline"] { + display: flex; + flex-direction: column; + gap: 24px; } h1 { - font-size: 28px; + font-size: 48px; + font-weight: 500; + line-height: 1.25; color: var(--color-text-strong); - font-weight: 700; - margin-bottom: 16px; - display: block; @media (max-width: 60rem) { - font-size: 22px; + font-size: 32px; } } p { + max-width: 720px; + font-size: 16px; + line-height: 1.75; color: var(--color-text); - margin-bottom: 24px; - max-width: 82%; - - @media (max-width: 50rem) { - max-width: 100%; - } - } - - a { - background: var(--color-background-strong); - padding: 8px 12px 8px 20px; - color: var(--color-text-inverted); - border: none; - border-radius: 4px; - font-weight: 500; - cursor: pointer; - margin-bottom: 40px; - display: flex; - width: fit-content; - gap: 12px; - text-decoration: none; - - [data-slot="cta-price"] { - display: inline-flex; - align-items: center; - gap: 8px; - } - - [data-slot="cta-price-old"] { - opacity: 0.45; - text-decoration: line-through; - } - - [data-slot="cta-price-new"] { - opacity: 1; - } - - svg { - opacity: 0.6; - } - } - - a:hover { - background: var(--color-background-strong-hover); } } + [data-slot="model-logos"] { display: flex; - gap: 24px; - margin-bottom: 56px; + flex-wrap: wrap; + gap: 8px; svg { - color: var(--color-background-strong); - } - - @media (prefers-color-scheme: dark) { - svg { - color: var(--color-background-strong); - } + width: 32px; + height: 32px; + color: var(--color-text-strong); } } @@ -1072,86 +1069,100 @@ body { [data-slot="plans"] { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); - gap: 0.75rem; - margin-top: 2rem; - font-family: "Inter", sans-serif; - font-size: 0.8125rem; - font-weight: 440; - line-height: 1.25rem; - letter-spacing: -0.04px; - text-rendering: geometricPrecision; - -webkit-font-smoothing: antialiased; + gap: 24px; + font-size: 16px; + line-height: 1.5; [data-slot="plan"] { display: flex; flex-direction: column; justify-content: space-between; - gap: 1.75rem; - padding: 1rem; - border: 1px solid var(--go-console-border); - border-radius: 6px; - background: var(--go-console-surface); - color: var(--go-console-text); + gap: 80px; + padding: 24px; + border: 1px solid var(--color-border-weak); + background: var(--color-background-weak); } + + [data-slot="plan-body"] { + display: flex; + flex-direction: column; + gap: 16px; + } + [data-slot="name"] { - color: var(--go-console-secondary); - line-height: 1.25rem; + font-weight: 500; + color: var(--color-text); } + [data-slot="price"] { - margin-top: 1rem; - font-size: 1.625rem; - font-weight: 610; - line-height: 2rem; - letter-spacing: -0.5px; + display: flex; + align-items: center; + gap: 12px; + font-size: 64px; + font-weight: 500; + line-height: 1.25; + color: var(--color-text-strong); + span { - font-size: 0.8125rem; - font-weight: 440; - letter-spacing: -0.04px; - color: var(--go-console-secondary); + font-size: 16px; + line-height: 1.5; + color: var(--color-text); } } + ul { - display: grid; - gap: 0.5rem; - margin-top: 1.25rem; + display: flex; + flex-direction: column; + gap: 8px; padding: 0; list-style: none; - color: var(--go-console-secondary); + color: var(--color-text); } + li { display: flex; align-items: center; - gap: 0.5rem; - } - li span { - display: inline-flex; - flex: none; - color: var(--go-console-icon); + gap: 16px; + + svg { + flex: none; + color: var(--color-icon); + } } + a { display: flex; align-items: center; justify-content: center; - height: 2rem; - padding: 0 1rem; - font-size: 0.8125rem; - font-weight: 530; - border: 1px solid var(--go-console-border); - border-radius: 6px; - background: var(--go-console-bg); - color: var(--go-console-text); - text-align: center; + height: 40px; + padding: 0 14px 0 12px; + font-weight: 500; + line-height: 1.1; + background: var(--color-background-strong); + color: var(--color-text-inverted); + box-shadow: + inset 0 -1px 2px rgba(0, 0, 0, 0.06), + inset 0 1px 2px rgba(255, 255, 255, 0.14), + 0 0 0 0.5px var(--color-background-strong-hover), + 0 1px 1.5px rgba(0, 0, 0, 0.2); text-decoration: none; } + a:hover { - background: var(--go-console-track); + background: var(--color-background-strong-hover); } + a:focus-visible { - outline: 2px solid var(--go-console-text); + outline: 2px solid var(--color-text-strong); outline-offset: 2px; } + @media (max-width: 42rem) { grid-template-columns: 1fr; + + [data-slot="price"] { + font-size: 48px; + } } } diff --git a/packages/console/app/src/routes/go/index.tsx b/packages/console/app/src/routes/go/index.tsx index ec1e78efae..ce4137f697 100644 --- a/packages/console/app/src/routes/go/index.tsx +++ b/packages/console/app/src/routes/go/index.tsx @@ -1,10 +1,8 @@ import "./index.css" -import { createAsync, query } from "@solidjs/router" +import { createAsync, query, useSearchParams } from "@solidjs/router" import { Title, Meta } from "@solidjs/meta" -import { For } from "solid-js" +import { For, Show } from "solid-js" //import { HttpHeader } from "@solidjs/start" -import goLogoLight from "../../asset/go-ornate-light.svg" -import goLogoDark from "../../asset/go-ornate-dark.svg" import { EmailSignup } from "~/component/email-signup" import { Faq } from "~/component/faq" import { Legal } from "~/component/legal" @@ -13,7 +11,16 @@ import { Header } from "~/component/header" import { GoPlanChart } from "~/component/go-plan-chart" import { config } from "~/config" import { getLastSeenWorkspaceID } from "../workspace/common" -import { IconMiniMax, IconMiMo, IconZai, IconAlibaba, IconDeepSeek } from "~/component/icon" +import { + IconAlibaba, + IconAnthropic, + IconGoogle, + IconMiniMax, + IconMoonshotAI, + IconOpenAI, + IconXai, + IconZai, +} from "~/component/icon" import { useI18n } from "~/context/i18n" import { useLanguage } from "~/context/language" import { LocaleLinks } from "~/component/locale-links" @@ -61,6 +68,7 @@ export default function Home() { const subscribeUrl = "https://opencode.ai/console/go" const i18n = useI18n() const language = useLanguage() + const [searchParams] = useSearchParams() return (
{/**/} @@ -89,6 +97,12 @@ export default function Home() {
+ + +
{i18n.t("home.banner.badge")}
@@ -96,94 +110,21 @@ export default function Home() {
- - -

{i18n.t("go.hero.title")}

-

{i18n.t("go.hero.body")}

-
- {/* -
- - - - - - - - -
-
- - - - -
-
- -
-
- - - - -
- */} -
- -
-
- - - -
-
- -
-
- -
-
- -
-
- -
- {/* -
- - - -
- */} +
+

{i18n.t("go.hero.title")}

+

{i18n.t("go.hero.body")}

+
+ + + + + + + + +
+

{i18n.t("go.hero.tagline")}

{(plan) => (
-
+

{plan.name}

{plan.price} {i18n.t("go.plans.month")} @@ -217,18 +158,13 @@ export default function Home() { {(feature) => (

  • - + {i18n.t(feature)}
  • )} diff --git a/packages/console/app/src/routes/stripe/webhook.ts b/packages/console/app/src/routes/stripe/webhook.ts index 05f40e4fd2..63aeca80e5 100644 --- a/packages/console/app/src/routes/stripe/webhook.ts +++ b/packages/console/app/src/routes/stripe/webhook.ts @@ -195,6 +195,18 @@ export async function POST(input: APIEvent) { await Billing.unsubscribeBlack({ subscriptionID }) } } + if (body.type === "customer.subscription.updated") { + // Black is retired: no subscription may renew, so undo any renewal made in the billing portal. + const subscription = body.data.object + if (subscription.items.data[0].price.product !== BlackData.productID()) return "ignored" + if (!["active", "trialing", "past_due"].includes(subscription.status)) return "ignored" + if (subscription.cancel_at_period_end || subscription.cancel_at) return "ignored" + + await Billing.stripe().subscriptions.update(subscription.id, { + cancel_at_period_end: true, + cancellation_details: { comment: "Legacy Black retirement: renewal is not allowed" }, + }) + } if (body.type === "customer.subscription.deleted") { const subscriptionID = body.data.object.id if (!subscriptionID) throw new Error("Subscription ID not found") diff --git a/packages/console/app/src/routes/workspace/[id]/billing/black-section.module.css b/packages/console/app/src/routes/workspace/[id]/billing/black-section.module.css index f9dc0cb451..ef76486c16 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/black-section.module.css +++ b/packages/console/app/src/routes/workspace/[id]/billing/black-section.module.css @@ -1,11 +1,4 @@ .root { - [data-slot="title-row"] { - display: flex; - justify-content: space-between; - align-items: center; - gap: var(--space-4); - } - [data-slot="usage"] { display: flex; gap: var(--space-6); diff --git a/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx b/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx index ee3c1fc830..2a39283a73 100644 --- a/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx +++ b/packages/console/app/src/routes/workspace/[id]/billing/black-section.tsx @@ -84,23 +84,6 @@ const enroll = action(async (workspaceID: string) => { ) }, "enroll") -const createSessionUrl = action(async (workspaceID: string, returnUrl: string) => { - "use server" - return json( - await withActor( - () => - Billing.generateSessionUrl({ returnUrl }) - .then((data) => ({ error: undefined, data })) - .catch((e) => ({ - error: e.message as string, - data: undefined, - })), - workspaceID, - ), - { revalidate: [queryBillingInfo.key, querySubscription.key] }, - ) -}, "sessionUrl") - const setUseBalance = action(async (form: FormData) => { "use server" const workspaceID = form.get("workspaceID") as string | null @@ -130,27 +113,16 @@ export function BlackSection() { const i18n = useI18n() const billing = createAsync(() => queryBillingInfo(params.id!)) const subscription = createAsync(() => querySubscription(params.id!)) - const sessionAction = useAction(createSessionUrl) - const sessionSubmission = useSubmission(createSessionUrl) const cancelAction = useAction(cancelWaitlist) const cancelSubmission = useSubmission(cancelWaitlist) const enrollAction = useAction(enroll) const enrollSubmission = useSubmission(enroll) const useBalanceSubmission = useSubmission(setUseBalance) const [store, setStore] = createStore({ - sessionRedirecting: false, cancelled: false, enrolled: false, }) - async function onClickSession() { - const result = await sessionAction(params.id!, window.location.href) - if (result.data) { - setStore("sessionRedirecting", true) - window.location.href = result.data - } - } - async function onClickCancel() { const result = await cancelAction(params.id!) if (!result.error) { @@ -172,18 +144,8 @@ export function BlackSection() {

    {i18n.t("workspace.black.subscription.title")}

    -
    -

    {i18n.t("workspace.black.subscription.message", { plan: sub().plan })}

    - -
    +

    {i18n.t("workspace.black.subscription.message", { plan: sub().plan })}

    +

    {i18n.t("workspace.black.subscription.ending")}

    diff --git a/packages/stats/app/src/routes/index.css b/packages/stats/app/src/routes/index.css index 472280cca3..03009ebfe2 100644 --- a/packages/stats/app/src/routes/index.css +++ b/packages/stats/app/src/routes/index.css @@ -1212,6 +1212,10 @@ body { cursor: pointer; } +[data-page="stats"] [data-slot="top-models-bar"][data-active="true"] { + z-index: 2; +} + [data-page="stats"] [data-slot="top-models-bar"]::before { position: absolute; top: 0; @@ -1572,7 +1576,7 @@ body { gap: 8px; min-width: 220px; padding: 16px; - background: #fffffff2; + background: #ffffff; border: 1px solid var(--stats-line-strong); box-shadow: 0 8px 16px #0000000a, @@ -1640,7 +1644,7 @@ body { width: 192px; min-width: 192px; padding: 0; - background: #fffffff2; + background: #ffffff; border: 0; box-shadow: 0 0 0 0.5px #00000024, @@ -2390,7 +2394,7 @@ body { min-width: 228px; padding: 0; border: 0; - background: #fffffff2; + background: #ffffff; box-shadow: 0 0 0 0.5px #00000024, 0 8px 16px #0000000f, @@ -7325,7 +7329,7 @@ body { [data-page="stats"][data-theme="dark"] [data-component="chart-tooltip"], :root[data-stats-theme="dark"] [data-page="stats"]:not([data-theme="light"]) [data-component="chart-tooltip"] { - background: #242424f2; + background: #242424; } [data-page="stats"][data-theme="dark"] @@ -7340,7 +7344,7 @@ body { [data-page="stats"]:not([data-theme="light"]) :is([data-section="top-models"], [data-section="unique-users"]) [data-component="chart-tooltip"] { - background: #242424f2; + background: #242424; box-shadow: 0 0 0 0.5px #ffffff24, 0 8px 16px #0000003d, @@ -7503,14 +7507,14 @@ body { } :root:not([data-stats-theme="light"]) [data-page="stats"]:not([data-theme="light"]) [data-component="chart-tooltip"] { - background: #242424f2; + background: #242424; } :root:not([data-stats-theme="light"]) [data-page="stats"]:not([data-theme="light"]) [data-section="top-models"] [data-component="chart-tooltip"] { - background: #242424f2; + background: #242424; box-shadow: 0 0 0 0.5px #ffffff24, 0 8px 16px #0000003d,
    - - {model.name} - - {i18n.t("go.graph.new")} - - - {i18n.t("go.graph.limitedTime")} - - - - - - - + {model.name} + + + + {i18n.t("go.graph.new")} + + + {i18n.t("go.graph.limitedTime")} + + + + {i18n.t("go.graph.limitedRegions")} + + + + - - {(selected) => ( - - {format().format(selected === "go" ? model.requests : model.plusRequests)} - - )} - + {format().format(model.requests)} + {format().format(model.plusRequests)} - - {(selected) => ( - - {Number.isFinite(selected === "go" ? model.allowance : model.plusAllowance) - ? currency().format(selected === "go" ? model.allowance : model.plusAllowance) - : "∞"} - - )} - + {Number.isFinite(model.allowance) ? currency().format(model.allowance) : "∞"} + {Number.isFinite(model.plusAllowance) ? currency().format(model.plusAllowance) : "∞"}