From c5f5f69fd6bee11b00225c24c714d55f78b4c21a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tr=C3=A8sAbhi?= <43380238+tresabhi@users.noreply.github.com> Date: Fri, 9 Jan 2026 13:57:28 -0600 Subject: [PATCH] feat: more home page --- packages/i18n/strings/en.json | 6 +++--- .../website-ue/src/components/Code/index.tsx | 2 +- .../website-ue/src/components/ColorScale.astro | 2 +- .../website-ue/src/components/HomeHero.astro | 6 ++++++ .../website-ue/src/components/Text/index.css | 3 +++ .../website-ue/src/components/Text/index.tsx | 18 ++++++++++++++++++ packages/website-ue/src/core/api/abstract.ts | 5 ++--- packages/website-ue/src/core/api/server.ts | 6 ++++-- .../src/core/{react => ui}/classNames.ts | 0 packages/website-ue/src/core/ui/color.ts | 7 +++++++ .../src/pages/api/strings/[locale].json.ts | 15 +++++++++++++++ 11 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 packages/website-ue/src/components/Text/index.css create mode 100644 packages/website-ue/src/components/Text/index.tsx rename packages/website-ue/src/core/{react => ui}/classNames.ts (100%) create mode 100644 packages/website-ue/src/core/ui/color.ts create mode 100644 packages/website-ue/src/pages/api/strings/[locale].json.ts diff --git a/packages/i18n/strings/en.json b/packages/i18n/strings/en.json index dbbbff064..4fddae00b 100644 --- a/packages/i18n/strings/en.json +++ b/packages/i18n/strings/en.json @@ -1,7 +1,6 @@ { "common": { - "name": "BlitzKit", - "credit": "by TrèsAbhi" + "name": "BlitzKit" }, "units": { @@ -28,6 +27,7 @@ }, "home": { - "search": "Search tanks, players, tools..." + "search": "Search tanks, players, tools...", + "credit": "by TrèsAbhi" } } diff --git a/packages/website-ue/src/components/Code/index.tsx b/packages/website-ue/src/components/Code/index.tsx index e88699e3b..9c4c911d1 100644 --- a/packages/website-ue/src/components/Code/index.tsx +++ b/packages/website-ue/src/components/Code/index.tsx @@ -1,5 +1,5 @@ import type { ComponentProps } from "react"; -import { classNames } from "../../core/react/classNames"; +import { classNames } from "../../core/ui/classNames"; import "./index.css"; export interface CodeProps extends ComponentProps<"code"> {} diff --git a/packages/website-ue/src/components/ColorScale.astro b/packages/website-ue/src/components/ColorScale.astro index 0b379e44f..817d00f35 100644 --- a/packages/website-ue/src/components/ColorScale.astro +++ b/packages/website-ue/src/components/ColorScale.astro @@ -1,6 +1,6 @@ --- import * as colors from "@radix-ui/colors"; -import type { Color } from "../pages/styles/colors/[accent].css"; +import type { Color } from "../core/ui/color"; interface Props { color: Color; diff --git a/packages/website-ue/src/components/HomeHero.astro b/packages/website-ue/src/components/HomeHero.astro index 3004f4f29..d370371ea 100644 --- a/packages/website-ue/src/components/HomeHero.astro +++ b/packages/website-ue/src/components/HomeHero.astro @@ -3,6 +3,7 @@ import { MagnifyingGlassIcon } from "@radix-ui/react-icons"; import { api } from "../core/api/dynamic"; import { BlitzKitIcon } from "../icons/BlitzKit"; import { Code } from "./Code"; +import { Text } from "./Text"; import { TextField } from "./TextField"; interface Props { @@ -82,6 +83,7 @@ const strings = await api.strings(locale); .text-field { width: 100%; + max-width: 25rem; } } @@ -96,6 +98,10 @@ const strings = await api.strings(locale); 2.0 + + + {strings.home.credit} + diff --git a/packages/website-ue/src/components/Text/index.css b/packages/website-ue/src/components/Text/index.css new file mode 100644 index 000000000..a53229ffa --- /dev/null +++ b/packages/website-ue/src/components/Text/index.css @@ -0,0 +1,3 @@ +.text { + font-size: var(--font-size-regular); +} diff --git a/packages/website-ue/src/components/Text/index.tsx b/packages/website-ue/src/components/Text/index.tsx new file mode 100644 index 000000000..16d63bd97 --- /dev/null +++ b/packages/website-ue/src/components/Text/index.tsx @@ -0,0 +1,18 @@ +import type { ComponentProps } from "react"; +import type { Color } from "../../core/ui/color"; +import "./index.css"; + +export interface TextProps extends ComponentProps<"span"> { + color?: Color; + lowContrast?: boolean; +} + +export function Text({ color = "gray", lowContrast, ...props }: TextProps) { + return ( + + ); +} diff --git a/packages/website-ue/src/core/api/abstract.ts b/packages/website-ue/src/core/api/abstract.ts index d299f0a2f..550873a87 100644 --- a/packages/website-ue/src/core/api/abstract.ts +++ b/packages/website-ue/src/core/api/abstract.ts @@ -32,9 +32,8 @@ export abstract class AbstractAPI { return await this._strings(locale); } async gameStrings(locale: string, prefix: string) { - const supported = this.assertLocale(locale); - const blitz = supported.blitz ?? supported.locale; - return await this._gameStrings(blitz, prefix); + this.assertLocale(locale); + return await this._gameStrings(locale, prefix); } abstract tank(id: string): Promise; diff --git a/packages/website-ue/src/core/api/server.ts b/packages/website-ue/src/core/api/server.ts index 3bf265b5f..3836ca856 100644 --- a/packages/website-ue/src/core/api/server.ts +++ b/packages/website-ue/src/core/api/server.ts @@ -14,7 +14,9 @@ if (typeof window !== "undefined") { throw new Error("ServerAPI is being evaluated in the browser"); } -const globbedStrings = import.meta.glob("../../../../i18n/strings/*.json"); +const globbedStrings = import.meta.glob("../../../../i18n/strings/*.json", { + import: "default", +}); interface LocalizationConfig { namespaces: string[]; @@ -72,7 +74,7 @@ export class ServerAPI extends AbstractAPI { Object.assign( strings, await fetch( - `${remoteStorage.url}/${remoteStorage.relative_path}/${namespace}/${locale}.yaml` + `${remoteStorage.url}${remoteStorage.relative_path}/${namespace}/${locale}.yaml` ) .then((response) => response.text()) .then((text) => { diff --git a/packages/website-ue/src/core/react/classNames.ts b/packages/website-ue/src/core/ui/classNames.ts similarity index 100% rename from packages/website-ue/src/core/react/classNames.ts rename to packages/website-ue/src/core/ui/classNames.ts diff --git a/packages/website-ue/src/core/ui/color.ts b/packages/website-ue/src/core/ui/color.ts new file mode 100644 index 000000000..d7401fc7d --- /dev/null +++ b/packages/website-ue/src/core/ui/color.ts @@ -0,0 +1,7 @@ +import type * as colors from "@radix-ui/colors"; + +const ignoreEndings = ["A", "P3", "Dark", "DarkA", "DarkP3"] as const; +export type Color = Exclude< + keyof typeof colors, + `${string}${(typeof ignoreEndings)[number]}` | "__esModule" +>; diff --git a/packages/website-ue/src/pages/api/strings/[locale].json.ts b/packages/website-ue/src/pages/api/strings/[locale].json.ts new file mode 100644 index 000000000..ba1981bfe --- /dev/null +++ b/packages/website-ue/src/pages/api/strings/[locale].json.ts @@ -0,0 +1,15 @@ +import locales from "@blitzkit/i18n/locales.json"; +import type { APIContext, GetStaticPaths } from "astro"; +import { api } from "../../../core/api/dynamic"; + +export const getStaticPaths = (() => { + return locales.supported.map(({ locale }) => ({ params: { locale } })); +}) satisfies GetStaticPaths; + +/** + * BlitzKit strings. + */ +export async function GET({ params }: APIContext) { + const strings = await api.strings(params.locale); + return Response.json(strings); +}