@agent-native/core 0.76.9 → 0.76.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +39 -0
- package/corpus/core/docs/content/locales/ar-SA/actions.md +7 -7
- package/corpus/core/docs/content/locales/ar-SA/template-plan.md +6 -4
- package/corpus/core/docs/content/locales/de-DE/actions.md +9 -9
- package/corpus/core/docs/content/locales/de-DE/template-plan.md +6 -4
- package/corpus/core/docs/content/locales/es-ES/actions.md +9 -9
- package/corpus/core/docs/content/locales/es-ES/template-plan.md +6 -4
- package/corpus/core/docs/content/locales/fr-FR/actions.md +9 -9
- package/corpus/core/docs/content/locales/fr-FR/template-plan.md +6 -4
- package/corpus/core/docs/content/locales/hi-IN/actions.md +9 -9
- package/corpus/core/docs/content/locales/hi-IN/template-plan.md +4 -4
- package/corpus/core/docs/content/locales/ja-JP/actions.md +9 -9
- package/corpus/core/docs/content/locales/ja-JP/template-plan.md +4 -4
- package/corpus/core/docs/content/locales/ko-KR/actions.md +9 -9
- package/corpus/core/docs/content/locales/ko-KR/template-plan.md +4 -4
- package/corpus/core/docs/content/locales/pt-BR/actions.md +9 -9
- package/corpus/core/docs/content/locales/pt-BR/template-plan.md +6 -4
- package/corpus/core/docs/content/locales/zh-CN/actions.md +9 -9
- package/corpus/core/docs/content/locales/zh-CN/template-plan.md +4 -4
- package/corpus/core/package.json +1 -1
- package/corpus/core/scripts/generate-og-font-data.mjs +9 -5
- package/corpus/core/src/client/AgentPanel.tsx +70 -1
- package/corpus/core/src/client/AssistantChat.tsx +1 -3
- package/corpus/core/src/client/ErrorBoundary.tsx +151 -10
- package/corpus/core/src/client/MultiTabAssistantChat.tsx +0 -62
- package/corpus/core/src/client/composer/TiptapComposer.tsx +6 -13
- package/corpus/core/src/server/og-fonts-data.ts +7 -4
- package/corpus/core/src/server/og-fonts.ts +10 -3
- package/corpus/core/src/server/social-og-image.ts +45 -6
- package/corpus/templates/analytics/app/components/dashboard/SqlChart.tsx +199 -19
- package/corpus/templates/analytics/app/components/layout/CommandPalette.tsx +51 -31
- package/corpus/templates/analytics/app/components/layout/DashboardHeader.tsx +26 -16
- package/corpus/templates/analytics/app/components/layout/Header.tsx +1 -2
- package/corpus/templates/analytics/app/components/layout/HeaderActions.tsx +8 -1
- package/corpus/templates/analytics/app/components/layout/Layout.tsx +2 -5
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +172 -107
- package/corpus/templates/analytics/app/i18n-data.ts +1076 -5
- package/corpus/templates/analytics/app/pages/Settings.tsx +2 -2
- package/corpus/templates/analytics/app/pages/adhoc/AdhocRouter.tsx +1 -21
- package/corpus/templates/analytics/app/pages/adhoc/DashboardSkeleton.tsx +35 -0
- package/corpus/templates/analytics/app/pages/adhoc/explorer-dashboard/index.tsx +3 -23
- package/corpus/templates/analytics/app/pages/adhoc/sql-dashboard/index.tsx +3 -26
- package/corpus/templates/analytics/changelog/2026-06-24-analytics-navigation-command-palette-and-settings-now-honor-.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-24-daily-dashboard-charts-now-use-local-day-buckets-and-show-th.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-24-dashboard-loading-placeholders-now-span-the-available-page-w.md +6 -0
- package/corpus/templates/analytics/changelog/2026-06-24-first-party-dashboard-dates-now-align-to-pacific-time-for-da.md +6 -0
- package/corpus/templates/analytics/server/lib/first-party-metric-catalog.ts +19 -7
- package/corpus/templates/assets/app/components/layout/Header.tsx +0 -2
- package/corpus/templates/calendar/app/components/layout/AppLayout.tsx +0 -2
- package/corpus/templates/calendar/app/pages/CalendarView.tsx +0 -2
- package/corpus/templates/chat/app/components/layout/Header.tsx +1 -6
- package/corpus/templates/clips/app/components/layout/Header.tsx +1 -6
- package/corpus/templates/clips/app/hooks/use-library.ts +2 -0
- package/corpus/templates/clips/app/routes/_app.settings._index.tsx +3 -1
- package/corpus/templates/clips/changelog/2026-06-24-archive-and-spaces-navigation-is-more-resilient-when-sidebar.md +6 -0
- package/corpus/templates/content/app/components/layout/Header.tsx +0 -2
- package/corpus/templates/design/app/components/layout/Header.tsx +1 -6
- package/corpus/templates/forms/app/components/layout/Header.tsx +1 -6
- package/corpus/templates/macros/app/components/layout/Header.tsx +1 -6
- package/corpus/templates/mail/app/components/email/CodeBlockLangPicker.tsx +4 -2
- package/corpus/templates/mail/app/components/email/ComposeBubbleToolbar.tsx +18 -12
- package/corpus/templates/mail/app/components/email/ComposeEditor.tsx +9 -5
- package/corpus/templates/mail/app/components/email/ComposeModal.tsx +36 -19
- package/corpus/templates/mail/app/components/email/EmailList.tsx +59 -55
- package/corpus/templates/mail/app/components/email/EmailListItem.tsx +7 -3
- package/corpus/templates/mail/app/components/email/EmailThread.tsx +25 -16
- package/corpus/templates/mail/app/components/email/InlineReplyComposer.tsx +25 -19
- package/corpus/templates/mail/app/components/email/IntegrationsSidebar.tsx +32 -17
- package/corpus/templates/mail/app/components/email/RecipientInput.tsx +26 -10
- package/corpus/templates/mail/app/components/email/SendLaterButton.tsx +5 -3
- package/corpus/templates/mail/app/components/email/SnoozeModal.tsx +4 -2
- package/corpus/templates/mail/app/components/email/SnoozePopover.tsx +9 -5
- package/corpus/templates/mail/app/components/email/extensions/ComposeImageBlock.tsx +4 -2
- package/corpus/templates/mail/app/components/layout/AppLayout.tsx +168 -86
- package/corpus/templates/mail/app/components/layout/SearchBar.tsx +4 -2
- package/corpus/templates/mail/app/i18n/ar-SA.ts +212 -0
- package/corpus/templates/mail/app/i18n/de-DE.ts +212 -0
- package/corpus/templates/mail/app/i18n/en-US.ts +212 -0
- package/corpus/templates/mail/app/i18n/es-ES.ts +212 -0
- package/corpus/templates/mail/app/i18n/fr-FR.ts +212 -0
- package/corpus/templates/mail/app/i18n/hi-IN.ts +212 -0
- package/corpus/templates/mail/app/i18n/ja-JP.ts +212 -0
- package/corpus/templates/mail/app/i18n/ko-KR.ts +212 -0
- package/corpus/templates/mail/app/i18n/pt-BR.ts +212 -0
- package/corpus/templates/mail/app/i18n/zh-CN.ts +211 -0
- package/corpus/templates/mail/changelog/2026-06-24-interface-language-support-now-covers-more-mail-controls-and.md +6 -0
- package/corpus/templates/plan/app/components/layout/Header.tsx +1 -6
- package/corpus/templates/slides/app/components/layout/Header.tsx +1 -6
- package/corpus/templates/videos/app/components/layout/Header.tsx +1 -6
- package/dist/client/AgentPanel.d.ts +5 -1
- package/dist/client/AgentPanel.d.ts.map +1 -1
- package/dist/client/AgentPanel.js +23 -4
- package/dist/client/AgentPanel.js.map +1 -1
- package/dist/client/AssistantChat.d.ts +1 -3
- package/dist/client/AssistantChat.d.ts.map +1 -1
- package/dist/client/AssistantChat.js.map +1 -1
- package/dist/client/ErrorBoundary.d.ts.map +1 -1
- package/dist/client/ErrorBoundary.js +128 -7
- package/dist/client/ErrorBoundary.js.map +1 -1
- package/dist/client/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/client/MultiTabAssistantChat.js +1 -17
- package/dist/client/MultiTabAssistantChat.js.map +1 -1
- package/dist/client/composer/TiptapComposer.d.ts +4 -0
- package/dist/client/composer/TiptapComposer.d.ts.map +1 -1
- package/dist/client/composer/TiptapComposer.js +5 -9
- package/dist/client/composer/TiptapComposer.js.map +1 -1
- package/dist/server/og-fonts-data.d.ts +1 -0
- package/dist/server/og-fonts-data.d.ts.map +1 -1
- package/dist/server/og-fonts-data.js +5 -4
- package/dist/server/og-fonts-data.js.map +1 -1
- package/dist/server/og-fonts.d.ts +1 -0
- package/dist/server/og-fonts.d.ts.map +1 -1
- package/dist/server/og-fonts.js +10 -4
- package/dist/server/og-fonts.js.map +1 -1
- package/dist/server/social-og-image.d.ts.map +1 -1
- package/dist/server/social-og-image.js +33 -6
- package/dist/server/social-og-image.js.map +1 -1
- package/docs/content/locales/ar-SA/actions.md +7 -7
- package/docs/content/locales/ar-SA/template-plan.md +6 -4
- package/docs/content/locales/de-DE/actions.md +9 -9
- package/docs/content/locales/de-DE/template-plan.md +6 -4
- package/docs/content/locales/es-ES/actions.md +9 -9
- package/docs/content/locales/es-ES/template-plan.md +6 -4
- package/docs/content/locales/fr-FR/actions.md +9 -9
- package/docs/content/locales/fr-FR/template-plan.md +6 -4
- package/docs/content/locales/hi-IN/actions.md +9 -9
- package/docs/content/locales/hi-IN/template-plan.md +4 -4
- package/docs/content/locales/ja-JP/actions.md +9 -9
- package/docs/content/locales/ja-JP/template-plan.md +4 -4
- package/docs/content/locales/ko-KR/actions.md +9 -9
- package/docs/content/locales/ko-KR/template-plan.md +4 -4
- package/docs/content/locales/pt-BR/actions.md +9 -9
- package/docs/content/locales/pt-BR/template-plan.md +6 -4
- package/docs/content/locales/zh-CN/actions.md +9 -9
- package/docs/content/locales/zh-CN/template-plan.md +4 -4
- package/package.json +1 -1
|
@@ -1,4 +1,215 @@
|
|
|
1
1
|
const messages = {
|
|
2
|
+
mail: {
|
|
3
|
+
appName: "邮件",
|
|
4
|
+
pages: {
|
|
5
|
+
team: "团队",
|
|
6
|
+
},
|
|
7
|
+
views: {
|
|
8
|
+
inbox: "收件箱",
|
|
9
|
+
unread: "未读",
|
|
10
|
+
starred: "已加星标",
|
|
11
|
+
snoozed: "已稍后提醒",
|
|
12
|
+
sent: "已发送",
|
|
13
|
+
draftQueue: "草稿队列",
|
|
14
|
+
scheduled: "已计划",
|
|
15
|
+
drafts: "草稿",
|
|
16
|
+
archive: "归档",
|
|
17
|
+
trash: "垃圾箱",
|
|
18
|
+
other: "其他",
|
|
19
|
+
labels: "标签",
|
|
20
|
+
extensions: "扩展",
|
|
21
|
+
},
|
|
22
|
+
toolbar: {
|
|
23
|
+
toggleMenu: "切换菜单",
|
|
24
|
+
menu: "菜单",
|
|
25
|
+
configureTabs: "配置标签页",
|
|
26
|
+
refreshInbox: "刷新收件箱",
|
|
27
|
+
composeEmail: "撰写邮件",
|
|
28
|
+
compose: "撰写",
|
|
29
|
+
composeShortcut: "撰写 (C)",
|
|
30
|
+
accounts: "账号",
|
|
31
|
+
pinSidebar: "固定侧边栏",
|
|
32
|
+
unpinSidebar: "取消固定侧边栏",
|
|
33
|
+
settings: "设置",
|
|
34
|
+
},
|
|
35
|
+
search: {
|
|
36
|
+
label: "搜索",
|
|
37
|
+
placeholder: "搜索...",
|
|
38
|
+
clear: "清除搜索 (Esc)",
|
|
39
|
+
noMatches: "没有匹配项",
|
|
40
|
+
},
|
|
41
|
+
tabSettings: {
|
|
42
|
+
views: "视图",
|
|
43
|
+
categories: "分类",
|
|
44
|
+
rename: "重命名",
|
|
45
|
+
renameTab: "重命名标签页",
|
|
46
|
+
help: "勾选的项目会显示为标签页。标签邮件会从收件箱中分离。",
|
|
47
|
+
},
|
|
48
|
+
accounts: {
|
|
49
|
+
remove: "移除",
|
|
50
|
+
connecting: "正在连接...",
|
|
51
|
+
addAccount: "添加账号",
|
|
52
|
+
},
|
|
53
|
+
actions: {
|
|
54
|
+
undo: "撤销",
|
|
55
|
+
archive: "归档",
|
|
56
|
+
markRead: "标为已读",
|
|
57
|
+
markUnread: "标为未读",
|
|
58
|
+
moveTo: "移动到",
|
|
59
|
+
moveToTrash: "移到垃圾箱",
|
|
60
|
+
},
|
|
61
|
+
compose: {
|
|
62
|
+
addImage: "Add an image",
|
|
63
|
+
agentPromptLabel: "What should the agent write?",
|
|
64
|
+
agentPromptPlaceholder: "e.g. Write a polite follow-up...",
|
|
65
|
+
aiAssist: "AI Assist",
|
|
66
|
+
aiAssistPlaceholder: "e.g. make more formal...",
|
|
67
|
+
apply: "Apply",
|
|
68
|
+
attachFile: "Attach file",
|
|
69
|
+
bold: "Bold",
|
|
70
|
+
cancel: "Cancel",
|
|
71
|
+
code: "Code",
|
|
72
|
+
deleteDraft: "Delete draft",
|
|
73
|
+
discardDraft: "Discard draft",
|
|
74
|
+
enterLinkUrl: "Enter the URL for the link.",
|
|
75
|
+
forward: "Forward",
|
|
76
|
+
fullScreen: "Full screen",
|
|
77
|
+
fullScreenCompose: "Full screen compose",
|
|
78
|
+
generate: "Generate",
|
|
79
|
+
generateShortcut: "Generate ({{shortcut}})",
|
|
80
|
+
generating: "Generating...",
|
|
81
|
+
insertLink: "Insert link",
|
|
82
|
+
italic: "Italic",
|
|
83
|
+
link: "Link",
|
|
84
|
+
minimize: "Minimize",
|
|
85
|
+
minimizeCompose: "Minimize compose",
|
|
86
|
+
newDraft: "New draft",
|
|
87
|
+
pasteLink: "Paste link...",
|
|
88
|
+
plainText: "Plain text",
|
|
89
|
+
popOut: "Pop out to compose window",
|
|
90
|
+
reply: "Reply",
|
|
91
|
+
replyTo: "to {{recipient}}",
|
|
92
|
+
restore: "Restore",
|
|
93
|
+
restoreCompose: "Restore compose",
|
|
94
|
+
restoreComposeSize: "Restore compose size",
|
|
95
|
+
restoreSize: "Restore size",
|
|
96
|
+
send: "Send",
|
|
97
|
+
sending: "Sending...",
|
|
98
|
+
strikethrough: "Strikethrough",
|
|
99
|
+
subject: "Subject",
|
|
100
|
+
toSubmit: "to submit",
|
|
101
|
+
uploading: "Uploading...",
|
|
102
|
+
writeMessagePlaceholder: "Write your message...",
|
|
103
|
+
},
|
|
104
|
+
integrations: {
|
|
105
|
+
addIntegration: "Add integration",
|
|
106
|
+
checking: "Checking...",
|
|
107
|
+
connect: "Connect",
|
|
108
|
+
disconnect: "Disconnect",
|
|
109
|
+
getApiKey: "To get your API key:",
|
|
110
|
+
newIntegration: "New integration",
|
|
111
|
+
newIntegrationPlaceholder:
|
|
112
|
+
"e.g. Salesforce CRM — show deal stage and recent activity for the contact",
|
|
113
|
+
openProviderSettings: "Open {{provider}} Settings",
|
|
114
|
+
save: "Save",
|
|
115
|
+
submit: "Submit",
|
|
116
|
+
submitShortcut: "Submit ({{shortcut}})",
|
|
117
|
+
updateKey: "Update key",
|
|
118
|
+
},
|
|
119
|
+
recipients: {
|
|
120
|
+
aliasName: "Alias name",
|
|
121
|
+
createReusableGroup: "Create a reusable group of {{count}} recipients",
|
|
122
|
+
editAlias: "Edit alias",
|
|
123
|
+
expandToIndividualEmails: "Expand to individual emails",
|
|
124
|
+
peopleCount: "{{count}} people",
|
|
125
|
+
recipientCount: "{{count}} recipients",
|
|
126
|
+
saveAsAlias: "Save as alias",
|
|
127
|
+
saving: "Saving...",
|
|
128
|
+
},
|
|
129
|
+
sendLater: {
|
|
130
|
+
cancelScheduledSend: "Cancel scheduled send",
|
|
131
|
+
pickDateTime: "Pick date & time...",
|
|
132
|
+
scheduleSend: "Schedule send",
|
|
133
|
+
sendNow: "Send now",
|
|
134
|
+
},
|
|
135
|
+
snooze: {
|
|
136
|
+
modalPlaceholder: "Try: 8 am, 3 days, aug 7",
|
|
137
|
+
parsing: "Parsing...",
|
|
138
|
+
snooze: "Snooze",
|
|
139
|
+
snoozeUntil: "Snooze until",
|
|
140
|
+
snoozeUntilDate: "Snooze until {{date}}",
|
|
141
|
+
snoozing: "Snoozing...",
|
|
142
|
+
tryPlaceholder: "or try: friday 5pm, in 2 weeks...",
|
|
143
|
+
},
|
|
144
|
+
thread: {
|
|
145
|
+
alwaysFrom: "Always from {{domain}}",
|
|
146
|
+
downloadAll: "Download all",
|
|
147
|
+
emailContent: "Email content",
|
|
148
|
+
hideQuotedText: "Hide quoted text",
|
|
149
|
+
imagesBlocked: "Images blocked.",
|
|
150
|
+
remoteImagesHidden: "Remote images hidden in this embed.",
|
|
151
|
+
searchConversation: "Search in conversation...",
|
|
152
|
+
showImages: "Show images",
|
|
153
|
+
showQuotedText: "Show quoted text",
|
|
154
|
+
showSignature: "Show signature",
|
|
155
|
+
unsubscribe: "Unsubscribe",
|
|
156
|
+
unsubscribeTooltip: "Unsubscribe from this mailing list",
|
|
157
|
+
unsubscribing: "Unsubscribing...",
|
|
158
|
+
viewPullRequest: "View Pull Request",
|
|
159
|
+
},
|
|
160
|
+
selection: {
|
|
161
|
+
clear: "清除选择",
|
|
162
|
+
actions: "选择操作",
|
|
163
|
+
selected: "已选择 {{count}} 项",
|
|
164
|
+
select: "选择",
|
|
165
|
+
all: "全部",
|
|
166
|
+
none: "无",
|
|
167
|
+
read: "已读",
|
|
168
|
+
unstarred: "未加星标",
|
|
169
|
+
},
|
|
170
|
+
empty: {
|
|
171
|
+
inboxZeroTitle: "你已清空收件箱",
|
|
172
|
+
inboxZeroSubtitle: "所有邮件都处理完了",
|
|
173
|
+
snoozed: "当前没有稍后提醒的邮件。",
|
|
174
|
+
drafts: "保存的草稿会显示在这里。",
|
|
175
|
+
starred: "给邮件加星标后会显示在这里。",
|
|
176
|
+
sent: "你发送的邮件会显示在这里。",
|
|
177
|
+
scheduled: "定时发送的邮件会显示在这里。",
|
|
178
|
+
archive: "归档邮件会显示在这里。",
|
|
179
|
+
trash: "垃圾箱邮件会在这里保留 30 天。",
|
|
180
|
+
spam: "Gmail 标记的垃圾邮件会显示在这里。",
|
|
181
|
+
all: "所有邮件会显示在这里。",
|
|
182
|
+
unread: "你已处理完毕,没有未读邮件。",
|
|
183
|
+
default: "匹配此视图的邮件会显示在这里。",
|
|
184
|
+
noSearchResults: "没有找到“{{query}}”的结果",
|
|
185
|
+
tryDifferentKeywords: "试试其他关键词",
|
|
186
|
+
nothingHere: "这里还没有内容",
|
|
187
|
+
loadingMore: "Loading more...",
|
|
188
|
+
},
|
|
189
|
+
toasts: {
|
|
190
|
+
noEmailSelected: "未选择邮件。",
|
|
191
|
+
reportedSpam: "已举报为垃圾邮件。",
|
|
192
|
+
reportedSpamBlocked: "已举报为垃圾邮件并屏蔽 {{email}}。",
|
|
193
|
+
noThreadSelected: "未选择会话。",
|
|
194
|
+
threadMuted: "会话已静音。",
|
|
195
|
+
archived: "已归档。",
|
|
196
|
+
archivedMany: "已归档 {{count}} 个会话。",
|
|
197
|
+
trashed: "已移到垃圾箱。",
|
|
198
|
+
trashedMany: "已将 {{count}} 个会话移到垃圾箱。",
|
|
199
|
+
scheduledSent: "定时邮件已发送。",
|
|
200
|
+
scheduledSendFailed: "发送定时邮件失败",
|
|
201
|
+
scheduledCancelled: "定时邮件已取消。",
|
|
202
|
+
scheduledCancelFailed: "取消定时邮件失败",
|
|
203
|
+
},
|
|
204
|
+
error: {
|
|
205
|
+
retrying: "正在重试...",
|
|
206
|
+
tryAgainIn: "{{seconds}} 秒后重试",
|
|
207
|
+
tryAgain: "重试",
|
|
208
|
+
rateLimitTitle: "触发 Gmail 速率限制",
|
|
209
|
+
loadTitle: "无法加载邮件",
|
|
210
|
+
rateLimitDescription: "最近对 Google 的请求过多。稍等片刻后会重试。",
|
|
211
|
+
},
|
|
212
|
+
},
|
|
2
213
|
agent: {
|
|
3
214
|
emptyState: "可以问我任何关于邮件的问题",
|
|
4
215
|
suggestionSummarize: "总结我的未读邮件",
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { useLocation } from "react-router";
|
|
2
2
|
import { IconMenu2 } from "@tabler/icons-react";
|
|
3
3
|
import { useHeaderTitle, useHeaderActions } from "./HeaderActions";
|
|
4
|
-
import {
|
|
5
|
-
AgentToggleButton,
|
|
6
|
-
LanguagePicker,
|
|
7
|
-
useT,
|
|
8
|
-
} from "@agent-native/core/client";
|
|
4
|
+
import { AgentToggleButton, useT } from "@agent-native/core/client";
|
|
9
5
|
import { APP_TITLE } from "@/lib/app-config";
|
|
10
6
|
|
|
11
7
|
const pageTitleKeys: Record<string, string> = {
|
|
@@ -54,7 +50,6 @@ export function Header({ onOpenMobileSidebar }: HeaderProps) {
|
|
|
54
50
|
</div>
|
|
55
51
|
<div className="flex items-center gap-2 shrink-0">
|
|
56
52
|
{actions}
|
|
57
|
-
<LanguagePicker variant="icon" />
|
|
58
53
|
<AgentToggleButton />
|
|
59
54
|
</div>
|
|
60
55
|
</header>
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { useLocation } from "react-router";
|
|
2
2
|
import { useDecks } from "@/context/DeckContext";
|
|
3
3
|
import { useHeaderTitle, useHeaderActions } from "./HeaderActions";
|
|
4
|
-
import {
|
|
5
|
-
AgentToggleButton,
|
|
6
|
-
LanguagePicker,
|
|
7
|
-
useT,
|
|
8
|
-
} from "@agent-native/core/client";
|
|
4
|
+
import { AgentToggleButton, useT } from "@agent-native/core/client";
|
|
9
5
|
import { RunsTray } from "@agent-native/core/client/progress";
|
|
10
6
|
|
|
11
7
|
const pageTitleKeys: Record<string, string> = {
|
|
@@ -67,7 +63,6 @@ export function Header() {
|
|
|
67
63
|
</div>
|
|
68
64
|
<div className="flex items-center gap-2 shrink-0">
|
|
69
65
|
{actions}
|
|
70
|
-
<LanguagePicker variant="icon" />
|
|
71
66
|
<RunsTray pollMs={1500} />
|
|
72
67
|
<AgentToggleButton />
|
|
73
68
|
</div>
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
import { useLocation } from "react-router";
|
|
2
2
|
import { IconMenu2 } from "@tabler/icons-react";
|
|
3
3
|
import { useHeaderTitle, useHeaderActions } from "./HeaderActions";
|
|
4
|
-
import {
|
|
5
|
-
AgentToggleButton,
|
|
6
|
-
LanguagePicker,
|
|
7
|
-
useT,
|
|
8
|
-
} from "@agent-native/core/client";
|
|
4
|
+
import { AgentToggleButton, useT } from "@agent-native/core/client";
|
|
9
5
|
import { compositions } from "@/remotion/registry";
|
|
10
6
|
|
|
11
7
|
const pageTitleKeys: Record<string, string> = {
|
|
@@ -60,7 +56,6 @@ export function Header({ onOpenMobileSidebar }: HeaderProps) {
|
|
|
60
56
|
</div>
|
|
61
57
|
<div className="flex items-center gap-2 shrink-0">
|
|
62
58
|
{actions}
|
|
63
|
-
<LanguagePicker variant="icon" />
|
|
64
59
|
<AgentToggleButton />
|
|
65
60
|
</div>
|
|
66
61
|
</header>
|
|
@@ -31,6 +31,7 @@ export declare function getAgentPanelChatTabGroups(tabs: MultiTabAssistantChatHe
|
|
|
31
31
|
mainTabs: import("./MultiTabAssistantChat.js").ChatTab[];
|
|
32
32
|
};
|
|
33
33
|
export declare function shouldShowAgentPanelChatTabBar(tabs: MultiTabAssistantChatHeaderProps["tabs"], activeTabId: string): boolean;
|
|
34
|
+
export declare function shouldShowAgentPanelPageNewChatButton(tabs: MultiTabAssistantChatHeaderProps["tabs"], activeTabId: string, activeTabMessageCount: number): boolean;
|
|
34
35
|
export declare function shouldShowAgentPanelCliTabBar(cliTabs: string[]): boolean;
|
|
35
36
|
export interface AgentPanelCodeAccess {
|
|
36
37
|
/** Whether this surface can safely edit source and run shell commands. */
|
|
@@ -86,6 +87,8 @@ export interface AgentPanelProps extends Omit<AssistantChatProps, "onSwitchToCli
|
|
|
86
87
|
chatNotice?: React.ReactNode;
|
|
87
88
|
/** Show the chat thread tab row when the panel header is hidden. Default: true. */
|
|
88
89
|
showTabBar?: boolean;
|
|
90
|
+
/** Show a compact New chat action in page chat when the main header is hidden. */
|
|
91
|
+
showPageNewChatButton?: boolean;
|
|
89
92
|
/** Capability gate for source edits and CLI access. */
|
|
90
93
|
codeAccess?: AgentPanelCodeAccess;
|
|
91
94
|
}
|
|
@@ -105,6 +108,7 @@ export interface AgentChatSurfaceProps extends AgentPanelProps {
|
|
|
105
108
|
*/
|
|
106
109
|
chatViewTransition?: boolean;
|
|
107
110
|
}
|
|
111
|
+
export declare function shouldDefaultAgentChatSurfacePageNewChatButton(mode: AgentChatSurfaceMode | undefined, showTabBar: boolean | undefined): boolean;
|
|
108
112
|
/**
|
|
109
113
|
* Reusable chat surface backed by AgentPanel internals.
|
|
110
114
|
*
|
|
@@ -112,7 +116,7 @@ export interface AgentChatSurfaceProps extends AgentPanelProps {
|
|
|
112
116
|
* model controls, scoped chat behavior, and recovery boundary used by the
|
|
113
117
|
* sidebar without introducing a second chat implementation.
|
|
114
118
|
*/
|
|
115
|
-
export declare function AgentChatSurface({ mode, className, defaultMode, isFullscreen, style, chatViewTransition, ...props }: AgentChatSurfaceProps): import("react/jsx-runtime").JSX.Element;
|
|
119
|
+
export declare function AgentChatSurface({ mode, className, defaultMode, isFullscreen, style, chatViewTransition, showPageNewChatButton, ...props }: AgentChatSurfaceProps): import("react/jsx-runtime").JSX.Element;
|
|
116
120
|
export interface AgentSidebarProps {
|
|
117
121
|
children: React.ReactNode;
|
|
118
122
|
/** Placeholder text for the empty chat state */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AgentPanel.d.ts","sourceRoot":"","sources":["../../src/client/AgentPanel.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KASN,MAAM,OAAO,CAAC;AA6Cf,OAAO,KAAK,EACV,gCAAgC,EAChC,0BAA0B,EAC3B,MAAM,4BAA4B,CAAC;AACpC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AA0Q7D,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,gCAAgC,CAAC,MAAM,CAAC,EAC9C,WAAW,EAAE,MAAM;;;;;;EAcpB;AAED,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,gCAAgC,CAAC,MAAM,CAAC,EAC9C,WAAW,EAAE,MAAM,WAOpB;AAED,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,WAE9D;AAID,MAAM,WAAW,oBAAoB;IACnC,0EAA0E;IAC1E,OAAO,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oDAAoD;IACpD,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kDAAkD;IAClD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,4EAA4E;IAC5E,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,mEAAmE;IACnE,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,wEAAwE;IACxE,8BAA8B,CAAC,EAAE,MAAM,CAAC;CACzC;AAgGD,MAAM,WAAW,eAAgB,SAAQ,IAAI,CAC3C,kBAAkB,EAClB,eAAe,CAChB;IACC,oCAAoC;IACpC,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IAC7B,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6CAA6C;IAC7C,KAAK,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC;IAC5B,6GAA6G;IAC7G,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IACxB,iFAAiF;IACjF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6HAA6H;IAC7H,kBAAkB,CAAC,EAAE,MAAM,IAAI,CAAC;IAChC,iGAAiG;IACjG,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yFAAyF;IACzF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,yEAAyE;IACzE,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;;;;OAOG;IACH,KAAK,CAAC,EAAE,OAAO,uBAAuB,EAAE,eAAe,GAAG,IAAI,CAAC;IAC/D,mEAAmE;IACnE,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+CAA+C;IAC/C,aAAa,CAAC,EAAE,0BAA0B,CAAC,eAAe,CAAC,CAAC;IAC5D,gFAAgF;IAChF,UAAU,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC7B,mFAAmF;IACnF,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uDAAuD;IACvD,UAAU,CAAC,EAAE,oBAAoB,CAAC;CACnC;
|
|
1
|
+
{"version":3,"file":"AgentPanel.d.ts","sourceRoot":"","sources":["../../src/client/AgentPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -179,6 +179,11 @@ export function shouldShowAgentPanelChatTabBar(tabs, activeTabId) {
|
|
|
179
179
|
const { hasSubTabs, mainTabs } = getAgentPanelChatTabGroups(tabs, activeTabId);
|
|
180
180
|
return mainTabs.length > 1 || hasSubTabs;
|
|
181
181
|
}
|
|
182
|
+
export function shouldShowAgentPanelPageNewChatButton(tabs, activeTabId, activeTabMessageCount) {
|
|
183
|
+
const activeTab = tabs.find((tab) => tab.id === activeTabId);
|
|
184
|
+
return (Boolean(activeTabId) &&
|
|
185
|
+
(activeTabMessageCount > 0 || activeTab?.status === "running"));
|
|
186
|
+
}
|
|
182
187
|
export function shouldShowAgentPanelCliTabBar(cliTabs) {
|
|
183
188
|
return cliTabs.length > 1;
|
|
184
189
|
}
|
|
@@ -298,7 +303,7 @@ function CodeAccessUnavailablePanel({ title, description, ctaLabel, ctaHref, sec
|
|
|
298
303
|
});
|
|
299
304
|
}, className: "inline-flex items-center gap-1.5 rounded-md border border-border bg-background px-3 py-1.5 text-xs font-medium text-foreground hover:bg-accent", children: [secondaryCtaLabel, _jsx(IconExternalLink, { className: "h-3 w-3" })] })] })] }));
|
|
300
305
|
}
|
|
301
|
-
function AgentPanelInner({ defaultMode = "chat", className, style, apiUrl, emptyStateText, emptyStateAddon, suggestions, dynamicSuggestions, showHeader = true, onCollapse, isFullscreen, onToggleFullscreen, devAppUrl, storageKey, restoreActiveThread = true, scope, browserTabId, threadUrlSync, chatNotice, showTabBar = true, codeAccess, ...assistantChatProps }) {
|
|
306
|
+
function AgentPanelInner({ defaultMode = "chat", className, style, apiUrl, emptyStateText, emptyStateAddon, suggestions, dynamicSuggestions, showHeader = true, onCollapse, isFullscreen, onToggleFullscreen, devAppUrl, storageKey, restoreActiveThread = true, scope, browserTabId, threadUrlSync, chatNotice, showTabBar = true, showPageNewChatButton = false, codeAccess, ...assistantChatProps }) {
|
|
302
307
|
const t = useT();
|
|
303
308
|
const mounted = useClientOnly();
|
|
304
309
|
const keyPrefix = storageKey ? `:${storageKey}` : "";
|
|
@@ -553,6 +558,14 @@ function AgentPanelInner({ defaultMode = "chat", className, style, apiUrl, empty
|
|
|
553
558
|
switchMode,
|
|
554
559
|
t,
|
|
555
560
|
]);
|
|
561
|
+
const renderPageChatOverlay = useCallback(({ activeTabId, activeTabMessageCount, addTab, tabs, }) => {
|
|
562
|
+
if (!shouldShowAgentPanelPageNewChatButton(tabs, activeTabId, activeTabMessageCount)) {
|
|
563
|
+
return null;
|
|
564
|
+
}
|
|
565
|
+
return (_jsx("div", { className: "pointer-events-none absolute inset-x-0 top-3 z-[60] flex justify-end px-3 sm:top-4 sm:px-4", children: _jsxs("button", { type: "button", "data-agent-page-new-chat": "", "aria-label": t("agentPanel.newChat"), onClick: () => {
|
|
566
|
+
addTab();
|
|
567
|
+
}, className: "pointer-events-auto inline-flex h-8 items-center gap-1.5 rounded-md border border-border bg-background/95 px-2.5 text-xs font-medium text-foreground shadow-sm backdrop-blur transition-colors hover:bg-accent focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring", children: [_jsx(IconPlus, { size: 14 }), _jsx("span", { children: t("agentPanel.newChat") })] }) }));
|
|
568
|
+
}, [t]);
|
|
556
569
|
// Ref callback: scroll the active tab into view in the overflow container.
|
|
557
570
|
// Uses getBoundingClientRect for reliable positioning regardless of offsetParent.
|
|
558
571
|
const activeTabRefCb = useCallback((el) => {
|
|
@@ -672,7 +685,9 @@ function AgentPanelInner({ defaultMode = "chat", className, style, apiUrl, empty
|
|
|
672
685
|
`[data-agent-fullscreen='true'] .agent-composer-area{` +
|
|
673
686
|
`max-width:${FULLSCREEN_CONTENT_MAX_PX}px;` +
|
|
674
687
|
`margin-left:auto;margin-right:auto;width:100%;}`,
|
|
675
|
-
} }), SHOW_ONBOARDING && mounted && (_jsx(Suspense, { fallback: null, children: _jsx(OnboardingPanel, {}) })), _jsx("div", { className: cn("flex flex-col min-h-0", mode === "chat" ? "flex-1" : "shrink-0"), children: mounted && (_jsx(Suspense, { fallback: _jsx(ChatLoadingSkeleton, { renderHeader: showHeader ? renderChatHeader : undefined, centerComposerWhenEmpty: assistantChatProps.centerComposerWhenEmpty, composerSlot: assistantChatProps.composerSlot, composerAreaClassName: assistantChatProps.composerAreaClassName, composerLayoutVariant: assistantChatProps.composerLayoutVariant }), children: _jsx(MultiTabAssistantChatLazy, { ...assistantChatProps, apiUrl: apiUrl, showHeader: false, renderHeader: showHeader ? renderChatHeader : undefined, showTabBar: showTabBar, renderOverlay:
|
|
688
|
+
} }), SHOW_ONBOARDING && mounted && (_jsx(Suspense, { fallback: null, children: _jsx(OnboardingPanel, {}) })), _jsx("div", { className: cn("flex flex-col min-h-0", mode === "chat" ? "flex-1" : "shrink-0"), children: mounted && (_jsx(Suspense, { fallback: _jsx(ChatLoadingSkeleton, { renderHeader: showHeader ? renderChatHeader : undefined, centerComposerWhenEmpty: assistantChatProps.centerComposerWhenEmpty, composerSlot: assistantChatProps.composerSlot, composerAreaClassName: assistantChatProps.composerAreaClassName, composerLayoutVariant: assistantChatProps.composerLayoutVariant }), children: _jsx(MultiTabAssistantChatLazy, { ...assistantChatProps, apiUrl: apiUrl, showHeader: false, renderHeader: showHeader ? renderChatHeader : undefined, showTabBar: showTabBar, renderOverlay: showPageNewChatButton && !showHeader
|
|
689
|
+
? renderPageChatOverlay
|
|
690
|
+
: undefined, contentHidden: mode !== "chat", emptyStateText: emptyStateText, emptyStateAddon: emptyStateAddon, suggestions: suggestions, dynamicSuggestions: dynamicSuggestions, onSwitchToCli: () => switchMode("cli"), execMode: execMode, onExecModeChange: switchExecMode, storageKey: storageKey, restoreActiveThread: restoreActiveThread, scope: scope, browserTabId: browserTabId, threadUrlSync: threadUrlSync }) })) }), canUseCodeTools
|
|
676
691
|
? mode === "cli" &&
|
|
677
692
|
cliTabs.map((id) => (_jsx("div", { className: "min-h-0 relative flex-1", style: {
|
|
678
693
|
display: id === activeCliTab ? undefined : "none",
|
|
@@ -1040,6 +1055,9 @@ export function AgentPanel(props) {
|
|
|
1040
1055
|
}, [props.storageKey]);
|
|
1041
1056
|
return (_jsx(TooltipProvider, { delayDuration: 200, children: _jsx(AgentPanelErrorBoundary, { onReset: resetPanel, children: _jsx(AgentPanelInner, { ...props }, resetKey) }) }));
|
|
1042
1057
|
}
|
|
1058
|
+
export function shouldDefaultAgentChatSurfacePageNewChatButton(mode, showTabBar) {
|
|
1059
|
+
return mode === "page" && showTabBar !== false;
|
|
1060
|
+
}
|
|
1043
1061
|
/**
|
|
1044
1062
|
* Reusable chat surface backed by AgentPanel internals.
|
|
1045
1063
|
*
|
|
@@ -1047,9 +1065,10 @@ export function AgentPanel(props) {
|
|
|
1047
1065
|
* model controls, scoped chat behavior, and recovery boundary used by the
|
|
1048
1066
|
* sidebar without introducing a second chat implementation.
|
|
1049
1067
|
*/
|
|
1050
|
-
export function AgentChatSurface({ mode = "panel", className, defaultMode = "chat", isFullscreen, style, chatViewTransition = false, ...props }) {
|
|
1068
|
+
export function AgentChatSurface({ mode = "panel", className, defaultMode = "chat", isFullscreen, style, chatViewTransition = false, showPageNewChatButton, ...props }) {
|
|
1051
1069
|
const pageMode = mode === "page";
|
|
1052
|
-
|
|
1070
|
+
const defaultShowPageNewChatButton = shouldDefaultAgentChatSurfacePageNewChatButton(mode, props.showTabBar);
|
|
1071
|
+
return (_jsx(AgentPanel, { ...props, defaultMode: defaultMode, isFullscreen: isFullscreen ?? pageMode, showPageNewChatButton: showPageNewChatButton ?? defaultShowPageNewChatButton, className: cn(pageMode && "h-full min-h-0 w-full overflow-hidden bg-background", chatViewTransition && AGENT_CHAT_VIEW_TRANSITION_CLASS, className), style: chatViewTransition ? getAgentChatViewTransitionStyle(style) : style }));
|
|
1053
1072
|
}
|
|
1054
1073
|
/**
|
|
1055
1074
|
* Wraps app content with a toggleable agent sidebar.
|