@agent-native/toolkit 0.217.0 → 0.219.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/agent-native.eject.json +21 -0
- package/dist/app/agent-page/AgentContextTab.d.ts.map +1 -1
- package/dist/app/agent-page/AgentContextTab.js +1 -0
- package/dist/app/agent-page/AgentContextTab.js.map +1 -1
- package/dist/app/agentkit/react/components.d.ts.map +1 -1
- package/dist/app/agentkit/react/components.js +1 -1
- package/dist/app/agentkit/react/components.js.map +1 -1
- package/dist/app/agentkit/react/context.d.ts +4 -1
- package/dist/app/agentkit/react/context.d.ts.map +1 -1
- package/dist/app/agentkit/react/context.js +3 -1
- package/dist/app/agentkit/react/context.js.map +1 -1
- package/dist/app/agentkit/react/data-chart-layout.d.ts +30 -0
- package/dist/app/agentkit/react/data-chart-layout.d.ts.map +1 -0
- package/dist/app/agentkit/react/data-chart-layout.js +2 -0
- package/dist/app/agentkit/react/data-chart-layout.js.map +1 -0
- package/dist/app/agentkit/react/index.d.ts +1 -0
- package/dist/app/agentkit/react/index.d.ts.map +1 -1
- package/dist/app/agentkit/react/index.js +1 -0
- package/dist/app/agentkit/react/index.js.map +1 -1
- package/dist/app/agentkit/react/root.d.ts +3 -1
- package/dist/app/agentkit/react/root.d.ts.map +1 -1
- package/dist/app/agentkit/react/root.js +2 -2
- package/dist/app/agentkit/react/root.js.map +1 -1
- package/dist/app/agentkit/react/styles.css +31 -6
- package/dist/app/agentkit/react/transcript-layout.d.ts +2 -0
- package/dist/app/agentkit/react/transcript-layout.d.ts.map +1 -1
- package/dist/app/agentkit/react/transcript-layout.js.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.d.ts.map +1 -1
- package/dist/app/chat/AgentKitAssistantChat.js +2 -2
- package/dist/app/chat/AgentKitAssistantChat.js.map +1 -1
- package/dist/app/chat/AgentPanel.js +6 -6
- package/dist/app/chat/AgentPanel.js.map +1 -1
- package/dist/app/chat/MultiTabAssistantChat.d.ts.map +1 -1
- package/dist/app/chat/MultiTabAssistantChat.js +53 -95
- package/dist/app/chat/MultiTabAssistantChat.js.map +1 -1
- package/dist/app/chat/agentkit-chat/action-widget.d.ts.map +1 -1
- package/dist/app/chat/agentkit-chat/action-widget.js +4 -1
- package/dist/app/chat/agentkit-chat/action-widget.js.map +1 -1
- package/dist/app/chat/agentkit-chat/rail.d.ts +1 -1
- package/dist/app/chat/agentkit-chat/rail.d.ts.map +1 -1
- package/dist/app/chat/agentkit-chat/rail.js +1 -1
- package/dist/app/chat/agentkit-chat/rail.js.map +1 -1
- package/dist/app/chat/chat/index.d.ts +2 -1
- package/dist/app/chat/chat/index.d.ts.map +1 -1
- package/dist/app/chat/chat/index.js +1 -1
- package/dist/app/chat/chat/index.js.map +1 -1
- package/dist/app/chat/chat/surface-types.d.ts +3 -0
- package/dist/app/chat/chat/surface-types.d.ts.map +1 -1
- package/dist/app/chat/chat/surface-types.js.map +1 -1
- package/dist/app/chat/chat/tool-call-display.d.ts +5 -1
- package/dist/app/chat/chat/tool-call-display.d.ts.map +1 -1
- package/dist/app/chat/chat/tool-call-display.js +6 -4
- package/dist/app/chat/chat/tool-call-display.js.map +1 -1
- package/dist/app/chat/chat/tool-render-registry.d.ts +4 -0
- package/dist/app/chat/chat/tool-render-registry.d.ts.map +1 -1
- package/dist/app/chat/chat/tool-render-registry.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartRenderer.d.ts +3 -1
- package/dist/app/chat/chat/widgets/DataChartRenderer.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartRenderer.js +116 -26
- package/dist/app/chat/chat/widgets/DataChartRenderer.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartWidget.d.ts +3 -1
- package/dist/app/chat/chat/widgets/DataChartWidget.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataChartWidget.js +21 -2
- package/dist/app/chat/chat/widgets/DataChartWidget.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataInsightsWidget.d.ts +3 -1
- package/dist/app/chat/chat/widgets/DataInsightsWidget.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataInsightsWidget.js +2 -2
- package/dist/app/chat/chat/widgets/DataInsightsWidget.js.map +1 -1
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.d.ts +1 -1
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.js +3 -1
- package/dist/app/chat/chat/widgets/DataWidgetDisplayControls.js.map +1 -1
- package/dist/app/chat/chat/widgets/builtin-tool-renderers.d.ts.map +1 -1
- package/dist/app/chat/chat/widgets/builtin-tool-renderers.js +2 -2
- package/dist/app/chat/chat/widgets/builtin-tool-renderers.js.map +1 -1
- package/dist/app/chat/chat-first/chat-history.d.ts +13 -2
- package/dist/app/chat/chat-first/chat-history.d.ts.map +1 -1
- package/dist/app/chat/chat-first/chat-history.js +24 -3
- package/dist/app/chat/chat-first/chat-history.js.map +1 -1
- package/dist/app/chat/conversation/AgentConversation.d.ts.map +1 -1
- package/dist/app/chat/conversation/AgentConversation.js +6 -1
- package/dist/app/chat/conversation/AgentConversation.js.map +1 -1
- package/dist/app/chat/ownership-history/ChatOwnerAvatar.d.ts +6 -0
- package/dist/app/chat/ownership-history/ChatOwnerAvatar.d.ts.map +1 -0
- package/dist/app/chat/ownership-history/ChatOwnerAvatar.js +9 -0
- package/dist/app/chat/ownership-history/ChatOwnerAvatar.js.map +1 -0
- package/dist/app/chat/ownership-history/index.d.ts +11 -0
- package/dist/app/chat/ownership-history/index.d.ts.map +1 -0
- package/dist/app/chat/ownership-history/index.js +22 -0
- package/dist/app/chat/ownership-history/index.js.map +1 -0
- package/dist/app/chat/ownership-history/rows.d.ts +27 -0
- package/dist/app/chat/ownership-history/rows.d.ts.map +1 -0
- package/dist/app/chat/ownership-history/rows.js +101 -0
- package/dist/app/chat/ownership-history/rows.js.map +1 -0
- package/dist/app/chat/ownership-history/useOwnershipChatHistory.d.ts +52 -0
- package/dist/app/chat/ownership-history/useOwnershipChatHistory.d.ts.map +1 -0
- package/dist/app/chat/ownership-history/useOwnershipChatHistory.js +497 -0
- package/dist/app/chat/ownership-history/useOwnershipChatHistory.js.map +1 -0
- package/dist/app/i18n/catalogs/ar-SA.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ar-SA.js +3 -0
- package/dist/app/i18n/catalogs/ar-SA.js.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/de-DE.js +3 -0
- package/dist/app/i18n/catalogs/de-DE.js.map +1 -1
- package/dist/app/i18n/catalogs/en-US.d.ts +3 -0
- package/dist/app/i18n/catalogs/en-US.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/en-US.js +3 -0
- package/dist/app/i18n/catalogs/en-US.js.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/es-ES.js +3 -0
- package/dist/app/i18n/catalogs/es-ES.js.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/fr-FR.js +3 -0
- package/dist/app/i18n/catalogs/fr-FR.js.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/hi-IN.js +3 -0
- package/dist/app/i18n/catalogs/hi-IN.js.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ja-JP.js +3 -0
- package/dist/app/i18n/catalogs/ja-JP.js.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/ko-KR.js +3 -0
- package/dist/app/i18n/catalogs/ko-KR.js.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/pt-BR.js +3 -0
- package/dist/app/i18n/catalogs/pt-BR.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-CN.js +3 -0
- package/dist/app/i18n/catalogs/zh-CN.js.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.d.ts.map +1 -1
- package/dist/app/i18n/catalogs/zh-TW.js +3 -0
- package/dist/app/i18n/catalogs/zh-TW.js.map +1 -1
- package/dist/app/shared/CommandMenu.d.ts +2 -0
- package/dist/app/shared/CommandMenu.d.ts.map +1 -1
- package/dist/app/shared/CommandMenu.js +11 -6
- package/dist/app/shared/CommandMenu.js.map +1 -1
- package/dist/app/sharing/ShareButton.d.ts.map +1 -1
- package/dist/app/sharing/ShareButton.js +9 -8
- package/dist/app/sharing/ShareButton.js.map +1 -1
- package/dist/chat-history/ChatHistoryList.d.ts +16 -3
- package/dist/chat-history/ChatHistoryList.d.ts.map +1 -1
- package/dist/chat-history/ChatHistoryList.js +25 -15
- package/dist/chat-history/ChatHistoryList.js.map +1 -1
- package/dist/chat-history.css +109 -9
- package/dist/composer/TiptapComposer.js +1 -1
- package/dist/composer/TiptapComposer.js.map +1 -1
- package/package.json +10 -3
- package/src/app/agent-page/AgentContextTab.spec.ts +50 -2
- package/src/app/agent-page/AgentContextTab.tsx +1 -0
- package/src/app/agentkit/react/components.interaction.spec.tsx +2 -0
- package/src/app/agentkit/react/components.spec.tsx +11 -6
- package/src/app/agentkit/react/components.tsx +3 -0
- package/src/app/agentkit/react/context.tsx +6 -0
- package/src/app/agentkit/react/data-chart-layout.ts +25 -0
- package/src/app/agentkit/react/index.ts +1 -0
- package/src/app/agentkit/react/root.tsx +4 -0
- package/src/app/agentkit/react/styles.css +31 -6
- package/src/app/agentkit/react/transcript-layout.ts +2 -0
- package/src/app/chat/AgentKitAssistantChat.spec.tsx +201 -27
- package/src/app/chat/AgentKitAssistantChat.tsx +3 -0
- package/src/app/chat/AgentPanel.tsx +8 -8
- package/src/app/chat/MultiTabAssistantChat.spec.tsx +270 -3
- package/src/app/chat/MultiTabAssistantChat.tsx +81 -158
- package/src/app/chat/agentkit-chat/action-widget.spec.tsx +62 -0
- package/src/app/chat/agentkit-chat/action-widget.tsx +4 -0
- package/src/app/chat/agentkit-chat/rail.ts +11 -0
- package/src/app/chat/chat/index.ts +10 -0
- package/src/app/chat/chat/surface-types.ts +3 -0
- package/src/app/chat/chat/tool-call-display.spec.tsx +29 -0
- package/src/app/chat/chat/tool-call-display.tsx +17 -1
- package/src/app/chat/chat/tool-render-registry.tsx +5 -0
- package/src/app/chat/chat/widgets/DataChartRenderer.spec.tsx +377 -17
- package/src/app/chat/chat/widgets/DataChartRenderer.tsx +232 -63
- package/src/app/chat/chat/widgets/DataChartWidget.spec.tsx +67 -0
- package/src/app/chat/chat/widgets/DataChartWidget.tsx +39 -5
- package/src/app/chat/chat/widgets/DataInsightsWidget.tsx +13 -2
- package/src/app/chat/chat/widgets/DataWidgetDisplayControls.tsx +6 -4
- package/src/app/chat/chat/widgets/builtin-tool-renderers.tsx +5 -1
- package/src/app/chat/chat-first/chat-history.spec.tsx +79 -0
- package/src/app/chat/chat-first/chat-history.tsx +75 -22
- package/src/app/chat/conversation/AgentConversation.spec.tsx +51 -1
- package/src/app/chat/conversation/AgentConversation.tsx +11 -2
- package/src/app/chat/ownership-history/ChatOwnerAvatar.tsx +27 -0
- package/src/app/chat/ownership-history/index.tsx +67 -0
- package/src/app/chat/ownership-history/ownership-history.spec.tsx +3146 -0
- package/src/app/chat/ownership-history/rows.ts +156 -0
- package/src/app/chat/ownership-history/useOwnershipChatHistory.ts +709 -0
- package/src/app/i18n/catalogs/ar-SA.ts +3 -0
- package/src/app/i18n/catalogs/de-DE.ts +3 -0
- package/src/app/i18n/catalogs/en-US.ts +3 -0
- package/src/app/i18n/catalogs/es-ES.ts +3 -0
- package/src/app/i18n/catalogs/fr-FR.ts +3 -0
- package/src/app/i18n/catalogs/hi-IN.ts +3 -0
- package/src/app/i18n/catalogs/ja-JP.ts +3 -0
- package/src/app/i18n/catalogs/ko-KR.ts +3 -0
- package/src/app/i18n/catalogs/pt-BR.ts +3 -0
- package/src/app/i18n/catalogs/zh-CN.ts +3 -0
- package/src/app/i18n/catalogs/zh-TW.ts +3 -0
- package/src/app/shared/CommandMenu.spec.tsx +175 -6
- package/src/app/shared/CommandMenu.tsx +24 -7
- package/src/app/sharing/ShareButton.tsx +12 -10
- package/src/chat-history/ChatHistoryList.spec.tsx +51 -0
- package/src/chat-history/ChatHistoryList.tsx +87 -26
- package/src/chat-history/ChatHistoryRailSections.spec.tsx +12 -4
- package/src/chat-history.css +109 -9
- package/src/composer/TiptapComposer.tsx +1 -1
|
@@ -480,6 +480,9 @@ const messages: ToolkitAgentChatTranslation = {
|
|
|
480
480
|
"history.ownedBy": "Eigentümer: {{name}}",
|
|
481
481
|
"history.accessDirect": "Mit dir geteilt",
|
|
482
482
|
"history.accessOrganization": "Mit deiner Organisation geteilt",
|
|
483
|
+
"history.copyLink": "Link kopieren",
|
|
484
|
+
"history.linkCopied": "Link kopiert",
|
|
485
|
+
"history.copyLinkFailed": "Link konnte nicht kopiert werden",
|
|
483
486
|
"integrations.availableSection": "Verfügbare Integrationen",
|
|
484
487
|
"integrations.connectedSection": "Verbunden",
|
|
485
488
|
"integrations.goToApiKeys": "Zu den API-Schlüsseln",
|
|
@@ -769,6 +769,9 @@ const messages = {
|
|
|
769
769
|
"history.ownedBy": "Owner: {{name}}",
|
|
770
770
|
"history.accessDirect": "Shared with you",
|
|
771
771
|
"history.accessOrganization": "Shared with your organization",
|
|
772
|
+
"history.copyLink": "Copy link",
|
|
773
|
+
"history.linkCopied": "Link copied",
|
|
774
|
+
"history.copyLinkFailed": "Couldn't copy the link",
|
|
772
775
|
"integrations.availableSection": "Available integrations",
|
|
773
776
|
"integrations.connectedSection": "Connected",
|
|
774
777
|
"integrations.goToApiKeys": "Go to API keys",
|
|
@@ -479,6 +479,9 @@ const messages: ToolkitAgentChatTranslation = {
|
|
|
479
479
|
"history.ownedBy": "Propietario: {{name}}",
|
|
480
480
|
"history.accessDirect": "Compartidos contigo",
|
|
481
481
|
"history.accessOrganization": "Compartido con tu organización",
|
|
482
|
+
"history.copyLink": "Copiar enlace",
|
|
483
|
+
"history.linkCopied": "Enlace copiado",
|
|
484
|
+
"history.copyLinkFailed": "No se pudo copiar el enlace",
|
|
482
485
|
"integrations.availableSection": "Integraciones disponibles",
|
|
483
486
|
"integrations.connectedSection": "Conectado",
|
|
484
487
|
"integrations.goToApiKeys": "Ir a claves de API",
|
|
@@ -478,6 +478,9 @@ const messages: ToolkitAgentChatTranslation = {
|
|
|
478
478
|
"history.ownedBy": "Propriétaire : {{name}}",
|
|
479
479
|
"history.accessDirect": "Partagés avec vous",
|
|
480
480
|
"history.accessOrganization": "Partagé avec votre organisation",
|
|
481
|
+
"history.copyLink": "Copier le lien",
|
|
482
|
+
"history.linkCopied": "Lien copié",
|
|
483
|
+
"history.copyLinkFailed": "Impossible de copier le lien",
|
|
481
484
|
"integrations.availableSection": "Intégrations disponibles",
|
|
482
485
|
"integrations.connectedSection": "Connecté",
|
|
483
486
|
"integrations.goToApiKeys": "Aller aux clés API",
|
|
@@ -759,6 +759,9 @@ const messages: ToolkitAgentChatTranslation = {
|
|
|
759
759
|
"history.ownedBy": "मालिक: {{name}}",
|
|
760
760
|
"history.accessDirect": "आपके साथ साझा",
|
|
761
761
|
"history.accessOrganization": "आपके संगठन के साथ साझा",
|
|
762
|
+
"history.copyLink": "लिंक कॉपी करें",
|
|
763
|
+
"history.linkCopied": "लिंक कॉपी हो गया",
|
|
764
|
+
"history.copyLinkFailed": "लिंक कॉपी नहीं हो सका",
|
|
762
765
|
"integrations.availableSection": "उपलब्ध इंटीग्रेशन",
|
|
763
766
|
"integrations.connectedSection": "कनेक्ट किए गए",
|
|
764
767
|
"integrations.goToApiKeys": "API कुंजियों पर जाएं",
|
|
@@ -783,6 +783,9 @@ const messages: ToolkitAgentChatTranslation = {
|
|
|
783
783
|
"history.ownedBy": "所有者: {{name}}",
|
|
784
784
|
"history.accessDirect": "共有されたチャット",
|
|
785
785
|
"history.accessOrganization": "組織と共有",
|
|
786
|
+
"history.copyLink": "リンクをコピー",
|
|
787
|
+
"history.linkCopied": "リンクをコピーしました",
|
|
788
|
+
"history.copyLinkFailed": "リンクをコピーできませんでした",
|
|
786
789
|
"integrations.availableSection": "利用可能な連携",
|
|
787
790
|
"integrations.connectedSection": "接続済み",
|
|
788
791
|
"integrations.goToApiKeys": "API キーへ移動",
|
|
@@ -762,6 +762,9 @@ const messages: ToolkitAgentChatTranslation = {
|
|
|
762
762
|
"history.ownedBy": "소유자: {{name}}",
|
|
763
763
|
"history.accessDirect": "나와 공유된 채팅",
|
|
764
764
|
"history.accessOrganization": "조직과 공유됨",
|
|
765
|
+
"history.copyLink": "링크 복사",
|
|
766
|
+
"history.linkCopied": "링크를 복사했어요",
|
|
767
|
+
"history.copyLinkFailed": "링크를 복사하지 못했어요",
|
|
765
768
|
"integrations.availableSection": "사용 가능한 연동",
|
|
766
769
|
"integrations.connectedSection": "연결됨",
|
|
767
770
|
"integrations.goToApiKeys": "API 키로 이동",
|
|
@@ -473,6 +473,9 @@ const messages: ToolkitAgentChatTranslation = {
|
|
|
473
473
|
"history.ownedBy": "Proprietário: {{name}}",
|
|
474
474
|
"history.accessDirect": "Compartilhados com você",
|
|
475
475
|
"history.accessOrganization": "Compartilhado com sua organização",
|
|
476
|
+
"history.copyLink": "Copiar link",
|
|
477
|
+
"history.linkCopied": "Link copiado",
|
|
478
|
+
"history.copyLinkFailed": "Não foi possível copiar o link",
|
|
476
479
|
"integrations.availableSection": "Integrações disponíveis",
|
|
477
480
|
"integrations.connectedSection": "Conectado",
|
|
478
481
|
"integrations.goToApiKeys": "Ir para chaves de API",
|
|
@@ -726,6 +726,9 @@ const messages: ToolkitAgentChatTranslation = {
|
|
|
726
726
|
"history.ownedBy": "所有者:{{name}}",
|
|
727
727
|
"history.accessDirect": "与您共享",
|
|
728
728
|
"history.accessOrganization": "与您的组织共享",
|
|
729
|
+
"history.copyLink": "复制链接",
|
|
730
|
+
"history.linkCopied": "链接已复制",
|
|
731
|
+
"history.copyLinkFailed": "无法复制链接",
|
|
729
732
|
"integrations.availableSection": "可用集成",
|
|
730
733
|
"integrations.connectedSection": "已连接",
|
|
731
734
|
"integrations.goToApiKeys": "前往 API 密钥",
|
|
@@ -728,6 +728,9 @@ const messages: ToolkitAgentChatTranslation = {
|
|
|
728
728
|
"history.ownedBy": "擁有者:{{name}}",
|
|
729
729
|
"history.accessDirect": "與您共用",
|
|
730
730
|
"history.accessOrganization": "與您的組織共用",
|
|
731
|
+
"history.copyLink": "複製連結",
|
|
732
|
+
"history.linkCopied": "已複製連結",
|
|
733
|
+
"history.copyLinkFailed": "無法複製連結",
|
|
731
734
|
"integrations.availableSection": "可用整合",
|
|
732
735
|
"integrations.connectedSection": "已連線",
|
|
733
736
|
"integrations.goToApiKeys": "前往 API 金鑰",
|
|
@@ -9,13 +9,19 @@ const agentEngineStatusMock = vi.hoisted(() => ({
|
|
|
9
9
|
state: "missing" as "unknown" | "configured" | "missing" | "unavailable",
|
|
10
10
|
}));
|
|
11
11
|
|
|
12
|
-
vi.mock(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
vi.mock(
|
|
13
|
+
"@agent-native/core/client/use-agent-engine-configured",
|
|
14
|
+
async (importOriginal) => ({
|
|
15
|
+
...(await importOriginal<
|
|
16
|
+
typeof import("@agent-native/core/client/use-agent-engine-configured")
|
|
17
|
+
>()),
|
|
18
|
+
useAgentEngineConfigured: () => ({
|
|
19
|
+
canChat: agentEngineStatusMock.state === "configured",
|
|
20
|
+
missing: agentEngineStatusMock.state === "missing",
|
|
21
|
+
state: agentEngineStatusMock.state,
|
|
22
|
+
}),
|
|
17
23
|
}),
|
|
18
|
-
|
|
24
|
+
);
|
|
19
25
|
|
|
20
26
|
vi.mock("../chat/chat/run-recovery.js", async () => {
|
|
21
27
|
const { createElement } = await import("react");
|
|
@@ -44,6 +50,7 @@ import {
|
|
|
44
50
|
openAgentSettings,
|
|
45
51
|
useCommandMenuNestedDialog,
|
|
46
52
|
useCommandMenuShortcut,
|
|
53
|
+
type AppCommandContext,
|
|
47
54
|
type AppCommandGroup,
|
|
48
55
|
type CommandMenuItemMatchContext,
|
|
49
56
|
type CommandMenuItemMatcher,
|
|
@@ -1836,6 +1843,168 @@ describe("CommandMenu", () => {
|
|
|
1836
1843
|
).toContain("Selected preview");
|
|
1837
1844
|
});
|
|
1838
1845
|
|
|
1846
|
+
it("renders opt-in app command previews in only the selected row", () => {
|
|
1847
|
+
renderAppCommands({
|
|
1848
|
+
groups: [
|
|
1849
|
+
{
|
|
1850
|
+
id: "results",
|
|
1851
|
+
order: 1,
|
|
1852
|
+
commands: [
|
|
1853
|
+
{
|
|
1854
|
+
id: "record",
|
|
1855
|
+
order: 1,
|
|
1856
|
+
label: "Meeting notes",
|
|
1857
|
+
inlinePreview: <span>First row preview</span>,
|
|
1858
|
+
onSelect() {},
|
|
1859
|
+
},
|
|
1860
|
+
{
|
|
1861
|
+
id: "meeting-agenda",
|
|
1862
|
+
order: 2,
|
|
1863
|
+
label: "Meeting agenda",
|
|
1864
|
+
inlinePreview: <span>Second row preview</span>,
|
|
1865
|
+
onSelect() {},
|
|
1866
|
+
},
|
|
1867
|
+
],
|
|
1868
|
+
},
|
|
1869
|
+
],
|
|
1870
|
+
});
|
|
1871
|
+
|
|
1872
|
+
const firstRow = document.querySelector(
|
|
1873
|
+
'[cmdk-item][data-value="app-command:results:record"]',
|
|
1874
|
+
);
|
|
1875
|
+
const secondRow = document.querySelector(
|
|
1876
|
+
'[cmdk-item][data-value="app-command:results:meeting-agenda"]',
|
|
1877
|
+
);
|
|
1878
|
+
expect(
|
|
1879
|
+
firstRow?.querySelector(
|
|
1880
|
+
'[data-testid="command-menu-app-command-preview"]',
|
|
1881
|
+
)?.textContent,
|
|
1882
|
+
).toBe("First row preview");
|
|
1883
|
+
expect(
|
|
1884
|
+
secondRow?.querySelector(
|
|
1885
|
+
'[data-testid="command-menu-app-command-preview"]',
|
|
1886
|
+
),
|
|
1887
|
+
).toBeNull();
|
|
1888
|
+
|
|
1889
|
+
const input = document.querySelector<HTMLInputElement>("[cmdk-input]");
|
|
1890
|
+
expect(input).toBeTruthy();
|
|
1891
|
+
act(() =>
|
|
1892
|
+
input!.dispatchEvent(
|
|
1893
|
+
new KeyboardEvent("keydown", { key: "ArrowDown", bubbles: true }),
|
|
1894
|
+
),
|
|
1895
|
+
);
|
|
1896
|
+
|
|
1897
|
+
expect(
|
|
1898
|
+
firstRow?.querySelector(
|
|
1899
|
+
'[data-testid="command-menu-app-command-preview"]',
|
|
1900
|
+
),
|
|
1901
|
+
).toBeNull();
|
|
1902
|
+
expect(
|
|
1903
|
+
secondRow?.querySelector(
|
|
1904
|
+
'[data-testid="command-menu-app-command-preview"]',
|
|
1905
|
+
)?.textContent,
|
|
1906
|
+
).toBe("Second row preview");
|
|
1907
|
+
});
|
|
1908
|
+
|
|
1909
|
+
it("keeps the selected app preview when search retains the highlighted row", () => {
|
|
1910
|
+
renderAppCommands({
|
|
1911
|
+
groups: [
|
|
1912
|
+
{
|
|
1913
|
+
id: "results",
|
|
1914
|
+
order: 1,
|
|
1915
|
+
commands: [
|
|
1916
|
+
{
|
|
1917
|
+
id: "meeting-notes",
|
|
1918
|
+
order: 1,
|
|
1919
|
+
label: "Meeting notes",
|
|
1920
|
+
inlinePreview: <span>Meeting preview</span>,
|
|
1921
|
+
onSelect() {},
|
|
1922
|
+
},
|
|
1923
|
+
{
|
|
1924
|
+
id: "other-task",
|
|
1925
|
+
order: 2,
|
|
1926
|
+
label: "Other task",
|
|
1927
|
+
inlinePreview: <span>Other preview</span>,
|
|
1928
|
+
onSelect() {},
|
|
1929
|
+
},
|
|
1930
|
+
],
|
|
1931
|
+
},
|
|
1932
|
+
],
|
|
1933
|
+
});
|
|
1934
|
+
|
|
1935
|
+
const selectedPreview = () =>
|
|
1936
|
+
document.querySelector(
|
|
1937
|
+
'[cmdk-item][data-value="app-command:results:meeting-notes"] [data-testid="command-menu-app-command-preview"]',
|
|
1938
|
+
)?.textContent;
|
|
1939
|
+
|
|
1940
|
+
expect(selectedPreview()).toBe("Meeting preview");
|
|
1941
|
+
search("Meeting");
|
|
1942
|
+
expect(selectedPreview()).toBe("Meeting preview");
|
|
1943
|
+
});
|
|
1944
|
+
|
|
1945
|
+
it("passes app context and search to an app command row preview", () => {
|
|
1946
|
+
const renderPreview = vi.fn(
|
|
1947
|
+
({
|
|
1948
|
+
search: currentSearch,
|
|
1949
|
+
appContext,
|
|
1950
|
+
}: AppCommandContext<{ workspace: string }>) => (
|
|
1951
|
+
<span>{`${currentSearch}|${appContext?.workspace}`}</span>
|
|
1952
|
+
),
|
|
1953
|
+
);
|
|
1954
|
+
renderAppCommands({
|
|
1955
|
+
initialSelection: "none",
|
|
1956
|
+
context: { workspace: "alpha" },
|
|
1957
|
+
groups: [
|
|
1958
|
+
{
|
|
1959
|
+
id: "results",
|
|
1960
|
+
order: 1,
|
|
1961
|
+
commands: [
|
|
1962
|
+
{
|
|
1963
|
+
id: "workspace",
|
|
1964
|
+
order: 1,
|
|
1965
|
+
label: "Open workspace",
|
|
1966
|
+
inlinePreview: renderPreview,
|
|
1967
|
+
onSelect() {},
|
|
1968
|
+
},
|
|
1969
|
+
],
|
|
1970
|
+
},
|
|
1971
|
+
],
|
|
1972
|
+
});
|
|
1973
|
+
|
|
1974
|
+
const input = document.querySelector<HTMLInputElement>("[cmdk-input]");
|
|
1975
|
+
expect(input).toBeTruthy();
|
|
1976
|
+
const moveDown = () =>
|
|
1977
|
+
act(() =>
|
|
1978
|
+
input!.dispatchEvent(
|
|
1979
|
+
new KeyboardEvent("keydown", { key: "ArrowDown", bubbles: true }),
|
|
1980
|
+
),
|
|
1981
|
+
);
|
|
1982
|
+
moveDown();
|
|
1983
|
+
|
|
1984
|
+
expect(renderPreview).toHaveBeenCalledWith(
|
|
1985
|
+
expect.objectContaining({
|
|
1986
|
+
search: "",
|
|
1987
|
+
appContext: { workspace: "alpha" },
|
|
1988
|
+
}),
|
|
1989
|
+
);
|
|
1990
|
+
expect(
|
|
1991
|
+
document.querySelector('[data-testid="command-menu-app-command-preview"]')
|
|
1992
|
+
?.textContent,
|
|
1993
|
+
).toBe("|alpha");
|
|
1994
|
+
|
|
1995
|
+
search("workspace");
|
|
1996
|
+
moveDown();
|
|
1997
|
+
expect(
|
|
1998
|
+
document.querySelector(
|
|
1999
|
+
'[cmdk-item][data-value="app-command:results:workspace"]',
|
|
2000
|
+
),
|
|
2001
|
+
).toBeTruthy();
|
|
2002
|
+
expect(
|
|
2003
|
+
document.querySelector('[data-testid="command-menu-app-command-preview"]')
|
|
2004
|
+
?.textContent,
|
|
2005
|
+
).toBe("workspace|alpha");
|
|
2006
|
+
});
|
|
2007
|
+
|
|
1839
2008
|
it("hides the app preview when a non-app result is selected", () => {
|
|
1840
2009
|
renderAppCommands({
|
|
1841
2010
|
groups: [
|
|
@@ -304,6 +304,10 @@ interface AppCommandBase<TAppContext> {
|
|
|
304
304
|
preview?:
|
|
305
305
|
| ReactNode
|
|
306
306
|
| ((context: AppCommandContext<TAppContext>) => ReactNode);
|
|
307
|
+
/** Content rendered at the end of this command's selected row. */
|
|
308
|
+
inlinePreview?:
|
|
309
|
+
| ReactNode
|
|
310
|
+
| ((context: AppCommandContext<TAppContext>) => ReactNode);
|
|
307
311
|
visibleWhen?: (context: AppCommandContext<TAppContext>) => boolean;
|
|
308
312
|
enabledWhen?: (context: AppCommandContext<TAppContext>) => boolean;
|
|
309
313
|
deferSelect?: boolean;
|
|
@@ -877,9 +881,10 @@ export function CommandMenu<TAppContext = unknown>({
|
|
|
877
881
|
firstEnabledAppCommand?.value ??
|
|
878
882
|
NO_COMMAND_SELECTION)
|
|
879
883
|
: undefined;
|
|
884
|
+
const selectedAppCommandValue = commandMenuValue ?? selectedCommandValue;
|
|
880
885
|
const previewAppCommand =
|
|
881
886
|
appCommandEntries.find(
|
|
882
|
-
(entry) => entry.value ===
|
|
887
|
+
(entry) => entry.value === selectedAppCommandValue,
|
|
883
888
|
) ?? selectedAppCommand;
|
|
884
889
|
const appPreview = previewAppCommand?.command.preview;
|
|
885
890
|
const renderedAppPreview =
|
|
@@ -973,6 +978,12 @@ export function CommandMenu<TAppContext = unknown>({
|
|
|
973
978
|
{commands.map((command) => {
|
|
974
979
|
const value = `app-command:${group.id}:${command.id}`;
|
|
975
980
|
const enabled = command.enabledWhen?.(appCommandContext) ?? true;
|
|
981
|
+
const inlinePreview =
|
|
982
|
+
value === selectedAppCommandValue
|
|
983
|
+
? typeof command.inlinePreview === "function"
|
|
984
|
+
? command.inlinePreview(appCommandContext)
|
|
985
|
+
: command.inlinePreview
|
|
986
|
+
: null;
|
|
976
987
|
return (
|
|
977
988
|
<CommandItemPrimitive
|
|
978
989
|
key={command.id}
|
|
@@ -1003,6 +1014,14 @@ export function CommandMenu<TAppContext = unknown>({
|
|
|
1003
1014
|
{command.shortcutHint}
|
|
1004
1015
|
</CommandShortcutPrimitive>
|
|
1005
1016
|
) : null}
|
|
1017
|
+
{inlinePreview != null ? (
|
|
1018
|
+
<div
|
|
1019
|
+
data-testid="command-menu-app-command-preview"
|
|
1020
|
+
className="ms-auto min-w-0"
|
|
1021
|
+
>
|
|
1022
|
+
{inlinePreview}
|
|
1023
|
+
</div>
|
|
1024
|
+
) : null}
|
|
1006
1025
|
</CommandItemPrimitive>
|
|
1007
1026
|
);
|
|
1008
1027
|
})}
|
|
@@ -1299,12 +1318,10 @@ export function CommandMenu<TAppContext = unknown>({
|
|
|
1299
1318
|
onValueChange={(value) => {
|
|
1300
1319
|
updateSearch(value);
|
|
1301
1320
|
selectionEnabledRef.current = false;
|
|
1302
|
-
if (initialSelection === "none")
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
: "",
|
|
1307
|
-
);
|
|
1321
|
+
if (initialSelection === "none") {
|
|
1322
|
+
setSelectionEnabled(false);
|
|
1323
|
+
setSelectedCommandValue(nextEmptySelectionValue());
|
|
1324
|
+
}
|
|
1308
1325
|
}}
|
|
1309
1326
|
onKeyDown={(event) => {
|
|
1310
1327
|
if (
|
|
@@ -1150,6 +1150,12 @@ function MemberAutocomplete({
|
|
|
1150
1150
|
activeIndex >= 0 && activeIndex < suggestions.length
|
|
1151
1151
|
? suggestions[activeIndex]
|
|
1152
1152
|
: null;
|
|
1153
|
+
const listOpen =
|
|
1154
|
+
open &&
|
|
1155
|
+
(suggestions.length > 0 ||
|
|
1156
|
+
search.isLoading ||
|
|
1157
|
+
Boolean(search.error) ||
|
|
1158
|
+
value.trim().length > 0);
|
|
1153
1159
|
|
|
1154
1160
|
useEffect(() => {
|
|
1155
1161
|
setActiveIndex(-1);
|
|
@@ -1230,7 +1236,7 @@ function MemberAutocomplete({
|
|
|
1230
1236
|
};
|
|
1231
1237
|
|
|
1232
1238
|
return (
|
|
1233
|
-
<Popover open={
|
|
1239
|
+
<Popover open={listOpen} onOpenChange={onOpenChange}>
|
|
1234
1240
|
<PopoverAnchor asChild>
|
|
1235
1241
|
<div className="flex h-9 min-w-0 flex-1 items-center overflow-hidden rounded-md border border-input bg-card focus-within:ring-1 focus-within:ring-ring">
|
|
1236
1242
|
<input
|
|
@@ -1238,8 +1244,8 @@ function MemberAutocomplete({
|
|
|
1238
1244
|
type="text"
|
|
1239
1245
|
role="combobox"
|
|
1240
1246
|
aria-autocomplete="list"
|
|
1241
|
-
aria-expanded={
|
|
1242
|
-
aria-controls={
|
|
1247
|
+
aria-expanded={listOpen}
|
|
1248
|
+
aria-controls={listOpen ? listboxId : undefined}
|
|
1243
1249
|
aria-activedescendant={
|
|
1244
1250
|
activeIndex >= 0 ? optionId(listboxId, activeIndex) : undefined
|
|
1245
1251
|
}
|
|
@@ -1361,13 +1367,9 @@ function MemberAutocomplete({
|
|
|
1361
1367
|
|
|
1362
1368
|
{!search.isLoading && !search.error && suggestions.length === 0 ? (
|
|
1363
1369
|
<div className="px-3 py-3 text-sm text-muted-foreground">
|
|
1364
|
-
{
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
})
|
|
1368
|
-
: t("agentChat.share.noPeopleFound", {
|
|
1369
|
-
defaultValue: "No people found.",
|
|
1370
|
-
})}
|
|
1370
|
+
{t("agentChat.share.noMatches", {
|
|
1371
|
+
defaultValue: "No matches.",
|
|
1372
|
+
})}
|
|
1371
1373
|
</div>
|
|
1372
1374
|
) : null}
|
|
1373
1375
|
|
|
@@ -635,4 +635,55 @@ describe("ChatHistoryList", () => {
|
|
|
635
635
|
});
|
|
636
636
|
expect(container.querySelector(".an-chat-history-row__menu")).toBeNull();
|
|
637
637
|
});
|
|
638
|
+
|
|
639
|
+
it("keeps a read-only row to its owner header and Copy link", async () => {
|
|
640
|
+
const onCopyLink = vi.fn();
|
|
641
|
+
const onDelete = vi.fn();
|
|
642
|
+
act(() => {
|
|
643
|
+
root.render(
|
|
644
|
+
<ChatHistoryList
|
|
645
|
+
items={[
|
|
646
|
+
item({
|
|
647
|
+
id: "shared",
|
|
648
|
+
readOnly: true,
|
|
649
|
+
ownerAvatar: <span data-testid="avatar">P</span>,
|
|
650
|
+
ownerLabel: "pat@example.com",
|
|
651
|
+
accessLabel: "Shared with your organization",
|
|
652
|
+
accessBasis: "organization",
|
|
653
|
+
}),
|
|
654
|
+
]}
|
|
655
|
+
onSelect={() => {}}
|
|
656
|
+
onRename={() => {}}
|
|
657
|
+
onDelete={onDelete}
|
|
658
|
+
onTogglePin={() => {}}
|
|
659
|
+
onCopyLink={onCopyLink}
|
|
660
|
+
/>,
|
|
661
|
+
);
|
|
662
|
+
});
|
|
663
|
+
|
|
664
|
+
const row = container.querySelector<HTMLElement>(".an-chat-history-row")!;
|
|
665
|
+
const mark = row.querySelector(".an-chat-history-row__owner-mark");
|
|
666
|
+
expect(mark?.getAttribute("data-access-basis")).toBe("organization");
|
|
667
|
+
expect(mark?.querySelector("[data-testid='avatar']")).not.toBeNull();
|
|
668
|
+
expect(
|
|
669
|
+
row.querySelector(".an-chat-history-row__topline")?.textContent,
|
|
670
|
+
).toBe("sharedP");
|
|
671
|
+
|
|
672
|
+
await openMenu(
|
|
673
|
+
row.querySelector<HTMLButtonElement>(
|
|
674
|
+
".an-chat-history-row__menu-trigger",
|
|
675
|
+
)!,
|
|
676
|
+
);
|
|
677
|
+
expect(
|
|
678
|
+
document.body.querySelector(".an-chat-history-row__menu-owner")
|
|
679
|
+
?.textContent,
|
|
680
|
+
).toBe("Ppat@example.comShared with your organization");
|
|
681
|
+
expect(getMenuItems().map((element) => element.textContent)).toEqual([
|
|
682
|
+
"Copy link",
|
|
683
|
+
]);
|
|
684
|
+
|
|
685
|
+
act(() => getMenuItems()[0]?.click());
|
|
686
|
+
expect(onCopyLink).toHaveBeenCalledWith("shared");
|
|
687
|
+
expect(onDelete).not.toHaveBeenCalled();
|
|
688
|
+
});
|
|
638
689
|
});
|