@agent-native/core 0.75.4 → 0.76.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +2 -2
- package/corpus/core/CHANGELOG.md +47 -0
- package/corpus/core/docs/AGENTS.md +1 -0
- package/corpus/core/docs/content/client.md +15 -0
- package/corpus/core/docs/content/internationalization.md +145 -0
- package/corpus/core/docs/content/locales/ar-SA/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/de-DE/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/es-ES/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/fr-FR/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/hi-IN/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/ja-JP/internationalization.md +114 -0
- package/corpus/core/docs/content/locales/ko-KR/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/pt-BR/internationalization.md +102 -0
- package/corpus/core/docs/content/locales/zh-CN/internationalization.md +102 -0
- package/corpus/core/docs/content/skills-guide.md +19 -18
- package/corpus/core/package.json +7 -1
- package/corpus/core/src/agent/durable-background.ts +62 -28
- package/corpus/core/src/agent/production-agent.ts +16 -12
- package/corpus/core/src/cli/skills.ts +22 -4
- package/corpus/core/src/client/CommandMenu.tsx +16 -0
- package/corpus/core/src/client/app-providers.tsx +26 -1
- package/corpus/core/src/client/i18n.tsx +605 -0
- package/corpus/core/src/client/index.ts +28 -0
- package/corpus/core/src/deploy/build.ts +47 -113
- package/corpus/core/src/deploy/workspace-deploy.ts +62 -30
- package/corpus/core/src/index.browser.ts +25 -0
- package/corpus/core/src/localization/actions/get-localization-preference.ts +23 -0
- package/corpus/core/src/localization/actions/set-localization-preference.ts +30 -0
- package/corpus/core/src/localization/index.ts +2 -0
- package/corpus/core/src/localization/server.ts +131 -0
- package/corpus/core/src/localization/shared.ts +163 -0
- package/corpus/core/src/server/action-discovery.ts +8 -0
- package/corpus/core/src/server/index.ts +8 -0
- package/corpus/core/src/server/self-dispatch.ts +29 -2
- package/corpus/core/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/core/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
- package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/core/src/templates/default/AGENTS.md +16 -15
- package/corpus/core/src/templates/default/app/i18n/en-US.ts +29 -0
- package/corpus/core/src/templates/default/app/i18n/index.ts +13 -0
- package/corpus/core/src/templates/default/app/root.tsx +20 -1
- package/corpus/core/src/templates/default/app/routes/_index.tsx +24 -9
- package/corpus/core/src/templates/default/app/routes/settings.tsx +67 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/core/src/vite/action-types-plugin.ts +10 -0
- package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/analytics/app/components/layout/Header.tsx +18 -15
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +7 -5
- package/corpus/templates/analytics/app/components/layout/MobileNav.tsx +9 -3
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +5 -3
- package/corpus/templates/analytics/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/analytics/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/analytics/app/i18n/en-US.ts +3 -0
- package/corpus/templates/analytics/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/analytics/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/analytics/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/analytics/app/i18n/index.ts +31 -0
- package/corpus/templates/analytics/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/analytics/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/analytics/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/analytics/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/analytics/app/i18n-data.ts +433 -0
- package/corpus/templates/analytics/app/pages/Settings.tsx +50 -16
- package/corpus/templates/analytics/app/root.tsx +14 -1
- package/corpus/templates/analytics/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/assets/app/components/layout/Header.tsx +17 -8
- package/corpus/templates/assets/app/components/layout/Layout.tsx +10 -6
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +40 -23
- package/corpus/templates/assets/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/assets/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/assets/app/i18n/en-US.ts +3 -0
- package/corpus/templates/assets/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/assets/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/assets/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/assets/app/i18n/index.ts +31 -0
- package/corpus/templates/assets/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/assets/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/assets/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/assets/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/assets/app/i18n-data.ts +668 -0
- package/corpus/templates/assets/app/root.tsx +40 -15
- package/corpus/templates/assets/app/routes/_index.tsx +9 -10
- package/corpus/templates/assets/app/routes/settings.tsx +37 -6
- package/corpus/templates/assets/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/assets/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/brain/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/brain/app/components/layout/Layout.tsx +12 -8
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +23 -12
- package/corpus/templates/brain/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/brain/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/brain/app/i18n/en-US.ts +3 -0
- package/corpus/templates/brain/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/brain/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/brain/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/brain/app/i18n/index.ts +31 -0
- package/corpus/templates/brain/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/brain/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/brain/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/brain/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/brain/app/i18n-data.ts +624 -0
- package/corpus/templates/brain/app/root.tsx +27 -12
- package/corpus/templates/brain/app/routes/settings.tsx +45 -8
- package/corpus/templates/brain/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/brain/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +2 -0
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +16 -9
- package/corpus/templates/calendar/app/i18n/ar-SA.ts +57 -0
- package/corpus/templates/calendar/app/i18n/de-DE.ts +58 -0
- package/corpus/templates/calendar/app/i18n/en-US.ts +57 -0
- package/corpus/templates/calendar/app/i18n/es-ES.ts +58 -0
- package/corpus/templates/calendar/app/i18n/fr-FR.ts +58 -0
- package/corpus/templates/calendar/app/i18n/hi-IN.ts +57 -0
- package/corpus/templates/calendar/app/i18n/index.ts +31 -0
- package/corpus/templates/calendar/app/i18n/ja-JP.ts +58 -0
- package/corpus/templates/calendar/app/i18n/ko-KR.ts +57 -0
- package/corpus/templates/calendar/app/i18n/pt-BR.ts +57 -0
- package/corpus/templates/calendar/app/i18n/zh-CN.ts +57 -0
- package/corpus/templates/calendar/app/i18n-data.ts +516 -0
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +2 -0
- package/corpus/templates/calendar/app/pages/Settings.tsx +63 -28
- package/corpus/templates/calendar/app/root.tsx +78 -7
- package/corpus/templates/calendar/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/calendar/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/chat/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/chat/app/components/layout/Header.tsx +17 -11
- package/corpus/templates/chat/app/components/layout/Layout.tsx +12 -8
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +47 -18
- package/corpus/templates/chat/app/i18n/ar-SA.ts +62 -0
- package/corpus/templates/chat/app/i18n/de-DE.ts +63 -0
- package/corpus/templates/chat/app/i18n/en-US.ts +63 -0
- package/corpus/templates/chat/app/i18n/es-ES.ts +63 -0
- package/corpus/templates/chat/app/i18n/fr-FR.ts +63 -0
- package/corpus/templates/chat/app/i18n/hi-IN.ts +63 -0
- package/corpus/templates/chat/app/i18n/index.ts +31 -0
- package/corpus/templates/chat/app/i18n/ja-JP.ts +63 -0
- package/corpus/templates/chat/app/i18n/ko-KR.ts +63 -0
- package/corpus/templates/chat/app/i18n/pt-BR.ts +63 -0
- package/corpus/templates/chat/app/i18n/zh-CN.ts +61 -0
- package/corpus/templates/chat/app/i18n-data.ts +475 -0
- package/corpus/templates/chat/app/root.tsx +18 -5
- package/corpus/templates/chat/app/routes/_index.tsx +9 -8
- package/corpus/templates/chat/app/routes/settings.tsx +86 -0
- package/corpus/templates/chat/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/chat/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/clips/app/components/layout/Header.tsx +23 -17
- package/corpus/templates/clips/app/components/library/empty-state.tsx +10 -34
- package/corpus/templates/clips/app/components/library/library-layout.tsx +45 -34
- package/corpus/templates/clips/app/i18n/ar-SA.ts +182 -0
- package/corpus/templates/clips/app/i18n/de-DE.ts +184 -0
- package/corpus/templates/clips/app/i18n/en-US.ts +179 -0
- package/corpus/templates/clips/app/i18n/es-ES.ts +183 -0
- package/corpus/templates/clips/app/i18n/fr-FR.ts +184 -0
- package/corpus/templates/clips/app/i18n/hi-IN.ts +180 -0
- package/corpus/templates/clips/app/i18n/index.ts +41 -0
- package/corpus/templates/clips/app/i18n/ja-JP.ts +180 -0
- package/corpus/templates/clips/app/i18n/ko-KR.ts +178 -0
- package/corpus/templates/clips/app/i18n/pt-BR.ts +183 -0
- package/corpus/templates/clips/app/i18n/zh-CN.ts +173 -0
- package/corpus/templates/clips/app/root.tsx +104 -10
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +154 -95
- package/corpus/templates/clips/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-24-chrome-extension-setup-now-shows-a-clear-all-done-confirmati.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-24-clips-now-includes-a-language-picker-and-simplified-chinese-ui.md +6 -0
- package/corpus/templates/clips/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/clips/chrome-extension/src/permission.html +60 -0
- package/corpus/templates/clips/chrome-extension/src/permission.ts +28 -15
- package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/content/app/components/EmptyState.tsx +7 -5
- package/corpus/templates/content/app/components/ThemeToggle.tsx +4 -2
- package/corpus/templates/content/app/components/layout/Header.tsx +2 -0
- package/corpus/templates/content/app/components/layout/Layout.tsx +8 -7
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +41 -1
- package/corpus/templates/content/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/content/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/content/app/i18n/en-US.ts +3 -0
- package/corpus/templates/content/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/content/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/content/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/content/app/i18n/index.ts +31 -0
- package/corpus/templates/content/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/content/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/content/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/content/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/content/app/i18n-data.ts +490 -0
- package/corpus/templates/content/app/root.tsx +110 -23
- package/corpus/templates/content/app/routes/_app.settings.tsx +84 -0
- package/corpus/templates/content/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/content/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/design/app/components/layout/Header.tsx +16 -8
- package/corpus/templates/design/app/components/layout/Layout.tsx +8 -6
- package/corpus/templates/design/app/components/layout/Sidebar.tsx +25 -9
- package/corpus/templates/design/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/design/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/design/app/i18n/en-US.ts +3 -0
- package/corpus/templates/design/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/design/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/design/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/design/app/i18n/index.ts +31 -0
- package/corpus/templates/design/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/design/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/design/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/design/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/design/app/i18n-data.ts +350 -0
- package/corpus/templates/design/app/root.tsx +40 -15
- package/corpus/templates/design/app/routes/settings.tsx +43 -0
- package/corpus/templates/design/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/design/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/dispatch/app/i18n/ar-SA.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/de-DE.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/en-US.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/es-ES.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/fr-FR.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/hi-IN.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/index.ts +31 -0
- package/corpus/templates/dispatch/app/i18n/ja-JP.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/ko-KR.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/pt-BR.ts +3 -0
- package/corpus/templates/dispatch/app/i18n/zh-CN.ts +3 -0
- package/corpus/templates/dispatch/app/i18n-data.ts +267 -0
- package/corpus/templates/dispatch/app/root.tsx +18 -4
- package/corpus/templates/dispatch/app/routes/settings.tsx +86 -0
- package/corpus/templates/dispatch/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/dispatch/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/forms/app/components/layout/Header.tsx +16 -9
- package/corpus/templates/forms/app/components/layout/Layout.tsx +6 -4
- package/corpus/templates/forms/app/components/layout/Sidebar.tsx +34 -17
- package/corpus/templates/forms/app/i18n/ar-SA.ts +58 -0
- package/corpus/templates/forms/app/i18n/de-DE.ts +59 -0
- package/corpus/templates/forms/app/i18n/en-US.ts +59 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +59 -0
- package/corpus/templates/forms/app/i18n/fr-FR.ts +59 -0
- package/corpus/templates/forms/app/i18n/hi-IN.ts +59 -0
- package/corpus/templates/forms/app/i18n/index.ts +31 -0
- package/corpus/templates/forms/app/i18n/ja-JP.ts +59 -0
- package/corpus/templates/forms/app/i18n/ko-KR.ts +59 -0
- package/corpus/templates/forms/app/i18n/pt-BR.ts +59 -0
- package/corpus/templates/forms/app/i18n/zh-CN.ts +56 -0
- package/corpus/templates/forms/app/root.tsx +65 -16
- package/corpus/templates/forms/app/routes/_app.settings.tsx +85 -0
- package/corpus/templates/forms/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/forms/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/macros/app/components/layout/AppLayout.tsx +29 -17
- package/corpus/templates/macros/app/components/layout/Header.tsx +16 -10
- package/corpus/templates/macros/app/i18n/ar-SA.ts +54 -0
- package/corpus/templates/macros/app/i18n/de-DE.ts +55 -0
- package/corpus/templates/macros/app/i18n/en-US.ts +55 -0
- package/corpus/templates/macros/app/i18n/es-ES.ts +55 -0
- package/corpus/templates/macros/app/i18n/fr-FR.ts +55 -0
- package/corpus/templates/macros/app/i18n/hi-IN.ts +55 -0
- package/corpus/templates/macros/app/i18n/index.ts +31 -0
- package/corpus/templates/macros/app/i18n/ja-JP.ts +55 -0
- package/corpus/templates/macros/app/i18n/ko-KR.ts +55 -0
- package/corpus/templates/macros/app/i18n/pt-BR.ts +55 -0
- package/corpus/templates/macros/app/i18n/zh-CN.ts +53 -0
- package/corpus/templates/macros/app/root.tsx +65 -15
- package/corpus/templates/macros/app/routes/settings.tsx +85 -0
- package/corpus/templates/macros/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/macros/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +9 -4
- package/corpus/templates/mail/app/i18n/ar-SA.ts +33 -0
- package/corpus/templates/mail/app/i18n/de-DE.ts +33 -0
- package/corpus/templates/mail/app/i18n/en-US.ts +32 -0
- package/corpus/templates/mail/app/i18n/es-ES.ts +33 -0
- package/corpus/templates/mail/app/i18n/fr-FR.ts +33 -0
- package/corpus/templates/mail/app/i18n/hi-IN.ts +32 -0
- package/corpus/templates/mail/app/i18n/index.ts +31 -0
- package/corpus/templates/mail/app/i18n/ja-JP.ts +32 -0
- package/corpus/templates/mail/app/i18n/ko-KR.ts +33 -0
- package/corpus/templates/mail/app/i18n/pt-BR.ts +34 -0
- package/corpus/templates/mail/app/i18n/zh-CN.ts +32 -0
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +67 -13
- package/corpus/templates/mail/app/root.tsx +20 -0
- package/corpus/templates/mail/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/mail/changelog/2026-06-24-settings-now-link-directly-to-agent-settings-for-model-api-k.md +6 -0
- package/corpus/templates/plan/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/plan/.agents/skills/visual-plan/references/wireframe.md +22 -4
- package/corpus/templates/plan/.agents/skills/visual-recap/references/wireframe.md +22 -4
- package/corpus/templates/plan/app/components/layout/Header.tsx +19 -12
- package/corpus/templates/plan/app/components/layout/Layout.tsx +11 -7
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +41 -28
- package/corpus/templates/plan/app/i18n/ar-SA.ts +77 -0
- package/corpus/templates/plan/app/i18n/de-DE.ts +78 -0
- package/corpus/templates/plan/app/i18n/en-US.ts +78 -0
- package/corpus/templates/plan/app/i18n/es-ES.ts +78 -0
- package/corpus/templates/plan/app/i18n/fr-FR.ts +78 -0
- package/corpus/templates/plan/app/i18n/hi-IN.ts +78 -0
- package/corpus/templates/plan/app/i18n/index.ts +31 -0
- package/corpus/templates/plan/app/i18n/ja-JP.ts +79 -0
- package/corpus/templates/plan/app/i18n/ko-KR.ts +77 -0
- package/corpus/templates/plan/app/i18n/pt-BR.ts +78 -0
- package/corpus/templates/plan/app/i18n/zh-CN.ts +74 -0
- package/corpus/templates/plan/app/root.tsx +45 -8
- package/corpus/templates/plan/app/routes/settings.tsx +86 -0
- package/corpus/templates/plan/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/plan/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/slides/app/components/layout/Header.tsx +23 -11
- package/corpus/templates/slides/app/components/layout/Layout.tsx +7 -6
- package/corpus/templates/slides/app/components/layout/Sidebar.tsx +23 -11
- package/corpus/templates/slides/app/i18n/ar-SA.ts +54 -0
- package/corpus/templates/slides/app/i18n/de-DE.ts +56 -0
- package/corpus/templates/slides/app/i18n/en-US.ts +55 -0
- package/corpus/templates/slides/app/i18n/es-ES.ts +55 -0
- package/corpus/templates/slides/app/i18n/fr-FR.ts +55 -0
- package/corpus/templates/slides/app/i18n/hi-IN.ts +55 -0
- package/corpus/templates/slides/app/i18n/index.ts +31 -0
- package/corpus/templates/slides/app/i18n/ja-JP.ts +55 -0
- package/corpus/templates/slides/app/i18n/ko-KR.ts +55 -0
- package/corpus/templates/slides/app/i18n/pt-BR.ts +55 -0
- package/corpus/templates/slides/app/i18n/zh-CN.ts +53 -0
- package/corpus/templates/slides/app/root.tsx +50 -8
- package/corpus/templates/slides/app/routes/settings.tsx +85 -0
- package/corpus/templates/slides/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/slides/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/corpus/templates/videos/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/corpus/templates/videos/app/components/NewCompositionPopover.tsx +14 -9
- package/corpus/templates/videos/app/components/Sidebar.tsx +16 -9
- package/corpus/templates/videos/app/components/StudioHeader.tsx +12 -8
- package/corpus/templates/videos/app/components/layout/Header.tsx +21 -15
- package/corpus/templates/videos/app/components/layout/Layout.tsx +10 -7
- package/corpus/templates/videos/app/components/layout/NavSidebar.tsx +21 -6
- package/corpus/templates/videos/app/i18n/ar-SA.ts +73 -0
- package/corpus/templates/videos/app/i18n/de-DE.ts +75 -0
- package/corpus/templates/videos/app/i18n/en-US.ts +74 -0
- package/corpus/templates/videos/app/i18n/es-ES.ts +75 -0
- package/corpus/templates/videos/app/i18n/fr-FR.ts +75 -0
- package/corpus/templates/videos/app/i18n/hi-IN.ts +74 -0
- package/corpus/templates/videos/app/i18n/index.ts +31 -0
- package/corpus/templates/videos/app/i18n/ja-JP.ts +74 -0
- package/corpus/templates/videos/app/i18n/ko-KR.ts +74 -0
- package/corpus/templates/videos/app/i18n/pt-BR.ts +75 -0
- package/corpus/templates/videos/app/i18n/zh-CN.ts +72 -0
- package/corpus/templates/videos/app/pages/Index.tsx +11 -9
- package/corpus/templates/videos/app/root.tsx +45 -7
- package/corpus/templates/videos/app/routes/settings.tsx +85 -0
- package/corpus/templates/videos/changelog/2026-06-24-a-new-settings-page-gives-quick-access-to-language-workspace.md +6 -0
- package/corpus/templates/videos/changelog/2026-06-24-added-a-language-picker-and-localized-app-chrome-for-support.md +6 -0
- package/dist/agent/durable-background.d.ts +32 -28
- package/dist/agent/durable-background.d.ts.map +1 -1
- package/dist/agent/durable-background.js +59 -28
- package/dist/agent/durable-background.js.map +1 -1
- package/dist/agent/production-agent.d.ts.map +1 -1
- package/dist/agent/production-agent.js +16 -12
- package/dist/agent/production-agent.js.map +1 -1
- package/dist/cli/skills.d.ts +1 -1
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +22 -4
- package/dist/cli/skills.js.map +1 -1
- package/dist/client/CommandMenu.d.ts +3 -0
- package/dist/client/CommandMenu.d.ts.map +1 -1
- package/dist/client/CommandMenu.js +9 -0
- package/dist/client/CommandMenu.js.map +1 -1
- package/dist/client/app-providers.d.ts +8 -1
- package/dist/client/app-providers.d.ts.map +1 -1
- package/dist/client/app-providers.js +7 -5
- package/dist/client/app-providers.js.map +1 -1
- package/dist/client/i18n.d.ts +54 -0
- package/dist/client/i18n.d.ts.map +1 -0
- package/dist/client/i18n.js +354 -0
- package/dist/client/i18n.js.map +1 -0
- package/dist/client/index.d.ts +2 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +2 -1
- package/dist/client/index.js.map +1 -1
- package/dist/deploy/build.d.ts +32 -36
- package/dist/deploy/build.d.ts.map +1 -1
- package/dist/deploy/build.js +47 -104
- package/dist/deploy/build.js.map +1 -1
- package/dist/deploy/workspace-deploy.js +62 -30
- package/dist/deploy/workspace-deploy.js.map +1 -1
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.d.ts.map +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.browser.js.map +1 -1
- package/dist/localization/actions/get-localization-preference.d.ts +4 -0
- package/dist/localization/actions/get-localization-preference.d.ts.map +1 -0
- package/dist/localization/actions/get-localization-preference.js +16 -0
- package/dist/localization/actions/get-localization-preference.js.map +1 -0
- package/dist/localization/actions/set-localization-preference.d.ts +6 -0
- package/dist/localization/actions/set-localization-preference.d.ts.map +1 -0
- package/dist/localization/actions/set-localization-preference.js +24 -0
- package/dist/localization/actions/set-localization-preference.js.map +1 -0
- package/dist/localization/index.d.ts +3 -0
- package/dist/localization/index.d.ts.map +1 -0
- package/dist/localization/index.js +3 -0
- package/dist/localization/index.js.map +1 -0
- package/dist/localization/server.d.ts +25 -0
- package/dist/localization/server.d.ts.map +1 -0
- package/dist/localization/server.js +69 -0
- package/dist/localization/server.js.map +1 -0
- package/dist/localization/shared.d.ts +25 -0
- package/dist/localization/shared.d.ts.map +1 -0
- package/dist/localization/shared.js +134 -0
- package/dist/localization/shared.js.map +1 -0
- package/dist/server/action-discovery.d.ts.map +1 -1
- package/dist/server/action-discovery.js +8 -0
- package/dist/server/action-discovery.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -0
- package/dist/server/index.js.map +1 -1
- package/dist/server/self-dispatch.d.ts +0 -10
- package/dist/server/self-dispatch.d.ts.map +1 -1
- package/dist/server/self-dispatch.js +27 -2
- package/dist/server/self-dispatch.js.map +1 -1
- package/dist/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/dist/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/dist/templates/default/AGENTS.md +16 -15
- package/dist/templates/default/app/i18n/en-US.ts +29 -0
- package/dist/templates/default/app/i18n/index.ts +13 -0
- package/dist/templates/default/app/root.tsx +20 -1
- package/dist/templates/default/app/routes/_index.tsx +24 -9
- package/dist/templates/default/app/routes/settings.tsx +67 -0
- package/dist/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/dist/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/dist/vite/action-types-plugin.d.ts.map +1 -1
- package/dist/vite/action-types-plugin.js +8 -0
- package/dist/vite/action-types-plugin.js.map +1 -1
- package/docs/AGENTS.md +1 -0
- package/docs/content/client.md +15 -0
- package/docs/content/internationalization.md +145 -0
- package/docs/content/locales/ar-SA/internationalization.md +102 -0
- package/docs/content/locales/de-DE/internationalization.md +102 -0
- package/docs/content/locales/es-ES/internationalization.md +102 -0
- package/docs/content/locales/fr-FR/internationalization.md +102 -0
- package/docs/content/locales/hi-IN/internationalization.md +102 -0
- package/docs/content/locales/ja-JP/internationalization.md +114 -0
- package/docs/content/locales/ko-KR/internationalization.md +102 -0
- package/docs/content/locales/pt-BR/internationalization.md +102 -0
- package/docs/content/locales/zh-CN/internationalization.md +102 -0
- package/docs/content/skills-guide.md +19 -18
- package/package.json +7 -1
- package/src/templates/default/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/src/templates/default/.agents/skills/internationalization/SKILL.md +77 -0
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +6 -0
- package/src/templates/default/AGENTS.md +16 -15
- package/src/templates/default/app/i18n/en-US.ts +29 -0
- package/src/templates/default/app/i18n/index.ts +13 -0
- package/src/templates/default/app/root.tsx +20 -1
- package/src/templates/default/app/routes/_index.tsx +24 -9
- package/src/templates/default/app/routes/settings.tsx +67 -0
- package/src/templates/workspace-core/.agents/skills/adding-a-feature/SKILL.md +5 -0
- package/src/templates/workspace-core/.agents/skills/internationalization/SKILL.md +77 -0
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +6 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
root: {
|
|
3
|
+
commandPresentations: "프레젠테이션",
|
|
4
|
+
searchDecks: "덱 검색",
|
|
5
|
+
commandAppearance: "모양",
|
|
6
|
+
toggleTheme: "테마 전환",
|
|
7
|
+
},
|
|
8
|
+
header: {
|
|
9
|
+
settings: "설정",
|
|
10
|
+
decks: "덱",
|
|
11
|
+
designSystems: "디자인 시스템",
|
|
12
|
+
team: "팀",
|
|
13
|
+
extensions: "확장",
|
|
14
|
+
deck: "덱",
|
|
15
|
+
tool: "도구",
|
|
16
|
+
slides: "Slides",
|
|
17
|
+
},
|
|
18
|
+
navigation: {
|
|
19
|
+
settings: "설정",
|
|
20
|
+
brand: "Slides",
|
|
21
|
+
decks: "덱",
|
|
22
|
+
designSystems: "디자인 시스템",
|
|
23
|
+
team: "팀",
|
|
24
|
+
},
|
|
25
|
+
settings: {
|
|
26
|
+
title: "설정",
|
|
27
|
+
description: "이 앱의 언어 및 워크스페이스 환경설정입니다.",
|
|
28
|
+
languageTitle: "언어",
|
|
29
|
+
languageDescription:
|
|
30
|
+
"인터페이스 언어를 선택하세요. 이 기본 설정은 계정에 저장됩니다.",
|
|
31
|
+
languageLabel: "인터페이스 언어",
|
|
32
|
+
workspaceTitle: "워크스페이스",
|
|
33
|
+
workspaceDescription:
|
|
34
|
+
"팀원, 조직 접근 권한, 공유 워크스페이스 환경설정을 관리합니다.",
|
|
35
|
+
openTeamSettings: "팀 설정 열기",
|
|
36
|
+
openResourceSettings: "리소스 설정 열기",
|
|
37
|
+
agentTitle: "에이전트 설정",
|
|
38
|
+
agentDescription:
|
|
39
|
+
"오른쪽 사이드바의 에이전트 설정을 열어 모델, API 키, 자동화, 음성 및 기타 제어를 관리합니다.",
|
|
40
|
+
openAgentSettings: "에이전트 설정 열기",
|
|
41
|
+
},
|
|
42
|
+
agent: {
|
|
43
|
+
emptyState: "프레젠테이션에 대해 무엇이든 물어보세요",
|
|
44
|
+
suggestionPitch: "이 문서로 10장짜리 피치덱 만들기",
|
|
45
|
+
suggestionBrand: "이 덱에 우리 브랜드 적용",
|
|
46
|
+
suggestionHero: "이 슬라이드의 히어로 이미지 생성",
|
|
47
|
+
},
|
|
48
|
+
sidebar: {
|
|
49
|
+
openNavigation: "탐색 열기",
|
|
50
|
+
expandSidebar: "사이드바 펼치기",
|
|
51
|
+
collapseSidebar: "사이드바 접기",
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export default messages;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
root: {
|
|
3
|
+
commandPresentations: "Apresentações",
|
|
4
|
+
searchDecks: "Buscar decks",
|
|
5
|
+
commandAppearance: "Aparência",
|
|
6
|
+
toggleTheme: "Alternar tema",
|
|
7
|
+
},
|
|
8
|
+
header: {
|
|
9
|
+
settings: "Configurações",
|
|
10
|
+
decks: "Decks",
|
|
11
|
+
designSystems: "Sistemas de design",
|
|
12
|
+
team: "Equipe",
|
|
13
|
+
extensions: "Extensões",
|
|
14
|
+
deck: "Deck",
|
|
15
|
+
tool: "Ferramenta",
|
|
16
|
+
slides: "Slides",
|
|
17
|
+
},
|
|
18
|
+
navigation: {
|
|
19
|
+
settings: "Configurações",
|
|
20
|
+
brand: "Slides",
|
|
21
|
+
decks: "Decks",
|
|
22
|
+
designSystems: "Sistemas de design",
|
|
23
|
+
team: "Equipe",
|
|
24
|
+
},
|
|
25
|
+
settings: {
|
|
26
|
+
title: "Configurações",
|
|
27
|
+
description: "Preferências de idioma e espaço de trabalho deste app.",
|
|
28
|
+
languageTitle: "Idioma",
|
|
29
|
+
languageDescription:
|
|
30
|
+
"Escolha o idioma da interface. Essa preferência é salva na sua conta.",
|
|
31
|
+
languageLabel: "Idioma da interface",
|
|
32
|
+
workspaceTitle: "Espaço de trabalho",
|
|
33
|
+
workspaceDescription:
|
|
34
|
+
"Gerencie membros da equipe, acesso da organização e preferências compartilhadas.",
|
|
35
|
+
openTeamSettings: "Abrir configurações da equipe",
|
|
36
|
+
openResourceSettings: "Abrir configurações de recursos",
|
|
37
|
+
agentTitle: "Configurações do agente",
|
|
38
|
+
agentDescription:
|
|
39
|
+
"Abra as configurações do agente na barra lateral para modelos, chaves de API, automações, voz e outros controles.",
|
|
40
|
+
openAgentSettings: "Abrir configurações do agente",
|
|
41
|
+
},
|
|
42
|
+
agent: {
|
|
43
|
+
emptyState: "Pergunte qualquer coisa sobre suas apresentações",
|
|
44
|
+
suggestionPitch: "Crie um pitch de 10 slides a partir deste doc",
|
|
45
|
+
suggestionBrand: "Aplique nossa marca a este deck",
|
|
46
|
+
suggestionHero: "Gere uma imagem hero para este slide",
|
|
47
|
+
},
|
|
48
|
+
sidebar: {
|
|
49
|
+
openNavigation: "Abrir navegação",
|
|
50
|
+
expandSidebar: "Expandir barra lateral",
|
|
51
|
+
collapseSidebar: "Recolher barra lateral",
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export default messages;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
const messages = {
|
|
2
|
+
root: {
|
|
3
|
+
commandPresentations: "演示文稿",
|
|
4
|
+
searchDecks: "搜索幻灯片",
|
|
5
|
+
commandAppearance: "外观",
|
|
6
|
+
toggleTheme: "切换主题",
|
|
7
|
+
},
|
|
8
|
+
header: {
|
|
9
|
+
settings: "设置",
|
|
10
|
+
decks: "幻灯片",
|
|
11
|
+
designSystems: "设计系统",
|
|
12
|
+
team: "团队",
|
|
13
|
+
extensions: "扩展",
|
|
14
|
+
deck: "幻灯片",
|
|
15
|
+
tool: "工具",
|
|
16
|
+
slides: "Slides",
|
|
17
|
+
},
|
|
18
|
+
navigation: {
|
|
19
|
+
settings: "设置",
|
|
20
|
+
brand: "Slides",
|
|
21
|
+
decks: "幻灯片",
|
|
22
|
+
designSystems: "设计系统",
|
|
23
|
+
team: "团队",
|
|
24
|
+
},
|
|
25
|
+
settings: {
|
|
26
|
+
title: "设置",
|
|
27
|
+
description: "此应用的语言和工作区偏好设置。",
|
|
28
|
+
languageTitle: "语言",
|
|
29
|
+
languageDescription: "选择界面语言。此偏好会保存到你的账户。",
|
|
30
|
+
languageLabel: "界面语言",
|
|
31
|
+
workspaceTitle: "工作区",
|
|
32
|
+
workspaceDescription: "管理团队成员、组织访问权限和共享工作区偏好。",
|
|
33
|
+
openTeamSettings: "打开团队设置",
|
|
34
|
+
openResourceSettings: "打开资源设置",
|
|
35
|
+
agentTitle: "代理设置",
|
|
36
|
+
agentDescription:
|
|
37
|
+
"打开代理侧边栏设置,管理模型、API 密钥、自动化、语音和其他代理控制项。",
|
|
38
|
+
openAgentSettings: "打开代理设置",
|
|
39
|
+
},
|
|
40
|
+
agent: {
|
|
41
|
+
emptyState: "可以询问我任何关于演示文稿的问题",
|
|
42
|
+
suggestionPitch: "根据这份文档制作 10 页推介幻灯片",
|
|
43
|
+
suggestionBrand: "将我们的品牌应用到这份幻灯片",
|
|
44
|
+
suggestionHero: "为这页幻灯片生成主视觉图片",
|
|
45
|
+
},
|
|
46
|
+
sidebar: {
|
|
47
|
+
openNavigation: "打开导航",
|
|
48
|
+
expandSidebar: "展开侧边栏",
|
|
49
|
+
collapseSidebar: "折叠侧边栏",
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
export default messages;
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
exitSelectionMode as coreExitSelectionMode,
|
|
21
21
|
useCommandMenuShortcut,
|
|
22
22
|
useDbSync,
|
|
23
|
+
useT,
|
|
23
24
|
} from "@agent-native/core/client";
|
|
24
25
|
import { Layout as AppLayout } from "@/components/layout/Layout";
|
|
25
26
|
import { IconSun, IconMoon } from "@tabler/icons-react";
|
|
@@ -29,8 +30,12 @@ import type { LinksFunction } from "react-router";
|
|
|
29
30
|
import stylesheet from "./global.css?url";
|
|
30
31
|
import { configureTracking } from "@agent-native/core/client";
|
|
31
32
|
import changelog from "../CHANGELOG.md?raw";
|
|
32
|
-
import {
|
|
33
|
+
import {
|
|
34
|
+
getLocaleInitScript,
|
|
35
|
+
getThemeInitScript,
|
|
36
|
+
} from "@agent-native/core/client";
|
|
33
37
|
import { TAB_ID } from "@/lib/tab-id";
|
|
38
|
+
import { i18nCatalog } from "./i18n";
|
|
34
39
|
configureTracking({
|
|
35
40
|
getDefaultProps: (_name, properties) => ({
|
|
36
41
|
...properties,
|
|
@@ -90,11 +95,35 @@ function useExitSelectionOnOutsideClick() {
|
|
|
90
95
|
}, []);
|
|
91
96
|
}
|
|
92
97
|
|
|
93
|
-
const
|
|
98
|
+
const THEME_INIT_SCRIPT_SELECTOR = "script[data-agent-native-theme-init]";
|
|
99
|
+
const LOCALE_INIT_SCRIPT_SELECTOR = "script[data-agent-native-locale-init]";
|
|
100
|
+
|
|
101
|
+
function getHydrationStableThemeInitScript() {
|
|
102
|
+
if (typeof document !== "undefined") {
|
|
103
|
+
const existing = document.querySelector<HTMLScriptElement>(
|
|
104
|
+
THEME_INIT_SCRIPT_SELECTOR,
|
|
105
|
+
);
|
|
106
|
+
if (existing?.innerHTML) return existing.innerHTML;
|
|
107
|
+
}
|
|
108
|
+
return getThemeInitScript("dark", true);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function getHydrationStableLocaleInitScript() {
|
|
112
|
+
if (typeof document !== "undefined") {
|
|
113
|
+
const existing = document.querySelector<HTMLScriptElement>(
|
|
114
|
+
LOCALE_INIT_SCRIPT_SELECTOR,
|
|
115
|
+
);
|
|
116
|
+
if (existing?.innerHTML) return existing.innerHTML;
|
|
117
|
+
}
|
|
118
|
+
return getLocaleInitScript();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const THEME_INIT_SCRIPT = getHydrationStableThemeInitScript();
|
|
122
|
+
const LOCALE_INIT_SCRIPT = getHydrationStableLocaleInitScript();
|
|
94
123
|
|
|
95
124
|
export function Layout({ children }: { children: React.ReactNode }) {
|
|
96
125
|
return (
|
|
97
|
-
<html lang="en" suppressHydrationWarning>
|
|
126
|
+
<html lang="en-US" dir="ltr" data-locale="en-US" suppressHydrationWarning>
|
|
98
127
|
<head>
|
|
99
128
|
<meta charSet="utf-8" />
|
|
100
129
|
<meta
|
|
@@ -102,9 +131,15 @@ export function Layout({ children }: { children: React.ReactNode }) {
|
|
|
102
131
|
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"
|
|
103
132
|
/>
|
|
104
133
|
<script
|
|
134
|
+
data-agent-native-theme-init
|
|
105
135
|
suppressHydrationWarning
|
|
106
136
|
dangerouslySetInnerHTML={{ __html: THEME_INIT_SCRIPT }}
|
|
107
137
|
/>
|
|
138
|
+
<script
|
|
139
|
+
data-agent-native-locale-init
|
|
140
|
+
suppressHydrationWarning
|
|
141
|
+
dangerouslySetInnerHTML={{ __html: LOCALE_INIT_SCRIPT }}
|
|
142
|
+
/>
|
|
108
143
|
<link rel="icon" type="image/svg+xml" href={appPath("/favicon.svg")} />
|
|
109
144
|
<link rel="manifest" href={appPath("/manifest.json")} />
|
|
110
145
|
<meta name="theme-color" content="#EC4899" />
|
|
@@ -145,6 +180,7 @@ function AppContent() {
|
|
|
145
180
|
const { resolvedTheme, setTheme } = useTheme();
|
|
146
181
|
const isDark = resolvedTheme === "dark";
|
|
147
182
|
const [cmdkOpen, setCmdkOpen] = useState(false);
|
|
183
|
+
const t = useT();
|
|
148
184
|
useCommandMenuShortcut(useCallback(() => setCmdkOpen(true), []));
|
|
149
185
|
const location = useLocation();
|
|
150
186
|
|
|
@@ -169,16 +205,18 @@ function AppContent() {
|
|
|
169
205
|
changelog={changelog}
|
|
170
206
|
changelogKey="slides"
|
|
171
207
|
>
|
|
172
|
-
<CommandMenu.Group heading="
|
|
173
|
-
<CommandMenu.Item onSelect={() => {}}>
|
|
208
|
+
<CommandMenu.Group heading={t("root.commandPresentations")}>
|
|
209
|
+
<CommandMenu.Item onSelect={() => {}}>
|
|
210
|
+
{t("root.searchDecks")}
|
|
211
|
+
</CommandMenu.Item>
|
|
174
212
|
</CommandMenu.Group>
|
|
175
|
-
<CommandMenu.Group heading="
|
|
213
|
+
<CommandMenu.Group heading={t("root.commandAppearance")}>
|
|
176
214
|
<CommandMenu.Item
|
|
177
215
|
onSelect={() => setTheme(isDark ? "light" : "dark")}
|
|
178
216
|
keywords={["theme", "dark", "light", "mode"]}
|
|
179
217
|
>
|
|
180
218
|
{isDark ? <IconSun size={16} /> : <IconMoon size={16} />}
|
|
181
|
-
|
|
219
|
+
{t("root.toggleTheme")}
|
|
182
220
|
</CommandMenu.Item>
|
|
183
221
|
</CommandMenu.Group>
|
|
184
222
|
</CommandMenu>
|
|
@@ -200,7 +238,11 @@ export default function Root() {
|
|
|
200
238
|
}
|
|
201
239
|
|
|
202
240
|
return (
|
|
203
|
-
<AppProviders
|
|
241
|
+
<AppProviders
|
|
242
|
+
queryClient={queryClient}
|
|
243
|
+
defaultTheme="dark"
|
|
244
|
+
i18n={{ catalog: i18nCatalog }}
|
|
245
|
+
>
|
|
204
246
|
<AppContent />
|
|
205
247
|
{/* useToast-based Toaster — separate from AppProviders' sonner Toaster.
|
|
206
248
|
Components throughout the app call toast() from @/hooks/use-toast,
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Link } from "react-router";
|
|
2
|
+
import {
|
|
3
|
+
ChangelogSettingsCard,
|
|
4
|
+
LanguagePicker,
|
|
5
|
+
openAgentSettings,
|
|
6
|
+
useT,
|
|
7
|
+
} from "@agent-native/core/client";
|
|
8
|
+
import { useSetPageTitle } from "@/components/layout/HeaderActions";
|
|
9
|
+
import { Button } from "@/components/ui/button";
|
|
10
|
+
import {
|
|
11
|
+
Card,
|
|
12
|
+
CardContent,
|
|
13
|
+
CardDescription,
|
|
14
|
+
CardHeader,
|
|
15
|
+
CardTitle,
|
|
16
|
+
} from "@/components/ui/card";
|
|
17
|
+
import { Label } from "@/components/ui/label";
|
|
18
|
+
import changelog from "../../CHANGELOG.md?raw";
|
|
19
|
+
|
|
20
|
+
export function meta() {
|
|
21
|
+
return [{ title: "Settings - Slides" }];
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export default function SettingsRoute() {
|
|
25
|
+
const t = useT();
|
|
26
|
+
useSetPageTitle(t("settings.title"));
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<main className="mx-auto w-full max-w-3xl space-y-6 px-4 py-6 sm:px-6 sm:py-10">
|
|
30
|
+
<div className="space-y-1">
|
|
31
|
+
<h1 className="text-2xl font-semibold tracking-tight">
|
|
32
|
+
{t("settings.title")}
|
|
33
|
+
</h1>
|
|
34
|
+
<p className="text-sm leading-6 text-muted-foreground">
|
|
35
|
+
{t("settings.description")}
|
|
36
|
+
</p>
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
<Card>
|
|
40
|
+
<CardHeader>
|
|
41
|
+
<CardTitle className="text-base">
|
|
42
|
+
{t("settings.languageTitle")}
|
|
43
|
+
</CardTitle>
|
|
44
|
+
<CardDescription>{t("settings.languageDescription")}</CardDescription>
|
|
45
|
+
</CardHeader>
|
|
46
|
+
<CardContent className="max-w-xs space-y-1.5">
|
|
47
|
+
<Label>{t("settings.languageLabel")}</Label>
|
|
48
|
+
<LanguagePicker label={t("settings.languageLabel")} />
|
|
49
|
+
</CardContent>
|
|
50
|
+
</Card>
|
|
51
|
+
|
|
52
|
+
<Card>
|
|
53
|
+
<CardHeader>
|
|
54
|
+
<CardTitle className="text-base">
|
|
55
|
+
{t("settings.workspaceTitle")}
|
|
56
|
+
</CardTitle>
|
|
57
|
+
<CardDescription>
|
|
58
|
+
{t("settings.workspaceDescription")}
|
|
59
|
+
</CardDescription>
|
|
60
|
+
</CardHeader>
|
|
61
|
+
<CardContent>
|
|
62
|
+
<Button variant="outline" asChild>
|
|
63
|
+
<Link to="/team">{t("settings.openTeamSettings")}</Link>
|
|
64
|
+
</Button>
|
|
65
|
+
</CardContent>
|
|
66
|
+
</Card>
|
|
67
|
+
|
|
68
|
+
<Card>
|
|
69
|
+
<CardHeader>
|
|
70
|
+
<CardTitle className="text-base">
|
|
71
|
+
{t("settings.agentTitle")}
|
|
72
|
+
</CardTitle>
|
|
73
|
+
<CardDescription>{t("settings.agentDescription")}</CardDescription>
|
|
74
|
+
</CardHeader>
|
|
75
|
+
<CardContent>
|
|
76
|
+
<Button variant="outline" onClick={() => openAgentSettings()}>
|
|
77
|
+
{t("settings.openAgentSettings")}
|
|
78
|
+
</Button>
|
|
79
|
+
</CardContent>
|
|
80
|
+
</Card>
|
|
81
|
+
|
|
82
|
+
<ChangelogSettingsCard markdown={changelog} />
|
|
83
|
+
</main>
|
|
84
|
+
);
|
|
85
|
+
}
|
|
@@ -66,6 +66,11 @@ el.dataset.selectedId = selectedItem?.id || "";
|
|
|
66
66
|
|
|
67
67
|
**Use configuration-driven rendering** — Extract visual decisions (colors, layouts, sizes) into JSON config files in `data/`. The agent can modify the config (Tier 1) instead of the component source (Tier 2).
|
|
68
68
|
|
|
69
|
+
**Keep localized copy in catalogs** — When editing visible UI copy, labels,
|
|
70
|
+
toasts, empty states, prompts, or formatting, read `internationalization` and
|
|
71
|
+
update `app/i18n/en-US.ts` plus existing locale catalogs instead of leaving new
|
|
72
|
+
inline strings in components.
|
|
73
|
+
|
|
69
74
|
## Don't
|
|
70
75
|
|
|
71
76
|
- Don't modify `.env` files or files containing secrets
|
|
@@ -80,3 +85,4 @@ el.dataset.selectedId = selectedItem?.id || "";
|
|
|
80
85
|
- **actions** — The agent can create or modify actions to add new capabilities
|
|
81
86
|
- **delegate-to-agent** — Self-modification requests come through the agent chat
|
|
82
87
|
- **real-time-sync** — Database writes trigger change events to update the UI
|
|
88
|
+
- **internationalization** — UI copy, language catalogs, locale switching, and RTL-safe edits
|
|
@@ -6,7 +6,11 @@ import {
|
|
|
6
6
|
} from "@/components/ui/popover";
|
|
7
7
|
import { IconPlus } from "@tabler/icons-react";
|
|
8
8
|
import { cn } from "@/lib/utils";
|
|
9
|
-
import {
|
|
9
|
+
import {
|
|
10
|
+
PromptComposer,
|
|
11
|
+
useSendToAgentChat,
|
|
12
|
+
useT,
|
|
13
|
+
} from "@agent-native/core/client";
|
|
10
14
|
|
|
11
15
|
type NewCompositionPopoverProps = {
|
|
12
16
|
isNew: boolean;
|
|
@@ -23,6 +27,7 @@ export function NewCompositionPopover({
|
|
|
23
27
|
const [isGenerating, setIsGenerating] = useState(false);
|
|
24
28
|
const [submitError, setSubmitError] = useState<string | null>(null);
|
|
25
29
|
const { send, codeRequiredDialog } = useSendToAgentChat();
|
|
30
|
+
const t = useT();
|
|
26
31
|
|
|
27
32
|
// Auto-save after the agent finishes generating a new composition
|
|
28
33
|
useEffect(() => {
|
|
@@ -58,7 +63,7 @@ export function NewCompositionPopover({
|
|
|
58
63
|
const message =
|
|
59
64
|
typeof detail?.message === "string"
|
|
60
65
|
? detail.message
|
|
61
|
-
: "
|
|
66
|
+
: t("newComposition.runFailed");
|
|
62
67
|
sessionStorage.setItem("videos:new-composition-error", message);
|
|
63
68
|
finish();
|
|
64
69
|
};
|
|
@@ -69,7 +74,7 @@ export function NewCompositionPopover({
|
|
|
69
74
|
window.removeEventListener("agentNative.chatRunning", handleChatRunning);
|
|
70
75
|
window.removeEventListener("agent-chat:run-error", handleRunError);
|
|
71
76
|
};
|
|
72
|
-
}, [isGenerating, onGeneratingChange]);
|
|
77
|
+
}, [isGenerating, onGeneratingChange, t]);
|
|
73
78
|
|
|
74
79
|
async function fileToDataUrl(file: File): Promise<string> {
|
|
75
80
|
return new Promise((resolve, reject) => {
|
|
@@ -105,7 +110,7 @@ export function NewCompositionPopover({
|
|
|
105
110
|
}
|
|
106
111
|
} catch (error) {
|
|
107
112
|
const message =
|
|
108
|
-
error instanceof Error ? error.message : "
|
|
113
|
+
error instanceof Error ? error.message : t("newComposition.readFailed");
|
|
109
114
|
setSubmitError(message);
|
|
110
115
|
setIsGenerating(false);
|
|
111
116
|
onGeneratingChange?.(false);
|
|
@@ -120,7 +125,7 @@ export function NewCompositionPopover({
|
|
|
120
125
|
newTab: true,
|
|
121
126
|
});
|
|
122
127
|
if (result === null) {
|
|
123
|
-
setSubmitError("
|
|
128
|
+
setSubmitError(t("newComposition.startFailed"));
|
|
124
129
|
setIsGenerating(false);
|
|
125
130
|
onGeneratingChange?.(false);
|
|
126
131
|
return;
|
|
@@ -152,7 +157,7 @@ export function NewCompositionPopover({
|
|
|
152
157
|
)}
|
|
153
158
|
>
|
|
154
159
|
<IconPlus size={14} />
|
|
155
|
-
|
|
160
|
+
{t("newComposition.button")}
|
|
156
161
|
</button>
|
|
157
162
|
</PopoverTrigger>
|
|
158
163
|
<PopoverContent
|
|
@@ -163,16 +168,16 @@ export function NewCompositionPopover({
|
|
|
163
168
|
>
|
|
164
169
|
<div className="mb-2 px-1">
|
|
165
170
|
<h3 className="text-sm font-semibold text-foreground">
|
|
166
|
-
|
|
171
|
+
{t("newComposition.title")}
|
|
167
172
|
</h3>
|
|
168
173
|
<p className="mt-1 text-xs text-muted-foreground">
|
|
169
|
-
|
|
174
|
+
{t("newComposition.description")}
|
|
170
175
|
</p>
|
|
171
176
|
</div>
|
|
172
177
|
<PromptComposer
|
|
173
178
|
autoFocus
|
|
174
179
|
attachmentsEnabled
|
|
175
|
-
placeholder="
|
|
180
|
+
placeholder={t("newComposition.placeholder")}
|
|
176
181
|
draftScope="videos:new-composition"
|
|
177
182
|
onSubmit={handleSubmit}
|
|
178
183
|
/>
|
|
@@ -31,7 +31,11 @@ import { useTimeline } from "@/contexts/TimelineContext";
|
|
|
31
31
|
import { usePlayback } from "@/contexts/PlaybackContext";
|
|
32
32
|
import { useFolders } from "@/hooks/use-folders";
|
|
33
33
|
import { ExtensionsSidebarSection } from "@agent-native/core/client/extensions";
|
|
34
|
-
import {
|
|
34
|
+
import {
|
|
35
|
+
DevDatabaseLink,
|
|
36
|
+
FeedbackButton,
|
|
37
|
+
useT,
|
|
38
|
+
} from "@agent-native/core/client";
|
|
35
39
|
import { OrgSwitcher } from "@agent-native/core/client/org";
|
|
36
40
|
import {
|
|
37
41
|
Tooltip,
|
|
@@ -75,6 +79,7 @@ export function Sidebar({
|
|
|
75
79
|
} = useTimeline();
|
|
76
80
|
|
|
77
81
|
const { currentFrame, fps, onSeek } = usePlayback();
|
|
82
|
+
const t = useT();
|
|
78
83
|
|
|
79
84
|
const {
|
|
80
85
|
folders,
|
|
@@ -228,7 +233,7 @@ export function Sidebar({
|
|
|
228
233
|
const navItems = [
|
|
229
234
|
{
|
|
230
235
|
icon: IconVideo,
|
|
231
|
-
|
|
236
|
+
labelKey: "navigation.animations",
|
|
232
237
|
href: "/",
|
|
233
238
|
active:
|
|
234
239
|
!location.pathname.startsWith("/components") &&
|
|
@@ -237,19 +242,19 @@ export function Sidebar({
|
|
|
237
242
|
},
|
|
238
243
|
{
|
|
239
244
|
icon: IconComponents,
|
|
240
|
-
|
|
245
|
+
labelKey: "navigation.components",
|
|
241
246
|
href: "/components",
|
|
242
247
|
active: location.pathname.startsWith("/components"),
|
|
243
248
|
},
|
|
244
249
|
{
|
|
245
250
|
icon: IconPalette,
|
|
246
|
-
|
|
251
|
+
labelKey: "navigation.designSystems",
|
|
247
252
|
href: "/design-systems",
|
|
248
253
|
active: location.pathname.startsWith("/design-systems"),
|
|
249
254
|
},
|
|
250
255
|
{
|
|
251
256
|
icon: IconUsers,
|
|
252
|
-
|
|
257
|
+
labelKey: "navigation.team",
|
|
253
258
|
href: "/team",
|
|
254
259
|
active: location.pathname === "/team",
|
|
255
260
|
},
|
|
@@ -268,7 +273,9 @@ export function Sidebar({
|
|
|
268
273
|
<div className="w-64 lg:w-72 h-full flex flex-col">
|
|
269
274
|
{/* App name */}
|
|
270
275
|
<div className="flex h-10 items-center px-3 border-b border-border shrink-0">
|
|
271
|
-
<span className="text-xs font-semibold tracking-tight">
|
|
276
|
+
<span className="text-xs font-semibold tracking-tight">
|
|
277
|
+
{t("navigation.brand")}
|
|
278
|
+
</span>
|
|
272
279
|
</div>
|
|
273
280
|
|
|
274
281
|
{/* Navigation */}
|
|
@@ -287,7 +294,7 @@ export function Sidebar({
|
|
|
287
294
|
)}
|
|
288
295
|
>
|
|
289
296
|
<Icon className="h-3.5 w-3.5 shrink-0" />
|
|
290
|
-
{item.
|
|
297
|
+
{t(item.labelKey)}
|
|
291
298
|
</Link>
|
|
292
299
|
);
|
|
293
300
|
})}
|
|
@@ -303,13 +310,13 @@ export function Sidebar({
|
|
|
303
310
|
value="compositions"
|
|
304
311
|
className="flex-1 px-3 py-1.5 text-xs font-medium rounded-md text-muted-foreground data-[state=active]:bg-secondary data-[state=active]:text-foreground data-[state=active]:shadow-none"
|
|
305
312
|
>
|
|
306
|
-
|
|
313
|
+
{t("studio.compositions")}
|
|
307
314
|
</TabsTrigger>
|
|
308
315
|
<TabsTrigger
|
|
309
316
|
value="properties"
|
|
310
317
|
className="flex-1 px-3 py-1.5 text-xs font-medium rounded-md text-muted-foreground data-[state=active]:bg-secondary data-[state=active]:text-foreground data-[state=active]:shadow-none"
|
|
311
318
|
>
|
|
312
|
-
|
|
319
|
+
{t("studio.properties")}
|
|
313
320
|
{selectedTrackId && (
|
|
314
321
|
<span className="ml-1 w-1.5 h-1.5 rounded-full bg-primary animate-pulse" />
|
|
315
322
|
)}
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
AgentToggleButton,
|
|
9
9
|
NotificationsBell,
|
|
10
10
|
ShareButton,
|
|
11
|
+
useT,
|
|
11
12
|
} from "@agent-native/core/client";
|
|
12
13
|
import { useDbStatus } from "@/hooks/use-db-status";
|
|
13
14
|
import { CloudUpgrade } from "@/components/CloudUpgrade";
|
|
@@ -33,13 +34,16 @@ export function StudioHeader({
|
|
|
33
34
|
}: StudioHeaderProps) {
|
|
34
35
|
const { isLocal } = useDbStatus();
|
|
35
36
|
const [shareOpen, setShareOpen] = useState(false);
|
|
37
|
+
const t = useT();
|
|
36
38
|
|
|
37
39
|
return (
|
|
38
40
|
<header className="flex items-center justify-between px-2 sm:px-4 h-12 border-b border-border bg-card/80 backdrop-blur-xl z-10 flex-shrink-0">
|
|
39
41
|
<div className="flex items-center gap-1.5 sm:gap-3 min-w-0">
|
|
40
42
|
<button
|
|
41
43
|
onClick={onToggleSidebar}
|
|
42
|
-
aria-label={
|
|
44
|
+
aria-label={
|
|
45
|
+
sidebarOpen ? t("studio.closeSidebar") : t("studio.openSidebar")
|
|
46
|
+
}
|
|
43
47
|
className="p-2 sm:p-1.5 rounded-md text-muted-foreground hover:text-foreground hover:bg-secondary cursor-pointer"
|
|
44
48
|
>
|
|
45
49
|
{sidebarOpen ? (
|
|
@@ -52,7 +56,7 @@ export function StudioHeader({
|
|
|
52
56
|
<div className="w-px h-5 bg-border hidden sm:block" />
|
|
53
57
|
|
|
54
58
|
<h1 className="text-sm font-semibold tracking-tight hidden sm:block">
|
|
55
|
-
|
|
59
|
+
{t("navigation.brand")}
|
|
56
60
|
</h1>
|
|
57
61
|
</div>
|
|
58
62
|
|
|
@@ -61,11 +65,11 @@ export function StudioHeader({
|
|
|
61
65
|
<Popover open={shareOpen} onOpenChange={setShareOpen}>
|
|
62
66
|
<PopoverTrigger asChild>
|
|
63
67
|
<button
|
|
64
|
-
aria-label="
|
|
68
|
+
aria-label={t("studio.share")}
|
|
65
69
|
className="p-2 sm:px-3 sm:py-1.5 text-xs font-medium rounded-md text-muted-foreground hover:text-foreground hover:bg-secondary/50 flex items-center gap-1.5 cursor-pointer"
|
|
66
70
|
>
|
|
67
71
|
<IconShare2 className="w-4 h-4 sm:w-3.5 sm:h-3.5" />
|
|
68
|
-
<span className="hidden sm:inline">
|
|
72
|
+
<span className="hidden sm:inline">{t("studio.share")}</span>
|
|
69
73
|
</button>
|
|
70
74
|
</PopoverTrigger>
|
|
71
75
|
<PopoverContent
|
|
@@ -74,8 +78,8 @@ export function StudioHeader({
|
|
|
74
78
|
className="w-auto p-0 border-none bg-transparent shadow-none"
|
|
75
79
|
>
|
|
76
80
|
<CloudUpgrade
|
|
77
|
-
title="
|
|
78
|
-
description="
|
|
81
|
+
title={t("studio.shareVideos")}
|
|
82
|
+
description={t("studio.shareVideosDescription")}
|
|
79
83
|
onClose={() => setShareOpen(false)}
|
|
80
84
|
/>
|
|
81
85
|
</PopoverContent>
|
|
@@ -88,12 +92,12 @@ export function StudioHeader({
|
|
|
88
92
|
/>
|
|
89
93
|
) : (
|
|
90
94
|
<button
|
|
91
|
-
aria-label="
|
|
95
|
+
aria-label={t("studio.share")}
|
|
92
96
|
disabled
|
|
93
97
|
className="p-2 sm:px-3 sm:py-1.5 text-xs font-medium rounded-md text-muted-foreground/50 flex items-center gap-1.5 cursor-not-allowed"
|
|
94
98
|
>
|
|
95
99
|
<IconShare2 className="w-4 h-4 sm:w-3.5 sm:h-3.5" />
|
|
96
|
-
<span className="hidden sm:inline">
|
|
100
|
+
<span className="hidden sm:inline">{t("studio.share")}</span>
|
|
97
101
|
</button>
|
|
98
102
|
)}
|
|
99
103
|
<NotificationsBell />
|