From 34b0fc70b65df6b98e9bf717e4ea4ef332337d00 Mon Sep 17 00:00:00 2001 From: Oleg Ivaniv Date: Mon, 28 Oct 2024 08:30:29 +0100 Subject: [PATCH] WIP: Refactor to composables --- package.json | 1 + packages/@n8n/chat/src/components/Message.vue | 4 +- packages/editor-ui/src/App.vue | 33 +- .../src/components/CanvasChat/CanvasChat.vue | 183 +++-- .../CanvasChat/MessageOptionAction.vue | 31 + .../CanvasChat/MessageOptionTooltip.vue | 15 + .../components/CanvasChat/WorkflowLMChat.vue | 696 ++++++++++++++++++ .../CanvasChat/components/ChatLogsPanel.vue | 81 ++ .../components/ChatMessagesPanel.vue | 166 +++++ .../components/MessageOptionAction.vue | 49 ++ .../components/MessageOptionTooltip.vue | 41 ++ .../composables/useChatMessaging.ts | 291 ++++++++ .../CanvasChat/composables/useChatTrigger.ts | 146 ++++ .../CanvasChat/composables/useResize.ts | 92 +++ .../src/components/CanvasChat/types/chat.ts | 22 + .../RunDataAi/AiRunContentBlock.vue | 57 +- .../src/components/RunDataAi/RunDataAi.vue | 28 +- .../ExecuteCommand/ExecuteCommand.node.ts | 1 + 18 files changed, 1845 insertions(+), 92 deletions(-) create mode 100644 packages/editor-ui/src/components/CanvasChat/MessageOptionAction.vue create mode 100644 packages/editor-ui/src/components/CanvasChat/MessageOptionTooltip.vue create mode 100644 packages/editor-ui/src/components/CanvasChat/WorkflowLMChat.vue create mode 100644 packages/editor-ui/src/components/CanvasChat/components/ChatLogsPanel.vue create mode 100644 packages/editor-ui/src/components/CanvasChat/components/ChatMessagesPanel.vue create mode 100644 packages/editor-ui/src/components/CanvasChat/components/MessageOptionAction.vue create mode 100644 packages/editor-ui/src/components/CanvasChat/components/MessageOptionTooltip.vue create mode 100644 packages/editor-ui/src/components/CanvasChat/composables/useChatMessaging.ts create mode 100644 packages/editor-ui/src/components/CanvasChat/composables/useChatTrigger.ts create mode 100644 packages/editor-ui/src/components/CanvasChat/composables/useResize.ts create mode 100644 packages/editor-ui/src/components/CanvasChat/types/chat.ts diff --git a/package.json b/package.json index 09c576a8c3..e77655456b 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "build:nodes": "turbo run build:nodes", "typecheck": "turbo typecheck", "dev": "turbo run dev --parallel --env-mode=loose --filter=!n8n-design-system --filter=!@n8n/chat --filter=!@n8n/task-runner", + "dev:be": "turbo run dev --parallel --env-mode=loose --filter=!n8n-design-system --filter=!@n8n/chat --filter=!@n8n/task-runner --filter=!n8n-editor-ui", "dev:ai": "turbo run dev --parallel --env-mode=loose --filter=@n8n/nodes-langchain --filter=n8n --filter=n8n-core", "clean": "turbo run clean --parallel", "reset": "node scripts/ensure-zx.mjs && zx scripts/reset.mjs", diff --git a/packages/@n8n/chat/src/components/Message.vue b/packages/@n8n/chat/src/components/Message.vue index f584516332..fa54835931 100644 --- a/packages/@n8n/chat/src/components/Message.vue +++ b/packages/@n8n/chat/src/components/Message.vue @@ -132,7 +132,7 @@ onMounted(async () => { .chat-message { display: block; position: relative; - max-width: 80%; + max-width: fit-content; font-size: var(--chat--message--font-size, 1rem); padding: var(--chat--message--padding, var(--chat--spacing)); border-radius: var(--chat--message--border-radius, var(--chat--border-radius)); @@ -159,7 +159,7 @@ onMounted(async () => { } p { - line-height: var(--chat--message-line-height, 1.8); + line-height: var(--chat--message-line-height, 1.5); word-wrap: break-word; } diff --git a/packages/editor-ui/src/App.vue b/packages/editor-ui/src/App.vue index f11c423dc2..68c29e8058 100644 --- a/packages/editor-ui/src/App.vue +++ b/packages/editor-ui/src/App.vue @@ -31,15 +31,11 @@ const loading = ref(true); const defaultLocale = computed(() => rootStore.defaultLocale); const isDemoMode = computed(() => route.name === VIEWS.DEMO); const showAssistantButton = computed(() => assistantStore.canShowAssistantButtonsOnCanvas); - +const hasContentFooter = ref(false); const appGrid = ref(null); const assistantSidebarWidth = computed(() => assistantStore.chatWidth); -watch(defaultLocale, (newLocale) => { - void loadLanguage(newLocale); -}); - onMounted(async () => { logHiringBanner(); void useExternalHooks().run('app.mount'); @@ -52,11 +48,6 @@ onBeforeUnmount(() => { window.removeEventListener('resize', updateGridWidth); }); -// As assistant sidebar width changes, recalculate the total width regularly -watch(assistantSidebarWidth, async () => { - await updateGridWidth(); -}); - const logHiringBanner = () => { if (settingsStore.isHiringBannerEnabled && !isDemoMode.value) { console.log(HIRING_BANNER); @@ -69,6 +60,21 @@ const updateGridWidth = async () => { uiStore.appGridWidth = appGrid.value.clientWidth; } }; + +// As assistant sidebar width changes, recalculate the total width regularly +watch(assistantSidebarWidth, async () => { + await updateGridWidth(); +}); + +watch(route, (r) => { + hasContentFooter.value = r.matched.some( + (matchedRoute) => matchedRoute.components?.footer !== undefined, + ); +}); + +watch(defaultLocale, (newLocale) => { + void loadLanguage(newLocale); +});