diff --git a/apps/mobile/app/bot-settings.tsx b/apps/mobile/app/bot-settings.tsx index 6f11001..111af48 100644 --- a/apps/mobile/app/bot-settings.tsx +++ b/apps/mobile/app/bot-settings.tsx @@ -12,6 +12,7 @@ import { useEffect, useMemo, useState } from "react"; import { Pressable, ScrollView, Text, TextInput, View } from "react-native"; import { BotAvatar } from "../components/bot-avatar"; import { ComputerModePicker } from "../components/computer-mode-picker"; +import { OoAtelier } from "../components/oo-atelier"; import { type MobileBot, type MobileMe, @@ -348,33 +349,9 @@ export default function BotSettingsScreen() { textAlignVertical: "top", }} /> - - {t("Color")} - - - {BOT_COLORS.map((option, index) => ( - setColor(option)} - style={{ - width: 36, - height: 36, - borderRadius: 18, - backgroundColor: option, - borderWidth: 3, - borderColor: color === option ? tokens.foreground : "transparent", - }} - /> - ))} - + + + + Math.abs(step - value) < Math.abs(best - value) ? step : best, + ); +} + +function useLabels() { + const { t } = useI18n(); + const none = t("None"); + return { + species: { + classic: t("Classic"), + cat: t("Cat"), + dog: t("Dog"), + bunny: t("Bunny"), + bear: t("Bear"), + robot: t("Robot"), + ghost: t("Ghost"), + frog: t("Frog"), + penguin: t("Penguin"), + }, + lashes: { none, soft: t("Soft"), full: t("Full"), flick: t("Flick") }, + liner: { none, wing: t("Winged") }, + eyeshadow: { none, rose: t("Rose"), lilac: t("Lilac"), gold: t("Gold"), mint: t("Mint") }, + iris: { + classic: t("Classic"), + brown: t("Brown"), + blue: t("Blue"), + green: t("Green"), + violet: t("Violet"), + }, + sparkle: { dot: t("Dot"), star: t("Star"), heart: t("Heart") }, + brows: { auto: t("When needed"), fine: t("Fine"), bushy: t("Bushy") }, + cheeks: { none, pink: t("Pink"), peach: t("Peach"), freckles: t("Freckles") }, + eyewear: { + none, + round: t("Round"), + nerd: t("Nerd"), + sun: t("Sunglasses"), + heart: t("Heart"), + monocle: t("Monocle"), + reading: t("Reading glasses"), + }, + head: { + none, + chef: t("Chef's hat"), + crown: t("Crown"), + headphones: t("Headphones"), + bow: t("Bow"), + beanie: t("Beanie"), + flower: t("Flower"), + party: t("Party hat"), + }, + neck: { none, bowtie: t("Bow tie"), scarf: t("Scarf"), bell: t("Bell") }, + arms: { glass: t("Glass"), stub: t("Stub"), paw: t("Paw"), robot: t("Robot"), none }, + energy: [t("Calm"), t("Steady"), t("Lively")], + } as const; +} + +function Row({ + title, + values, + selected, + label, + look, + patch, + focus = "body", + onSelect, +}: { + title: string; + values: readonly T[]; + selected: T; + label: (value: T) => string; + look: OoAvatar; + patch: (value: T) => Partial; + focus?: "body" | "face"; + onSelect: (value: T) => void; +}) { + const tokens = useMobileTokens(); + return ( + + {title} + + {values.map((value) => { + const next = { ...look, ...patch(value) }; + const active = value === selected; + return ( + onSelect(value)} + style={{ + width: THUMB + 8, + height: THUMB + 8, + borderRadius: 14, + alignItems: "center", + justifyContent: "center", + overflow: "hidden", + backgroundColor: tokens.muted, + borderWidth: 2, + borderColor: active ? tokens.foreground : "transparent", + }} + > + + + ); + })} + + + ); +} + +/** The Oo look editor: species and colour first, everything else one tap further. */ +export function OoAtelier({ + value, + identity, + onChange, +}: { + value: string; + identity: string; + onChange: (value: string) => void; +}) { + const { t } = useI18n(); + const tokens = useMobileTokens(); + const labels = useLabels(); + const [moreOpen, setMoreOpen] = useState(false); + const look = ooLookForEditing(value, identity); + const set = (field: K, next: OoAvatar[K]) => + onChange(encodeOoAvatar({ ...look, [field]: next })); + const chip = (active: boolean) => ({ + minHeight: 36, + paddingHorizontal: 14, + borderRadius: 18, + justifyContent: "center" as const, + backgroundColor: active ? tokens.foreground : tokens.muted, + }); + const chipText = (active: boolean) => ({ + color: active ? tokens.background : tokens.foreground, + fontSize: 14, + }); + + return ( + + labels.species[species]} + look={look} + patch={(species) => ({ species, arms: species === "robot" ? "robot" : look.arms })} + onSelect={(species) => + onChange( + encodeOoAvatar({ + ...look, + species, + arms: species === "robot" ? "robot" : look.arms === "robot" ? "glass" : look.arms, + }), + ) + } + /> + {look.species === "classic" ? ( + index)} + selected={look.shape ?? -1} + label={(shape) => t("Shape {number}", { number: shape + 1 })} + look={look} + patch={(shape) => ({ shape })} + onSelect={(shape) => set("shape", shape)} + /> + ) : null} + + {t("Color")} + + + {OO_PALETTE_HEXES.map((option, index) => { + const checked = look.color.toLowerCase() === option.toLowerCase(); + return ( + set("color", option)} + style={{ + width: 36, + height: 36, + borderRadius: 18, + backgroundColor: option, + borderWidth: 3, + borderColor: checked ? tokens.foreground : tokens.border, + }} + /> + ); + })} + + + setMoreOpen((open) => !open)} + style={chip(moreOpen)} + > + {t("Customize")} + + onChange(encodeOoAvatar(ooRandomAvatar()))} + style={chip(false)} + > + {t("Surprise me")} + + + {moreOpen ? ( + + labels.lashes[lashes]} + look={look} + patch={(lashes) => ({ lashes })} + focus="face" + onSelect={(lashes) => set("lashes", lashes)} + /> + labels.liner[liner]} + look={look} + patch={(liner) => ({ liner })} + focus="face" + onSelect={(liner) => set("liner", liner)} + /> + labels.eyeshadow[eyeshadow]} + look={look} + patch={(eyeshadow) => ({ eyeshadow })} + focus="face" + onSelect={(eyeshadow) => set("eyeshadow", eyeshadow)} + /> + labels.iris[iris]} + look={look} + patch={(iris) => ({ iris })} + focus="face" + onSelect={(iris) => set("iris", iris)} + /> + labels.sparkle[sparkle]} + look={look} + patch={(sparkle) => ({ sparkle })} + focus="face" + onSelect={(sparkle) => set("sparkle", sparkle)} + /> + labels.brows[brows]} + look={look} + patch={(brows) => ({ brows })} + focus="face" + onSelect={(brows) => set("brows", brows)} + /> + labels.cheeks[cheeks]} + look={look} + patch={(cheeks) => ({ cheeks })} + focus="face" + onSelect={(cheeks) => set("cheeks", cheeks)} + /> + labels.eyewear[eyewear]} + look={look} + patch={(eyewear) => ({ eyewear })} + focus="face" + onSelect={(eyewear) => set("eyewear", eyewear)} + /> + labels.head[head]} + look={look} + patch={(head) => ({ head })} + onSelect={(head) => set("head", head)} + /> + labels.neck[neck]} + look={look} + patch={(neck) => ({ neck })} + onSelect={(neck) => set("neck", neck)} + /> + labels.arms[arms]} + look={look} + patch={(arms) => ({ arms })} + onSelect={(arms) => set("arms", arms)} + /> + {( + [ + ["energy", t("Energy"), ENERGY_STEPS], + ["playful", t("Playful"), PLAYFUL_STEPS], + ] as const + ).map(([field, title, steps]) => { + const current = nearest(steps, look[field]); + return ( + + {title} + + {steps.map((step, index) => ( + set(field, step)} + style={chip(step === current)} + > + {labels.energy[index]} + + ))} + + + ); + })} + + ) : null} + + ); +} diff --git a/apps/mobile/components/oo-figure.tsx b/apps/mobile/components/oo-figure.tsx index 9adcda8..1ff8dcb 100644 --- a/apps/mobile/components/oo-figure.tsx +++ b/apps/mobile/components/oo-figure.tsx @@ -26,6 +26,7 @@ import Svg, { } from "react-native-svg"; const VIEWBOX = `${OO_RIG_INSET} ${OO_RIG_INSET + 4} ${OO_RIG_SIZE - 2 * OO_RIG_INSET} ${OO_RIG_SIZE - 2 * OO_RIG_INSET}`; +const FACE_VIEWBOX = "47 62 112 112"; /** Native frames redraw the SVG tree, so they run at half the display rate. */ const FRAME_SECONDS = 1 / 30; /** Above this size an Oo always moves; smaller ones only for list moments. */ @@ -151,6 +152,7 @@ export function OoFigure({ moment, size, still = false, + focus = "body", }: { avatar: OoAvatar; color: string; @@ -158,6 +160,8 @@ export function OoFigure({ moment: OoMoment; size: number; still?: boolean; + /** `face` crops to the eyes, for pickers of eye styles and eyewear. */ + focus?: "body" | "face"; }) { const gradient = `oo${useId().replace(/[^a-zA-Z0-9-_]/g, "")}`; const lod = ooLodForSize(size); @@ -200,7 +204,7 @@ export function OoFigure({ const shown = frame ?? stillFrame; const { colors } = rig; return ( - + diff --git a/apps/mobile/lib/locales/ru.ts b/apps/mobile/lib/locales/ru.ts index 64ab1fa..4b527fd 100644 --- a/apps/mobile/lib/locales/ru.ts +++ b/apps/mobile/lib/locales/ru.ts @@ -616,6 +616,76 @@ export const RU_MESSAGES: Record = { "Start timer": "Запустить таймер", "Step {position} of {total}": "Шаг {position} из {total}", "Stop timer": "Остановить таймер", + Arms: "Руки", + Beanie: "Шапка", + Bear: "Медведь", + Bell: "Колокольчик", + Blue: "Синий", + Bow: "Бантик", + "Bow tie": "Бабочка", + Brown: "Карий", + Brows: "Брови", + Bunny: "Зайчик", + Bushy: "Густые", + Calm: "Спокойный", + Cat: "Кошка", + Cheeks: "Щёки", + "Chef's hat": "Колпак повара", + Classic: "Классика", + Crown: "Корона", + Customize: "Настроить", + Dog: "Собака", + Dot: "Точка", + Energy: "Энергия", + Eyeliner: "Подводка", + Eyeshadow: "Тени", + Fine: "Тонкие", + Flick: "Взмах", + Flower: "Цветок", + Freckles: "Веснушки", + Frog: "Лягушка", + Full: "Пышные", + Ghost: "Призрак", + Glass: "Стекло", + Glasses: "Очки", + Gold: "Золото", + Green: "Зелёный", + Hat: "Голова", + Headphones: "Наушники", + Heart: "Сердце", + Iris: "Радужка", + Lashes: "Ресницы", + Lilac: "Сирень", + Lively: "Живой", + Mint: "Мята", + Monocle: "Монокль", + Neck: "Шея", + Nerd: "Ботаник", + None: "Нет", + "Party hat": "Колпак", + Paw: "Лапка", + Peach: "Персик", + Penguin: "Пингвин", + Pink: "Розовый", + Playful: "Игривость", + "Reading glasses": "Очки для чтения", + Robot: "Робот", + Rose: "Роза", + Round: "Круглые", + Scarf: "Шарф", + Shape: "Форма", + "Shape {number}": "Форма {number}", + Soft: "Мягкие", + Sparkle: "Блик", + Species: "Существо", + Star: "Звезда", + Steady: "Ровный", + Stub: "Коротышки", + Sunglasses: "Солнечные очки", + "Surprise me": "Удиви меня", + Violet: "Фиолетовый", + "When needed": "По ситуации", + Winged: "Стрелка", Accept: "Принять", Dismissed: "Отклонено", Expired: "Истекло", diff --git a/apps/mobile/lib/locales/zh.ts b/apps/mobile/lib/locales/zh.ts index a477242..eefee23 100644 --- a/apps/mobile/lib/locales/zh.ts +++ b/apps/mobile/lib/locales/zh.ts @@ -600,6 +600,76 @@ export const ZH_MESSAGES: Record = { "Start timer": "开始计时", "Step {position} of {total}": "第 {position} 步,共 {total} 步", "Stop timer": "停止计时", + Arms: "手臂", + Beanie: "毛线帽", + Bear: "熊", + Bell: "铃铛", + Blue: "蓝色", + Bow: "蝴蝶结", + "Bow tie": "领结", + Brown: "棕色", + Brows: "眉毛", + Bunny: "兔子", + Bushy: "浓密", + Calm: "安静", + Cat: "猫", + Cheeks: "脸颊", + "Chef's hat": "厨师帽", + Classic: "经典", + Crown: "皇冠", + Customize: "自定义", + Dog: "狗", + Dot: "圆点", + Energy: "活力", + Eyeliner: "眼线", + Eyeshadow: "眼影", + Fine: "细", + Flick: "上挑", + Flower: "花朵", + Freckles: "雀斑", + Frog: "青蛙", + Full: "浓密", + Ghost: "幽灵", + Glass: "玻璃", + Glasses: "眼镜", + Gold: "金色", + Green: "绿色", + Hat: "头饰", + Headphones: "耳机", + Heart: "爱心", + Iris: "虹膜", + Lashes: "睫毛", + Lilac: "丁香", + Lively: "活泼", + Mint: "薄荷", + Monocle: "单片眼镜", + Neck: "颈部", + Nerd: "书呆子", + None: "无", + "Party hat": "派对帽", + Paw: "爪子", + Peach: "桃色", + Penguin: "企鹅", + Pink: "粉色", + Playful: "俏皮", + "Reading glasses": "老花镜", + Robot: "机器人", + Rose: "玫瑰", + Round: "圆形", + Scarf: "围巾", + Shape: "形状", + "Shape {number}": "形状 {number}", + Soft: "柔和", + Sparkle: "高光", + Species: "物种", + Star: "星星", + Steady: "平稳", + Stub: "短短", + Sunglasses: "墨镜", + "Surprise me": "给我惊喜", + Violet: "紫色", + "When needed": "需要时", + Winged: "上扬", Accept: "接受", Dismissed: "已忽略", Expired: "已过期", diff --git a/apps/web/e2e/avatar-studio.spec.ts b/apps/web/e2e/avatar-studio.spec.ts deleted file mode 100644 index 73155dc..0000000 --- a/apps/web/e2e/avatar-studio.spec.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { expect, test } from "@playwright/test"; -import { captureScreenshot, completeOnboarding, signup } from "./helpers"; - -test("bot settings open Avatar Studio on the Bot tab", async ({ page }, testInfo) => { - const stamp = Date.now(); - await signup(page, `avatar-studio-${stamp}@rakazo.test`, "password12", "Avatar Studio"); - await completeOnboarding(page); - await page.goto("/app"); - await page.waitForURL(/\/app\/[^/]+$/); - - await page.getByTestId("bot-settings-trigger").click(); - const settings = page.getByTestId("bot-settings"); - await expect(settings).toBeVisible(); - - await settings.getByTestId("avatar-studio-trigger").click(); - const studio = page.getByTestId("avatar-studio"); - await expect(studio).toBeVisible(); - await expect(studio.getByText("Avatar Studio", { exact: true })).toBeVisible(); - await expect(studio.getByRole("button", { name: "Bot", exact: true })).toBeVisible(); - await expect(studio.getByRole("button", { name: "Upload", exact: true })).toBeVisible(); - await expect(studio.getByRole("button", { name: "Generate" })).toHaveCount(0); - await expect(studio.getByTestId("avatar-studio-bot-tab")).toBeVisible(); - await expect(studio.getByText("Shape", { exact: true })).toBeVisible(); - await expect(studio.getByText("Color", { exact: true })).toBeVisible(); - - await captureScreenshot(page, testInfo, "avatar-studio-bot-tab"); -}); diff --git a/apps/web/e2e/bot-crud.spec.ts b/apps/web/e2e/bot-crud.spec.ts index 3c9d46a..e0581de 100644 --- a/apps/web/e2e/bot-crud.spec.ts +++ b/apps/web/e2e/bot-crud.spec.ts @@ -73,10 +73,10 @@ test("bot creation, editing, and deletion persist", async ({ page }, testInfo) = await nameInput.fill("Researcher"); await titleInput.fill(longTitle); await descriptionInput.fill("Finds reliable sources and turns them into concise briefs."); - await page.getByTestId("avatar-studio-trigger").click(); - const studio = page.getByTestId("avatar-studio"); + await page.getByTestId("oo-atelier-trigger").click(); + const studio = page.getByTestId("oo-atelier"); await expect(studio).toBeVisible(); - await expect(studio.getByTestId("avatar-studio-bot-tab")).toBeVisible(); + await expect(studio.getByTestId("oo-atelier-body")).toBeVisible(); await studio.getByRole("button", { name: "Color #EAB308" }).click(); await studio.getByRole("button", { name: "Done", exact: true }).click(); await expect(studio).toBeHidden(); @@ -91,7 +91,7 @@ test("bot creation, editing, and deletion persist", async ({ page }, testInfo) = "Finds reliable sources and turns them into concise briefs.", ); const settings = page.getByTestId("bot-settings"); - await settings.getByTestId("avatar-studio-trigger").click(); + await settings.getByTestId("oo-atelier-trigger").click(); await expect(studio).toBeVisible(); await expect(studio.getByRole("button", { name: "Color #EAB308" })).toHaveClass(/ring-2/); await studio.getByRole("button", { name: "Done", exact: true }).click(); diff --git a/apps/web/e2e/fixtures/oo-atelier.html b/apps/web/e2e/fixtures/oo-atelier.html new file mode 100644 index 0000000..8841fa2 --- /dev/null +++ b/apps/web/e2e/fixtures/oo-atelier.html @@ -0,0 +1,12 @@ + + + + + + Oo atelier + + +
+ + + diff --git a/apps/web/e2e/fixtures/oo-atelier.tsx b/apps/web/e2e/fixtures/oo-atelier.tsx new file mode 100644 index 0000000..221f002 --- /dev/null +++ b/apps/web/e2e/fixtures/oo-atelier.tsx @@ -0,0 +1,32 @@ +import { setupI18n } from "@lingui/core"; +import { I18nProvider } from "@lingui/react"; +import { useState } from "react"; +import { createRoot } from "react-dom/client"; +import { OoAtelierDialog } from "../../src/components/OoAtelier"; +import "../../src/styles.css"; + +const params = new URLSearchParams(location.search); +document.documentElement.dataset.theme = params.get("theme") === "dark" ? "dark" : "light"; +const i18n = setupI18n({ locale: "en", messages: { en: {} } }); + +function Atelier() { + const [value, setValue] = useState("oo1:c=FF781C;sp=cat;la=soft;ir=green;ew=round;hd=chef"); + return ( + undefined} + value={value} + identity="fixture" + onChange={setValue} + allowUpload + /> + ); +} + +createRoot(document.getElementById("root")!).render( + +
+ +
+
, +); diff --git a/apps/web/e2e/oo-atelier.spec.ts b/apps/web/e2e/oo-atelier.spec.ts new file mode 100644 index 0000000..221ce44 --- /dev/null +++ b/apps/web/e2e/oo-atelier.spec.ts @@ -0,0 +1,59 @@ +import { expect, test } from "@playwright/test"; +import { captureScreenshot, completeOnboarding, signup } from "./helpers"; + +test("bot settings open the Atelier and dress the Oo", async ({ page }, testInfo) => { + const stamp = Date.now(); + await signup(page, `oo-atelier-${stamp}@rakazo.test`, "password12", "Atelier"); + await completeOnboarding(page); + await page.goto("/app"); + await page.waitForURL(/\/app\/[^/]+$/); + + await page.getByTestId("bot-settings-trigger").click(); + const settings = page.getByTestId("bot-settings"); + await expect(settings).toBeVisible(); + + await settings.getByTestId("oo-atelier-trigger").click(); + const atelier = page.getByTestId("oo-atelier"); + await expect(atelier).toBeVisible(); + await expect(atelier.getByTestId("oo-atelier-body")).toBeVisible(); + + await atelier.getByRole("button", { name: "Cat", exact: true }).click(); + await expect( + atelier.locator('[data-testid="oo-atelier-preview"] svg[data-oo-species="cat"]'), + ).toBeVisible(); + await captureScreenshot(page, testInfo, "oo-atelier-body"); + + await atelier.getByRole("tab", { name: "Eyes" }).click(); + await atelier.getByRole("button", { name: "Full", exact: true }).click(); + await atelier.getByRole("button", { name: "Green", exact: true }).click(); + await captureScreenshot(page, testInfo, "oo-atelier-eyes"); + + await atelier.getByRole("tab", { name: "Extras" }).click(); + await atelier.getByRole("button", { name: "Round", exact: true }).click(); + await atelier.getByRole("button", { name: "Chef's hat", exact: true }).click(); + await captureScreenshot(page, testInfo, "oo-atelier-extras"); + + await atelier.getByRole("button", { name: "Done", exact: true }).click(); + await expect(atelier).toBeHidden(); + const avatar = settings.locator('[data-testid="oo-atelier-trigger"] svg[data-oo-species="cat"]'); + await expect(avatar).toBeVisible(); + + await page.reload(); + await page.getByTestId("bot-settings-trigger").click(); + await expect( + page.locator( + '[data-testid="bot-settings"] [data-testid="oo-atelier-trigger"] svg[data-oo-species="cat"]', + ), + ).toBeVisible(); +}); + +for (const theme of ["light", "dark"] as const) { + test(`Atelier reads well in ${theme} mode`, async ({ page }, testInfo) => { + await page.emulateMedia({ colorScheme: theme }); + await page.goto(`/e2e/fixtures/oo-atelier.html?theme=${theme}`); + const atelier = page.getByTestId("oo-atelier"); + await expect(atelier).toBeVisible(); + await expect(atelier.locator("svg[data-oo-species]").first()).toBeVisible(); + await captureScreenshot(page, testInfo, `oo-atelier-${theme}`); + }); +} diff --git a/apps/web/src/components/OoAtelier.tsx b/apps/web/src/components/OoAtelier.tsx new file mode 100644 index 0000000..2aa2c8c --- /dev/null +++ b/apps/web/src/components/OoAtelier.tsx @@ -0,0 +1,616 @@ +import { Trans, useLingui } from "@lingui/react/macro"; +import type { OoAvatar, OoMoment } from "@rakazo/core"; +import { + DEFAULT_OO_AVATAR, + encodeOoAvatar, + OO_ARMS, + OO_BROWS, + OO_CHEEKS, + OO_CLASSIC_SHAPE_COUNT, + OO_ENERGY_RANGE, + OO_EYESHADOWS, + OO_EYEWEAR, + OO_HEADWEAR, + OO_IRISES, + OO_LASHES, + OO_LINERS, + OO_NECKWEAR, + OO_PALETTE_HEXES, + OO_SPARKLES, + OO_SPECIES, + ooLookForEditing, + ooRandomAvatar, +} from "@rakazo/core"; +import { + BotAvatar, + Dialog, + DialogContent, + DialogDescription, + DialogFooter, + DialogHeader, + DialogTitle, + OoFigure, + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from "@rakazo/ui-web"; +import { Check, Dices, Pencil, Upload, X } from "lucide-react"; +import type { ClipboardEvent, DragEvent, ReactNode } from "react"; +import { useRef, useState } from "react"; + +type Field = keyof OoAvatar; + +/** Option rows of the Atelier; every value is drawn as the Oo wearing it. */ +function useOptionLabels() { + const { t } = useLingui(); + const none = t`None`; + return { + species: { + classic: t`Classic`, + cat: t`Cat`, + dog: t`Dog`, + bunny: t`Bunny`, + bear: t`Bear`, + robot: t`Robot`, + ghost: t`Ghost`, + frog: t`Frog`, + penguin: t`Penguin`, + }, + lashes: { none, soft: t`Soft`, full: t`Full`, flick: t`Flick` }, + liner: { none, wing: t`Winged` }, + eyeshadow: { none, rose: t`Rose`, lilac: t`Lilac`, gold: t`Gold`, mint: t`Mint` }, + iris: { + classic: t`Classic`, + brown: t`Brown`, + blue: t`Blue`, + green: t`Green`, + violet: t`Violet`, + }, + sparkle: { dot: t`Dot`, star: t`Star`, heart: t`Heart` }, + brows: { auto: t`When needed`, fine: t`Fine`, bushy: t`Bushy` }, + cheeks: { none, pink: t`Pink`, peach: t`Peach`, freckles: t`Freckles` }, + eyewear: { + none, + round: t`Round`, + nerd: t`Nerd`, + sun: t`Sunglasses`, + heart: t`Heart`, + monocle: t`Monocle`, + reading: t`Reading glasses`, + }, + head: { + none, + chef: t`Chef's hat`, + crown: t`Crown`, + headphones: t`Headphones`, + bow: t`Bow`, + beanie: t`Beanie`, + flower: t`Flower`, + party: t`Party hat`, + }, + neck: { none, bowtie: t`Bow tie`, scarf: t`Scarf`, bell: t`Bell` }, + arms: { glass: t`Glass`, stub: t`Stub`, paw: t`Paw`, robot: t`Robot`, none }, + } as const; +} + +function OptionGroup({ + title, + values, + selected, + label, + render, + onSelect, +}: { + title: string; + values: readonly T[]; + selected: T; + label: (value: T) => string; + render: (value: T) => ReactNode; + onSelect: (value: T) => void; +}) { + return ( +
+ {title} +
+ {values.map((value) => { + const active = value === selected; + return ( + + ); + })} +
+
+ ); +} + +export interface OoAtelierDialogProps { + open: boolean; + onOpenChange: (open: boolean) => void; + value: string; + identity: string; + status?: string; + onChange: (value: string) => void; + /** Bots may wear an uploaded picture instead of an Oo. */ + allowUpload?: boolean; +} + +export function OoAtelierDialog({ + open, + onOpenChange, + value, + identity, + status, + onChange, + allowUpload = false, +}: OoAtelierDialogProps) { + const { t } = useLingui(); + const labels = useOptionLabels(); + const [draft, setDraft] = useState(null); + const [preview, setPreview] = useState(undefined); + const [dragOver, setDragOver] = useState(false); + const fileInputRef = useRef(null); + const isPicture = value.startsWith("data:image/"); + const look = draft ?? ooLookForEditing(value, identity); + const encoded = encodeOoAvatar(look); + + function commit(next: OoAvatar) { + setDraft(null); + onChange(encodeOoAvatar(next)); + } + + function set(field: K, next: OoAvatar[K]) { + commit({ ...look, [field]: next }); + } + + function slide(field: "energy" | "playful", next: number) { + setDraft({ ...look, [field]: next }); + setPreview(field === "energy" ? "working" : "greeting"); + } + + function settle() { + if (draft) commit(draft); + setPreview(undefined); + } + + function thumb(next: Partial, focus: "body" | "face" = "body") { + return ( + + ); + } + + function processImageFile(file: File) { + if (!file.type.startsWith("image/")) return; + const reader = new FileReader(); + reader.onload = (event) => { + const src = event.target?.result as string; + if (!src) return; + const img = new Image(); + img.onload = () => { + const canvas = document.createElement("canvas"); + const ctx = canvas.getContext("2d"); + const targetSize = 256; + canvas.width = targetSize; + canvas.height = targetSize; + if (!ctx) return; + ctx.beginPath(); + ctx.arc(targetSize / 2, targetSize / 2, targetSize / 2, 0, Math.PI * 2); + ctx.clip(); + const minDim = Math.min(img.width, img.height); + const sx = (img.width - minDim) / 2; + const sy = (img.height - minDim) / 2; + ctx.drawImage(img, sx, sy, minDim, minDim, 0, 0, targetSize, targetSize); + onChange(canvas.toDataURL("image/webp", 0.9)); + onOpenChange(false); + }; + img.src = src; + }; + reader.readAsDataURL(file); + } + + function handleDrop(event: DragEvent) { + event.preventDefault(); + setDragOver(false); + const file = event.dataTransfer.files?.[0]; + if (file) processImageFile(file); + } + + function handlePaste(event: ClipboardEvent) { + const items = event.clipboardData?.items; + if (!items) return; + for (let index = 0; index < items.length; index += 1) { + const item = items[index]; + if (!item?.type.startsWith("image/")) continue; + const file = item.getAsFile(); + if (file) { + processImageFile(file); + break; + } + } + } + + const sliderClass = "w-full accent-primary"; + return ( + + + + + Atelier + + + Choose how your Oo looks and moves + + + + +
+ +
+ + + + + Body + + + Eyes + + + Extras + + {allowUpload ? ( + + Upload + + ) : null} + + + + labels.species[species]} + render={(species) => + thumb({ species, arms: species === "robot" ? "robot" : look.arms }) + } + onSelect={(species) => + commit({ + ...look, + species, + arms: species === "robot" ? "robot" : look.arms === "robot" ? "glass" : look.arms, + }) + } + /> + {look.species === "classic" ? ( + index)} + selected={look.shape ?? -1} + label={(shape) => t`Shape ${shape + 1}`} + render={(shape) => thumb({ shape })} + onSelect={(shape) => set("shape", shape)} + /> + ) : null} +
+ + Color + +
+ {OO_PALETTE_HEXES.map((color) => { + const selected = !isPicture && look.color.toLowerCase() === color.toLowerCase(); + return ( +
+
+
+ + +
+
+ + + labels.lashes[lashes]} + render={(lashes) => thumb({ lashes }, "face")} + onSelect={(lashes) => set("lashes", lashes)} + /> + labels.liner[liner]} + render={(liner) => thumb({ liner }, "face")} + onSelect={(liner) => set("liner", liner)} + /> + labels.eyeshadow[eyeshadow]} + render={(eyeshadow) => thumb({ eyeshadow }, "face")} + onSelect={(eyeshadow) => set("eyeshadow", eyeshadow)} + /> + labels.iris[iris]} + render={(iris) => thumb({ iris }, "face")} + onSelect={(iris) => set("iris", iris)} + /> + labels.sparkle[sparkle]} + render={(sparkle) => thumb({ sparkle }, "face")} + onSelect={(sparkle) => set("sparkle", sparkle)} + /> + labels.brows[brows]} + render={(brows) => thumb({ brows }, "face")} + onSelect={(brows) => set("brows", brows)} + /> + labels.cheeks[cheeks]} + render={(cheeks) => thumb({ cheeks }, "face")} + onSelect={(cheeks) => set("cheeks", cheeks)} + /> + + + + labels.eyewear[eyewear]} + render={(eyewear) => thumb({ eyewear }, "face")} + onSelect={(eyewear) => set("eyewear", eyewear)} + /> + labels.head[head]} + render={(head) => thumb({ head })} + onSelect={(head) => set("head", head)} + /> + labels.neck[neck]} + render={(neck) => thumb({ neck })} + onSelect={(neck) => set("neck", neck)} + /> + labels.arms[arms]} + render={(arms) => thumb({ arms })} + onSelect={(arms) => set("arms", arms)} + /> + + + {allowUpload ? ( + + + + ) : null} +
+ + +
+ + +
+ +
+
+
+ ); +} + +export interface OoAtelierProps { + value: string; + identity?: string; + status?: string; + size?: number; + onChange: (value: string) => void; + disabled?: boolean; +} + +/** The bot's avatar; tapping it opens the Atelier. */ +export function OoAtelier({ + value, + identity = "", + status, + size = 72, + onChange, + disabled = false, +}: OoAtelierProps) { + const { t } = useLingui(); + const [open, setOpen] = useState(false); + return ( + <> + + + + ); +} diff --git a/apps/web/src/components/onboarding/OnboardingOoDesigner.tsx b/apps/web/src/components/onboarding/OnboardingOoDesigner.tsx index 1a34edd..a4003bb 100644 --- a/apps/web/src/components/onboarding/OnboardingOoDesigner.tsx +++ b/apps/web/src/components/onboarding/OnboardingOoDesigner.tsx @@ -1,4 +1,5 @@ import { Trans, useLingui } from "@lingui/react/macro"; +import type { EvooPose } from "@rakazo/ui-web"; import { BotAvatar, Button } from "@rakazo/ui-web"; import { type ReactNode, useCallback, useEffect, useMemo, useState } from "react"; import { @@ -8,12 +9,10 @@ import { type LookPreset, lookPresetToAvatarValue, } from "../../lib/onboarding-look-categories"; +import { OoAtelierDialog } from "../OoAtelier"; import { LookPreviewCarousel } from "./LookPreviewCarousel"; export interface OnboardingEmojiConfig { - color: string; - shapeIndex: number; - accessory: string; pose: string; avatarValue: string; } @@ -43,23 +42,8 @@ function categoryLabel(id: LookCategoryId): ReactNode { } } -function presetFromConfig(config: OnboardingEmojiConfig): LookPreset { - return { - id: "custom", - color: config.color, - shapeIndex: config.shapeIndex, - pose: config.pose as LookPreset["pose"], - }; -} - function configFromPreset(preset: LookPreset): OnboardingEmojiConfig { - return { - color: preset.color, - shapeIndex: preset.shapeIndex, - accessory: "none", - pose: preset.pose, - avatarValue: lookPresetToAvatarValue(preset), - }; + return { pose: preset.pose, avatarValue: lookPresetToAvatarValue(preset) }; } export function OnboardingOoDesigner({ config, onChange, onContinue }: OnboardingOoDesignerProps) { @@ -80,29 +64,19 @@ export function OnboardingOoDesigner({ config, onChange, onContinue }: Onboardin [onChange], ); + const [atelierOpen, setAtelierOpen] = useState(false); + useEffect(() => { const match = LOOK_CATEGORIES.find((entry) => - entry.looks.some( - (look) => - look.color.toLowerCase() === config.color.toLowerCase() && - look.shapeIndex === config.shapeIndex && - look.pose === config.pose, - ), + entry.looks.some((look) => look.avatar === config.avatarValue), ); if (match) { - const index = match.looks.findIndex( - (look) => - look.color.toLowerCase() === config.color.toLowerCase() && - look.shapeIndex === config.shapeIndex && - look.pose === config.pose, - ); + const index = match.looks.findIndex((look) => look.avatar === config.avatarValue); setCategoryId(match.id); setLookIndex(index >= 0 ? index : 0); } }, []); - const activeLook = category.looks[lookIndex] ?? presetFromConfig(config); - const handleLookIndexChange = useCallback( (index: number) => { const preset = category.looks[index]; @@ -132,10 +106,11 @@ export function OnboardingOoDesigner({ config, onChange, onContinue }: Onboardin onIndexChange={handleLookIndexChange} preview={ } /> @@ -174,13 +149,30 @@ export function OnboardingOoDesigner({ config, onChange, onContinue }: Onboardin
- +
+ + +
+ onChange({ ...config, avatarValue })} + /> ); } diff --git a/apps/web/src/lib/onboarding-look-categories.test.ts b/apps/web/src/lib/onboarding-look-categories.test.ts index cfe634e..bb4d8fd 100644 --- a/apps/web/src/lib/onboarding-look-categories.test.ts +++ b/apps/web/src/lib/onboarding-look-categories.test.ts @@ -1,6 +1,6 @@ +import { isValidAvatarValue } from "@rakazo/core"; import { describe, expect, it } from "vitest"; import { - buildAvatarValue, findLookCategory, LOOK_CATEGORIES, lookPresetToAvatarValue, @@ -14,10 +14,13 @@ describe("onboarding-look-categories", () => { } }); - it("builds avatar values in color::shape format", () => { - const look = findLookCategory("coder").looks[0]!; - expect(lookPresetToAvatarValue(look)).toBe(buildAvatarValue(look.color, look.shapeIndex)); - expect(buildAvatarValue("#8B5CF6", 2)).toBe("#8B5CF6::shape_2"); + it("stores every look as a valid avatar value", () => { + for (const category of LOOK_CATEGORIES) { + for (const look of category.looks) { + expect(isValidAvatarValue(lookPresetToAvatarValue(look)), look.id).toBe(true); + expect(look.avatar.startsWith("oo1:"), look.id).toBe(true); + } + } }); it("falls back to the first category for unknown ids", () => { diff --git a/apps/web/src/lib/onboarding-look-categories.ts b/apps/web/src/lib/onboarding-look-categories.ts index 6ce42ef..5ef9a8b 100644 --- a/apps/web/src/lib/onboarding-look-categories.ts +++ b/apps/web/src/lib/onboarding-look-categories.ts @@ -4,8 +4,8 @@ export type LookCategoryId = "work" | "hobby" | "scene" | "coder" | "calm"; export interface LookPreset { id: string; - color: string; - shapeIndex: number; + /** Encoded `oo1:` look. */ + avatar: string; pose: EvooPose; } @@ -14,51 +14,59 @@ export interface LookCategory { looks: LookPreset[]; } -/** Curated look families built from existing shape, color, and pose taxonomies. */ +/** Curated looks per vibe; each starts a different species so the first swipe shows the range. */ export const LOOK_CATEGORIES: LookCategory[] = [ { id: "work", looks: [ - { id: "work-violet-hex", color: "#8B5CF6", shapeIndex: 0, pose: "working" }, - { id: "work-blue-tablet", color: "#3B82F6", shapeIndex: 3, pose: "analyzing" }, - { id: "work-white-squircle", color: "#FFFFFF", shapeIndex: 2, pose: "listening" }, - { id: "work-green-wedge", color: "#10B981", shapeIndex: 1, pose: "reading" }, + { id: "work-violet", avatar: "oo1:c=8B5CF6;ew=round;nk=bowtie", pose: "working" }, + { id: "work-penguin", avatar: "oo1:c=3B82F6;sp=penguin;ew=reading", pose: "analyzing" }, + { + id: "work-robot", + avatar: "oo1:c=FFFFFF;sp=robot;ar=robot;hd=headphones", + pose: "listening", + }, + { id: "work-bear", avatar: "oo1:c=8D6E63;sp=bear;ar=paw;ew=nerd", pose: "reading" }, ], }, { id: "hobby", looks: [ - { id: "hobby-orange-blob", color: "#F97316", shapeIndex: 5, pose: "delighted" }, - { id: "hobby-yellow-pebble", color: "#EAB308", shapeIndex: 4, pose: "curious" }, - { id: "hobby-red-teardrop", color: "#EF4444", shapeIndex: 6, pose: "greeting" }, - { id: "hobby-cyan-cloud", color: "#06B6D4", shapeIndex: 7, pose: "speaking" }, + { id: "hobby-dog", avatar: "oo1:c=F97316;sp=dog;ar=paw;nk=scarf", pose: "delighted" }, + { id: "hobby-frog", avatar: "oo1:c=10B981;sp=frog;hd=flower", pose: "curious" }, + { id: "hobby-cat", avatar: "oo1:c=EAB308;sp=cat;ar=paw;hd=beanie", pose: "greeting" }, + { id: "hobby-chef", avatar: "oo1:c=EF4444;sh=6;hd=chef", pose: "speaking" }, ], }, { id: "scene", looks: [ - { id: "scene-red-wedge", color: "#EF4444", shapeIndex: 1, pose: "speaking" }, - { id: "scene-violet-teardrop", color: "#8B5CF6", shapeIndex: 6, pose: "delighted" }, - { id: "scene-cyan-hex", color: "#06B6D4", shapeIndex: 0, pose: "collaborating" }, - { id: "scene-orange-squircle", color: "#F97316", shapeIndex: 2, pose: "success" }, + { id: "scene-cat", avatar: "oo1:c=EC4899;sp=cat;la=full;li=wing;ew=sun", pose: "speaking" }, + { + id: "scene-bunny", + avatar: "oo1:c=FFFFFF;sp=bunny;la=full;es=rose;sk=heart;ew=heart", + pose: "delighted", + }, + { id: "scene-ghost", avatar: "oo1:c=8B5CF6;sp=ghost;hd=party", pose: "collaborating" }, + { id: "scene-crown", avatar: "oo1:c=06B6D4;sh=2;hd=crown;sk=star", pose: "success" }, ], }, { id: "coder", looks: [ - { id: "coder-cyan-hex", color: "#06B6D4", shapeIndex: 0, pose: "working" }, - { id: "coder-green-squircle", color: "#10B981", shapeIndex: 2, pose: "analyzing" }, - { id: "coder-blue-tablet", color: "#3B82F6", shapeIndex: 3, pose: "thinking" }, - { id: "coder-violet-pebble", color: "#8B5CF6", shapeIndex: 4, pose: "collaborating" }, + { id: "coder-robot", avatar: "oo1:c=06B6D4;sp=robot;ar=robot;sk=star", pose: "working" }, + { id: "coder-cat", avatar: "oo1:c=10B981;sp=cat;ew=nerd;hd=headphones", pose: "analyzing" }, + { id: "coder-hex", avatar: "oo1:c=3B82F6;sh=0;ew=round;hd=beanie", pose: "thinking" }, + { id: "coder-ghost", avatar: "oo1:c=8B5CF6;sp=ghost;ew=reading", pose: "collaborating" }, ], }, { id: "calm", looks: [ - { id: "calm-green-cloud", color: "#10B981", shapeIndex: 7, pose: "greeting" }, - { id: "calm-violet-blob", color: "#8B5CF6", shapeIndex: 5, pose: "listening" }, - { id: "calm-white-pebble", color: "#FFFFFF", shapeIndex: 4, pose: "idle" }, - { id: "calm-cyan-squircle", color: "#06B6D4", shapeIndex: 2, pose: "curious" }, + { id: "calm-cloud", avatar: "oo1:c=10B981;sh=7;ck=pink", pose: "greeting" }, + { id: "calm-bear", avatar: "oo1:c=8B5CF6;sp=bear;ar=paw;nk=scarf", pose: "listening" }, + { id: "calm-bunny", avatar: "oo1:c=FFFFFF;sp=bunny;la=soft;ck=peach", pose: "idle" }, + { id: "calm-penguin", avatar: "oo1:c=06B6D4;sp=penguin;nk=bell", pose: "curious" }, ], }, ]; @@ -73,10 +81,6 @@ export function findLookCategory(id: LookCategoryId): LookCategory { return category; } -export function buildAvatarValue(color: string, shapeIndex: number): string { - return `${color}::shape_${shapeIndex}`; -} - export function lookPresetToAvatarValue(look: LookPreset): string { - return buildAvatarValue(look.color, look.shapeIndex); + return look.avatar; } diff --git a/apps/web/src/locales/de/messages.po b/apps/web/src/locales/de/messages.po index bf39da5..a95ba7b 100644 --- a/apps/web/src/locales/de/messages.po +++ b/apps/web/src/locales/de/messages.po @@ -668,6 +668,10 @@ msgstr "Möchtest du dein Konto wirklich löschen? Das kann nicht rückgängig g msgid "Arguments" msgstr "Argumente" +#: src/components/OoAtelier.tsx +msgid "Arms" +msgstr "Arme" + #. placeholder {0}: rule.matchValue #: src/components/ApprovalRulesSettings.tsx msgid "Ask before {0}" @@ -716,6 +720,10 @@ msgstr "um {0}" msgid "at {timeSelect}" msgstr "um {timeSelect}" +#: src/components/OoAtelier.tsx +msgid "Atelier" +msgstr "Atelier" + #: src/pages/shell/composer.tsx msgid "Attach file" msgstr "Datei anhängen" @@ -756,10 +764,6 @@ msgstr "Automatische Absender erscheinen, sobald sie hier etwas posten." msgid "Available after the routine is saved" msgstr "Verfügbar, sobald die Routine gespeichert ist" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Avatar Studio" -msgstr "Avatar-Studio" - #: src/components/browser/InAppBrowser.tsx #: src/components/CookingMode.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx @@ -781,15 +785,35 @@ msgstr "Zurück zur Zeitleiste" msgid "Base URL" msgstr "Basis-URL" +#: src/components/OoAtelier.tsx +msgid "Beanie" +msgstr "Mütze" + +#: src/components/OoAtelier.tsx +msgid "Bear" +msgstr "Bär" + #: src/pages/memory-providers/SerenitySettingsForm.tsx #: src/pages/PluginsOverlay.tsx msgid "Bearer token" msgstr "Bearer-Token" +#: src/components/OoAtelier.tsx +msgid "Bell" +msgstr "Glöckchen" + #: src/components/NotificationSettingsPanel.tsx msgid "Blocked in your browser settings" msgstr "In deinen Browser-Einstellungen blockiert" +#: src/components/OoAtelier.tsx +msgid "Blue" +msgstr "Blau" + +#: src/components/OoAtelier.tsx +msgid "Body" +msgstr "Körper" + #: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "Live-Desktop wird gestartet…" @@ -810,7 +834,6 @@ msgstr "Bot" #: src/pages/IntegrationSetup.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Bot" msgstr "Bot" @@ -834,10 +857,26 @@ msgstr "Bots handeln standardmäßig ohne Nachfrage. Füge nur dann eine Ausnahm msgid "Bots are working" msgstr "Bots arbeiten" +#: src/components/OoAtelier.tsx +msgid "Bow" +msgstr "Schleife" + +#: src/components/OoAtelier.tsx +msgid "Bow tie" +msgstr "Fliege" + #: src/pages/memory-providers/SerenitySettingsForm.tsx msgid "Brain label" msgstr "Brain-Bezeichnung" +#: src/components/OoAtelier.tsx +msgid "Brown" +msgstr "Braun" + +#: src/components/OoAtelier.tsx +msgid "Brows" +msgstr "Brauen" + #: src/pages/PluginsOverlay.tsx msgid "Browse MCP servers" msgstr "MCP-Server durchsuchen" @@ -846,6 +885,14 @@ msgstr "MCP-Server durchsuchen" msgid "Browser" msgstr "Browser" +#: src/components/OoAtelier.tsx +msgid "Bunny" +msgstr "Hase" + +#: src/components/OoAtelier.tsx +msgid "Bushy" +msgstr "Buschig" + #: src/pages/Shell.tsx msgid "Busy" msgstr "Beschäftigt" @@ -911,6 +958,10 @@ msgstr "Abgebrochen" msgid "Cancelled" msgstr "Abgebrochen" +#: src/components/OoAtelier.tsx +msgid "Cat" +msgstr "Katze" + #: src/components/UserFactEditor.tsx msgid "Category" msgstr "Kategorie" @@ -1006,9 +1057,13 @@ msgstr "Wird geprüft…" msgid "Checkout has local changes. Clean it before updating." msgstr "Der Checkout hat lokale Änderungen. Bereinige ihn vor dem Update." -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Choose a bot shape, color, or upload an image" -msgstr "Wähle eine Bot-Form und Farbe oder lade ein Bild hoch" +#: src/components/OoAtelier.tsx +msgid "Cheeks" +msgstr "Wangen" + +#: src/components/OoAtelier.tsx +msgid "Chef's hat" +msgstr "Kochmütze" #: src/pages/MessagingSettingsOverlay.tsx msgid "Choose a bot…" @@ -1026,7 +1081,7 @@ msgstr "Wähle ein neues Passwort" msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present." msgstr "Wähle einen vorhandenen Ordner auf diesem Computer. Git-Remotes werden automatisch verknüpft, wenn ein Repository vorhanden ist." -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Choose file" msgstr "Datei wählen" @@ -1034,6 +1089,10 @@ msgstr "Datei wählen" msgid "Choose folder" msgstr "Ordner wählen" +#: src/components/OoAtelier.tsx +msgid "Choose how your Oo looks and moves" +msgstr "Wähle, wie dein Oo aussieht und sich bewegt" + #: src/pages/ModelSettingsOverlay.tsx msgid "Choose which connected model Rakazo uses." msgstr "Wähle das verbundene Modell aus, das Rakazo verwendet." @@ -1046,6 +1105,10 @@ msgstr "Wähle deine Sprache" msgid "Choosing the right shape…" msgstr "Wähle die richtige Form…" +#: src/components/OoAtelier.tsx +msgid "Classic" +msgstr "Klassisch" + #: src/pages/shell/dialogs.tsx msgid "Clear" msgstr "Leeren" @@ -1076,12 +1139,12 @@ msgstr "Client-ID" msgid "Client secret" msgstr "Client-Secret" +#: src/components/OoAtelier.tsx #: src/pages/KnowledgeSection.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/PeerMessagesOverlay.tsx #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx #: src/pages/WindowChrome.tsx msgid "Close" msgstr "Schließen" @@ -1165,11 +1228,11 @@ msgstr "Coder" msgid "Collapse {0}" msgstr "{0} einklappen" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color" msgstr "Farbe" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color {color}" msgstr "Farbe {color}" @@ -1846,15 +1909,27 @@ msgstr "Cron" msgid "Cron expression" msgstr "Cron-Ausdruck" +#: src/components/OoAtelier.tsx +msgid "Crown" +msgstr "Krone" + #: src/pages/AccountSettingsOverlay.tsx msgid "Current password" msgstr "Aktuelles Passwort" +#: src/components/OoAtelier.tsx +msgid "Custom color" +msgstr "Eigene Farbe" + #: src/pages/shell/dialogs.tsx msgid "Customer support" msgstr "Kundensupport" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/onboarding/OnboardingOoDesigner.tsx +msgid "Customize" +msgstr "Anpassen" + +#: src/components/OoAtelier.tsx msgid "Customize bot avatar" msgstr "Bot-Avatar anpassen" @@ -2056,6 +2131,10 @@ msgstr "Docker begrenzt für mehr Sicherheit den Zugriff auf deinen Computer. We msgid "Does not speak" msgstr "Spricht nicht" +#: src/components/OoAtelier.tsx +msgid "Dog" +msgstr "Hund" + #: src/pages/HeuteBrief.tsx msgid "Doing" msgstr "In Arbeit" @@ -2071,10 +2150,10 @@ msgstr "Kein Stress — wir sind jetzt da." #: src/components/ai/DelegatedTaskCard.tsx #: src/components/CookingMode.tsx #: src/components/media/MediaCard.tsx +#: src/components/OoAtelier.tsx #: src/components/ThreadCard.tsx #: src/pages/HeuteBrief.tsx #: src/pages/ProjectSessionTimeline.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Done" msgstr "Fertig" @@ -2083,6 +2162,10 @@ msgstr "Fertig" msgid "Done" msgstr "Erledigt" +#: src/components/OoAtelier.tsx +msgid "Dot" +msgstr "Punkt" + #. placeholder {0}: props.name #: src/components/ArtifactFileCard.tsx msgid "Download {0}" @@ -2120,7 +2203,7 @@ msgstr "Entwerfe die Spezifikation…" msgid "Drag to reorder" msgstr "Ziehen zum Umsortieren" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Drag, drop, or paste an image" msgstr "Bild ziehen, ablegen oder einfügen" @@ -2161,6 +2244,10 @@ msgstr "E-Mail" msgid "Embeddings URL" msgstr "Embeddings-URL" +#: src/components/OoAtelier.tsx +msgid "Energy" +msgstr "Energie" + #: src/pages/ExternalConversationSettings.tsx msgid "Engage when... Ignore..." msgstr "Reagieren, wenn ... Ignorieren ..." @@ -2288,6 +2375,22 @@ msgstr "Externe Unterhaltung" msgid "Extra high" msgstr "Sehr hoch" +#: src/components/OoAtelier.tsx +msgid "Extras" +msgstr "Extras" + +#: src/components/OoAtelier.tsx +msgid "Eyeliner" +msgstr "Lidstrich" + +#: src/components/OoAtelier.tsx +msgid "Eyes" +msgstr "Augen" + +#: src/components/OoAtelier.tsx +msgid "Eyeshadow" +msgstr "Lidschatten" + #: src/components/UserFactEditor.tsx msgid "Fact" msgstr "Fakt" @@ -2345,6 +2448,10 @@ msgstr "Suche den richtigen Ton…" msgid "Finding…" msgstr "Suche läuft…" +#: src/components/OoAtelier.tsx +msgid "Fine" +msgstr "Fein" + #. placeholder {0}: new URL(oauth.verificationUri).hostname #: src/pages/ModelSettingsOverlay.tsx msgid "Finish signing in at <0>{0}. The final page may not load; paste its URL or code here." @@ -2371,6 +2478,14 @@ msgstr "Erste {shownRows} Zeilen" msgid "Flag unexpected actions" msgstr "Unerwartete Aktionen markieren" +#: src/components/OoAtelier.tsx +msgid "Flick" +msgstr "Schwung" + +#: src/components/OoAtelier.tsx +msgid "Flower" +msgstr "Blume" + #: src/pages/PrivacySettingsOverlay.tsx msgid "Fonts loaded locally" msgstr "Schriften lokal geladen" @@ -2395,10 +2510,22 @@ msgstr "Passwort vergessen?" msgid "Forward" msgstr "Vorwärts" +#: src/components/OoAtelier.tsx +msgid "Freckles" +msgstr "Sommersprossen" + #: src/pages/ModelSettingsOverlay.tsx msgid "Free" msgstr "Kostenlos" +#: src/components/OoAtelier.tsx +msgid "Frog" +msgstr "Frosch" + +#: src/components/OoAtelier.tsx +msgid "Full" +msgstr "Voll" + #: src/pages/WindowChrome.tsx msgid "Fullscreen" msgstr "Vollbild" @@ -2427,10 +2554,22 @@ msgstr "Wird vorbereitet" msgid "Getting ready…" msgstr "Wird vorbereitet…" +#: src/components/OoAtelier.tsx +msgid "Ghost" +msgstr "Geist" + #: src/pages/RoutineEditor.tsx msgid "Git event" msgstr "Git-Ereignis" +#: src/components/OoAtelier.tsx +msgid "Glass" +msgstr "Glas" + +#: src/components/OoAtelier.tsx +msgid "Glasses" +msgstr "Brille" + #: src/pages/ProjectSessionTimeline.tsx msgid "Goal" msgstr "Ziel" @@ -2445,6 +2584,14 @@ msgstr "Ziele" msgid "Goals for this project, separate from chat messages. Conversations are below." msgstr "Ziele für dieses Projekt, unabhängig von Chat-Nachrichten. Unterhaltungen findest du weiter unten." +#: src/components/OoAtelier.tsx +msgid "Gold" +msgstr "Gold" + +#: src/components/OoAtelier.tsx +msgid "Green" +msgstr "Grün" + #: src/components/stage/OoStage.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/Shell.tsx @@ -2490,6 +2637,10 @@ msgstr "Lege zuerst auf und gib dann den Code auf dem Bildschirm ein." msgid "Hang up, then enter the code on screen." msgstr "Lege auf und gib dann den Code auf dem Bildschirm ein." +#: src/components/OoAtelier.tsx +msgid "Hat" +msgstr "Kopf" + #: src/pages/RoutineEditor.tsx msgid "header" msgstr "Header" @@ -2503,6 +2654,10 @@ msgstr "Header-Name" msgid "Header value" msgstr "Header-Wert" +#: src/components/OoAtelier.tsx +msgid "Headphones" +msgstr "Kopfhörer" + #: src/components/UserProfileSettings.tsx msgid "Health" msgstr "Gesundheit" @@ -2511,6 +2666,10 @@ msgstr "Gesundheit" msgid "Hear a sample" msgstr "Beispiel anhören" +#: src/components/OoAtelier.tsx +msgid "Heart" +msgstr "Herz" + #: src/lib/voice-persona-copy.ts msgid "Here's the read…" msgstr "Meine Einschätzung…" @@ -2597,7 +2756,7 @@ msgstr "Ignorieren" msgid "Image model" msgstr "Bildmodell" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Image upload area" msgstr "Bild-Upload-Bereich" @@ -2671,6 +2830,10 @@ msgstr "Intervallwert" msgid "Interval unit" msgstr "Intervalleinheit" +#: src/components/OoAtelier.tsx +msgid "Iris" +msgstr "Iris" + #: src/pages/MemorySettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx msgid "Isolated" @@ -2710,6 +2873,10 @@ msgstr "Wissen" msgid "Language" msgstr "Sprache" +#: src/components/OoAtelier.tsx +msgid "Lashes" +msgstr "Wimpern" + #: src/components/DesktopUpdates.tsx msgid "Later" msgstr "Später" @@ -2726,6 +2893,10 @@ msgstr "Privatkanal — ich bin da." msgid "Light" msgstr "Hell" +#: src/components/OoAtelier.tsx +msgid "Lilac" +msgstr "Flieder" + #: src/pages/shell/bot-capabilities.tsx msgid "Limit built-in tools" msgstr "Integrierte Tools einschränken" @@ -3031,6 +3202,10 @@ msgstr "Minimieren" msgid "Minimize bots" msgstr "Bots minimieren" +#: src/components/OoAtelier.tsx +msgid "Mint" +msgstr "Mint" + #: src/pages/RoutineSchedule.tsx msgid "minute" msgstr "Minute" @@ -3080,6 +3255,10 @@ msgstr "Modelle für den Standard-Space des Serverbesitzers." msgid "Models from server" msgstr "Modelle vom Server" +#: src/components/OoAtelier.tsx +msgid "Monocle" +msgstr "Monokel" + #: src/pages/RoutineSchedule.tsx msgid "Monthly" msgstr "Monatlich" @@ -3145,6 +3324,10 @@ msgstr "Gruppe benennen" msgid "Name this routine" msgstr "Routine benennen" +#: src/components/OoAtelier.tsx +msgid "Neck" +msgstr "Hals" + #: src/components/stage/OoStage.tsx msgid "Needs attention" msgstr "Braucht Aufmerksamkeit" @@ -3168,6 +3351,10 @@ msgstr "Braucht dich" msgid "Needs your reply" msgstr "Braucht deine Antwort" +#: src/components/OoAtelier.tsx +msgid "Nerd" +msgstr "Nerd" + #: src/pages/shell/bot-panel.tsx msgid "New bot" msgstr "Neuer Bot" @@ -3359,6 +3546,10 @@ msgstr "Kein Trigger" msgid "No usage data is sent to third parties" msgstr "Es werden keine Nutzungsdaten an Dritte gesendet" +#: src/components/OoAtelier.tsx +msgid "None" +msgstr "Keine" + #: src/pages/ScratchpadSection.tsx msgid "None yet" msgstr "Noch keine" @@ -3555,6 +3746,10 @@ msgstr "PagerDuty-Vorfall" msgid "Park" msgstr "Zurückstellen" +#: src/components/OoAtelier.tsx +msgid "Party hat" +msgstr "Partyhut" + #: src/components/AskCard.tsx #: src/pages/AccountSettingsOverlay.tsx #: src/pages/Auth.tsx @@ -3591,6 +3786,18 @@ msgstr "Füge deinen API-Schlüssel ein" msgid "Paused" msgstr "Pausiert" +#: src/components/OoAtelier.tsx +msgid "Paw" +msgstr "Pfote" + +#: src/components/OoAtelier.tsx +msgid "Peach" +msgstr "Pfirsich" + +#: src/components/OoAtelier.tsx +msgid "Penguin" +msgstr "Pinguin" + #: src/components/UserProfileSettings.tsx msgid "People" msgstr "Menschen" @@ -3615,6 +3822,14 @@ msgstr "Wähle eine Stimme" msgid "Pin" msgstr "Anheften" +#: src/components/OoAtelier.tsx +msgid "Pink" +msgstr "Rosa" + +#: src/components/OoAtelier.tsx +msgid "Playful" +msgstr "Verspielt" + #: src/pages/VoiceSettingsOverlay.tsx msgid "Playing…" msgstr "Wiedergabe…" @@ -3762,6 +3977,10 @@ msgstr "Antworten vorlesen" msgid "read-only" msgstr "schreibgeschützt" +#: src/components/OoAtelier.tsx +msgid "Reading glasses" +msgstr "Lesebrille" + #: src/lib/voice-persona-copy.ts msgid "Reading the stack trace…" msgstr "Lese den Stacktrace…" @@ -3976,7 +4195,7 @@ msgstr "Recherche, Schreiben" #: src/components/ComputerMaintenanceActions.tsx #: src/components/onboarding/OnboardingOoDesigner.tsx -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Reset" msgstr "Zurücksetzen" @@ -4042,14 +4261,26 @@ msgstr "Widerrufen" msgid "Riffing" msgstr "Am Riffen" +#: src/components/OoAtelier.tsx +msgid "Robot" +msgstr "Roboter" + #: src/pages/ExternalConversationSettings.tsx msgid "Room guidance" msgstr "Hinweise für diesen Raum" +#: src/components/OoAtelier.tsx +msgid "Rose" +msgstr "Rosé" + #: src/pages/RoutineEditor.tsx msgid "Rotate key" msgstr "Schlüssel erneuern" +#: src/components/OoAtelier.tsx +msgid "Round" +msgstr "Rund" + #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx #: src/pages/shell/routine-event-line.tsx @@ -4164,6 +4395,10 @@ msgstr "Antworte mit Ja oder Nein oder in einem Satz." msgid "Scanning exposure…" msgstr "Prüfe das Risiko…" +#: src/components/OoAtelier.tsx +msgid "Scarf" +msgstr "Schal" + #: src/components/onboarding/OnboardingOoDesigner.tsx msgid "Scene" msgstr "Szene" @@ -4294,10 +4529,15 @@ msgstr "Einrichtungshilfe" msgid "Setup progress" msgstr "Einrichtungsfortschritt" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Shape" msgstr "Form" +#. placeholder {0}: shape + 1 +#: src/components/OoAtelier.tsx +msgid "Shape {0}" +msgstr "Form {0}" + #: src/lib/voice-persona-copy.ts msgid "Share what you're imagining — or tell me one thing to refine." msgstr "Erzähl, was dir vorschwebt — oder nenn mir eine Sache, die ich verfeinern soll." @@ -4415,6 +4655,10 @@ msgstr "Slack-Nachricht" msgid "Slack not enabled" msgstr "Slack nicht aktiviert" +#: src/components/OoAtelier.tsx +msgid "Soft" +msgstr "Zart" + #: src/components/SoftwareUpdateSection.tsx msgid "Software update" msgstr "Software-Update" @@ -4444,6 +4688,10 @@ msgstr "Space-Standard" msgid "Spaces" msgstr "Spaces" +#: src/components/OoAtelier.tsx +msgid "Sparkle" +msgstr "Glanz" + #: src/pages/shell/transcript.tsx msgid "Speak" msgstr "Vorlesen" @@ -4478,10 +4726,18 @@ msgstr "Spreche mit Bedacht…" msgid "Specialist crew" msgstr "Spezialisten-Team" +#: src/components/OoAtelier.tsx +msgid "Species" +msgstr "Wesen" + #: src/lib/model-tier-label.ts msgid "Standard" msgstr "Standard" +#: src/components/OoAtelier.tsx +msgid "Star" +msgstr "Stern" + #: src/pages/Shell.tsx msgid "Start" msgstr "Starten" @@ -4585,6 +4841,10 @@ msgstr "Stresstest fürs Portfolio…" msgid "Stronger together — {0} specialists" msgstr "Stärker zusammen — {0} Spezialisten" +#: src/components/OoAtelier.tsx +msgid "Stub" +msgstr "Stummel" + #: src/pages/shell/transcript.tsx msgid "subagent" msgstr "Subagent" @@ -4597,6 +4857,10 @@ msgstr "Absenden" msgid "Summary" msgstr "Zusammenfassung" +#: src/components/OoAtelier.tsx +msgid "Sunglasses" +msgstr "Sonnenbrille" + #: src/pages/ModelSettingsOverlay.tsx msgid "Supports images" msgstr "Unterstützt Bilder" @@ -4605,6 +4869,10 @@ msgstr "Unterstützt Bilder" msgid "Supports thinking" msgstr "Unterstützt Denkmodus" +#: src/components/OoAtelier.tsx +msgid "Surprise me" +msgstr "Überrasch mich" + #: src/components/onboarding/LookPreviewCarousel.tsx msgid "Swipe for more looks" msgstr "Wische für weitere Looks" @@ -4921,7 +5189,7 @@ msgstr "Team-Computer wird aktualisiert" msgid "Updating…" msgstr "Wird aktualisiert…" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Upload" msgstr "Hochladen" @@ -4967,6 +5235,10 @@ msgstr "Wird geprüft…" msgid "Video workflow" msgstr "Video-Workflow" +#: src/components/OoAtelier.tsx +msgid "Violet" +msgstr "Violett" + #: src/pages/SettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx #: src/pages/shell/composer.tsx @@ -5113,6 +5385,10 @@ msgstr "Um welche Aufgabe geht es?" msgid "When a webhook fires" msgstr "Wenn ein Webhook auslöst" +#: src/components/OoAtelier.tsx +msgid "When needed" +msgstr "Bei Bedarf" + #: src/lib/onboarding-copy.ts msgid "When should I check in with you?" msgstr "Wann soll ich mich bei dir melden?" @@ -5133,6 +5409,10 @@ msgstr "Einsatzzeitpunkt" msgid "Where should bots run?" msgstr "Wo sollen Bots ausgeführt werden?" +#: src/components/OoAtelier.tsx +msgid "Winged" +msgstr "Geschwungen" + #: src/pages/shell/bot-picker.tsx msgid "With:" msgstr "Mit:" diff --git a/apps/web/src/locales/en/messages.po b/apps/web/src/locales/en/messages.po index c7b42d1..3c2d3fc 100644 --- a/apps/web/src/locales/en/messages.po +++ b/apps/web/src/locales/en/messages.po @@ -668,6 +668,10 @@ msgstr "Are you sure you want to delete your account? This cannot be undone." msgid "Arguments" msgstr "Arguments" +#: src/components/OoAtelier.tsx +msgid "Arms" +msgstr "Arms" + #. placeholder {0}: rule.matchValue #: src/components/ApprovalRulesSettings.tsx msgid "Ask before {0}" @@ -716,6 +720,10 @@ msgstr "at {0}" msgid "at {timeSelect}" msgstr "at {timeSelect}" +#: src/components/OoAtelier.tsx +msgid "Atelier" +msgstr "Atelier" + #: src/pages/shell/composer.tsx msgid "Attach file" msgstr "Attach file" @@ -756,10 +764,6 @@ msgstr "Automated senders will appear after they post here." msgid "Available after the routine is saved" msgstr "Available after the routine is saved" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Avatar Studio" -msgstr "Avatar Studio" - #: src/components/browser/InAppBrowser.tsx #: src/components/CookingMode.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx @@ -781,15 +785,35 @@ msgstr "Back to timeline" msgid "Base URL" msgstr "Base URL" +#: src/components/OoAtelier.tsx +msgid "Beanie" +msgstr "Beanie" + +#: src/components/OoAtelier.tsx +msgid "Bear" +msgstr "Bear" + #: src/pages/memory-providers/SerenitySettingsForm.tsx #: src/pages/PluginsOverlay.tsx msgid "Bearer token" msgstr "Bearer token" +#: src/components/OoAtelier.tsx +msgid "Bell" +msgstr "Bell" + #: src/components/NotificationSettingsPanel.tsx msgid "Blocked in your browser settings" msgstr "Blocked in your browser settings" +#: src/components/OoAtelier.tsx +msgid "Blue" +msgstr "Blue" + +#: src/components/OoAtelier.tsx +msgid "Body" +msgstr "Body" + #: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "Booting live desktop…" @@ -810,7 +834,6 @@ msgstr "Bot" #: src/pages/IntegrationSetup.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Bot" msgstr "Bot" @@ -834,10 +857,26 @@ msgstr "Bots act without asking by default. Add an exception only when you want msgid "Bots are working" msgstr "Bots are working" +#: src/components/OoAtelier.tsx +msgid "Bow" +msgstr "Bow" + +#: src/components/OoAtelier.tsx +msgid "Bow tie" +msgstr "Bow tie" + #: src/pages/memory-providers/SerenitySettingsForm.tsx msgid "Brain label" msgstr "Brain label" +#: src/components/OoAtelier.tsx +msgid "Brown" +msgstr "Brown" + +#: src/components/OoAtelier.tsx +msgid "Brows" +msgstr "Brows" + #: src/pages/PluginsOverlay.tsx msgid "Browse MCP servers" msgstr "Browse MCP servers" @@ -846,6 +885,14 @@ msgstr "Browse MCP servers" msgid "Browser" msgstr "Browser" +#: src/components/OoAtelier.tsx +msgid "Bunny" +msgstr "Bunny" + +#: src/components/OoAtelier.tsx +msgid "Bushy" +msgstr "Bushy" + #: src/pages/Shell.tsx msgid "Busy" msgstr "Busy" @@ -911,6 +958,10 @@ msgstr "Cancelled" msgid "Cancelled" msgstr "Cancelled" +#: src/components/OoAtelier.tsx +msgid "Cat" +msgstr "Cat" + #: src/components/UserFactEditor.tsx msgid "Category" msgstr "Category" @@ -1006,9 +1057,13 @@ msgstr "Checking…" msgid "Checkout has local changes. Clean it before updating." msgstr "Checkout has local changes. Clean it before updating." -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Choose a bot shape, color, or upload an image" -msgstr "Choose a bot shape, color, or upload an image" +#: src/components/OoAtelier.tsx +msgid "Cheeks" +msgstr "Cheeks" + +#: src/components/OoAtelier.tsx +msgid "Chef's hat" +msgstr "Chef's hat" #: src/pages/MessagingSettingsOverlay.tsx msgid "Choose a bot…" @@ -1026,7 +1081,7 @@ msgstr "Choose a new password" msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present." msgstr "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present." -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Choose file" msgstr "Choose file" @@ -1034,6 +1089,10 @@ msgstr "Choose file" msgid "Choose folder" msgstr "Choose folder" +#: src/components/OoAtelier.tsx +msgid "Choose how your Oo looks and moves" +msgstr "Choose how your Oo looks and moves" + #: src/pages/ModelSettingsOverlay.tsx msgid "Choose which connected model Rakazo uses." msgstr "Choose which connected model Rakazo uses." @@ -1046,6 +1105,10 @@ msgstr "Choose your language" msgid "Choosing the right shape…" msgstr "Choosing the right shape…" +#: src/components/OoAtelier.tsx +msgid "Classic" +msgstr "Classic" + #: src/pages/shell/dialogs.tsx msgid "Clear" msgstr "Clear" @@ -1076,12 +1139,12 @@ msgstr "Client ID" msgid "Client secret" msgstr "Client secret" +#: src/components/OoAtelier.tsx #: src/pages/KnowledgeSection.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/PeerMessagesOverlay.tsx #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx #: src/pages/WindowChrome.tsx msgid "Close" msgstr "Close" @@ -1165,11 +1228,11 @@ msgstr "Coder" msgid "Collapse {0}" msgstr "Collapse {0}" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color" msgstr "Color" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color {color}" msgstr "Color {color}" @@ -1846,15 +1909,27 @@ msgstr "Cron" msgid "Cron expression" msgstr "Cron expression" +#: src/components/OoAtelier.tsx +msgid "Crown" +msgstr "Crown" + #: src/pages/AccountSettingsOverlay.tsx msgid "Current password" msgstr "Current password" +#: src/components/OoAtelier.tsx +msgid "Custom color" +msgstr "Custom color" + #: src/pages/shell/dialogs.tsx msgid "Customer support" msgstr "Customer support" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/onboarding/OnboardingOoDesigner.tsx +msgid "Customize" +msgstr "Customize" + +#: src/components/OoAtelier.tsx msgid "Customize bot avatar" msgstr "Customize bot avatar" @@ -2056,6 +2131,10 @@ msgstr "Docker limits access to your computer for added security. Using {hostLab msgid "Does not speak" msgstr "Does not speak" +#: src/components/OoAtelier.tsx +msgid "Dog" +msgstr "Dog" + #: src/pages/HeuteBrief.tsx msgid "Doing" msgstr "Doing" @@ -2071,10 +2150,10 @@ msgstr "Don't stress — we're here now." #: src/components/ai/DelegatedTaskCard.tsx #: src/components/CookingMode.tsx #: src/components/media/MediaCard.tsx +#: src/components/OoAtelier.tsx #: src/components/ThreadCard.tsx #: src/pages/HeuteBrief.tsx #: src/pages/ProjectSessionTimeline.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Done" msgstr "Done" @@ -2083,6 +2162,10 @@ msgstr "Done" msgid "Done" msgstr "Done" +#: src/components/OoAtelier.tsx +msgid "Dot" +msgstr "Dot" + #. placeholder {0}: props.name #: src/components/ArtifactFileCard.tsx msgid "Download {0}" @@ -2120,7 +2203,7 @@ msgstr "Drafting the spec…" msgid "Drag to reorder" msgstr "Drag to reorder" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Drag, drop, or paste an image" msgstr "Drag, drop, or paste an image" @@ -2161,6 +2244,10 @@ msgstr "Email" msgid "Embeddings URL" msgstr "Embeddings URL" +#: src/components/OoAtelier.tsx +msgid "Energy" +msgstr "Energy" + #: src/pages/ExternalConversationSettings.tsx msgid "Engage when... Ignore..." msgstr "Engage when... Ignore..." @@ -2288,6 +2375,22 @@ msgstr "External conversation" msgid "Extra high" msgstr "Extra high" +#: src/components/OoAtelier.tsx +msgid "Extras" +msgstr "Extras" + +#: src/components/OoAtelier.tsx +msgid "Eyeliner" +msgstr "Eyeliner" + +#: src/components/OoAtelier.tsx +msgid "Eyes" +msgstr "Eyes" + +#: src/components/OoAtelier.tsx +msgid "Eyeshadow" +msgstr "Eyeshadow" + #: src/components/UserFactEditor.tsx msgid "Fact" msgstr "Fact" @@ -2345,6 +2448,10 @@ msgstr "Finding the right tone…" msgid "Finding…" msgstr "Finding…" +#: src/components/OoAtelier.tsx +msgid "Fine" +msgstr "Fine" + #. placeholder {0}: new URL(oauth.verificationUri).hostname #: src/pages/ModelSettingsOverlay.tsx msgid "Finish signing in at <0>{0}. The final page may not load; paste its URL or code here." @@ -2371,6 +2478,14 @@ msgstr "First {shownRows} rows" msgid "Flag unexpected actions" msgstr "Flag unexpected actions" +#: src/components/OoAtelier.tsx +msgid "Flick" +msgstr "Flick" + +#: src/components/OoAtelier.tsx +msgid "Flower" +msgstr "Flower" + #: src/pages/PrivacySettingsOverlay.tsx msgid "Fonts loaded locally" msgstr "Fonts loaded locally" @@ -2395,10 +2510,22 @@ msgstr "Forgot password?" msgid "Forward" msgstr "Forward" +#: src/components/OoAtelier.tsx +msgid "Freckles" +msgstr "Freckles" + #: src/pages/ModelSettingsOverlay.tsx msgid "Free" msgstr "Free" +#: src/components/OoAtelier.tsx +msgid "Frog" +msgstr "Frog" + +#: src/components/OoAtelier.tsx +msgid "Full" +msgstr "Full" + #: src/pages/WindowChrome.tsx msgid "Fullscreen" msgstr "Fullscreen" @@ -2427,10 +2554,22 @@ msgstr "Getting ready" msgid "Getting ready…" msgstr "Getting ready…" +#: src/components/OoAtelier.tsx +msgid "Ghost" +msgstr "Ghost" + #: src/pages/RoutineEditor.tsx msgid "Git event" msgstr "Git event" +#: src/components/OoAtelier.tsx +msgid "Glass" +msgstr "Glass" + +#: src/components/OoAtelier.tsx +msgid "Glasses" +msgstr "Glasses" + #: src/pages/ProjectSessionTimeline.tsx msgid "Goal" msgstr "Goal" @@ -2445,6 +2584,14 @@ msgstr "Goals" msgid "Goals for this project, separate from chat messages. Conversations are below." msgstr "Goals for this project, separate from chat messages. Conversations are below." +#: src/components/OoAtelier.tsx +msgid "Gold" +msgstr "Gold" + +#: src/components/OoAtelier.tsx +msgid "Green" +msgstr "Green" + #: src/components/stage/OoStage.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/Shell.tsx @@ -2490,6 +2637,10 @@ msgstr "Hang up first, then enter the code on screen." msgid "Hang up, then enter the code on screen." msgstr "Hang up, then enter the code on screen." +#: src/components/OoAtelier.tsx +msgid "Hat" +msgstr "Hat" + #: src/pages/RoutineEditor.tsx msgid "header" msgstr "header" @@ -2503,6 +2654,10 @@ msgstr "Header name" msgid "Header value" msgstr "Header value" +#: src/components/OoAtelier.tsx +msgid "Headphones" +msgstr "Headphones" + #: src/components/UserProfileSettings.tsx msgid "Health" msgstr "Health" @@ -2511,6 +2666,10 @@ msgstr "Health" msgid "Hear a sample" msgstr "Hear a sample" +#: src/components/OoAtelier.tsx +msgid "Heart" +msgstr "Heart" + #: src/lib/voice-persona-copy.ts msgid "Here's the read…" msgstr "Here's the read…" @@ -2597,7 +2756,7 @@ msgstr "Ignore" msgid "Image model" msgstr "Image model" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Image upload area" msgstr "Image upload area" @@ -2671,6 +2830,10 @@ msgstr "Interval amount" msgid "Interval unit" msgstr "Interval unit" +#: src/components/OoAtelier.tsx +msgid "Iris" +msgstr "Iris" + #: src/pages/MemorySettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx msgid "Isolated" @@ -2710,6 +2873,10 @@ msgstr "Knowledge" msgid "Language" msgstr "Language" +#: src/components/OoAtelier.tsx +msgid "Lashes" +msgstr "Lashes" + #: src/components/DesktopUpdates.tsx msgid "Later" msgstr "Later" @@ -2726,6 +2893,10 @@ msgstr "Life channel — I'm here." msgid "Light" msgstr "Light" +#: src/components/OoAtelier.tsx +msgid "Lilac" +msgstr "Lilac" + #: src/pages/shell/bot-capabilities.tsx msgid "Limit built-in tools" msgstr "Limit built-in tools" @@ -3031,6 +3202,10 @@ msgstr "Minimize" msgid "Minimize bots" msgstr "Minimize bots" +#: src/components/OoAtelier.tsx +msgid "Mint" +msgstr "Mint" + #: src/pages/RoutineSchedule.tsx msgid "minute" msgstr "minute" @@ -3080,6 +3255,10 @@ msgstr "Models for the server owner’s default space." msgid "Models from server" msgstr "Models from server" +#: src/components/OoAtelier.tsx +msgid "Monocle" +msgstr "Monocle" + #: src/pages/RoutineSchedule.tsx msgid "Monthly" msgstr "Monthly" @@ -3145,6 +3324,10 @@ msgstr "Name this group" msgid "Name this routine" msgstr "Name this routine" +#: src/components/OoAtelier.tsx +msgid "Neck" +msgstr "Neck" + #: src/components/stage/OoStage.tsx msgid "Needs attention" msgstr "Needs attention" @@ -3168,6 +3351,10 @@ msgstr "Needs you" msgid "Needs your reply" msgstr "Needs your reply" +#: src/components/OoAtelier.tsx +msgid "Nerd" +msgstr "Nerd" + #: src/pages/shell/bot-panel.tsx msgid "New bot" msgstr "New bot" @@ -3359,6 +3546,10 @@ msgstr "No trigger" msgid "No usage data is sent to third parties" msgstr "No usage data is sent to third parties" +#: src/components/OoAtelier.tsx +msgid "None" +msgstr "None" + #: src/pages/ScratchpadSection.tsx msgid "None yet" msgstr "None yet" @@ -3555,6 +3746,10 @@ msgstr "PagerDuty incident" msgid "Park" msgstr "Park" +#: src/components/OoAtelier.tsx +msgid "Party hat" +msgstr "Party hat" + #: src/components/AskCard.tsx #: src/pages/AccountSettingsOverlay.tsx #: src/pages/Auth.tsx @@ -3591,6 +3786,18 @@ msgstr "Paste your API key" msgid "Paused" msgstr "Paused" +#: src/components/OoAtelier.tsx +msgid "Paw" +msgstr "Paw" + +#: src/components/OoAtelier.tsx +msgid "Peach" +msgstr "Peach" + +#: src/components/OoAtelier.tsx +msgid "Penguin" +msgstr "Penguin" + #: src/components/UserProfileSettings.tsx msgid "People" msgstr "People" @@ -3615,6 +3822,14 @@ msgstr "Pick a voice" msgid "Pin" msgstr "Pin" +#: src/components/OoAtelier.tsx +msgid "Pink" +msgstr "Pink" + +#: src/components/OoAtelier.tsx +msgid "Playful" +msgstr "Playful" + #: src/pages/VoiceSettingsOverlay.tsx msgid "Playing…" msgstr "Playing…" @@ -3762,6 +3977,10 @@ msgstr "Read replies aloud" msgid "read-only" msgstr "read-only" +#: src/components/OoAtelier.tsx +msgid "Reading glasses" +msgstr "Reading glasses" + #: src/lib/voice-persona-copy.ts msgid "Reading the stack trace…" msgstr "Reading the stack trace…" @@ -3976,7 +4195,7 @@ msgstr "research, writing" #: src/components/ComputerMaintenanceActions.tsx #: src/components/onboarding/OnboardingOoDesigner.tsx -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Reset" msgstr "Reset" @@ -4042,14 +4261,26 @@ msgstr "Revoke" msgid "Riffing" msgstr "Riffing" +#: src/components/OoAtelier.tsx +msgid "Robot" +msgstr "Robot" + #: src/pages/ExternalConversationSettings.tsx msgid "Room guidance" msgstr "Room guidance" +#: src/components/OoAtelier.tsx +msgid "Rose" +msgstr "Rose" + #: src/pages/RoutineEditor.tsx msgid "Rotate key" msgstr "Rotate key" +#: src/components/OoAtelier.tsx +msgid "Round" +msgstr "Round" + #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx #: src/pages/shell/routine-event-line.tsx @@ -4164,6 +4395,10 @@ msgstr "Say yes or no, or answer in a sentence." msgid "Scanning exposure…" msgstr "Scanning exposure…" +#: src/components/OoAtelier.tsx +msgid "Scarf" +msgstr "Scarf" + #: src/components/onboarding/OnboardingOoDesigner.tsx msgid "Scene" msgstr "Scene" @@ -4294,10 +4529,15 @@ msgstr "Setup help" msgid "Setup progress" msgstr "Setup progress" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Shape" msgstr "Shape" +#. placeholder {0}: shape + 1 +#: src/components/OoAtelier.tsx +msgid "Shape {0}" +msgstr "Shape {0}" + #: src/lib/voice-persona-copy.ts msgid "Share what you're imagining — or tell me one thing to refine." msgstr "Share what you're imagining — or tell me one thing to refine." @@ -4415,6 +4655,10 @@ msgstr "Slack message" msgid "Slack not enabled" msgstr "Slack not enabled" +#: src/components/OoAtelier.tsx +msgid "Soft" +msgstr "Soft" + #: src/components/SoftwareUpdateSection.tsx msgid "Software update" msgstr "Software update" @@ -4444,6 +4688,10 @@ msgstr "Space default" msgid "Spaces" msgstr "Spaces" +#: src/components/OoAtelier.tsx +msgid "Sparkle" +msgstr "Sparkle" + #: src/pages/shell/transcript.tsx msgid "Speak" msgstr "Speak" @@ -4478,10 +4726,18 @@ msgstr "Speaking with intent…" msgid "Specialist crew" msgstr "Specialist crew" +#: src/components/OoAtelier.tsx +msgid "Species" +msgstr "Species" + #: src/lib/model-tier-label.ts msgid "Standard" msgstr "Standard" +#: src/components/OoAtelier.tsx +msgid "Star" +msgstr "Star" + #: src/pages/Shell.tsx msgid "Start" msgstr "Start" @@ -4585,6 +4841,10 @@ msgstr "Stress-testing the book…" msgid "Stronger together — {0} specialists" msgstr "Stronger together — {0} specialists" +#: src/components/OoAtelier.tsx +msgid "Stub" +msgstr "Stub" + #: src/pages/shell/transcript.tsx msgid "subagent" msgstr "subagent" @@ -4597,6 +4857,10 @@ msgstr "Submit" msgid "Summary" msgstr "Summary" +#: src/components/OoAtelier.tsx +msgid "Sunglasses" +msgstr "Sunglasses" + #: src/pages/ModelSettingsOverlay.tsx msgid "Supports images" msgstr "Supports images" @@ -4605,6 +4869,10 @@ msgstr "Supports images" msgid "Supports thinking" msgstr "Supports thinking" +#: src/components/OoAtelier.tsx +msgid "Surprise me" +msgstr "Surprise me" + #: src/components/onboarding/LookPreviewCarousel.tsx msgid "Swipe for more looks" msgstr "Swipe for more looks" @@ -4921,7 +5189,7 @@ msgstr "Updating Team Computer" msgid "Updating…" msgstr "Updating…" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Upload" msgstr "Upload" @@ -4967,6 +5235,10 @@ msgstr "Verifying…" msgid "Video workflow" msgstr "Video workflow" +#: src/components/OoAtelier.tsx +msgid "Violet" +msgstr "Violet" + #: src/pages/SettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx #: src/pages/shell/composer.tsx @@ -5113,6 +5385,10 @@ msgstr "What's the work item?" msgid "When a webhook fires" msgstr "When a webhook fires" +#: src/components/OoAtelier.tsx +msgid "When needed" +msgstr "When needed" + #: src/lib/onboarding-copy.ts msgid "When should I check in with you?" msgstr "When should I check in with you?" @@ -5133,6 +5409,10 @@ msgstr "When to use" msgid "Where should bots run?" msgstr "Where should bots run?" +#: src/components/OoAtelier.tsx +msgid "Winged" +msgstr "Winged" + #: src/pages/shell/bot-picker.tsx msgid "With:" msgstr "With:" diff --git a/apps/web/src/locales/es/messages.po b/apps/web/src/locales/es/messages.po index 5e156c8..6467d8c 100644 --- a/apps/web/src/locales/es/messages.po +++ b/apps/web/src/locales/es/messages.po @@ -668,6 +668,10 @@ msgstr "" msgid "Arguments" msgstr "Argumentos" +#: src/components/OoAtelier.tsx +msgid "Arms" +msgstr "" + #. placeholder {0}: rule.matchValue #: src/components/ApprovalRulesSettings.tsx msgid "Ask before {0}" @@ -716,6 +720,10 @@ msgstr "a las {0}" msgid "at {timeSelect}" msgstr "a las {timeSelect}" +#: src/components/OoAtelier.tsx +msgid "Atelier" +msgstr "" + #: src/pages/shell/composer.tsx msgid "Attach file" msgstr "Adjuntar archivo" @@ -756,10 +764,6 @@ msgstr "" msgid "Available after the routine is saved" msgstr "Disponible después de guardar la rutina" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Avatar Studio" -msgstr "Estudio de avatares" - #: src/components/browser/InAppBrowser.tsx #: src/components/CookingMode.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx @@ -781,15 +785,35 @@ msgstr "" msgid "Base URL" msgstr "URL base" +#: src/components/OoAtelier.tsx +msgid "Beanie" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bear" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx #: src/pages/PluginsOverlay.tsx msgid "Bearer token" msgstr "Token Bearer" +#: src/components/OoAtelier.tsx +msgid "Bell" +msgstr "" + #: src/components/NotificationSettingsPanel.tsx msgid "Blocked in your browser settings" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Blue" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Body" +msgstr "" + #: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "Iniciando escritorio en vivo…" @@ -810,7 +834,6 @@ msgstr "Bot" #: src/pages/IntegrationSetup.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Bot" msgstr "Bot" @@ -834,10 +857,26 @@ msgstr "Los bots actúan sin preguntar de forma predeterminada. Agrega una excep msgid "Bots are working" msgstr "Los bots están trabajando" +#: src/components/OoAtelier.tsx +msgid "Bow" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bow tie" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx msgid "Brain label" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Brown" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Brows" +msgstr "" + #: src/pages/PluginsOverlay.tsx msgid "Browse MCP servers" msgstr "" @@ -846,6 +885,14 @@ msgstr "" msgid "Browser" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Bunny" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bushy" +msgstr "" + #: src/pages/Shell.tsx msgid "Busy" msgstr "" @@ -911,6 +958,10 @@ msgstr "Cancelado" msgid "Cancelled" msgstr "Cancelado" +#: src/components/OoAtelier.tsx +msgid "Cat" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Category" msgstr "" @@ -1006,9 +1057,13 @@ msgstr "Comprobando…" msgid "Checkout has local changes. Clean it before updating." msgstr "El checkout tiene cambios locales. Límpialo antes de actualizar." -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Choose a bot shape, color, or upload an image" -msgstr "Elige una forma y color del bot, o sube una imagen" +#: src/components/OoAtelier.tsx +msgid "Cheeks" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Chef's hat" +msgstr "" #: src/pages/MessagingSettingsOverlay.tsx msgid "Choose a bot…" @@ -1026,7 +1081,7 @@ msgstr "Elige una contraseña nueva" msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present." msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Choose file" msgstr "Elegir archivo" @@ -1034,6 +1089,10 @@ msgstr "Elegir archivo" msgid "Choose folder" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Choose how your Oo looks and moves" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Choose which connected model Rakazo uses." msgstr "Elige qué modelo conectado usa Rakazo." @@ -1046,6 +1105,10 @@ msgstr "" msgid "Choosing the right shape…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Classic" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Clear" msgstr "Borrar" @@ -1076,12 +1139,12 @@ msgstr "" msgid "Client secret" msgstr "" +#: src/components/OoAtelier.tsx #: src/pages/KnowledgeSection.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/PeerMessagesOverlay.tsx #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx #: src/pages/WindowChrome.tsx msgid "Close" msgstr "Cerrar" @@ -1165,11 +1228,11 @@ msgstr "" msgid "Collapse {0}" msgstr "Contraer {0}" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color" msgstr "Color" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color {color}" msgstr "Color {color}" @@ -1846,15 +1909,27 @@ msgstr "Cron" msgid "Cron expression" msgstr "Expresión cron" +#: src/components/OoAtelier.tsx +msgid "Crown" +msgstr "" + #: src/pages/AccountSettingsOverlay.tsx msgid "Current password" msgstr "Contraseña actual" +#: src/components/OoAtelier.tsx +msgid "Custom color" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Customer support" msgstr "Atención al cliente" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/onboarding/OnboardingOoDesigner.tsx +msgid "Customize" +msgstr "" + +#: src/components/OoAtelier.tsx msgid "Customize bot avatar" msgstr "Personalizar avatar del bot" @@ -2056,6 +2131,10 @@ msgstr "Docker limita el acceso a tu computadora para mayor seguridad. Usar {hos msgid "Does not speak" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dog" +msgstr "" + #: src/pages/HeuteBrief.tsx msgid "Doing" msgstr "" @@ -2071,10 +2150,10 @@ msgstr "" #: src/components/ai/DelegatedTaskCard.tsx #: src/components/CookingMode.tsx #: src/components/media/MediaCard.tsx +#: src/components/OoAtelier.tsx #: src/components/ThreadCard.tsx #: src/pages/HeuteBrief.tsx #: src/pages/ProjectSessionTimeline.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Done" msgstr "Listo" @@ -2083,6 +2162,10 @@ msgstr "Listo" msgid "Done" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dot" +msgstr "" + #. placeholder {0}: props.name #: src/components/ArtifactFileCard.tsx msgid "Download {0}" @@ -2120,7 +2203,7 @@ msgstr "" msgid "Drag to reorder" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Drag, drop, or paste an image" msgstr "Arrastra, suelta o pega una imagen" @@ -2161,6 +2244,10 @@ msgstr "Correo" msgid "Embeddings URL" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Energy" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Engage when... Ignore..." msgstr "" @@ -2288,6 +2375,22 @@ msgstr "" msgid "Extra high" msgstr "Extra alto" +#: src/components/OoAtelier.tsx +msgid "Extras" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeliner" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyes" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeshadow" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Fact" msgstr "" @@ -2345,6 +2448,10 @@ msgstr "" msgid "Finding…" msgstr "Buscando…" +#: src/components/OoAtelier.tsx +msgid "Fine" +msgstr "" + #. placeholder {0}: new URL(oauth.verificationUri).hostname #: src/pages/ModelSettingsOverlay.tsx msgid "Finish signing in at <0>{0}. The final page may not load; paste its URL or code here." @@ -2371,6 +2478,14 @@ msgstr "" msgid "Flag unexpected actions" msgstr "Marcar acciones inesperadas" +#: src/components/OoAtelier.tsx +msgid "Flick" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Flower" +msgstr "" + #: src/pages/PrivacySettingsOverlay.tsx msgid "Fonts loaded locally" msgstr "" @@ -2395,10 +2510,22 @@ msgstr "¿Olvidaste la contraseña?" msgid "Forward" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Freckles" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Free" msgstr "Gratis" +#: src/components/OoAtelier.tsx +msgid "Frog" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Full" +msgstr "" + #: src/pages/WindowChrome.tsx msgid "Fullscreen" msgstr "Pantalla completa" @@ -2427,10 +2554,22 @@ msgstr "" msgid "Getting ready…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Ghost" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Git event" msgstr "Evento de Git" +#: src/components/OoAtelier.tsx +msgid "Glass" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Glasses" +msgstr "" + #: src/pages/ProjectSessionTimeline.tsx msgid "Goal" msgstr "" @@ -2445,6 +2584,14 @@ msgstr "" msgid "Goals for this project, separate from chat messages. Conversations are below." msgstr "" +#: src/components/OoAtelier.tsx +msgid "Gold" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Green" +msgstr "" + #: src/components/stage/OoStage.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/Shell.tsx @@ -2490,6 +2637,10 @@ msgstr "Cuelga primero y luego ingresa el código en pantalla." msgid "Hang up, then enter the code on screen." msgstr "Cuelga y luego ingresa el código en pantalla." +#: src/components/OoAtelier.tsx +msgid "Hat" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "header" msgstr "Encabezado" @@ -2503,6 +2654,10 @@ msgstr "Nombre del encabezado" msgid "Header value" msgstr "Valor del encabezado" +#: src/components/OoAtelier.tsx +msgid "Headphones" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "Health" msgstr "" @@ -2511,6 +2666,10 @@ msgstr "" msgid "Hear a sample" msgstr "Escuchar una muestra" +#: src/components/OoAtelier.tsx +msgid "Heart" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Here's the read…" msgstr "" @@ -2597,7 +2756,7 @@ msgstr "" msgid "Image model" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Image upload area" msgstr "Área de carga de imagen" @@ -2671,6 +2830,10 @@ msgstr "Cantidad del intervalo" msgid "Interval unit" msgstr "Unidad del intervalo" +#: src/components/OoAtelier.tsx +msgid "Iris" +msgstr "" + #: src/pages/MemorySettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx msgid "Isolated" @@ -2710,6 +2873,10 @@ msgstr "Conocimientos" msgid "Language" msgstr "Idioma" +#: src/components/OoAtelier.tsx +msgid "Lashes" +msgstr "" + #: src/components/DesktopUpdates.tsx msgid "Later" msgstr "" @@ -2726,6 +2893,10 @@ msgstr "" msgid "Light" msgstr "Claro" +#: src/components/OoAtelier.tsx +msgid "Lilac" +msgstr "" + #: src/pages/shell/bot-capabilities.tsx msgid "Limit built-in tools" msgstr "" @@ -3031,6 +3202,10 @@ msgstr "Minimizar" msgid "Minimize bots" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Mint" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "minute" msgstr "minuto" @@ -3080,6 +3255,10 @@ msgstr "" msgid "Models from server" msgstr "Modelos del servidor" +#: src/components/OoAtelier.tsx +msgid "Monocle" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "Monthly" msgstr "Mensual" @@ -3145,6 +3324,10 @@ msgstr "Nombra este grupo" msgid "Name this routine" msgstr "Nombra esta rutina" +#: src/components/OoAtelier.tsx +msgid "Neck" +msgstr "" + #: src/components/stage/OoStage.tsx msgid "Needs attention" msgstr "" @@ -3168,6 +3351,10 @@ msgstr "" msgid "Needs your reply" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Nerd" +msgstr "" + #: src/pages/shell/bot-panel.tsx msgid "New bot" msgstr "Nuevo bot" @@ -3359,6 +3546,10 @@ msgstr "Sin disparador" msgid "No usage data is sent to third parties" msgstr "" +#: src/components/OoAtelier.tsx +msgid "None" +msgstr "" + #: src/pages/ScratchpadSection.tsx msgid "None yet" msgstr "Ninguno aún" @@ -3555,6 +3746,10 @@ msgstr "Incidente de PagerDuty" msgid "Park" msgstr "Aparcar" +#: src/components/OoAtelier.tsx +msgid "Party hat" +msgstr "" + #: src/components/AskCard.tsx #: src/pages/AccountSettingsOverlay.tsx #: src/pages/Auth.tsx @@ -3591,6 +3786,18 @@ msgstr "Pega tu clave de API" msgid "Paused" msgstr "En pausa" +#: src/components/OoAtelier.tsx +msgid "Paw" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Peach" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Penguin" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "People" msgstr "" @@ -3615,6 +3822,14 @@ msgstr "" msgid "Pin" msgstr "Fijar" +#: src/components/OoAtelier.tsx +msgid "Pink" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Playful" +msgstr "" + #: src/pages/VoiceSettingsOverlay.tsx msgid "Playing…" msgstr "Reproduciendo…" @@ -3762,6 +3977,10 @@ msgstr "Leer respuestas en voz alta" msgid "read-only" msgstr "Solo lectura" +#: src/components/OoAtelier.tsx +msgid "Reading glasses" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Reading the stack trace…" msgstr "" @@ -3976,7 +4195,7 @@ msgstr "" #: src/components/ComputerMaintenanceActions.tsx #: src/components/onboarding/OnboardingOoDesigner.tsx -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Reset" msgstr "Restablecer" @@ -4042,14 +4261,26 @@ msgstr "Revocar" msgid "Riffing" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Robot" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Room guidance" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Rose" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Rotate key" msgstr "Rotar clave" +#: src/components/OoAtelier.tsx +msgid "Round" +msgstr "" + #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx #: src/pages/shell/routine-event-line.tsx @@ -4164,6 +4395,10 @@ msgstr "Di sí o no, o responde en una frase." msgid "Scanning exposure…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Scarf" +msgstr "" + #: src/components/onboarding/OnboardingOoDesigner.tsx msgid "Scene" msgstr "" @@ -4294,10 +4529,15 @@ msgstr "Ayuda de configuración" msgid "Setup progress" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Shape" msgstr "Forma" +#. placeholder {0}: shape + 1 +#: src/components/OoAtelier.tsx +msgid "Shape {0}" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Share what you're imagining — or tell me one thing to refine." msgstr "" @@ -4415,6 +4655,10 @@ msgstr "Mensaje de Slack" msgid "Slack not enabled" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Soft" +msgstr "" + #: src/components/SoftwareUpdateSection.tsx msgid "Software update" msgstr "Actualización de software" @@ -4444,6 +4688,10 @@ msgstr "Predeterminado del Space" msgid "Spaces" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sparkle" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "Speak" msgstr "Hablar" @@ -4478,10 +4726,18 @@ msgstr "" msgid "Specialist crew" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Species" +msgstr "" + #: src/lib/model-tier-label.ts msgid "Standard" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Star" +msgstr "" + #: src/pages/Shell.tsx msgid "Start" msgstr "" @@ -4585,6 +4841,10 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Stub" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "subagent" msgstr "subagente" @@ -4597,6 +4857,10 @@ msgstr "Enviar" msgid "Summary" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sunglasses" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Supports images" msgstr "Admite imágenes" @@ -4605,6 +4869,10 @@ msgstr "Admite imágenes" msgid "Supports thinking" msgstr "Admite razonamiento" +#: src/components/OoAtelier.tsx +msgid "Surprise me" +msgstr "" + #: src/components/onboarding/LookPreviewCarousel.tsx msgid "Swipe for more looks" msgstr "" @@ -4921,7 +5189,7 @@ msgstr "" msgid "Updating…" msgstr "Actualizando…" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Upload" msgstr "Subir" @@ -4967,6 +5235,10 @@ msgstr "Verificando…" msgid "Video workflow" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Violet" +msgstr "" + #: src/pages/SettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx #: src/pages/shell/composer.tsx @@ -5113,6 +5385,10 @@ msgstr "" msgid "When a webhook fires" msgstr "Cuando se dispara un webhook" +#: src/components/OoAtelier.tsx +msgid "When needed" +msgstr "" + #: src/lib/onboarding-copy.ts msgid "When should I check in with you?" msgstr "" @@ -5133,6 +5409,10 @@ msgstr "Cuándo usar" msgid "Where should bots run?" msgstr "¿Dónde deben ejecutarse los bots?" +#: src/components/OoAtelier.tsx +msgid "Winged" +msgstr "" + #: src/pages/shell/bot-picker.tsx msgid "With:" msgstr "" diff --git a/apps/web/src/locales/hi/messages.po b/apps/web/src/locales/hi/messages.po index 5790902..2610172 100644 --- a/apps/web/src/locales/hi/messages.po +++ b/apps/web/src/locales/hi/messages.po @@ -668,6 +668,10 @@ msgstr "" msgid "Arguments" msgstr "आर्ग्युमेंट" +#: src/components/OoAtelier.tsx +msgid "Arms" +msgstr "" + #. placeholder {0}: rule.matchValue #: src/components/ApprovalRulesSettings.tsx msgid "Ask before {0}" @@ -716,6 +720,10 @@ msgstr "{0} बजे" msgid "at {timeSelect}" msgstr "{timeSelect} बजे" +#: src/components/OoAtelier.tsx +msgid "Atelier" +msgstr "" + #: src/pages/shell/composer.tsx msgid "Attach file" msgstr "फ़ाइल संलग्न करें" @@ -756,10 +764,6 @@ msgstr "" msgid "Available after the routine is saved" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Avatar Studio" -msgstr "अवतार स्टूडियो" - #: src/components/browser/InAppBrowser.tsx #: src/components/CookingMode.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx @@ -781,15 +785,35 @@ msgstr "" msgid "Base URL" msgstr "बेस URL" +#: src/components/OoAtelier.tsx +msgid "Beanie" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bear" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx #: src/pages/PluginsOverlay.tsx msgid "Bearer token" msgstr "बियरर टोकन" +#: src/components/OoAtelier.tsx +msgid "Bell" +msgstr "" + #: src/components/NotificationSettingsPanel.tsx msgid "Blocked in your browser settings" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Blue" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Body" +msgstr "" + #: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "लाइव डेस्कटॉप शुरू हो रहा है…" @@ -810,7 +834,6 @@ msgstr "बॉट" #: src/pages/IntegrationSetup.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Bot" msgstr "बॉट" @@ -834,10 +857,26 @@ msgstr "बॉट डिफ़ॉल्ट रूप से बिना पू msgid "Bots are working" msgstr "बॉट काम कर रहे हैं" +#: src/components/OoAtelier.tsx +msgid "Bow" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bow tie" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx msgid "Brain label" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Brown" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Brows" +msgstr "" + #: src/pages/PluginsOverlay.tsx msgid "Browse MCP servers" msgstr "" @@ -846,6 +885,14 @@ msgstr "" msgid "Browser" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Bunny" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bushy" +msgstr "" + #: src/pages/Shell.tsx msgid "Busy" msgstr "" @@ -911,6 +958,10 @@ msgstr "रद्द किया गया" msgid "Cancelled" msgstr "रद्द किया गया" +#: src/components/OoAtelier.tsx +msgid "Cat" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Category" msgstr "" @@ -1006,9 +1057,13 @@ msgstr "" msgid "Checkout has local changes. Clean it before updating." msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Choose a bot shape, color, or upload an image" -msgstr "बॉट का आकार और रंग चुनें, या छवि अपलोड करें" +#: src/components/OoAtelier.tsx +msgid "Cheeks" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Chef's hat" +msgstr "" #: src/pages/MessagingSettingsOverlay.tsx msgid "Choose a bot…" @@ -1026,7 +1081,7 @@ msgstr "नया पासवर्ड चुनें" msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present." msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Choose file" msgstr "फ़ाइल चुनें" @@ -1034,6 +1089,10 @@ msgstr "फ़ाइल चुनें" msgid "Choose folder" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Choose how your Oo looks and moves" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Choose which connected model Rakazo uses." msgstr "चुनें कि Rakazo किस कनेक्टेड मॉडल का उपयोग करे।" @@ -1046,6 +1105,10 @@ msgstr "" msgid "Choosing the right shape…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Classic" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Clear" msgstr "साफ़ करें" @@ -1076,12 +1139,12 @@ msgstr "" msgid "Client secret" msgstr "" +#: src/components/OoAtelier.tsx #: src/pages/KnowledgeSection.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/PeerMessagesOverlay.tsx #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx #: src/pages/WindowChrome.tsx msgid "Close" msgstr "बंद करें" @@ -1165,11 +1228,11 @@ msgstr "" msgid "Collapse {0}" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color" msgstr "रंग" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color {color}" msgstr "रंग {color}" @@ -1846,15 +1909,27 @@ msgstr "Cron" msgid "Cron expression" msgstr "Cron एक्सप्रेशन" +#: src/components/OoAtelier.tsx +msgid "Crown" +msgstr "" + #: src/pages/AccountSettingsOverlay.tsx msgid "Current password" msgstr "वर्तमान पासवर्ड" +#: src/components/OoAtelier.tsx +msgid "Custom color" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Customer support" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/onboarding/OnboardingOoDesigner.tsx +msgid "Customize" +msgstr "" + +#: src/components/OoAtelier.tsx msgid "Customize bot avatar" msgstr "बॉट अवतार अनुकूलित करें" @@ -2056,6 +2131,10 @@ msgstr "Docker अतिरिक्त सुरक्षा के लिए msgid "Does not speak" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dog" +msgstr "" + #: src/pages/HeuteBrief.tsx msgid "Doing" msgstr "" @@ -2071,10 +2150,10 @@ msgstr "" #: src/components/ai/DelegatedTaskCard.tsx #: src/components/CookingMode.tsx #: src/components/media/MediaCard.tsx +#: src/components/OoAtelier.tsx #: src/components/ThreadCard.tsx #: src/pages/HeuteBrief.tsx #: src/pages/ProjectSessionTimeline.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Done" msgstr "पूर्ण" @@ -2083,6 +2162,10 @@ msgstr "पूर्ण" msgid "Done" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dot" +msgstr "" + #. placeholder {0}: props.name #: src/components/ArtifactFileCard.tsx msgid "Download {0}" @@ -2120,7 +2203,7 @@ msgstr "" msgid "Drag to reorder" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Drag, drop, or paste an image" msgstr "छवि खींचें, छोड़ें या पेस्ट करें" @@ -2161,6 +2244,10 @@ msgstr "ईमेल" msgid "Embeddings URL" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Energy" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Engage when... Ignore..." msgstr "" @@ -2288,6 +2375,22 @@ msgstr "" msgid "Extra high" msgstr "अतिरिक्त उच्च" +#: src/components/OoAtelier.tsx +msgid "Extras" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeliner" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyes" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeshadow" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Fact" msgstr "" @@ -2345,6 +2448,10 @@ msgstr "" msgid "Finding…" msgstr "खोजा जा रहा है…" +#: src/components/OoAtelier.tsx +msgid "Fine" +msgstr "" + #. placeholder {0}: new URL(oauth.verificationUri).hostname #: src/pages/ModelSettingsOverlay.tsx msgid "Finish signing in at <0>{0}. The final page may not load; paste its URL or code here." @@ -2371,6 +2478,14 @@ msgstr "" msgid "Flag unexpected actions" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Flick" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Flower" +msgstr "" + #: src/pages/PrivacySettingsOverlay.tsx msgid "Fonts loaded locally" msgstr "" @@ -2395,10 +2510,22 @@ msgstr "पासवर्ड भूल गए?" msgid "Forward" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Freckles" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Free" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Frog" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Full" +msgstr "" + #: src/pages/WindowChrome.tsx msgid "Fullscreen" msgstr "फ़ुलस्क्रीन" @@ -2427,10 +2554,22 @@ msgstr "" msgid "Getting ready…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Ghost" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Git event" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Glass" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Glasses" +msgstr "" + #: src/pages/ProjectSessionTimeline.tsx msgid "Goal" msgstr "" @@ -2445,6 +2584,14 @@ msgstr "" msgid "Goals for this project, separate from chat messages. Conversations are below." msgstr "" +#: src/components/OoAtelier.tsx +msgid "Gold" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Green" +msgstr "" + #: src/components/stage/OoStage.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/Shell.tsx @@ -2490,6 +2637,10 @@ msgstr "" msgid "Hang up, then enter the code on screen." msgstr "" +#: src/components/OoAtelier.tsx +msgid "Hat" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "header" msgstr "" @@ -2503,6 +2654,10 @@ msgstr "हेडर नाम" msgid "Header value" msgstr "हेडर मान" +#: src/components/OoAtelier.tsx +msgid "Headphones" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "Health" msgstr "" @@ -2511,6 +2666,10 @@ msgstr "" msgid "Hear a sample" msgstr "एक नमूना सुनें" +#: src/components/OoAtelier.tsx +msgid "Heart" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Here's the read…" msgstr "" @@ -2597,7 +2756,7 @@ msgstr "" msgid "Image model" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Image upload area" msgstr "छवि अपलोड क्षेत्र" @@ -2671,6 +2830,10 @@ msgstr "अंतराल मात्रा" msgid "Interval unit" msgstr "अंतराल इकाई" +#: src/components/OoAtelier.tsx +msgid "Iris" +msgstr "" + #: src/pages/MemorySettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx msgid "Isolated" @@ -2710,6 +2873,10 @@ msgstr "ज्ञान" msgid "Language" msgstr "भाषा" +#: src/components/OoAtelier.tsx +msgid "Lashes" +msgstr "" + #: src/components/DesktopUpdates.tsx msgid "Later" msgstr "" @@ -2726,6 +2893,10 @@ msgstr "" msgid "Light" msgstr "लाइट" +#: src/components/OoAtelier.tsx +msgid "Lilac" +msgstr "" + #: src/pages/shell/bot-capabilities.tsx msgid "Limit built-in tools" msgstr "" @@ -3031,6 +3202,10 @@ msgstr "छोटा करें" msgid "Minimize bots" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Mint" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "minute" msgstr "मिनट" @@ -3080,6 +3255,10 @@ msgstr "" msgid "Models from server" msgstr "सर्वर से मॉडल" +#: src/components/OoAtelier.tsx +msgid "Monocle" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "Monthly" msgstr "मासिक" @@ -3145,6 +3324,10 @@ msgstr "इस समूह को नाम दें" msgid "Name this routine" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Neck" +msgstr "" + #: src/components/stage/OoStage.tsx msgid "Needs attention" msgstr "" @@ -3168,6 +3351,10 @@ msgstr "" msgid "Needs your reply" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Nerd" +msgstr "" + #: src/pages/shell/bot-panel.tsx msgid "New bot" msgstr "नया बॉट" @@ -3359,6 +3546,10 @@ msgstr "" msgid "No usage data is sent to third parties" msgstr "" +#: src/components/OoAtelier.tsx +msgid "None" +msgstr "" + #: src/pages/ScratchpadSection.tsx msgid "None yet" msgstr "अभी तक कोई नहीं" @@ -3555,6 +3746,10 @@ msgstr "" msgid "Park" msgstr "पार्क करें" +#: src/components/OoAtelier.tsx +msgid "Party hat" +msgstr "" + #: src/components/AskCard.tsx #: src/pages/AccountSettingsOverlay.tsx #: src/pages/Auth.tsx @@ -3591,6 +3786,18 @@ msgstr "अपनी API कुंजी पेस्ट करें" msgid "Paused" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Paw" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Peach" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Penguin" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "People" msgstr "" @@ -3615,6 +3822,14 @@ msgstr "" msgid "Pin" msgstr "पिन करें" +#: src/components/OoAtelier.tsx +msgid "Pink" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Playful" +msgstr "" + #: src/pages/VoiceSettingsOverlay.tsx msgid "Playing…" msgstr "प्ले हो रहा है…" @@ -3762,6 +3977,10 @@ msgstr "उत्तर पढ़कर सुनाएं" msgid "read-only" msgstr "केवल पढ़ने योग्य" +#: src/components/OoAtelier.tsx +msgid "Reading glasses" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Reading the stack trace…" msgstr "" @@ -3976,7 +4195,7 @@ msgstr "" #: src/components/ComputerMaintenanceActions.tsx #: src/components/onboarding/OnboardingOoDesigner.tsx -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Reset" msgstr "रीसेट करें" @@ -4042,14 +4261,26 @@ msgstr "" msgid "Riffing" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Robot" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Room guidance" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Rose" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Rotate key" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Round" +msgstr "" + #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx #: src/pages/shell/routine-event-line.tsx @@ -4164,6 +4395,10 @@ msgstr "हां या ना कहें, या एक वाक्य म msgid "Scanning exposure…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Scarf" +msgstr "" + #: src/components/onboarding/OnboardingOoDesigner.tsx msgid "Scene" msgstr "" @@ -4294,10 +4529,15 @@ msgstr "सेटअप सहायता" msgid "Setup progress" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Shape" msgstr "आकार" +#. placeholder {0}: shape + 1 +#: src/components/OoAtelier.tsx +msgid "Shape {0}" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Share what you're imagining — or tell me one thing to refine." msgstr "" @@ -4415,6 +4655,10 @@ msgstr "" msgid "Slack not enabled" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Soft" +msgstr "" + #: src/components/SoftwareUpdateSection.tsx msgid "Software update" msgstr "" @@ -4444,6 +4688,10 @@ msgstr "स्पेस डिफ़ॉल्ट" msgid "Spaces" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sparkle" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "Speak" msgstr "बोलें" @@ -4478,10 +4726,18 @@ msgstr "" msgid "Specialist crew" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Species" +msgstr "" + #: src/lib/model-tier-label.ts msgid "Standard" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Star" +msgstr "" + #: src/pages/Shell.tsx msgid "Start" msgstr "" @@ -4585,6 +4841,10 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Stub" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "subagent" msgstr "सबएजेंट" @@ -4597,6 +4857,10 @@ msgstr "सबमिट करें" msgid "Summary" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sunglasses" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Supports images" msgstr "छवियों का समर्थन" @@ -4605,6 +4869,10 @@ msgstr "छवियों का समर्थन" msgid "Supports thinking" msgstr "सोचने की क्षमता का समर्थन करता है" +#: src/components/OoAtelier.tsx +msgid "Surprise me" +msgstr "" + #: src/components/onboarding/LookPreviewCarousel.tsx msgid "Swipe for more looks" msgstr "" @@ -4921,7 +5189,7 @@ msgstr "" msgid "Updating…" msgstr "अपडेट हो रहा है…" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Upload" msgstr "अपलोड" @@ -4967,6 +5235,10 @@ msgstr "पुष्टि की जा रही है…" msgid "Video workflow" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Violet" +msgstr "" + #: src/pages/SettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx #: src/pages/shell/composer.tsx @@ -5113,6 +5385,10 @@ msgstr "" msgid "When a webhook fires" msgstr "" +#: src/components/OoAtelier.tsx +msgid "When needed" +msgstr "" + #: src/lib/onboarding-copy.ts msgid "When should I check in with you?" msgstr "" @@ -5133,6 +5409,10 @@ msgstr "कब उपयोग करें" msgid "Where should bots run?" msgstr "बॉट कहां चलने चाहिए?" +#: src/components/OoAtelier.tsx +msgid "Winged" +msgstr "" + #: src/pages/shell/bot-picker.tsx msgid "With:" msgstr "" diff --git a/apps/web/src/locales/ko/messages.po b/apps/web/src/locales/ko/messages.po index b273c9c..43ebeb9 100644 --- a/apps/web/src/locales/ko/messages.po +++ b/apps/web/src/locales/ko/messages.po @@ -668,6 +668,10 @@ msgstr "" msgid "Arguments" msgstr "인자" +#: src/components/OoAtelier.tsx +msgid "Arms" +msgstr "" + #. placeholder {0}: rule.matchValue #: src/components/ApprovalRulesSettings.tsx msgid "Ask before {0}" @@ -716,6 +720,10 @@ msgstr "{0}에" msgid "at {timeSelect}" msgstr "{timeSelect}에" +#: src/components/OoAtelier.tsx +msgid "Atelier" +msgstr "" + #: src/pages/shell/composer.tsx msgid "Attach file" msgstr "파일 첨부" @@ -756,10 +764,6 @@ msgstr "" msgid "Available after the routine is saved" msgstr "루틴을 저장한 후 사용할 수 있습니다" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Avatar Studio" -msgstr "아바타 스튜디오" - #: src/components/browser/InAppBrowser.tsx #: src/components/CookingMode.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx @@ -781,15 +785,35 @@ msgstr "" msgid "Base URL" msgstr "서버 주소" +#: src/components/OoAtelier.tsx +msgid "Beanie" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bear" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx #: src/pages/PluginsOverlay.tsx msgid "Bearer token" msgstr "Bearer 토큰" +#: src/components/OoAtelier.tsx +msgid "Bell" +msgstr "" + #: src/components/NotificationSettingsPanel.tsx msgid "Blocked in your browser settings" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Blue" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Body" +msgstr "" + #: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "라이브 데스크톱 시작 중…" @@ -810,7 +834,6 @@ msgstr "Bot" #: src/pages/IntegrationSetup.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Bot" msgstr "봇" @@ -834,10 +857,26 @@ msgstr "Bot은 기본적으로 묻지 않고 작업합니다. 먼저 확인하 msgid "Bots are working" msgstr "봇 작업 중" +#: src/components/OoAtelier.tsx +msgid "Bow" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bow tie" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx msgid "Brain label" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Brown" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Brows" +msgstr "" + #: src/pages/PluginsOverlay.tsx msgid "Browse MCP servers" msgstr "" @@ -846,6 +885,14 @@ msgstr "" msgid "Browser" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Bunny" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bushy" +msgstr "" + #: src/pages/Shell.tsx msgid "Busy" msgstr "" @@ -911,6 +958,10 @@ msgstr "취소됨" msgid "Cancelled" msgstr "취소됨" +#: src/components/OoAtelier.tsx +msgid "Cat" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Category" msgstr "" @@ -1006,9 +1057,13 @@ msgstr "확인 중…" msgid "Checkout has local changes. Clean it before updating." msgstr "체크아웃에 로컬 변경 사항이 있습니다. 업데이트하기 전에 정리하세요." -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Choose a bot shape, color, or upload an image" -msgstr "봇 모양과 색을 고르거나 이미지를 업로드하세요" +#: src/components/OoAtelier.tsx +msgid "Cheeks" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Chef's hat" +msgstr "" #: src/pages/MessagingSettingsOverlay.tsx msgid "Choose a bot…" @@ -1026,7 +1081,7 @@ msgstr "새 비밀번호 선택" msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present." msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Choose file" msgstr "파일 선택" @@ -1034,6 +1089,10 @@ msgstr "파일 선택" msgid "Choose folder" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Choose how your Oo looks and moves" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Choose which connected model Rakazo uses." msgstr "Rakazo에서 기본으로 사용할 연결된 모델을 선택하세요." @@ -1046,6 +1105,10 @@ msgstr "" msgid "Choosing the right shape…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Classic" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Clear" msgstr "비우기" @@ -1076,12 +1139,12 @@ msgstr "" msgid "Client secret" msgstr "" +#: src/components/OoAtelier.tsx #: src/pages/KnowledgeSection.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/PeerMessagesOverlay.tsx #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx #: src/pages/WindowChrome.tsx msgid "Close" msgstr "닫기" @@ -1165,11 +1228,11 @@ msgstr "" msgid "Collapse {0}" msgstr "{0} 접기" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color" msgstr "색상" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color {color}" msgstr "색상 {color}" @@ -1846,15 +1909,27 @@ msgstr "Cron" msgid "Cron expression" msgstr "Cron 표현식" +#: src/components/OoAtelier.tsx +msgid "Crown" +msgstr "" + #: src/pages/AccountSettingsOverlay.tsx msgid "Current password" msgstr "현재 비밀번호" +#: src/components/OoAtelier.tsx +msgid "Custom color" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Customer support" msgstr "고객 지원" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/onboarding/OnboardingOoDesigner.tsx +msgid "Customize" +msgstr "" + +#: src/components/OoAtelier.tsx msgid "Customize bot avatar" msgstr "봇 아바타 맞춤설정" @@ -2056,6 +2131,10 @@ msgstr "Docker는 보안을 위해 컴퓨터 접근을 제한합니다. {hostLab msgid "Does not speak" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dog" +msgstr "" + #: src/pages/HeuteBrief.tsx msgid "Doing" msgstr "" @@ -2071,10 +2150,10 @@ msgstr "" #: src/components/ai/DelegatedTaskCard.tsx #: src/components/CookingMode.tsx #: src/components/media/MediaCard.tsx +#: src/components/OoAtelier.tsx #: src/components/ThreadCard.tsx #: src/pages/HeuteBrief.tsx #: src/pages/ProjectSessionTimeline.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Done" msgstr "완료" @@ -2083,6 +2162,10 @@ msgstr "완료" msgid "Done" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dot" +msgstr "" + #. placeholder {0}: props.name #: src/components/ArtifactFileCard.tsx msgid "Download {0}" @@ -2120,7 +2203,7 @@ msgstr "" msgid "Drag to reorder" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Drag, drop, or paste an image" msgstr "이미지를 끌어다 놓거나 붙여넣으세요" @@ -2161,6 +2244,10 @@ msgstr "이메일" msgid "Embeddings URL" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Energy" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Engage when... Ignore..." msgstr "" @@ -2288,6 +2375,22 @@ msgstr "" msgid "Extra high" msgstr "매우 높음" +#: src/components/OoAtelier.tsx +msgid "Extras" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeliner" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyes" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeshadow" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Fact" msgstr "" @@ -2345,6 +2448,10 @@ msgstr "" msgid "Finding…" msgstr "찾는 중…" +#: src/components/OoAtelier.tsx +msgid "Fine" +msgstr "" + #. placeholder {0}: new URL(oauth.verificationUri).hostname #: src/pages/ModelSettingsOverlay.tsx msgid "Finish signing in at <0>{0}. The final page may not load; paste its URL or code here." @@ -2371,6 +2478,14 @@ msgstr "" msgid "Flag unexpected actions" msgstr "예상하지 못한 작업 표시" +#: src/components/OoAtelier.tsx +msgid "Flick" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Flower" +msgstr "" + #: src/pages/PrivacySettingsOverlay.tsx msgid "Fonts loaded locally" msgstr "" @@ -2395,10 +2510,22 @@ msgstr "비밀번호를 잊으셨나요?" msgid "Forward" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Freckles" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Free" msgstr "무료" +#: src/components/OoAtelier.tsx +msgid "Frog" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Full" +msgstr "" + #: src/pages/WindowChrome.tsx msgid "Fullscreen" msgstr "전체 화면" @@ -2427,10 +2554,22 @@ msgstr "" msgid "Getting ready…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Ghost" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Git event" msgstr "Git 이벤트" +#: src/components/OoAtelier.tsx +msgid "Glass" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Glasses" +msgstr "" + #: src/pages/ProjectSessionTimeline.tsx msgid "Goal" msgstr "" @@ -2445,6 +2584,14 @@ msgstr "" msgid "Goals for this project, separate from chat messages. Conversations are below." msgstr "" +#: src/components/OoAtelier.tsx +msgid "Gold" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Green" +msgstr "" + #: src/components/stage/OoStage.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/Shell.tsx @@ -2490,6 +2637,10 @@ msgstr "먼저 전화를 끊은 다음 화면에 표시된 코드를 입력하 msgid "Hang up, then enter the code on screen." msgstr "전화를 끊은 다음 화면에 표시된 코드를 입력하세요." +#: src/components/OoAtelier.tsx +msgid "Hat" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "header" msgstr "header" @@ -2503,6 +2654,10 @@ msgstr "헤더 이름" msgid "Header value" msgstr "헤더 값" +#: src/components/OoAtelier.tsx +msgid "Headphones" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "Health" msgstr "" @@ -2511,6 +2666,10 @@ msgstr "" msgid "Hear a sample" msgstr "샘플 듣기" +#: src/components/OoAtelier.tsx +msgid "Heart" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Here's the read…" msgstr "" @@ -2597,7 +2756,7 @@ msgstr "" msgid "Image model" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Image upload area" msgstr "이미지 업로드 영역" @@ -2671,6 +2830,10 @@ msgstr "간격 숫자" msgid "Interval unit" msgstr "간격 단위" +#: src/components/OoAtelier.tsx +msgid "Iris" +msgstr "" + #: src/pages/MemorySettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx msgid "Isolated" @@ -2710,6 +2873,10 @@ msgstr "지식" msgid "Language" msgstr "언어" +#: src/components/OoAtelier.tsx +msgid "Lashes" +msgstr "" + #: src/components/DesktopUpdates.tsx msgid "Later" msgstr "" @@ -2726,6 +2893,10 @@ msgstr "" msgid "Light" msgstr "라이트" +#: src/components/OoAtelier.tsx +msgid "Lilac" +msgstr "" + #: src/pages/shell/bot-capabilities.tsx msgid "Limit built-in tools" msgstr "" @@ -3031,6 +3202,10 @@ msgstr "최소화" msgid "Minimize bots" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Mint" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "minute" msgstr "분" @@ -3080,6 +3255,10 @@ msgstr "" msgid "Models from server" msgstr "서버에서 찾은 모델" +#: src/components/OoAtelier.tsx +msgid "Monocle" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "Monthly" msgstr "매월" @@ -3145,6 +3324,10 @@ msgstr "그룹 이름" msgid "Name this routine" msgstr "이 루틴의 이름을 정하세요" +#: src/components/OoAtelier.tsx +msgid "Neck" +msgstr "" + #: src/components/stage/OoStage.tsx msgid "Needs attention" msgstr "" @@ -3168,6 +3351,10 @@ msgstr "" msgid "Needs your reply" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Nerd" +msgstr "" + #: src/pages/shell/bot-panel.tsx msgid "New bot" msgstr "새 Bot 만들기" @@ -3359,6 +3546,10 @@ msgstr "트리거 없음" msgid "No usage data is sent to third parties" msgstr "" +#: src/components/OoAtelier.tsx +msgid "None" +msgstr "" + #: src/pages/ScratchpadSection.tsx msgid "None yet" msgstr "아직 없음" @@ -3555,6 +3746,10 @@ msgstr "PagerDuty 인시던트" msgid "Park" msgstr "보류" +#: src/components/OoAtelier.tsx +msgid "Party hat" +msgstr "" + #: src/components/AskCard.tsx #: src/pages/AccountSettingsOverlay.tsx #: src/pages/Auth.tsx @@ -3591,6 +3786,18 @@ msgstr "API 키를 붙여넣으세요" msgid "Paused" msgstr "일시 중지됨" +#: src/components/OoAtelier.tsx +msgid "Paw" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Peach" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Penguin" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "People" msgstr "" @@ -3615,6 +3822,14 @@ msgstr "" msgid "Pin" msgstr "고정" +#: src/components/OoAtelier.tsx +msgid "Pink" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Playful" +msgstr "" + #: src/pages/VoiceSettingsOverlay.tsx msgid "Playing…" msgstr "재생 중…" @@ -3762,6 +3977,10 @@ msgstr "답변을 자동으로 읽기" msgid "read-only" msgstr "읽기 전용" +#: src/components/OoAtelier.tsx +msgid "Reading glasses" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Reading the stack trace…" msgstr "" @@ -3976,7 +4195,7 @@ msgstr "" #: src/components/ComputerMaintenanceActions.tsx #: src/components/onboarding/OnboardingOoDesigner.tsx -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Reset" msgstr "재설정" @@ -4042,14 +4261,26 @@ msgstr "연결 해제" msgid "Riffing" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Robot" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Room guidance" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Rose" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Rotate key" msgstr "key 교체" +#: src/components/OoAtelier.tsx +msgid "Round" +msgstr "" + #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx #: src/pages/shell/routine-event-line.tsx @@ -4164,6 +4395,10 @@ msgstr "예 또는 아니요로 답하거나 문장으로 답해 주세요." msgid "Scanning exposure…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Scarf" +msgstr "" + #: src/components/onboarding/OnboardingOoDesigner.tsx msgid "Scene" msgstr "" @@ -4294,10 +4529,15 @@ msgstr "설정 도움말" msgid "Setup progress" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Shape" msgstr "모양" +#. placeholder {0}: shape + 1 +#: src/components/OoAtelier.tsx +msgid "Shape {0}" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Share what you're imagining — or tell me one thing to refine." msgstr "" @@ -4415,6 +4655,10 @@ msgstr "Slack 메시지" msgid "Slack not enabled" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Soft" +msgstr "" + #: src/components/SoftwareUpdateSection.tsx msgid "Software update" msgstr "소프트웨어 업데이트" @@ -4444,6 +4688,10 @@ msgstr "스페이스 기본값" msgid "Spaces" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sparkle" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "Speak" msgstr "읽기" @@ -4478,10 +4726,18 @@ msgstr "" msgid "Specialist crew" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Species" +msgstr "" + #: src/lib/model-tier-label.ts msgid "Standard" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Star" +msgstr "" + #: src/pages/Shell.tsx msgid "Start" msgstr "" @@ -4585,6 +4841,10 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Stub" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "subagent" msgstr "보조 에이전트" @@ -4597,6 +4857,10 @@ msgstr "확인" msgid "Summary" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sunglasses" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Supports images" msgstr "이미지 지원" @@ -4605,6 +4869,10 @@ msgstr "이미지 지원" msgid "Supports thinking" msgstr "사고 모드 지원" +#: src/components/OoAtelier.tsx +msgid "Surprise me" +msgstr "" + #: src/components/onboarding/LookPreviewCarousel.tsx msgid "Swipe for more looks" msgstr "" @@ -4921,7 +5189,7 @@ msgstr "" msgid "Updating…" msgstr "업데이트 중…" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Upload" msgstr "업로드" @@ -4967,6 +5235,10 @@ msgstr "확인 중…" msgid "Video workflow" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Violet" +msgstr "" + #: src/pages/SettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx #: src/pages/shell/composer.tsx @@ -5113,6 +5385,10 @@ msgstr "" msgid "When a webhook fires" msgstr "웹훅이 실행될 때" +#: src/components/OoAtelier.tsx +msgid "When needed" +msgstr "" + #: src/lib/onboarding-copy.ts msgid "When should I check in with you?" msgstr "" @@ -5133,6 +5409,10 @@ msgstr "언제 사용할지" msgid "Where should bots run?" msgstr "Bot을 어디에서 실행할까요?" +#: src/components/OoAtelier.tsx +msgid "Winged" +msgstr "" + #: src/pages/shell/bot-picker.tsx msgid "With:" msgstr "" diff --git a/apps/web/src/locales/pt-BR/messages.po b/apps/web/src/locales/pt-BR/messages.po index 4460e03..52aa207 100644 --- a/apps/web/src/locales/pt-BR/messages.po +++ b/apps/web/src/locales/pt-BR/messages.po @@ -668,6 +668,10 @@ msgstr "" msgid "Arguments" msgstr "Argumentos:" +#: src/components/OoAtelier.tsx +msgid "Arms" +msgstr "" + #. placeholder {0}: rule.matchValue #: src/components/ApprovalRulesSettings.tsx msgid "Ask before {0}" @@ -716,6 +720,10 @@ msgstr "em {0}" msgid "at {timeSelect}" msgstr "em {timeSelect}" +#: src/components/OoAtelier.tsx +msgid "Atelier" +msgstr "" + #: src/pages/shell/composer.tsx msgid "Attach file" msgstr "Escolher arquivo" @@ -756,10 +764,6 @@ msgstr "" msgid "Available after the routine is saved" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Avatar Studio" -msgstr "Estúdio de avatar" - #: src/components/browser/InAppBrowser.tsx #: src/components/CookingMode.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx @@ -781,15 +785,35 @@ msgstr "" msgid "Base URL" msgstr "URL Base" +#: src/components/OoAtelier.tsx +msgid "Beanie" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bear" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx #: src/pages/PluginsOverlay.tsx msgid "Bearer token" msgstr "Token portador" +#: src/components/OoAtelier.tsx +msgid "Bell" +msgstr "" + #: src/components/NotificationSettingsPanel.tsx msgid "Blocked in your browser settings" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Blue" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Body" +msgstr "" + #: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "Iniciando a área de trabalho ao vivo..." @@ -810,7 +834,6 @@ msgstr "Bot" #: src/pages/IntegrationSetup.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Bot" msgstr "Bot" @@ -834,10 +857,26 @@ msgstr "Os bots agem sem perguntar por padrão. Adicione uma exceção apenas qu msgid "Bots are working" msgstr "Bots estão trabalhando" +#: src/components/OoAtelier.tsx +msgid "Bow" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bow tie" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx msgid "Brain label" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Brown" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Brows" +msgstr "" + #: src/pages/PluginsOverlay.tsx msgid "Browse MCP servers" msgstr "" @@ -846,6 +885,14 @@ msgstr "" msgid "Browser" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Bunny" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bushy" +msgstr "" + #: src/pages/Shell.tsx msgid "Busy" msgstr "" @@ -911,6 +958,10 @@ msgstr "Cancelado" msgid "Cancelled" msgstr "Cancelado" +#: src/components/OoAtelier.tsx +msgid "Cat" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Category" msgstr "" @@ -1006,9 +1057,13 @@ msgstr "" msgid "Checkout has local changes. Clean it before updating." msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Choose a bot shape, color, or upload an image" -msgstr "Escolha uma forma e cor do bot, ou envie uma imagem" +#: src/components/OoAtelier.tsx +msgid "Cheeks" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Chef's hat" +msgstr "" #: src/pages/MessagingSettingsOverlay.tsx msgid "Choose a bot…" @@ -1026,7 +1081,7 @@ msgstr "Escolha uma nova senha" msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present." msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Choose file" msgstr "Escolher arquivo" @@ -1034,6 +1089,10 @@ msgstr "Escolher arquivo" msgid "Choose folder" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Choose how your Oo looks and moves" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Choose which connected model Rakazo uses." msgstr "Escolha qual modelo conectado a Rakazo usa." @@ -1046,6 +1105,10 @@ msgstr "" msgid "Choosing the right shape…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Classic" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Clear" msgstr "Limpar" @@ -1076,12 +1139,12 @@ msgstr "" msgid "Client secret" msgstr "" +#: src/components/OoAtelier.tsx #: src/pages/KnowledgeSection.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/PeerMessagesOverlay.tsx #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx #: src/pages/WindowChrome.tsx msgid "Close" msgstr "Fechar" @@ -1165,11 +1228,11 @@ msgstr "" msgid "Collapse {0}" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color" msgstr "Cor" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color {color}" msgstr "Cor {color}" @@ -1846,15 +1909,27 @@ msgstr "Cron" msgid "Cron expression" msgstr "Expressão cron" +#: src/components/OoAtelier.tsx +msgid "Crown" +msgstr "" + #: src/pages/AccountSettingsOverlay.tsx msgid "Current password" msgstr "Senha atual" +#: src/components/OoAtelier.tsx +msgid "Custom color" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Customer support" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/onboarding/OnboardingOoDesigner.tsx +msgid "Customize" +msgstr "" + +#: src/components/OoAtelier.tsx msgid "Customize bot avatar" msgstr "Personalizar avatar do bot" @@ -2056,6 +2131,10 @@ msgstr "O Docker limita o acesso ao seu computador para maior segurança. Usar { msgid "Does not speak" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dog" +msgstr "" + #: src/pages/HeuteBrief.tsx msgid "Doing" msgstr "" @@ -2071,10 +2150,10 @@ msgstr "" #: src/components/ai/DelegatedTaskCard.tsx #: src/components/CookingMode.tsx #: src/components/media/MediaCard.tsx +#: src/components/OoAtelier.tsx #: src/components/ThreadCard.tsx #: src/pages/HeuteBrief.tsx #: src/pages/ProjectSessionTimeline.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Done" msgstr "Concluído" @@ -2083,6 +2162,10 @@ msgstr "Concluído" msgid "Done" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dot" +msgstr "" + #. placeholder {0}: props.name #: src/components/ArtifactFileCard.tsx msgid "Download {0}" @@ -2120,7 +2203,7 @@ msgstr "" msgid "Drag to reorder" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Drag, drop, or paste an image" msgstr "Arraste, solte ou cole uma imagem" @@ -2161,6 +2244,10 @@ msgstr "E-mail" msgid "Embeddings URL" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Energy" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Engage when... Ignore..." msgstr "" @@ -2288,6 +2375,22 @@ msgstr "" msgid "Extra high" msgstr "Extra alta" +#: src/components/OoAtelier.tsx +msgid "Extras" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeliner" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyes" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeshadow" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Fact" msgstr "" @@ -2345,6 +2448,10 @@ msgstr "" msgid "Finding…" msgstr "Localizando…" +#: src/components/OoAtelier.tsx +msgid "Fine" +msgstr "" + #. placeholder {0}: new URL(oauth.verificationUri).hostname #: src/pages/ModelSettingsOverlay.tsx msgid "Finish signing in at <0>{0}. The final page may not load; paste its URL or code here." @@ -2371,6 +2478,14 @@ msgstr "" msgid "Flag unexpected actions" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Flick" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Flower" +msgstr "" + #: src/pages/PrivacySettingsOverlay.tsx msgid "Fonts loaded locally" msgstr "" @@ -2395,10 +2510,22 @@ msgstr "Esqueceu a senha?" msgid "Forward" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Freckles" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Free" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Frog" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Full" +msgstr "" + #: src/pages/WindowChrome.tsx msgid "Fullscreen" msgstr "Tela Cheia" @@ -2427,10 +2554,22 @@ msgstr "" msgid "Getting ready…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Ghost" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Git event" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Glass" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Glasses" +msgstr "" + #: src/pages/ProjectSessionTimeline.tsx msgid "Goal" msgstr "" @@ -2445,6 +2584,14 @@ msgstr "" msgid "Goals for this project, separate from chat messages. Conversations are below." msgstr "" +#: src/components/OoAtelier.tsx +msgid "Gold" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Green" +msgstr "" + #: src/components/stage/OoStage.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/Shell.tsx @@ -2490,6 +2637,10 @@ msgstr "" msgid "Hang up, then enter the code on screen." msgstr "" +#: src/components/OoAtelier.tsx +msgid "Hat" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "header" msgstr "" @@ -2503,6 +2654,10 @@ msgstr "Nome do Cabeçalho" msgid "Header value" msgstr "Valor do cabeçalho" +#: src/components/OoAtelier.tsx +msgid "Headphones" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "Health" msgstr "" @@ -2511,6 +2666,10 @@ msgstr "" msgid "Hear a sample" msgstr "Ouvir uma amostra" +#: src/components/OoAtelier.tsx +msgid "Heart" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Here's the read…" msgstr "" @@ -2597,7 +2756,7 @@ msgstr "" msgid "Image model" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Image upload area" msgstr "Área de envio de imagem" @@ -2671,6 +2830,10 @@ msgstr "Quantidade Intervalo" msgid "Interval unit" msgstr "Unidade do intervalo:" +#: src/components/OoAtelier.tsx +msgid "Iris" +msgstr "" + #: src/pages/MemorySettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx msgid "Isolated" @@ -2710,6 +2873,10 @@ msgstr "Conhecimento" msgid "Language" msgstr "Idioma" +#: src/components/OoAtelier.tsx +msgid "Lashes" +msgstr "" + #: src/components/DesktopUpdates.tsx msgid "Later" msgstr "" @@ -2726,6 +2893,10 @@ msgstr "" msgid "Light" msgstr "Claro" +#: src/components/OoAtelier.tsx +msgid "Lilac" +msgstr "" + #: src/pages/shell/bot-capabilities.tsx msgid "Limit built-in tools" msgstr "" @@ -3031,6 +3202,10 @@ msgstr "Minimizar" msgid "Minimize bots" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Mint" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "minute" msgstr "minuto" @@ -3080,6 +3255,10 @@ msgstr "" msgid "Models from server" msgstr "Modelos do servidor" +#: src/components/OoAtelier.tsx +msgid "Monocle" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "Monthly" msgstr "Mensalmente" @@ -3145,6 +3324,10 @@ msgstr "Dar nome ao grupo" msgid "Name this routine" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Neck" +msgstr "" + #: src/components/stage/OoStage.tsx msgid "Needs attention" msgstr "" @@ -3168,6 +3351,10 @@ msgstr "" msgid "Needs your reply" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Nerd" +msgstr "" + #: src/pages/shell/bot-panel.tsx msgid "New bot" msgstr "Novo bot" @@ -3359,6 +3546,10 @@ msgstr "" msgid "No usage data is sent to third parties" msgstr "" +#: src/components/OoAtelier.tsx +msgid "None" +msgstr "" + #: src/pages/ScratchpadSection.tsx msgid "None yet" msgstr "Nenhuma ainda" @@ -3555,6 +3746,10 @@ msgstr "" msgid "Park" msgstr "Suspender" +#: src/components/OoAtelier.tsx +msgid "Party hat" +msgstr "" + #: src/components/AskCard.tsx #: src/pages/AccountSettingsOverlay.tsx #: src/pages/Auth.tsx @@ -3591,6 +3786,18 @@ msgstr "Cole sua chave API" msgid "Paused" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Paw" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Peach" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Penguin" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "People" msgstr "" @@ -3615,6 +3822,14 @@ msgstr "" msgid "Pin" msgstr "Fixar" +#: src/components/OoAtelier.tsx +msgid "Pink" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Playful" +msgstr "" + #: src/pages/VoiceSettingsOverlay.tsx msgid "Playing…" msgstr "Reproduzindo" @@ -3762,6 +3977,10 @@ msgstr "Leia as respostas em voz alta" msgid "read-only" msgstr "somente leitura" +#: src/components/OoAtelier.tsx +msgid "Reading glasses" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Reading the stack trace…" msgstr "" @@ -3976,7 +4195,7 @@ msgstr "" #: src/components/ComputerMaintenanceActions.tsx #: src/components/onboarding/OnboardingOoDesigner.tsx -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Reset" msgstr "Redefinir" @@ -4042,14 +4261,26 @@ msgstr "" msgid "Riffing" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Robot" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Room guidance" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Rose" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Rotate key" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Round" +msgstr "" + #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx #: src/pages/shell/routine-event-line.tsx @@ -4164,6 +4395,10 @@ msgstr "Diga sim ou não, ou responda em uma frase." msgid "Scanning exposure…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Scarf" +msgstr "" + #: src/components/onboarding/OnboardingOoDesigner.tsx msgid "Scene" msgstr "" @@ -4294,10 +4529,15 @@ msgstr "Ajuda" msgid "Setup progress" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Shape" msgstr "Forma" +#. placeholder {0}: shape + 1 +#: src/components/OoAtelier.tsx +msgid "Shape {0}" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Share what you're imagining — or tell me one thing to refine." msgstr "" @@ -4415,6 +4655,10 @@ msgstr "" msgid "Slack not enabled" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Soft" +msgstr "" + #: src/components/SoftwareUpdateSection.tsx msgid "Software update" msgstr "" @@ -4444,6 +4688,10 @@ msgstr "Padrão do espaço" msgid "Spaces" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sparkle" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "Speak" msgstr "Falar" @@ -4478,10 +4726,18 @@ msgstr "" msgid "Specialist crew" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Species" +msgstr "" + #: src/lib/model-tier-label.ts msgid "Standard" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Star" +msgstr "" + #: src/pages/Shell.tsx msgid "Start" msgstr "" @@ -4585,6 +4841,10 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Stub" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "subagent" msgstr "subagente" @@ -4597,6 +4857,10 @@ msgstr "Enviar" msgid "Summary" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sunglasses" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Supports images" msgstr "Suporta imagens" @@ -4605,6 +4869,10 @@ msgstr "Suporta imagens" msgid "Supports thinking" msgstr "Suporta raciocínio" +#: src/components/OoAtelier.tsx +msgid "Surprise me" +msgstr "" + #: src/components/onboarding/LookPreviewCarousel.tsx msgid "Swipe for more looks" msgstr "" @@ -4921,7 +5189,7 @@ msgstr "" msgid "Updating…" msgstr "Atualizando…" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Upload" msgstr "Enviar" @@ -4967,6 +5235,10 @@ msgstr "Verificando…" msgid "Video workflow" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Violet" +msgstr "" + #: src/pages/SettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx #: src/pages/shell/composer.tsx @@ -5113,6 +5385,10 @@ msgstr "" msgid "When a webhook fires" msgstr "" +#: src/components/OoAtelier.tsx +msgid "When needed" +msgstr "" + #: src/lib/onboarding-copy.ts msgid "When should I check in with you?" msgstr "" @@ -5133,6 +5409,10 @@ msgstr "Quando usar" msgid "Where should bots run?" msgstr "Onde os bots devem ser executados?" +#: src/components/OoAtelier.tsx +msgid "Winged" +msgstr "" + #: src/pages/shell/bot-picker.tsx msgid "With:" msgstr "" diff --git a/apps/web/src/locales/ru/messages.po b/apps/web/src/locales/ru/messages.po index aa27423..e36e5a0 100644 --- a/apps/web/src/locales/ru/messages.po +++ b/apps/web/src/locales/ru/messages.po @@ -668,6 +668,10 @@ msgstr "" msgid "Arguments" msgstr "Аргументы" +#: src/components/OoAtelier.tsx +msgid "Arms" +msgstr "" + #. placeholder {0}: rule.matchValue #: src/components/ApprovalRulesSettings.tsx msgid "Ask before {0}" @@ -716,6 +720,10 @@ msgstr "в {0}" msgid "at {timeSelect}" msgstr "в {timeSelect}" +#: src/components/OoAtelier.tsx +msgid "Atelier" +msgstr "" + #: src/pages/shell/composer.tsx msgid "Attach file" msgstr "Прикрепить файл" @@ -756,10 +764,6 @@ msgstr "Автоматические отправители появятся п msgid "Available after the routine is saved" msgstr "Доступно после сохранения задачи" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Avatar Studio" -msgstr "Студия аватаров" - #: src/components/browser/InAppBrowser.tsx #: src/components/CookingMode.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx @@ -781,15 +785,35 @@ msgstr "" msgid "Base URL" msgstr "Базовый URL" +#: src/components/OoAtelier.tsx +msgid "Beanie" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bear" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx #: src/pages/PluginsOverlay.tsx msgid "Bearer token" msgstr "Bearer-токен" +#: src/components/OoAtelier.tsx +msgid "Bell" +msgstr "" + #: src/components/NotificationSettingsPanel.tsx msgid "Blocked in your browser settings" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Blue" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Body" +msgstr "" + #: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "Загрузка рабочего стола…" @@ -810,7 +834,6 @@ msgstr "Бот" #: src/pages/IntegrationSetup.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Bot" msgstr "Бот" @@ -834,10 +857,26 @@ msgstr "По умолчанию боты действуют, не спрашив msgid "Bots are working" msgstr "Боты работают" +#: src/components/OoAtelier.tsx +msgid "Bow" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bow tie" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx msgid "Brain label" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Brown" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Brows" +msgstr "" + #: src/pages/PluginsOverlay.tsx msgid "Browse MCP servers" msgstr "Просмотреть MCP-серверы" @@ -846,6 +885,14 @@ msgstr "Просмотреть MCP-серверы" msgid "Browser" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Bunny" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bushy" +msgstr "" + #: src/pages/Shell.tsx msgid "Busy" msgstr "" @@ -911,6 +958,10 @@ msgstr "Отменено" msgid "Cancelled" msgstr "Отменено" +#: src/components/OoAtelier.tsx +msgid "Cat" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Category" msgstr "" @@ -1006,9 +1057,13 @@ msgstr "Проверка…" msgid "Checkout has local changes. Clean it before updating." msgstr "В checkout есть локальные изменения. Очистите его перед обновлением." -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Choose a bot shape, color, or upload an image" -msgstr "Выберите форму и цвет бота или загрузите изображение" +#: src/components/OoAtelier.tsx +msgid "Cheeks" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Chef's hat" +msgstr "" #: src/pages/MessagingSettingsOverlay.tsx msgid "Choose a bot…" @@ -1026,7 +1081,7 @@ msgstr "Выберите новый пароль" msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present." msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Choose file" msgstr "Выбрать файл" @@ -1034,6 +1089,10 @@ msgstr "Выбрать файл" msgid "Choose folder" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Choose how your Oo looks and moves" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Choose which connected model Rakazo uses." msgstr "Выберите, какую подключенную модель использует Rakazo." @@ -1046,6 +1105,10 @@ msgstr "" msgid "Choosing the right shape…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Classic" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Clear" msgstr "Очистить" @@ -1076,12 +1139,12 @@ msgstr "ID клиента" msgid "Client secret" msgstr "Секрет клиента" +#: src/components/OoAtelier.tsx #: src/pages/KnowledgeSection.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/PeerMessagesOverlay.tsx #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx #: src/pages/WindowChrome.tsx msgid "Close" msgstr "Закрыть" @@ -1165,11 +1228,11 @@ msgstr "" msgid "Collapse {0}" msgstr "Свернуть {0}" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color" msgstr "Цвет" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color {color}" msgstr "Цвет {color}" @@ -1846,15 +1909,27 @@ msgstr "Крон" msgid "Cron expression" msgstr "Выражение Cron" +#: src/components/OoAtelier.tsx +msgid "Crown" +msgstr "" + #: src/pages/AccountSettingsOverlay.tsx msgid "Current password" msgstr "Текущий пароль" +#: src/components/OoAtelier.tsx +msgid "Custom color" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Customer support" msgstr "Поддержка клиентов" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/onboarding/OnboardingOoDesigner.tsx +msgid "Customize" +msgstr "" + +#: src/components/OoAtelier.tsx msgid "Customize bot avatar" msgstr "Настроить аватар бота" @@ -2056,6 +2131,10 @@ msgstr "Docker ограничивает доступ к вашему компь msgid "Does not speak" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dog" +msgstr "" + #: src/pages/HeuteBrief.tsx msgid "Doing" msgstr "" @@ -2071,10 +2150,10 @@ msgstr "" #: src/components/ai/DelegatedTaskCard.tsx #: src/components/CookingMode.tsx #: src/components/media/MediaCard.tsx +#: src/components/OoAtelier.tsx #: src/components/ThreadCard.tsx #: src/pages/HeuteBrief.tsx #: src/pages/ProjectSessionTimeline.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Done" msgstr "Готово" @@ -2083,6 +2162,10 @@ msgstr "Готово" msgid "Done" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dot" +msgstr "" + #. placeholder {0}: props.name #: src/components/ArtifactFileCard.tsx msgid "Download {0}" @@ -2120,7 +2203,7 @@ msgstr "" msgid "Drag to reorder" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Drag, drop, or paste an image" msgstr "Перетащите или вставьте изображение" @@ -2161,6 +2244,10 @@ msgstr "Электронная почта" msgid "Embeddings URL" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Energy" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Engage when... Ignore..." msgstr "Включайтесь, когда... Игнорируйте..." @@ -2288,6 +2375,22 @@ msgstr "Внешний диалог" msgid "Extra high" msgstr "Очень высокий" +#: src/components/OoAtelier.tsx +msgid "Extras" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeliner" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyes" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeshadow" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Fact" msgstr "" @@ -2345,6 +2448,10 @@ msgstr "" msgid "Finding…" msgstr "Поиск…" +#: src/components/OoAtelier.tsx +msgid "Fine" +msgstr "" + #. placeholder {0}: new URL(oauth.verificationUri).hostname #: src/pages/ModelSettingsOverlay.tsx msgid "Finish signing in at <0>{0}. The final page may not load; paste its URL or code here." @@ -2371,6 +2478,14 @@ msgstr "" msgid "Flag unexpected actions" msgstr "Пометить неожиданные действия" +#: src/components/OoAtelier.tsx +msgid "Flick" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Flower" +msgstr "" + #: src/pages/PrivacySettingsOverlay.tsx msgid "Fonts loaded locally" msgstr "" @@ -2395,10 +2510,22 @@ msgstr "Забыли пароль?" msgid "Forward" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Freckles" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Free" msgstr "Бесплатно" +#: src/components/OoAtelier.tsx +msgid "Frog" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Full" +msgstr "" + #: src/pages/WindowChrome.tsx msgid "Fullscreen" msgstr "Полноэкранный" @@ -2427,10 +2554,22 @@ msgstr "Подготовка" msgid "Getting ready…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Ghost" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Git event" msgstr "Git-событие" +#: src/components/OoAtelier.tsx +msgid "Glass" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Glasses" +msgstr "" + #: src/pages/ProjectSessionTimeline.tsx msgid "Goal" msgstr "" @@ -2445,6 +2584,14 @@ msgstr "" msgid "Goals for this project, separate from chat messages. Conversations are below." msgstr "" +#: src/components/OoAtelier.tsx +msgid "Gold" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Green" +msgstr "" + #: src/components/stage/OoStage.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/Shell.tsx @@ -2490,6 +2637,10 @@ msgstr "Сначала повесьте трубку, затем введите msgid "Hang up, then enter the code on screen." msgstr "Повесьте трубку, затем введите код на экране." +#: src/components/OoAtelier.tsx +msgid "Hat" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "header" msgstr "заголовок" @@ -2503,6 +2654,10 @@ msgstr "Название заголовка" msgid "Header value" msgstr "Значение заголовка" +#: src/components/OoAtelier.tsx +msgid "Headphones" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "Health" msgstr "" @@ -2511,6 +2666,10 @@ msgstr "" msgid "Hear a sample" msgstr "Прослушать образец" +#: src/components/OoAtelier.tsx +msgid "Heart" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Here's the read…" msgstr "" @@ -2597,7 +2756,7 @@ msgstr "игнорировать" msgid "Image model" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Image upload area" msgstr "Область загрузки изображения" @@ -2671,6 +2830,10 @@ msgstr "Значение интервала" msgid "Interval unit" msgstr "Единица интервала" +#: src/components/OoAtelier.tsx +msgid "Iris" +msgstr "" + #: src/pages/MemorySettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx msgid "Isolated" @@ -2710,6 +2873,10 @@ msgstr "Знание" msgid "Language" msgstr "Язык" +#: src/components/OoAtelier.tsx +msgid "Lashes" +msgstr "" + #: src/components/DesktopUpdates.tsx msgid "Later" msgstr "Позже" @@ -2726,6 +2893,10 @@ msgstr "" msgid "Light" msgstr "Светлая" +#: src/components/OoAtelier.tsx +msgid "Lilac" +msgstr "" + #: src/pages/shell/bot-capabilities.tsx msgid "Limit built-in tools" msgstr "" @@ -3031,6 +3202,10 @@ msgstr "Свернуть" msgid "Minimize bots" msgstr "Свернуть ботов" +#: src/components/OoAtelier.tsx +msgid "Mint" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "minute" msgstr "минута" @@ -3080,6 +3255,10 @@ msgstr "Модели для пространства владельца серв msgid "Models from server" msgstr "Модели с сервера" +#: src/components/OoAtelier.tsx +msgid "Monocle" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "Monthly" msgstr "Ежемесячно" @@ -3145,6 +3324,10 @@ msgstr "Назовите эту группу" msgid "Name this routine" msgstr "Назовите эту задачу" +#: src/components/OoAtelier.tsx +msgid "Neck" +msgstr "" + #: src/components/stage/OoStage.tsx msgid "Needs attention" msgstr "" @@ -3168,6 +3351,10 @@ msgstr "Требуется ваше участие" msgid "Needs your reply" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Nerd" +msgstr "" + #: src/pages/shell/bot-panel.tsx msgid "New bot" msgstr "Новый бот" @@ -3359,6 +3546,10 @@ msgstr "Нет триггера" msgid "No usage data is sent to third parties" msgstr "" +#: src/components/OoAtelier.tsx +msgid "None" +msgstr "" + #: src/pages/ScratchpadSection.tsx msgid "None yet" msgstr "Пока нет" @@ -3555,6 +3746,10 @@ msgstr "Инцидент PagerDuty" msgid "Park" msgstr "Приостановить" +#: src/components/OoAtelier.tsx +msgid "Party hat" +msgstr "" + #: src/components/AskCard.tsx #: src/pages/AccountSettingsOverlay.tsx #: src/pages/Auth.tsx @@ -3591,6 +3786,18 @@ msgstr "Вставьте свой ключ API" msgid "Paused" msgstr "Приостановлено" +#: src/components/OoAtelier.tsx +msgid "Paw" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Peach" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Penguin" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "People" msgstr "" @@ -3615,6 +3822,14 @@ msgstr "" msgid "Pin" msgstr "Закрепить" +#: src/components/OoAtelier.tsx +msgid "Pink" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Playful" +msgstr "" + #: src/pages/VoiceSettingsOverlay.tsx msgid "Playing…" msgstr "Воспроизведение…" @@ -3762,6 +3977,10 @@ msgstr "Читать ответы вслух" msgid "read-only" msgstr "только для чтения" +#: src/components/OoAtelier.tsx +msgid "Reading glasses" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Reading the stack trace…" msgstr "" @@ -3976,7 +4195,7 @@ msgstr "" #: src/components/ComputerMaintenanceActions.tsx #: src/components/onboarding/OnboardingOoDesigner.tsx -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Reset" msgstr "Сбросить" @@ -4042,14 +4261,26 @@ msgstr "Отозвать" msgid "Riffing" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Robot" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Room guidance" msgstr "Инструкции для комнаты" +#: src/components/OoAtelier.tsx +msgid "Rose" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Rotate key" msgstr "Сменить ключ" +#: src/components/OoAtelier.tsx +msgid "Round" +msgstr "" + #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx #: src/pages/shell/routine-event-line.tsx @@ -4164,6 +4395,10 @@ msgstr "Скажите «да» или «нет» или ответьте пре msgid "Scanning exposure…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Scarf" +msgstr "" + #: src/components/onboarding/OnboardingOoDesigner.tsx msgid "Scene" msgstr "" @@ -4294,10 +4529,15 @@ msgstr "Помощь по настройке" msgid "Setup progress" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Shape" msgstr "Форма" +#. placeholder {0}: shape + 1 +#: src/components/OoAtelier.tsx +msgid "Shape {0}" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Share what you're imagining — or tell me one thing to refine." msgstr "" @@ -4415,6 +4655,10 @@ msgstr "Сообщение Slack" msgid "Slack not enabled" msgstr "Slack не включен" +#: src/components/OoAtelier.tsx +msgid "Soft" +msgstr "" + #: src/components/SoftwareUpdateSection.tsx msgid "Software update" msgstr "Обновление программного обеспечения" @@ -4444,6 +4688,10 @@ msgstr "Пространство по умолчанию" msgid "Spaces" msgstr "Пространства" +#: src/components/OoAtelier.tsx +msgid "Sparkle" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "Speak" msgstr "Озвучить" @@ -4478,10 +4726,18 @@ msgstr "" msgid "Specialist crew" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Species" +msgstr "" + #: src/lib/model-tier-label.ts msgid "Standard" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Star" +msgstr "" + #: src/pages/Shell.tsx msgid "Start" msgstr "" @@ -4585,6 +4841,10 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Stub" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "subagent" msgstr "субагент" @@ -4597,6 +4857,10 @@ msgstr "Отправить" msgid "Summary" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sunglasses" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Supports images" msgstr "" @@ -4605,6 +4869,10 @@ msgstr "" msgid "Supports thinking" msgstr "Поддерживает рассуждения" +#: src/components/OoAtelier.tsx +msgid "Surprise me" +msgstr "" + #: src/components/onboarding/LookPreviewCarousel.tsx msgid "Swipe for more looks" msgstr "" @@ -4921,7 +5189,7 @@ msgstr "Обновление компьютера команды" msgid "Updating…" msgstr "Обновление…" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Upload" msgstr "Загрузить" @@ -4967,6 +5235,10 @@ msgstr "Проверка…" msgid "Video workflow" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Violet" +msgstr "" + #: src/pages/SettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx #: src/pages/shell/composer.tsx @@ -5113,6 +5385,10 @@ msgstr "" msgid "When a webhook fires" msgstr "Когда срабатывает вебхук" +#: src/components/OoAtelier.tsx +msgid "When needed" +msgstr "" + #: src/lib/onboarding-copy.ts msgid "When should I check in with you?" msgstr "" @@ -5133,6 +5409,10 @@ msgstr "Когда использовать" msgid "Where should bots run?" msgstr "Где должны работать боты?" +#: src/components/OoAtelier.tsx +msgid "Winged" +msgstr "" + #: src/pages/shell/bot-picker.tsx msgid "With:" msgstr "" diff --git a/apps/web/src/locales/tr/messages.po b/apps/web/src/locales/tr/messages.po index 759e990..a4bed24 100644 --- a/apps/web/src/locales/tr/messages.po +++ b/apps/web/src/locales/tr/messages.po @@ -668,6 +668,10 @@ msgstr "" msgid "Arguments" msgstr "Argümanlar" +#: src/components/OoAtelier.tsx +msgid "Arms" +msgstr "" + #. placeholder {0}: rule.matchValue #: src/components/ApprovalRulesSettings.tsx msgid "Ask before {0}" @@ -716,6 +720,10 @@ msgstr "saat {0}" msgid "at {timeSelect}" msgstr "saat {timeSelect}" +#: src/components/OoAtelier.tsx +msgid "Atelier" +msgstr "" + #: src/pages/shell/composer.tsx msgid "Attach file" msgstr "Dosya ekle" @@ -756,10 +764,6 @@ msgstr "" msgid "Available after the routine is saved" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Avatar Studio" -msgstr "Avatar Stüdyosu" - #: src/components/browser/InAppBrowser.tsx #: src/components/CookingMode.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx @@ -781,15 +785,35 @@ msgstr "" msgid "Base URL" msgstr "Temel URL" +#: src/components/OoAtelier.tsx +msgid "Beanie" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bear" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx #: src/pages/PluginsOverlay.tsx msgid "Bearer token" msgstr "Bearer token" +#: src/components/OoAtelier.tsx +msgid "Bell" +msgstr "" + #: src/components/NotificationSettingsPanel.tsx msgid "Blocked in your browser settings" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Blue" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Body" +msgstr "" + #: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "Canlı masaüstü başlatılıyor…" @@ -810,7 +834,6 @@ msgstr "Bot" #: src/pages/IntegrationSetup.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Bot" msgstr "Bot" @@ -834,10 +857,26 @@ msgstr "Botlar varsayılan olarak sormadan hareket eder. Yalnızca belirli bir i msgid "Bots are working" msgstr "Botlar çalışıyor" +#: src/components/OoAtelier.tsx +msgid "Bow" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bow tie" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx msgid "Brain label" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Brown" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Brows" +msgstr "" + #: src/pages/PluginsOverlay.tsx msgid "Browse MCP servers" msgstr "" @@ -846,6 +885,14 @@ msgstr "" msgid "Browser" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Bunny" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bushy" +msgstr "" + #: src/pages/Shell.tsx msgid "Busy" msgstr "" @@ -911,6 +958,10 @@ msgstr "İptal edildi" msgid "Cancelled" msgstr "İptal edildi" +#: src/components/OoAtelier.tsx +msgid "Cat" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Category" msgstr "" @@ -1006,9 +1057,13 @@ msgstr "" msgid "Checkout has local changes. Clean it before updating." msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Choose a bot shape, color, or upload an image" -msgstr "Bir bot şekli ve rengi seçin veya görüntü yükleyin" +#: src/components/OoAtelier.tsx +msgid "Cheeks" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Chef's hat" +msgstr "" #: src/pages/MessagingSettingsOverlay.tsx msgid "Choose a bot…" @@ -1026,7 +1081,7 @@ msgstr "Yeni bir parola seçin" msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present." msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Choose file" msgstr "Dosya seç" @@ -1034,6 +1089,10 @@ msgstr "Dosya seç" msgid "Choose folder" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Choose how your Oo looks and moves" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Choose which connected model Rakazo uses." msgstr "Rakazo'nun hangi bağlı modeli kullanacağını seç." @@ -1046,6 +1105,10 @@ msgstr "" msgid "Choosing the right shape…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Classic" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Clear" msgstr "Temizle" @@ -1076,12 +1139,12 @@ msgstr "" msgid "Client secret" msgstr "" +#: src/components/OoAtelier.tsx #: src/pages/KnowledgeSection.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/PeerMessagesOverlay.tsx #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx #: src/pages/WindowChrome.tsx msgid "Close" msgstr "Kapat" @@ -1165,11 +1228,11 @@ msgstr "" msgid "Collapse {0}" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color" msgstr "Renk" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color {color}" msgstr "Renk {color}" @@ -1846,15 +1909,27 @@ msgstr "Cron" msgid "Cron expression" msgstr "Cron ifadesi" +#: src/components/OoAtelier.tsx +msgid "Crown" +msgstr "" + #: src/pages/AccountSettingsOverlay.tsx msgid "Current password" msgstr "Mevcut parola" +#: src/components/OoAtelier.tsx +msgid "Custom color" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Customer support" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/onboarding/OnboardingOoDesigner.tsx +msgid "Customize" +msgstr "" + +#: src/components/OoAtelier.tsx msgid "Customize bot avatar" msgstr "Bot avatarını özelleştir" @@ -2056,6 +2131,10 @@ msgstr "Docker, ek güvenlik için bilgisayarına erişimi sınırlar. {hostLabe msgid "Does not speak" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dog" +msgstr "" + #: src/pages/HeuteBrief.tsx msgid "Doing" msgstr "" @@ -2071,10 +2150,10 @@ msgstr "" #: src/components/ai/DelegatedTaskCard.tsx #: src/components/CookingMode.tsx #: src/components/media/MediaCard.tsx +#: src/components/OoAtelier.tsx #: src/components/ThreadCard.tsx #: src/pages/HeuteBrief.tsx #: src/pages/ProjectSessionTimeline.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Done" msgstr "Bitti" @@ -2083,6 +2162,10 @@ msgstr "Bitti" msgid "Done" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dot" +msgstr "" + #. placeholder {0}: props.name #: src/components/ArtifactFileCard.tsx msgid "Download {0}" @@ -2120,7 +2203,7 @@ msgstr "" msgid "Drag to reorder" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Drag, drop, or paste an image" msgstr "Görüntüyü sürükleyip bırakın veya yapıştırın" @@ -2161,6 +2244,10 @@ msgstr "E-posta" msgid "Embeddings URL" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Energy" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Engage when... Ignore..." msgstr "" @@ -2288,6 +2375,22 @@ msgstr "" msgid "Extra high" msgstr "Çok yüksek" +#: src/components/OoAtelier.tsx +msgid "Extras" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeliner" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyes" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeshadow" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Fact" msgstr "" @@ -2345,6 +2448,10 @@ msgstr "" msgid "Finding…" msgstr "Aranıyor…" +#: src/components/OoAtelier.tsx +msgid "Fine" +msgstr "" + #. placeholder {0}: new URL(oauth.verificationUri).hostname #: src/pages/ModelSettingsOverlay.tsx msgid "Finish signing in at <0>{0}. The final page may not load; paste its URL or code here." @@ -2371,6 +2478,14 @@ msgstr "" msgid "Flag unexpected actions" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Flick" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Flower" +msgstr "" + #: src/pages/PrivacySettingsOverlay.tsx msgid "Fonts loaded locally" msgstr "" @@ -2395,10 +2510,22 @@ msgstr "Parolanızı mı unuttunuz?" msgid "Forward" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Freckles" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Free" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Frog" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Full" +msgstr "" + #: src/pages/WindowChrome.tsx msgid "Fullscreen" msgstr "Tam ekran" @@ -2427,10 +2554,22 @@ msgstr "" msgid "Getting ready…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Ghost" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Git event" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Glass" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Glasses" +msgstr "" + #: src/pages/ProjectSessionTimeline.tsx msgid "Goal" msgstr "" @@ -2445,6 +2584,14 @@ msgstr "" msgid "Goals for this project, separate from chat messages. Conversations are below." msgstr "" +#: src/components/OoAtelier.tsx +msgid "Gold" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Green" +msgstr "" + #: src/components/stage/OoStage.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/Shell.tsx @@ -2490,6 +2637,10 @@ msgstr "" msgid "Hang up, then enter the code on screen." msgstr "" +#: src/components/OoAtelier.tsx +msgid "Hat" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "header" msgstr "" @@ -2503,6 +2654,10 @@ msgstr "Üstbilgi adı" msgid "Header value" msgstr "Üstbilgi değeri" +#: src/components/OoAtelier.tsx +msgid "Headphones" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "Health" msgstr "" @@ -2511,6 +2666,10 @@ msgstr "" msgid "Hear a sample" msgstr "Örnek dinle" +#: src/components/OoAtelier.tsx +msgid "Heart" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Here's the read…" msgstr "" @@ -2597,7 +2756,7 @@ msgstr "" msgid "Image model" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Image upload area" msgstr "Görüntü yükleme alanı" @@ -2671,6 +2830,10 @@ msgstr "Aralık miktarı" msgid "Interval unit" msgstr "Aralık birimi" +#: src/components/OoAtelier.tsx +msgid "Iris" +msgstr "" + #: src/pages/MemorySettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx msgid "Isolated" @@ -2710,6 +2873,10 @@ msgstr "Bilgi" msgid "Language" msgstr "Dil" +#: src/components/OoAtelier.tsx +msgid "Lashes" +msgstr "" + #: src/components/DesktopUpdates.tsx msgid "Later" msgstr "" @@ -2726,6 +2893,10 @@ msgstr "" msgid "Light" msgstr "Açık" +#: src/components/OoAtelier.tsx +msgid "Lilac" +msgstr "" + #: src/pages/shell/bot-capabilities.tsx msgid "Limit built-in tools" msgstr "" @@ -3031,6 +3202,10 @@ msgstr "Küçült" msgid "Minimize bots" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Mint" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "minute" msgstr "dakika" @@ -3080,6 +3255,10 @@ msgstr "" msgid "Models from server" msgstr "Sunucudan gelen modeller" +#: src/components/OoAtelier.tsx +msgid "Monocle" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "Monthly" msgstr "Aylık" @@ -3145,6 +3324,10 @@ msgstr "Gruba bir ad ver" msgid "Name this routine" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Neck" +msgstr "" + #: src/components/stage/OoStage.tsx msgid "Needs attention" msgstr "" @@ -3168,6 +3351,10 @@ msgstr "" msgid "Needs your reply" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Nerd" +msgstr "" + #: src/pages/shell/bot-panel.tsx msgid "New bot" msgstr "Yeni bot" @@ -3359,6 +3546,10 @@ msgstr "" msgid "No usage data is sent to third parties" msgstr "" +#: src/components/OoAtelier.tsx +msgid "None" +msgstr "" + #: src/pages/ScratchpadSection.tsx msgid "None yet" msgstr "Henüz yok" @@ -3555,6 +3746,10 @@ msgstr "" msgid "Park" msgstr "Beklet" +#: src/components/OoAtelier.tsx +msgid "Party hat" +msgstr "" + #: src/components/AskCard.tsx #: src/pages/AccountSettingsOverlay.tsx #: src/pages/Auth.tsx @@ -3591,6 +3786,18 @@ msgstr "API anahtarını yapıştır" msgid "Paused" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Paw" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Peach" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Penguin" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "People" msgstr "" @@ -3615,6 +3822,14 @@ msgstr "" msgid "Pin" msgstr "Sabitle" +#: src/components/OoAtelier.tsx +msgid "Pink" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Playful" +msgstr "" + #: src/pages/VoiceSettingsOverlay.tsx msgid "Playing…" msgstr "Çalınıyor…" @@ -3762,6 +3977,10 @@ msgstr "Yanıtları sesli oku" msgid "read-only" msgstr "salt okunur" +#: src/components/OoAtelier.tsx +msgid "Reading glasses" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Reading the stack trace…" msgstr "" @@ -3976,7 +4195,7 @@ msgstr "" #: src/components/ComputerMaintenanceActions.tsx #: src/components/onboarding/OnboardingOoDesigner.tsx -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Reset" msgstr "" @@ -4042,14 +4261,26 @@ msgstr "İptal et" msgid "Riffing" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Robot" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Room guidance" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Rose" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Rotate key" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Round" +msgstr "" + #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx #: src/pages/shell/routine-event-line.tsx @@ -4164,6 +4395,10 @@ msgstr "Evet ya da hayır de veya bir cümleyle yanıtla." msgid "Scanning exposure…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Scarf" +msgstr "" + #: src/components/onboarding/OnboardingOoDesigner.tsx msgid "Scene" msgstr "" @@ -4294,10 +4529,15 @@ msgstr "Kurulum yardımı" msgid "Setup progress" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Shape" msgstr "Şekil" +#. placeholder {0}: shape + 1 +#: src/components/OoAtelier.tsx +msgid "Shape {0}" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Share what you're imagining — or tell me one thing to refine." msgstr "" @@ -4415,6 +4655,10 @@ msgstr "" msgid "Slack not enabled" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Soft" +msgstr "" + #: src/components/SoftwareUpdateSection.tsx msgid "Software update" msgstr "" @@ -4444,6 +4688,10 @@ msgstr "Alan varsayılanı" msgid "Spaces" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sparkle" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "Speak" msgstr "Seslendir" @@ -4478,10 +4726,18 @@ msgstr "" msgid "Specialist crew" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Species" +msgstr "" + #: src/lib/model-tier-label.ts msgid "Standard" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Star" +msgstr "" + #: src/pages/Shell.tsx msgid "Start" msgstr "" @@ -4585,6 +4841,10 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Stub" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "subagent" msgstr "alt ajan" @@ -4597,6 +4857,10 @@ msgstr "Gönder" msgid "Summary" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sunglasses" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Supports images" msgstr "Görüntüleri destekler" @@ -4605,6 +4869,10 @@ msgstr "Görüntüleri destekler" msgid "Supports thinking" msgstr "Düşünmeyi destekler" +#: src/components/OoAtelier.tsx +msgid "Surprise me" +msgstr "" + #: src/components/onboarding/LookPreviewCarousel.tsx msgid "Swipe for more looks" msgstr "" @@ -4921,7 +5189,7 @@ msgstr "" msgid "Updating…" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Upload" msgstr "Yükle" @@ -4967,6 +5235,10 @@ msgstr "Doğrulanıyor…" msgid "Video workflow" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Violet" +msgstr "" + #: src/pages/SettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx #: src/pages/shell/composer.tsx @@ -5113,6 +5385,10 @@ msgstr "" msgid "When a webhook fires" msgstr "" +#: src/components/OoAtelier.tsx +msgid "When needed" +msgstr "" + #: src/lib/onboarding-copy.ts msgid "When should I check in with you?" msgstr "" @@ -5133,6 +5409,10 @@ msgstr "Ne zaman kullanılır" msgid "Where should bots run?" msgstr "Botlar nerede çalışsın?" +#: src/components/OoAtelier.tsx +msgid "Winged" +msgstr "" + #: src/pages/shell/bot-picker.tsx msgid "With:" msgstr "" diff --git a/apps/web/src/locales/zh-CN/messages.po b/apps/web/src/locales/zh-CN/messages.po index e8312a3..a524107 100644 --- a/apps/web/src/locales/zh-CN/messages.po +++ b/apps/web/src/locales/zh-CN/messages.po @@ -668,6 +668,10 @@ msgstr "" msgid "Arguments" msgstr "参数" +#: src/components/OoAtelier.tsx +msgid "Arms" +msgstr "" + #. placeholder {0}: rule.matchValue #: src/components/ApprovalRulesSettings.tsx msgid "Ask before {0}" @@ -716,6 +720,10 @@ msgstr "{0}" msgid "at {timeSelect}" msgstr "{timeSelect}" +#: src/components/OoAtelier.tsx +msgid "Atelier" +msgstr "" + #: src/pages/shell/composer.tsx msgid "Attach file" msgstr "附加文件" @@ -756,10 +764,6 @@ msgstr "" msgid "Available after the routine is saved" msgstr "保存例行任务后可用" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Avatar Studio" -msgstr "头像工作室" - #: src/components/browser/InAppBrowser.tsx #: src/components/CookingMode.tsx #: src/components/onboarding/OnboardingVoiceStep.tsx @@ -781,15 +785,35 @@ msgstr "" msgid "Base URL" msgstr "Base URL" +#: src/components/OoAtelier.tsx +msgid "Beanie" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bear" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx #: src/pages/PluginsOverlay.tsx msgid "Bearer token" msgstr "Bearer token" +#: src/components/OoAtelier.tsx +msgid "Bell" +msgstr "" + #: src/components/NotificationSettingsPanel.tsx msgid "Blocked in your browser settings" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Blue" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Body" +msgstr "" + #: src/pages/shell/computer-screen.tsx msgid "Booting live desktop…" msgstr "正在启动实时桌面…" @@ -810,7 +834,6 @@ msgstr "Bot" #: src/pages/IntegrationSetup.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Bot" msgstr "Bot" @@ -834,10 +857,26 @@ msgstr "默认情况下 Bot 会直接执行。只有当你想先审核某类操 msgid "Bots are working" msgstr "Bot 正在工作" +#: src/components/OoAtelier.tsx +msgid "Bow" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bow tie" +msgstr "" + #: src/pages/memory-providers/SerenitySettingsForm.tsx msgid "Brain label" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Brown" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Brows" +msgstr "" + #: src/pages/PluginsOverlay.tsx msgid "Browse MCP servers" msgstr "" @@ -846,6 +885,14 @@ msgstr "" msgid "Browser" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Bunny" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Bushy" +msgstr "" + #: src/pages/Shell.tsx msgid "Busy" msgstr "" @@ -911,6 +958,10 @@ msgstr "已取消" msgid "Cancelled" msgstr "已取消" +#: src/components/OoAtelier.tsx +msgid "Cat" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Category" msgstr "" @@ -1006,9 +1057,13 @@ msgstr "正在检查…" msgid "Checkout has local changes. Clean it before updating." msgstr "工作副本有本地更改。请先清理再更新。" -#: src/pages/shell/avatar-studio-popover.tsx -msgid "Choose a bot shape, color, or upload an image" -msgstr "选择机器人形状和颜色,或上传图片" +#: src/components/OoAtelier.tsx +msgid "Cheeks" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Chef's hat" +msgstr "" #: src/pages/MessagingSettingsOverlay.tsx msgid "Choose a bot…" @@ -1026,7 +1081,7 @@ msgstr "设置新密码" msgid "Choose an existing folder on this computer. Git remotes are linked automatically when a repository is present." msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Choose file" msgstr "选择文件" @@ -1034,6 +1089,10 @@ msgstr "选择文件" msgid "Choose folder" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Choose how your Oo looks and moves" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Choose which connected model Rakazo uses." msgstr "选择 Rakazo 使用的已连接模型。" @@ -1046,6 +1105,10 @@ msgstr "" msgid "Choosing the right shape…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Classic" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Clear" msgstr "清空" @@ -1076,12 +1139,12 @@ msgstr "" msgid "Client secret" msgstr "" +#: src/components/OoAtelier.tsx #: src/pages/KnowledgeSection.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/PeerMessagesOverlay.tsx #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx -#: src/pages/shell/avatar-studio-popover.tsx #: src/pages/WindowChrome.tsx msgid "Close" msgstr "关闭" @@ -1165,11 +1228,11 @@ msgstr "" msgid "Collapse {0}" msgstr "折叠 {0}" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color" msgstr "颜色" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Color {color}" msgstr "颜色 {color}" @@ -1846,15 +1909,27 @@ msgstr "Cron" msgid "Cron expression" msgstr "Cron 表达式" +#: src/components/OoAtelier.tsx +msgid "Crown" +msgstr "" + #: src/pages/AccountSettingsOverlay.tsx msgid "Current password" msgstr "当前密码" +#: src/components/OoAtelier.tsx +msgid "Custom color" +msgstr "" + #: src/pages/shell/dialogs.tsx msgid "Customer support" msgstr "客户支持" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/onboarding/OnboardingOoDesigner.tsx +msgid "Customize" +msgstr "" + +#: src/components/OoAtelier.tsx msgid "Customize bot avatar" msgstr "自定义机器人头像" @@ -2056,6 +2131,10 @@ msgstr "Docker 限制对你电脑的访问,以提高安全性。使用{hostLab msgid "Does not speak" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dog" +msgstr "" + #: src/pages/HeuteBrief.tsx msgid "Doing" msgstr "" @@ -2071,10 +2150,10 @@ msgstr "" #: src/components/ai/DelegatedTaskCard.tsx #: src/components/CookingMode.tsx #: src/components/media/MediaCard.tsx +#: src/components/OoAtelier.tsx #: src/components/ThreadCard.tsx #: src/pages/HeuteBrief.tsx #: src/pages/ProjectSessionTimeline.tsx -#: src/pages/shell/avatar-studio-popover.tsx msgid "Done" msgstr "完成" @@ -2083,6 +2162,10 @@ msgstr "完成" msgid "Done" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Dot" +msgstr "" + #. placeholder {0}: props.name #: src/components/ArtifactFileCard.tsx msgid "Download {0}" @@ -2120,7 +2203,7 @@ msgstr "" msgid "Drag to reorder" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Drag, drop, or paste an image" msgstr "拖放或粘贴图片" @@ -2161,6 +2244,10 @@ msgstr "邮箱" msgid "Embeddings URL" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Energy" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Engage when... Ignore..." msgstr "" @@ -2288,6 +2375,22 @@ msgstr "" msgid "Extra high" msgstr "极高" +#: src/components/OoAtelier.tsx +msgid "Extras" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeliner" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyes" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Eyeshadow" +msgstr "" + #: src/components/UserFactEditor.tsx msgid "Fact" msgstr "" @@ -2345,6 +2448,10 @@ msgstr "" msgid "Finding…" msgstr "正在查找…" +#: src/components/OoAtelier.tsx +msgid "Fine" +msgstr "" + #. placeholder {0}: new URL(oauth.verificationUri).hostname #: src/pages/ModelSettingsOverlay.tsx msgid "Finish signing in at <0>{0}. The final page may not load; paste its URL or code here." @@ -2371,6 +2478,14 @@ msgstr "" msgid "Flag unexpected actions" msgstr "标记异常操作" +#: src/components/OoAtelier.tsx +msgid "Flick" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Flower" +msgstr "" + #: src/pages/PrivacySettingsOverlay.tsx msgid "Fonts loaded locally" msgstr "" @@ -2395,10 +2510,22 @@ msgstr "忘记密码?" msgid "Forward" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Freckles" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Free" msgstr "免费" +#: src/components/OoAtelier.tsx +msgid "Frog" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Full" +msgstr "" + #: src/pages/WindowChrome.tsx msgid "Fullscreen" msgstr "全屏" @@ -2427,10 +2554,22 @@ msgstr "" msgid "Getting ready…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Ghost" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Git event" msgstr "Git 事件" +#: src/components/OoAtelier.tsx +msgid "Glass" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Glasses" +msgstr "" + #: src/pages/ProjectSessionTimeline.tsx msgid "Goal" msgstr "" @@ -2445,6 +2584,14 @@ msgstr "" msgid "Goals for this project, separate from chat messages. Conversations are below." msgstr "" +#: src/components/OoAtelier.tsx +msgid "Gold" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Green" +msgstr "" + #: src/components/stage/OoStage.tsx #: src/pages/MessagingSettingsOverlay.tsx #: src/pages/Shell.tsx @@ -2490,6 +2637,10 @@ msgstr "请先挂断,然后输入屏幕上的代码。" msgid "Hang up, then enter the code on screen." msgstr "请挂断,然后输入屏幕上的代码。" +#: src/components/OoAtelier.tsx +msgid "Hat" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "header" msgstr "请求头" @@ -2503,6 +2654,10 @@ msgstr "请求头名称" msgid "Header value" msgstr "请求头值" +#: src/components/OoAtelier.tsx +msgid "Headphones" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "Health" msgstr "" @@ -2511,6 +2666,10 @@ msgstr "" msgid "Hear a sample" msgstr "试听" +#: src/components/OoAtelier.tsx +msgid "Heart" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Here's the read…" msgstr "" @@ -2597,7 +2756,7 @@ msgstr "" msgid "Image model" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Image upload area" msgstr "图片上传区域" @@ -2671,6 +2830,10 @@ msgstr "间隔数量" msgid "Interval unit" msgstr "间隔单位" +#: src/components/OoAtelier.tsx +msgid "Iris" +msgstr "" + #: src/pages/MemorySettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx msgid "Isolated" @@ -2710,6 +2873,10 @@ msgstr "知识" msgid "Language" msgstr "语言" +#: src/components/OoAtelier.tsx +msgid "Lashes" +msgstr "" + #: src/components/DesktopUpdates.tsx msgid "Later" msgstr "" @@ -2726,6 +2893,10 @@ msgstr "" msgid "Light" msgstr "浅色" +#: src/components/OoAtelier.tsx +msgid "Lilac" +msgstr "" + #: src/pages/shell/bot-capabilities.tsx msgid "Limit built-in tools" msgstr "" @@ -3031,6 +3202,10 @@ msgstr "最小化" msgid "Minimize bots" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Mint" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "minute" msgstr "分钟" @@ -3080,6 +3255,10 @@ msgstr "" msgid "Models from server" msgstr "来自服务器的模型" +#: src/components/OoAtelier.tsx +msgid "Monocle" +msgstr "" + #: src/pages/RoutineSchedule.tsx msgid "Monthly" msgstr "每月" @@ -3145,6 +3324,10 @@ msgstr "给这个群组命名" msgid "Name this routine" msgstr "给这个例行任务命名" +#: src/components/OoAtelier.tsx +msgid "Neck" +msgstr "" + #: src/components/stage/OoStage.tsx msgid "Needs attention" msgstr "" @@ -3168,6 +3351,10 @@ msgstr "" msgid "Needs your reply" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Nerd" +msgstr "" + #: src/pages/shell/bot-panel.tsx msgid "New bot" msgstr "新建 Bot" @@ -3359,6 +3546,10 @@ msgstr "无触发器" msgid "No usage data is sent to third parties" msgstr "" +#: src/components/OoAtelier.tsx +msgid "None" +msgstr "" + #: src/pages/ScratchpadSection.tsx msgid "None yet" msgstr "暂无" @@ -3555,6 +3746,10 @@ msgstr "PagerDuty 事件" msgid "Park" msgstr "搁置" +#: src/components/OoAtelier.tsx +msgid "Party hat" +msgstr "" + #: src/components/AskCard.tsx #: src/pages/AccountSettingsOverlay.tsx #: src/pages/Auth.tsx @@ -3591,6 +3786,18 @@ msgstr "粘贴你的 API 密钥" msgid "Paused" msgstr "已暂停" +#: src/components/OoAtelier.tsx +msgid "Paw" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Peach" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Penguin" +msgstr "" + #: src/components/UserProfileSettings.tsx msgid "People" msgstr "" @@ -3615,6 +3822,14 @@ msgstr "" msgid "Pin" msgstr "置顶" +#: src/components/OoAtelier.tsx +msgid "Pink" +msgstr "" + +#: src/components/OoAtelier.tsx +msgid "Playful" +msgstr "" + #: src/pages/VoiceSettingsOverlay.tsx msgid "Playing…" msgstr "播放中…" @@ -3762,6 +3977,10 @@ msgstr "朗读回复" msgid "read-only" msgstr "只读" +#: src/components/OoAtelier.tsx +msgid "Reading glasses" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Reading the stack trace…" msgstr "" @@ -3976,7 +4195,7 @@ msgstr "" #: src/components/ComputerMaintenanceActions.tsx #: src/components/onboarding/OnboardingOoDesigner.tsx -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Reset" msgstr "重置" @@ -4042,14 +4261,26 @@ msgstr "撤销" msgid "Riffing" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Robot" +msgstr "" + #: src/pages/ExternalConversationSettings.tsx msgid "Room guidance" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Rose" +msgstr "" + #: src/pages/RoutineEditor.tsx msgid "Rotate key" msgstr "轮换密钥" +#: src/components/OoAtelier.tsx +msgid "Round" +msgstr "" + #: src/pages/RoutineEditor.tsx #: src/pages/Shell.tsx #: src/pages/shell/routine-event-line.tsx @@ -4164,6 +4395,10 @@ msgstr "回答是或否,或一句话说明。" msgid "Scanning exposure…" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Scarf" +msgstr "" + #: src/components/onboarding/OnboardingOoDesigner.tsx msgid "Scene" msgstr "" @@ -4294,10 +4529,15 @@ msgstr "设置帮助" msgid "Setup progress" msgstr "" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Shape" msgstr "形状" +#. placeholder {0}: shape + 1 +#: src/components/OoAtelier.tsx +msgid "Shape {0}" +msgstr "" + #: src/lib/voice-persona-copy.ts msgid "Share what you're imagining — or tell me one thing to refine." msgstr "" @@ -4415,6 +4655,10 @@ msgstr "Slack 消息" msgid "Slack not enabled" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Soft" +msgstr "" + #: src/components/SoftwareUpdateSection.tsx msgid "Software update" msgstr "软件更新" @@ -4444,6 +4688,10 @@ msgstr "工作区默认" msgid "Spaces" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sparkle" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "Speak" msgstr "朗读" @@ -4478,10 +4726,18 @@ msgstr "" msgid "Specialist crew" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Species" +msgstr "" + #: src/lib/model-tier-label.ts msgid "Standard" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Star" +msgstr "" + #: src/pages/Shell.tsx msgid "Start" msgstr "" @@ -4585,6 +4841,10 @@ msgstr "" msgid "Stronger together — {0} specialists" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Stub" +msgstr "" + #: src/pages/shell/transcript.tsx msgid "subagent" msgstr "子 Agent" @@ -4597,6 +4857,10 @@ msgstr "提交" msgid "Summary" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Sunglasses" +msgstr "" + #: src/pages/ModelSettingsOverlay.tsx msgid "Supports images" msgstr "支持图片" @@ -4605,6 +4869,10 @@ msgstr "支持图片" msgid "Supports thinking" msgstr "支持思考" +#: src/components/OoAtelier.tsx +msgid "Surprise me" +msgstr "" + #: src/components/onboarding/LookPreviewCarousel.tsx msgid "Swipe for more looks" msgstr "" @@ -4921,7 +5189,7 @@ msgstr "" msgid "Updating…" msgstr "正在更新…" -#: src/pages/shell/avatar-studio-popover.tsx +#: src/components/OoAtelier.tsx msgid "Upload" msgstr "上传" @@ -4967,6 +5235,10 @@ msgstr "正在校验…" msgid "Video workflow" msgstr "" +#: src/components/OoAtelier.tsx +msgid "Violet" +msgstr "" + #: src/pages/SettingsOverlay.tsx #: src/pages/shell/bot-panel.tsx #: src/pages/shell/composer.tsx @@ -5113,6 +5385,10 @@ msgstr "" msgid "When a webhook fires" msgstr "当 Webhook 触发时" +#: src/components/OoAtelier.tsx +msgid "When needed" +msgstr "" + #: src/lib/onboarding-copy.ts msgid "When should I check in with you?" msgstr "" @@ -5133,6 +5409,10 @@ msgstr "何时使用" msgid "Where should bots run?" msgstr "Bot 应在哪里运行?" +#: src/components/OoAtelier.tsx +msgid "Winged" +msgstr "" + #: src/pages/shell/bot-picker.tsx msgid "With:" msgstr "" diff --git a/apps/web/src/pages/Onboarding.tsx b/apps/web/src/pages/Onboarding.tsx index f21c80d..bdbc2f2 100644 --- a/apps/web/src/pages/Onboarding.tsx +++ b/apps/web/src/pages/Onboarding.tsx @@ -34,21 +34,9 @@ function enterMainConversation(main: MainConversationRef): string { function defaultEmojiConfig(): OnboardingEmojiConfig { const preset = findLookCategory("calm").looks[0]; - if (!preset) { - return { - color: "#8B5CF6", - shapeIndex: 0, - accessory: "none", - pose: "idle", - avatarValue: "#8B5CF6::shape_0", - }; - } return { - color: preset.color, - shapeIndex: preset.shapeIndex, - accessory: "none", - pose: preset.pose, - avatarValue: lookPresetToAvatarValue(preset), + pose: preset?.pose ?? "idle", + avatarValue: preset ? lookPresetToAvatarValue(preset) : "oo1:c=8B5CF6", }; } diff --git a/apps/web/src/pages/shell/avatar-studio-popover.tsx b/apps/web/src/pages/shell/avatar-studio-popover.tsx deleted file mode 100644 index 966b5c4..0000000 --- a/apps/web/src/pages/shell/avatar-studio-popover.tsx +++ /dev/null @@ -1,289 +0,0 @@ -import { t } from "@lingui/core/macro"; -import { Trans } from "@lingui/react/macro"; -import { OO_DEFAULT_COLOR, OO_PALETTE_HEXES } from "@rakazo/core"; -import { - BotAvatar, - Dialog, - DialogContent, - DialogDescription, - DialogFooter, - DialogHeader, - DialogTitle, - OoShapePreview, - parseBotAvatar, -} from "@rakazo/ui-web"; -import { Check, Pencil, Upload, X } from "lucide-react"; -import { type ClipboardEvent, type DragEvent, useRef, useState } from "react"; - -export interface AvatarStudioPopoverProps { - value: string; - identity?: string; - status?: string; - size?: number; - onChange: (value: string) => void; - disabled?: boolean; -} - -export function AvatarStudioPopover({ - value, - identity, - status, - size = 72, - onChange, - disabled = false, -}: AvatarStudioPopoverProps) { - const [open, setOpen] = useState(false); - const [activeTab, setActiveTab] = useState<"bot" | "upload">("bot"); - const [dragOver, setDragOver] = useState(false); - const fileInputRef = useRef(null); - - const parsed = parseBotAvatar(value, identity); - const currentColor = parsed.color || OO_DEFAULT_COLOR; - const currentShape = parsed.shapeIndex ?? 0; - - function selectShape(shapeIndex: number) { - onChange(`${currentColor}::shape_${shapeIndex}`); - } - - function selectColor(color: string) { - onChange(`${color}::shape_${currentShape}`); - } - - function resetAvatar() { - onChange(`${OO_DEFAULT_COLOR}::shape_0`); - } - - function processImageFile(file: File) { - if (!file.type.startsWith("image/")) return; - const reader = new FileReader(); - reader.onload = (event) => { - const src = event.target?.result as string; - if (!src) return; - const img = new Image(); - img.onload = () => { - const canvas = document.createElement("canvas"); - const ctx = canvas.getContext("2d"); - const targetSize = 256; - canvas.width = targetSize; - canvas.height = targetSize; - if (!ctx) return; - - ctx.beginPath(); - ctx.arc(targetSize / 2, targetSize / 2, targetSize / 2, 0, Math.PI * 2); - ctx.clip(); - - const minDim = Math.min(img.width, img.height); - const sx = (img.width - minDim) / 2; - const sy = (img.height - minDim) / 2; - ctx.drawImage(img, sx, sy, minDim, minDim, 0, 0, targetSize, targetSize); - - onChange(canvas.toDataURL("image/webp", 0.9)); - setOpen(false); - }; - img.src = src; - }; - reader.readAsDataURL(file); - } - - function handleDrop(event: DragEvent) { - event.preventDefault(); - setDragOver(false); - const file = event.dataTransfer.files?.[0]; - if (file) processImageFile(file); - } - - function handlePaste(event: ClipboardEvent) { - const items = event.clipboardData?.items; - if (!items) return; - for (let index = 0; index < items.length; index += 1) { - const item = items[index]; - if (!item?.type.startsWith("image/")) continue; - const file = item.getAsFile(); - if (file) { - processImageFile(file); - break; - } - } - } - - return ( - <> - - - - - - - Avatar Studio - - - Choose a bot shape, color, or upload an image - - - - -
- -
- -
-
- - -
- - -
- - {activeTab === "bot" ? ( -
-
-
- Shape -
-
- {[0, 1, 2, 3, 4, 5, 6, 7].map((shapeIndex) => ( - selectShape(shapeIndex)} - /> - ))} -
-
- -
-
- Color -
-
- {OO_PALETTE_HEXES.map((color) => { - const selected = - currentColor.toLowerCase() === color.toLowerCase() && !parsed.isImage; - return ( -
-
-
- ) : ( - - )} - - - - -
-
- - ); -} diff --git a/apps/web/src/pages/shell/bot-panel.tsx b/apps/web/src/pages/shell/bot-panel.tsx index 05ad050..6532f1d 100644 --- a/apps/web/src/pages/shell/bot-panel.tsx +++ b/apps/web/src/pages/shell/bot-panel.tsx @@ -32,11 +32,11 @@ import { } from "@rakazo/ui-web"; import { Upload, X } from "lucide-react"; import { Suspense, useEffect, useId, useRef, useState } from "react"; +import { OoAtelier } from "../../components/OoAtelier"; import { connectedModelOptions } from "../../lib/connected-models"; import { lazyWithRecovery } from "../../lib/lazy-recovery"; import { modelTierLabel } from "../../lib/model-tier-label"; import { rpc } from "../../lib/rpc"; -import { AvatarStudioPopover } from "./avatar-studio-popover"; import { BotCapabilitiesFields } from "./bot-capabilities"; const ScratchpadSection = lazyWithRecovery("ScratchpadSection", () => @@ -470,7 +470,7 @@ export function BotSettings({ return (
- = { blob: "M228.541 114.228C228.541 130.133 225.184 145.994 218.738 160.534C212.674 174.217 203.904 186.669 193.065 196.988C155.933 232.34 99.497 238.596 55.5255 212.24C45.097 205.99 35.6851 198.072 27.7451 188.866C19.1926 178.953 12.3686 167.569 7.65781 155.351C2.60712 142.264 0 128.257 0 114.228C0 98.3219 3.35751 82.4611 9.80315 67.9215C15.8672 54.2382 24.6377 41.7862 35.4767 31.4668C72.6081 -3.88483 129.044 -10.1413 173.016 16.2153C183.444 22.4653 192.856 30.3829 200.796 39.5896C209.349 49.5018 216.173 60.8859 220.883 73.1037C225.934 86.1906 228.541 100.198 228.541 114.228Z", @@ -231,3 +246,41 @@ function darkenHex(hex: string, percent: number): string { const b = Math.max(0, Math.floor((num & 255) * factor)); return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}`; } + +/** The look an avatar value shows, with a plain hex colour, ready to edit and re-encode. */ +export function ooLookForEditing(value: string, identity: string): OoAvatar { + const look = decodeOoAvatar(value) ?? DEFAULT_OO_AVATAR; + return { ...look, color: resolveOoColor(identity, look.color || null).hex }; +} + +function pick(values: readonly T[], random: () => number): T { + return values[Math.floor(random() * values.length) % values.length] as T; +} + +/** Half the time an optional extra stays off, so random looks are not overloaded. */ +function maybe(values: readonly T[], random: () => number): T { + return random() < 0.5 ? (values[0] as T) : pick(values.slice(1), random); +} + +/** A random but tidy look for “surprise me”. */ +export function ooRandomAvatar(random: () => number = Math.random): OoAvatar { + const species = pick(OO_SPECIES, random); + return { + species, + color: pick(OO_PALETTE_HEXES, random), + shape: species === "classic" ? Math.floor(random() * OO_CLASSIC_SHAPE_COUNT) : null, + arms: species === "robot" ? "robot" : pick(["glass", "stub", "paw"] as const, random), + lashes: maybe(OO_LASHES, random), + liner: random() < 0.2 ? "wing" : "none", + eyeshadow: random() < 0.25 ? pick(OO_EYESHADOWS.slice(1), random) : "none", + iris: maybe(OO_IRISES, random), + sparkle: pick(OO_SPARKLES, random), + brows: "auto", + cheeks: maybe(OO_CHEEKS, random), + eyewear: random() < 0.35 ? pick(OO_EYEWEAR.slice(1), random) : "none", + head: random() < 0.35 ? pick(OO_HEADWEAR.slice(1), random) : "none", + neck: random() < 0.25 ? pick(OO_NECKWEAR.slice(1), random) : "none", + energy: Number((0.7 + random() * 0.7).toFixed(2)), + playful: Number(random().toFixed(2)), + }; +} diff --git a/packages/core/src/oo-rig.test.ts b/packages/core/src/oo-rig.test.ts index 1b4e36c..0da8bc2 100644 --- a/packages/core/src/oo-rig.test.ts +++ b/packages/core/src/oo-rig.test.ts @@ -2,6 +2,8 @@ import { describe, expect, it } from "vitest"; import type { OoAvatar } from "./oo-avatar.js"; import { DEFAULT_OO_AVATAR, + decodeOoAvatar, + encodeOoAvatar, OO_EYE_ASYMMETRY_MIN_RATIO, OO_EYEWEAR, OO_RIG_EYES, @@ -18,6 +20,8 @@ import { OO_DEFAULT_COLOR, OO_PALETTE_HEXES, ooIdentityShapeIndex, + ooLookForEditing, + ooRandomAvatar, resolveOoClassicShape, resolveOoColor, } from "./oo-palette.js"; @@ -218,3 +222,22 @@ describe("oo moments after a status change", () => { expect(ooMomentAfterStatus(undefined, "idle")).toBeNull(); }); }); + +describe("oo atelier helpers", () => { + it("edits legacy values with a hex colour", () => { + expect(ooLookForEditing("violet", "bot").color).toBe(resolveOoColor("bot", "violet").hex); + expect(ooLookForEditing("#8B5CF6::shape_2", "bot")).toMatchObject({ + color: "#8B5CF6", + shape: 2, + }); + expect(ooLookForEditing("data:image/png;base64,AAAA", "bot").species).toBe("classic"); + }); + + it("surprises with looks that always encode", () => { + const random = ooSeededRandom(5); + for (let i = 0; i < 50; i++) { + const look = ooRandomAvatar(random); + expect(decodeOoAvatar(encodeOoAvatar(look))).not.toBeNull(); + } + }); +}); diff --git a/packages/ui-web/src/oo-figure.tsx b/packages/ui-web/src/oo-figure.tsx index 0cd5e5b..b9228ff 100644 --- a/packages/ui-web/src/oo-figure.tsx +++ b/packages/ui-web/src/oo-figure.tsx @@ -26,12 +26,16 @@ export interface OoFigureProps { still?: boolean; /** Eyes follow the pointer and a tap boops the Oo. */ interactive?: boolean; + /** `face` crops to the eyes, for pickers of eye styles and eyewear. */ + focus?: "body" | "face"; className?: string; } /** The body fills the avatar box; ears, hats and effects may reach past it. */ const OO_VIEWBOX = `${OO_RIG_INSET} ${OO_RIG_INSET + 4} ${OO_RIG_SIZE - 2 * OO_RIG_INSET} ${OO_RIG_SIZE - 2 * OO_RIG_INSET}`; +const OO_FACE_VIEWBOX = "47 62 112 112"; + /** Above this size an Oo always moves; smaller ones only for list moments. */ const LIVELY_SIZE = 56; @@ -208,6 +212,7 @@ export function OoFigure({ size, still = false, interactive = false, + focus = "body", className, }: OoFigureProps) { const gradient = `oo${useId().replace(/[^a-zA-Z0-9-_]/g, "")}`; @@ -289,14 +294,14 @@ export function OoFigure({ return (