@agent-native/core 0.77.3 → 0.77.4
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/core/CHANGELOG.md +8 -0
- package/corpus/core/docs/content/locales/ar-SA/a2a-protocol.md +2 -2
- package/corpus/core/docs/content/locales/ar-SA/actions.md +6 -6
- package/corpus/core/docs/content/locales/ar-SA/agent-surfaces.md +5 -5
- package/corpus/core/docs/content/locales/ar-SA/agent-teams.md +4 -4
- package/corpus/core/docs/content/locales/ar-SA/agent-web-surfaces.md +2 -2
- package/corpus/core/docs/content/locales/ar-SA/authentication.md +4 -4
- package/corpus/core/docs/content/locales/ar-SA/automations.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/blueprint-installer.md +2 -2
- package/corpus/core/docs/content/locales/ar-SA/cli-adapters.md +1 -1
- package/corpus/core/docs/content/locales/ar-SA/code-agents-ui.md +2 -2
- package/corpus/core/docs/content/locales/ar-SA/components.md +14 -14
- package/corpus/core/docs/content/locales/ar-SA/context-awareness.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/creating-templates.md +12 -12
- package/corpus/core/docs/content/locales/ar-SA/cross-app-sso.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/database.md +7 -7
- package/corpus/core/docs/content/locales/ar-SA/deployment.md +4 -4
- package/corpus/core/docs/content/locales/ar-SA/dispatch.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/drop-in-agent.md +8 -8
- package/corpus/core/docs/content/locales/ar-SA/durable-resume.md +1 -1
- package/corpus/core/docs/content/locales/ar-SA/embedding-sdk.md +2 -2
- package/corpus/core/docs/content/locales/ar-SA/evals.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/extensions.md +2 -2
- package/corpus/core/docs/content/locales/ar-SA/external-agents.md +8 -8
- package/corpus/core/docs/content/locales/ar-SA/faq.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/file-uploads.md +4 -4
- package/corpus/core/docs/content/locales/ar-SA/frames.md +1 -1
- package/corpus/core/docs/content/locales/ar-SA/getting-started.md +13 -13
- package/corpus/core/docs/content/locales/ar-SA/harness-agents.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/human-approval.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/key-concepts.md +14 -14
- package/corpus/core/docs/content/locales/ar-SA/local-file-mode.md +5 -5
- package/corpus/core/docs/content/locales/ar-SA/mcp-apps.md +9 -9
- package/corpus/core/docs/content/locales/ar-SA/mcp-clients.md +9 -9
- package/corpus/core/docs/content/locales/ar-SA/mcp-protocol.md +5 -5
- package/corpus/core/docs/content/locales/ar-SA/messaging.md +5 -5
- package/corpus/core/docs/content/locales/ar-SA/migration-workbench.md +1 -1
- package/corpus/core/docs/content/locales/ar-SA/multi-app-workspace.md +1 -1
- package/corpus/core/docs/content/locales/ar-SA/multi-tenancy.md +2 -2
- package/corpus/core/docs/content/locales/ar-SA/native-chat-ui.md +4 -4
- package/corpus/core/docs/content/locales/ar-SA/notifications.md +5 -5
- package/corpus/core/docs/content/locales/ar-SA/observability.md +1 -1
- package/corpus/core/docs/content/locales/ar-SA/observational-memory.md +2 -2
- package/corpus/core/docs/content/locales/ar-SA/onboarding.md +8 -8
- package/corpus/core/docs/content/locales/ar-SA/plan-plugin.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/pr-visual-recap.md +11 -11
- package/corpus/core/docs/content/locales/ar-SA/processors.md +2 -2
- package/corpus/core/docs/content/locales/ar-SA/progress.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/pure-agent-apps.md +1 -1
- package/corpus/core/docs/content/locales/ar-SA/real-time-collaboration.md +6 -6
- package/corpus/core/docs/content/locales/ar-SA/recurring-jobs.md +5 -5
- package/corpus/core/docs/content/locales/ar-SA/routing.md +1 -1
- package/corpus/core/docs/content/locales/ar-SA/sandbox-adapters.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/security.md +10 -10
- package/corpus/core/docs/content/locales/ar-SA/server.md +9 -9
- package/corpus/core/docs/content/locales/ar-SA/sharing.md +7 -7
- package/corpus/core/docs/content/locales/ar-SA/skills-guide.md +16 -16
- package/corpus/core/docs/content/locales/ar-SA/template-analytics.md +10 -10
- package/corpus/core/docs/content/locales/ar-SA/template-assets.md +19 -19
- package/corpus/core/docs/content/locales/ar-SA/template-brain.md +11 -11
- package/corpus/core/docs/content/locales/ar-SA/template-calendar.md +9 -9
- package/corpus/core/docs/content/locales/ar-SA/template-chat.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/template-clips.md +13 -13
- package/corpus/core/docs/content/locales/ar-SA/template-content.md +15 -15
- package/corpus/core/docs/content/locales/ar-SA/template-design.md +7 -7
- package/corpus/core/docs/content/locales/ar-SA/template-dispatch.md +8 -8
- package/corpus/core/docs/content/locales/ar-SA/template-forms.md +9 -9
- package/corpus/core/docs/content/locales/ar-SA/template-mail.md +7 -7
- package/corpus/core/docs/content/locales/ar-SA/template-plan.md +3 -3
- package/corpus/core/docs/content/locales/ar-SA/template-slides.md +8 -8
- package/corpus/core/docs/content/locales/ar-SA/template-videos.md +5 -5
- package/corpus/core/docs/content/locales/ar-SA/tracking.md +6 -6
- package/corpus/core/docs/content/locales/ar-SA/using-your-agent.md +4 -4
- package/corpus/core/docs/content/locales/ar-SA/voice-input.md +4 -4
- package/corpus/core/docs/content/locales/ar-SA/what-is-agent-native.md +4 -4
- package/corpus/core/docs/content/locales/ar-SA/workspace-connections.md +8 -8
- package/corpus/core/docs/content/locales/ar-SA/workspace-management.md +4 -4
- package/corpus/core/docs/content/locales/ar-SA/workspace.md +24 -24
- package/corpus/core/docs/content/locales/ar-SA/writing-agent-instructions.md +18 -18
- package/corpus/core/docs/content/locales/de-DE/a2a-protocol.md +7 -7
- package/corpus/core/docs/content/locales/de-DE/actions.md +5 -5
- package/corpus/core/docs/content/locales/de-DE/agent-mentions.md +4 -4
- package/corpus/core/docs/content/locales/de-DE/agent-surfaces.md +22 -22
- package/corpus/core/docs/content/locales/de-DE/agent-teams.md +4 -4
- package/corpus/core/docs/content/locales/de-DE/agent-web-surfaces.md +4 -4
- package/corpus/core/docs/content/locales/de-DE/authentication.md +6 -6
- package/corpus/core/docs/content/locales/de-DE/automations.md +8 -8
- package/corpus/core/docs/content/locales/de-DE/blueprint-installer.md +2 -2
- package/corpus/core/docs/content/locales/de-DE/client.md +6 -6
- package/corpus/core/docs/content/locales/de-DE/cloneable-saas.md +2 -2
- package/corpus/core/docs/content/locales/de-DE/code-agents-ui.md +9 -9
- package/corpus/core/docs/content/locales/de-DE/components.md +15 -15
- package/corpus/core/docs/content/locales/de-DE/context-awareness.md +8 -8
- package/corpus/core/docs/content/locales/de-DE/creating-templates.md +13 -13
- package/corpus/core/docs/content/locales/de-DE/cross-app-sso.md +3 -3
- package/corpus/core/docs/content/locales/de-DE/database.md +5 -5
- package/corpus/core/docs/content/locales/de-DE/deployment.md +6 -6
- package/corpus/core/docs/content/locales/de-DE/dispatch.md +3 -3
- package/corpus/core/docs/content/locales/de-DE/drop-in-agent.md +14 -14
- package/corpus/core/docs/content/locales/de-DE/durable-resume.md +1 -1
- package/corpus/core/docs/content/locales/de-DE/embedding-sdk.md +2 -2
- package/corpus/core/docs/content/locales/de-DE/evals.md +2 -2
- package/corpus/core/docs/content/locales/de-DE/extensions.md +2 -2
- package/corpus/core/docs/content/locales/de-DE/external-agents.md +6 -6
- package/corpus/core/docs/content/locales/de-DE/faq.md +5 -5
- package/corpus/core/docs/content/locales/de-DE/file-uploads.md +4 -4
- package/corpus/core/docs/content/locales/de-DE/frames.md +2 -2
- package/corpus/core/docs/content/locales/de-DE/getting-started.md +16 -16
- package/corpus/core/docs/content/locales/de-DE/harness-agents.md +3 -3
- package/corpus/core/docs/content/locales/de-DE/human-approval.md +4 -4
- package/corpus/core/docs/content/locales/de-DE/key-concepts.md +14 -14
- package/corpus/core/docs/content/locales/de-DE/local-file-mode.md +8 -8
- package/corpus/core/docs/content/locales/de-DE/mcp-apps.md +4 -4
- package/corpus/core/docs/content/locales/de-DE/mcp-clients.md +7 -7
- package/corpus/core/docs/content/locales/de-DE/mcp-protocol.md +3 -3
- package/corpus/core/docs/content/locales/de-DE/messaging.md +5 -5
- package/corpus/core/docs/content/locales/de-DE/migration-workbench.md +1 -1
- package/corpus/core/docs/content/locales/de-DE/multi-app-workspace.md +2 -2
- package/corpus/core/docs/content/locales/de-DE/multi-tenancy.md +1 -1
- package/corpus/core/docs/content/locales/de-DE/native-chat-ui.md +8 -8
- package/corpus/core/docs/content/locales/de-DE/notifications.md +3 -3
- package/corpus/core/docs/content/locales/de-DE/observability.md +2 -2
- package/corpus/core/docs/content/locales/de-DE/observational-memory.md +2 -2
- package/corpus/core/docs/content/locales/de-DE/onboarding.md +8 -8
- package/corpus/core/docs/content/locales/de-DE/plan-plugin.md +3 -3
- package/corpus/core/docs/content/locales/de-DE/pr-visual-recap.md +11 -11
- package/corpus/core/docs/content/locales/de-DE/processors.md +1 -1
- package/corpus/core/docs/content/locales/de-DE/progress.md +2 -2
- package/corpus/core/docs/content/locales/de-DE/pure-agent-apps.md +1 -1
- package/corpus/core/docs/content/locales/de-DE/real-time-collaboration.md +8 -8
- package/corpus/core/docs/content/locales/de-DE/recurring-jobs.md +5 -5
- package/corpus/core/docs/content/locales/de-DE/routing.md +1 -1
- package/corpus/core/docs/content/locales/de-DE/sandbox-adapters.md +2 -2
- package/corpus/core/docs/content/locales/de-DE/security.md +10 -10
- package/corpus/core/docs/content/locales/de-DE/server.md +10 -10
- package/corpus/core/docs/content/locales/de-DE/sharing.md +6 -6
- package/corpus/core/docs/content/locales/de-DE/skills-guide.md +17 -17
- package/corpus/core/docs/content/locales/de-DE/template-analytics.md +10 -10
- package/corpus/core/docs/content/locales/de-DE/template-assets.md +21 -21
- package/corpus/core/docs/content/locales/de-DE/template-brain.md +11 -11
- package/corpus/core/docs/content/locales/de-DE/template-calendar.md +10 -10
- package/corpus/core/docs/content/locales/de-DE/template-chat.md +5 -5
- package/corpus/core/docs/content/locales/de-DE/template-clips.md +14 -14
- package/corpus/core/docs/content/locales/de-DE/template-content.md +14 -14
- package/corpus/core/docs/content/locales/de-DE/template-design.md +7 -7
- package/corpus/core/docs/content/locales/de-DE/template-dispatch.md +12 -12
- package/corpus/core/docs/content/locales/de-DE/template-forms.md +9 -9
- package/corpus/core/docs/content/locales/de-DE/template-mail.md +6 -6
- package/corpus/core/docs/content/locales/de-DE/template-plan.md +3 -3
- package/corpus/core/docs/content/locales/de-DE/template-slides.md +8 -8
- package/corpus/core/docs/content/locales/de-DE/template-videos.md +6 -6
- package/corpus/core/docs/content/locales/de-DE/tracking.md +3 -3
- package/corpus/core/docs/content/locales/de-DE/using-your-agent.md +6 -6
- package/corpus/core/docs/content/locales/de-DE/voice-input.md +9 -9
- package/corpus/core/docs/content/locales/de-DE/what-is-agent-native.md +6 -6
- package/corpus/core/docs/content/locales/de-DE/workspace-connections.md +9 -9
- package/corpus/core/docs/content/locales/de-DE/workspace-management.md +5 -5
- package/corpus/core/docs/content/locales/de-DE/workspace.md +23 -23
- package/corpus/core/docs/content/locales/de-DE/writing-agent-instructions.md +30 -30
- package/corpus/core/docs/content/locales/es-ES/a2a-protocol.md +7 -7
- package/corpus/core/docs/content/locales/es-ES/actions.md +2 -2
- package/corpus/core/docs/content/locales/es-ES/agent-mentions.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/agent-surfaces.md +7 -7
- package/corpus/core/docs/content/locales/es-ES/agent-teams.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/agent-web-surfaces.md +5 -5
- package/corpus/core/docs/content/locales/es-ES/authentication.md +6 -6
- package/corpus/core/docs/content/locales/es-ES/automations.md +8 -8
- package/corpus/core/docs/content/locales/es-ES/blueprint-installer.md +2 -2
- package/corpus/core/docs/content/locales/es-ES/client.md +1 -1
- package/corpus/core/docs/content/locales/es-ES/cloneable-saas.md +2 -2
- package/corpus/core/docs/content/locales/es-ES/code-agents-ui.md +4 -4
- package/corpus/core/docs/content/locales/es-ES/components.md +5 -5
- package/corpus/core/docs/content/locales/es-ES/context-awareness.md +8 -8
- package/corpus/core/docs/content/locales/es-ES/creating-templates.md +12 -12
- package/corpus/core/docs/content/locales/es-ES/cross-app-sso.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/database.md +5 -5
- package/corpus/core/docs/content/locales/es-ES/deployment.md +4 -4
- package/corpus/core/docs/content/locales/es-ES/dispatch.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/drop-in-agent.md +8 -8
- package/corpus/core/docs/content/locales/es-ES/durable-resume.md +1 -1
- package/corpus/core/docs/content/locales/es-ES/embedding-sdk.md +2 -2
- package/corpus/core/docs/content/locales/es-ES/evals.md +2 -2
- package/corpus/core/docs/content/locales/es-ES/extensions.md +2 -2
- package/corpus/core/docs/content/locales/es-ES/external-agents.md +5 -5
- package/corpus/core/docs/content/locales/es-ES/faq.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/file-uploads.md +4 -4
- package/corpus/core/docs/content/locales/es-ES/frames.md +1 -1
- package/corpus/core/docs/content/locales/es-ES/getting-started.md +13 -13
- package/corpus/core/docs/content/locales/es-ES/harness-agents.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/human-approval.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/key-concepts.md +14 -14
- package/corpus/core/docs/content/locales/es-ES/local-file-mode.md +6 -6
- package/corpus/core/docs/content/locales/es-ES/mcp-apps.md +4 -4
- package/corpus/core/docs/content/locales/es-ES/mcp-clients.md +8 -8
- package/corpus/core/docs/content/locales/es-ES/mcp-protocol.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/messaging.md +4 -4
- package/corpus/core/docs/content/locales/es-ES/migration-workbench.md +1 -1
- package/corpus/core/docs/content/locales/es-ES/multi-app-workspace.md +1 -1
- package/corpus/core/docs/content/locales/es-ES/multi-tenancy.md +1 -1
- package/corpus/core/docs/content/locales/es-ES/native-chat-ui.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/notifications.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/observability.md +2 -2
- package/corpus/core/docs/content/locales/es-ES/observational-memory.md +2 -2
- package/corpus/core/docs/content/locales/es-ES/onboarding.md +8 -8
- package/corpus/core/docs/content/locales/es-ES/plan-plugin.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/pr-visual-recap.md +11 -11
- package/corpus/core/docs/content/locales/es-ES/processors.md +1 -1
- package/corpus/core/docs/content/locales/es-ES/progress.md +2 -2
- package/corpus/core/docs/content/locales/es-ES/pure-agent-apps.md +1 -1
- package/corpus/core/docs/content/locales/es-ES/real-time-collaboration.md +6 -6
- package/corpus/core/docs/content/locales/es-ES/recurring-jobs.md +5 -5
- package/corpus/core/docs/content/locales/es-ES/routing.md +1 -1
- package/corpus/core/docs/content/locales/es-ES/sandbox-adapters.md +2 -2
- package/corpus/core/docs/content/locales/es-ES/security.md +8 -8
- package/corpus/core/docs/content/locales/es-ES/server.md +11 -11
- package/corpus/core/docs/content/locales/es-ES/sharing.md +6 -6
- package/corpus/core/docs/content/locales/es-ES/skills-guide.md +16 -16
- package/corpus/core/docs/content/locales/es-ES/template-analytics.md +10 -10
- package/corpus/core/docs/content/locales/es-ES/template-assets.md +19 -19
- package/corpus/core/docs/content/locales/es-ES/template-brain.md +11 -11
- package/corpus/core/docs/content/locales/es-ES/template-calendar.md +9 -9
- package/corpus/core/docs/content/locales/es-ES/template-chat.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/template-clips.md +14 -14
- package/corpus/core/docs/content/locales/es-ES/template-content.md +13 -13
- package/corpus/core/docs/content/locales/es-ES/template-design.md +7 -7
- package/corpus/core/docs/content/locales/es-ES/template-dispatch.md +8 -8
- package/corpus/core/docs/content/locales/es-ES/template-forms.md +9 -9
- package/corpus/core/docs/content/locales/es-ES/template-mail.md +6 -6
- package/corpus/core/docs/content/locales/es-ES/template-plan.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/template-slides.md +8 -8
- package/corpus/core/docs/content/locales/es-ES/template-videos.md +5 -5
- package/corpus/core/docs/content/locales/es-ES/tracking.md +3 -3
- package/corpus/core/docs/content/locales/es-ES/using-your-agent.md +5 -5
- package/corpus/core/docs/content/locales/es-ES/voice-input.md +4 -4
- package/corpus/core/docs/content/locales/es-ES/what-is-agent-native.md +6 -6
- package/corpus/core/docs/content/locales/es-ES/workspace-connections.md +8 -8
- package/corpus/core/docs/content/locales/es-ES/workspace-management.md +4 -4
- package/corpus/core/docs/content/locales/es-ES/workspace.md +23 -23
- package/corpus/core/docs/content/locales/es-ES/writing-agent-instructions.md +18 -18
- package/corpus/core/docs/content/locales/fr-FR/a2a-protocol.md +7 -7
- package/corpus/core/docs/content/locales/fr-FR/actions.md +2 -2
- package/corpus/core/docs/content/locales/fr-FR/agent-mentions.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/agent-surfaces.md +7 -7
- package/corpus/core/docs/content/locales/fr-FR/agent-teams.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/agent-web-surfaces.md +5 -5
- package/corpus/core/docs/content/locales/fr-FR/authentication.md +6 -6
- package/corpus/core/docs/content/locales/fr-FR/automations.md +8 -8
- package/corpus/core/docs/content/locales/fr-FR/blueprint-installer.md +2 -2
- package/corpus/core/docs/content/locales/fr-FR/client.md +1 -1
- package/corpus/core/docs/content/locales/fr-FR/cloneable-saas.md +2 -2
- package/corpus/core/docs/content/locales/fr-FR/code-agents-ui.md +4 -4
- package/corpus/core/docs/content/locales/fr-FR/components.md +5 -5
- package/corpus/core/docs/content/locales/fr-FR/context-awareness.md +8 -8
- package/corpus/core/docs/content/locales/fr-FR/creating-templates.md +12 -12
- package/corpus/core/docs/content/locales/fr-FR/cross-app-sso.md +4 -4
- package/corpus/core/docs/content/locales/fr-FR/database.md +5 -5
- package/corpus/core/docs/content/locales/fr-FR/deployment.md +5 -5
- package/corpus/core/docs/content/locales/fr-FR/dispatch.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/drop-in-agent.md +9 -9
- package/corpus/core/docs/content/locales/fr-FR/durable-resume.md +1 -1
- package/corpus/core/docs/content/locales/fr-FR/embedding-sdk.md +7 -7
- package/corpus/core/docs/content/locales/fr-FR/evals.md +2 -2
- package/corpus/core/docs/content/locales/fr-FR/extensions.md +2 -2
- package/corpus/core/docs/content/locales/fr-FR/external-agents.md +5 -5
- package/corpus/core/docs/content/locales/fr-FR/faq.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/file-uploads.md +5 -5
- package/corpus/core/docs/content/locales/fr-FR/frames.md +1 -1
- package/corpus/core/docs/content/locales/fr-FR/getting-started.md +13 -13
- package/corpus/core/docs/content/locales/fr-FR/harness-agents.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/human-approval.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/key-concepts.md +15 -15
- package/corpus/core/docs/content/locales/fr-FR/local-file-mode.md +5 -5
- package/corpus/core/docs/content/locales/fr-FR/mcp-apps.md +4 -4
- package/corpus/core/docs/content/locales/fr-FR/mcp-clients.md +8 -8
- package/corpus/core/docs/content/locales/fr-FR/mcp-protocol.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/messaging.md +4 -4
- package/corpus/core/docs/content/locales/fr-FR/migration-workbench.md +1 -1
- package/corpus/core/docs/content/locales/fr-FR/multi-app-workspace.md +1 -1
- package/corpus/core/docs/content/locales/fr-FR/multi-tenancy.md +1 -1
- package/corpus/core/docs/content/locales/fr-FR/native-chat-ui.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/notifications.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/observability.md +2 -2
- package/corpus/core/docs/content/locales/fr-FR/observational-memory.md +2 -2
- package/corpus/core/docs/content/locales/fr-FR/onboarding.md +8 -8
- package/corpus/core/docs/content/locales/fr-FR/plan-plugin.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/pr-visual-recap.md +11 -11
- package/corpus/core/docs/content/locales/fr-FR/processors.md +1 -1
- package/corpus/core/docs/content/locales/fr-FR/progress.md +2 -2
- package/corpus/core/docs/content/locales/fr-FR/pure-agent-apps.md +1 -1
- package/corpus/core/docs/content/locales/fr-FR/real-time-collaboration.md +8 -8
- package/corpus/core/docs/content/locales/fr-FR/recurring-jobs.md +5 -5
- package/corpus/core/docs/content/locales/fr-FR/routing.md +1 -1
- package/corpus/core/docs/content/locales/fr-FR/sandbox-adapters.md +2 -2
- package/corpus/core/docs/content/locales/fr-FR/security.md +8 -8
- package/corpus/core/docs/content/locales/fr-FR/server.md +10 -10
- package/corpus/core/docs/content/locales/fr-FR/sharing.md +6 -6
- package/corpus/core/docs/content/locales/fr-FR/skills-guide.md +16 -16
- package/corpus/core/docs/content/locales/fr-FR/template-analytics.md +10 -10
- package/corpus/core/docs/content/locales/fr-FR/template-assets.md +20 -20
- package/corpus/core/docs/content/locales/fr-FR/template-brain.md +11 -11
- package/corpus/core/docs/content/locales/fr-FR/template-calendar.md +9 -9
- package/corpus/core/docs/content/locales/fr-FR/template-chat.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/template-clips.md +15 -15
- package/corpus/core/docs/content/locales/fr-FR/template-content.md +13 -13
- package/corpus/core/docs/content/locales/fr-FR/template-design.md +8 -8
- package/corpus/core/docs/content/locales/fr-FR/template-dispatch.md +8 -8
- package/corpus/core/docs/content/locales/fr-FR/template-forms.md +10 -10
- package/corpus/core/docs/content/locales/fr-FR/template-mail.md +6 -6
- package/corpus/core/docs/content/locales/fr-FR/template-plan.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/template-slides.md +9 -9
- package/corpus/core/docs/content/locales/fr-FR/template-videos.md +5 -5
- package/corpus/core/docs/content/locales/fr-FR/tracking.md +3 -3
- package/corpus/core/docs/content/locales/fr-FR/using-your-agent.md +5 -5
- package/corpus/core/docs/content/locales/fr-FR/voice-input.md +4 -4
- package/corpus/core/docs/content/locales/fr-FR/what-is-agent-native.md +6 -6
- package/corpus/core/docs/content/locales/fr-FR/workspace-connections.md +8 -8
- package/corpus/core/docs/content/locales/fr-FR/workspace-management.md +5 -5
- package/corpus/core/docs/content/locales/fr-FR/workspace.md +23 -23
- package/corpus/core/docs/content/locales/fr-FR/writing-agent-instructions.md +18 -18
- package/corpus/core/docs/content/locales/hi-IN/a2a-protocol.md +7 -7
- package/corpus/core/docs/content/locales/hi-IN/actions.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/agent-mentions.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/agent-surfaces.md +7 -7
- package/corpus/core/docs/content/locales/hi-IN/agent-teams.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/agent-web-surfaces.md +5 -5
- package/corpus/core/docs/content/locales/hi-IN/authentication.md +6 -6
- package/corpus/core/docs/content/locales/hi-IN/automations.md +8 -8
- package/corpus/core/docs/content/locales/hi-IN/blueprint-installer.md +2 -2
- package/corpus/core/docs/content/locales/hi-IN/client.md +1 -1
- package/corpus/core/docs/content/locales/hi-IN/cloneable-saas.md +2 -2
- package/corpus/core/docs/content/locales/hi-IN/code-agents-ui.md +4 -4
- package/corpus/core/docs/content/locales/hi-IN/components.md +5 -5
- package/corpus/core/docs/content/locales/hi-IN/context-awareness.md +8 -8
- package/corpus/core/docs/content/locales/hi-IN/creating-templates.md +14 -14
- package/corpus/core/docs/content/locales/hi-IN/cross-app-sso.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/database.md +5 -5
- package/corpus/core/docs/content/locales/hi-IN/deployment.md +5 -5
- package/corpus/core/docs/content/locales/hi-IN/dispatch.md +4 -4
- package/corpus/core/docs/content/locales/hi-IN/drop-in-agent.md +8 -8
- package/corpus/core/docs/content/locales/hi-IN/durable-resume.md +1 -1
- package/corpus/core/docs/content/locales/hi-IN/embedding-sdk.md +2 -2
- package/corpus/core/docs/content/locales/hi-IN/evals.md +2 -2
- package/corpus/core/docs/content/locales/hi-IN/extensions.md +2 -2
- package/corpus/core/docs/content/locales/hi-IN/external-agents.md +5 -5
- package/corpus/core/docs/content/locales/hi-IN/faq.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/file-uploads.md +4 -4
- package/corpus/core/docs/content/locales/hi-IN/frames.md +1 -1
- package/corpus/core/docs/content/locales/hi-IN/getting-started.md +14 -14
- package/corpus/core/docs/content/locales/hi-IN/harness-agents.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/human-approval.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/key-concepts.md +14 -14
- package/corpus/core/docs/content/locales/hi-IN/local-file-mode.md +5 -5
- package/corpus/core/docs/content/locales/hi-IN/mcp-apps.md +4 -4
- package/corpus/core/docs/content/locales/hi-IN/mcp-clients.md +7 -7
- package/corpus/core/docs/content/locales/hi-IN/mcp-protocol.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/messaging.md +6 -6
- package/corpus/core/docs/content/locales/hi-IN/migration-workbench.md +1 -1
- package/corpus/core/docs/content/locales/hi-IN/multi-app-workspace.md +1 -1
- package/corpus/core/docs/content/locales/hi-IN/multi-tenancy.md +1 -1
- package/corpus/core/docs/content/locales/hi-IN/native-chat-ui.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/notifications.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/observability.md +2 -2
- package/corpus/core/docs/content/locales/hi-IN/observational-memory.md +2 -2
- package/corpus/core/docs/content/locales/hi-IN/onboarding.md +8 -8
- package/corpus/core/docs/content/locales/hi-IN/plan-plugin.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/pr-visual-recap.md +11 -11
- package/corpus/core/docs/content/locales/hi-IN/processors.md +1 -1
- package/corpus/core/docs/content/locales/hi-IN/progress.md +2 -2
- package/corpus/core/docs/content/locales/hi-IN/pure-agent-apps.md +1 -1
- package/corpus/core/docs/content/locales/hi-IN/real-time-collaboration.md +6 -6
- package/corpus/core/docs/content/locales/hi-IN/recurring-jobs.md +5 -5
- package/corpus/core/docs/content/locales/hi-IN/routing.md +1 -1
- package/corpus/core/docs/content/locales/hi-IN/sandbox-adapters.md +2 -2
- package/corpus/core/docs/content/locales/hi-IN/security.md +8 -8
- package/corpus/core/docs/content/locales/hi-IN/server.md +10 -10
- package/corpus/core/docs/content/locales/hi-IN/sharing.md +6 -6
- package/corpus/core/docs/content/locales/hi-IN/skills-guide.md +16 -16
- package/corpus/core/docs/content/locales/hi-IN/template-analytics.md +10 -10
- package/corpus/core/docs/content/locales/hi-IN/template-assets.md +19 -19
- package/corpus/core/docs/content/locales/hi-IN/template-brain.md +11 -11
- package/corpus/core/docs/content/locales/hi-IN/template-calendar.md +9 -9
- package/corpus/core/docs/content/locales/hi-IN/template-chat.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/template-clips.md +14 -14
- package/corpus/core/docs/content/locales/hi-IN/template-content.md +13 -13
- package/corpus/core/docs/content/locales/hi-IN/template-design.md +7 -7
- package/corpus/core/docs/content/locales/hi-IN/template-dispatch.md +9 -9
- package/corpus/core/docs/content/locales/hi-IN/template-forms.md +9 -9
- package/corpus/core/docs/content/locales/hi-IN/template-mail.md +6 -6
- package/corpus/core/docs/content/locales/hi-IN/template-plan.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/template-slides.md +8 -8
- package/corpus/core/docs/content/locales/hi-IN/template-videos.md +5 -5
- package/corpus/core/docs/content/locales/hi-IN/tracking.md +3 -3
- package/corpus/core/docs/content/locales/hi-IN/using-your-agent.md +1 -1
- package/corpus/core/docs/content/locales/hi-IN/voice-input.md +4 -4
- package/corpus/core/docs/content/locales/hi-IN/what-is-agent-native.md +4 -4
- package/corpus/core/docs/content/locales/hi-IN/workspace-connections.md +8 -8
- package/corpus/core/docs/content/locales/hi-IN/workspace-management.md +4 -4
- package/corpus/core/docs/content/locales/hi-IN/workspace.md +23 -23
- package/corpus/core/docs/content/locales/hi-IN/writing-agent-instructions.md +18 -18
- package/corpus/core/docs/content/locales/ja-JP/a2a-protocol.md +7 -7
- package/corpus/core/docs/content/locales/ja-JP/actions.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/agent-mentions.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/agent-surfaces.md +7 -7
- package/corpus/core/docs/content/locales/ja-JP/agent-teams.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/agent-web-surfaces.md +5 -5
- package/corpus/core/docs/content/locales/ja-JP/authentication.md +6 -6
- package/corpus/core/docs/content/locales/ja-JP/automations.md +8 -8
- package/corpus/core/docs/content/locales/ja-JP/blueprint-installer.md +2 -2
- package/corpus/core/docs/content/locales/ja-JP/client.md +1 -1
- package/corpus/core/docs/content/locales/ja-JP/cloneable-saas.md +2 -2
- package/corpus/core/docs/content/locales/ja-JP/code-agents-ui.md +4 -4
- package/corpus/core/docs/content/locales/ja-JP/components.md +5 -5
- package/corpus/core/docs/content/locales/ja-JP/context-awareness.md +8 -8
- package/corpus/core/docs/content/locales/ja-JP/creating-templates.md +12 -12
- package/corpus/core/docs/content/locales/ja-JP/cross-app-sso.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/database.md +7 -7
- package/corpus/core/docs/content/locales/ja-JP/deployment.md +4 -4
- package/corpus/core/docs/content/locales/ja-JP/dispatch.md +4 -4
- package/corpus/core/docs/content/locales/ja-JP/drop-in-agent.md +8 -8
- package/corpus/core/docs/content/locales/ja-JP/durable-resume.md +1 -1
- package/corpus/core/docs/content/locales/ja-JP/embedding-sdk.md +2 -2
- package/corpus/core/docs/content/locales/ja-JP/evals.md +2 -2
- package/corpus/core/docs/content/locales/ja-JP/extensions.md +2 -2
- package/corpus/core/docs/content/locales/ja-JP/external-agents.md +5 -5
- package/corpus/core/docs/content/locales/ja-JP/faq.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/file-uploads.md +4 -4
- package/corpus/core/docs/content/locales/ja-JP/frames.md +1 -1
- package/corpus/core/docs/content/locales/ja-JP/getting-started.md +13 -13
- package/corpus/core/docs/content/locales/ja-JP/harness-agents.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/human-approval.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/key-concepts.md +14 -14
- package/corpus/core/docs/content/locales/ja-JP/local-file-mode.md +5 -5
- package/corpus/core/docs/content/locales/ja-JP/mcp-apps.md +4 -4
- package/corpus/core/docs/content/locales/ja-JP/mcp-clients.md +8 -8
- package/corpus/core/docs/content/locales/ja-JP/mcp-protocol.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/messaging.md +6 -6
- package/corpus/core/docs/content/locales/ja-JP/migration-workbench.md +1 -1
- package/corpus/core/docs/content/locales/ja-JP/multi-app-workspace.md +1 -1
- package/corpus/core/docs/content/locales/ja-JP/multi-tenancy.md +1 -1
- package/corpus/core/docs/content/locales/ja-JP/native-chat-ui.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/notifications.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/observability.md +2 -2
- package/corpus/core/docs/content/locales/ja-JP/observational-memory.md +2 -2
- package/corpus/core/docs/content/locales/ja-JP/onboarding.md +8 -8
- package/corpus/core/docs/content/locales/ja-JP/plan-plugin.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/pr-visual-recap.md +11 -11
- package/corpus/core/docs/content/locales/ja-JP/processors.md +1 -1
- package/corpus/core/docs/content/locales/ja-JP/progress.md +2 -2
- package/corpus/core/docs/content/locales/ja-JP/pure-agent-apps.md +1 -1
- package/corpus/core/docs/content/locales/ja-JP/real-time-collaboration.md +6 -6
- package/corpus/core/docs/content/locales/ja-JP/recurring-jobs.md +5 -5
- package/corpus/core/docs/content/locales/ja-JP/routing.md +1 -1
- package/corpus/core/docs/content/locales/ja-JP/sandbox-adapters.md +2 -2
- package/corpus/core/docs/content/locales/ja-JP/security.md +8 -8
- package/corpus/core/docs/content/locales/ja-JP/server.md +10 -10
- package/corpus/core/docs/content/locales/ja-JP/sharing.md +6 -6
- package/corpus/core/docs/content/locales/ja-JP/skills-guide.md +16 -16
- package/corpus/core/docs/content/locales/ja-JP/template-analytics.md +10 -10
- package/corpus/core/docs/content/locales/ja-JP/template-assets.md +19 -19
- package/corpus/core/docs/content/locales/ja-JP/template-brain.md +11 -11
- package/corpus/core/docs/content/locales/ja-JP/template-calendar.md +9 -9
- package/corpus/core/docs/content/locales/ja-JP/template-chat.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/template-clips.md +14 -14
- package/corpus/core/docs/content/locales/ja-JP/template-content.md +13 -13
- package/corpus/core/docs/content/locales/ja-JP/template-design.md +7 -7
- package/corpus/core/docs/content/locales/ja-JP/template-dispatch.md +12 -12
- package/corpus/core/docs/content/locales/ja-JP/template-forms.md +9 -9
- package/corpus/core/docs/content/locales/ja-JP/template-mail.md +6 -6
- package/corpus/core/docs/content/locales/ja-JP/template-plan.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/template-slides.md +8 -8
- package/corpus/core/docs/content/locales/ja-JP/template-videos.md +5 -5
- package/corpus/core/docs/content/locales/ja-JP/tracking.md +3 -3
- package/corpus/core/docs/content/locales/ja-JP/using-your-agent.md +4 -4
- package/corpus/core/docs/content/locales/ja-JP/voice-input.md +4 -4
- package/corpus/core/docs/content/locales/ja-JP/what-is-agent-native.md +4 -4
- package/corpus/core/docs/content/locales/ja-JP/workspace-connections.md +8 -8
- package/corpus/core/docs/content/locales/ja-JP/workspace-management.md +5 -5
- package/corpus/core/docs/content/locales/ja-JP/workspace.md +23 -23
- package/corpus/core/docs/content/locales/ja-JP/writing-agent-instructions.md +18 -18
- package/corpus/core/docs/content/locales/ko-KR/a2a-protocol.md +7 -7
- package/corpus/core/docs/content/locales/ko-KR/actions.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/agent-mentions.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/agent-surfaces.md +15 -15
- package/corpus/core/docs/content/locales/ko-KR/agent-teams.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/agent-web-surfaces.md +5 -5
- package/corpus/core/docs/content/locales/ko-KR/authentication.md +13 -13
- package/corpus/core/docs/content/locales/ko-KR/automations.md +8 -8
- package/corpus/core/docs/content/locales/ko-KR/blueprint-installer.md +2 -2
- package/corpus/core/docs/content/locales/ko-KR/client.md +1 -1
- package/corpus/core/docs/content/locales/ko-KR/cloneable-saas.md +2 -2
- package/corpus/core/docs/content/locales/ko-KR/code-agents-ui.md +4 -4
- package/corpus/core/docs/content/locales/ko-KR/components.md +5 -5
- package/corpus/core/docs/content/locales/ko-KR/context-awareness.md +8 -8
- package/corpus/core/docs/content/locales/ko-KR/creating-templates.md +12 -12
- package/corpus/core/docs/content/locales/ko-KR/cross-app-sso.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/database.md +7 -7
- package/corpus/core/docs/content/locales/ko-KR/deployment.md +4 -4
- package/corpus/core/docs/content/locales/ko-KR/dispatch.md +4 -4
- package/corpus/core/docs/content/locales/ko-KR/drop-in-agent.md +8 -8
- package/corpus/core/docs/content/locales/ko-KR/durable-resume.md +1 -1
- package/corpus/core/docs/content/locales/ko-KR/embedding-sdk.md +2 -2
- package/corpus/core/docs/content/locales/ko-KR/evals.md +2 -2
- package/corpus/core/docs/content/locales/ko-KR/extensions.md +2 -2
- package/corpus/core/docs/content/locales/ko-KR/external-agents.md +5 -5
- package/corpus/core/docs/content/locales/ko-KR/faq.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/file-uploads.md +4 -4
- package/corpus/core/docs/content/locales/ko-KR/frames.md +1 -1
- package/corpus/core/docs/content/locales/ko-KR/getting-started.md +13 -13
- package/corpus/core/docs/content/locales/ko-KR/harness-agents.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/human-approval.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/key-concepts.md +14 -14
- package/corpus/core/docs/content/locales/ko-KR/local-file-mode.md +5 -5
- package/corpus/core/docs/content/locales/ko-KR/mcp-apps.md +4 -4
- package/corpus/core/docs/content/locales/ko-KR/mcp-clients.md +8 -8
- package/corpus/core/docs/content/locales/ko-KR/mcp-protocol.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/messaging.md +6 -6
- package/corpus/core/docs/content/locales/ko-KR/migration-workbench.md +1 -1
- package/corpus/core/docs/content/locales/ko-KR/multi-app-workspace.md +1 -1
- package/corpus/core/docs/content/locales/ko-KR/multi-tenancy.md +1 -1
- package/corpus/core/docs/content/locales/ko-KR/native-chat-ui.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/notifications.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/observability.md +2 -2
- package/corpus/core/docs/content/locales/ko-KR/observational-memory.md +2 -2
- package/corpus/core/docs/content/locales/ko-KR/onboarding.md +8 -8
- package/corpus/core/docs/content/locales/ko-KR/plan-plugin.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/pr-visual-recap.md +11 -11
- package/corpus/core/docs/content/locales/ko-KR/processors.md +1 -1
- package/corpus/core/docs/content/locales/ko-KR/progress.md +2 -2
- package/corpus/core/docs/content/locales/ko-KR/pure-agent-apps.md +1 -1
- package/corpus/core/docs/content/locales/ko-KR/real-time-collaboration.md +6 -6
- package/corpus/core/docs/content/locales/ko-KR/recurring-jobs.md +5 -5
- package/corpus/core/docs/content/locales/ko-KR/routing.md +1 -1
- package/corpus/core/docs/content/locales/ko-KR/sandbox-adapters.md +2 -2
- package/corpus/core/docs/content/locales/ko-KR/security.md +8 -8
- package/corpus/core/docs/content/locales/ko-KR/server.md +10 -10
- package/corpus/core/docs/content/locales/ko-KR/sharing.md +6 -6
- package/corpus/core/docs/content/locales/ko-KR/skills-guide.md +16 -16
- package/corpus/core/docs/content/locales/ko-KR/template-analytics.md +10 -10
- package/corpus/core/docs/content/locales/ko-KR/template-assets.md +19 -19
- package/corpus/core/docs/content/locales/ko-KR/template-brain.md +11 -11
- package/corpus/core/docs/content/locales/ko-KR/template-calendar.md +9 -9
- package/corpus/core/docs/content/locales/ko-KR/template-chat.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/template-clips.md +14 -14
- package/corpus/core/docs/content/locales/ko-KR/template-content.md +13 -13
- package/corpus/core/docs/content/locales/ko-KR/template-design.md +7 -7
- package/corpus/core/docs/content/locales/ko-KR/template-dispatch.md +11 -11
- package/corpus/core/docs/content/locales/ko-KR/template-forms.md +9 -9
- package/corpus/core/docs/content/locales/ko-KR/template-mail.md +6 -6
- package/corpus/core/docs/content/locales/ko-KR/template-plan.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/template-slides.md +8 -8
- package/corpus/core/docs/content/locales/ko-KR/template-videos.md +5 -5
- package/corpus/core/docs/content/locales/ko-KR/tracking.md +3 -3
- package/corpus/core/docs/content/locales/ko-KR/using-your-agent.md +5 -5
- package/corpus/core/docs/content/locales/ko-KR/voice-input.md +4 -4
- package/corpus/core/docs/content/locales/ko-KR/what-is-agent-native.md +6 -6
- package/corpus/core/docs/content/locales/ko-KR/workspace-connections.md +8 -8
- package/corpus/core/docs/content/locales/ko-KR/workspace-management.md +4 -4
- package/corpus/core/docs/content/locales/ko-KR/workspace.md +23 -23
- package/corpus/core/docs/content/locales/ko-KR/writing-agent-instructions.md +18 -18
- package/corpus/core/docs/content/locales/pt-BR/a2a-protocol.md +7 -7
- package/corpus/core/docs/content/locales/pt-BR/actions.md +2 -2
- package/corpus/core/docs/content/locales/pt-BR/agent-mentions.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/agent-surfaces.md +7 -7
- package/corpus/core/docs/content/locales/pt-BR/agent-teams.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/agent-web-surfaces.md +5 -5
- package/corpus/core/docs/content/locales/pt-BR/authentication.md +6 -6
- package/corpus/core/docs/content/locales/pt-BR/automations.md +8 -8
- package/corpus/core/docs/content/locales/pt-BR/blueprint-installer.md +2 -2
- package/corpus/core/docs/content/locales/pt-BR/client.md +2 -2
- package/corpus/core/docs/content/locales/pt-BR/cloneable-saas.md +2 -2
- package/corpus/core/docs/content/locales/pt-BR/code-agents-ui.md +4 -4
- package/corpus/core/docs/content/locales/pt-BR/components.md +5 -5
- package/corpus/core/docs/content/locales/pt-BR/context-awareness.md +8 -8
- package/corpus/core/docs/content/locales/pt-BR/creating-templates.md +12 -12
- package/corpus/core/docs/content/locales/pt-BR/cross-app-sso.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/database.md +5 -5
- package/corpus/core/docs/content/locales/pt-BR/deployment.md +5 -5
- package/corpus/core/docs/content/locales/pt-BR/dispatch.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/drop-in-agent.md +9 -9
- package/corpus/core/docs/content/locales/pt-BR/durable-resume.md +1 -1
- package/corpus/core/docs/content/locales/pt-BR/embedding-sdk.md +2 -2
- package/corpus/core/docs/content/locales/pt-BR/evals.md +2 -2
- package/corpus/core/docs/content/locales/pt-BR/extensions.md +2 -2
- package/corpus/core/docs/content/locales/pt-BR/external-agents.md +5 -5
- package/corpus/core/docs/content/locales/pt-BR/faq.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/file-uploads.md +4 -4
- package/corpus/core/docs/content/locales/pt-BR/frames.md +2 -2
- package/corpus/core/docs/content/locales/pt-BR/getting-started.md +13 -13
- package/corpus/core/docs/content/locales/pt-BR/harness-agents.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/human-approval.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/key-concepts.md +15 -15
- package/corpus/core/docs/content/locales/pt-BR/local-file-mode.md +5 -5
- package/corpus/core/docs/content/locales/pt-BR/mcp-apps.md +4 -4
- package/corpus/core/docs/content/locales/pt-BR/mcp-clients.md +8 -8
- package/corpus/core/docs/content/locales/pt-BR/mcp-protocol.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/messaging.md +4 -4
- package/corpus/core/docs/content/locales/pt-BR/migration-workbench.md +1 -1
- package/corpus/core/docs/content/locales/pt-BR/multi-app-workspace.md +1 -1
- package/corpus/core/docs/content/locales/pt-BR/multi-tenancy.md +1 -1
- package/corpus/core/docs/content/locales/pt-BR/native-chat-ui.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/notifications.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/observability.md +2 -2
- package/corpus/core/docs/content/locales/pt-BR/observational-memory.md +2 -2
- package/corpus/core/docs/content/locales/pt-BR/onboarding.md +8 -8
- package/corpus/core/docs/content/locales/pt-BR/plan-plugin.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/pr-visual-recap.md +11 -11
- package/corpus/core/docs/content/locales/pt-BR/processors.md +1 -1
- package/corpus/core/docs/content/locales/pt-BR/progress.md +2 -2
- package/corpus/core/docs/content/locales/pt-BR/pure-agent-apps.md +1 -1
- package/corpus/core/docs/content/locales/pt-BR/real-time-collaboration.md +6 -6
- package/corpus/core/docs/content/locales/pt-BR/recurring-jobs.md +5 -5
- package/corpus/core/docs/content/locales/pt-BR/routing.md +1 -1
- package/corpus/core/docs/content/locales/pt-BR/sandbox-adapters.md +2 -2
- package/corpus/core/docs/content/locales/pt-BR/security.md +9 -9
- package/corpus/core/docs/content/locales/pt-BR/server.md +10 -10
- package/corpus/core/docs/content/locales/pt-BR/sharing.md +6 -6
- package/corpus/core/docs/content/locales/pt-BR/skills-guide.md +16 -16
- package/corpus/core/docs/content/locales/pt-BR/template-analytics.md +10 -10
- package/corpus/core/docs/content/locales/pt-BR/template-assets.md +20 -20
- package/corpus/core/docs/content/locales/pt-BR/template-brain.md +11 -11
- package/corpus/core/docs/content/locales/pt-BR/template-calendar.md +9 -9
- package/corpus/core/docs/content/locales/pt-BR/template-chat.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/template-clips.md +15 -15
- package/corpus/core/docs/content/locales/pt-BR/template-content.md +13 -13
- package/corpus/core/docs/content/locales/pt-BR/template-design.md +8 -8
- package/corpus/core/docs/content/locales/pt-BR/template-dispatch.md +8 -8
- package/corpus/core/docs/content/locales/pt-BR/template-forms.md +10 -10
- package/corpus/core/docs/content/locales/pt-BR/template-mail.md +6 -6
- package/corpus/core/docs/content/locales/pt-BR/template-plan.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/template-slides.md +9 -9
- package/corpus/core/docs/content/locales/pt-BR/template-videos.md +5 -5
- package/corpus/core/docs/content/locales/pt-BR/tracking.md +3 -3
- package/corpus/core/docs/content/locales/pt-BR/using-your-agent.md +5 -5
- package/corpus/core/docs/content/locales/pt-BR/voice-input.md +4 -4
- package/corpus/core/docs/content/locales/pt-BR/what-is-agent-native.md +5 -5
- package/corpus/core/docs/content/locales/pt-BR/workspace-connections.md +8 -8
- package/corpus/core/docs/content/locales/pt-BR/workspace-management.md +4 -4
- package/corpus/core/docs/content/locales/pt-BR/workspace.md +23 -23
- package/corpus/core/docs/content/locales/pt-BR/writing-agent-instructions.md +18 -18
- package/corpus/core/docs/content/locales/zh-CN/a2a-protocol.md +7 -7
- package/corpus/core/docs/content/locales/zh-CN/actions.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/agent-mentions.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/agent-surfaces.md +7 -7
- package/corpus/core/docs/content/locales/zh-CN/agent-teams.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/agent-web-surfaces.md +5 -5
- package/corpus/core/docs/content/locales/zh-CN/authentication.md +13 -13
- package/corpus/core/docs/content/locales/zh-CN/automations.md +8 -8
- package/corpus/core/docs/content/locales/zh-CN/blueprint-installer.md +2 -2
- package/corpus/core/docs/content/locales/zh-CN/client.md +1 -1
- package/corpus/core/docs/content/locales/zh-CN/cloneable-saas.md +2 -2
- package/corpus/core/docs/content/locales/zh-CN/code-agents-ui.md +4 -4
- package/corpus/core/docs/content/locales/zh-CN/components.md +7 -7
- package/corpus/core/docs/content/locales/zh-CN/context-awareness.md +8 -8
- package/corpus/core/docs/content/locales/zh-CN/creating-templates.md +12 -12
- package/corpus/core/docs/content/locales/zh-CN/cross-app-sso.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/database.md +7 -7
- package/corpus/core/docs/content/locales/zh-CN/deployment.md +4 -4
- package/corpus/core/docs/content/locales/zh-CN/dispatch.md +4 -4
- package/corpus/core/docs/content/locales/zh-CN/drop-in-agent.md +8 -8
- package/corpus/core/docs/content/locales/zh-CN/durable-resume.md +1 -1
- package/corpus/core/docs/content/locales/zh-CN/embedding-sdk.md +2 -2
- package/corpus/core/docs/content/locales/zh-CN/evals.md +2 -2
- package/corpus/core/docs/content/locales/zh-CN/extensions.md +2 -2
- package/corpus/core/docs/content/locales/zh-CN/external-agents.md +5 -5
- package/corpus/core/docs/content/locales/zh-CN/faq.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/file-uploads.md +4 -4
- package/corpus/core/docs/content/locales/zh-CN/frames.md +2 -2
- package/corpus/core/docs/content/locales/zh-CN/getting-started.md +13 -13
- package/corpus/core/docs/content/locales/zh-CN/harness-agents.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/human-approval.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/key-concepts.md +14 -14
- package/corpus/core/docs/content/locales/zh-CN/local-file-mode.md +5 -5
- package/corpus/core/docs/content/locales/zh-CN/mcp-apps.md +4 -4
- package/corpus/core/docs/content/locales/zh-CN/mcp-clients.md +7 -7
- package/corpus/core/docs/content/locales/zh-CN/mcp-protocol.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/messaging.md +6 -6
- package/corpus/core/docs/content/locales/zh-CN/migration-workbench.md +1 -1
- package/corpus/core/docs/content/locales/zh-CN/multi-app-workspace.md +1 -1
- package/corpus/core/docs/content/locales/zh-CN/multi-tenancy.md +1 -1
- package/corpus/core/docs/content/locales/zh-CN/native-chat-ui.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/notifications.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/observability.md +2 -2
- package/corpus/core/docs/content/locales/zh-CN/observational-memory.md +2 -2
- package/corpus/core/docs/content/locales/zh-CN/onboarding.md +8 -8
- package/corpus/core/docs/content/locales/zh-CN/plan-plugin.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/pr-visual-recap.md +11 -11
- package/corpus/core/docs/content/locales/zh-CN/processors.md +1 -1
- package/corpus/core/docs/content/locales/zh-CN/progress.md +2 -2
- package/corpus/core/docs/content/locales/zh-CN/pure-agent-apps.md +1 -1
- package/corpus/core/docs/content/locales/zh-CN/real-time-collaboration.md +6 -6
- package/corpus/core/docs/content/locales/zh-CN/recurring-jobs.md +5 -5
- package/corpus/core/docs/content/locales/zh-CN/routing.md +1 -1
- package/corpus/core/docs/content/locales/zh-CN/sandbox-adapters.md +2 -2
- package/corpus/core/docs/content/locales/zh-CN/security.md +8 -8
- package/corpus/core/docs/content/locales/zh-CN/server.md +10 -10
- package/corpus/core/docs/content/locales/zh-CN/sharing.md +6 -6
- package/corpus/core/docs/content/locales/zh-CN/skills-guide.md +16 -16
- package/corpus/core/docs/content/locales/zh-CN/template-analytics.md +10 -10
- package/corpus/core/docs/content/locales/zh-CN/template-assets.md +20 -20
- package/corpus/core/docs/content/locales/zh-CN/template-brain.md +11 -11
- package/corpus/core/docs/content/locales/zh-CN/template-calendar.md +9 -9
- package/corpus/core/docs/content/locales/zh-CN/template-chat.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/template-clips.md +14 -14
- package/corpus/core/docs/content/locales/zh-CN/template-content.md +13 -13
- package/corpus/core/docs/content/locales/zh-CN/template-design.md +7 -7
- package/corpus/core/docs/content/locales/zh-CN/template-dispatch.md +11 -11
- package/corpus/core/docs/content/locales/zh-CN/template-forms.md +9 -9
- package/corpus/core/docs/content/locales/zh-CN/template-mail.md +6 -6
- package/corpus/core/docs/content/locales/zh-CN/template-plan.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/template-slides.md +8 -8
- package/corpus/core/docs/content/locales/zh-CN/template-videos.md +5 -5
- package/corpus/core/docs/content/locales/zh-CN/tracking.md +3 -3
- package/corpus/core/docs/content/locales/zh-CN/using-your-agent.md +5 -5
- package/corpus/core/docs/content/locales/zh-CN/voice-input.md +4 -4
- package/corpus/core/docs/content/locales/zh-CN/what-is-agent-native.md +5 -5
- package/corpus/core/docs/content/locales/zh-CN/workspace-connections.md +8 -8
- package/corpus/core/docs/content/locales/zh-CN/workspace-management.md +5 -5
- package/corpus/core/docs/content/locales/zh-CN/workspace.md +23 -23
- package/corpus/core/docs/content/locales/zh-CN/writing-agent-instructions.md +18 -18
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/client/i18n.tsx +13 -1
- package/corpus/core/src/templates/default/app/i18n/ar-SA.ts +275 -274
- package/corpus/core/src/templates/default/app/i18n/de-DE.ts +270 -260
- package/corpus/core/src/templates/default/app/i18n/es-ES.ts +282 -270
- package/corpus/core/src/templates/default/app/i18n/fr-FR.ts +275 -266
- package/corpus/core/src/templates/default/app/i18n/hi-IN.ts +274 -276
- package/corpus/core/src/templates/default/app/i18n/ja-JP.ts +280 -273
- package/corpus/core/src/templates/default/app/i18n/ko-KR.ts +274 -274
- package/corpus/core/src/templates/default/app/i18n/pt-BR.ts +273 -266
- package/corpus/core/src/templates/default/app/i18n/zh-CN.ts +273 -285
- package/corpus/templates/analytics/app/components/Markdown.tsx +36 -10
- package/corpus/templates/analytics/app/components/ProviderCorpusJobNotifier.tsx +41 -17
- package/corpus/templates/analytics/app/components/dashboard/CumulativeNetChart.tsx +3 -1
- package/corpus/templates/analytics/app/components/dashboard/DataTable.tsx +4 -2
- package/corpus/templates/analytics/app/components/dashboard/RecentActivity.tsx +13 -7
- package/corpus/templates/analytics/app/components/dashboard/RevenueChart.tsx +4 -1
- package/corpus/templates/analytics/app/components/dashboard/RevenueComparisonChart.tsx +3 -1
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +13 -50
- package/corpus/templates/analytics/app/components/dashboard/TimeSeriesChart.tsx +3 -1
- package/corpus/templates/analytics/app/i18n-data.ts +5172 -1
- package/corpus/templates/analytics/app/pages/Ask.tsx +7 -4
- package/corpus/templates/analytics/app/pages/DataDictionary.tsx +66 -59
- package/corpus/templates/analytics/app/pages/DataSources.tsx +131 -96
- package/corpus/templates/analytics/app/pages/NotFound.tsx +8 -3
- package/corpus/templates/analytics/app/pages/Placeholder.tsx +4 -3
- package/corpus/templates/analytics/app/pages/adhoc/BlankDashboard.tsx +8 -5
- package/corpus/templates/analytics/app/pages/adhoc/_shared/KpiChart.tsx +4 -2
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/EventCombobox.tsx +16 -6
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/EventPanel.tsx +6 -2
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/ExplorerChart.tsx +14 -5
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/FilterBuilder.tsx +6 -3
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/GroupByPicker.tsx +7 -3
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/PropertyCombobox.tsx +12 -6
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/PropertyValueCombobox.tsx +9 -5
- package/corpus/templates/analytics/app/pages/adhoc/explorer/components/SqlPreview.tsx +3 -1
- package/corpus/templates/analytics/app/pages/adhoc/explorer/index.tsx +25 -15
- package/corpus/templates/analytics/app/pages/adhoc/explorer/types.ts +32 -30
- package/corpus/templates/analytics/app/pages/adhoc/explorer/use-explorer-config.ts +10 -6
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/ChartCard.tsx +20 -10
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +50 -33
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/DashboardFilterBar.tsx +23 -14
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/PanelEditorDialog.tsx +61 -55
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/SqlChartCard.tsx +88 -106
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewSqlPopover.tsx +37 -49
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/ViewsMenu.tsx +23 -16
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +46 -40
- package/corpus/templates/analytics/app/pages/analyses/AnalysesList.tsx +11 -8
- package/corpus/templates/analytics/app/pages/analyses/AnalysisDetail.tsx +25 -21
- package/corpus/templates/analytics/app/pages/analyses/LegacyFusionAnalysis.tsx +175 -99
- package/corpus/templates/analytics/app/pages/overview/OverviewPage.tsx +30 -12
- package/corpus/templates/analytics/app/routes/$.tsx +2 -1
- package/corpus/templates/analytics/app/routes/analyses.$id.tsx +2 -1
- package/corpus/templates/analytics/app/routes/analyses._index.tsx +2 -1
- package/corpus/templates/analytics/app/routes/ask.tsx +2 -1
- package/corpus/templates/analytics/app/routes/catalog.tsx +38 -16
- package/corpus/templates/analytics/app/routes/chart.tsx +12 -3
- package/corpus/templates/analytics/app/routes/dashboards.$id.tsx +2 -1
- package/corpus/templates/analytics/app/routes/data-dictionary.tsx +2 -1
- package/corpus/templates/analytics/app/routes/data-sources.tsx +2 -1
- package/corpus/templates/analytics/app/routes/extensions.$id.tsx +3 -1
- package/corpus/templates/analytics/app/routes/extensions._index.tsx +3 -1
- package/corpus/templates/analytics/app/routes/overview.tsx +2 -1
- package/corpus/templates/analytics/app/routes/settings.tsx +2 -1
- package/corpus/templates/analytics/app/routes/team.tsx +2 -1
- package/corpus/templates/assets/app/components/library/CreateLibraryDialog.tsx +25 -15
- package/corpus/templates/assets/app/components/library/EditLibraryDialog.tsx +17 -10
- package/corpus/templates/assets/app/components/library/LibraryCard.tsx +20 -8
- package/corpus/templates/assets/app/i18n-data.ts +4065 -1
- package/corpus/templates/assets/app/routes/_index.tsx +15 -4
- package/corpus/templates/assets/app/routes/audit.tsx +79 -56
- package/corpus/templates/assets/app/routes/brand-kits.$id.tsx +565 -330
- package/corpus/templates/assets/app/routes/brand-kits.tsx +3 -1
- package/corpus/templates/assets/app/routes/extensions.$id.tsx +3 -1
- package/corpus/templates/assets/app/routes/extensions._index.tsx +3 -1
- package/corpus/templates/assets/app/routes/extensions.tsx +3 -1
- package/corpus/templates/assets/app/routes/library.tsx +107 -74
- package/corpus/templates/assets/app/routes/team.tsx +6 -3
- package/corpus/templates/brain/app/components/brain/CanonicalPreviewSheet.tsx +14 -10
- package/corpus/templates/brain/app/i18n-data.ts +5609 -1
- package/corpus/templates/brain/app/routes/extensions.$id.tsx +3 -1
- package/corpus/templates/brain/app/routes/extensions._index.tsx +3 -1
- package/corpus/templates/brain/app/routes/extensions.tsx +3 -1
- package/corpus/templates/brain/app/routes/knowledge.tsx +51 -38
- package/corpus/templates/brain/app/routes/review.tsx +259 -154
- package/corpus/templates/brain/app/routes/settings.tsx +114 -116
- package/corpus/templates/brain/app/routes/sources.tsx +421 -352
- package/corpus/templates/brain/app/routes/team.tsx +6 -2
- package/corpus/templates/calendar/app/components/CloudUpgrade.tsx +33 -51
- package/corpus/templates/calendar/app/components/ThemeToggle.tsx +3 -1
- package/corpus/templates/calendar/app/components/TimezoneCombobox.tsx +5 -3
- package/corpus/templates/calendar/app/components/booking/BookingConfirmation.tsx +27 -13
- package/corpus/templates/calendar/app/components/booking/BookingForm.tsx +25 -13
- package/corpus/templates/calendar/app/components/booking/TimeSlotPicker.tsx +4 -1
- package/corpus/templates/calendar/app/components/calendar/AddCalendarDialog.tsx +22 -16
- package/corpus/templates/calendar/app/components/calendar/ApolloPanel.tsx +14 -13
- package/corpus/templates/calendar/app/components/calendar/AttendeeAutocomplete.tsx +22 -11
- package/corpus/templates/calendar/app/components/calendar/CommandPalette.tsx +19 -16
- package/corpus/templates/calendar/app/components/calendar/CreateEventDialog.tsx +112 -72
- package/corpus/templates/calendar/app/components/calendar/DayView.tsx +3 -1
- package/corpus/templates/calendar/app/components/calendar/EventAttendeesSection.tsx +62 -24
- package/corpus/templates/calendar/app/components/calendar/EventDescription.tsx +4 -2
- package/corpus/templates/calendar/app/components/calendar/EventDetailPanel.tsx +17 -11
- package/corpus/templates/calendar/app/components/calendar/EventDetailPopover.tsx +167 -97
- package/corpus/templates/calendar/app/components/calendar/EventOptionControls.tsx +39 -25
- package/corpus/templates/calendar/app/components/calendar/FindTimePanel.tsx +28 -16
- package/corpus/templates/calendar/app/components/calendar/GoogleConnectBanner.tsx +90 -74
- package/corpus/templates/calendar/app/components/calendar/GoogleSetupWizard.tsx +42 -34
- package/corpus/templates/calendar/app/components/calendar/GoogleSyncButton.tsx +6 -6
- package/corpus/templates/calendar/app/components/calendar/GuestNotificationDialog.tsx +44 -37
- package/corpus/templates/calendar/app/components/calendar/IntegrationsSidebar.tsx +46 -52
- package/corpus/templates/calendar/app/components/calendar/KeyboardShortcutsHelp.tsx +31 -19
- package/corpus/templates/calendar/app/components/calendar/PeopleSearchDialog.tsx +13 -9
- package/corpus/templates/calendar/app/components/calendar/WeekView.tsx +6 -4
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +13 -7
- package/corpus/templates/calendar/app/components/layout/Sidebar.tsx +19 -18
- package/corpus/templates/calendar/app/i18n/ar-SA.ts +2 -56
- package/corpus/templates/calendar/app/i18n/de-DE.ts +2 -57
- package/corpus/templates/calendar/app/i18n/en-US.ts +2 -56
- package/corpus/templates/calendar/app/i18n/es-ES.ts +2 -57
- package/corpus/templates/calendar/app/i18n/fr-FR.ts +2 -57
- package/corpus/templates/calendar/app/i18n/hi-IN.ts +2 -56
- package/corpus/templates/calendar/app/i18n/ja-JP.ts +2 -57
- package/corpus/templates/calendar/app/i18n/ko-KR.ts +2 -56
- package/corpus/templates/calendar/app/i18n/pt-BR.ts +2 -56
- package/corpus/templates/calendar/app/i18n/zh-CN.ts +2 -56
- package/corpus/templates/calendar/app/i18n-data.ts +8680 -7
- package/corpus/templates/calendar/app/pages/AvailabilitySettings.tsx +66 -34
- package/corpus/templates/calendar/app/pages/BookingLinksPage.tsx +286 -186
- package/corpus/templates/calendar/app/pages/BookingPage.tsx +37 -21
- package/corpus/templates/calendar/app/pages/BookingsList.tsx +36 -25
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +66 -49
- package/corpus/templates/calendar/app/pages/ManageBookingPage.tsx +41 -29
- package/corpus/templates/calendar/app/pages/NotFound.tsx +4 -2
- package/corpus/templates/calendar/app/routes/_app.$.tsx +2 -1
- package/corpus/templates/calendar/app/routes/_app.booking-links.tsx +3 -1
- package/corpus/templates/calendar/app/routes/_app.settings.tsx +6 -3
- package/corpus/templates/calendar/app/routes/_app.team.tsx +8 -3
- package/corpus/templates/calendar/app/routes/booking-og-meta.ts +7 -4
- package/corpus/templates/calendar/app/routes/booking.manage.$token.tsx +2 -1
- package/corpus/templates/calendar/app/routes/event.tsx +14 -8
- package/corpus/templates/chat/app/i18n/ar-SA.ts +29 -23
- package/corpus/templates/chat/app/i18n/de-DE.ts +30 -22
- package/corpus/templates/chat/app/i18n/en-US.ts +7 -0
- package/corpus/templates/chat/app/i18n/es-ES.ts +30 -22
- package/corpus/templates/chat/app/i18n/fr-FR.ts +33 -25
- package/corpus/templates/chat/app/i18n/hi-IN.ts +30 -23
- package/corpus/templates/chat/app/i18n/ja-JP.ts +30 -23
- package/corpus/templates/chat/app/i18n/ko-KR.ts +30 -23
- package/corpus/templates/chat/app/i18n/pt-BR.ts +30 -22
- package/corpus/templates/chat/app/i18n/zh-CN.ts +29 -23
- package/corpus/templates/chat/app/routes/observability.tsx +2 -1
- package/corpus/templates/clips/app/components/capture-install-options.tsx +16 -11
- package/corpus/templates/clips/app/components/editable-recording-title.tsx +8 -7
- package/corpus/templates/clips/app/components/editor/chapters-editor.tsx +12 -9
- package/corpus/templates/clips/app/components/editor/editor-layout.tsx +15 -9
- package/corpus/templates/clips/app/components/editor/editor-toolbar.tsx +71 -57
- package/corpus/templates/clips/app/components/editor/split-button.tsx +6 -5
- package/corpus/templates/clips/app/components/editor/stitch-manager.tsx +21 -19
- package/corpus/templates/clips/app/components/editor/thumbnail-picker.tsx +39 -26
- package/corpus/templates/clips/app/components/editor/transcript-editor.tsx +10 -6
- package/corpus/templates/clips/app/components/library/bulk-action-toolbar.tsx +11 -7
- package/corpus/templates/clips/app/components/library/create-space-dialog.tsx +13 -9
- package/corpus/templates/clips/app/components/library/folder-tree.tsx +26 -24
- package/corpus/templates/clips/app/components/library/library-grid.tsx +118 -14
- package/corpus/templates/clips/app/components/library/library-layout.tsx +3 -1
- package/corpus/templates/clips/app/components/library/organization-switcher.tsx +24 -13
- package/corpus/templates/clips/app/components/library/recording-card.tsx +51 -34
- package/corpus/templates/clips/app/components/library/search-bar.tsx +14 -11
- package/corpus/templates/clips/app/components/meetings/auto-record-prompt.tsx +10 -6
- package/corpus/templates/clips/app/components/meetings/canvas-editor.tsx +8 -4
- package/corpus/templates/clips/app/components/meetings/meeting-card.tsx +32 -16
- package/corpus/templates/clips/app/components/meetings/quick-ask-sidebar.tsx +23 -23
- package/corpus/templates/clips/app/components/meetings/share-meeting-dialog.tsx +11 -7
- package/corpus/templates/clips/app/components/meetings/transcript-bubbles.tsx +8 -4
- package/corpus/templates/clips/app/components/player/access-password-prompt.tsx +6 -4
- package/corpus/templates/clips/app/components/player/comments-panel.tsx +22 -13
- package/corpus/templates/clips/app/components/player/delete-recording-menu.tsx +24 -79
- package/corpus/templates/clips/app/components/player/insights-panel.tsx +29 -15
- package/corpus/templates/clips/app/components/player/player-controls.tsx +3 -1
- package/corpus/templates/clips/app/components/player/settings-panel.tsx +44 -27
- package/corpus/templates/clips/app/components/player/share-dialog.tsx +38 -32
- package/corpus/templates/clips/app/components/player/sign-in-prompt-dialog.tsx +7 -5
- package/corpus/templates/clips/app/components/player/transcript-panel.tsx +46 -35
- package/corpus/templates/clips/app/components/player/video-player.tsx +11 -5
- package/corpus/templates/clips/app/components/recorder/camera-visualizer.tsx +20 -6
- package/corpus/templates/clips/app/components/recorder/countdown-overlay.tsx +6 -4
- package/corpus/templates/clips/app/components/recorder/microphone-visualizer.tsx +3 -1
- package/corpus/templates/clips/app/components/recorder/pre-record-panel.tsx +120 -156
- package/corpus/templates/clips/app/components/recorder/recording-toolbar.tsx +16 -8
- package/corpus/templates/clips/app/components/recorder/storage-setup-card.tsx +8 -8
- package/corpus/templates/clips/app/components/sharing/share-ui.tsx +33 -31
- package/corpus/templates/clips/app/components/sharing/slack-share-hint.tsx +15 -8
- package/corpus/templates/clips/app/components/workspace/branding-editor.tsx +35 -20
- package/corpus/templates/clips/app/components/workspace/engagement-chart.tsx +6 -4
- package/corpus/templates/clips/app/components/workspace/insights-hub.tsx +35 -22
- package/corpus/templates/clips/app/components/workspace/invite-dialog.tsx +27 -17
- package/corpus/templates/clips/app/components/workspace/members-list.tsx +30 -19
- package/corpus/templates/clips/app/components/workspace/notifications-list.tsx +37 -25
- package/corpus/templates/clips/app/components/workspace/top-creators-table.tsx +14 -5
- package/corpus/templates/clips/app/i18n/ar-SA.ts +1103 -1
- package/corpus/templates/clips/app/i18n/de-DE.ts +1133 -1
- package/corpus/templates/clips/app/i18n/en-US.ts +1096 -0
- package/corpus/templates/clips/app/i18n/es-ES.ts +1125 -0
- package/corpus/templates/clips/app/i18n/fr-FR.ts +1131 -5
- package/corpus/templates/clips/app/i18n/hi-IN.ts +1099 -1
- package/corpus/templates/clips/app/i18n/ja-JP.ts +1124 -2
- package/corpus/templates/clips/app/i18n/ko-KR.ts +1110 -1
- package/corpus/templates/clips/app/i18n/pt-BR.ts +1123 -1
- package/corpus/templates/clips/app/i18n/zh-CN.ts +1080 -2
- package/corpus/templates/clips/app/routes/_app.archive.tsx +12 -2
- package/corpus/templates/clips/app/routes/_app.dictate.tsx +71 -49
- package/corpus/templates/clips/app/routes/_app.insights._index.tsx +2 -1
- package/corpus/templates/clips/app/routes/_app.library.folder.$folderId.tsx +5 -2
- package/corpus/templates/clips/app/routes/_app.meetings.$meetingId.tsx +54 -38
- package/corpus/templates/clips/app/routes/_app.meetings._index.tsx +41 -30
- package/corpus/templates/clips/app/routes/_app.notifications.tsx +34 -19
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +16 -12
- package/corpus/templates/clips/app/routes/_app.settings.organization.tsx +25 -18
- package/corpus/templates/clips/app/routes/_app.spaces.$spaceId.folder.$folderId.tsx +5 -2
- package/corpus/templates/clips/app/routes/_app.spaces.$spaceId.tsx +8 -5
- package/corpus/templates/clips/app/routes/_app.spaces._index.tsx +8 -3
- package/corpus/templates/clips/app/routes/_app.trash.tsx +2 -1
- package/corpus/templates/clips/app/routes/download.tsx +39 -30
- package/corpus/templates/clips/app/routes/embed.$shareId.tsx +4 -3
- package/corpus/templates/clips/app/routes/invite.$token.tsx +41 -32
- package/corpus/templates/clips/app/routes/r.$recordingId.tsx +111 -106
- package/corpus/templates/clips/app/routes/record.tsx +101 -87
- package/corpus/templates/clips/app/routes/share.$shareId.tsx +78 -62
- package/corpus/templates/clips/app/routes/share.meeting.$meetingId.tsx +15 -12
- package/corpus/templates/content/app/components/ThemeToggle.tsx +3 -3
- package/corpus/templates/content/app/components/editor/BubbleToolbar.tsx +14 -12
- package/corpus/templates/content/app/components/editor/CommentsSidebar.tsx +19 -14
- package/corpus/templates/content/app/components/editor/DocumentBlockFields.tsx +16 -4
- package/corpus/templates/content/app/components/editor/DocumentDatabase.tsx +13670 -10
- package/corpus/templates/content/app/components/editor/DocumentEditor.tsx +15 -12
- package/corpus/templates/content/app/components/editor/DocumentProperties.tsx +219 -135
- package/corpus/templates/content/app/components/editor/DocumentToolbar.tsx +114 -81
- package/corpus/templates/content/app/components/editor/EmojiPicker.tsx +27 -9
- package/corpus/templates/content/app/components/editor/LinkHoverPreview.tsx +7 -5
- package/corpus/templates/content/app/components/editor/NotionConflictBanner.tsx +12 -6
- package/corpus/templates/content/app/components/editor/NotionSyncBar.tsx +54 -34
- package/corpus/templates/content/app/components/editor/SlashCommandMenu.tsx +111 -122
- package/corpus/templates/content/app/components/editor/TableHoverControls.tsx +27 -22
- package/corpus/templates/content/app/components/editor/VersionHistoryPanel.tsx +23 -19
- package/corpus/templates/content/app/components/editor/VisualEditor.tsx +6 -2
- package/corpus/templates/content/app/components/editor/database/DatabaseView.tsx +245 -238
- package/corpus/templates/content/app/components/editor/database/calculations.ts +1 -0
- package/corpus/templates/content/app/components/editor/database/filter-sort.ts +1 -0
- package/corpus/templates/content/app/components/editor/database/grouping.ts +1 -0
- package/corpus/templates/content/app/components/editor/database/navigation-state.ts +1 -0
- package/corpus/templates/content/app/components/editor/database/shared.tsx +1 -0
- package/corpus/templates/content/app/components/editor/database-sources/BuilderSourceReviewDialog.tsx +92 -53
- package/corpus/templates/content/app/components/editor/extensions/AudioBlock.tsx +86 -49
- package/corpus/templates/content/app/components/editor/extensions/CodeBlockNode.tsx +22 -12
- package/corpus/templates/content/app/components/editor/extensions/ImageBlock.tsx +138 -74
- package/corpus/templates/content/app/components/editor/extensions/LocalMdxComponentNode.tsx +16 -7
- package/corpus/templates/content/app/components/editor/extensions/VideoBlock.tsx +86 -49
- package/corpus/templates/content/app/components/editor/image-upload.ts +3 -3
- package/corpus/templates/content/app/components/editor/localComponentSlashItems.ts +2 -1
- package/corpus/templates/content/app/components/sidebar/DocumentSidebar.tsx +205 -484
- package/corpus/templates/content/app/components/sidebar/DocumentTreeItem.tsx +34 -110
- package/corpus/templates/content/app/components/sidebar/NotionButton.tsx +56 -43
- package/corpus/templates/content/app/i18n-data.ts +6977 -10
- package/corpus/templates/content/app/routes/_app.local-files.tsx +111 -85
- package/corpus/templates/content/app/routes/_app.page.$id.tsx +7 -7
- package/corpus/templates/content/app/routes/_app.settings.tsx +2 -1
- package/corpus/templates/content/app/routes/_app.team.tsx +2 -1
- package/corpus/templates/content/app/routes/_app.tsx +4 -6
- package/corpus/templates/content/app/routes/p.$id.tsx +9 -6
- package/corpus/templates/design/app/components/ThemeToggle.tsx +3 -1
- package/corpus/templates/design/app/components/design/DesignCanvas.tsx +6 -4
- package/corpus/templates/design/app/components/design/DesignToolbar.tsx +27 -22
- package/corpus/templates/design/app/components/design/DrawOverlay.tsx +4 -2
- package/corpus/templates/design/app/components/design/EditPanel.tsx +130 -100
- package/corpus/templates/design/app/components/design/PresentMode.tsx +3 -1
- package/corpus/templates/design/app/components/design/TweaksPanel.tsx +8 -6
- package/corpus/templates/design/app/components/design/VariantGrid.tsx +6 -4
- package/corpus/templates/design/app/components/design/VariantHandoffCard.tsx +8 -4
- package/corpus/templates/design/app/components/design/ViewportTabs.tsx +5 -3
- package/corpus/templates/design/app/components/design/ZoomControls.tsx +3 -1
- package/corpus/templates/design/app/components/editor/PromptDialog.tsx +31 -18
- package/corpus/templates/design/app/components/visual-editor/CanvasCommentPins.tsx +12 -8
- package/corpus/templates/design/app/components/visual-editor/DrawOverlay.tsx +14 -10
- package/corpus/templates/design/app/components/visual-editor/SaveStatusIndicator.tsx +4 -2
- package/corpus/templates/design/app/i18n-data.ts +6107 -332
- package/corpus/templates/design/app/pages/DesignEditor.tsx +106 -81
- package/corpus/templates/design/app/pages/DesignSystemSetup.tsx +110 -115
- package/corpus/templates/design/app/pages/DesignSystems.tsx +154 -83
- package/corpus/templates/design/app/pages/Index.tsx +69 -57
- package/corpus/templates/design/app/pages/NotFound.tsx +4 -2
- package/corpus/templates/design/app/pages/Present.tsx +1 -1
- package/corpus/templates/design/app/pages/Templates.tsx +18 -12
- package/corpus/templates/design/app/routes/$.tsx +2 -1
- package/corpus/templates/design/app/routes/design-systems.tsx +2 -1
- package/corpus/templates/design/app/routes/design-systems_.setup.tsx +2 -1
- package/corpus/templates/design/app/routes/design.$id.tsx +2 -1
- package/corpus/templates/design/app/routes/examples.tsx +3 -1
- package/corpus/templates/design/app/routes/extensions.$id.tsx +3 -1
- package/corpus/templates/design/app/routes/extensions._index.tsx +3 -1
- package/corpus/templates/design/app/routes/extensions.tsx +3 -1
- package/corpus/templates/design/app/routes/observability.tsx +3 -1
- package/corpus/templates/design/app/routes/present.$id.tsx +2 -1
- package/corpus/templates/design/app/routes/settings.tsx +2 -1
- package/corpus/templates/design/app/routes/team.tsx +3 -1
- package/corpus/templates/design/app/routes/templates.tsx +2 -1
- package/corpus/templates/dispatch/app/i18n-data.ts +1881 -1
- package/corpus/templates/dispatch/app/routes/chat.$threadId.tsx +10 -7
- package/corpus/templates/dispatch/app/routes/chat.tsx +9 -7
- package/corpus/templates/dispatch/app/routes/extensions.$id.tsx +2 -1
- package/corpus/templates/dispatch/app/routes/extensions._index.tsx +2 -1
- package/corpus/templates/dispatch/app/routes/integrations.tsx +327 -209
- package/corpus/templates/dispatch/app/routes/settings.tsx +3 -1
- package/corpus/templates/dispatch/app/routes/tools.$id.tsx +2 -1
- package/corpus/templates/dispatch/app/routes/tools._index.tsx +2 -1
- package/corpus/templates/forms/app/components/CloudUpgrade.tsx +38 -28
- package/corpus/templates/forms/app/components/ThemeToggle.tsx +3 -1
- package/corpus/templates/forms/app/components/builder/FieldPropertiesPanel.tsx +33 -29
- package/corpus/templates/forms/app/i18n/ar-SA.ts +279 -53
- package/corpus/templates/forms/app/i18n/de-DE.ts +287 -53
- package/corpus/templates/forms/app/i18n/en-US.ts +225 -0
- package/corpus/templates/forms/app/i18n/es-ES.ts +233 -1
- package/corpus/templates/forms/app/i18n/fr-FR.ts +290 -54
- package/corpus/templates/forms/app/i18n/hi-IN.ts +275 -55
- package/corpus/templates/forms/app/i18n/ja-JP.ts +278 -55
- package/corpus/templates/forms/app/i18n/ko-KR.ts +271 -55
- package/corpus/templates/forms/app/i18n/pt-BR.ts +286 -52
- package/corpus/templates/forms/app/i18n/zh-CN.ts +261 -56
- package/corpus/templates/forms/app/pages/FormBuilderPage.tsx +214 -148
- package/corpus/templates/forms/app/pages/FormFillPage.tsx +12 -7
- package/corpus/templates/forms/app/pages/ResponseInsightsPage.tsx +8 -4
- package/corpus/templates/forms/app/routes/_app.extensions.$id.tsx +3 -1
- package/corpus/templates/forms/app/routes/_app.extensions._index.tsx +3 -1
- package/corpus/templates/forms/app/routes/_app.forms.$id.tsx +2 -1
- package/corpus/templates/forms/app/routes/_app.forms.$id_.responses.tsx +2 -1
- package/corpus/templates/forms/app/routes/_app.forms._index.tsx +3 -4
- package/corpus/templates/forms/app/routes/_app.response-insights.tsx +3 -2
- package/corpus/templates/forms/app/routes/_app.settings.tsx +2 -1
- package/corpus/templates/forms/app/routes/_index.tsx +3 -4
- package/corpus/templates/forms/app/routes/form-preview.tsx +25 -26
- package/corpus/templates/macros/app/components/AddExerciseDialog.tsx +18 -15
- package/corpus/templates/macros/app/components/AddMealDialog.tsx +22 -19
- package/corpus/templates/macros/app/components/AddWeightDialog.tsx +17 -16
- package/corpus/templates/macros/app/components/DailyProgress.tsx +24 -18
- package/corpus/templates/macros/app/components/ExerciseCard.tsx +5 -3
- package/corpus/templates/macros/app/components/MealCard.tsx +5 -3
- package/corpus/templates/macros/app/components/VoiceDictation.tsx +14 -13
- package/corpus/templates/macros/app/components/WeeklyCaloriesChart.tsx +37 -20
- package/corpus/templates/macros/app/components/WeightCard.tsx +16 -9
- package/corpus/templates/macros/app/components/WeightTracker.tsx +13 -6
- package/corpus/templates/macros/app/i18n/ar-SA.ts +154 -2
- package/corpus/templates/macros/app/i18n/de-DE.ts +158 -2
- package/corpus/templates/macros/app/i18n/en-US.ts +152 -0
- package/corpus/templates/macros/app/i18n/es-ES.ts +154 -0
- package/corpus/templates/macros/app/i18n/fr-FR.ts +157 -2
- package/corpus/templates/macros/app/i18n/hi-IN.ts +154 -3
- package/corpus/templates/macros/app/i18n/ja-JP.ts +153 -2
- package/corpus/templates/macros/app/i18n/ko-KR.ts +153 -2
- package/corpus/templates/macros/app/i18n/pt-BR.ts +155 -0
- package/corpus/templates/macros/app/i18n/zh-CN.ts +152 -2
- package/corpus/templates/macros/app/routes/_index.tsx +20 -16
- package/corpus/templates/macros/app/routes/analytics.tsx +3 -3
- package/corpus/templates/macros/app/routes/extensions.$id.tsx +3 -1
- package/corpus/templates/macros/app/routes/extensions._index.tsx +3 -1
- package/corpus/templates/macros/app/routes/settings.tsx +2 -1
- package/corpus/templates/macros/app/routes/team.tsx +6 -3
- package/corpus/templates/mail/app/components/GoogleConnectBanner.tsx +69 -62
- package/corpus/templates/mail/app/components/ThemeToggle.tsx +10 -3
- package/corpus/templates/mail/app/components/agent-engine-picker.tsx +6 -5
- package/corpus/templates/mail/app/components/email/CodeBlockLangPicker.tsx +1 -1
- package/corpus/templates/mail/app/components/email/ComposeModal.tsx +6 -8
- package/corpus/templates/mail/app/components/email/ComposeSlashMenu.tsx +45 -34
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +5 -3
- package/corpus/templates/mail/app/components/email/InlineReplyComposer.tsx +4 -6
- package/corpus/templates/mail/app/components/email/IntegrationsSidebar.tsx +16 -10
- package/corpus/templates/mail/app/components/email/MobileActionBar.tsx +28 -20
- package/corpus/templates/mail/app/components/email/SendLaterButton.tsx +12 -7
- package/corpus/templates/mail/app/components/email/SnoozeModal.tsx +9 -6
- package/corpus/templates/mail/app/components/email/SnoozePopover.tsx +9 -9
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +2 -2
- package/corpus/templates/mail/app/components/settings/GmailFiltersSection.tsx +40 -30
- package/corpus/templates/mail/app/i18n/ar-SA.ts +435 -134
- package/corpus/templates/mail/app/i18n/de-DE.ts +441 -131
- package/corpus/templates/mail/app/i18n/en-US.ts +300 -1
- package/corpus/templates/mail/app/i18n/es-ES.ts +443 -134
- package/corpus/templates/mail/app/i18n/fr-FR.ts +444 -134
- package/corpus/templates/mail/app/i18n/hi-IN.ts +441 -138
- package/corpus/templates/mail/app/i18n/ja-JP.ts +437 -134
- package/corpus/templates/mail/app/i18n/ko-KR.ts +437 -134
- package/corpus/templates/mail/app/i18n/pt-BR.ts +440 -133
- package/corpus/templates/mail/app/i18n/zh-CN.ts +361 -70
- package/corpus/templates/mail/app/pages/DraftQueuePage.tsx +66 -41
- package/corpus/templates/mail/app/pages/InboxPage.tsx +5 -1
- package/corpus/templates/mail/app/pages/SettingsPage.tsx +125 -108
- package/corpus/templates/mail/app/routes/$.tsx +2 -1
- package/corpus/templates/mail/app/routes/draft-queue.$id.tsx +2 -1
- package/corpus/templates/mail/app/routes/draft-queue.tsx +2 -1
- package/corpus/templates/mail/app/routes/email.tsx +10 -7
- package/corpus/templates/mail/app/routes/settings.tsx +2 -1
- package/corpus/templates/mail/app/routes/team.tsx +2 -1
- package/corpus/templates/plan/app/components/editor/PlanDocumentEditor.tsx +7 -4
- package/corpus/templates/plan/app/components/editor/planSlashCommands.ts +51 -26
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +2 -2
- package/corpus/templates/plan/app/components/plan/CanvasArea.tsx +7 -4
- package/corpus/templates/plan/app/components/plan/DocumentArea.tsx +19 -15
- package/corpus/templates/plan/app/components/plan/LocalCodebasePicker.tsx +34 -17
- package/corpus/templates/plan/app/components/plan/PlanContentRenderer.tsx +9 -5
- package/corpus/templates/plan/app/components/plan/PlanImageNode.tsx +9 -4
- package/corpus/templates/plan/app/components/plan/PlanImageViewer.tsx +47 -20
- package/corpus/templates/plan/app/components/plan/PlanMarkdownReader.tsx +4 -2
- package/corpus/templates/plan/app/components/plan/PlanTableOfContents.tsx +6 -1
- package/corpus/templates/plan/app/components/plan/PlanVisualSurface.tsx +10 -5
- package/corpus/templates/plan/app/components/plan/PrototypeViewer.tsx +3 -1
- package/corpus/templates/plan/app/components/plan/image-actions.ts +29 -7
- package/corpus/templates/plan/app/components/plan/planBlocks.tsx +16 -8
- package/corpus/templates/plan/app/components/plan/wireframe/LegacyRegionWireframe.tsx +27 -18
- package/corpus/templates/plan/app/components/plan/wireframe/Wireframe.tsx +3 -1
- package/corpus/templates/plan/app/components/plan/wireframe/wireframe-icons.ts +1 -0
- package/corpus/templates/plan/app/i18n/ar-SA.ts +663 -1
- package/corpus/templates/plan/app/i18n/de-DE.ts +670 -0
- package/corpus/templates/plan/app/i18n/en-US.ts +643 -0
- package/corpus/templates/plan/app/i18n/es-ES.ts +667 -0
- package/corpus/templates/plan/app/i18n/fr-FR.ts +672 -2
- package/corpus/templates/plan/app/i18n/hi-IN.ts +641 -1
- package/corpus/templates/plan/app/i18n/ja-JP.ts +633 -1
- package/corpus/templates/plan/app/i18n/ko-KR.ts +623 -1
- package/corpus/templates/plan/app/i18n/pt-BR.ts +671 -3
- package/corpus/templates/plan/app/i18n/zh-CN.ts +620 -1
- package/corpus/templates/plan/app/pages/PlansPage.tsx +697 -488
- package/corpus/templates/slides/app/components/CloudUpgrade.tsx +16 -13
- package/corpus/templates/slides/app/components/ThemeToggle.tsx +3 -1
- package/corpus/templates/slides/app/components/comments/SlideCommentsPanel.tsx +37 -25
- package/corpus/templates/slides/app/components/deck/DeckCard.tsx +3 -2
- package/corpus/templates/slides/app/components/deck/SlideRenderer.tsx +3 -1
- package/corpus/templates/slides/app/components/design-system/DesignSystemPreview.tsx +6 -4
- package/corpus/templates/slides/app/components/design-system/DesignSystemSetup.tsx +104 -73
- package/corpus/templates/slides/app/components/editor/AnimationsPanel.tsx +21 -17
- package/corpus/templates/slides/app/components/editor/AssetLibraryPanel.tsx +6 -3
- package/corpus/templates/slides/app/components/editor/BlockBubbleMenu.tsx +4 -2
- package/corpus/templates/slides/app/components/editor/CodeEditor.tsx +7 -4
- package/corpus/templates/slides/app/components/editor/EditorSidebar.tsx +26 -18
- package/corpus/templates/slides/app/components/editor/EditorToolbar.tsx +116 -91
- package/corpus/templates/slides/app/components/editor/ExportMenu.tsx +21 -21
- package/corpus/templates/slides/app/components/editor/GenerateSlidesDialog.tsx +16 -16
- package/corpus/templates/slides/app/components/editor/GeneratingOverlay.tsx +4 -2
- package/corpus/templates/slides/app/components/editor/GoogleDocImportHint.tsx +9 -5
- package/corpus/templates/slides/app/components/editor/HistoryPanel.tsx +44 -54
- package/corpus/templates/slides/app/components/editor/ImageDropPromptPopover.tsx +10 -11
- package/corpus/templates/slides/app/components/editor/ImageGenPanel.tsx +4 -2
- package/corpus/templates/slides/app/components/editor/ImageOverlay.tsx +3 -1
- package/corpus/templates/slides/app/components/editor/ImageSearchPanel.tsx +8 -5
- package/corpus/templates/slides/app/components/editor/ImportButton.tsx +3 -2
- package/corpus/templates/slides/app/components/editor/LogoSearchPanel.tsx +20 -10
- package/corpus/templates/slides/app/components/editor/MermaidToExcalidrawPanel.tsx +3 -1
- package/corpus/templates/slides/app/components/editor/PromptDialog.tsx +5 -4
- package/corpus/templates/slides/app/components/editor/ShareDialog.tsx +22 -21
- package/corpus/templates/slides/app/components/editor/SlideBubbleMenu.tsx +32 -21
- package/corpus/templates/slides/app/components/editor/SlideEditor.tsx +19 -34
- package/corpus/templates/slides/app/components/editor/SlideInlineEditor.tsx +9 -8
- package/corpus/templates/slides/app/components/editor/SlideSlashMenu.tsx +32 -27
- package/corpus/templates/slides/app/components/editor/SpeakerNotesPanel.tsx +7 -2
- package/corpus/templates/slides/app/components/layout/AgentWorkIndicator.tsx +6 -3
- package/corpus/templates/slides/app/components/presentation/PresentationView.tsx +11 -8
- package/corpus/templates/slides/app/components/visual-editor/CanvasCommentPins.tsx +6 -5
- package/corpus/templates/slides/app/components/visual-editor/DrawOverlay.tsx +8 -6
- package/corpus/templates/slides/app/components/visual-editor/MultiSelectChip.tsx +7 -3
- package/corpus/templates/slides/app/components/visual-editor/SaveStatusIndicator.tsx +4 -2
- package/corpus/templates/slides/app/i18n/ar-SA.ts +525 -3
- package/corpus/templates/slides/app/i18n/de-DE.ts +504 -4
- package/corpus/templates/slides/app/i18n/en-US.ts +490 -0
- package/corpus/templates/slides/app/i18n/es-ES.ts +514 -4
- package/corpus/templates/slides/app/i18n/fr-FR.ts +519 -5
- package/corpus/templates/slides/app/i18n/hi-IN.ts +489 -4
- package/corpus/templates/slides/app/i18n/ja-JP.ts +485 -3
- package/corpus/templates/slides/app/i18n/ko-KR.ts +481 -3
- package/corpus/templates/slides/app/i18n/pt-BR.ts +507 -2
- package/corpus/templates/slides/app/i18n/zh-CN.ts +475 -3
- package/corpus/templates/slides/app/pages/DeckEditor.tsx +25 -21
- package/corpus/templates/slides/app/pages/Index.tsx +47 -45
- package/corpus/templates/slides/app/pages/SharedPresentation.tsx +4 -3
- package/corpus/templates/slides/app/routes/$.tsx +2 -1
- package/corpus/templates/slides/app/routes/deck.$id.tsx +2 -1
- package/corpus/templates/slides/app/routes/design-systems.tsx +2 -1
- package/corpus/templates/slides/app/routes/settings.tsx +2 -1
- package/corpus/templates/slides/app/routes/share.$token.tsx +2 -1
- package/corpus/templates/slides/app/routes/slide.tsx +11 -5
- package/corpus/templates/slides/app/routes/team.tsx +6 -3
- package/corpus/templates/videos/app/components/CameraControls.tsx +11 -7
- package/corpus/templates/videos/app/components/CameraToolbar.tsx +13 -11
- package/corpus/templates/videos/app/components/CloudUpgrade.tsx +19 -16
- package/corpus/templates/videos/app/components/CompSettingsEditor.tsx +6 -1
- package/corpus/templates/videos/app/components/ComponentLibrarySidebar.tsx +29 -29
- package/corpus/templates/videos/app/components/ComponentPropsPanel.tsx +37 -17
- package/corpus/templates/videos/app/components/ComponentsSidebar.tsx +8 -3
- package/corpus/templates/videos/app/components/CompositionCard.tsx +11 -3
- package/corpus/templates/videos/app/components/CurrentElementPanel.tsx +45 -42
- package/corpus/templates/videos/app/components/CursorControls.tsx +37 -18
- package/corpus/templates/videos/app/components/CursorPositioningOverlay.tsx +3 -1
- package/corpus/templates/videos/app/components/LibraryFolderRow.tsx +8 -4
- package/corpus/templates/videos/app/components/MotionCurveSelect.tsx +9 -6
- package/corpus/templates/videos/app/components/PropsEditor.tsx +6 -2
- package/corpus/templates/videos/app/components/Sidebar.tsx +7 -7
- package/corpus/templates/videos/app/components/Timeline.tsx +8 -6
- package/corpus/templates/videos/app/components/TrackPropertiesPanel.tsx +50 -33
- package/corpus/templates/videos/app/components/TweaksPanel.tsx +18 -9
- package/corpus/templates/videos/app/components/VideoPlayer.tsx +9 -5
- package/corpus/templates/videos/app/components/design-system/DesignSystemPreview.tsx +14 -12
- package/corpus/templates/videos/app/components/design-system/DesignSystemSetup.tsx +31 -29
- package/corpus/templates/videos/app/components/keyframes/KeyframeActionButtons.tsx +11 -7
- package/corpus/templates/videos/app/i18n/ar-SA.ts +358 -1
- package/corpus/templates/videos/app/i18n/de-DE.ts +378 -0
- package/corpus/templates/videos/app/i18n/en-US.ts +362 -0
- package/corpus/templates/videos/app/i18n/es-ES.ts +377 -1
- package/corpus/templates/videos/app/i18n/fr-FR.ts +379 -2
- package/corpus/templates/videos/app/i18n/hi-IN.ts +359 -1
- package/corpus/templates/videos/app/i18n/ja-JP.ts +371 -1
- package/corpus/templates/videos/app/i18n/ko-KR.ts +364 -1
- package/corpus/templates/videos/app/i18n/pt-BR.ts +371 -1
- package/corpus/templates/videos/app/i18n/zh-CN.ts +351 -1
- package/corpus/templates/videos/app/pages/ComponentLibrary.tsx +6 -2
- package/corpus/templates/videos/app/pages/ComponentLibraryView.tsx +45 -24
- package/corpus/templates/videos/app/pages/CompositionView.tsx +61 -34
- package/corpus/templates/videos/app/routes/$.tsx +2 -1
- package/corpus/templates/videos/app/routes/c.$compositionId.tsx +2 -1
- package/corpus/templates/videos/app/routes/components.tsx +2 -1
- package/corpus/templates/videos/app/routes/design-systems.tsx +2 -1
- package/corpus/templates/videos/app/routes/settings.tsx +2 -1
- package/corpus/templates/videos/app/routes/team.tsx +2 -1
- package/dist/client/i18n.d.ts.map +1 -1
- package/dist/client/i18n.js +12 -1
- package/dist/client/i18n.js.map +1 -1
- package/dist/collab/routes.d.ts +2 -2
- package/dist/file-upload/actions/upload-image.d.ts +2 -2
- package/dist/observability/routes.d.ts +7 -7
- package/dist/progress/routes.d.ts +1 -1
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/server/agent-engine-api-key-route.d.ts +2 -2
- package/dist/templates/default/app/i18n/ar-SA.ts +275 -274
- package/dist/templates/default/app/i18n/de-DE.ts +270 -260
- package/dist/templates/default/app/i18n/es-ES.ts +282 -270
- package/dist/templates/default/app/i18n/fr-FR.ts +275 -266
- package/dist/templates/default/app/i18n/hi-IN.ts +274 -276
- package/dist/templates/default/app/i18n/ja-JP.ts +280 -273
- package/dist/templates/default/app/i18n/ko-KR.ts +274 -274
- package/dist/templates/default/app/i18n/pt-BR.ts +273 -266
- package/dist/templates/default/app/i18n/zh-CN.ts +273 -285
- package/docs/content/locales/ar-SA/a2a-protocol.md +2 -2
- package/docs/content/locales/ar-SA/actions.md +6 -6
- package/docs/content/locales/ar-SA/agent-surfaces.md +5 -5
- package/docs/content/locales/ar-SA/agent-teams.md +4 -4
- package/docs/content/locales/ar-SA/agent-web-surfaces.md +2 -2
- package/docs/content/locales/ar-SA/authentication.md +4 -4
- package/docs/content/locales/ar-SA/automations.md +3 -3
- package/docs/content/locales/ar-SA/blueprint-installer.md +2 -2
- package/docs/content/locales/ar-SA/cli-adapters.md +1 -1
- package/docs/content/locales/ar-SA/code-agents-ui.md +2 -2
- package/docs/content/locales/ar-SA/components.md +14 -14
- package/docs/content/locales/ar-SA/context-awareness.md +3 -3
- package/docs/content/locales/ar-SA/creating-templates.md +12 -12
- package/docs/content/locales/ar-SA/cross-app-sso.md +3 -3
- package/docs/content/locales/ar-SA/database.md +7 -7
- package/docs/content/locales/ar-SA/deployment.md +4 -4
- package/docs/content/locales/ar-SA/dispatch.md +3 -3
- package/docs/content/locales/ar-SA/drop-in-agent.md +8 -8
- package/docs/content/locales/ar-SA/durable-resume.md +1 -1
- package/docs/content/locales/ar-SA/embedding-sdk.md +2 -2
- package/docs/content/locales/ar-SA/evals.md +3 -3
- package/docs/content/locales/ar-SA/extensions.md +2 -2
- package/docs/content/locales/ar-SA/external-agents.md +8 -8
- package/docs/content/locales/ar-SA/faq.md +3 -3
- package/docs/content/locales/ar-SA/file-uploads.md +4 -4
- package/docs/content/locales/ar-SA/frames.md +1 -1
- package/docs/content/locales/ar-SA/getting-started.md +13 -13
- package/docs/content/locales/ar-SA/harness-agents.md +3 -3
- package/docs/content/locales/ar-SA/human-approval.md +3 -3
- package/docs/content/locales/ar-SA/key-concepts.md +14 -14
- package/docs/content/locales/ar-SA/local-file-mode.md +5 -5
- package/docs/content/locales/ar-SA/mcp-apps.md +9 -9
- package/docs/content/locales/ar-SA/mcp-clients.md +9 -9
- package/docs/content/locales/ar-SA/mcp-protocol.md +5 -5
- package/docs/content/locales/ar-SA/messaging.md +5 -5
- package/docs/content/locales/ar-SA/migration-workbench.md +1 -1
- package/docs/content/locales/ar-SA/multi-app-workspace.md +1 -1
- package/docs/content/locales/ar-SA/multi-tenancy.md +2 -2
- package/docs/content/locales/ar-SA/native-chat-ui.md +4 -4
- package/docs/content/locales/ar-SA/notifications.md +5 -5
- package/docs/content/locales/ar-SA/observability.md +1 -1
- package/docs/content/locales/ar-SA/observational-memory.md +2 -2
- package/docs/content/locales/ar-SA/onboarding.md +8 -8
- package/docs/content/locales/ar-SA/plan-plugin.md +3 -3
- package/docs/content/locales/ar-SA/pr-visual-recap.md +11 -11
- package/docs/content/locales/ar-SA/processors.md +2 -2
- package/docs/content/locales/ar-SA/progress.md +3 -3
- package/docs/content/locales/ar-SA/pure-agent-apps.md +1 -1
- package/docs/content/locales/ar-SA/real-time-collaboration.md +6 -6
- package/docs/content/locales/ar-SA/recurring-jobs.md +5 -5
- package/docs/content/locales/ar-SA/routing.md +1 -1
- package/docs/content/locales/ar-SA/sandbox-adapters.md +3 -3
- package/docs/content/locales/ar-SA/security.md +10 -10
- package/docs/content/locales/ar-SA/server.md +9 -9
- package/docs/content/locales/ar-SA/sharing.md +7 -7
- package/docs/content/locales/ar-SA/skills-guide.md +16 -16
- package/docs/content/locales/ar-SA/template-analytics.md +10 -10
- package/docs/content/locales/ar-SA/template-assets.md +19 -19
- package/docs/content/locales/ar-SA/template-brain.md +11 -11
- package/docs/content/locales/ar-SA/template-calendar.md +9 -9
- package/docs/content/locales/ar-SA/template-chat.md +3 -3
- package/docs/content/locales/ar-SA/template-clips.md +13 -13
- package/docs/content/locales/ar-SA/template-content.md +15 -15
- package/docs/content/locales/ar-SA/template-design.md +7 -7
- package/docs/content/locales/ar-SA/template-dispatch.md +8 -8
- package/docs/content/locales/ar-SA/template-forms.md +9 -9
- package/docs/content/locales/ar-SA/template-mail.md +7 -7
- package/docs/content/locales/ar-SA/template-plan.md +3 -3
- package/docs/content/locales/ar-SA/template-slides.md +8 -8
- package/docs/content/locales/ar-SA/template-videos.md +5 -5
- package/docs/content/locales/ar-SA/tracking.md +6 -6
- package/docs/content/locales/ar-SA/using-your-agent.md +4 -4
- package/docs/content/locales/ar-SA/voice-input.md +4 -4
- package/docs/content/locales/ar-SA/what-is-agent-native.md +4 -4
- package/docs/content/locales/ar-SA/workspace-connections.md +8 -8
- package/docs/content/locales/ar-SA/workspace-management.md +4 -4
- package/docs/content/locales/ar-SA/workspace.md +24 -24
- package/docs/content/locales/ar-SA/writing-agent-instructions.md +18 -18
- package/docs/content/locales/de-DE/a2a-protocol.md +7 -7
- package/docs/content/locales/de-DE/actions.md +5 -5
- package/docs/content/locales/de-DE/agent-mentions.md +4 -4
- package/docs/content/locales/de-DE/agent-surfaces.md +22 -22
- package/docs/content/locales/de-DE/agent-teams.md +4 -4
- package/docs/content/locales/de-DE/agent-web-surfaces.md +4 -4
- package/docs/content/locales/de-DE/authentication.md +6 -6
- package/docs/content/locales/de-DE/automations.md +8 -8
- package/docs/content/locales/de-DE/blueprint-installer.md +2 -2
- package/docs/content/locales/de-DE/client.md +6 -6
- package/docs/content/locales/de-DE/cloneable-saas.md +2 -2
- package/docs/content/locales/de-DE/code-agents-ui.md +9 -9
- package/docs/content/locales/de-DE/components.md +15 -15
- package/docs/content/locales/de-DE/context-awareness.md +8 -8
- package/docs/content/locales/de-DE/creating-templates.md +13 -13
- package/docs/content/locales/de-DE/cross-app-sso.md +3 -3
- package/docs/content/locales/de-DE/database.md +5 -5
- package/docs/content/locales/de-DE/deployment.md +6 -6
- package/docs/content/locales/de-DE/dispatch.md +3 -3
- package/docs/content/locales/de-DE/drop-in-agent.md +14 -14
- package/docs/content/locales/de-DE/durable-resume.md +1 -1
- package/docs/content/locales/de-DE/embedding-sdk.md +2 -2
- package/docs/content/locales/de-DE/evals.md +2 -2
- package/docs/content/locales/de-DE/extensions.md +2 -2
- package/docs/content/locales/de-DE/external-agents.md +6 -6
- package/docs/content/locales/de-DE/faq.md +5 -5
- package/docs/content/locales/de-DE/file-uploads.md +4 -4
- package/docs/content/locales/de-DE/frames.md +2 -2
- package/docs/content/locales/de-DE/getting-started.md +16 -16
- package/docs/content/locales/de-DE/harness-agents.md +3 -3
- package/docs/content/locales/de-DE/human-approval.md +4 -4
- package/docs/content/locales/de-DE/key-concepts.md +14 -14
- package/docs/content/locales/de-DE/local-file-mode.md +8 -8
- package/docs/content/locales/de-DE/mcp-apps.md +4 -4
- package/docs/content/locales/de-DE/mcp-clients.md +7 -7
- package/docs/content/locales/de-DE/mcp-protocol.md +3 -3
- package/docs/content/locales/de-DE/messaging.md +5 -5
- package/docs/content/locales/de-DE/migration-workbench.md +1 -1
- package/docs/content/locales/de-DE/multi-app-workspace.md +2 -2
- package/docs/content/locales/de-DE/multi-tenancy.md +1 -1
- package/docs/content/locales/de-DE/native-chat-ui.md +8 -8
- package/docs/content/locales/de-DE/notifications.md +3 -3
- package/docs/content/locales/de-DE/observability.md +2 -2
- package/docs/content/locales/de-DE/observational-memory.md +2 -2
- package/docs/content/locales/de-DE/onboarding.md +8 -8
- package/docs/content/locales/de-DE/plan-plugin.md +3 -3
- package/docs/content/locales/de-DE/pr-visual-recap.md +11 -11
- package/docs/content/locales/de-DE/processors.md +1 -1
- package/docs/content/locales/de-DE/progress.md +2 -2
- package/docs/content/locales/de-DE/pure-agent-apps.md +1 -1
- package/docs/content/locales/de-DE/real-time-collaboration.md +8 -8
- package/docs/content/locales/de-DE/recurring-jobs.md +5 -5
- package/docs/content/locales/de-DE/routing.md +1 -1
- package/docs/content/locales/de-DE/sandbox-adapters.md +2 -2
- package/docs/content/locales/de-DE/security.md +10 -10
- package/docs/content/locales/de-DE/server.md +10 -10
- package/docs/content/locales/de-DE/sharing.md +6 -6
- package/docs/content/locales/de-DE/skills-guide.md +17 -17
- package/docs/content/locales/de-DE/template-analytics.md +10 -10
- package/docs/content/locales/de-DE/template-assets.md +21 -21
- package/docs/content/locales/de-DE/template-brain.md +11 -11
- package/docs/content/locales/de-DE/template-calendar.md +10 -10
- package/docs/content/locales/de-DE/template-chat.md +5 -5
- package/docs/content/locales/de-DE/template-clips.md +14 -14
- package/docs/content/locales/de-DE/template-content.md +14 -14
- package/docs/content/locales/de-DE/template-design.md +7 -7
- package/docs/content/locales/de-DE/template-dispatch.md +12 -12
- package/docs/content/locales/de-DE/template-forms.md +9 -9
- package/docs/content/locales/de-DE/template-mail.md +6 -6
- package/docs/content/locales/de-DE/template-plan.md +3 -3
- package/docs/content/locales/de-DE/template-slides.md +8 -8
- package/docs/content/locales/de-DE/template-videos.md +6 -6
- package/docs/content/locales/de-DE/tracking.md +3 -3
- package/docs/content/locales/de-DE/using-your-agent.md +6 -6
- package/docs/content/locales/de-DE/voice-input.md +9 -9
- package/docs/content/locales/de-DE/what-is-agent-native.md +6 -6
- package/docs/content/locales/de-DE/workspace-connections.md +9 -9
- package/docs/content/locales/de-DE/workspace-management.md +5 -5
- package/docs/content/locales/de-DE/workspace.md +23 -23
- package/docs/content/locales/de-DE/writing-agent-instructions.md +30 -30
- package/docs/content/locales/es-ES/a2a-protocol.md +7 -7
- package/docs/content/locales/es-ES/actions.md +2 -2
- package/docs/content/locales/es-ES/agent-mentions.md +3 -3
- package/docs/content/locales/es-ES/agent-surfaces.md +7 -7
- package/docs/content/locales/es-ES/agent-teams.md +3 -3
- package/docs/content/locales/es-ES/agent-web-surfaces.md +5 -5
- package/docs/content/locales/es-ES/authentication.md +6 -6
- package/docs/content/locales/es-ES/automations.md +8 -8
- package/docs/content/locales/es-ES/blueprint-installer.md +2 -2
- package/docs/content/locales/es-ES/client.md +1 -1
- package/docs/content/locales/es-ES/cloneable-saas.md +2 -2
- package/docs/content/locales/es-ES/code-agents-ui.md +4 -4
- package/docs/content/locales/es-ES/components.md +5 -5
- package/docs/content/locales/es-ES/context-awareness.md +8 -8
- package/docs/content/locales/es-ES/creating-templates.md +12 -12
- package/docs/content/locales/es-ES/cross-app-sso.md +3 -3
- package/docs/content/locales/es-ES/database.md +5 -5
- package/docs/content/locales/es-ES/deployment.md +4 -4
- package/docs/content/locales/es-ES/dispatch.md +3 -3
- package/docs/content/locales/es-ES/drop-in-agent.md +8 -8
- package/docs/content/locales/es-ES/durable-resume.md +1 -1
- package/docs/content/locales/es-ES/embedding-sdk.md +2 -2
- package/docs/content/locales/es-ES/evals.md +2 -2
- package/docs/content/locales/es-ES/extensions.md +2 -2
- package/docs/content/locales/es-ES/external-agents.md +5 -5
- package/docs/content/locales/es-ES/faq.md +3 -3
- package/docs/content/locales/es-ES/file-uploads.md +4 -4
- package/docs/content/locales/es-ES/frames.md +1 -1
- package/docs/content/locales/es-ES/getting-started.md +13 -13
- package/docs/content/locales/es-ES/harness-agents.md +3 -3
- package/docs/content/locales/es-ES/human-approval.md +3 -3
- package/docs/content/locales/es-ES/key-concepts.md +14 -14
- package/docs/content/locales/es-ES/local-file-mode.md +6 -6
- package/docs/content/locales/es-ES/mcp-apps.md +4 -4
- package/docs/content/locales/es-ES/mcp-clients.md +8 -8
- package/docs/content/locales/es-ES/mcp-protocol.md +3 -3
- package/docs/content/locales/es-ES/messaging.md +4 -4
- package/docs/content/locales/es-ES/migration-workbench.md +1 -1
- package/docs/content/locales/es-ES/multi-app-workspace.md +1 -1
- package/docs/content/locales/es-ES/multi-tenancy.md +1 -1
- package/docs/content/locales/es-ES/native-chat-ui.md +3 -3
- package/docs/content/locales/es-ES/notifications.md +3 -3
- package/docs/content/locales/es-ES/observability.md +2 -2
- package/docs/content/locales/es-ES/observational-memory.md +2 -2
- package/docs/content/locales/es-ES/onboarding.md +8 -8
- package/docs/content/locales/es-ES/plan-plugin.md +3 -3
- package/docs/content/locales/es-ES/pr-visual-recap.md +11 -11
- package/docs/content/locales/es-ES/processors.md +1 -1
- package/docs/content/locales/es-ES/progress.md +2 -2
- package/docs/content/locales/es-ES/pure-agent-apps.md +1 -1
- package/docs/content/locales/es-ES/real-time-collaboration.md +6 -6
- package/docs/content/locales/es-ES/recurring-jobs.md +5 -5
- package/docs/content/locales/es-ES/routing.md +1 -1
- package/docs/content/locales/es-ES/sandbox-adapters.md +2 -2
- package/docs/content/locales/es-ES/security.md +8 -8
- package/docs/content/locales/es-ES/server.md +11 -11
- package/docs/content/locales/es-ES/sharing.md +6 -6
- package/docs/content/locales/es-ES/skills-guide.md +16 -16
- package/docs/content/locales/es-ES/template-analytics.md +10 -10
- package/docs/content/locales/es-ES/template-assets.md +19 -19
- package/docs/content/locales/es-ES/template-brain.md +11 -11
- package/docs/content/locales/es-ES/template-calendar.md +9 -9
- package/docs/content/locales/es-ES/template-chat.md +3 -3
- package/docs/content/locales/es-ES/template-clips.md +14 -14
- package/docs/content/locales/es-ES/template-content.md +13 -13
- package/docs/content/locales/es-ES/template-design.md +7 -7
- package/docs/content/locales/es-ES/template-dispatch.md +8 -8
- package/docs/content/locales/es-ES/template-forms.md +9 -9
- package/docs/content/locales/es-ES/template-mail.md +6 -6
- package/docs/content/locales/es-ES/template-plan.md +3 -3
- package/docs/content/locales/es-ES/template-slides.md +8 -8
- package/docs/content/locales/es-ES/template-videos.md +5 -5
- package/docs/content/locales/es-ES/tracking.md +3 -3
- package/docs/content/locales/es-ES/using-your-agent.md +5 -5
- package/docs/content/locales/es-ES/voice-input.md +4 -4
- package/docs/content/locales/es-ES/what-is-agent-native.md +6 -6
- package/docs/content/locales/es-ES/workspace-connections.md +8 -8
- package/docs/content/locales/es-ES/workspace-management.md +4 -4
- package/docs/content/locales/es-ES/workspace.md +23 -23
- package/docs/content/locales/es-ES/writing-agent-instructions.md +18 -18
- package/docs/content/locales/fr-FR/a2a-protocol.md +7 -7
- package/docs/content/locales/fr-FR/actions.md +2 -2
- package/docs/content/locales/fr-FR/agent-mentions.md +3 -3
- package/docs/content/locales/fr-FR/agent-surfaces.md +7 -7
- package/docs/content/locales/fr-FR/agent-teams.md +3 -3
- package/docs/content/locales/fr-FR/agent-web-surfaces.md +5 -5
- package/docs/content/locales/fr-FR/authentication.md +6 -6
- package/docs/content/locales/fr-FR/automations.md +8 -8
- package/docs/content/locales/fr-FR/blueprint-installer.md +2 -2
- package/docs/content/locales/fr-FR/client.md +1 -1
- package/docs/content/locales/fr-FR/cloneable-saas.md +2 -2
- package/docs/content/locales/fr-FR/code-agents-ui.md +4 -4
- package/docs/content/locales/fr-FR/components.md +5 -5
- package/docs/content/locales/fr-FR/context-awareness.md +8 -8
- package/docs/content/locales/fr-FR/creating-templates.md +12 -12
- package/docs/content/locales/fr-FR/cross-app-sso.md +4 -4
- package/docs/content/locales/fr-FR/database.md +5 -5
- package/docs/content/locales/fr-FR/deployment.md +5 -5
- package/docs/content/locales/fr-FR/dispatch.md +3 -3
- package/docs/content/locales/fr-FR/drop-in-agent.md +9 -9
- package/docs/content/locales/fr-FR/durable-resume.md +1 -1
- package/docs/content/locales/fr-FR/embedding-sdk.md +7 -7
- package/docs/content/locales/fr-FR/evals.md +2 -2
- package/docs/content/locales/fr-FR/extensions.md +2 -2
- package/docs/content/locales/fr-FR/external-agents.md +5 -5
- package/docs/content/locales/fr-FR/faq.md +3 -3
- package/docs/content/locales/fr-FR/file-uploads.md +5 -5
- package/docs/content/locales/fr-FR/frames.md +1 -1
- package/docs/content/locales/fr-FR/getting-started.md +13 -13
- package/docs/content/locales/fr-FR/harness-agents.md +3 -3
- package/docs/content/locales/fr-FR/human-approval.md +3 -3
- package/docs/content/locales/fr-FR/key-concepts.md +15 -15
- package/docs/content/locales/fr-FR/local-file-mode.md +5 -5
- package/docs/content/locales/fr-FR/mcp-apps.md +4 -4
- package/docs/content/locales/fr-FR/mcp-clients.md +8 -8
- package/docs/content/locales/fr-FR/mcp-protocol.md +3 -3
- package/docs/content/locales/fr-FR/messaging.md +4 -4
- package/docs/content/locales/fr-FR/migration-workbench.md +1 -1
- package/docs/content/locales/fr-FR/multi-app-workspace.md +1 -1
- package/docs/content/locales/fr-FR/multi-tenancy.md +1 -1
- package/docs/content/locales/fr-FR/native-chat-ui.md +3 -3
- package/docs/content/locales/fr-FR/notifications.md +3 -3
- package/docs/content/locales/fr-FR/observability.md +2 -2
- package/docs/content/locales/fr-FR/observational-memory.md +2 -2
- package/docs/content/locales/fr-FR/onboarding.md +8 -8
- package/docs/content/locales/fr-FR/plan-plugin.md +3 -3
- package/docs/content/locales/fr-FR/pr-visual-recap.md +11 -11
- package/docs/content/locales/fr-FR/processors.md +1 -1
- package/docs/content/locales/fr-FR/progress.md +2 -2
- package/docs/content/locales/fr-FR/pure-agent-apps.md +1 -1
- package/docs/content/locales/fr-FR/real-time-collaboration.md +8 -8
- package/docs/content/locales/fr-FR/recurring-jobs.md +5 -5
- package/docs/content/locales/fr-FR/routing.md +1 -1
- package/docs/content/locales/fr-FR/sandbox-adapters.md +2 -2
- package/docs/content/locales/fr-FR/security.md +8 -8
- package/docs/content/locales/fr-FR/server.md +10 -10
- package/docs/content/locales/fr-FR/sharing.md +6 -6
- package/docs/content/locales/fr-FR/skills-guide.md +16 -16
- package/docs/content/locales/fr-FR/template-analytics.md +10 -10
- package/docs/content/locales/fr-FR/template-assets.md +20 -20
- package/docs/content/locales/fr-FR/template-brain.md +11 -11
- package/docs/content/locales/fr-FR/template-calendar.md +9 -9
- package/docs/content/locales/fr-FR/template-chat.md +3 -3
- package/docs/content/locales/fr-FR/template-clips.md +15 -15
- package/docs/content/locales/fr-FR/template-content.md +13 -13
- package/docs/content/locales/fr-FR/template-design.md +8 -8
- package/docs/content/locales/fr-FR/template-dispatch.md +8 -8
- package/docs/content/locales/fr-FR/template-forms.md +10 -10
- package/docs/content/locales/fr-FR/template-mail.md +6 -6
- package/docs/content/locales/fr-FR/template-plan.md +3 -3
- package/docs/content/locales/fr-FR/template-slides.md +9 -9
- package/docs/content/locales/fr-FR/template-videos.md +5 -5
- package/docs/content/locales/fr-FR/tracking.md +3 -3
- package/docs/content/locales/fr-FR/using-your-agent.md +5 -5
- package/docs/content/locales/fr-FR/voice-input.md +4 -4
- package/docs/content/locales/fr-FR/what-is-agent-native.md +6 -6
- package/docs/content/locales/fr-FR/workspace-connections.md +8 -8
- package/docs/content/locales/fr-FR/workspace-management.md +5 -5
- package/docs/content/locales/fr-FR/workspace.md +23 -23
- package/docs/content/locales/fr-FR/writing-agent-instructions.md +18 -18
- package/docs/content/locales/hi-IN/a2a-protocol.md +7 -7
- package/docs/content/locales/hi-IN/actions.md +3 -3
- package/docs/content/locales/hi-IN/agent-mentions.md +3 -3
- package/docs/content/locales/hi-IN/agent-surfaces.md +7 -7
- package/docs/content/locales/hi-IN/agent-teams.md +3 -3
- package/docs/content/locales/hi-IN/agent-web-surfaces.md +5 -5
- package/docs/content/locales/hi-IN/authentication.md +6 -6
- package/docs/content/locales/hi-IN/automations.md +8 -8
- package/docs/content/locales/hi-IN/blueprint-installer.md +2 -2
- package/docs/content/locales/hi-IN/client.md +1 -1
- package/docs/content/locales/hi-IN/cloneable-saas.md +2 -2
- package/docs/content/locales/hi-IN/code-agents-ui.md +4 -4
- package/docs/content/locales/hi-IN/components.md +5 -5
- package/docs/content/locales/hi-IN/context-awareness.md +8 -8
- package/docs/content/locales/hi-IN/creating-templates.md +14 -14
- package/docs/content/locales/hi-IN/cross-app-sso.md +3 -3
- package/docs/content/locales/hi-IN/database.md +5 -5
- package/docs/content/locales/hi-IN/deployment.md +5 -5
- package/docs/content/locales/hi-IN/dispatch.md +4 -4
- package/docs/content/locales/hi-IN/drop-in-agent.md +8 -8
- package/docs/content/locales/hi-IN/durable-resume.md +1 -1
- package/docs/content/locales/hi-IN/embedding-sdk.md +2 -2
- package/docs/content/locales/hi-IN/evals.md +2 -2
- package/docs/content/locales/hi-IN/extensions.md +2 -2
- package/docs/content/locales/hi-IN/external-agents.md +5 -5
- package/docs/content/locales/hi-IN/faq.md +3 -3
- package/docs/content/locales/hi-IN/file-uploads.md +4 -4
- package/docs/content/locales/hi-IN/frames.md +1 -1
- package/docs/content/locales/hi-IN/getting-started.md +14 -14
- package/docs/content/locales/hi-IN/harness-agents.md +3 -3
- package/docs/content/locales/hi-IN/human-approval.md +3 -3
- package/docs/content/locales/hi-IN/key-concepts.md +14 -14
- package/docs/content/locales/hi-IN/local-file-mode.md +5 -5
- package/docs/content/locales/hi-IN/mcp-apps.md +4 -4
- package/docs/content/locales/hi-IN/mcp-clients.md +7 -7
- package/docs/content/locales/hi-IN/mcp-protocol.md +3 -3
- package/docs/content/locales/hi-IN/messaging.md +6 -6
- package/docs/content/locales/hi-IN/migration-workbench.md +1 -1
- package/docs/content/locales/hi-IN/multi-app-workspace.md +1 -1
- package/docs/content/locales/hi-IN/multi-tenancy.md +1 -1
- package/docs/content/locales/hi-IN/native-chat-ui.md +3 -3
- package/docs/content/locales/hi-IN/notifications.md +3 -3
- package/docs/content/locales/hi-IN/observability.md +2 -2
- package/docs/content/locales/hi-IN/observational-memory.md +2 -2
- package/docs/content/locales/hi-IN/onboarding.md +8 -8
- package/docs/content/locales/hi-IN/plan-plugin.md +3 -3
- package/docs/content/locales/hi-IN/pr-visual-recap.md +11 -11
- package/docs/content/locales/hi-IN/processors.md +1 -1
- package/docs/content/locales/hi-IN/progress.md +2 -2
- package/docs/content/locales/hi-IN/pure-agent-apps.md +1 -1
- package/docs/content/locales/hi-IN/real-time-collaboration.md +6 -6
- package/docs/content/locales/hi-IN/recurring-jobs.md +5 -5
- package/docs/content/locales/hi-IN/routing.md +1 -1
- package/docs/content/locales/hi-IN/sandbox-adapters.md +2 -2
- package/docs/content/locales/hi-IN/security.md +8 -8
- package/docs/content/locales/hi-IN/server.md +10 -10
- package/docs/content/locales/hi-IN/sharing.md +6 -6
- package/docs/content/locales/hi-IN/skills-guide.md +16 -16
- package/docs/content/locales/hi-IN/template-analytics.md +10 -10
- package/docs/content/locales/hi-IN/template-assets.md +19 -19
- package/docs/content/locales/hi-IN/template-brain.md +11 -11
- package/docs/content/locales/hi-IN/template-calendar.md +9 -9
- package/docs/content/locales/hi-IN/template-chat.md +3 -3
- package/docs/content/locales/hi-IN/template-clips.md +14 -14
- package/docs/content/locales/hi-IN/template-content.md +13 -13
- package/docs/content/locales/hi-IN/template-design.md +7 -7
- package/docs/content/locales/hi-IN/template-dispatch.md +9 -9
- package/docs/content/locales/hi-IN/template-forms.md +9 -9
- package/docs/content/locales/hi-IN/template-mail.md +6 -6
- package/docs/content/locales/hi-IN/template-plan.md +3 -3
- package/docs/content/locales/hi-IN/template-slides.md +8 -8
- package/docs/content/locales/hi-IN/template-videos.md +5 -5
- package/docs/content/locales/hi-IN/tracking.md +3 -3
- package/docs/content/locales/hi-IN/using-your-agent.md +1 -1
- package/docs/content/locales/hi-IN/voice-input.md +4 -4
- package/docs/content/locales/hi-IN/what-is-agent-native.md +4 -4
- package/docs/content/locales/hi-IN/workspace-connections.md +8 -8
- package/docs/content/locales/hi-IN/workspace-management.md +4 -4
- package/docs/content/locales/hi-IN/workspace.md +23 -23
- package/docs/content/locales/hi-IN/writing-agent-instructions.md +18 -18
- package/docs/content/locales/ja-JP/a2a-protocol.md +7 -7
- package/docs/content/locales/ja-JP/actions.md +3 -3
- package/docs/content/locales/ja-JP/agent-mentions.md +3 -3
- package/docs/content/locales/ja-JP/agent-surfaces.md +7 -7
- package/docs/content/locales/ja-JP/agent-teams.md +3 -3
- package/docs/content/locales/ja-JP/agent-web-surfaces.md +5 -5
- package/docs/content/locales/ja-JP/authentication.md +6 -6
- package/docs/content/locales/ja-JP/automations.md +8 -8
- package/docs/content/locales/ja-JP/blueprint-installer.md +2 -2
- package/docs/content/locales/ja-JP/client.md +1 -1
- package/docs/content/locales/ja-JP/cloneable-saas.md +2 -2
- package/docs/content/locales/ja-JP/code-agents-ui.md +4 -4
- package/docs/content/locales/ja-JP/components.md +5 -5
- package/docs/content/locales/ja-JP/context-awareness.md +8 -8
- package/docs/content/locales/ja-JP/creating-templates.md +12 -12
- package/docs/content/locales/ja-JP/cross-app-sso.md +3 -3
- package/docs/content/locales/ja-JP/database.md +7 -7
- package/docs/content/locales/ja-JP/deployment.md +4 -4
- package/docs/content/locales/ja-JP/dispatch.md +4 -4
- package/docs/content/locales/ja-JP/drop-in-agent.md +8 -8
- package/docs/content/locales/ja-JP/durable-resume.md +1 -1
- package/docs/content/locales/ja-JP/embedding-sdk.md +2 -2
- package/docs/content/locales/ja-JP/evals.md +2 -2
- package/docs/content/locales/ja-JP/extensions.md +2 -2
- package/docs/content/locales/ja-JP/external-agents.md +5 -5
- package/docs/content/locales/ja-JP/faq.md +3 -3
- package/docs/content/locales/ja-JP/file-uploads.md +4 -4
- package/docs/content/locales/ja-JP/frames.md +1 -1
- package/docs/content/locales/ja-JP/getting-started.md +13 -13
- package/docs/content/locales/ja-JP/harness-agents.md +3 -3
- package/docs/content/locales/ja-JP/human-approval.md +3 -3
- package/docs/content/locales/ja-JP/key-concepts.md +14 -14
- package/docs/content/locales/ja-JP/local-file-mode.md +5 -5
- package/docs/content/locales/ja-JP/mcp-apps.md +4 -4
- package/docs/content/locales/ja-JP/mcp-clients.md +8 -8
- package/docs/content/locales/ja-JP/mcp-protocol.md +3 -3
- package/docs/content/locales/ja-JP/messaging.md +6 -6
- package/docs/content/locales/ja-JP/migration-workbench.md +1 -1
- package/docs/content/locales/ja-JP/multi-app-workspace.md +1 -1
- package/docs/content/locales/ja-JP/multi-tenancy.md +1 -1
- package/docs/content/locales/ja-JP/native-chat-ui.md +3 -3
- package/docs/content/locales/ja-JP/notifications.md +3 -3
- package/docs/content/locales/ja-JP/observability.md +2 -2
- package/docs/content/locales/ja-JP/observational-memory.md +2 -2
- package/docs/content/locales/ja-JP/onboarding.md +8 -8
- package/docs/content/locales/ja-JP/plan-plugin.md +3 -3
- package/docs/content/locales/ja-JP/pr-visual-recap.md +11 -11
- package/docs/content/locales/ja-JP/processors.md +1 -1
- package/docs/content/locales/ja-JP/progress.md +2 -2
- package/docs/content/locales/ja-JP/pure-agent-apps.md +1 -1
- package/docs/content/locales/ja-JP/real-time-collaboration.md +6 -6
- package/docs/content/locales/ja-JP/recurring-jobs.md +5 -5
- package/docs/content/locales/ja-JP/routing.md +1 -1
- package/docs/content/locales/ja-JP/sandbox-adapters.md +2 -2
- package/docs/content/locales/ja-JP/security.md +8 -8
- package/docs/content/locales/ja-JP/server.md +10 -10
- package/docs/content/locales/ja-JP/sharing.md +6 -6
- package/docs/content/locales/ja-JP/skills-guide.md +16 -16
- package/docs/content/locales/ja-JP/template-analytics.md +10 -10
- package/docs/content/locales/ja-JP/template-assets.md +19 -19
- package/docs/content/locales/ja-JP/template-brain.md +11 -11
- package/docs/content/locales/ja-JP/template-calendar.md +9 -9
- package/docs/content/locales/ja-JP/template-chat.md +3 -3
- package/docs/content/locales/ja-JP/template-clips.md +14 -14
- package/docs/content/locales/ja-JP/template-content.md +13 -13
- package/docs/content/locales/ja-JP/template-design.md +7 -7
- package/docs/content/locales/ja-JP/template-dispatch.md +12 -12
- package/docs/content/locales/ja-JP/template-forms.md +9 -9
- package/docs/content/locales/ja-JP/template-mail.md +6 -6
- package/docs/content/locales/ja-JP/template-plan.md +3 -3
- package/docs/content/locales/ja-JP/template-slides.md +8 -8
- package/docs/content/locales/ja-JP/template-videos.md +5 -5
- package/docs/content/locales/ja-JP/tracking.md +3 -3
- package/docs/content/locales/ja-JP/using-your-agent.md +4 -4
- package/docs/content/locales/ja-JP/voice-input.md +4 -4
- package/docs/content/locales/ja-JP/what-is-agent-native.md +4 -4
- package/docs/content/locales/ja-JP/workspace-connections.md +8 -8
- package/docs/content/locales/ja-JP/workspace-management.md +5 -5
- package/docs/content/locales/ja-JP/workspace.md +23 -23
- package/docs/content/locales/ja-JP/writing-agent-instructions.md +18 -18
- package/docs/content/locales/ko-KR/a2a-protocol.md +7 -7
- package/docs/content/locales/ko-KR/actions.md +3 -3
- package/docs/content/locales/ko-KR/agent-mentions.md +3 -3
- package/docs/content/locales/ko-KR/agent-surfaces.md +15 -15
- package/docs/content/locales/ko-KR/agent-teams.md +3 -3
- package/docs/content/locales/ko-KR/agent-web-surfaces.md +5 -5
- package/docs/content/locales/ko-KR/authentication.md +13 -13
- package/docs/content/locales/ko-KR/automations.md +8 -8
- package/docs/content/locales/ko-KR/blueprint-installer.md +2 -2
- package/docs/content/locales/ko-KR/client.md +1 -1
- package/docs/content/locales/ko-KR/cloneable-saas.md +2 -2
- package/docs/content/locales/ko-KR/code-agents-ui.md +4 -4
- package/docs/content/locales/ko-KR/components.md +5 -5
- package/docs/content/locales/ko-KR/context-awareness.md +8 -8
- package/docs/content/locales/ko-KR/creating-templates.md +12 -12
- package/docs/content/locales/ko-KR/cross-app-sso.md +3 -3
- package/docs/content/locales/ko-KR/database.md +7 -7
- package/docs/content/locales/ko-KR/deployment.md +4 -4
- package/docs/content/locales/ko-KR/dispatch.md +4 -4
- package/docs/content/locales/ko-KR/drop-in-agent.md +8 -8
- package/docs/content/locales/ko-KR/durable-resume.md +1 -1
- package/docs/content/locales/ko-KR/embedding-sdk.md +2 -2
- package/docs/content/locales/ko-KR/evals.md +2 -2
- package/docs/content/locales/ko-KR/extensions.md +2 -2
- package/docs/content/locales/ko-KR/external-agents.md +5 -5
- package/docs/content/locales/ko-KR/faq.md +3 -3
- package/docs/content/locales/ko-KR/file-uploads.md +4 -4
- package/docs/content/locales/ko-KR/frames.md +1 -1
- package/docs/content/locales/ko-KR/getting-started.md +13 -13
- package/docs/content/locales/ko-KR/harness-agents.md +3 -3
- package/docs/content/locales/ko-KR/human-approval.md +3 -3
- package/docs/content/locales/ko-KR/key-concepts.md +14 -14
- package/docs/content/locales/ko-KR/local-file-mode.md +5 -5
- package/docs/content/locales/ko-KR/mcp-apps.md +4 -4
- package/docs/content/locales/ko-KR/mcp-clients.md +8 -8
- package/docs/content/locales/ko-KR/mcp-protocol.md +3 -3
- package/docs/content/locales/ko-KR/messaging.md +6 -6
- package/docs/content/locales/ko-KR/migration-workbench.md +1 -1
- package/docs/content/locales/ko-KR/multi-app-workspace.md +1 -1
- package/docs/content/locales/ko-KR/multi-tenancy.md +1 -1
- package/docs/content/locales/ko-KR/native-chat-ui.md +3 -3
- package/docs/content/locales/ko-KR/notifications.md +3 -3
- package/docs/content/locales/ko-KR/observability.md +2 -2
- package/docs/content/locales/ko-KR/observational-memory.md +2 -2
- package/docs/content/locales/ko-KR/onboarding.md +8 -8
- package/docs/content/locales/ko-KR/plan-plugin.md +3 -3
- package/docs/content/locales/ko-KR/pr-visual-recap.md +11 -11
- package/docs/content/locales/ko-KR/processors.md +1 -1
- package/docs/content/locales/ko-KR/progress.md +2 -2
- package/docs/content/locales/ko-KR/pure-agent-apps.md +1 -1
- package/docs/content/locales/ko-KR/real-time-collaboration.md +6 -6
- package/docs/content/locales/ko-KR/recurring-jobs.md +5 -5
- package/docs/content/locales/ko-KR/routing.md +1 -1
- package/docs/content/locales/ko-KR/sandbox-adapters.md +2 -2
- package/docs/content/locales/ko-KR/security.md +8 -8
- package/docs/content/locales/ko-KR/server.md +10 -10
- package/docs/content/locales/ko-KR/sharing.md +6 -6
- package/docs/content/locales/ko-KR/skills-guide.md +16 -16
- package/docs/content/locales/ko-KR/template-analytics.md +10 -10
- package/docs/content/locales/ko-KR/template-assets.md +19 -19
- package/docs/content/locales/ko-KR/template-brain.md +11 -11
- package/docs/content/locales/ko-KR/template-calendar.md +9 -9
- package/docs/content/locales/ko-KR/template-chat.md +3 -3
- package/docs/content/locales/ko-KR/template-clips.md +14 -14
- package/docs/content/locales/ko-KR/template-content.md +13 -13
- package/docs/content/locales/ko-KR/template-design.md +7 -7
- package/docs/content/locales/ko-KR/template-dispatch.md +11 -11
- package/docs/content/locales/ko-KR/template-forms.md +9 -9
- package/docs/content/locales/ko-KR/template-mail.md +6 -6
- package/docs/content/locales/ko-KR/template-plan.md +3 -3
- package/docs/content/locales/ko-KR/template-slides.md +8 -8
- package/docs/content/locales/ko-KR/template-videos.md +5 -5
- package/docs/content/locales/ko-KR/tracking.md +3 -3
- package/docs/content/locales/ko-KR/using-your-agent.md +5 -5
- package/docs/content/locales/ko-KR/voice-input.md +4 -4
- package/docs/content/locales/ko-KR/what-is-agent-native.md +6 -6
- package/docs/content/locales/ko-KR/workspace-connections.md +8 -8
- package/docs/content/locales/ko-KR/workspace-management.md +4 -4
- package/docs/content/locales/ko-KR/workspace.md +23 -23
- package/docs/content/locales/ko-KR/writing-agent-instructions.md +18 -18
- package/docs/content/locales/pt-BR/a2a-protocol.md +7 -7
- package/docs/content/locales/pt-BR/actions.md +2 -2
- package/docs/content/locales/pt-BR/agent-mentions.md +3 -3
- package/docs/content/locales/pt-BR/agent-surfaces.md +7 -7
- package/docs/content/locales/pt-BR/agent-teams.md +3 -3
- package/docs/content/locales/pt-BR/agent-web-surfaces.md +5 -5
- package/docs/content/locales/pt-BR/authentication.md +6 -6
- package/docs/content/locales/pt-BR/automations.md +8 -8
- package/docs/content/locales/pt-BR/blueprint-installer.md +2 -2
- package/docs/content/locales/pt-BR/client.md +2 -2
- package/docs/content/locales/pt-BR/cloneable-saas.md +2 -2
- package/docs/content/locales/pt-BR/code-agents-ui.md +4 -4
- package/docs/content/locales/pt-BR/components.md +5 -5
- package/docs/content/locales/pt-BR/context-awareness.md +8 -8
- package/docs/content/locales/pt-BR/creating-templates.md +12 -12
- package/docs/content/locales/pt-BR/cross-app-sso.md +3 -3
- package/docs/content/locales/pt-BR/database.md +5 -5
- package/docs/content/locales/pt-BR/deployment.md +5 -5
- package/docs/content/locales/pt-BR/dispatch.md +3 -3
- package/docs/content/locales/pt-BR/drop-in-agent.md +9 -9
- package/docs/content/locales/pt-BR/durable-resume.md +1 -1
- package/docs/content/locales/pt-BR/embedding-sdk.md +2 -2
- package/docs/content/locales/pt-BR/evals.md +2 -2
- package/docs/content/locales/pt-BR/extensions.md +2 -2
- package/docs/content/locales/pt-BR/external-agents.md +5 -5
- package/docs/content/locales/pt-BR/faq.md +3 -3
- package/docs/content/locales/pt-BR/file-uploads.md +4 -4
- package/docs/content/locales/pt-BR/frames.md +2 -2
- package/docs/content/locales/pt-BR/getting-started.md +13 -13
- package/docs/content/locales/pt-BR/harness-agents.md +3 -3
- package/docs/content/locales/pt-BR/human-approval.md +3 -3
- package/docs/content/locales/pt-BR/key-concepts.md +15 -15
- package/docs/content/locales/pt-BR/local-file-mode.md +5 -5
- package/docs/content/locales/pt-BR/mcp-apps.md +4 -4
- package/docs/content/locales/pt-BR/mcp-clients.md +8 -8
- package/docs/content/locales/pt-BR/mcp-protocol.md +3 -3
- package/docs/content/locales/pt-BR/messaging.md +4 -4
- package/docs/content/locales/pt-BR/migration-workbench.md +1 -1
- package/docs/content/locales/pt-BR/multi-app-workspace.md +1 -1
- package/docs/content/locales/pt-BR/multi-tenancy.md +1 -1
- package/docs/content/locales/pt-BR/native-chat-ui.md +3 -3
- package/docs/content/locales/pt-BR/notifications.md +3 -3
- package/docs/content/locales/pt-BR/observability.md +2 -2
- package/docs/content/locales/pt-BR/observational-memory.md +2 -2
- package/docs/content/locales/pt-BR/onboarding.md +8 -8
- package/docs/content/locales/pt-BR/plan-plugin.md +3 -3
- package/docs/content/locales/pt-BR/pr-visual-recap.md +11 -11
- package/docs/content/locales/pt-BR/processors.md +1 -1
- package/docs/content/locales/pt-BR/progress.md +2 -2
- package/docs/content/locales/pt-BR/pure-agent-apps.md +1 -1
- package/docs/content/locales/pt-BR/real-time-collaboration.md +6 -6
- package/docs/content/locales/pt-BR/recurring-jobs.md +5 -5
- package/docs/content/locales/pt-BR/routing.md +1 -1
- package/docs/content/locales/pt-BR/sandbox-adapters.md +2 -2
- package/docs/content/locales/pt-BR/security.md +9 -9
- package/docs/content/locales/pt-BR/server.md +10 -10
- package/docs/content/locales/pt-BR/sharing.md +6 -6
- package/docs/content/locales/pt-BR/skills-guide.md +16 -16
- package/docs/content/locales/pt-BR/template-analytics.md +10 -10
- package/docs/content/locales/pt-BR/template-assets.md +20 -20
- package/docs/content/locales/pt-BR/template-brain.md +11 -11
- package/docs/content/locales/pt-BR/template-calendar.md +9 -9
- package/docs/content/locales/pt-BR/template-chat.md +3 -3
- package/docs/content/locales/pt-BR/template-clips.md +15 -15
- package/docs/content/locales/pt-BR/template-content.md +13 -13
- package/docs/content/locales/pt-BR/template-design.md +8 -8
- package/docs/content/locales/pt-BR/template-dispatch.md +8 -8
- package/docs/content/locales/pt-BR/template-forms.md +10 -10
- package/docs/content/locales/pt-BR/template-mail.md +6 -6
- package/docs/content/locales/pt-BR/template-plan.md +3 -3
- package/docs/content/locales/pt-BR/template-slides.md +9 -9
- package/docs/content/locales/pt-BR/template-videos.md +5 -5
- package/docs/content/locales/pt-BR/tracking.md +3 -3
- package/docs/content/locales/pt-BR/using-your-agent.md +5 -5
- package/docs/content/locales/pt-BR/voice-input.md +4 -4
- package/docs/content/locales/pt-BR/what-is-agent-native.md +5 -5
- package/docs/content/locales/pt-BR/workspace-connections.md +8 -8
- package/docs/content/locales/pt-BR/workspace-management.md +4 -4
- package/docs/content/locales/pt-BR/workspace.md +23 -23
- package/docs/content/locales/pt-BR/writing-agent-instructions.md +18 -18
- package/docs/content/locales/zh-CN/a2a-protocol.md +7 -7
- package/docs/content/locales/zh-CN/actions.md +3 -3
- package/docs/content/locales/zh-CN/agent-mentions.md +3 -3
- package/docs/content/locales/zh-CN/agent-surfaces.md +7 -7
- package/docs/content/locales/zh-CN/agent-teams.md +3 -3
- package/docs/content/locales/zh-CN/agent-web-surfaces.md +5 -5
- package/docs/content/locales/zh-CN/authentication.md +13 -13
- package/docs/content/locales/zh-CN/automations.md +8 -8
- package/docs/content/locales/zh-CN/blueprint-installer.md +2 -2
- package/docs/content/locales/zh-CN/client.md +1 -1
- package/docs/content/locales/zh-CN/cloneable-saas.md +2 -2
- package/docs/content/locales/zh-CN/code-agents-ui.md +4 -4
- package/docs/content/locales/zh-CN/components.md +7 -7
- package/docs/content/locales/zh-CN/context-awareness.md +8 -8
- package/docs/content/locales/zh-CN/creating-templates.md +12 -12
- package/docs/content/locales/zh-CN/cross-app-sso.md +3 -3
- package/docs/content/locales/zh-CN/database.md +7 -7
- package/docs/content/locales/zh-CN/deployment.md +4 -4
- package/docs/content/locales/zh-CN/dispatch.md +4 -4
- package/docs/content/locales/zh-CN/drop-in-agent.md +8 -8
- package/docs/content/locales/zh-CN/durable-resume.md +1 -1
- package/docs/content/locales/zh-CN/embedding-sdk.md +2 -2
- package/docs/content/locales/zh-CN/evals.md +2 -2
- package/docs/content/locales/zh-CN/extensions.md +2 -2
- package/docs/content/locales/zh-CN/external-agents.md +5 -5
- package/docs/content/locales/zh-CN/faq.md +3 -3
- package/docs/content/locales/zh-CN/file-uploads.md +4 -4
- package/docs/content/locales/zh-CN/frames.md +2 -2
- package/docs/content/locales/zh-CN/getting-started.md +13 -13
- package/docs/content/locales/zh-CN/harness-agents.md +3 -3
- package/docs/content/locales/zh-CN/human-approval.md +3 -3
- package/docs/content/locales/zh-CN/key-concepts.md +14 -14
- package/docs/content/locales/zh-CN/local-file-mode.md +5 -5
- package/docs/content/locales/zh-CN/mcp-apps.md +4 -4
- package/docs/content/locales/zh-CN/mcp-clients.md +7 -7
- package/docs/content/locales/zh-CN/mcp-protocol.md +3 -3
- package/docs/content/locales/zh-CN/messaging.md +6 -6
- package/docs/content/locales/zh-CN/migration-workbench.md +1 -1
- package/docs/content/locales/zh-CN/multi-app-workspace.md +1 -1
- package/docs/content/locales/zh-CN/multi-tenancy.md +1 -1
- package/docs/content/locales/zh-CN/native-chat-ui.md +3 -3
- package/docs/content/locales/zh-CN/notifications.md +3 -3
- package/docs/content/locales/zh-CN/observability.md +2 -2
- package/docs/content/locales/zh-CN/observational-memory.md +2 -2
- package/docs/content/locales/zh-CN/onboarding.md +8 -8
- package/docs/content/locales/zh-CN/plan-plugin.md +3 -3
- package/docs/content/locales/zh-CN/pr-visual-recap.md +11 -11
- package/docs/content/locales/zh-CN/processors.md +1 -1
- package/docs/content/locales/zh-CN/progress.md +2 -2
- package/docs/content/locales/zh-CN/pure-agent-apps.md +1 -1
- package/docs/content/locales/zh-CN/real-time-collaboration.md +6 -6
- package/docs/content/locales/zh-CN/recurring-jobs.md +5 -5
- package/docs/content/locales/zh-CN/routing.md +1 -1
- package/docs/content/locales/zh-CN/sandbox-adapters.md +2 -2
- package/docs/content/locales/zh-CN/security.md +8 -8
- package/docs/content/locales/zh-CN/server.md +10 -10
- package/docs/content/locales/zh-CN/sharing.md +6 -6
- package/docs/content/locales/zh-CN/skills-guide.md +16 -16
- package/docs/content/locales/zh-CN/template-analytics.md +10 -10
- package/docs/content/locales/zh-CN/template-assets.md +20 -20
- package/docs/content/locales/zh-CN/template-brain.md +11 -11
- package/docs/content/locales/zh-CN/template-calendar.md +9 -9
- package/docs/content/locales/zh-CN/template-chat.md +3 -3
- package/docs/content/locales/zh-CN/template-clips.md +14 -14
- package/docs/content/locales/zh-CN/template-content.md +13 -13
- package/docs/content/locales/zh-CN/template-design.md +7 -7
- package/docs/content/locales/zh-CN/template-dispatch.md +11 -11
- package/docs/content/locales/zh-CN/template-forms.md +9 -9
- package/docs/content/locales/zh-CN/template-mail.md +6 -6
- package/docs/content/locales/zh-CN/template-plan.md +3 -3
- package/docs/content/locales/zh-CN/template-slides.md +8 -8
- package/docs/content/locales/zh-CN/template-videos.md +5 -5
- package/docs/content/locales/zh-CN/tracking.md +3 -3
- package/docs/content/locales/zh-CN/using-your-agent.md +5 -5
- package/docs/content/locales/zh-CN/voice-input.md +4 -4
- package/docs/content/locales/zh-CN/what-is-agent-native.md +5 -5
- package/docs/content/locales/zh-CN/workspace-connections.md +8 -8
- package/docs/content/locales/zh-CN/workspace-management.md +5 -5
- package/docs/content/locales/zh-CN/workspace.md +23 -23
- package/docs/content/locales/zh-CN/writing-agent-instructions.md +18 -18
- package/package.json +1 -1
- package/src/templates/default/app/i18n/ar-SA.ts +275 -274
- package/src/templates/default/app/i18n/de-DE.ts +270 -260
- package/src/templates/default/app/i18n/es-ES.ts +282 -270
- package/src/templates/default/app/i18n/fr-FR.ts +275 -266
- package/src/templates/default/app/i18n/hi-IN.ts +274 -276
- package/src/templates/default/app/i18n/ja-JP.ts +280 -273
- package/src/templates/default/app/i18n/ko-KR.ts +274 -274
- package/src/templates/default/app/i18n/pt-BR.ts +273 -266
- package/src/templates/default/app/i18n/zh-CN.ts +273 -285
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
agentNativePath,
|
|
5
5
|
getBrowserTabId,
|
|
6
6
|
sendToAgentChat,
|
|
7
|
+
useT,
|
|
7
8
|
useActionMutation,
|
|
8
9
|
useActionQuery,
|
|
9
10
|
} from "@agent-native/core/client";
|
|
@@ -356,6 +357,7 @@ function libraryTabFromValue(value: unknown): LibraryTab | null {
|
|
|
356
357
|
}
|
|
357
358
|
|
|
358
359
|
export default function LibraryPage() {
|
|
360
|
+
const t = useT();
|
|
359
361
|
const { id } = useParams();
|
|
360
362
|
const navigate = useNavigate();
|
|
361
363
|
const [searchParams] = useSearchParams();
|
|
@@ -647,10 +649,12 @@ export default function LibraryPage() {
|
|
|
647
649
|
queryKey: ["app-state", "asset-variants"],
|
|
648
650
|
refetchType: "active",
|
|
649
651
|
});
|
|
650
|
-
toast.success("
|
|
652
|
+
toast.success(t("brandKitDetail.savedToGenerated"));
|
|
651
653
|
} catch (error) {
|
|
652
654
|
toast.error(
|
|
653
|
-
error instanceof Error
|
|
655
|
+
error instanceof Error
|
|
656
|
+
? error.message
|
|
657
|
+
: t("brandKitDetail.couldNotSaveCandidate"),
|
|
654
658
|
);
|
|
655
659
|
} finally {
|
|
656
660
|
setCandidateSaving(key, false);
|
|
@@ -683,12 +687,12 @@ export default function LibraryPage() {
|
|
|
683
687
|
queryKey: ["app-state", "asset-variants"],
|
|
684
688
|
refetchType: "active",
|
|
685
689
|
});
|
|
686
|
-
toast.success("
|
|
690
|
+
toast.success(t("brandKitDetail.addedToReferences"));
|
|
687
691
|
} catch (error) {
|
|
688
692
|
toast.error(
|
|
689
693
|
error instanceof Error
|
|
690
694
|
? error.message
|
|
691
|
-
: "
|
|
695
|
+
: t("brandKitDetail.couldNotAddToReferences"),
|
|
692
696
|
);
|
|
693
697
|
} finally {
|
|
694
698
|
setReferencePromoting(key, false);
|
|
@@ -710,12 +714,12 @@ export default function LibraryPage() {
|
|
|
710
714
|
queryKey: ["action", "get-library", { id: libraryId }],
|
|
711
715
|
refetchType: "active",
|
|
712
716
|
});
|
|
713
|
-
toast.success("
|
|
717
|
+
toast.success(t("brandKitDetail.removedFromReferences"));
|
|
714
718
|
} catch (error) {
|
|
715
719
|
toast.error(
|
|
716
720
|
error instanceof Error
|
|
717
721
|
? error.message
|
|
718
|
-
: "
|
|
722
|
+
: t("brandKitDetail.couldNotRemoveFromReferences"),
|
|
719
723
|
);
|
|
720
724
|
} finally {
|
|
721
725
|
setReferencePromoting(key, false);
|
|
@@ -843,12 +847,14 @@ export default function LibraryPage() {
|
|
|
843
847
|
setUploading(true);
|
|
844
848
|
let keepPending = false;
|
|
845
849
|
const toastId = toast.loading(
|
|
846
|
-
|
|
850
|
+
t("brandKitDetail.uploadProgress", { count: selectedFiles.length }),
|
|
847
851
|
{
|
|
848
852
|
description:
|
|
849
853
|
uploadChunks.length > 1
|
|
850
|
-
?
|
|
851
|
-
|
|
854
|
+
? t("brandKitDetail.processingBatches", {
|
|
855
|
+
count: uploadChunks.length,
|
|
856
|
+
})
|
|
857
|
+
: t("brandKitDetail.processingPreviews"),
|
|
852
858
|
},
|
|
853
859
|
);
|
|
854
860
|
try {
|
|
@@ -883,23 +889,35 @@ export default function LibraryPage() {
|
|
|
883
889
|
}
|
|
884
890
|
if (failedCount > 0) {
|
|
885
891
|
toast.warning(
|
|
886
|
-
|
|
892
|
+
t("brandKitDetail.uploadedSomeFailed", {
|
|
893
|
+
uploaded: uploadedCount,
|
|
894
|
+
uploadedPlural: uploadedCount === 1 ? "" : "s",
|
|
895
|
+
failed: failedCount,
|
|
896
|
+
}),
|
|
887
897
|
{
|
|
888
898
|
id: toastId,
|
|
889
899
|
description:
|
|
890
900
|
skippedCount > 0
|
|
891
|
-
?
|
|
901
|
+
? t("brandKitDetail.skippedDuplicates", {
|
|
902
|
+
count: skippedCount,
|
|
903
|
+
plural: skippedCount === 1 ? "" : "s",
|
|
904
|
+
})
|
|
892
905
|
: null,
|
|
893
906
|
},
|
|
894
907
|
);
|
|
895
908
|
} else if (uploadedCount > 0 && skippedCount > 0) {
|
|
896
909
|
toast.success(
|
|
897
|
-
|
|
910
|
+
t("brandKitDetail.uploadedSkipped", {
|
|
911
|
+
uploaded: uploadedCount,
|
|
912
|
+
uploadedPlural: uploadedCount === 1 ? "" : "s",
|
|
913
|
+
skipped: skippedCount,
|
|
914
|
+
skippedPlural: skippedCount === 1 ? "" : "s",
|
|
915
|
+
}),
|
|
898
916
|
{ id: toastId, description: null },
|
|
899
917
|
);
|
|
900
918
|
} else if (uploadedCount > 0) {
|
|
901
919
|
toast.success(
|
|
902
|
-
|
|
920
|
+
t("brandKitDetail.uploadedCount", { count: uploadedCount }),
|
|
903
921
|
{
|
|
904
922
|
id: toastId,
|
|
905
923
|
description: null,
|
|
@@ -907,23 +925,22 @@ export default function LibraryPage() {
|
|
|
907
925
|
);
|
|
908
926
|
} else if (skippedCount > 0) {
|
|
909
927
|
toast.warning(
|
|
910
|
-
|
|
911
|
-
skippedCount === 1 ? "" : "s"
|
|
912
|
-
}.`,
|
|
928
|
+
t("brandKitDetail.skippedDuplicateAssets", { count: skippedCount }),
|
|
913
929
|
{
|
|
914
930
|
id: toastId,
|
|
915
|
-
description: "
|
|
931
|
+
description: t("brandKitDetail.alreadyInBrandKit"),
|
|
916
932
|
},
|
|
917
933
|
);
|
|
918
934
|
} else {
|
|
919
|
-
toast.warning("
|
|
935
|
+
toast.warning(t("brandKitDetail.noNewAssetsUploaded"), {
|
|
920
936
|
id: toastId,
|
|
921
937
|
description: null,
|
|
922
938
|
});
|
|
923
939
|
}
|
|
924
940
|
await refreshLibrary();
|
|
925
941
|
} catch (e) {
|
|
926
|
-
const message =
|
|
942
|
+
const message =
|
|
943
|
+
e instanceof Error ? e.message : t("brandKitDetail.uploadFailed");
|
|
927
944
|
const indeterminate =
|
|
928
945
|
/(?:\b408\b|\b504\b|timeout|timed out|network|failed to fetch|load failed)/i.test(
|
|
929
946
|
message,
|
|
@@ -933,10 +950,9 @@ export default function LibraryPage() {
|
|
|
933
950
|
setPendingUploads(
|
|
934
951
|
pending.map((upload) => ({ ...upload, status: "checking" })),
|
|
935
952
|
);
|
|
936
|
-
toast.warning("
|
|
953
|
+
toast.warning(t("brandKitDetail.uploadTakingLonger"), {
|
|
937
954
|
id: toastId,
|
|
938
|
-
description:
|
|
939
|
-
"The server may still finish saving these assets. We will keep checking this brand kit.",
|
|
955
|
+
description: t("brandKitDetail.uploadMayFinish"),
|
|
940
956
|
});
|
|
941
957
|
void refreshLibrary();
|
|
942
958
|
window.setTimeout(() => void refreshLibrary(), 4_000);
|
|
@@ -958,11 +974,13 @@ export default function LibraryPage() {
|
|
|
958
974
|
if (!library || archiveLibrary.isPending) return;
|
|
959
975
|
try {
|
|
960
976
|
await archiveLibrary.mutateAsync({ id: library.id });
|
|
961
|
-
toast.success("
|
|
977
|
+
toast.success(t("brandKitDetail.brandKitArchived"));
|
|
962
978
|
navigate("/brand-kits");
|
|
963
979
|
} catch (error) {
|
|
964
980
|
toast.error(
|
|
965
|
-
error instanceof Error
|
|
981
|
+
error instanceof Error
|
|
982
|
+
? error.message
|
|
983
|
+
: t("brandKitDetail.couldNotArchiveBrandKit"),
|
|
966
984
|
);
|
|
967
985
|
}
|
|
968
986
|
}
|
|
@@ -973,13 +991,13 @@ export default function LibraryPage() {
|
|
|
973
991
|
const copy = (await duplicateLibrary.mutateAsync({
|
|
974
992
|
id: library.id,
|
|
975
993
|
})) as any;
|
|
976
|
-
toast.success("
|
|
994
|
+
toast.success(t("brandKitDetail.privateCopyCreated"));
|
|
977
995
|
navigate(`/brand-kits/${copy.id}`);
|
|
978
996
|
} catch (error) {
|
|
979
997
|
toast.error(
|
|
980
998
|
error instanceof Error
|
|
981
999
|
? error.message
|
|
982
|
-
: "
|
|
1000
|
+
: t("brandKitDetail.couldNotDuplicateBrandKit"),
|
|
983
1001
|
);
|
|
984
1002
|
}
|
|
985
1003
|
}
|
|
@@ -1015,7 +1033,7 @@ export default function LibraryPage() {
|
|
|
1015
1033
|
"## Selected library",
|
|
1016
1034
|
`Library: ${library.title} (${library.id})`,
|
|
1017
1035
|
`Description: ${library.description || ""}`,
|
|
1018
|
-
`Folder: ${activeFolderId && activeFolderId !== "all" ? folders.find((folder) => folder.id === activeFolderId)?.title : "All assets"}`,
|
|
1036
|
+
`Folder: ${activeFolderId && activeFolderId !== "all" ? folders.find((folder) => folder.id === activeFolderId)?.title : "All assets"}`, // i18n-ignore: agent prompt context, not UI
|
|
1019
1037
|
`References: ${references.length}`,
|
|
1020
1038
|
`Saved assets: ${saved.length}`,
|
|
1021
1039
|
`Style brief: ${JSON.stringify(library.styleBrief ?? {})}`,
|
|
@@ -1052,7 +1070,9 @@ export default function LibraryPage() {
|
|
|
1052
1070
|
});
|
|
1053
1071
|
},
|
|
1054
1072
|
onError: (error: Error) => {
|
|
1055
|
-
toast.error(
|
|
1073
|
+
toast.error(
|
|
1074
|
+
error.message || t("brandKitDetail.couldNotPrepareHandoff"),
|
|
1075
|
+
);
|
|
1056
1076
|
},
|
|
1057
1077
|
},
|
|
1058
1078
|
);
|
|
@@ -1061,10 +1081,11 @@ export default function LibraryPage() {
|
|
|
1061
1081
|
function createHandoffFromRun(run: any) {
|
|
1062
1082
|
const outputIds = outputAssetIds(run);
|
|
1063
1083
|
if (!outputIds.length) {
|
|
1064
|
-
toast.error("
|
|
1084
|
+
toast.error(t("brandKitDetail.runNoGeneratedAssets"));
|
|
1065
1085
|
return;
|
|
1066
1086
|
}
|
|
1067
|
-
const prompt =
|
|
1087
|
+
const prompt =
|
|
1088
|
+
run.originalPrompt || run.prompt || t("brandKitDetail.generatedAsset");
|
|
1068
1089
|
createSession.mutate(
|
|
1069
1090
|
{
|
|
1070
1091
|
libraryId,
|
|
@@ -1075,12 +1096,15 @@ export default function LibraryPage() {
|
|
|
1075
1096
|
activeAssetId: outputIds[0],
|
|
1076
1097
|
assetIds: outputIds,
|
|
1077
1098
|
runIds: [run.id],
|
|
1078
|
-
feedback: "
|
|
1099
|
+
feedback: t("brandKitDetail.needsDesignRefinement"),
|
|
1079
1100
|
},
|
|
1080
1101
|
{
|
|
1081
|
-
onSuccess: () =>
|
|
1102
|
+
onSuccess: () =>
|
|
1103
|
+
toast.success(t("brandKitDetail.handoffSessionCreated")),
|
|
1082
1104
|
onError: (error: Error) => {
|
|
1083
|
-
toast.error(
|
|
1105
|
+
toast.error(
|
|
1106
|
+
error.message || t("brandKitDetail.couldNotCreateHandoff"),
|
|
1107
|
+
);
|
|
1084
1108
|
},
|
|
1085
1109
|
},
|
|
1086
1110
|
);
|
|
@@ -1089,7 +1113,7 @@ export default function LibraryPage() {
|
|
|
1089
1113
|
if (!library) {
|
|
1090
1114
|
return (
|
|
1091
1115
|
<div className="p-6 text-sm text-muted-foreground">
|
|
1092
|
-
|
|
1116
|
+
{t("brandKitDetail.loadingBrandKit")}
|
|
1093
1117
|
</div>
|
|
1094
1118
|
);
|
|
1095
1119
|
}
|
|
@@ -1114,14 +1138,13 @@ export default function LibraryPage() {
|
|
|
1114
1138
|
size="icon"
|
|
1115
1139
|
className="h-8 w-8 text-muted-foreground hover:text-foreground"
|
|
1116
1140
|
onClick={() => setEditOpen(true)}
|
|
1117
|
-
aria-label="
|
|
1141
|
+
aria-label={t("brandKitDetail.editBrandKit")}
|
|
1118
1142
|
>
|
|
1119
1143
|
<IconPencil className="h-4 w-4" />
|
|
1120
1144
|
</Button>
|
|
1121
1145
|
</div>
|
|
1122
1146
|
<p className="mt-1 max-w-3xl text-sm text-muted-foreground">
|
|
1123
|
-
{library.description ||
|
|
1124
|
-
"Upload, generate, describe, and organize reusable assets across agents."}
|
|
1147
|
+
{library.description || t("brandKitDetail.defaultDescription")}
|
|
1125
1148
|
</p>
|
|
1126
1149
|
</div>
|
|
1127
1150
|
<div className="flex w-full flex-wrap items-center gap-2 sm:w-auto sm:flex-nowrap lg:shrink-0">
|
|
@@ -1141,7 +1164,11 @@ export default function LibraryPage() {
|
|
|
1141
1164
|
) : (
|
|
1142
1165
|
<IconUpload className="h-4 w-4" />
|
|
1143
1166
|
)}
|
|
1144
|
-
{uploading
|
|
1167
|
+
{uploading
|
|
1168
|
+
? t("brandKitDetail.uploadingCount", {
|
|
1169
|
+
count: pendingUploads.length,
|
|
1170
|
+
})
|
|
1171
|
+
: t("brandKitDetail.upload")}
|
|
1145
1172
|
</Button>
|
|
1146
1173
|
<Button
|
|
1147
1174
|
variant="outline"
|
|
@@ -1149,7 +1176,7 @@ export default function LibraryPage() {
|
|
|
1149
1176
|
onClick={() => setFolderOpen(true)}
|
|
1150
1177
|
>
|
|
1151
1178
|
<IconFolderPlus className="h-4 w-4" />
|
|
1152
|
-
|
|
1179
|
+
{t("brandKitDetail.folder")}
|
|
1153
1180
|
</Button>
|
|
1154
1181
|
<GeneratePopover
|
|
1155
1182
|
open={generateOpen}
|
|
@@ -1163,7 +1190,7 @@ export default function LibraryPage() {
|
|
|
1163
1190
|
<Button
|
|
1164
1191
|
variant="outline"
|
|
1165
1192
|
size="icon"
|
|
1166
|
-
aria-label="
|
|
1193
|
+
aria-label={t("brandKitDetail.brandKitActions")}
|
|
1167
1194
|
disabled={
|
|
1168
1195
|
archiveLibrary.isPending || duplicateLibrary.isPending
|
|
1169
1196
|
}
|
|
@@ -1180,7 +1207,7 @@ export default function LibraryPage() {
|
|
|
1180
1207
|
}}
|
|
1181
1208
|
>
|
|
1182
1209
|
<IconFolderPlus className="mr-2 h-4 w-4 shrink-0" />
|
|
1183
|
-
|
|
1210
|
+
{t("brandKitDetail.newFolder")}
|
|
1184
1211
|
</DropdownMenuItem>
|
|
1185
1212
|
<DropdownMenuSeparator className="xl:hidden" />
|
|
1186
1213
|
<DropdownMenuItem
|
|
@@ -1191,7 +1218,9 @@ export default function LibraryPage() {
|
|
|
1191
1218
|
}}
|
|
1192
1219
|
>
|
|
1193
1220
|
<IconCopy className="mr-2 h-4 w-4 shrink-0" />
|
|
1194
|
-
{duplicateLibrary.isPending
|
|
1221
|
+
{duplicateLibrary.isPending
|
|
1222
|
+
? t("brandKitDetail.duplicating")
|
|
1223
|
+
: t("brandKitDetail.duplicate")}
|
|
1195
1224
|
</DropdownMenuItem>
|
|
1196
1225
|
<DropdownMenuSeparator />
|
|
1197
1226
|
<DropdownMenuItem
|
|
@@ -1201,7 +1230,7 @@ export default function LibraryPage() {
|
|
|
1201
1230
|
}}
|
|
1202
1231
|
>
|
|
1203
1232
|
<IconArchive className="mr-2 h-4 w-4 shrink-0" />
|
|
1204
|
-
|
|
1233
|
+
{t("brandKitDetail.archiveBrandKit")}
|
|
1205
1234
|
</DropdownMenuItem>
|
|
1206
1235
|
</DropdownMenuContent>
|
|
1207
1236
|
</DropdownMenu>
|
|
@@ -1226,21 +1255,24 @@ export default function LibraryPage() {
|
|
|
1226
1255
|
<AlertDialog open={archiveOpen} onOpenChange={setArchiveOpen}>
|
|
1227
1256
|
<AlertDialogContent>
|
|
1228
1257
|
<AlertDialogHeader>
|
|
1229
|
-
<AlertDialogTitle>
|
|
1258
|
+
<AlertDialogTitle>
|
|
1259
|
+
{t("brandKitDetail.archiveThisBrandKit")}
|
|
1260
|
+
</AlertDialogTitle>
|
|
1230
1261
|
<AlertDialogDescription>
|
|
1231
|
-
|
|
1232
|
-
assets and generation history stay stored.
|
|
1262
|
+
{t("brandKitDetail.archiveDescription")}
|
|
1233
1263
|
</AlertDialogDescription>
|
|
1234
1264
|
</AlertDialogHeader>
|
|
1235
1265
|
<AlertDialogFooter>
|
|
1236
|
-
<AlertDialogCancel>
|
|
1266
|
+
<AlertDialogCancel>{t("brandKitDetail.cancel")}</AlertDialogCancel>
|
|
1237
1267
|
<AlertDialogAction
|
|
1238
1268
|
disabled={archiveLibrary.isPending}
|
|
1239
1269
|
onClick={() => {
|
|
1240
1270
|
void archiveCurrentLibrary();
|
|
1241
1271
|
}}
|
|
1242
1272
|
>
|
|
1243
|
-
{archiveLibrary.isPending
|
|
1273
|
+
{archiveLibrary.isPending
|
|
1274
|
+
? t("brandKitDetail.archiving")
|
|
1275
|
+
: t("brandKitDetail.archive")}
|
|
1244
1276
|
</AlertDialogAction>
|
|
1245
1277
|
</AlertDialogFooter>
|
|
1246
1278
|
</AlertDialogContent>
|
|
@@ -1292,7 +1324,7 @@ export default function LibraryPage() {
|
|
|
1292
1324
|
<div className="pointer-events-none absolute inset-0 z-50 flex flex-col items-center justify-center gap-3 rounded-lg border-2 border-dashed border-primary bg-primary/5 backdrop-blur-[1px]">
|
|
1293
1325
|
<IconUpload className="h-10 w-10 text-primary" />
|
|
1294
1326
|
<span className="text-base font-semibold text-primary">
|
|
1295
|
-
|
|
1327
|
+
{t("brandKitDetail.dropToUpload")}
|
|
1296
1328
|
</span>
|
|
1297
1329
|
</div>
|
|
1298
1330
|
)}
|
|
@@ -1306,9 +1338,13 @@ export default function LibraryPage() {
|
|
|
1306
1338
|
className="space-y-4"
|
|
1307
1339
|
>
|
|
1308
1340
|
<TabsList>
|
|
1309
|
-
<TabsTrigger value="assets">
|
|
1310
|
-
|
|
1311
|
-
|
|
1341
|
+
<TabsTrigger value="assets">
|
|
1342
|
+
{t("brandKitDetail.assets")}
|
|
1343
|
+
</TabsTrigger>
|
|
1344
|
+
<TabsTrigger value="runs">{t("brandKitDetail.runs")}</TabsTrigger>
|
|
1345
|
+
<TabsTrigger value="settings">
|
|
1346
|
+
{t("brandKitDetail.settings")}
|
|
1347
|
+
</TabsTrigger>
|
|
1312
1348
|
</TabsList>
|
|
1313
1349
|
|
|
1314
1350
|
<TabsContent value="assets" className="space-y-5">
|
|
@@ -1327,13 +1363,13 @@ export default function LibraryPage() {
|
|
|
1327
1363
|
<div className="flex min-w-0 flex-wrap items-center gap-2">
|
|
1328
1364
|
<FolderChip
|
|
1329
1365
|
active={activeFolderId === "all"}
|
|
1330
|
-
label="
|
|
1366
|
+
label={t("brandKitDetail.allAssets")}
|
|
1331
1367
|
count={libraryAssets.length}
|
|
1332
1368
|
onClick={() => setActiveFolderId("all")}
|
|
1333
1369
|
/>
|
|
1334
1370
|
<FolderChip
|
|
1335
1371
|
active={activeFolderId === null}
|
|
1336
|
-
label="
|
|
1372
|
+
label={t("brandKitDetail.unfiled")}
|
|
1337
1373
|
count={unfiledCount}
|
|
1338
1374
|
onClick={() => setActiveFolderId(null)}
|
|
1339
1375
|
/>
|
|
@@ -1357,13 +1393,13 @@ export default function LibraryPage() {
|
|
|
1357
1393
|
<Input
|
|
1358
1394
|
value={search}
|
|
1359
1395
|
onChange={(event) => setSearch(event.target.value)}
|
|
1360
|
-
placeholder="
|
|
1396
|
+
placeholder={t("brandKitDetail.searchAssets")}
|
|
1361
1397
|
className="h-9 w-full pl-8 pr-8 sm:w-64"
|
|
1362
1398
|
/>
|
|
1363
1399
|
{search && (
|
|
1364
1400
|
<button
|
|
1365
1401
|
type="button"
|
|
1366
|
-
aria-label="
|
|
1402
|
+
aria-label={t("brandKitDetail.clearSearch")}
|
|
1367
1403
|
className="absolute right-2 top-1/2 flex h-5 w-5 -translate-y-1/2 items-center justify-center rounded text-muted-foreground hover:bg-muted hover:text-foreground"
|
|
1368
1404
|
onClick={() => setSearch("")}
|
|
1369
1405
|
>
|
|
@@ -1381,9 +1417,15 @@ export default function LibraryPage() {
|
|
|
1381
1417
|
<SelectValue />
|
|
1382
1418
|
</SelectTrigger>
|
|
1383
1419
|
<SelectContent>
|
|
1384
|
-
<SelectItem value="all">
|
|
1385
|
-
|
|
1386
|
-
|
|
1420
|
+
<SelectItem value="all">
|
|
1421
|
+
{t("brandKitDetail.allMedia")}
|
|
1422
|
+
</SelectItem>
|
|
1423
|
+
<SelectItem value="image">
|
|
1424
|
+
{t("brandKitDetail.images")}
|
|
1425
|
+
</SelectItem>
|
|
1426
|
+
<SelectItem value="video">
|
|
1427
|
+
{t("brandKitDetail.videos")}
|
|
1428
|
+
</SelectItem>
|
|
1387
1429
|
</SelectContent>
|
|
1388
1430
|
</Select>
|
|
1389
1431
|
</div>
|
|
@@ -1423,11 +1465,10 @@ export default function LibraryPage() {
|
|
|
1423
1465
|
<div className="mb-3 flex items-center justify-between gap-3">
|
|
1424
1466
|
<div className="min-w-0">
|
|
1425
1467
|
<h3 className="text-sm font-semibold">
|
|
1426
|
-
|
|
1468
|
+
{t("brandKitDetail.handoffSessions")}
|
|
1427
1469
|
</h3>
|
|
1428
1470
|
<p className="text-xs text-muted-foreground">
|
|
1429
|
-
|
|
1430
|
-
without the original chat thread.
|
|
1471
|
+
{t("brandKitDetail.handoffSessionsDescription")}
|
|
1431
1472
|
</p>
|
|
1432
1473
|
</div>
|
|
1433
1474
|
</div>
|
|
@@ -1467,10 +1508,11 @@ export default function LibraryPage() {
|
|
|
1467
1508
|
) : (
|
|
1468
1509
|
<div className="flex min-h-[260px] flex-col items-center justify-center rounded-lg border border-dashed border-border bg-muted/20 p-8 text-center">
|
|
1469
1510
|
<IconMessageCircle className="h-10 w-10 text-muted-foreground" />
|
|
1470
|
-
<h3 className="mt-4 text-base font-semibold">
|
|
1511
|
+
<h3 className="mt-4 text-base font-semibold">
|
|
1512
|
+
{t("brandKitDetail.noRunsYet")}
|
|
1513
|
+
</h3>
|
|
1471
1514
|
<p className="mt-2 max-w-md text-sm text-muted-foreground">
|
|
1472
|
-
|
|
1473
|
-
references, and settings.
|
|
1515
|
+
{t("brandKitDetail.noRunsDescription")}
|
|
1474
1516
|
</p>
|
|
1475
1517
|
</div>
|
|
1476
1518
|
)}
|
|
@@ -1479,7 +1521,7 @@ export default function LibraryPage() {
|
|
|
1479
1521
|
<TabsContent value="settings">
|
|
1480
1522
|
<div className="grid gap-4 lg:grid-cols-[minmax(0,1fr)_320px]">
|
|
1481
1523
|
<div className="space-y-4 rounded-lg border border-border p-4">
|
|
1482
|
-
<Label>
|
|
1524
|
+
<Label>{t("brandKitDetail.styleDescription")}</Label>
|
|
1483
1525
|
<Textarea
|
|
1484
1526
|
value={styleDescriptionDraft}
|
|
1485
1527
|
onChange={(event) =>
|
|
@@ -1497,7 +1539,7 @@ export default function LibraryPage() {
|
|
|
1497
1539
|
className="min-h-40"
|
|
1498
1540
|
/>
|
|
1499
1541
|
<Separator />
|
|
1500
|
-
<Label>
|
|
1542
|
+
<Label>{t("brandKitDetail.customInstructions")}</Label>
|
|
1501
1543
|
<Textarea
|
|
1502
1544
|
value={customInstructionsDraft}
|
|
1503
1545
|
onChange={(event) =>
|
|
@@ -1509,13 +1551,17 @@ export default function LibraryPage() {
|
|
|
1509
1551
|
customInstructions: customInstructionsDraft,
|
|
1510
1552
|
})
|
|
1511
1553
|
}
|
|
1512
|
-
placeholder=
|
|
1554
|
+
placeholder={t(
|
|
1555
|
+
"brandKitDetail.customInstructionsPlaceholder",
|
|
1556
|
+
)}
|
|
1513
1557
|
className="min-h-28"
|
|
1514
1558
|
/>
|
|
1515
1559
|
<Separator />
|
|
1516
1560
|
<div className="flex items-center justify-between">
|
|
1517
1561
|
<div>
|
|
1518
|
-
<div className="text-sm font-medium">
|
|
1562
|
+
<div className="text-sm font-medium">
|
|
1563
|
+
{t("brandKitDetail.palette")}
|
|
1564
|
+
</div>
|
|
1519
1565
|
<div className="mt-2 flex flex-wrap gap-2">
|
|
1520
1566
|
{(library.styleBrief?.palette ?? []).map(
|
|
1521
1567
|
(color: string) => (
|
|
@@ -1542,14 +1588,14 @@ export default function LibraryPage() {
|
|
|
1542
1588
|
},
|
|
1543
1589
|
});
|
|
1544
1590
|
}}
|
|
1545
|
-
placeholder="#111827, #f8fafc, #2563eb"
|
|
1591
|
+
placeholder={"#111827, #f8fafc, #2563eb"}
|
|
1546
1592
|
className="mt-3 h-9 max-w-md text-xs"
|
|
1547
1593
|
/>
|
|
1548
1594
|
</div>
|
|
1549
1595
|
<Button variant="outline" onClick={analyzeBrand}>
|
|
1550
1596
|
{library.settings?.brandAnalysis?.analyzedAt
|
|
1551
|
-
? "
|
|
1552
|
-
: "
|
|
1597
|
+
? t("brandKitDetail.refreshBrand")
|
|
1598
|
+
: t("brandKitDetail.analyzeBrand")}
|
|
1553
1599
|
</Button>
|
|
1554
1600
|
</div>
|
|
1555
1601
|
</div>
|
|
@@ -1559,10 +1605,11 @@ export default function LibraryPage() {
|
|
|
1559
1605
|
presets={generationPresets}
|
|
1560
1606
|
/>
|
|
1561
1607
|
<div className="rounded-lg border border-border p-4">
|
|
1562
|
-
<h3 className="text-sm font-semibold">
|
|
1608
|
+
<h3 className="text-sm font-semibold">
|
|
1609
|
+
{t("brandKitDetail.agentUsage")}
|
|
1610
|
+
</h3>
|
|
1563
1611
|
<p className="mt-2 text-sm text-muted-foreground">
|
|
1564
|
-
|
|
1565
|
-
ID.
|
|
1612
|
+
{t("brandKitDetail.agentUsageDescription")}
|
|
1566
1613
|
</p>
|
|
1567
1614
|
<code className="mt-3 block rounded-md bg-muted p-3 text-xs">
|
|
1568
1615
|
{library.id}
|
|
@@ -1614,7 +1661,7 @@ type LaneGalleryItem = {
|
|
|
1614
1661
|
busy?: boolean;
|
|
1615
1662
|
deleting?: boolean;
|
|
1616
1663
|
preview: ReactNode;
|
|
1617
|
-
thumbnail: ReactNode;
|
|
1664
|
+
thumbnail: ReactNode; // i18n-ignore structural preview slot name
|
|
1618
1665
|
menu?: ReactNode;
|
|
1619
1666
|
primaryActions?: ReactNode;
|
|
1620
1667
|
onToggle?: (checked: boolean) => void;
|
|
@@ -1633,6 +1680,7 @@ function RunCard({
|
|
|
1633
1680
|
onCreateHandoff: () => void;
|
|
1634
1681
|
rerunning?: boolean;
|
|
1635
1682
|
}) {
|
|
1683
|
+
const t = useT();
|
|
1636
1684
|
const settings = (run.settingsUsed ?? {}) as Record<string, unknown>;
|
|
1637
1685
|
const referenceSelection = (run.referenceSelection ?? {}) as Record<
|
|
1638
1686
|
string,
|
|
@@ -1682,7 +1730,7 @@ function RunCard({
|
|
|
1682
1730
|
</div>
|
|
1683
1731
|
<div>
|
|
1684
1732
|
<div className="text-xs font-medium text-muted-foreground">
|
|
1685
|
-
|
|
1733
|
+
{t("brandKitDetail.prompt")}
|
|
1686
1734
|
</div>
|
|
1687
1735
|
<p className="mt-1 line-clamp-3 text-sm leading-relaxed text-foreground">
|
|
1688
1736
|
{prompt}
|
|
@@ -1698,7 +1746,7 @@ function RunCard({
|
|
|
1698
1746
|
onClick={onCreateHandoff}
|
|
1699
1747
|
>
|
|
1700
1748
|
<IconMessageCircle className="h-4 w-4" />
|
|
1701
|
-
|
|
1749
|
+
{t("brandKitDetail.handoff")}
|
|
1702
1750
|
</Button>
|
|
1703
1751
|
) : null}
|
|
1704
1752
|
<Button
|
|
@@ -1710,20 +1758,23 @@ function RunCard({
|
|
|
1710
1758
|
>
|
|
1711
1759
|
<IconRefresh className="h-4 w-4" />
|
|
1712
1760
|
{mediaType === "video" && run.status !== "completed"
|
|
1713
|
-
? "
|
|
1714
|
-
: "
|
|
1761
|
+
? t("brandKitDetail.refresh")
|
|
1762
|
+
: t("brandKitDetail.rerunThis")}
|
|
1715
1763
|
</Button>
|
|
1716
1764
|
</div>
|
|
1717
1765
|
</div>
|
|
1718
1766
|
|
|
1719
1767
|
<div className="mt-4 grid gap-3 md:grid-cols-3 xl:grid-cols-6">
|
|
1720
|
-
<RunFact label="Model" value={String(settings.model ?? run.model)} />
|
|
1721
1768
|
<RunFact
|
|
1722
|
-
label="
|
|
1769
|
+
label={t("brandKitDetail.model")}
|
|
1770
|
+
value={String(settings.model ?? run.model)}
|
|
1771
|
+
/>
|
|
1772
|
+
<RunFact
|
|
1773
|
+
label={t("brandKitDetail.aspect")}
|
|
1723
1774
|
value={String(settings.aspectRatio ?? run.aspectRatio)}
|
|
1724
1775
|
/>
|
|
1725
1776
|
<RunFact
|
|
1726
|
-
label="
|
|
1777
|
+
label={t("brandKitDetail.size")}
|
|
1727
1778
|
value={
|
|
1728
1779
|
mediaType === "video"
|
|
1729
1780
|
? `${String(settings.durationSeconds ?? run.durationSeconds ?? "?")}s ${String(settings.resolution ?? run.resolution ?? run.imageSize)}`
|
|
@@ -1731,15 +1782,15 @@ function RunCard({
|
|
|
1731
1782
|
}
|
|
1732
1783
|
/>
|
|
1733
1784
|
<RunFact
|
|
1734
|
-
label="
|
|
1785
|
+
label={t("brandKitDetail.refs")}
|
|
1735
1786
|
value={`${selectedReferenceIds.length} ${String(referenceSelection.mode ?? "selected")}`}
|
|
1736
1787
|
/>
|
|
1737
1788
|
<RunFact
|
|
1738
|
-
label="
|
|
1789
|
+
label={t("brandKitDetail.grounding")}
|
|
1739
1790
|
value={String(settings.groundingMode ?? run.groundingMode)}
|
|
1740
1791
|
/>
|
|
1741
1792
|
<RunFact
|
|
1742
|
-
label="
|
|
1793
|
+
label={t("brandKitDetail.categories")}
|
|
1743
1794
|
value={categories.length ? categories.join(", ") : "auto"}
|
|
1744
1795
|
/>
|
|
1745
1796
|
</div>
|
|
@@ -1747,7 +1798,7 @@ function RunCard({
|
|
|
1747
1798
|
<div className="mt-4 grid gap-3 lg:grid-cols-2">
|
|
1748
1799
|
<div className="rounded-md border bg-muted/20 p-3">
|
|
1749
1800
|
<div className="text-xs font-medium text-muted-foreground">
|
|
1750
|
-
|
|
1801
|
+
{t("brandKitDetail.output")}
|
|
1751
1802
|
</div>
|
|
1752
1803
|
{outputIds.length ? (
|
|
1753
1804
|
<div className="mt-2 flex flex-wrap gap-2">
|
|
@@ -1770,24 +1821,26 @@ function RunCard({
|
|
|
1770
1821
|
</div>
|
|
1771
1822
|
) : (
|
|
1772
1823
|
<p className="mt-2 text-xs text-muted-foreground">
|
|
1773
|
-
{run.error || "
|
|
1824
|
+
{run.error || t("brandKitDetail.noOutputCaptured")}
|
|
1774
1825
|
</p>
|
|
1775
1826
|
)}
|
|
1776
1827
|
{provider ? (
|
|
1777
1828
|
<p className="mt-2 text-xs text-muted-foreground">
|
|
1778
|
-
|
|
1829
|
+
{t("brandKitDetail.providerLabel", {
|
|
1830
|
+
provider: String(provider),
|
|
1831
|
+
})}
|
|
1779
1832
|
</p>
|
|
1780
1833
|
) : null}
|
|
1781
1834
|
</div>
|
|
1782
1835
|
|
|
1783
1836
|
<div className="rounded-md border bg-muted/20 p-3">
|
|
1784
1837
|
<div className="text-xs font-medium text-muted-foreground">
|
|
1785
|
-
|
|
1838
|
+
{t("brandKitDetail.references")}
|
|
1786
1839
|
</div>
|
|
1787
1840
|
<p className="mt-2 line-clamp-2 text-xs text-muted-foreground">
|
|
1788
1841
|
{selectedReferenceIds.length
|
|
1789
1842
|
? selectedReferenceIds.map(shortId).join(", ")
|
|
1790
|
-
: "
|
|
1843
|
+
: t("brandKitDetail.noneSelected")}
|
|
1791
1844
|
</p>
|
|
1792
1845
|
</div>
|
|
1793
1846
|
</div>
|
|
@@ -1795,7 +1848,7 @@ function RunCard({
|
|
|
1795
1848
|
{run.compiledPrompt ? (
|
|
1796
1849
|
<details className="mt-3 rounded-md border bg-background">
|
|
1797
1850
|
<summary className="cursor-pointer px-3 py-2 text-xs font-medium text-muted-foreground">
|
|
1798
|
-
|
|
1851
|
+
{t("brandKitDetail.compiledPrompt")}
|
|
1799
1852
|
</summary>
|
|
1800
1853
|
<pre className="max-h-64 overflow-auto whitespace-pre-wrap border-t px-3 py-2 text-xs leading-relaxed text-muted-foreground">
|
|
1801
1854
|
{run.compiledPrompt}
|
|
@@ -1883,6 +1936,7 @@ function SessionCard({
|
|
|
1883
1936
|
continuing?: boolean;
|
|
1884
1937
|
onContinue: () => void;
|
|
1885
1938
|
}) {
|
|
1939
|
+
const t = useT();
|
|
1886
1940
|
const preset = presets.find((item) => item.id === session.presetId);
|
|
1887
1941
|
const sessionItems = Array.isArray(session.items) ? session.items : [];
|
|
1888
1942
|
const assetItems = sessionItems.filter((item: any) => item.assetId);
|
|
@@ -1895,7 +1949,9 @@ function SessionCard({
|
|
|
1895
1949
|
<Badge variant="outline">{session.status}</Badge>
|
|
1896
1950
|
</div>
|
|
1897
1951
|
<p className="mt-1 line-clamp-2 text-xs text-muted-foreground">
|
|
1898
|
-
{session.feedbackSummary ||
|
|
1952
|
+
{session.feedbackSummary ||
|
|
1953
|
+
session.brief ||
|
|
1954
|
+
t("brandKitDetail.noFeedbackYet")}
|
|
1899
1955
|
</p>
|
|
1900
1956
|
</div>
|
|
1901
1957
|
<Button
|
|
@@ -1909,7 +1965,7 @@ function SessionCard({
|
|
|
1909
1965
|
) : (
|
|
1910
1966
|
<IconMessageCircle className="h-4 w-4" />
|
|
1911
1967
|
)}
|
|
1912
|
-
|
|
1968
|
+
{t("brandKitDetail.continue")}
|
|
1913
1969
|
</Button>
|
|
1914
1970
|
</div>
|
|
1915
1971
|
<div className="mt-3 flex flex-wrap gap-2 text-xs text-muted-foreground">
|
|
@@ -1922,7 +1978,7 @@ function SessionCard({
|
|
|
1922
1978
|
}
|
|
1923
1979
|
>
|
|
1924
1980
|
{item.assetId === session.activeAssetId
|
|
1925
|
-
? `${item.label} active`
|
|
1981
|
+
? `${item.label} ${t("brandKitDetail.active")}`
|
|
1926
1982
|
: item.label}
|
|
1927
1983
|
</Badge>
|
|
1928
1984
|
))}
|
|
@@ -1931,7 +1987,9 @@ function SessionCard({
|
|
|
1931
1987
|
) : null}
|
|
1932
1988
|
{!assetItems.length && session.activeAssetId ? (
|
|
1933
1989
|
<Badge variant="outline">
|
|
1934
|
-
|
|
1990
|
+
{t("brandKitDetail.activeAsset", {
|
|
1991
|
+
id: shortId(session.activeAssetId),
|
|
1992
|
+
})}
|
|
1935
1993
|
</Badge>
|
|
1936
1994
|
) : null}
|
|
1937
1995
|
</div>
|
|
@@ -1952,6 +2010,7 @@ function GeneratePopover({
|
|
|
1952
2010
|
hasLogo: boolean;
|
|
1953
2011
|
presets: any[];
|
|
1954
2012
|
}) {
|
|
2013
|
+
const t = useT();
|
|
1955
2014
|
const [prompt, setPrompt] = useState("");
|
|
1956
2015
|
const [mediaType, setMediaType] = useState<"image" | "video">("image");
|
|
1957
2016
|
const [presetId, setPresetId] = useState("none");
|
|
@@ -1970,7 +2029,7 @@ function GeneratePopover({
|
|
|
1970
2029
|
<PopoverTrigger asChild>
|
|
1971
2030
|
<Button className="gap-2">
|
|
1972
2031
|
<IconMessageCircle className="h-4 w-4" />
|
|
1973
|
-
|
|
2032
|
+
{t("brandKitDetail.generate")}
|
|
1974
2033
|
</Button>
|
|
1975
2034
|
</PopoverTrigger>
|
|
1976
2035
|
<PopoverContent
|
|
@@ -1979,7 +2038,9 @@ function GeneratePopover({
|
|
|
1979
2038
|
>
|
|
1980
2039
|
<div className="space-y-4">
|
|
1981
2040
|
<div>
|
|
1982
|
-
<div className="text-sm font-semibold">
|
|
2041
|
+
<div className="text-sm font-semibold">
|
|
2042
|
+
{t("brandKitDetail.generateWithChat")}
|
|
2043
|
+
</div>
|
|
1983
2044
|
</div>
|
|
1984
2045
|
{presets.length ? (
|
|
1985
2046
|
<Select
|
|
@@ -1996,10 +2057,12 @@ function GeneratePopover({
|
|
|
1996
2057
|
}}
|
|
1997
2058
|
>
|
|
1998
2059
|
<SelectTrigger>
|
|
1999
|
-
<SelectValue placeholder="
|
|
2060
|
+
<SelectValue placeholder={t("brandKitDetail.preset")} />
|
|
2000
2061
|
</SelectTrigger>
|
|
2001
2062
|
<SelectContent>
|
|
2002
|
-
<SelectItem value="none">
|
|
2063
|
+
<SelectItem value="none">
|
|
2064
|
+
{t("brandKitDetail.noPreset")}
|
|
2065
|
+
</SelectItem>
|
|
2003
2066
|
{presets.map((preset) => (
|
|
2004
2067
|
<SelectItem key={preset.id} value={preset.id}>
|
|
2005
2068
|
{preset.title}
|
|
@@ -2031,8 +2094,12 @@ function GeneratePopover({
|
|
|
2031
2094
|
<SelectValue />
|
|
2032
2095
|
</SelectTrigger>
|
|
2033
2096
|
<SelectContent>
|
|
2034
|
-
<SelectItem value="image">
|
|
2035
|
-
|
|
2097
|
+
<SelectItem value="image">
|
|
2098
|
+
{t("brandKitDetail.imageCandidates")}
|
|
2099
|
+
</SelectItem>
|
|
2100
|
+
<SelectItem value="video">
|
|
2101
|
+
{t("brandKitDetail.videoCandidate")}
|
|
2102
|
+
</SelectItem>
|
|
2036
2103
|
</SelectContent>
|
|
2037
2104
|
</Select>
|
|
2038
2105
|
<Textarea
|
|
@@ -2041,8 +2108,8 @@ function GeneratePopover({
|
|
|
2041
2108
|
onChange={(event) => setPrompt(event.target.value)}
|
|
2042
2109
|
placeholder={
|
|
2043
2110
|
mediaType === "video"
|
|
2044
|
-
? "
|
|
2045
|
-
: "
|
|
2111
|
+
? t("brandKitDetail.videoPromptPlaceholder")
|
|
2112
|
+
: t("brandKitDetail.imagePromptPlaceholder")
|
|
2046
2113
|
}
|
|
2047
2114
|
className="min-h-28 max-h-48 resize-none overflow-y-auto"
|
|
2048
2115
|
/>
|
|
@@ -2058,7 +2125,7 @@ function GeneratePopover({
|
|
|
2058
2125
|
<SelectContent>
|
|
2059
2126
|
{[1, 2, 3, 4].map((n) => (
|
|
2060
2127
|
<SelectItem key={n} value={String(n)}>
|
|
2061
|
-
{n}
|
|
2128
|
+
{t("brandKitDetail.variants", { count: n })}
|
|
2062
2129
|
</SelectItem>
|
|
2063
2130
|
))}
|
|
2064
2131
|
</SelectContent>
|
|
@@ -2156,7 +2223,7 @@ function GeneratePopover({
|
|
|
2156
2223
|
disabled={!hasLogo}
|
|
2157
2224
|
onCheckedChange={(checked) => setIncludeLogo(checked === true)}
|
|
2158
2225
|
/>
|
|
2159
|
-
|
|
2226
|
+
{t("brandKitDetail.compositeCanonicalLogo")}
|
|
2160
2227
|
</label>
|
|
2161
2228
|
)}
|
|
2162
2229
|
<Button
|
|
@@ -2177,7 +2244,7 @@ function GeneratePopover({
|
|
|
2177
2244
|
})
|
|
2178
2245
|
}
|
|
2179
2246
|
>
|
|
2180
|
-
|
|
2247
|
+
{t("brandKitDetail.openChat")}
|
|
2181
2248
|
</Button>
|
|
2182
2249
|
</div>
|
|
2183
2250
|
</PopoverContent>
|
|
@@ -2192,6 +2259,7 @@ function GenerationPresetsPanel({
|
|
|
2192
2259
|
libraryId: string;
|
|
2193
2260
|
presets: any[];
|
|
2194
2261
|
}) {
|
|
2262
|
+
const t = useT();
|
|
2195
2263
|
const createPreset = useActionMutation("create-generation-preset");
|
|
2196
2264
|
const deletePreset = useActionMutation("delete-generation-preset");
|
|
2197
2265
|
const [open, setOpen] = useState(false);
|
|
@@ -2201,7 +2269,7 @@ function GenerationPresetsPanel({
|
|
|
2201
2269
|
const [aspectRatio, setAspectRatio] = useState<AspectRatio>("1:1");
|
|
2202
2270
|
const [promptTemplate, setPromptTemplate] = useState("");
|
|
2203
2271
|
const [textPolicy, setTextPolicy] = useState(
|
|
2204
|
-
"
|
|
2272
|
+
t("brandKitDetail.defaultTextPolicy"),
|
|
2205
2273
|
);
|
|
2206
2274
|
|
|
2207
2275
|
function reset() {
|
|
@@ -2209,9 +2277,7 @@ function GenerationPresetsPanel({
|
|
|
2209
2277
|
setCategory("social");
|
|
2210
2278
|
setAspectRatio("1:1");
|
|
2211
2279
|
setPromptTemplate("");
|
|
2212
|
-
setTextPolicy(
|
|
2213
|
-
"Prefer no embedded text. Keep any requested text short and readable.",
|
|
2214
|
-
);
|
|
2280
|
+
setTextPolicy(t("brandKitDetail.defaultTextPolicy"));
|
|
2215
2281
|
}
|
|
2216
2282
|
|
|
2217
2283
|
function submit() {
|
|
@@ -2230,12 +2296,14 @@ function GenerationPresetsPanel({
|
|
|
2230
2296
|
},
|
|
2231
2297
|
{
|
|
2232
2298
|
onSuccess: () => {
|
|
2233
|
-
toast.success("
|
|
2299
|
+
toast.success(t("brandKitDetail.generationPresetCreated"));
|
|
2234
2300
|
reset();
|
|
2235
2301
|
setOpen(false);
|
|
2236
2302
|
},
|
|
2237
2303
|
onError: (error: Error) => {
|
|
2238
|
-
toast.error(
|
|
2304
|
+
toast.error(
|
|
2305
|
+
error.message || t("brandKitDetail.couldNotCreatePreset"),
|
|
2306
|
+
);
|
|
2239
2307
|
},
|
|
2240
2308
|
},
|
|
2241
2309
|
);
|
|
@@ -2245,13 +2313,15 @@ function GenerationPresetsPanel({
|
|
|
2245
2313
|
<div className="rounded-lg border border-border p-4">
|
|
2246
2314
|
<div className="flex items-center justify-between gap-3">
|
|
2247
2315
|
<div>
|
|
2248
|
-
<h3 className="text-sm font-semibold">
|
|
2316
|
+
<h3 className="text-sm font-semibold">
|
|
2317
|
+
{t("brandKitDetail.generationPresets")}
|
|
2318
|
+
</h3>
|
|
2249
2319
|
<p className="mt-1 text-sm text-muted-foreground">
|
|
2250
|
-
|
|
2320
|
+
{t("brandKitDetail.generationPresetsDescription")}
|
|
2251
2321
|
</p>
|
|
2252
2322
|
</div>
|
|
2253
2323
|
<Button variant="outline" size="sm" onClick={() => setOpen(true)}>
|
|
2254
|
-
|
|
2324
|
+
{t("brandKitDetail.new")}
|
|
2255
2325
|
</Button>
|
|
2256
2326
|
</div>
|
|
2257
2327
|
<div className="mt-3 space-y-2">
|
|
@@ -2275,7 +2345,7 @@ function GenerationPresetsPanel({
|
|
|
2275
2345
|
variant="ghost"
|
|
2276
2346
|
size="icon"
|
|
2277
2347
|
className="h-8 w-8 shrink-0 text-muted-foreground hover:text-destructive"
|
|
2278
|
-
aria-label={
|
|
2348
|
+
aria-label={`${t("brandKitDetail.delete")} ${preset.title}`}
|
|
2279
2349
|
onClick={() => setConfirmPresetId(preset.id)}
|
|
2280
2350
|
>
|
|
2281
2351
|
<IconTrash className="h-4 w-4" />
|
|
@@ -2284,7 +2354,7 @@ function GenerationPresetsPanel({
|
|
|
2284
2354
|
))}
|
|
2285
2355
|
{!presets.length ? (
|
|
2286
2356
|
<p className="rounded-md border border-dashed border-border p-3 text-sm text-muted-foreground">
|
|
2287
|
-
|
|
2357
|
+
{t("brandKitDetail.noPresetsYet")}
|
|
2288
2358
|
</p>
|
|
2289
2359
|
) : null}
|
|
2290
2360
|
</div>
|
|
@@ -2297,14 +2367,15 @@ function GenerationPresetsPanel({
|
|
|
2297
2367
|
>
|
|
2298
2368
|
<AlertDialogContent>
|
|
2299
2369
|
<AlertDialogHeader>
|
|
2300
|
-
<AlertDialogTitle>
|
|
2370
|
+
<AlertDialogTitle>
|
|
2371
|
+
{t("brandKitDetail.deleteGenerationPreset")}
|
|
2372
|
+
</AlertDialogTitle>
|
|
2301
2373
|
<AlertDialogDescription>
|
|
2302
|
-
|
|
2303
|
-
generations will no longer offer this preset.
|
|
2374
|
+
{t("brandKitDetail.deleteGenerationPresetDescription")}
|
|
2304
2375
|
</AlertDialogDescription>
|
|
2305
2376
|
</AlertDialogHeader>
|
|
2306
2377
|
<AlertDialogFooter>
|
|
2307
|
-
<AlertDialogCancel>
|
|
2378
|
+
<AlertDialogCancel>{t("brandKitDetail.cancel")}</AlertDialogCancel>
|
|
2308
2379
|
<AlertDialogAction
|
|
2309
2380
|
className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
|
|
2310
2381
|
disabled={!confirmPresetId || deletePreset.isPending}
|
|
@@ -2316,16 +2387,21 @@ function GenerationPresetsPanel({
|
|
|
2316
2387
|
{
|
|
2317
2388
|
onSuccess: () => {
|
|
2318
2389
|
setConfirmPresetId(null);
|
|
2319
|
-
toast.success(
|
|
2390
|
+
toast.success(
|
|
2391
|
+
t("brandKitDetail.generationPresetDeleted"),
|
|
2392
|
+
);
|
|
2320
2393
|
},
|
|
2321
2394
|
onError: (error: Error) => {
|
|
2322
|
-
toast.error(
|
|
2395
|
+
toast.error(
|
|
2396
|
+
error.message ||
|
|
2397
|
+
t("brandKitDetail.couldNotDeletePreset"),
|
|
2398
|
+
);
|
|
2323
2399
|
},
|
|
2324
2400
|
},
|
|
2325
2401
|
);
|
|
2326
2402
|
}}
|
|
2327
2403
|
>
|
|
2328
|
-
|
|
2404
|
+
{t("brandKitDetail.delete")}
|
|
2329
2405
|
</AlertDialogAction>
|
|
2330
2406
|
</AlertDialogFooter>
|
|
2331
2407
|
</AlertDialogContent>
|
|
@@ -2334,25 +2410,24 @@ function GenerationPresetsPanel({
|
|
|
2334
2410
|
<Dialog open={open} onOpenChange={setOpen}>
|
|
2335
2411
|
<DialogContent className="sm:max-w-lg">
|
|
2336
2412
|
<DialogHeader>
|
|
2337
|
-
<DialogTitle>
|
|
2413
|
+
<DialogTitle>{t("brandKitDetail.newGenerationPreset")}</DialogTitle>
|
|
2338
2414
|
<DialogDescription>
|
|
2339
|
-
|
|
2340
|
-
image work.
|
|
2415
|
+
{t("brandKitDetail.newGenerationPresetDescription")}
|
|
2341
2416
|
</DialogDescription>
|
|
2342
2417
|
</DialogHeader>
|
|
2343
2418
|
<div className="grid gap-4">
|
|
2344
2419
|
<div className="grid gap-2">
|
|
2345
|
-
<Label htmlFor="preset-title">
|
|
2420
|
+
<Label htmlFor="preset-title">{t("brandKitDetail.name")}</Label>
|
|
2346
2421
|
<Input
|
|
2347
2422
|
id="preset-title"
|
|
2348
2423
|
value={title}
|
|
2349
2424
|
onChange={(event) => setTitle(event.target.value)}
|
|
2350
|
-
placeholder="
|
|
2425
|
+
placeholder={t("brandKitDetail.campaignLaunch")}
|
|
2351
2426
|
/>
|
|
2352
2427
|
</div>
|
|
2353
2428
|
<div className="grid grid-cols-2 gap-3">
|
|
2354
2429
|
<div className="grid gap-2">
|
|
2355
|
-
<Label>
|
|
2430
|
+
<Label>{t("brandKitDetail.category")}</Label>
|
|
2356
2431
|
<Select
|
|
2357
2432
|
value={category}
|
|
2358
2433
|
onValueChange={(value) => setCategory(value as ImageCategory)}
|
|
@@ -2370,7 +2445,7 @@ function GenerationPresetsPanel({
|
|
|
2370
2445
|
</Select>
|
|
2371
2446
|
</div>
|
|
2372
2447
|
<div className="grid gap-2">
|
|
2373
|
-
<Label>
|
|
2448
|
+
<Label>{t("brandKitDetail.aspectRatio")}</Label>
|
|
2374
2449
|
<Select
|
|
2375
2450
|
value={aspectRatio}
|
|
2376
2451
|
onValueChange={(value) =>
|
|
@@ -2391,16 +2466,22 @@ function GenerationPresetsPanel({
|
|
|
2391
2466
|
</div>
|
|
2392
2467
|
</div>
|
|
2393
2468
|
<div className="grid gap-2">
|
|
2394
|
-
<Label htmlFor="preset-template">
|
|
2469
|
+
<Label htmlFor="preset-template">
|
|
2470
|
+
{t("brandKitDetail.promptTemplate")}
|
|
2471
|
+
</Label>
|
|
2395
2472
|
<Textarea
|
|
2396
2473
|
id="preset-template"
|
|
2397
2474
|
value={promptTemplate}
|
|
2398
2475
|
onChange={(event) => setPromptTemplate(event.target.value)}
|
|
2399
|
-
placeholder="
|
|
2476
|
+
placeholder={t("brandKitDetail.promptTemplatePlaceholder", {
|
|
2477
|
+
prompt: "{{prompt}}",
|
|
2478
|
+
})}
|
|
2400
2479
|
/>
|
|
2401
2480
|
</div>
|
|
2402
2481
|
<div className="grid gap-2">
|
|
2403
|
-
<Label htmlFor="preset-text-policy">
|
|
2482
|
+
<Label htmlFor="preset-text-policy">
|
|
2483
|
+
{t("brandKitDetail.textPolicy")}
|
|
2484
|
+
</Label>
|
|
2404
2485
|
<Textarea
|
|
2405
2486
|
id="preset-text-policy"
|
|
2406
2487
|
value={textPolicy}
|
|
@@ -2410,10 +2491,10 @@ function GenerationPresetsPanel({
|
|
|
2410
2491
|
</div>
|
|
2411
2492
|
<DialogFooter>
|
|
2412
2493
|
<Button variant="outline" onClick={() => setOpen(false)}>
|
|
2413
|
-
|
|
2494
|
+
{t("brandKitDetail.cancel")}
|
|
2414
2495
|
</Button>
|
|
2415
2496
|
<Button disabled={!title.trim()} onClick={submit}>
|
|
2416
|
-
|
|
2497
|
+
{t("brandKitDetail.create")}
|
|
2417
2498
|
</Button>
|
|
2418
2499
|
</DialogFooter>
|
|
2419
2500
|
</DialogContent>
|
|
@@ -2460,6 +2541,7 @@ function AssetPreview({
|
|
|
2460
2541
|
asset: any;
|
|
2461
2542
|
fit?: "cover" | "contain";
|
|
2462
2543
|
}) {
|
|
2544
|
+
const t = useT();
|
|
2463
2545
|
const [sourceIndex, setSourceIndex] = useState(0);
|
|
2464
2546
|
const [unavailable, setUnavailable] = useState(false);
|
|
2465
2547
|
const sources = assetPreviewSources(asset, "thumbnail");
|
|
@@ -2485,7 +2567,7 @@ function AssetPreview({
|
|
|
2485
2567
|
}
|
|
2486
2568
|
/>
|
|
2487
2569
|
<div className="absolute bottom-2 left-2 rounded-md bg-background/90 px-2 py-1 text-[11px] font-medium text-foreground shadow-sm">
|
|
2488
|
-
|
|
2570
|
+
{t("brandKitDetail.video")}
|
|
2489
2571
|
</div>
|
|
2490
2572
|
</div>
|
|
2491
2573
|
);
|
|
@@ -2496,7 +2578,7 @@ function AssetPreview({
|
|
|
2496
2578
|
<div className="flex h-full w-full flex-col items-center justify-center gap-2 bg-muted/40 text-muted-foreground">
|
|
2497
2579
|
<IconPhoto className="h-6 w-6" />
|
|
2498
2580
|
<span className="px-3 text-center text-xs font-medium">
|
|
2499
|
-
|
|
2581
|
+
{t("brandKitDetail.previewUnavailable")}
|
|
2500
2582
|
</span>
|
|
2501
2583
|
</div>
|
|
2502
2584
|
);
|
|
@@ -2536,6 +2618,7 @@ function CandidateStage({
|
|
|
2536
2618
|
savingCandidateKeys: Set<string>;
|
|
2537
2619
|
onSaveCandidate: (slot: any) => void;
|
|
2538
2620
|
}) {
|
|
2621
|
+
const t = useT();
|
|
2539
2622
|
const dismissSlot = useActionMutation("dismiss-variant-slots");
|
|
2540
2623
|
const deleteAsset = useActionMutation("delete-asset");
|
|
2541
2624
|
const queryClient = useQueryClient();
|
|
@@ -2567,10 +2650,12 @@ function CandidateStage({
|
|
|
2567
2650
|
]);
|
|
2568
2651
|
}
|
|
2569
2652
|
setDismissTarget(null);
|
|
2570
|
-
toast.success("
|
|
2653
|
+
toast.success(t("brandKitDetail.dismissedCandidate"));
|
|
2571
2654
|
} catch (error) {
|
|
2572
2655
|
toast.error(
|
|
2573
|
-
error instanceof Error
|
|
2656
|
+
error instanceof Error
|
|
2657
|
+
? error.message
|
|
2658
|
+
: t("brandKitDetail.couldNotDismissCandidate"),
|
|
2574
2659
|
);
|
|
2575
2660
|
}
|
|
2576
2661
|
}
|
|
@@ -2582,18 +2667,20 @@ function CandidateStage({
|
|
|
2582
2667
|
return {
|
|
2583
2668
|
id: `slot:${slot.slotId}`,
|
|
2584
2669
|
title: isFailed
|
|
2585
|
-
? "
|
|
2670
|
+
? t("brandKitDetail.failedCandidate")
|
|
2586
2671
|
: slot.status === "ready"
|
|
2587
|
-
? "
|
|
2588
|
-
: "
|
|
2589
|
-
subtitle: slot.slotId
|
|
2590
|
-
|
|
2672
|
+
? t("brandKitDetail.readyCandidate")
|
|
2673
|
+
: t("brandKitDetail.generatingCandidate"),
|
|
2674
|
+
subtitle: slot.slotId
|
|
2675
|
+
? shortId(String(slot.slotId))
|
|
2676
|
+
: t("brandKitDetail.liveSlot"),
|
|
2677
|
+
metadata: t("brandKitDetail.candidate"),
|
|
2591
2678
|
status: slot.status,
|
|
2592
2679
|
mediaType: "image",
|
|
2593
2680
|
href: slot.assetId ? `/asset/${slot.assetId}` : undefined,
|
|
2594
2681
|
busy,
|
|
2595
|
-
preview: <VariantPreview slot={slot} fit="contain" />,
|
|
2596
|
-
thumbnail: <VariantPreview slot={slot} />,
|
|
2682
|
+
preview: <VariantPreview slot={slot} fit="contain" />, // i18n-ignore structural preview slot name
|
|
2683
|
+
thumbnail: <VariantPreview slot={slot} />, // i18n-ignore structural preview slot name
|
|
2597
2684
|
menu: (
|
|
2598
2685
|
<VariantActionsMenu slot={slot} libraryId={libraryId} busy={busy} />
|
|
2599
2686
|
),
|
|
@@ -2614,13 +2701,15 @@ function CandidateStage({
|
|
|
2614
2701
|
onClick={() =>
|
|
2615
2702
|
setDismissTarget({
|
|
2616
2703
|
kind: "slot",
|
|
2617
|
-
title: isFailed
|
|
2704
|
+
title: isFailed
|
|
2705
|
+
? t("brandKitDetail.failedCandidate")
|
|
2706
|
+
: t("brandKitDetail.readyCandidate"),
|
|
2618
2707
|
slot,
|
|
2619
2708
|
})
|
|
2620
2709
|
}
|
|
2621
2710
|
disabled={busy || dismissing}
|
|
2622
2711
|
>
|
|
2623
|
-
|
|
2712
|
+
{t("brandKitDetail.dismiss")}
|
|
2624
2713
|
</Button>
|
|
2625
2714
|
</div>
|
|
2626
2715
|
) : (
|
|
@@ -2631,13 +2720,15 @@ function CandidateStage({
|
|
|
2631
2720
|
onClick={() =>
|
|
2632
2721
|
setDismissTarget({
|
|
2633
2722
|
kind: "slot",
|
|
2634
|
-
title: isFailed
|
|
2723
|
+
title: isFailed
|
|
2724
|
+
? t("brandKitDetail.failedCandidate")
|
|
2725
|
+
: t("brandKitDetail.generatingCandidate"),
|
|
2635
2726
|
slot,
|
|
2636
2727
|
})
|
|
2637
2728
|
}
|
|
2638
2729
|
disabled={busy || dismissing}
|
|
2639
2730
|
>
|
|
2640
|
-
|
|
2731
|
+
{t("brandKitDetail.dismiss")}
|
|
2641
2732
|
</Button>
|
|
2642
2733
|
),
|
|
2643
2734
|
};
|
|
@@ -2652,16 +2743,16 @@ function CandidateStage({
|
|
|
2652
2743
|
subtitle: assetLineageSourceText(asset) || assetCategoryLabel(asset),
|
|
2653
2744
|
metadata:
|
|
2654
2745
|
asset.mediaType === "video"
|
|
2655
|
-
? "
|
|
2746
|
+
? t("brandKitDetail.video")
|
|
2656
2747
|
: asset.mimeType?.startsWith("image/")
|
|
2657
|
-
? "
|
|
2658
|
-
: "
|
|
2748
|
+
? t("brandKitDetail.image")
|
|
2749
|
+
: t("brandKitDetail.candidate"),
|
|
2659
2750
|
status: "candidate",
|
|
2660
2751
|
mediaType: asset.mediaType === "video" ? "video" : "image",
|
|
2661
2752
|
href: `/asset/${asset.id}`,
|
|
2662
2753
|
busy,
|
|
2663
|
-
preview: <AssetPreview asset={asset} fit="contain" />,
|
|
2664
|
-
thumbnail: <AssetPreview asset={asset} />,
|
|
2754
|
+
preview: <AssetPreview asset={asset} fit="contain" />, // i18n-ignore structural preview slot name
|
|
2755
|
+
thumbnail: <AssetPreview asset={asset} />, // i18n-ignore structural preview slot name
|
|
2665
2756
|
primaryActions: (
|
|
2666
2757
|
<div className="grid grid-cols-2 gap-2">
|
|
2667
2758
|
<CandidateSaveMenu
|
|
@@ -2686,7 +2777,7 @@ function CandidateStage({
|
|
|
2686
2777
|
}
|
|
2687
2778
|
disabled={busy || dismissing}
|
|
2688
2779
|
>
|
|
2689
|
-
|
|
2780
|
+
{t("brandKitDetail.dismiss")}
|
|
2690
2781
|
</Button>
|
|
2691
2782
|
</div>
|
|
2692
2783
|
),
|
|
@@ -2736,14 +2827,20 @@ function CandidateStage({
|
|
|
2736
2827
|
>
|
|
2737
2828
|
<AlertDialogContent>
|
|
2738
2829
|
<AlertDialogHeader>
|
|
2739
|
-
<AlertDialogTitle>
|
|
2830
|
+
<AlertDialogTitle>
|
|
2831
|
+
{t("brandKitDetail.dismissThisCandidate")}
|
|
2832
|
+
</AlertDialogTitle>
|
|
2740
2833
|
<AlertDialogDescription>
|
|
2741
|
-
|
|
2742
|
-
|
|
2834
|
+
{t("brandKitDetail.dismissCandidateDescription", {
|
|
2835
|
+
title:
|
|
2836
|
+
dismissTarget?.title ?? t("brandKitDetail.thisCandidate"),
|
|
2837
|
+
})}
|
|
2743
2838
|
</AlertDialogDescription>
|
|
2744
2839
|
</AlertDialogHeader>
|
|
2745
2840
|
<AlertDialogFooter>
|
|
2746
|
-
<AlertDialogCancel disabled={dismissing}>
|
|
2841
|
+
<AlertDialogCancel disabled={dismissing}>
|
|
2842
|
+
{t("brandKitDetail.cancel")}
|
|
2843
|
+
</AlertDialogCancel>
|
|
2747
2844
|
<AlertDialogAction
|
|
2748
2845
|
className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
|
|
2749
2846
|
disabled={dismissing}
|
|
@@ -2755,10 +2852,10 @@ function CandidateStage({
|
|
|
2755
2852
|
{dismissing ? (
|
|
2756
2853
|
<>
|
|
2757
2854
|
<Spinner className="h-4 w-4" />
|
|
2758
|
-
|
|
2855
|
+
{t("brandKitDetail.dismissing")}
|
|
2759
2856
|
</>
|
|
2760
2857
|
) : (
|
|
2761
|
-
"
|
|
2858
|
+
t("brandKitDetail.dismiss")
|
|
2762
2859
|
)}
|
|
2763
2860
|
</AlertDialogAction>
|
|
2764
2861
|
</AlertDialogFooter>
|
|
@@ -2769,11 +2866,13 @@ function CandidateStage({
|
|
|
2769
2866
|
<div className="flex flex-col gap-3 border-b border-border px-4 py-3 sm:flex-row sm:items-center sm:justify-between">
|
|
2770
2867
|
<div className="min-w-0">
|
|
2771
2868
|
<div className="flex items-center gap-2">
|
|
2772
|
-
<h3 className="truncate text-sm font-semibold">
|
|
2869
|
+
<h3 className="truncate text-sm font-semibold">
|
|
2870
|
+
{t("brandKitDetail.candidates")}
|
|
2871
|
+
</h3>
|
|
2773
2872
|
<Badge variant="outline">{items.length}</Badge>
|
|
2774
2873
|
</div>
|
|
2775
2874
|
<p className="mt-1 text-xs text-muted-foreground">
|
|
2776
|
-
|
|
2875
|
+
{t("brandKitDetail.generationQueue")}
|
|
2777
2876
|
</p>
|
|
2778
2877
|
</div>
|
|
2779
2878
|
<div className="flex shrink-0 items-center gap-2">
|
|
@@ -2827,7 +2926,9 @@ function CandidateStage({
|
|
|
2827
2926
|
? "border-primary ring-2 ring-primary/25"
|
|
2828
2927
|
: "border-border/80 hover:border-foreground/30",
|
|
2829
2928
|
].join(" ")}
|
|
2830
|
-
aria-label={
|
|
2929
|
+
aria-label={t("brandKitDetail.showItem", {
|
|
2930
|
+
title: item.title,
|
|
2931
|
+
})}
|
|
2831
2932
|
aria-pressed={active}
|
|
2832
2933
|
>
|
|
2833
2934
|
{item.thumbnail}
|
|
@@ -2858,7 +2959,7 @@ function CandidateStage({
|
|
|
2858
2959
|
{activeItem?.status ? (
|
|
2859
2960
|
<div className="rounded-md border border-border bg-muted/20 px-2 py-1.5">
|
|
2860
2961
|
<div className="text-[10px] font-medium uppercase text-muted-foreground">
|
|
2861
|
-
|
|
2962
|
+
{t("brandKitDetail.status")}
|
|
2862
2963
|
</div>
|
|
2863
2964
|
<div className="mt-0.5 truncate">{activeItem.status}</div>
|
|
2864
2965
|
</div>
|
|
@@ -2866,7 +2967,7 @@ function CandidateStage({
|
|
|
2866
2967
|
{activeItem?.metadata ? (
|
|
2867
2968
|
<div className="rounded-md border border-border bg-muted/20 px-2 py-1.5">
|
|
2868
2969
|
<div className="text-[10px] font-medium uppercase text-muted-foreground">
|
|
2869
|
-
|
|
2970
|
+
{t("brandKitDetail.type")}
|
|
2870
2971
|
</div>
|
|
2871
2972
|
<div className="mt-0.5 truncate">{activeItem.metadata}</div>
|
|
2872
2973
|
</div>
|
|
@@ -2878,7 +2979,7 @@ function CandidateStage({
|
|
|
2878
2979
|
</div>
|
|
2879
2980
|
{activeItem?.href ? (
|
|
2880
2981
|
<Button asChild variant="outline" size="sm">
|
|
2881
|
-
<Link to={activeItem.href}>
|
|
2982
|
+
<Link to={activeItem.href}>{t("brandKitDetail.open")}</Link>
|
|
2882
2983
|
</Button>
|
|
2883
2984
|
) : null}
|
|
2884
2985
|
</aside>
|
|
@@ -2901,6 +3002,7 @@ function CandidateSaveMenu({
|
|
|
2901
3002
|
disabled?: boolean;
|
|
2902
3003
|
onSave: (folderId: string | null) => void;
|
|
2903
3004
|
}) {
|
|
3005
|
+
const t = useT();
|
|
2904
3006
|
const createFolder = useActionMutation("create-folder");
|
|
2905
3007
|
const queryClient = useQueryClient();
|
|
2906
3008
|
const [createOpen, setCreateOpen] = useState(false);
|
|
@@ -2929,13 +3031,17 @@ function CandidateSaveMenu({
|
|
|
2929
3031
|
<DropdownMenu>
|
|
2930
3032
|
<DropdownMenuTrigger asChild>
|
|
2931
3033
|
<Button size="sm" className="h-8 px-2 text-xs" disabled={disabled}>
|
|
2932
|
-
{pending ?
|
|
3034
|
+
{pending ? (
|
|
3035
|
+
<Spinner className="h-3.5 w-3.5" />
|
|
3036
|
+
) : (
|
|
3037
|
+
t("brandKitDetail.saveTo")
|
|
3038
|
+
)}
|
|
2933
3039
|
</Button>
|
|
2934
3040
|
</DropdownMenuTrigger>
|
|
2935
3041
|
<DropdownMenuContent align="start">
|
|
2936
3042
|
<DropdownMenuItem onSelect={() => onSave(null)}>
|
|
2937
3043
|
<IconFolder className="mr-2 h-4 w-4 shrink-0" />
|
|
2938
|
-
|
|
3044
|
+
{t("brandKitDetail.unfiled")}
|
|
2939
3045
|
</DropdownMenuItem>
|
|
2940
3046
|
{folders.map((folder) => (
|
|
2941
3047
|
<DropdownMenuItem
|
|
@@ -2943,7 +3049,7 @@ function CandidateSaveMenu({
|
|
|
2943
3049
|
onSelect={() => onSave(folder.id)}
|
|
2944
3050
|
>
|
|
2945
3051
|
<IconFolder className="mr-2 h-4 w-4 shrink-0" />
|
|
2946
|
-
|
|
3052
|
+
{t("brandKitDetail.folderLabel", { title: folder.title })}
|
|
2947
3053
|
</DropdownMenuItem>
|
|
2948
3054
|
))}
|
|
2949
3055
|
<DropdownMenuSeparator />
|
|
@@ -2954,7 +3060,7 @@ function CandidateSaveMenu({
|
|
|
2954
3060
|
}}
|
|
2955
3061
|
>
|
|
2956
3062
|
<IconFolderPlus className="mr-2 h-4 w-4 shrink-0" />
|
|
2957
|
-
|
|
3063
|
+
{t("brandKitDetail.newFolderEllipsis")}
|
|
2958
3064
|
</DropdownMenuItem>
|
|
2959
3065
|
</DropdownMenuContent>
|
|
2960
3066
|
</DropdownMenu>
|
|
@@ -2971,6 +3077,7 @@ function CandidateStageActions({
|
|
|
2971
3077
|
detachedCandidates: any[];
|
|
2972
3078
|
libraryId: string;
|
|
2973
3079
|
}) {
|
|
3080
|
+
const t = useT();
|
|
2974
3081
|
const dismissSlots = useActionMutation("dismiss-variant-slots");
|
|
2975
3082
|
const deleteAssets = useActionMutation("delete-assets");
|
|
2976
3083
|
const queryClient = useQueryClient();
|
|
@@ -2980,8 +3087,14 @@ function CandidateStageActions({
|
|
|
2980
3087
|
const detachedCount = detachedCandidates.length;
|
|
2981
3088
|
const totalCount = slots.length + detachedCount;
|
|
2982
3089
|
const isClearing = dismissSlots.isPending || deleteAssets.isPending;
|
|
2983
|
-
const actionLabel =
|
|
2984
|
-
|
|
3090
|
+
const actionLabel =
|
|
3091
|
+
pending === "failed"
|
|
3092
|
+
? t("brandKitDetail.dismissFailed")
|
|
3093
|
+
: t("brandKitDetail.clearAll");
|
|
3094
|
+
const busyLabel =
|
|
3095
|
+
pending === "failed"
|
|
3096
|
+
? t("brandKitDetail.dismissing")
|
|
3097
|
+
: t("brandKitDetail.clearing");
|
|
2985
3098
|
|
|
2986
3099
|
async function handleClear(scope: "failed" | "all") {
|
|
2987
3100
|
const slotAssetIds = slots
|
|
@@ -3027,16 +3140,20 @@ function CandidateStageActions({
|
|
|
3027
3140
|
});
|
|
3028
3141
|
if (scope === "failed") {
|
|
3029
3142
|
toast.success(
|
|
3030
|
-
|
|
3143
|
+
t("brandKitDetail.dismissedFailedCandidates", {
|
|
3144
|
+
count: failedCount,
|
|
3145
|
+
}),
|
|
3031
3146
|
);
|
|
3032
3147
|
} else {
|
|
3033
3148
|
toast.success(
|
|
3034
|
-
|
|
3149
|
+
t("brandKitDetail.clearedCandidates", { count: totalCount }),
|
|
3035
3150
|
);
|
|
3036
3151
|
}
|
|
3037
3152
|
} catch (error) {
|
|
3038
3153
|
toast.error(
|
|
3039
|
-
error instanceof Error
|
|
3154
|
+
error instanceof Error
|
|
3155
|
+
? error.message
|
|
3156
|
+
: t("brandKitDetail.couldNotClearCandidates"),
|
|
3040
3157
|
);
|
|
3041
3158
|
}
|
|
3042
3159
|
}
|
|
@@ -3055,17 +3172,23 @@ function CandidateStageActions({
|
|
|
3055
3172
|
<AlertDialogHeader>
|
|
3056
3173
|
<AlertDialogTitle>
|
|
3057
3174
|
{pending === "failed"
|
|
3058
|
-
?
|
|
3059
|
-
|
|
3175
|
+
? t("brandKitDetail.dismissFailedCandidatesTitle", {
|
|
3176
|
+
count: failedCount,
|
|
3177
|
+
})
|
|
3178
|
+
: t("brandKitDetail.clearCandidatesTitle", {
|
|
3179
|
+
count: totalCount,
|
|
3180
|
+
})}
|
|
3060
3181
|
</AlertDialogTitle>
|
|
3061
3182
|
<AlertDialogDescription>
|
|
3062
3183
|
{pending === "failed"
|
|
3063
|
-
? "
|
|
3064
|
-
: "
|
|
3184
|
+
? t("brandKitDetail.dismissFailedDescription")
|
|
3185
|
+
: t("brandKitDetail.clearCandidatesDescription")}
|
|
3065
3186
|
</AlertDialogDescription>
|
|
3066
3187
|
</AlertDialogHeader>
|
|
3067
3188
|
<AlertDialogFooter>
|
|
3068
|
-
<AlertDialogCancel disabled={isClearing}>
|
|
3189
|
+
<AlertDialogCancel disabled={isClearing}>
|
|
3190
|
+
{t("brandKitDetail.cancel")}
|
|
3191
|
+
</AlertDialogCancel>
|
|
3069
3192
|
<AlertDialogAction
|
|
3070
3193
|
className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
|
|
3071
3194
|
disabled={isClearing || pending === null}
|
|
@@ -3094,11 +3217,11 @@ function CandidateStageActions({
|
|
|
3094
3217
|
variant="outline"
|
|
3095
3218
|
size="sm"
|
|
3096
3219
|
className="gap-2"
|
|
3097
|
-
aria-label="
|
|
3220
|
+
aria-label={t("brandKitDetail.candidateActions")}
|
|
3098
3221
|
disabled={isClearing}
|
|
3099
3222
|
>
|
|
3100
3223
|
<IconDotsVertical className="h-4 w-4" />
|
|
3101
|
-
|
|
3224
|
+
{t("brandKitDetail.clear")}
|
|
3102
3225
|
</Button>
|
|
3103
3226
|
</DropdownMenuTrigger>
|
|
3104
3227
|
<DropdownMenuContent align="end">
|
|
@@ -3110,7 +3233,7 @@ function CandidateStageActions({
|
|
|
3110
3233
|
}}
|
|
3111
3234
|
>
|
|
3112
3235
|
<IconTrash className="mr-2 h-4 w-4 shrink-0" />
|
|
3113
|
-
|
|
3236
|
+
{t("brandKitDetail.dismissFailed")} ({failedCount})
|
|
3114
3237
|
</DropdownMenuItem>
|
|
3115
3238
|
<DropdownMenuItem
|
|
3116
3239
|
className="text-destructive focus:bg-destructive/10 focus:text-destructive"
|
|
@@ -3121,7 +3244,7 @@ function CandidateStageActions({
|
|
|
3121
3244
|
}}
|
|
3122
3245
|
>
|
|
3123
3246
|
<IconTrash className="mr-2 h-4 w-4 shrink-0" />
|
|
3124
|
-
|
|
3247
|
+
{t("brandKitDetail.clearAll")}
|
|
3125
3248
|
</DropdownMenuItem>
|
|
3126
3249
|
</DropdownMenuContent>
|
|
3127
3250
|
</DropdownMenu>
|
|
@@ -3168,6 +3291,7 @@ function AssetSwimlaneBoard({
|
|
|
3168
3291
|
onOptimisticDelete?: (ids: string[]) => void;
|
|
3169
3292
|
onRestoreOptimisticDelete?: (ids: string[]) => void;
|
|
3170
3293
|
}) {
|
|
3294
|
+
const t = useT();
|
|
3171
3295
|
const deleteAsset = useActionMutation("delete-asset");
|
|
3172
3296
|
const deleteAssets = useActionMutation("delete-assets");
|
|
3173
3297
|
const updateAsset = useActionMutation("update-asset");
|
|
@@ -3271,11 +3395,13 @@ function AssetSwimlaneBoard({
|
|
|
3271
3395
|
{
|
|
3272
3396
|
onSuccess: () => {
|
|
3273
3397
|
finishDeleting(ids);
|
|
3274
|
-
toast.success("
|
|
3398
|
+
toast.success(t("brandKitDetail.deletedAsset"));
|
|
3275
3399
|
},
|
|
3276
3400
|
onError: (error) => {
|
|
3277
3401
|
restoreAfterDeleteError(ids);
|
|
3278
|
-
toast.error(
|
|
3402
|
+
toast.error(
|
|
3403
|
+
error.message || t("brandKitDetail.couldNotDeleteAsset"),
|
|
3404
|
+
);
|
|
3279
3405
|
},
|
|
3280
3406
|
},
|
|
3281
3407
|
);
|
|
@@ -3290,11 +3416,13 @@ function AssetSwimlaneBoard({
|
|
|
3290
3416
|
onSuccess: (result: any) => {
|
|
3291
3417
|
finishDeleting(ids);
|
|
3292
3418
|
const count = Number(result?.deletedCount ?? ids.length);
|
|
3293
|
-
toast.success(
|
|
3419
|
+
toast.success(t("brandKitDetail.deletedAssets", { count }));
|
|
3294
3420
|
},
|
|
3295
3421
|
onError: (error) => {
|
|
3296
3422
|
restoreAfterDeleteError(ids);
|
|
3297
|
-
toast.error(
|
|
3423
|
+
toast.error(
|
|
3424
|
+
error.message || t("brandKitDetail.couldNotDeleteSelectedAssets"),
|
|
3425
|
+
);
|
|
3298
3426
|
},
|
|
3299
3427
|
},
|
|
3300
3428
|
);
|
|
@@ -3349,16 +3477,20 @@ function AssetSwimlaneBoard({
|
|
|
3349
3477
|
}
|
|
3350
3478
|
toast.success(
|
|
3351
3479
|
enabled
|
|
3352
|
-
?
|
|
3353
|
-
|
|
3480
|
+
? t("brandKitDetail.addedAssetsToReferences", {
|
|
3481
|
+
count: assetList.length,
|
|
3482
|
+
})
|
|
3483
|
+
: t("brandKitDetail.removedAssetsFromReferences", {
|
|
3484
|
+
count: assetList.length,
|
|
3485
|
+
}),
|
|
3354
3486
|
);
|
|
3355
3487
|
} catch (error) {
|
|
3356
3488
|
toast.error(
|
|
3357
3489
|
error instanceof Error
|
|
3358
3490
|
? error.message
|
|
3359
3491
|
: enabled
|
|
3360
|
-
? "
|
|
3361
|
-
: "
|
|
3492
|
+
? t("brandKitDetail.couldNotAddSelectedToReferences")
|
|
3493
|
+
: t("brandKitDetail.couldNotRemoveSelectedFromReferences"),
|
|
3362
3494
|
);
|
|
3363
3495
|
return;
|
|
3364
3496
|
} finally {
|
|
@@ -3371,12 +3503,16 @@ function AssetSwimlaneBoard({
|
|
|
3371
3503
|
return {
|
|
3372
3504
|
id: `upload:${upload.id}`,
|
|
3373
3505
|
title: upload.name,
|
|
3374
|
-
subtitle: isChecking
|
|
3375
|
-
|
|
3506
|
+
subtitle: isChecking
|
|
3507
|
+
? t("brandKitDetail.checkingUpload")
|
|
3508
|
+
: t("brandKitDetail.uploading"),
|
|
3509
|
+
status: isChecking
|
|
3510
|
+
? t("brandKitDetail.checking")
|
|
3511
|
+
: t("brandKitDetail.uploading"),
|
|
3376
3512
|
mediaType: upload.mediaType,
|
|
3377
3513
|
busy: true,
|
|
3378
|
-
preview: <PendingUploadPreview upload={upload} fit="contain" />,
|
|
3379
|
-
thumbnail: <PendingUploadPreview upload={upload} />,
|
|
3514
|
+
preview: <PendingUploadPreview upload={upload} fit="contain" />, // i18n-ignore structural preview slot name
|
|
3515
|
+
thumbnail: <PendingUploadPreview upload={upload} />, // i18n-ignore structural preview slot name
|
|
3380
3516
|
};
|
|
3381
3517
|
}
|
|
3382
3518
|
|
|
@@ -3413,18 +3549,20 @@ function AssetSwimlaneBoard({
|
|
|
3413
3549
|
subtitle: sourceText || categoryLabel || asset.status,
|
|
3414
3550
|
metadata:
|
|
3415
3551
|
asset.mediaType === "video"
|
|
3416
|
-
? "
|
|
3552
|
+
? t("brandKitDetail.video")
|
|
3417
3553
|
: asset.mimeType?.startsWith("image/")
|
|
3418
|
-
? "
|
|
3419
|
-
: asset.mimeType || "
|
|
3420
|
-
status: isReference
|
|
3554
|
+
? t("brandKitDetail.image")
|
|
3555
|
+
: asset.mimeType || t("brandKitDetail.asset"),
|
|
3556
|
+
status: isReference
|
|
3557
|
+
? t("brandKitDetail.reference")
|
|
3558
|
+
: t("brandKitDetail.saved"),
|
|
3421
3559
|
mediaType: asset.mediaType === "video" ? "video" : "image",
|
|
3422
3560
|
href: `/asset/${asset.id}`,
|
|
3423
3561
|
selected: selectedIds.has(asset.id),
|
|
3424
3562
|
deleting: deletingIds.has(asset.id),
|
|
3425
3563
|
busy,
|
|
3426
|
-
preview: <AssetPreview asset={asset} fit="contain" />,
|
|
3427
|
-
thumbnail: <AssetPreview asset={asset} />,
|
|
3564
|
+
preview: <AssetPreview asset={asset} fit="contain" />, // i18n-ignore structural preview slot name
|
|
3565
|
+
thumbnail: <AssetPreview asset={asset} />, // i18n-ignore structural preview slot name
|
|
3428
3566
|
onToggle: (checked) => toggleAsset(asset.id, checked),
|
|
3429
3567
|
menu: (
|
|
3430
3568
|
<AssetActionsMenu
|
|
@@ -3453,7 +3591,11 @@ function AssetSwimlaneBoard({
|
|
|
3453
3591
|
onClick={onSave}
|
|
3454
3592
|
disabled={busy}
|
|
3455
3593
|
>
|
|
3456
|
-
{saving ?
|
|
3594
|
+
{saving ? (
|
|
3595
|
+
<Spinner className="h-3.5 w-3.5" />
|
|
3596
|
+
) : (
|
|
3597
|
+
t("brandKitDetail.save")
|
|
3598
|
+
)}
|
|
3457
3599
|
</Button>
|
|
3458
3600
|
) : null}
|
|
3459
3601
|
{canMoveToReferences ? (
|
|
@@ -3465,12 +3607,12 @@ function AssetSwimlaneBoard({
|
|
|
3465
3607
|
}
|
|
3466
3608
|
onClick={onMoveToReferences}
|
|
3467
3609
|
disabled={busy}
|
|
3468
|
-
title="
|
|
3610
|
+
title={t("brandKitDetail.addToReferences")}
|
|
3469
3611
|
>
|
|
3470
3612
|
{promoting ? (
|
|
3471
3613
|
<Spinner className="h-3.5 w-3.5" />
|
|
3472
3614
|
) : (
|
|
3473
|
-
"
|
|
3615
|
+
t("brandKitDetail.addToReferences")
|
|
3474
3616
|
)}
|
|
3475
3617
|
</Button>
|
|
3476
3618
|
) : null}
|
|
@@ -3483,12 +3625,12 @@ function AssetSwimlaneBoard({
|
|
|
3483
3625
|
}
|
|
3484
3626
|
onClick={onRemoveFromReferences}
|
|
3485
3627
|
disabled={busy}
|
|
3486
|
-
title="
|
|
3628
|
+
title={t("brandKitDetail.removeFromReferences")}
|
|
3487
3629
|
>
|
|
3488
3630
|
{promoting ? (
|
|
3489
3631
|
<Spinner className="h-3.5 w-3.5" />
|
|
3490
3632
|
) : (
|
|
3491
|
-
"
|
|
3633
|
+
t("brandKitDetail.removeFromReferences")
|
|
3492
3634
|
)}
|
|
3493
3635
|
</Button>
|
|
3494
3636
|
) : null}
|
|
@@ -3523,10 +3665,10 @@ function AssetSwimlaneBoard({
|
|
|
3523
3665
|
<div className="flex min-h-[280px] w-full flex-col items-center justify-center rounded-lg border border-dashed border-border bg-muted/15 p-8 text-center">
|
|
3524
3666
|
<IconSearch className="h-9 w-9 text-muted-foreground" />
|
|
3525
3667
|
<span className="mt-4 text-base font-semibold">
|
|
3526
|
-
|
|
3668
|
+
{t("brandKitDetail.noAssetsMatch")}
|
|
3527
3669
|
</span>
|
|
3528
3670
|
<span className="mt-2 max-w-md text-sm text-muted-foreground">
|
|
3529
|
-
|
|
3671
|
+
{t("brandKitDetail.noAssetsMatchDescription")}
|
|
3530
3672
|
</span>
|
|
3531
3673
|
</div>
|
|
3532
3674
|
);
|
|
@@ -3545,10 +3687,11 @@ function AssetSwimlaneBoard({
|
|
|
3545
3687
|
className="flex min-h-[360px] w-full flex-col items-center justify-center rounded-lg border border-dashed border-border bg-muted/20 p-8 text-center"
|
|
3546
3688
|
>
|
|
3547
3689
|
<IconPhotoPlus className="h-10 w-10 text-muted-foreground" />
|
|
3548
|
-
<span className="mt-4 text-base font-semibold">
|
|
3690
|
+
<span className="mt-4 text-base font-semibold">
|
|
3691
|
+
{t("brandKitDetail.addAssets")}
|
|
3692
|
+
</span>
|
|
3549
3693
|
<span className="mt-2 max-w-md text-sm text-muted-foreground">
|
|
3550
|
-
|
|
3551
|
-
assets that should guide future generations as references.
|
|
3694
|
+
{t("brandKitDetail.addAssetsDescription")}
|
|
3552
3695
|
</span>
|
|
3553
3696
|
</button>
|
|
3554
3697
|
);
|
|
@@ -3566,17 +3709,19 @@ function AssetSwimlaneBoard({
|
|
|
3566
3709
|
<AlertDialogHeader>
|
|
3567
3710
|
<AlertDialogTitle>
|
|
3568
3711
|
{confirmDeleteIds.length > 1
|
|
3569
|
-
?
|
|
3570
|
-
|
|
3712
|
+
? t("brandKitDetail.deleteAssetsTitle", {
|
|
3713
|
+
count: confirmDeleteIds.length,
|
|
3714
|
+
})
|
|
3715
|
+
: t("brandKitDetail.deleteAssetsTitle", { count: 1 })}
|
|
3571
3716
|
</AlertDialogTitle>
|
|
3572
3717
|
<AlertDialogDescription>
|
|
3573
3718
|
{confirmDeleteIds.length > 1
|
|
3574
|
-
? "
|
|
3575
|
-
: "
|
|
3719
|
+
? t("brandKitDetail.deleteManyDescription")
|
|
3720
|
+
: t("brandKitDetail.deleteOneDescription")}
|
|
3576
3721
|
</AlertDialogDescription>
|
|
3577
3722
|
</AlertDialogHeader>
|
|
3578
3723
|
<AlertDialogFooter>
|
|
3579
|
-
<AlertDialogCancel>
|
|
3724
|
+
<AlertDialogCancel>{t("brandKitDetail.cancel")}</AlertDialogCancel>
|
|
3580
3725
|
<AlertDialogAction
|
|
3581
3726
|
className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
|
|
3582
3727
|
disabled={!confirmDeleteIds.length || deleting}
|
|
@@ -3585,7 +3730,7 @@ function AssetSwimlaneBoard({
|
|
|
3585
3730
|
handleDeleteConfirmed();
|
|
3586
3731
|
}}
|
|
3587
3732
|
>
|
|
3588
|
-
|
|
3733
|
+
{t("brandKitDetail.delete")}
|
|
3589
3734
|
</AlertDialogAction>
|
|
3590
3735
|
</AlertDialogFooter>
|
|
3591
3736
|
</AlertDialogContent>
|
|
@@ -3598,15 +3743,20 @@ function AssetSwimlaneBoard({
|
|
|
3598
3743
|
checked={allSelected}
|
|
3599
3744
|
disabled={!boardAssets.length || deleting}
|
|
3600
3745
|
onCheckedChange={(checked) => toggleAll(checked === true)}
|
|
3601
|
-
aria-label="
|
|
3746
|
+
aria-label={t("brandKitDetail.selectAllVisibleAssets")}
|
|
3602
3747
|
/>
|
|
3603
|
-
{allSelected
|
|
3748
|
+
{allSelected
|
|
3749
|
+
? t("brandKitDetail.deselectAll")
|
|
3750
|
+
: t("brandKitDetail.selectAll")}
|
|
3604
3751
|
</label>
|
|
3605
3752
|
<span className="text-xs text-muted-foreground">
|
|
3606
|
-
{
|
|
3607
|
-
|
|
3753
|
+
{t("brandKitDetail.visibleAssets", {
|
|
3754
|
+
count: boardAssets.length,
|
|
3755
|
+
})}
|
|
3608
3756
|
{referenceAssets.length > 0
|
|
3609
|
-
? ` · ${
|
|
3757
|
+
? ` · ${t("brandKitDetail.referenceCount", {
|
|
3758
|
+
count: referenceAssets.length,
|
|
3759
|
+
})}`
|
|
3610
3760
|
: ""}
|
|
3611
3761
|
</span>
|
|
3612
3762
|
{selectedCount > 0 ? (
|
|
@@ -3616,7 +3766,7 @@ function AssetSwimlaneBoard({
|
|
|
3616
3766
|
size="sm"
|
|
3617
3767
|
onClick={() => onSelectedIdsChange(new Set())}
|
|
3618
3768
|
>
|
|
3619
|
-
|
|
3769
|
+
{t("brandKitDetail.clear")}
|
|
3620
3770
|
</Button>
|
|
3621
3771
|
) : null}
|
|
3622
3772
|
</div>
|
|
@@ -3637,8 +3787,9 @@ function AssetSwimlaneBoard({
|
|
|
3637
3787
|
<div className="flex min-w-0 items-center gap-2 text-sm font-medium">
|
|
3638
3788
|
<Spinner className="h-4 w-4" />
|
|
3639
3789
|
<span className="truncate">
|
|
3640
|
-
|
|
3641
|
-
|
|
3790
|
+
{t("brandKitDetail.deletingAssets", {
|
|
3791
|
+
count: pendingDeleteCount,
|
|
3792
|
+
})}
|
|
3642
3793
|
</span>
|
|
3643
3794
|
</div>
|
|
3644
3795
|
) : (
|
|
@@ -3646,15 +3797,20 @@ function AssetSwimlaneBoard({
|
|
|
3646
3797
|
<Checkbox
|
|
3647
3798
|
checked={allSelected}
|
|
3648
3799
|
onCheckedChange={(checked) => toggleAll(checked === true)}
|
|
3649
|
-
aria-label="
|
|
3800
|
+
aria-label={t("brandKitDetail.selectAllAssetsBoard")}
|
|
3650
3801
|
/>
|
|
3651
3802
|
<span className="truncate">
|
|
3652
3803
|
{selectedCount > 0
|
|
3653
|
-
?
|
|
3654
|
-
:
|
|
3804
|
+
? t("brandKitDetail.selectedCount", { count: selectedCount })
|
|
3805
|
+
: t("brandKitDetail.boardAssetCount", {
|
|
3806
|
+
count: boardAssets.length,
|
|
3807
|
+
})}
|
|
3655
3808
|
</span>
|
|
3656
3809
|
<span className="hidden text-xs text-muted-foreground sm:inline">
|
|
3657
|
-
{
|
|
3810
|
+
{t("brandKitDetail.referencesSavedCounts", {
|
|
3811
|
+
references: referenceAssets.length,
|
|
3812
|
+
saved: savedAssets.length,
|
|
3813
|
+
})}
|
|
3658
3814
|
</span>
|
|
3659
3815
|
</div>
|
|
3660
3816
|
)}
|
|
@@ -3675,7 +3831,7 @@ function AssetSwimlaneBoard({
|
|
|
3675
3831
|
) : (
|
|
3676
3832
|
<IconPhotoPlus className="h-4 w-4" />
|
|
3677
3833
|
)}
|
|
3678
|
-
|
|
3834
|
+
{t("brandKitDetail.addToReferences")}
|
|
3679
3835
|
</Button>
|
|
3680
3836
|
) : null}
|
|
3681
3837
|
{selectedReferenceAssets.length > 0 ? (
|
|
@@ -3693,7 +3849,7 @@ function AssetSwimlaneBoard({
|
|
|
3693
3849
|
) : (
|
|
3694
3850
|
<IconX className="h-4 w-4" />
|
|
3695
3851
|
)}
|
|
3696
|
-
|
|
3852
|
+
{t("brandKitDetail.removeFromReferences")}
|
|
3697
3853
|
</Button>
|
|
3698
3854
|
) : null}
|
|
3699
3855
|
<Button
|
|
@@ -3702,7 +3858,7 @@ function AssetSwimlaneBoard({
|
|
|
3702
3858
|
size="sm"
|
|
3703
3859
|
onClick={() => onSelectedIdsChange(new Set())}
|
|
3704
3860
|
>
|
|
3705
|
-
|
|
3861
|
+
{t("brandKitDetail.clear")}
|
|
3706
3862
|
</Button>
|
|
3707
3863
|
<Button
|
|
3708
3864
|
type="button"
|
|
@@ -3718,7 +3874,7 @@ function AssetSwimlaneBoard({
|
|
|
3718
3874
|
) : (
|
|
3719
3875
|
<IconTrash className="h-4 w-4" />
|
|
3720
3876
|
)}
|
|
3721
|
-
|
|
3877
|
+
{t("brandKitDetail.delete")}
|
|
3722
3878
|
</Button>
|
|
3723
3879
|
</div>
|
|
3724
3880
|
) : null}
|
|
@@ -3729,37 +3885,41 @@ function AssetSwimlaneBoard({
|
|
|
3729
3885
|
<AssetCardsView items={visibleGalleryItems} />
|
|
3730
3886
|
) : (
|
|
3731
3887
|
<SwimLane
|
|
3732
|
-
title={
|
|
3888
|
+
title={
|
|
3889
|
+
scope === "references"
|
|
3890
|
+
? t("brandKitDetail.references")
|
|
3891
|
+
: t("brandKitDetail.library")
|
|
3892
|
+
}
|
|
3733
3893
|
eyebrow={
|
|
3734
3894
|
scope === "references"
|
|
3735
|
-
? "
|
|
3736
|
-
: "
|
|
3895
|
+
? t("brandKitDetail.referencesEyebrow")
|
|
3896
|
+
: t("brandKitDetail.libraryEyebrow")
|
|
3737
3897
|
}
|
|
3738
3898
|
items={visibleGalleryItems}
|
|
3739
3899
|
action={
|
|
3740
3900
|
<Button variant="outline" size="sm" onClick={onUploadClick}>
|
|
3741
|
-
|
|
3901
|
+
{t("brandKitDetail.add")}
|
|
3742
3902
|
</Button>
|
|
3743
3903
|
}
|
|
3744
3904
|
empty={
|
|
3745
3905
|
scope === "references" && assets.length > 0 ? (
|
|
3746
3906
|
<LaneActionEmpty
|
|
3747
|
-
title="
|
|
3748
|
-
body="
|
|
3907
|
+
title={t("brandKitDetail.noReferencesTitle")}
|
|
3908
|
+
body={t("brandKitDetail.noReferencesBody")}
|
|
3749
3909
|
onClick={() => onScopeChange("all")}
|
|
3750
|
-
action="
|
|
3910
|
+
action={t("brandKitDetail.showAll")}
|
|
3751
3911
|
/>
|
|
3752
3912
|
) : hideEmptyLanes ? (
|
|
3753
3913
|
<LaneActionEmpty
|
|
3754
|
-
title="
|
|
3755
|
-
body="
|
|
3914
|
+
title={t("brandKitDetail.noAssetsMatch")}
|
|
3915
|
+
body={t("brandKitDetail.noAssetsMatchDescription")}
|
|
3756
3916
|
onClick={() => onScopeChange("all")}
|
|
3757
|
-
action="
|
|
3917
|
+
action={t("brandKitDetail.showAll")}
|
|
3758
3918
|
/>
|
|
3759
3919
|
) : (
|
|
3760
3920
|
<LaneDropTarget
|
|
3761
|
-
title="
|
|
3762
|
-
body="
|
|
3921
|
+
title={t("brandKitDetail.dropAssetsHere")}
|
|
3922
|
+
body={t("brandKitDetail.dropAssetsBody")}
|
|
3763
3923
|
onClick={onUploadClick}
|
|
3764
3924
|
onDrop={onDrop}
|
|
3765
3925
|
/>
|
|
@@ -3778,6 +3938,7 @@ function AssetViewModeToggle({
|
|
|
3778
3938
|
value: AssetViewMode;
|
|
3779
3939
|
onChange: (mode: AssetViewMode) => void;
|
|
3780
3940
|
}) {
|
|
3941
|
+
const t = useT();
|
|
3781
3942
|
const options: Array<{
|
|
3782
3943
|
value: AssetViewMode;
|
|
3783
3944
|
label: string;
|
|
@@ -3785,12 +3946,12 @@ function AssetViewModeToggle({
|
|
|
3785
3946
|
}> = [
|
|
3786
3947
|
{
|
|
3787
3948
|
value: "lanes",
|
|
3788
|
-
label: "
|
|
3949
|
+
label: t("brandKitDetail.lanes"),
|
|
3789
3950
|
icon: <IconLayoutBottombar className="h-4 w-4" />,
|
|
3790
3951
|
},
|
|
3791
3952
|
{
|
|
3792
3953
|
value: "cards",
|
|
3793
|
-
label: "
|
|
3954
|
+
label: t("brandKitDetail.cards"),
|
|
3794
3955
|
icon: <IconLayoutGrid className="h-4 w-4" />,
|
|
3795
3956
|
},
|
|
3796
3957
|
];
|
|
@@ -3799,7 +3960,7 @@ function AssetViewModeToggle({
|
|
|
3799
3960
|
<TooltipProvider delayDuration={150}>
|
|
3800
3961
|
<div
|
|
3801
3962
|
role="group"
|
|
3802
|
-
aria-label="
|
|
3963
|
+
aria-label={t("brandKitDetail.assetView")}
|
|
3803
3964
|
className="inline-flex shrink-0 gap-1 rounded-md border border-border bg-muted/20 p-1"
|
|
3804
3965
|
>
|
|
3805
3966
|
{options.map((option) => {
|
|
@@ -3816,14 +3977,20 @@ function AssetViewModeToggle({
|
|
|
3816
3977
|
? "bg-background text-foreground shadow-sm"
|
|
3817
3978
|
: "text-muted-foreground hover:bg-background/60 hover:text-foreground",
|
|
3818
3979
|
].join(" ")}
|
|
3819
|
-
aria-label={
|
|
3980
|
+
aria-label={t("brandKitDetail.viewModeLabel", {
|
|
3981
|
+
label: option.label,
|
|
3982
|
+
})}
|
|
3820
3983
|
aria-pressed={active}
|
|
3821
|
-
title={
|
|
3984
|
+
title={t("brandKitDetail.viewModeLabel", {
|
|
3985
|
+
label: option.label,
|
|
3986
|
+
})}
|
|
3822
3987
|
>
|
|
3823
3988
|
{option.icon}
|
|
3824
3989
|
</button>
|
|
3825
3990
|
</TooltipTrigger>
|
|
3826
|
-
<TooltipContent side="bottom">
|
|
3991
|
+
<TooltipContent side="bottom">
|
|
3992
|
+
{t("brandKitDetail.viewModeLabel", { label: option.label })}
|
|
3993
|
+
</TooltipContent>
|
|
3827
3994
|
</Tooltip>
|
|
3828
3995
|
);
|
|
3829
3996
|
})}
|
|
@@ -3843,19 +4010,24 @@ function AssetScopeToggle({
|
|
|
3843
4010
|
allCount: number;
|
|
3844
4011
|
referenceCount: number;
|
|
3845
4012
|
}) {
|
|
4013
|
+
const t = useT();
|
|
3846
4014
|
const options: Array<{
|
|
3847
4015
|
value: AssetLibraryScope;
|
|
3848
4016
|
label: string;
|
|
3849
4017
|
count: number;
|
|
3850
4018
|
}> = [
|
|
3851
|
-
{ value: "all", label: "
|
|
3852
|
-
{
|
|
4019
|
+
{ value: "all", label: t("brandKitDetail.all"), count: allCount },
|
|
4020
|
+
{
|
|
4021
|
+
value: "references",
|
|
4022
|
+
label: t("brandKitDetail.references"),
|
|
4023
|
+
count: referenceCount,
|
|
4024
|
+
},
|
|
3853
4025
|
];
|
|
3854
4026
|
|
|
3855
4027
|
return (
|
|
3856
4028
|
<div
|
|
3857
4029
|
role="group"
|
|
3858
|
-
aria-label="
|
|
4030
|
+
aria-label={t("brandKitDetail.assetScope")}
|
|
3859
4031
|
className="inline-flex shrink-0 gap-1 rounded-md border border-border bg-muted/20 p-1"
|
|
3860
4032
|
>
|
|
3861
4033
|
{options.map((option) => {
|
|
@@ -3892,10 +4064,11 @@ function AssetScopeToggle({
|
|
|
3892
4064
|
}
|
|
3893
4065
|
|
|
3894
4066
|
function AssetCardsView({ items }: { items: LaneGalleryItem[] }) {
|
|
4067
|
+
const t = useT();
|
|
3895
4068
|
if (!items.length) {
|
|
3896
4069
|
return (
|
|
3897
4070
|
<div className="flex min-h-[220px] items-center justify-center rounded-lg border border-dashed border-border bg-muted/15 p-8 text-center text-sm text-muted-foreground">
|
|
3898
|
-
|
|
4071
|
+
{t("brandKitDetail.noAssetsToShow")}
|
|
3899
4072
|
</div>
|
|
3900
4073
|
);
|
|
3901
4074
|
}
|
|
@@ -3927,7 +4100,9 @@ function AssetCardsView({ items }: { items: LaneGalleryItem[] }) {
|
|
|
3927
4100
|
onCheckedChange={(checked) =>
|
|
3928
4101
|
item.onToggle?.(checked === true)
|
|
3929
4102
|
}
|
|
3930
|
-
aria-label={
|
|
4103
|
+
aria-label={t("brandKitDetail.selectItem", {
|
|
4104
|
+
title: item.title,
|
|
4105
|
+
})}
|
|
3931
4106
|
className="border-background bg-background/90 shadow-sm"
|
|
3932
4107
|
/>
|
|
3933
4108
|
) : null}
|
|
@@ -3979,6 +4154,7 @@ function SwimLane({
|
|
|
3979
4154
|
action?: ReactNode;
|
|
3980
4155
|
empty: ReactNode;
|
|
3981
4156
|
}) {
|
|
4157
|
+
const t = useT();
|
|
3982
4158
|
const [activeItemId, setActiveItemId] = useState<string | null>(null);
|
|
3983
4159
|
const itemIds = items.map((item) => item.id).join("\n");
|
|
3984
4160
|
const activeItem =
|
|
@@ -4050,7 +4226,9 @@ function SwimLane({
|
|
|
4050
4226
|
: "border-border/80 hover:border-foreground/30",
|
|
4051
4227
|
item.deleting ? "opacity-60" : "",
|
|
4052
4228
|
].join(" ")}
|
|
4053
|
-
aria-label={
|
|
4229
|
+
aria-label={t("brandKitDetail.showItem", {
|
|
4230
|
+
title: item.title,
|
|
4231
|
+
})}
|
|
4054
4232
|
aria-pressed={active}
|
|
4055
4233
|
>
|
|
4056
4234
|
{item.thumbnail}
|
|
@@ -4089,7 +4267,9 @@ function SwimLane({
|
|
|
4089
4267
|
onCheckedChange={(checked) =>
|
|
4090
4268
|
activeItem.onToggle?.(checked === true)
|
|
4091
4269
|
}
|
|
4092
|
-
aria-label={
|
|
4270
|
+
aria-label={t("brandKitDetail.selectItem", {
|
|
4271
|
+
title: activeItem.title,
|
|
4272
|
+
})}
|
|
4093
4273
|
className="mt-0.5"
|
|
4094
4274
|
/>
|
|
4095
4275
|
) : null}
|
|
@@ -4108,7 +4288,7 @@ function SwimLane({
|
|
|
4108
4288
|
{activeItem.status ? (
|
|
4109
4289
|
<div className="rounded-md border border-border bg-muted/20 px-2 py-1.5">
|
|
4110
4290
|
<div className="text-[10px] font-medium uppercase text-muted-foreground">
|
|
4111
|
-
|
|
4291
|
+
{t("brandKitDetail.status")}
|
|
4112
4292
|
</div>
|
|
4113
4293
|
<div className="mt-0.5 truncate">{activeItem.status}</div>
|
|
4114
4294
|
</div>
|
|
@@ -4116,7 +4296,7 @@ function SwimLane({
|
|
|
4116
4296
|
{activeItem.metadata ? (
|
|
4117
4297
|
<div className="rounded-md border border-border bg-muted/20 px-2 py-1.5">
|
|
4118
4298
|
<div className="text-[10px] font-medium uppercase text-muted-foreground">
|
|
4119
|
-
|
|
4299
|
+
{t("brandKitDetail.type")}
|
|
4120
4300
|
</div>
|
|
4121
4301
|
<div className="mt-0.5 truncate">
|
|
4122
4302
|
{activeItem.metadata}
|
|
@@ -4133,7 +4313,7 @@ function SwimLane({
|
|
|
4133
4313
|
<div className="flex shrink-0 items-center gap-2">
|
|
4134
4314
|
{activeItem?.href ? (
|
|
4135
4315
|
<Button asChild variant="outline" size="sm" className="flex-1">
|
|
4136
|
-
<Link to={activeItem.href}>
|
|
4316
|
+
<Link to={activeItem.href}>{t("brandKitDetail.open")}</Link>
|
|
4137
4317
|
</Button>
|
|
4138
4318
|
) : null}
|
|
4139
4319
|
{action ? <div className="shrink-0">{action}</div> : null}
|
|
@@ -4209,6 +4389,7 @@ function PendingUploadPreview({
|
|
|
4209
4389
|
upload: PendingUpload;
|
|
4210
4390
|
fit?: "cover" | "contain";
|
|
4211
4391
|
}) {
|
|
4392
|
+
const t = useT();
|
|
4212
4393
|
const isChecking = upload.status === "checking";
|
|
4213
4394
|
return (
|
|
4214
4395
|
<div
|
|
@@ -4220,7 +4401,9 @@ function PendingUploadPreview({
|
|
|
4220
4401
|
<div className="flex flex-col items-center gap-2 text-muted-foreground">
|
|
4221
4402
|
<Spinner className={fit === "contain" ? "h-6 w-6" : "h-4 w-4"} />
|
|
4222
4403
|
<span className="text-xs font-medium">
|
|
4223
|
-
{isChecking
|
|
4404
|
+
{isChecking
|
|
4405
|
+
? t("brandKitDetail.checking")
|
|
4406
|
+
: t("brandKitDetail.uploading")}
|
|
4224
4407
|
</span>
|
|
4225
4408
|
</div>
|
|
4226
4409
|
</div>
|
|
@@ -4244,6 +4427,7 @@ function AssetActionsMenu({
|
|
|
4244
4427
|
onMoveToReferences?: () => void;
|
|
4245
4428
|
onRemoveFromReferences?: () => void;
|
|
4246
4429
|
}) {
|
|
4430
|
+
const t = useT();
|
|
4247
4431
|
return (
|
|
4248
4432
|
<DropdownMenu>
|
|
4249
4433
|
<DropdownMenuTrigger asChild>
|
|
@@ -4252,7 +4436,7 @@ function AssetActionsMenu({
|
|
|
4252
4436
|
variant="secondary"
|
|
4253
4437
|
size="icon"
|
|
4254
4438
|
className="h-8 w-8 shadow-sm"
|
|
4255
|
-
aria-label="
|
|
4439
|
+
aria-label={t("brandKitDetail.assetActions")}
|
|
4256
4440
|
disabled={busy}
|
|
4257
4441
|
>
|
|
4258
4442
|
<IconDotsVertical className="h-4 w-4" />
|
|
@@ -4260,7 +4444,9 @@ function AssetActionsMenu({
|
|
|
4260
4444
|
</DropdownMenuTrigger>
|
|
4261
4445
|
<DropdownMenuContent align="end">
|
|
4262
4446
|
<DropdownMenuItem asChild>
|
|
4263
|
-
<Link to={`/asset/${asset.id}`}>
|
|
4447
|
+
<Link to={`/asset/${asset.id}`}>
|
|
4448
|
+
{t("brandKitDetail.viewDetails")}
|
|
4449
|
+
</Link>
|
|
4264
4450
|
</DropdownMenuItem>
|
|
4265
4451
|
{onMoveToReferences ? (
|
|
4266
4452
|
<DropdownMenuItem
|
|
@@ -4270,7 +4456,7 @@ function AssetActionsMenu({
|
|
|
4270
4456
|
}}
|
|
4271
4457
|
>
|
|
4272
4458
|
<IconPhotoPlus className="mr-2 h-4 w-4 shrink-0" />
|
|
4273
|
-
|
|
4459
|
+
{t("brandKitDetail.addToReferences")}
|
|
4274
4460
|
</DropdownMenuItem>
|
|
4275
4461
|
) : null}
|
|
4276
4462
|
{onRemoveFromReferences ? (
|
|
@@ -4281,13 +4467,13 @@ function AssetActionsMenu({
|
|
|
4281
4467
|
}}
|
|
4282
4468
|
>
|
|
4283
4469
|
<IconX className="mr-2 h-4 w-4 shrink-0" />
|
|
4284
|
-
|
|
4470
|
+
{t("brandKitDetail.removeFromReferences")}
|
|
4285
4471
|
</DropdownMenuItem>
|
|
4286
4472
|
) : null}
|
|
4287
4473
|
<DropdownMenuSub>
|
|
4288
4474
|
<DropdownMenuSubTrigger>
|
|
4289
4475
|
<IconFolder className="mr-2 h-4 w-4 shrink-0" />
|
|
4290
|
-
|
|
4476
|
+
{t("brandKitDetail.moveTo")}
|
|
4291
4477
|
</DropdownMenuSubTrigger>
|
|
4292
4478
|
<DropdownMenuSubContent>
|
|
4293
4479
|
<DropdownMenuItem
|
|
@@ -4298,7 +4484,7 @@ function AssetActionsMenu({
|
|
|
4298
4484
|
})
|
|
4299
4485
|
}
|
|
4300
4486
|
>
|
|
4301
|
-
|
|
4487
|
+
{t("brandKitDetail.unfiled")}
|
|
4302
4488
|
</DropdownMenuItem>
|
|
4303
4489
|
{folders.map((folder) => (
|
|
4304
4490
|
<DropdownMenuItem
|
|
@@ -4321,7 +4507,7 @@ function AssetActionsMenu({
|
|
|
4321
4507
|
onSelect={onDelete}
|
|
4322
4508
|
>
|
|
4323
4509
|
<IconTrash className="mr-2 h-4 w-4 shrink-0" />
|
|
4324
|
-
|
|
4510
|
+
{t("brandKitDetail.delete")}
|
|
4325
4511
|
</DropdownMenuItem>
|
|
4326
4512
|
</DropdownMenuContent>
|
|
4327
4513
|
</DropdownMenu>
|
|
@@ -4335,6 +4521,7 @@ function VariantPreview({
|
|
|
4335
4521
|
slot: any;
|
|
4336
4522
|
fit?: "cover" | "contain";
|
|
4337
4523
|
}) {
|
|
4524
|
+
const t = useT();
|
|
4338
4525
|
const [sourceIndex, setSourceIndex] = useState(0);
|
|
4339
4526
|
const [previewUnavailable, setPreviewUnavailable] = useState(false);
|
|
4340
4527
|
const previewSources = assetPreviewSources(slot, "thumbnail");
|
|
@@ -4372,7 +4559,7 @@ function VariantPreview({
|
|
|
4372
4559
|
</div>
|
|
4373
4560
|
) : previewUnavailable ? (
|
|
4374
4561
|
<div className="p-4 text-center text-xs text-muted-foreground">
|
|
4375
|
-
|
|
4562
|
+
{t("brandKitDetail.previewUnavailable")}
|
|
4376
4563
|
</div>
|
|
4377
4564
|
) : (
|
|
4378
4565
|
<IconPhoto className="h-8 w-8 animate-pulse text-muted-foreground" />
|
|
@@ -4392,11 +4579,14 @@ function VariantActionsMenu({
|
|
|
4392
4579
|
busy?: boolean;
|
|
4393
4580
|
onMoveToReferences?: () => void;
|
|
4394
4581
|
}) {
|
|
4582
|
+
const t = useT();
|
|
4395
4583
|
const dismissSlot = useActionMutation("dismiss-variant-slots");
|
|
4396
4584
|
const queryClient = useQueryClient();
|
|
4397
4585
|
const [confirmOpen, setConfirmOpen] = useState(false);
|
|
4398
4586
|
const isFailed = slot.status === "failed";
|
|
4399
|
-
const label = isFailed
|
|
4587
|
+
const label = isFailed
|
|
4588
|
+
? t("brandKitDetail.dismiss")
|
|
4589
|
+
: t("brandKitDetail.delete");
|
|
4400
4590
|
|
|
4401
4591
|
return (
|
|
4402
4592
|
<>
|
|
@@ -4407,7 +4597,7 @@ function VariantActionsMenu({
|
|
|
4407
4597
|
variant="secondary"
|
|
4408
4598
|
size="icon"
|
|
4409
4599
|
className="h-8 w-8 shadow-sm"
|
|
4410
|
-
aria-label="
|
|
4600
|
+
aria-label={t("brandKitDetail.candidateActions")}
|
|
4411
4601
|
disabled={busy || dismissSlot.isPending}
|
|
4412
4602
|
>
|
|
4413
4603
|
<IconDotsVertical className="h-4 w-4" />
|
|
@@ -4422,7 +4612,7 @@ function VariantActionsMenu({
|
|
|
4422
4612
|
}}
|
|
4423
4613
|
>
|
|
4424
4614
|
<IconPhotoPlus className="mr-2 h-4 w-4 shrink-0" />
|
|
4425
|
-
|
|
4615
|
+
{t("brandKitDetail.addToReferences")}
|
|
4426
4616
|
</DropdownMenuItem>
|
|
4427
4617
|
) : null}
|
|
4428
4618
|
<DropdownMenuItem
|
|
@@ -4447,17 +4637,19 @@ function VariantActionsMenu({
|
|
|
4447
4637
|
<AlertDialogContent>
|
|
4448
4638
|
<AlertDialogHeader>
|
|
4449
4639
|
<AlertDialogTitle>
|
|
4450
|
-
{isFailed
|
|
4640
|
+
{isFailed
|
|
4641
|
+
? t("brandKitDetail.dismissThisSlot")
|
|
4642
|
+
: t("brandKitDetail.deleteCandidate")}
|
|
4451
4643
|
</AlertDialogTitle>
|
|
4452
4644
|
<AlertDialogDescription>
|
|
4453
4645
|
{isFailed
|
|
4454
|
-
? "
|
|
4455
|
-
: "
|
|
4646
|
+
? t("brandKitDetail.dismissSlotDescription")
|
|
4647
|
+
: t("brandKitDetail.deleteCandidateDescription")}
|
|
4456
4648
|
</AlertDialogDescription>
|
|
4457
4649
|
</AlertDialogHeader>
|
|
4458
4650
|
<AlertDialogFooter>
|
|
4459
4651
|
<AlertDialogCancel disabled={dismissSlot.isPending}>
|
|
4460
|
-
|
|
4652
|
+
{t("brandKitDetail.cancel")}
|
|
4461
4653
|
</AlertDialogCancel>
|
|
4462
4654
|
<AlertDialogAction
|
|
4463
4655
|
className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
|
|
@@ -4480,7 +4672,8 @@ function VariantActionsMenu({
|
|
|
4480
4672
|
},
|
|
4481
4673
|
onError: (error) =>
|
|
4482
4674
|
toast.error(
|
|
4483
|
-
error.message ||
|
|
4675
|
+
error.message ||
|
|
4676
|
+
t("brandKitDetail.couldNotClearCandidate"),
|
|
4484
4677
|
),
|
|
4485
4678
|
},
|
|
4486
4679
|
);
|
|
@@ -4489,7 +4682,9 @@ function VariantActionsMenu({
|
|
|
4489
4682
|
{dismissSlot.isPending ? (
|
|
4490
4683
|
<>
|
|
4491
4684
|
<Spinner className="h-4 w-4" />
|
|
4492
|
-
{isFailed
|
|
4685
|
+
{isFailed
|
|
4686
|
+
? t("brandKitDetail.dismissing")
|
|
4687
|
+
: t("brandKitDetail.deleting")}
|
|
4493
4688
|
</>
|
|
4494
4689
|
) : (
|
|
4495
4690
|
label
|
|
@@ -4503,6 +4698,7 @@ function VariantActionsMenu({
|
|
|
4503
4698
|
}
|
|
4504
4699
|
|
|
4505
4700
|
function PendingUploadLaneTile({ upload }: { upload: PendingUpload }) {
|
|
4701
|
+
const t = useT();
|
|
4506
4702
|
const isChecking = upload.status === "checking";
|
|
4507
4703
|
return (
|
|
4508
4704
|
<div className="w-[144px] shrink-0 overflow-hidden rounded-md border border-dashed border-border bg-background sm:w-[156px]">
|
|
@@ -4510,7 +4706,9 @@ function PendingUploadLaneTile({ upload }: { upload: PendingUpload }) {
|
|
|
4510
4706
|
<div className="flex flex-col items-center gap-2 text-muted-foreground">
|
|
4511
4707
|
<Spinner className="h-5 w-5" />
|
|
4512
4708
|
<span className="text-xs font-medium">
|
|
4513
|
-
{isChecking
|
|
4709
|
+
{isChecking
|
|
4710
|
+
? t("brandKitDetail.checking")
|
|
4711
|
+
: t("brandKitDetail.uploading")}
|
|
4514
4712
|
</span>
|
|
4515
4713
|
</div>
|
|
4516
4714
|
</div>
|
|
@@ -4553,6 +4751,7 @@ function AssetLaneTile({
|
|
|
4553
4751
|
onSave?: () => void;
|
|
4554
4752
|
onMoveToReferences?: () => void;
|
|
4555
4753
|
}) {
|
|
4754
|
+
const t = useT();
|
|
4556
4755
|
const displayTitle = assetDisplayTitle(asset);
|
|
4557
4756
|
const sourceText = assetLineageSourceText(asset);
|
|
4558
4757
|
const canMoveToReferences = Boolean(onMoveToReferences);
|
|
@@ -4575,7 +4774,7 @@ function AssetLaneTile({
|
|
|
4575
4774
|
<Checkbox
|
|
4576
4775
|
checked={selected}
|
|
4577
4776
|
onCheckedChange={(checked) => onToggle(checked === true)}
|
|
4578
|
-
aria-label={
|
|
4777
|
+
aria-label={t("brandKitDetail.selectItem", { title: displayTitle })}
|
|
4579
4778
|
className={[
|
|
4580
4779
|
"border-background bg-background/90 shadow-sm opacity-100 transition sm:opacity-0 sm:group-hover:opacity-100 sm:focus-visible:opacity-100",
|
|
4581
4780
|
selected ? "sm:opacity-100" : "",
|
|
@@ -4590,7 +4789,7 @@ function AssetLaneTile({
|
|
|
4590
4789
|
variant="secondary"
|
|
4591
4790
|
size="icon"
|
|
4592
4791
|
className="h-8 w-8 shadow-sm opacity-100 sm:opacity-0 sm:group-hover:opacity-100 sm:focus-visible:opacity-100 data-[state=open]:opacity-100"
|
|
4593
|
-
aria-label="
|
|
4792
|
+
aria-label={t("brandKitDetail.assetActions")}
|
|
4594
4793
|
disabled={busy}
|
|
4595
4794
|
>
|
|
4596
4795
|
<IconDotsVertical className="h-4 w-4" />
|
|
@@ -4598,7 +4797,9 @@ function AssetLaneTile({
|
|
|
4598
4797
|
</DropdownMenuTrigger>
|
|
4599
4798
|
<DropdownMenuContent align="end">
|
|
4600
4799
|
<DropdownMenuItem asChild>
|
|
4601
|
-
<Link to={`/asset/${asset.id}`}>
|
|
4800
|
+
<Link to={`/asset/${asset.id}`}>
|
|
4801
|
+
{t("brandKitDetail.viewDetails")}
|
|
4802
|
+
</Link>
|
|
4602
4803
|
</DropdownMenuItem>
|
|
4603
4804
|
{canMoveToReferences ? (
|
|
4604
4805
|
<DropdownMenuItem
|
|
@@ -4608,13 +4809,13 @@ function AssetLaneTile({
|
|
|
4608
4809
|
}}
|
|
4609
4810
|
>
|
|
4610
4811
|
<IconPhotoPlus className="mr-2 h-4 w-4 shrink-0" />
|
|
4611
|
-
|
|
4812
|
+
{t("brandKitDetail.addToReferences")}
|
|
4612
4813
|
</DropdownMenuItem>
|
|
4613
4814
|
) : null}
|
|
4614
4815
|
<DropdownMenuSub>
|
|
4615
4816
|
<DropdownMenuSubTrigger>
|
|
4616
4817
|
<IconFolder className="mr-2 h-4 w-4 shrink-0" />
|
|
4617
|
-
|
|
4818
|
+
{t("brandKitDetail.moveTo")}
|
|
4618
4819
|
</DropdownMenuSubTrigger>
|
|
4619
4820
|
<DropdownMenuSubContent>
|
|
4620
4821
|
<DropdownMenuItem
|
|
@@ -4625,7 +4826,7 @@ function AssetLaneTile({
|
|
|
4625
4826
|
})
|
|
4626
4827
|
}
|
|
4627
4828
|
>
|
|
4628
|
-
|
|
4829
|
+
{t("brandKitDetail.unfiled")}
|
|
4629
4830
|
</DropdownMenuItem>
|
|
4630
4831
|
{folders.map((folder) => (
|
|
4631
4832
|
<DropdownMenuItem
|
|
@@ -4648,7 +4849,7 @@ function AssetLaneTile({
|
|
|
4648
4849
|
onSelect={onDelete}
|
|
4649
4850
|
>
|
|
4650
4851
|
<IconTrash className="mr-2 h-4 w-4 shrink-0" />
|
|
4651
|
-
|
|
4852
|
+
{t("brandKitDetail.delete")}
|
|
4652
4853
|
</DropdownMenuItem>
|
|
4653
4854
|
</DropdownMenuContent>
|
|
4654
4855
|
</DropdownMenu>
|
|
@@ -4701,7 +4902,11 @@ function AssetLaneTile({
|
|
|
4701
4902
|
onClick={onSave}
|
|
4702
4903
|
disabled={busy}
|
|
4703
4904
|
>
|
|
4704
|
-
{saving ?
|
|
4905
|
+
{saving ? (
|
|
4906
|
+
<Spinner className="h-3.5 w-3.5" />
|
|
4907
|
+
) : (
|
|
4908
|
+
t("brandKitDetail.save")
|
|
4909
|
+
)}
|
|
4705
4910
|
</Button>
|
|
4706
4911
|
) : null}
|
|
4707
4912
|
{canMoveToReferences ? (
|
|
@@ -4713,12 +4918,12 @@ function AssetLaneTile({
|
|
|
4713
4918
|
}
|
|
4714
4919
|
onClick={onMoveToReferences}
|
|
4715
4920
|
disabled={busy}
|
|
4716
|
-
title="
|
|
4921
|
+
title={t("brandKitDetail.addToReferences")}
|
|
4717
4922
|
>
|
|
4718
4923
|
{promoting ? (
|
|
4719
4924
|
<Spinner className="h-3.5 w-3.5" />
|
|
4720
4925
|
) : (
|
|
4721
|
-
"
|
|
4926
|
+
t("brandKitDetail.addToReferences")
|
|
4722
4927
|
)}
|
|
4723
4928
|
</Button>
|
|
4724
4929
|
) : null}
|
|
@@ -4744,6 +4949,7 @@ function VariantLaneTile({
|
|
|
4744
4949
|
saving?: boolean;
|
|
4745
4950
|
promoting?: boolean;
|
|
4746
4951
|
}) {
|
|
4952
|
+
const t = useT();
|
|
4747
4953
|
const dismissSlot = useActionMutation("dismiss-variant-slots");
|
|
4748
4954
|
const queryClient = useQueryClient();
|
|
4749
4955
|
const [confirmOpen, setConfirmOpen] = useState(false);
|
|
@@ -4752,7 +4958,9 @@ function VariantLaneTile({
|
|
|
4752
4958
|
const previewSources = assetPreviewSources(slot, "thumbnail");
|
|
4753
4959
|
const previewSourcesKey = previewSources.join("\n");
|
|
4754
4960
|
const isFailed = slot.status === "failed";
|
|
4755
|
-
const label = isFailed
|
|
4961
|
+
const label = isFailed
|
|
4962
|
+
? t("brandKitDetail.dismiss")
|
|
4963
|
+
: t("brandKitDetail.delete");
|
|
4756
4964
|
const busy = saving || promoting || dismissSlot.isPending;
|
|
4757
4965
|
const previewSrc = previewSources[sourceIndex];
|
|
4758
4966
|
|
|
@@ -4774,7 +4982,7 @@ function VariantLaneTile({
|
|
|
4774
4982
|
variant="secondary"
|
|
4775
4983
|
size="icon"
|
|
4776
4984
|
className="h-8 w-8 shadow-sm opacity-100 sm:opacity-0 sm:group-hover:opacity-100 sm:focus-visible:opacity-100 data-[state=open]:opacity-100"
|
|
4777
|
-
aria-label="
|
|
4985
|
+
aria-label={t("brandKitDetail.candidateActions")}
|
|
4778
4986
|
disabled={busy}
|
|
4779
4987
|
>
|
|
4780
4988
|
<IconDotsVertical className="h-4 w-4" />
|
|
@@ -4789,7 +4997,7 @@ function VariantLaneTile({
|
|
|
4789
4997
|
}}
|
|
4790
4998
|
>
|
|
4791
4999
|
<IconPhotoPlus className="mr-2 h-4 w-4 shrink-0" />
|
|
4792
|
-
|
|
5000
|
+
{t("brandKitDetail.addToReferences")}
|
|
4793
5001
|
</DropdownMenuItem>
|
|
4794
5002
|
) : null}
|
|
4795
5003
|
<DropdownMenuItem
|
|
@@ -4815,17 +5023,19 @@ function VariantLaneTile({
|
|
|
4815
5023
|
<AlertDialogContent>
|
|
4816
5024
|
<AlertDialogHeader>
|
|
4817
5025
|
<AlertDialogTitle>
|
|
4818
|
-
{isFailed
|
|
5026
|
+
{isFailed
|
|
5027
|
+
? t("brandKitDetail.dismissThisSlot")
|
|
5028
|
+
: t("brandKitDetail.deleteCandidate")}
|
|
4819
5029
|
</AlertDialogTitle>
|
|
4820
5030
|
<AlertDialogDescription>
|
|
4821
5031
|
{isFailed
|
|
4822
|
-
? "
|
|
4823
|
-
: "
|
|
5032
|
+
? t("brandKitDetail.dismissSlotDescription")
|
|
5033
|
+
: t("brandKitDetail.deleteCandidateDescription")}
|
|
4824
5034
|
</AlertDialogDescription>
|
|
4825
5035
|
</AlertDialogHeader>
|
|
4826
5036
|
<AlertDialogFooter>
|
|
4827
5037
|
<AlertDialogCancel disabled={dismissSlot.isPending}>
|
|
4828
|
-
|
|
5038
|
+
{t("brandKitDetail.cancel")}
|
|
4829
5039
|
</AlertDialogCancel>
|
|
4830
5040
|
<AlertDialogAction
|
|
4831
5041
|
className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
|
|
@@ -4848,7 +5058,8 @@ function VariantLaneTile({
|
|
|
4848
5058
|
},
|
|
4849
5059
|
onError: (error) =>
|
|
4850
5060
|
toast.error(
|
|
4851
|
-
error.message ||
|
|
5061
|
+
error.message ||
|
|
5062
|
+
t("brandKitDetail.couldNotClearCandidate"),
|
|
4852
5063
|
),
|
|
4853
5064
|
},
|
|
4854
5065
|
);
|
|
@@ -4857,7 +5068,9 @@ function VariantLaneTile({
|
|
|
4857
5068
|
{dismissSlot.isPending ? (
|
|
4858
5069
|
<>
|
|
4859
5070
|
<Spinner className="h-4 w-4" />
|
|
4860
|
-
{isFailed
|
|
5071
|
+
{isFailed
|
|
5072
|
+
? t("brandKitDetail.dismissing")
|
|
5073
|
+
: t("brandKitDetail.deleting")}
|
|
4861
5074
|
</>
|
|
4862
5075
|
) : (
|
|
4863
5076
|
label
|
|
@@ -4888,7 +5101,7 @@ function VariantLaneTile({
|
|
|
4888
5101
|
</div>
|
|
4889
5102
|
) : previewUnavailable ? (
|
|
4890
5103
|
<div className="p-4 text-center text-xs text-muted-foreground">
|
|
4891
|
-
|
|
5104
|
+
{t("brandKitDetail.previewUnavailable")}
|
|
4892
5105
|
</div>
|
|
4893
5106
|
) : (
|
|
4894
5107
|
<IconPhoto className="h-8 w-8 animate-pulse text-muted-foreground" />
|
|
@@ -4896,10 +5109,14 @@ function VariantLaneTile({
|
|
|
4896
5109
|
<div className="pointer-events-none absolute inset-x-0 bottom-0 bg-gradient-to-t from-background via-background/90 to-transparent px-2 pb-2 pt-8">
|
|
4897
5110
|
<div className="flex items-center justify-between gap-2">
|
|
4898
5111
|
<span className="truncate text-xs font-medium">
|
|
4899
|
-
{slot.status === "ready"
|
|
5112
|
+
{slot.status === "ready"
|
|
5113
|
+
? t("brandKitDetail.readyCandidate")
|
|
5114
|
+
: t("brandKitDetail.generating")}
|
|
4900
5115
|
</span>
|
|
4901
5116
|
<span className="shrink-0 text-[10px] text-muted-foreground">
|
|
4902
|
-
{slot.slotId
|
|
5117
|
+
{slot.slotId
|
|
5118
|
+
? shortId(String(slot.slotId))
|
|
5119
|
+
: t("brandKitDetail.slot")}
|
|
4903
5120
|
</span>
|
|
4904
5121
|
</div>
|
|
4905
5122
|
</div>
|
|
@@ -4919,7 +5136,11 @@ function VariantLaneTile({
|
|
|
4919
5136
|
onClick={onSave}
|
|
4920
5137
|
disabled={busy}
|
|
4921
5138
|
>
|
|
4922
|
-
{saving ?
|
|
5139
|
+
{saving ? (
|
|
5140
|
+
<Spinner className="h-3.5 w-3.5" />
|
|
5141
|
+
) : (
|
|
5142
|
+
t("brandKitDetail.save")
|
|
5143
|
+
)}
|
|
4923
5144
|
</Button>
|
|
4924
5145
|
{onMoveToReferences ? (
|
|
4925
5146
|
<Button
|
|
@@ -4928,12 +5149,12 @@ function VariantLaneTile({
|
|
|
4928
5149
|
className="h-8 px-2 text-xs"
|
|
4929
5150
|
onClick={onMoveToReferences}
|
|
4930
5151
|
disabled={busy}
|
|
4931
|
-
title="
|
|
5152
|
+
title={t("brandKitDetail.addToReferences")}
|
|
4932
5153
|
>
|
|
4933
5154
|
{promoting ? (
|
|
4934
5155
|
<Spinner className="h-3.5 w-3.5" />
|
|
4935
5156
|
) : (
|
|
4936
|
-
"
|
|
5157
|
+
t("brandKitDetail.addToReferences")
|
|
4937
5158
|
)}
|
|
4938
5159
|
</Button>
|
|
4939
5160
|
) : null}
|
|
@@ -4955,6 +5176,7 @@ function CreateFolderDialog({
|
|
|
4955
5176
|
onSubmit: (title: string) => void | Promise<void>;
|
|
4956
5177
|
pending?: boolean;
|
|
4957
5178
|
}) {
|
|
5179
|
+
const t = useT();
|
|
4958
5180
|
const [title, setTitle] = useState("");
|
|
4959
5181
|
async function submit() {
|
|
4960
5182
|
const trimmed = title.trim();
|
|
@@ -4964,7 +5186,9 @@ function CreateFolderDialog({
|
|
|
4964
5186
|
setTitle("");
|
|
4965
5187
|
} catch (error) {
|
|
4966
5188
|
toast.error(
|
|
4967
|
-
error instanceof Error
|
|
5189
|
+
error instanceof Error
|
|
5190
|
+
? error.message
|
|
5191
|
+
: t("brandKitDetail.couldNotCreateFolder"),
|
|
4968
5192
|
);
|
|
4969
5193
|
}
|
|
4970
5194
|
}
|
|
@@ -4972,14 +5196,13 @@ function CreateFolderDialog({
|
|
|
4972
5196
|
<Dialog open={open} onOpenChange={onOpenChange}>
|
|
4973
5197
|
<DialogContent className="sm:max-w-md">
|
|
4974
5198
|
<DialogHeader>
|
|
4975
|
-
<DialogTitle>
|
|
5199
|
+
<DialogTitle>{t("brandKitDetail.newFolder")}</DialogTitle>
|
|
4976
5200
|
<DialogDescription>
|
|
4977
|
-
|
|
4978
|
-
reusable collection.
|
|
5201
|
+
{t("brandKitDetail.newFolderDescription")}
|
|
4979
5202
|
</DialogDescription>
|
|
4980
5203
|
</DialogHeader>
|
|
4981
5204
|
<div className="space-y-2">
|
|
4982
|
-
<Label htmlFor="folder-title">
|
|
5205
|
+
<Label htmlFor="folder-title">{t("brandKitDetail.name")}</Label>
|
|
4983
5206
|
<Input
|
|
4984
5207
|
id="folder-title"
|
|
4985
5208
|
value={title}
|
|
@@ -4990,13 +5213,13 @@ function CreateFolderDialog({
|
|
|
4990
5213
|
void submit();
|
|
4991
5214
|
}
|
|
4992
5215
|
}}
|
|
4993
|
-
placeholder="
|
|
5216
|
+
placeholder={t("brandKitDetail.campaignLaunch")}
|
|
4994
5217
|
autoFocus
|
|
4995
5218
|
/>
|
|
4996
5219
|
</div>
|
|
4997
5220
|
<DialogFooter>
|
|
4998
5221
|
<Button variant="outline" onClick={() => onOpenChange(false)}>
|
|
4999
|
-
|
|
5222
|
+
{t("brandKitDetail.cancel")}
|
|
5000
5223
|
</Button>
|
|
5001
5224
|
<Button
|
|
5002
5225
|
disabled={!title.trim() || pending}
|
|
@@ -5004,7 +5227,7 @@ function CreateFolderDialog({
|
|
|
5004
5227
|
void submit();
|
|
5005
5228
|
}}
|
|
5006
5229
|
>
|
|
5007
|
-
|
|
5230
|
+
{t("brandKitDetail.create")}
|
|
5008
5231
|
</Button>
|
|
5009
5232
|
</DialogFooter>
|
|
5010
5233
|
</DialogContent>
|
|
@@ -5019,14 +5242,21 @@ function LiveCandidatesActions({
|
|
|
5019
5242
|
slots: any[];
|
|
5020
5243
|
libraryId: string;
|
|
5021
5244
|
}) {
|
|
5245
|
+
const t = useT();
|
|
5022
5246
|
const dismissSlots = useActionMutation("dismiss-variant-slots");
|
|
5023
5247
|
const queryClient = useQueryClient();
|
|
5024
5248
|
const [pending, setPending] = useState<"failed" | "all" | null>(null);
|
|
5025
5249
|
const failedCount = slots.filter((s) => s.status === "failed").length;
|
|
5026
5250
|
const hasFailed = failedCount > 0;
|
|
5027
5251
|
const isClearing = dismissSlots.isPending;
|
|
5028
|
-
const actionLabel =
|
|
5029
|
-
|
|
5252
|
+
const actionLabel =
|
|
5253
|
+
pending === "failed"
|
|
5254
|
+
? t("brandKitDetail.dismissFailed")
|
|
5255
|
+
: t("brandKitDetail.clearAll");
|
|
5256
|
+
const busyLabel =
|
|
5257
|
+
pending === "failed"
|
|
5258
|
+
? t("brandKitDetail.dismissing")
|
|
5259
|
+
: t("brandKitDetail.clearing");
|
|
5030
5260
|
|
|
5031
5261
|
return (
|
|
5032
5262
|
<>
|
|
@@ -5040,17 +5270,21 @@ function LiveCandidatesActions({
|
|
|
5040
5270
|
<AlertDialogHeader>
|
|
5041
5271
|
<AlertDialogTitle>
|
|
5042
5272
|
{pending === "failed"
|
|
5043
|
-
?
|
|
5044
|
-
|
|
5273
|
+
? t("brandKitDetail.dismissFailedSlotsTitle", {
|
|
5274
|
+
count: failedCount,
|
|
5275
|
+
})
|
|
5276
|
+
: t("brandKitDetail.clearLiveCandidates")}
|
|
5045
5277
|
</AlertDialogTitle>
|
|
5046
5278
|
<AlertDialogDescription>
|
|
5047
5279
|
{pending === "failed"
|
|
5048
|
-
? "
|
|
5049
|
-
: "
|
|
5280
|
+
? t("brandKitDetail.dismissFailedSlotsDescription")
|
|
5281
|
+
: t("brandKitDetail.clearLiveCandidatesDescription")}
|
|
5050
5282
|
</AlertDialogDescription>
|
|
5051
5283
|
</AlertDialogHeader>
|
|
5052
5284
|
<AlertDialogFooter>
|
|
5053
|
-
<AlertDialogCancel disabled={isClearing}>
|
|
5285
|
+
<AlertDialogCancel disabled={isClearing}>
|
|
5286
|
+
{t("brandKitDetail.cancel")}
|
|
5287
|
+
</AlertDialogCancel>
|
|
5054
5288
|
<AlertDialogAction
|
|
5055
5289
|
className="bg-destructive text-destructive-foreground hover:bg-destructive/90"
|
|
5056
5290
|
disabled={isClearing || pending === null}
|
|
@@ -5079,7 +5313,8 @@ function LiveCandidatesActions({
|
|
|
5079
5313
|
},
|
|
5080
5314
|
onError: (error) =>
|
|
5081
5315
|
toast.error(
|
|
5082
|
-
error.message ||
|
|
5316
|
+
error.message ||
|
|
5317
|
+
t("brandKitDetail.couldNotClearLiveCandidates"),
|
|
5083
5318
|
),
|
|
5084
5319
|
},
|
|
5085
5320
|
);
|
|
@@ -5105,11 +5340,11 @@ function LiveCandidatesActions({
|
|
|
5105
5340
|
variant="outline"
|
|
5106
5341
|
size="sm"
|
|
5107
5342
|
className="gap-2"
|
|
5108
|
-
aria-label="
|
|
5343
|
+
aria-label={t("brandKitDetail.liveCandidatesActions")}
|
|
5109
5344
|
disabled={isClearing}
|
|
5110
5345
|
>
|
|
5111
5346
|
<IconDotsVertical className="h-4 w-4" />
|
|
5112
|
-
|
|
5347
|
+
{t("brandKitDetail.clear")}
|
|
5113
5348
|
</Button>
|
|
5114
5349
|
</DropdownMenuTrigger>
|
|
5115
5350
|
<DropdownMenuContent align="end">
|
|
@@ -5121,7 +5356,7 @@ function LiveCandidatesActions({
|
|
|
5121
5356
|
}}
|
|
5122
5357
|
>
|
|
5123
5358
|
<IconTrash className="mr-2 h-4 w-4 shrink-0" />
|
|
5124
|
-
|
|
5359
|
+
{t("brandKitDetail.dismissFailed")} ({failedCount})
|
|
5125
5360
|
</DropdownMenuItem>
|
|
5126
5361
|
<DropdownMenuItem
|
|
5127
5362
|
className="text-destructive focus:bg-destructive/10 focus:text-destructive"
|
|
@@ -5132,7 +5367,7 @@ function LiveCandidatesActions({
|
|
|
5132
5367
|
}}
|
|
5133
5368
|
>
|
|
5134
5369
|
<IconTrash className="mr-2 h-4 w-4 shrink-0" />
|
|
5135
|
-
|
|
5370
|
+
{t("brandKitDetail.clearAll")}
|
|
5136
5371
|
</DropdownMenuItem>
|
|
5137
5372
|
</DropdownMenuContent>
|
|
5138
5373
|
</DropdownMenu>
|