diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000000000..cffda42f08586 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,7 @@ +FROM n8nio/base:20 + +RUN apk add --no-cache --update openssh sudo shadow bash +RUN echo node ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/node && chmod 0440 /etc/sudoers.d/node +RUN mkdir /workspaces && chown node:node /workspaces +USER node +RUN mkdir -p ~/.pnpm-store && pnpm config set store-dir ~/.pnpm-store --global diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000000000..c81220d1b443e --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,19 @@ +{ + "name": "n8n", + "dockerComposeFile": "docker-compose.yml", + "service": "n8n", + "workspaceFolder": "/workspaces", + "mounts": [ + "type=bind,source=${localWorkspaceFolder},target=/workspaces,consistency=cached", + "type=bind,source=${localEnv:HOME}/.ssh,target=/home/node/.ssh,consistency=cached", + "type=bind,source=${localEnv:HOME}/.n8n,target=/home/node/.n8n,consistency=cached" + ], + "forwardPorts": [8080, 5678], + "postCreateCommand": "corepack prepare --activate && pnpm install ", + "postAttachCommand": "pnpm build", + "customizations": { + "codespaces": { + "openFiles": ["CONTRIBUTING.md"] + } + } +} diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 0000000000000..7ecead94b692b --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,23 @@ +volumes: + postgres-data: + +services: + postgres: + image: postgres:16-alpine + restart: unless-stopped + volumes: + - postgres-data:/var/lib/postgresql/data + environment: + - POSTGRES_DB=n8n + - POSTGRES_PASSWORD=password + + n8n: + build: + context: . + dockerfile: Dockerfile + volumes: + - ..:/workspaces:cached + command: sleep infinity + environment: + DB_TYPE: postgresdb + DB_POSTGRESDB_PASSWORD: password diff --git a/.npmrc b/.npmrc index 688ccc885779a..42d2964a046a8 100644 --- a/.npmrc +++ b/.npmrc @@ -9,3 +9,6 @@ hoist = true shamefully-hoist = true hoist-workspace-packages = false loglevel = warn +package-manager-strict=false +# https://github.com/pnpm/pnpm/issues/7024 +package-import-method=clone-or-copy diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d60df9eb967fe..6602d748b3b0a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,6 +9,7 @@ Great that you are here and you want to contribute to n8n - [Code of conduct](#code-of-conduct) - [Directory structure](#directory-structure) - [Development setup](#development-setup) + - [Dev Container](#dev-container) - [Requirements](#requirements) - [Node.js](#nodejs) - [pnpm](#pnpm) @@ -60,6 +61,10 @@ The most important directories: If you want to change or extend n8n you have to make sure that all the needed dependencies are installed and the packages get linked correctly. Here's a short guide on how that can be done: +### Dev Container + +If you already have VS Code and Docker installed, you can click [here](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/n8n-io/n8n) to get started. Clicking these links will cause VS Code to automatically install the Dev Containers extension if needed, clone the source code into a container volume, and spin up a dev container for use. + ### Requirements #### Node.js diff --git a/jest.config.js b/jest.config.js index f3f7824c14253..3caac38ef9dbf 100644 --- a/jest.config.js +++ b/jest.config.js @@ -24,9 +24,11 @@ const config = { // This resolve the path mappings from the tsconfig relative to each jest.config.js moduleNameMapper: Object.entries(paths || {}).reduce((acc, [path, [mapping]]) => { path = `^${path.replace(/\/\*$/, '/(.*)$')}`; - mapping = mapping.replace(/^\.\/(?:(.*)\/)?\*$/, '$1'); + mapping = mapping.replace(/^\.?\.\/(?:(.*)\/)?\*$/, '$1'); mapping = mapping ? `/${mapping}` : ''; - acc[path] = '' + (baseUrl ? `/${baseUrl.replace(/^\.\//, '')}` : '') + mapping + '/$1'; + acc[path] = mapping.startsWith('/test') + ? '' + mapping + '/$1' + : '' + (baseUrl ? `/${baseUrl.replace(/^\.\//, '')}` : '') + mapping + '/$1'; return acc; }, {}), setupFilesAfterEnv: ['jest-expect-message'], diff --git a/n8n.code-workspace b/n8n.code-workspace new file mode 100644 index 0000000000000..9d32d7aa0407d --- /dev/null +++ b/n8n.code-workspace @@ -0,0 +1,7 @@ +{ + "folders": [ + { + "path": ".", + }, + ], +} diff --git a/packages/@n8n/nodes-langchain/nodes/agents/Agent/Agent.node.ts b/packages/@n8n/nodes-langchain/nodes/agents/Agent/Agent.node.ts index e4843f356cc0c..828dd1309ed5e 100644 --- a/packages/@n8n/nodes-langchain/nodes/agents/Agent/Agent.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/agents/Agent/Agent.node.ts @@ -235,6 +235,7 @@ export class Agent implements INodeType { displayName: 'AI Agent', name: 'agent', icon: 'fa:robot', + iconColor: 'black', group: ['transform'], version: [1, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6], description: 'Generates an action plan and executes it. Can use external tools.', diff --git a/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/EmbeddingsOpenAi.node.ts b/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/EmbeddingsOpenAi.node.ts index fa4387629948a..31180cd1e97b5 100644 --- a/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/EmbeddingsOpenAi.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/EmbeddingsOpenAi.node.ts @@ -71,7 +71,7 @@ export class EmbeddingsOpenAi implements INodeType { description: INodeTypeDescription = { displayName: 'Embeddings OpenAI', name: 'embeddingsOpenAi', - icon: 'file:openAi.svg', + icon: { light: 'file:openAiLight.svg', dark: 'file:openAiLight.dark.svg' }, credentials: [ { name: 'openAiApi', diff --git a/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/openAi.svg b/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/openAi.svg deleted file mode 100644 index 73d7895782176..0000000000000 --- a/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/openAi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/openAiLight.dark.svg b/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/openAiLight.dark.svg new file mode 100644 index 0000000000000..ceaa2c40b35b7 --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/openAiLight.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/openAiLight.svg b/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/openAiLight.svg new file mode 100644 index 0000000000000..c8a79cebaba68 --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/embeddings/EmbeddingsOpenAI/openAiLight.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.ts index 42bb08aaea8af..5cf188e75226c 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/LmChatOpenAi.node.ts @@ -16,7 +16,7 @@ export class LmChatOpenAi implements INodeType { displayName: 'OpenAI Chat Model', // eslint-disable-next-line n8n-nodes-base/node-class-description-name-miscased name: 'lmChatOpenAi', - icon: 'file:openAi.svg', + icon: { light: 'file:openAiLight.svg', dark: 'file:openAiLight.dark.svg' }, group: ['transform'], version: 1, description: 'For advanced usage with an AI chain', diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/openAi.svg b/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/openAi.svg deleted file mode 100644 index 73d7895782176..0000000000000 --- a/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/openAi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/openAiLight.dark.svg b/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/openAiLight.dark.svg new file mode 100644 index 0000000000000..ceaa2c40b35b7 --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/openAiLight.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/openAiLight.svg b/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/openAiLight.svg new file mode 100644 index 0000000000000..c8a79cebaba68 --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMChatOpenAi/openAiLight.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/LmOpenAi.node.ts b/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/LmOpenAi.node.ts index 70b8970cc25ec..3f2d1c4315c4e 100644 --- a/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/LmOpenAi.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/LmOpenAi.node.ts @@ -28,7 +28,7 @@ export class LmOpenAi implements INodeType { displayName: 'OpenAI Model', // eslint-disable-next-line n8n-nodes-base/node-class-description-name-miscased name: 'lmOpenAi', - icon: 'file:openAi.svg', + icon: { light: 'file:openAiLight.svg', dark: 'file:openAiLight.dark.svg' }, group: ['transform'], version: 1, description: 'For advanced usage with an AI chain', diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/openAi.svg b/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/openAi.svg deleted file mode 100644 index 73d7895782176..0000000000000 --- a/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/openAi.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/openAiLight.dark.svg b/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/openAiLight.dark.svg new file mode 100644 index 0000000000000..ceaa2c40b35b7 --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/openAiLight.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/openAiLight.svg b/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/openAiLight.svg new file mode 100644 index 0000000000000..c8a79cebaba68 --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/llms/LMOpenAi/openAiLight.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/@n8n/nodes-langchain/nodes/memory/MemoryManager/MemoryManager.node.ts b/packages/@n8n/nodes-langchain/nodes/memory/MemoryManager/MemoryManager.node.ts index 83918616c11f3..04d6035e7fbf9 100644 --- a/packages/@n8n/nodes-langchain/nodes/memory/MemoryManager/MemoryManager.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/memory/MemoryManager/MemoryManager.node.ts @@ -68,6 +68,7 @@ export class MemoryManager implements INodeType { displayName: 'Chat Memory Manager', name: 'memoryManager', icon: 'fa:database', + iconColor: 'black', group: ['transform'], version: [1, 1.1], description: 'Manage chat messages memory and use it in the workflow', diff --git a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/ChatTrigger.node.ts b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/ChatTrigger.node.ts index cf00bb2d82f1a..8e3c6aefd4d8c 100644 --- a/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/ChatTrigger.node.ts +++ b/packages/@n8n/nodes-langchain/nodes/trigger/ChatTrigger/ChatTrigger.node.ts @@ -19,6 +19,7 @@ export class ChatTrigger implements INodeType { displayName: 'Chat Trigger', name: 'chatTrigger', icon: 'fa:comments', + iconColor: 'black', group: ['trigger'], version: 1, description: 'Runs the workflow when an n8n generated webchat is submitted', diff --git a/packages/@n8n/nodes-langchain/nodes/vector_store/shared/createVectorStoreNode.ts b/packages/@n8n/nodes-langchain/nodes/vector_store/shared/createVectorStoreNode.ts index 7eb40d6371040..39617d873dbe2 100644 --- a/packages/@n8n/nodes-langchain/nodes/vector_store/shared/createVectorStoreNode.ts +++ b/packages/@n8n/nodes-langchain/nodes/vector_store/shared/createVectorStoreNode.ts @@ -12,6 +12,7 @@ import type { INodeType, ILoadOptionsFunctions, INodeListSearchResult, + Icon, } from 'n8n-workflow'; import type { Embeddings } from '@langchain/core/embeddings'; import type { Document } from '@langchain/core/documents'; @@ -27,7 +28,7 @@ interface NodeMeta { name: string; description: string; docsUrl: string; - icon: string; + icon: Icon; credentials?: INodeCredentialDescription[]; } interface VectorStoreNodeConstructorArgs { diff --git a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/versionDescription.ts b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/versionDescription.ts index 3c8aa518f7caf..2ed98f89f9aa0 100644 --- a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/versionDescription.ts +++ b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/actions/versionDescription.ts @@ -67,7 +67,7 @@ const configureNodeInputs = (resource: string, operation: string, hideTools: str export const versionDescription: INodeTypeDescription = { displayName: 'OpenAI', name: 'openAi', - icon: 'file:openAi.svg', + icon: { light: 'file:openAi.svg', dark: 'file:openAi.dark.svg' }, group: ['transform'], version: [1, 1.1, 1.2, 1.3], subtitle: `={{(${prettifyOperation})($parameter.resource, $parameter.operation)}}`, diff --git a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/openAi.dark.svg b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/openAi.dark.svg new file mode 100644 index 0000000000000..afc9e5cb6a916 --- /dev/null +++ b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/openAi.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/openAi.svg b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/openAi.svg index 4f8812da72e68..1a25faf77d597 100644 --- a/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/openAi.svg +++ b/packages/@n8n/nodes-langchain/nodes/vendors/OpenAi/openAi.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/cli/tsconfig.build.json b/packages/cli/tsconfig.build.json index 1e8a2ff7fa476..55afe8b40986a 100644 --- a/packages/cli/tsconfig.build.json +++ b/packages/cli/tsconfig.build.json @@ -6,5 +6,5 @@ "tsBuildInfoFile": "dist/build.tsbuildinfo" }, "include": ["src/**/*.ts"], - "exclude": ["test/**"] + "exclude": ["test/**", "src/**/__tests__/**"] } diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 86b8d550e813a..8c4325a55bb2a 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -8,7 +8,9 @@ "baseUrl": "src", "paths": { "@/*": ["./*"], - "@db/*": ["./databases/*"] + "@db/*": ["./databases/*"], + "@test/*": ["../test/shared/*"], + "@test-integration/*": ["../test/integration/shared/*"] }, "tsBuildInfoFile": "dist/typecheck.tsbuildinfo", // TODO: remove all options below this line diff --git a/packages/core/src/DirectoryLoader.ts b/packages/core/src/DirectoryLoader.ts index 698076c07cb4c..77c107ef732a6 100644 --- a/packages/core/src/DirectoryLoader.ts +++ b/packages/core/src/DirectoryLoader.ts @@ -101,11 +101,11 @@ export abstract class DirectoryLoader { tempNode.description.name = fullNodeName; - this.fixIconPath(tempNode.description, filePath); + this.fixIconPaths(tempNode.description, filePath); if ('nodeVersions' in tempNode) { for (const versionNode of Object.values(tempNode.nodeVersions)) { - this.fixIconPath(versionNode.description, filePath); + this.fixIconPaths(versionNode.description, filePath); } for (const version of Object.values(tempNode.nodeVersions)) { @@ -169,7 +169,7 @@ export abstract class DirectoryLoader { // include the credential type in the predefined credentials (HTTP node) Object.assign(tempCredential, { toJSON }); - this.fixIconPath(tempCredential, filePath); + this.fixIconPaths(tempCredential, filePath); } catch (e) { if (e instanceof TypeError) { throw new ApplicationError( @@ -281,14 +281,29 @@ export abstract class DirectoryLoader { } } - private fixIconPath( + private getIconPath(icon: string, filePath: string) { + const iconPath = path.join(path.dirname(filePath), icon.replace('file:', '')); + const relativePath = path.relative(this.directory, iconPath); + return `icons/${this.packageName}/${relativePath}`; + } + + private fixIconPaths( obj: INodeTypeDescription | INodeTypeBaseDescription | ICredentialType, filePath: string, ) { - if (obj.icon?.startsWith('file:')) { - const iconPath = path.join(path.dirname(filePath), obj.icon.substring(5)); - const relativePath = path.relative(this.directory, iconPath); - obj.iconUrl = `icons/${this.packageName}/${relativePath}`; + const { icon } = obj; + if (!icon) return; + + if (typeof icon === 'string') { + if (icon.startsWith('file:')) { + obj.iconUrl = this.getIconPath(icon, filePath); + delete obj.icon; + } + } else if (icon.light.startsWith('file:') && icon.dark.startsWith('file:')) { + obj.iconUrl = { + light: this.getIconPath(icon.light, filePath), + dark: this.getIconPath(icon.dark, filePath), + }; delete obj.icon; } } diff --git a/packages/design-system/src/components/N8nNodeIcon/NodeIcon.vue b/packages/design-system/src/components/N8nNodeIcon/NodeIcon.vue index 86fa08b8b5796..7ba2287fe65e7 100644 --- a/packages/design-system/src/components/N8nNodeIcon/NodeIcon.vue +++ b/packages/design-system/src/components/N8nNodeIcon/NodeIcon.vue @@ -83,7 +83,7 @@ const badgeSize = computed((): number => { return 10; case 18: default: - return 8; + return 12; } }); @@ -142,9 +142,10 @@ const badgeStyleData = computed((): Record => { text-align: center; } .nodeIconImage { - width: 100%; max-width: 100%; max-height: 100%; + width: auto; + height: auto; } .badge { diff --git a/packages/design-system/src/css/_tokens.dark.scss b/packages/design-system/src/css/_tokens.dark.scss index 027e4e37cb6c3..25ef7c010c0a2 100644 --- a/packages/design-system/src/css/_tokens.dark.scss +++ b/packages/design-system/src/css/_tokens.dark.scss @@ -47,7 +47,7 @@ --color-canvas-background-l: 18%; --color-canvas-dot: var(--prim-gray-670); --color-canvas-read-only-line: var(--prim-gray-800); - --color-canvas-node-background: var(--prim-gray-40); + --color-canvas-node-background: var(--prim-gray-740); --color-canvas-node-pinned-border: var(--prim-color-secondary-tint-100); --color-canvas-selected: var(--prim-gray-0-alpha-025); --node-type-main-color: var(--prim-gray-420); @@ -74,6 +74,18 @@ --color-sticky-background-7: var(--prim-gray-740); --color-sticky-border-7: var(--prim-gray-670); + // NodeIcon + --color-node-icon-gray: var(--prim-gray-200); + --color-node-icon-black: var(--prim-gray-70); + --color-node-icon-blue: #766dfb; + --color-node-icon-dark-blue: #6275ad; + --color-node-icon-orange-red: var(--prim-color-primary); + --color-node-icon-red: var(--prim-color-alt-k); + --color-node-icon-light-green: #20b69e; + --color-node-icon-dark-green: #86decc; + --color-node-icon-purple: #9b6dd5; + --color-node-icon-crimson: #d05876; + // Expressions, autocomplete, infobox --color-valid-resolvable-foreground: var(--prim-color-alt-a-tint-300); --color-valid-resolvable-background: var(--prim-color-alt-a-alpha-025); @@ -222,6 +234,175 @@ --color-mfa-recovery-code-color: var(--color-text-dark); --color-mfa-lose-access-text-color: var(--color-danger); + // AI + --node-type-background-l: 20%; + --node-type-supplemental-label-color-h: 235; + --node-type-supplemental-label-color-s: 28%; + --node-type-supplemental-label-color-l: 40%; + --node-type-supplemental-color-h: 235; + --node-type-supplemental-color-s: 13%; + --node-type-supplemental-color-l: 60%; + --node-type-supplemental-label-color: hsl( + var(--node-type-supplemental-label-color-h), + var(--node-type-supplemental-label-color-s), + var(--node-type-supplemental-label-color-l) + ); + --node-type-supplemental-icon: var(--color-foreground-dark); + --node-type-supplemental-color: hsl( + var(--node-type-supplemental-color-h), + var(--node-type-supplemental-color-s), + var(--node-type-supplemental-color-l) + ); + --node-type-supplemental-background: hsl( + var(--node-type-supplemental-color-h), + var(--node-type-supplemental-color-s), + var(--node-type-background-l) + ); + --node-type-supplemental-connector-color: var(--color-foreground-dark); + --node-type-ai_chain-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_chain-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_chain-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_chain-color: hsl( + var(--node-type-ai_chain-color-h), + var(--node-type-ai_chain-color-s), + var(--node-type-ai_chain-color-l) + ); + --node-type-chain-background: hsl( + var(--node-type-ai_chain-color-h), + var(--node-type-ai_chain-color-s), + var(--node-type-background-l) + ); + --node-type-ai_document-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_document-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_document-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_document-color: hsl( + var(--node-type-ai_document-color-h), + var(--node-type-ai_document-color-s), + var(--node-type-ai_document-color-l) + ); + --node-type-ai_document-background: hsl( + var(--node-type-ai_document-color-h), + var(--node-type-ai_document-color-s), + var(--node-type-background-l) + ); + --node-type-ai_embedding-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_embedding-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_embedding-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_embedding-color: hsl( + var(--node-type-ai_embedding-color-h), + var(--node-type-ai_embedding-color-s), + var(--node-type-ai_embedding-color-l) + ); + --node-type-ai_embedding-background: hsl( + var(--node-type-ai_embedding-color-h), + var(--node-type-ai_embedding-color-s), + var(--node-type-background-l) + ); + --node-type-ai_languageModel-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_languageModel-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_languageModel-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_languageModel-color: hsl( + var(--node-type-ai_languageModel-color-h), + var(--node-type-ai_languageModel-color-s), + var(--node-type-ai_languageModel-color-l) + ); + --node-type-ai_languageModel-background: hsl( + var(--node-type-ai_languageModel-color-h), + var(--node-type-ai_languageModel-color-s), + var(--node-type-background-l) + ); + --node-type-ai_memory-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_memory-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_memory-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_memory-color: hsl( + var(--node-type-ai_memory-color-h), + var(--node-type-ai_memory-color-s), + var(--node-type-ai_memory-color-l) + ); + --node-type-ai_memory-background: hsl( + var(--node-type-ai_memory-color-h), + var(--node-type-ai_memory-color-s), + var(--node-type-background-l) + ); + --node-type-ai_outputParser-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_outputParser-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_outputParser-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_outputParser-color: hsl( + var(--node-type-ai_outputParser-color-h), + var(--node-type-ai_outputParser-color-s), + var(--node-type-ai_outputParser-color-l) + ); + --node-type-ai_outputParser-background: hsl( + var(--node-type-ai_outputParser-color-h), + var(--node-type-ai_outputParser-color-s), + var(--node-type-background-l) + ); + --node-type-ai_tool-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_tool-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_tool-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_tool-color: hsl( + var(--node-type-ai_tool-color-h), + var(--node-type-ai_tool-color-s), + var(--node-type-ai_tool-color-l) + ); + --node-type-ai_tool-background: hsl( + var(--node-type-ai_tool-color-h), + var(--node-type-ai_tool-color-s), + var(--node-type-background-l) + ); + --node-type-ai_retriever-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_retriever-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_retriever-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_retriever-color: hsl( + var(--node-type-ai_retriever-color-h), + var(--node-type-ai_retriever-color-s), + var(--node-type-ai_retriever-color-l) + ); + --node-type-ai_retriever-background: hsl( + var(--node-type-ai_retriever-color-h), + var(--node-type-ai_retriever-color-s), + var(--node-type-background-l) + ); + --node-type-ai_textSplitter-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_textSplitter-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_textSplitter-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_textSplitter-color: hsl( + var(--node-type-ai_textSplitter-color-h), + var(--node-type-ai_textSplitter-color-s), + var(--node-type-ai_textSplitter-color-l) + ); + --node-type-ai_textSplitter-background: hsl( + var(--node-type-ai_textSplitter-color-h), + var(--node-type-ai_textSplitter-color-s), + var(--node-type-background-l) + ); + --node-type-ai_vectorRetriever-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_vectorRetriever-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_vectorRetriever-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_vectorRetriever-color: hsl( + var(--node-type-ai_vectorRetriever-color-h), + var(--node-type-ai_vectorRetriever-color-s), + var(--node-type-ai_vectorRetriever-color-l) + ); + --node-type-ai_vectorRetriever-background: hsl( + var(--node-type-ai_vectorRetriever-color-h), + var(--node-type-ai_vectorRetriever-color-s), + var(--node-type-background-l) + ); + --node-type-ai_vectorStore-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_vectorStore-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_vectorStore-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_vectorStore-color: hsl( + var(--node-type-ai_vectorStore-color-h), + var(--node-type-ai_vectorStore-color-s), + var(--node-type-ai_vectorStore-color-l) + ); + --node-type-ai_vectorStore-background: hsl( + var(--node-type-ai_vectorStore-color-h), + var(--node-type-ai_vectorStore-color-s), + var(--node-type-background-l) + ); + // Various --color-info-tint-1: var(--prim-gray-420); --color-info-tint-2: var(--prim-gray-740); @@ -234,7 +415,7 @@ var(--node-type-supplemental-label-color-s), var(--node-type-supplemental-label-color-l) ); - --color-configurable-node-name: var(--color-text-lighter); + --color-configurable-node-name: var(--color-text-dark); --color-secondary-link: var(--prim-color-secondary-tint-200); --color-secondary-link-hover: var(--prim-color-secondary-tint-100); } diff --git a/packages/design-system/src/css/_tokens.scss b/packages/design-system/src/css/_tokens.scss index 0b2940f0151e9..11bff5141bf41 100644 --- a/packages/design-system/src/css/_tokens.scss +++ b/packages/design-system/src/css/_tokens.scss @@ -79,7 +79,7 @@ --color-canvas-background-l: 99%; --color-canvas-dot: var(--prim-gray-120); --color-canvas-read-only-line: var(--prim-gray-30); - --color-canvas-node-background: var(--prim-gray-0); + --color-canvas-node-background: var(--color-background-xlight); --color-canvas-node-pinned-border: var(--color-secondary); --color-canvas-selected: var(--prim-gray-70); --node-type-main-color: var(--prim-gray-490); @@ -106,6 +106,23 @@ --color-sticky-background-7: var(--prim-gray-10); --color-sticky-border-7: var(--prim-gray-120); + // NodeIcon + --color-node-icon-gray: var(--prim-gray-420); + --color-node-icon-black: var(--prim-gray-780); + --color-node-icon-blue: #3a42e9; + --color-node-icon-light-blue: #5fabf7; + --color-node-icon-dark-blue: #353f6e; + --color-node-icon-orange: #ff965a; + --color-node-icon-orange-red: #ff6d5a; + --color-node-icon-pink-red: #ea4b71; + --color-node-icon-red: var(--prim-color-alt-c); + --color-node-icon-light-green: #31c4ab; + --color-node-icon-green: #108e49; + --color-node-icon-dark-green: #157562; + --color-node-icon-azure: #54b8c9; + --color-node-icon-purple: #553399; + --color-node-icon-crimson: #772244; + // Expressions, autocomplete, infobox --color-valid-resolvable-foreground: var(--prim-color-alt-a); --color-valid-resolvable-background: var(--prim-color-alt-a-tint-500); @@ -282,6 +299,175 @@ --color-mfa-recovery-code-color: var(--prim-gray-490); --color-mfa-lose-access-text-color: var(--color-danger); + // AI + --node-type-background-l: 95%; + --node-type-supplemental-label-color-h: 235; + --node-type-supplemental-label-color-s: 28%; + --node-type-supplemental-label-color-l: 40%; + --node-type-supplemental-color-h: 235; + --node-type-supplemental-color-s: 28%; + --node-type-supplemental-color-l: 60%; + --node-type-supplemental-label-color: hsl( + var(--node-type-supplemental-label-color-h), + var(--node-type-supplemental-label-color-s), + var(--node-type-supplemental-label-color-l) + ); + --node-type-supplemental-icon: var(--color-foreground-dark); + --node-type-supplemental-color: hsl( + var(--node-type-supplemental-color-h), + var(--node-type-supplemental-color-s), + var(--node-type-supplemental-color-l) + ); + --node-type-supplemental-background: hsl( + var(--node-type-supplemental-color-h), + var(--node-type-supplemental-color-s), + var(--node-type-background-l) + ); + --node-type-supplemental-connector-color: var(--color-foreground-dark); + --node-type-ai_chain-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_chain-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_chain-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_chain-color: hsl( + var(--node-type-ai_chain-color-h), + var(--node-type-ai_chain-color-s), + var(--node-type-ai_chain-color-l) + ); + --node-type-chain-background: hsl( + var(--node-type-ai_chain-color-h), + var(--node-type-ai_chain-color-s), + var(--node-type-background-l) + ); + --node-type-ai_document-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_document-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_document-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_document-color: hsl( + var(--node-type-ai_document-color-h), + var(--node-type-ai_document-color-s), + var(--node-type-ai_document-color-l) + ); + --node-type-ai_document-background: hsl( + var(--node-type-ai_document-color-h), + var(--node-type-ai_document-color-s), + var(--node-type-background-l) + ); + --node-type-ai_embedding-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_embedding-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_embedding-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_embedding-color: hsl( + var(--node-type-ai_embedding-color-h), + var(--node-type-ai_embedding-color-s), + var(--node-type-ai_embedding-color-l) + ); + --node-type-ai_embedding-background: hsl( + var(--node-type-ai_embedding-color-h), + var(--node-type-ai_embedding-color-s), + var(--node-type-background-l) + ); + --node-type-ai_languageModel-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_languageModel-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_languageModel-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_languageModel-color: hsl( + var(--node-type-ai_languageModel-color-h), + var(--node-type-ai_languageModel-color-s), + var(--node-type-ai_languageModel-color-l) + ); + --node-type-ai_languageModel-background: hsl( + var(--node-type-ai_languageModel-color-h), + var(--node-type-ai_languageModel-color-s), + var(--node-type-background-l) + ); + --node-type-ai_memory-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_memory-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_memory-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_memory-color: hsl( + var(--node-type-ai_memory-color-h), + var(--node-type-ai_memory-color-s), + var(--node-type-ai_memory-color-l) + ); + --node-type-ai_memory-background: hsl( + var(--node-type-ai_memory-color-h), + var(--node-type-ai_memory-color-s), + var(--node-type-background-l) + ); + --node-type-ai_outputParser-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_outputParser-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_outputParser-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_outputParser-color: hsl( + var(--node-type-ai_outputParser-color-h), + var(--node-type-ai_outputParser-color-s), + var(--node-type-ai_outputParser-color-l) + ); + --node-type-ai_outputParser-background: hsl( + var(--node-type-ai_outputParser-color-h), + var(--node-type-ai_outputParser-color-s), + var(--node-type-background-l) + ); + --node-type-ai_tool-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_tool-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_tool-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_tool-color: hsl( + var(--node-type-ai_tool-color-h), + var(--node-type-ai_tool-color-s), + var(--node-type-ai_tool-color-l) + ); + --node-type-ai_tool-background: hsl( + var(--node-type-ai_tool-color-h), + var(--node-type-ai_tool-color-s), + var(--node-type-background-l) + ); + --node-type-ai_retriever-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_retriever-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_retriever-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_retriever-color: hsl( + var(--node-type-ai_retriever-color-h), + var(--node-type-ai_retriever-color-s), + var(--node-type-ai_retriever-color-l) + ); + --node-type-ai_retriever-background: hsl( + var(--node-type-ai_retriever-color-h), + var(--node-type-ai_retriever-color-s), + var(--node-type-background-l) + ); + --node-type-ai_textSplitter-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_textSplitter-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_textSplitter-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_textSplitter-color: hsl( + var(--node-type-ai_textSplitter-color-h), + var(--node-type-ai_textSplitter-color-s), + var(--node-type-ai_textSplitter-color-l) + ); + --node-type-ai_textSplitter-background: hsl( + var(--node-type-ai_textSplitter-color-h), + var(--node-type-ai_textSplitter-color-s), + var(--node-type-background-l) + ); + --node-type-ai_vectorRetriever-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_vectorRetriever-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_vectorRetriever-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_vectorRetriever-color: hsl( + var(--node-type-ai_vectorRetriever-color-h), + var(--node-type-ai_vectorRetriever-color-s), + var(--node-type-ai_vectorRetriever-color-l) + ); + --node-type-ai_vectorRetriever-background: hsl( + var(--node-type-ai_vectorRetriever-color-h), + var(--node-type-ai_vectorRetriever-color-s), + var(--node-type-background-l) + ); + --node-type-ai_vectorStore-color-h: var(--node-type-supplemental-color-h); + --node-type-ai_vectorStore-color-s: var(--node-type-supplemental-color-s); + --node-type-ai_vectorStore-color-l: var(--node-type-supplemental-color-l); + --node-type-ai_vectorStore-color: hsl( + var(--node-type-ai_vectorStore-color-h), + var(--node-type-ai_vectorStore-color-s), + var(--node-type-ai_vectorStore-color-l) + ); + --node-type-ai_vectorStore-background: hsl( + var(--node-type-ai_vectorStore-color-h), + var(--node-type-ai_vectorStore-color-s), + var(--node-type-background-l) + ); + // Various --color-avatar-accent-1: var(--prim-gray-120); --color-avatar-accent-2: var(--prim-color-alt-e-shade-100); diff --git a/packages/editor-ui/src/Interface.ts b/packages/editor-ui/src/Interface.ts index f3d536cc4fc7c..b08d3ab4a5622 100644 --- a/packages/editor-ui/src/Interface.ts +++ b/packages/editor-ui/src/Interface.ts @@ -930,6 +930,7 @@ export type SimplifiedNodeType = Pick< | 'group' | 'icon' | 'iconUrl' + | 'iconColor' | 'badgeIconUrl' | 'codex' | 'defaults' diff --git a/packages/editor-ui/src/components/CredentialIcon.vue b/packages/editor-ui/src/components/CredentialIcon.vue index 43cdcd32fbafc..038c5c1f404c1 100644 --- a/packages/editor-ui/src/components/CredentialIcon.vue +++ b/packages/editor-ui/src/components/CredentialIcon.vue @@ -15,6 +15,8 @@ import { useRootStore } from '@/stores/n8nRoot.store'; import { useNodeTypesStore } from '@/stores/nodeTypes.store'; import type { ICredentialType, INodeTypeDescription } from 'n8n-workflow'; import NodeIcon from '@/components/NodeIcon.vue'; +import { getThemedValue } from '@/utils/nodeTypesUtils'; +import { useUIStore } from '@/stores/ui.store'; export default defineComponent({ components: { @@ -26,22 +28,28 @@ export default defineComponent({ }, }, computed: { - ...mapStores(useCredentialsStore, useNodeTypesStore, useRootStore), + ...mapStores(useCredentialsStore, useNodeTypesStore, useRootStore, useUIStore), credentialWithIcon(): ICredentialType | null { return this.credentialTypeName ? this.getCredentialWithIcon(this.credentialTypeName) : null; }, filePath(): string | null { - const iconUrl = this.credentialWithIcon?.iconUrl; - if (!iconUrl) { + const themeIconUrl = getThemedValue( + this.credentialWithIcon?.iconUrl, + this.uiStore.appliedTheme, + ); + + if (!themeIconUrl) { return null; } - return this.rootStore.getBaseUrl + iconUrl; + + return this.rootStore.getBaseUrl + themeIconUrl; }, relevantNode(): INodeTypeDescription | null { - if (this.credentialWithIcon?.icon?.startsWith('node:')) { - const nodeType = this.credentialWithIcon.icon.replace('node:', ''); + const icon = this.credentialWithIcon?.icon; + if (typeof icon === 'string' && icon.startsWith('node:')) { + const nodeType = icon.replace('node:', ''); return this.nodeTypesStore.getNodeType(nodeType); } if (!this.credentialTypeName) { diff --git a/packages/editor-ui/src/components/NDVFloatingNodes.vue b/packages/editor-ui/src/components/NDVFloatingNodes.vue index f7abf5f1e13ce..fd1aa2d054e58 100644 --- a/packages/editor-ui/src/components/NDVFloatingNodes.vue +++ b/packages/editor-ui/src/components/NDVFloatingNodes.vue @@ -121,7 +121,7 @@ const tooltipPositionMapper = { [FloatingNodePosition.top]: 'bottom', [FloatingNodePosition.right]: 'left', [FloatingNodePosition.left]: 'right', -}; +} as const; onMounted(() => { document.addEventListener('keydown', onKeyDown, true); diff --git a/packages/editor-ui/src/components/Node/NodeCreator/composables/useActionsGeneration.ts b/packages/editor-ui/src/components/Node/NodeCreator/composables/useActionsGeneration.ts index 1c5cf669528a2..7385100141e85 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/composables/useActionsGeneration.ts +++ b/packages/editor-ui/src/components/Node/NodeCreator/composables/useActionsGeneration.ts @@ -254,6 +254,7 @@ export function useActionsGenerator() { group, icon, iconUrl, + iconColor, badgeIconUrl, outputs, codex, @@ -266,6 +267,7 @@ export function useActionsGenerator() { name, group, icon, + iconColor, iconUrl, badgeIconUrl, outputs, diff --git a/packages/editor-ui/src/components/Node/NodeCreator/viewsData.ts b/packages/editor-ui/src/components/Node/NodeCreator/viewsData.ts index d97a7329b8746..d0f3d7fd15280 100644 --- a/packages/editor-ui/src/components/Node/NodeCreator/viewsData.ts +++ b/packages/editor-ui/src/components/Node/NodeCreator/viewsData.ts @@ -123,13 +123,7 @@ function getAiNodesBySubcategory(nodes: INodeTypeDescription[], subcategory: str description: node.description, // eslint-disable-next-line @typescript-eslint/no-non-null-assertion icon: node.icon!, - iconData: node.name.toLowerCase().includes('openai') - ? { - type: 'file', - icon: 'openai', - fileBuffer: '/static/open-ai.svg', - } - : undefined, + iconUrl: node.iconUrl, }, })) .sort((a, b) => a.properties.displayName.localeCompare(b.properties.displayName)); diff --git a/packages/editor-ui/src/components/NodeIcon.vue b/packages/editor-ui/src/components/NodeIcon.vue index f438111e71f79..47dba118c2bd4 100644 --- a/packages/editor-ui/src/components/NodeIcon.vue +++ b/packages/editor-ui/src/components/NodeIcon.vue @@ -1,6 +1,6 @@ - - + diff --git a/packages/editor-ui/src/n8n-theme.scss b/packages/editor-ui/src/n8n-theme.scss index 7893d0610dc30..802f8f4bc2b2e 100644 --- a/packages/editor-ui/src/n8n-theme.scss +++ b/packages/editor-ui/src/n8n-theme.scss @@ -2,175 +2,6 @@ @import 'styles'; :root { - --node-type-background-l: 95%; - - --node-type-supplemental-label-color-h: 235; - --node-type-supplemental-label-color-s: 28%; - --node-type-supplemental-label-color-l: 40%; - --node-type-supplemental-label-color: hsl( - var(--node-type-supplemental-label-color-h), - var(--node-type-supplemental-label-color-s), - var(--node-type-supplemental-label-color-l) - ); - --node-type-supplemental-color-h: 235; - --node-type-supplemental-color-s: 28%; - --node-type-supplemental-color-l: 60%; - --node-type-supplemental-icon: var(--color-foreground-dark); - --node-type-supplemental-color: hsl( - var(--node-type-supplemental-color-h), - var(--node-type-supplemental-color-s), - var(--node-type-supplemental-color-l) - ); - --node-type-supplemental-background: hsl( - var(--node-type-supplemental-color-h), - var(--node-type-supplemental-color-s), - var(--node-type-background-l) - ); - --node-type-supplemental-connector-color: var(--color-foreground-dark); - --node-type-ai_chain-color-h: var(--node-type-supplemental-color-h); - --node-type-ai_chain-color-s: var(--node-type-supplemental-color-s); - --node-type-ai_chain-color-l: var(--node-type-supplemental-color-l); - --node-type-ai_chain-color: hsl( - var(--node-type-ai_chain-color-h), - var(--node-type-ai_chain-color-s), - var(--node-type-ai_chain-color-l) - ); - --node-type-chain-background: hsl( - var(--node-type-ai_chain-color-h), - var(--node-type-ai_chain-color-s), - var(--node-type-background-l) - ); - --node-type-ai_document-color-h: var(--node-type-supplemental-color-h); - --node-type-ai_document-color-s: var(--node-type-supplemental-color-s); - --node-type-ai_document-color-l: var(--node-type-supplemental-color-l); - --node-type-ai_document-color: hsl( - var(--node-type-ai_document-color-h), - var(--node-type-ai_document-color-s), - var(--node-type-ai_document-color-l) - ); - --node-type-ai_document-background: hsl( - var(--node-type-ai_document-color-h), - var(--node-type-ai_document-color-s), - var(--node-type-background-l) - ); - --node-type-ai_embedding-color-h: var(--node-type-supplemental-color-h); - --node-type-ai_embedding-color-s: var(--node-type-supplemental-color-s); - --node-type-ai_embedding-color-l: var(--node-type-supplemental-color-l); - --node-type-ai_embedding-color: hsl( - var(--node-type-ai_embedding-color-h), - var(--node-type-ai_embedding-color-s), - var(--node-type-ai_embedding-color-l) - ); - --node-type-ai_embedding-background: hsl( - var(--node-type-ai_embedding-color-h), - var(--node-type-ai_embedding-color-s), - var(--node-type-background-l) - ); - --node-type-ai_languageModel-color-h: var(--node-type-supplemental-color-h); - --node-type-ai_languageModel-color-s: var(--node-type-supplemental-color-s); - --node-type-ai_languageModel-color-l: var(--node-type-supplemental-color-l); - --node-type-ai_languageModel-color: hsl( - var(--node-type-ai_languageModel-color-h), - var(--node-type-ai_languageModel-color-s), - var(--node-type-ai_languageModel-color-l) - ); - --node-type-ai_languageModel-background: hsl( - var(--node-type-ai_languageModel-color-h), - var(--node-type-ai_languageModel-color-s), - var(--node-type-background-l) - ); - --node-type-ai_memory-color-h: var(--node-type-supplemental-color-h); - --node-type-ai_memory-color-s: var(--node-type-supplemental-color-s); - --node-type-ai_memory-color-l: var(--node-type-supplemental-color-l); - --node-type-ai_memory-color: hsl( - var(--node-type-ai_memory-color-h), - var(--node-type-ai_memory-color-s), - var(--node-type-ai_memory-color-l) - ); - --node-type-ai_memory-background: hsl( - var(--node-type-ai_memory-color-h), - var(--node-type-ai_memory-color-s), - var(--node-type-background-l) - ); - --node-type-ai_outputParser-color-h: var(--node-type-supplemental-color-h); - --node-type-ai_outputParser-color-s: var(--node-type-supplemental-color-s); - --node-type-ai_outputParser-color-l: var(--node-type-supplemental-color-l); - --node-type-ai_outputParser-color: hsl( - var(--node-type-ai_outputParser-color-h), - var(--node-type-ai_outputParser-color-s), - var(--node-type-ai_outputParser-color-l) - ); - --node-type-ai_outputParser-background: hsl( - var(--node-type-ai_outputParser-color-h), - var(--node-type-ai_outputParser-color-s), - var(--node-type-background-l) - ); - --node-type-ai_tool-color-h: var(--node-type-supplemental-color-h); - --node-type-ai_tool-color-s: var(--node-type-supplemental-color-s); - --node-type-ai_tool-color-l: var(--node-type-supplemental-color-l); - --node-type-ai_tool-color: hsl( - var(--node-type-ai_tool-color-h), - var(--node-type-ai_tool-color-s), - var(--node-type-ai_tool-color-l) - ); - --node-type-ai_tool-background: hsl( - var(--node-type-ai_tool-color-h), - var(--node-type-ai_tool-color-s), - var(--node-type-background-l) - ); - --node-type-ai_retriever-color-h: var(--node-type-supplemental-color-h); - --node-type-ai_retriever-color-s: var(--node-type-supplemental-color-s); - --node-type-ai_retriever-color-l: var(--node-type-supplemental-color-l); - --node-type-ai_retriever-color: hsl( - var(--node-type-ai_retriever-color-h), - var(--node-type-ai_retriever-color-s), - var(--node-type-ai_retriever-color-l) - ); - --node-type-ai_retriever-background: hsl( - var(--node-type-ai_retriever-color-h), - var(--node-type-ai_retriever-color-s), - var(--node-type-background-l) - ); - --node-type-ai_textSplitter-color-h: var(--node-type-supplemental-color-h); - --node-type-ai_textSplitter-color-s: var(--node-type-supplemental-color-s); - --node-type-ai_textSplitter-color-l: var(--node-type-supplemental-color-l); - --node-type-ai_textSplitter-color: hsl( - var(--node-type-ai_textSplitter-color-h), - var(--node-type-ai_textSplitter-color-s), - var(--node-type-ai_textSplitter-color-l) - ); - --node-type-ai_textSplitter-background: hsl( - var(--node-type-ai_textSplitter-color-h), - var(--node-type-ai_textSplitter-color-s), - var(--node-type-background-l) - ); - --node-type-ai_vectorRetriever-color-h: var(--node-type-supplemental-color-h); - --node-type-ai_vectorRetriever-color-s: var(--node-type-supplemental-color-s); - --node-type-ai_vectorRetriever-color-l: var(--node-type-supplemental-color-l); - --node-type-ai_vectorRetriever-color: hsl( - var(--node-type-ai_vectorRetriever-color-h), - var(--node-type-ai_vectorRetriever-color-s), - var(--node-type-ai_vectorRetriever-color-l) - ); - --node-type-ai_vectorRetriever-background: hsl( - var(--node-type-ai_vectorRetriever-color-h), - var(--node-type-ai_vectorRetriever-color-s), - var(--node-type-background-l) - ); - --node-type-ai_vectorStore-color-h: var(--node-type-supplemental-color-h); - --node-type-ai_vectorStore-color-s: var(--node-type-supplemental-color-s); - --node-type-ai_vectorStore-color-l: var(--node-type-supplemental-color-l); - --node-type-ai_vectorStore-color: hsl( - var(--node-type-ai_vectorStore-color-h), - var(--node-type-ai_vectorStore-color-s), - var(--node-type-ai_vectorStore-color-l) - ); - --node-type-ai_vectorStore-background: hsl( - var(--node-type-ai_vectorStore-color-h), - var(--node-type-ai_vectorStore-color-s), - var(--node-type-background-l) - ); - // Using native css variable enables us to use this value in JS --header-height: 65; --chat-width: 350; @@ -187,6 +18,7 @@ --chat--header--color: var(--color-text-dark); --chat--header--border-bottom: var(--border-base); --chat--close--button--color-hover: var(--color-primary); + // Message styles --chat--message--padding: var(--spacing-3xs); --chat--message--font-size: 14px; @@ -196,6 +28,7 @@ --chat--message--user--color: var(--color-text-dark); --chat--message--user--background: var(--color-success-tint-1); --chat--message--user--border: 1px solid var(--color-success-light-2); + // Chat input --chat--input--font-size: var(--font-size-s); --chat--input--send--button--color: var(--color-success); diff --git a/packages/editor-ui/src/utils/nodeTypesUtils.ts b/packages/editor-ui/src/utils/nodeTypesUtils.ts index 285817b209c76..16ef6db925dcc 100644 --- a/packages/editor-ui/src/utils/nodeTypesUtils.ts +++ b/packages/editor-ui/src/utils/nodeTypesUtils.ts @@ -1,31 +1,34 @@ import type { - INodeCredentialDescription, - IDataObject, - INodeExecutionData, - INodeProperties, - INodeTypeDescription, - NodeParameterValueType, - ResourceMapperField, -} from 'n8n-workflow'; + AppliedThemeOption, + INodeUi, + INodeUpdatePropertiesInformation, + ITemplatesNode, + IVersionNode, + NodeAuthenticationOption, +} from '@/Interface'; import { - MAIN_AUTH_FIELD_NAME, CORE_NODES_CATEGORY, + MAIN_AUTH_FIELD_NAME, + MAPPING_PARAMS, NON_ACTIVATABLE_TRIGGER_NODE_TYPES, TEMPLATES_NODES_FILTER, - MAPPING_PARAMS, } from '@/constants'; -import { useWorkflowsStore } from '@/stores/workflows.store'; +import { i18n as locale } from '@/plugins/i18n'; +import { useCredentialsStore } from '@/stores/credentials.store'; import { useNodeTypesStore } from '@/stores/nodeTypes.store'; -import type { - INodeUi, - ITemplatesNode, - NodeAuthenticationOption, - INodeUpdatePropertiesInformation, -} from '@/Interface'; +import { useWorkflowsStore } from '@/stores/workflows.store'; import { isResourceLocatorValue } from '@/utils/typeGuards'; import { isJsonKeyObject } from '@/utils/typesUtils'; -import { useCredentialsStore } from '@/stores/credentials.store'; -import { i18n as locale } from '@/plugins/i18n'; +import type { + IDataObject, + INodeCredentialDescription, + INodeExecutionData, + INodeProperties, + INodeTypeDescription, + NodeParameterValueType, + ResourceMapperField, + Themed, +} from 'n8n-workflow'; /* Constants and utility functions mainly used to get information about @@ -431,3 +434,39 @@ export const isMatchingField = ( } return false; }; + +export const getThemedValue = ( + value: Themed | undefined, + theme: AppliedThemeOption = 'light', +): T | null => { + if (!value) { + return null; + } + + if (typeof value === 'string') { + return value; + } + + return value[theme]; +}; + +export const getNodeIcon = ( + nodeType: INodeTypeDescription | IVersionNode, + theme: AppliedThemeOption = 'light', +): string | null => { + return getThemedValue(nodeType.icon, theme); +}; + +export const getNodeIconUrl = ( + nodeType: INodeTypeDescription | IVersionNode, + theme: AppliedThemeOption = 'light', +): string | null => { + return getThemedValue(nodeType.iconUrl, theme); +}; + +export const getBadgeIconUrl = ( + nodeType: INodeTypeDescription, + theme: AppliedThemeOption = 'light', +): string | null => { + return getThemedValue(nodeType.badgeIconUrl, theme); +}; diff --git a/packages/nodes-base/credentials/AlienVaultApi.credentials.ts b/packages/nodes-base/credentials/AlienVaultApi.credentials.ts index aa5aeb238f669..9dad5720459ed 100644 --- a/packages/nodes-base/credentials/AlienVaultApi.credentials.ts +++ b/packages/nodes-base/credentials/AlienVaultApi.credentials.ts @@ -3,6 +3,7 @@ import type { ICredentialTestRequest, ICredentialType, INodeProperties, + Icon, } from 'n8n-workflow'; export class AlienVaultApi implements ICredentialType { @@ -12,7 +13,7 @@ export class AlienVaultApi implements ICredentialType { documentationUrl = 'alienvault'; - icon = 'file:icons/AlienVault.png'; + icon: Icon = 'file:icons/AlienVault.png'; httpRequestNode = { name: 'AlienVault', diff --git a/packages/nodes-base/credentials/Auth0ManagementApi.credentials.ts b/packages/nodes-base/credentials/Auth0ManagementApi.credentials.ts index c824b7188e0cb..d4d2865220e84 100644 --- a/packages/nodes-base/credentials/Auth0ManagementApi.credentials.ts +++ b/packages/nodes-base/credentials/Auth0ManagementApi.credentials.ts @@ -14,7 +14,7 @@ export class Auth0ManagementApi implements ICredentialType { documentationUrl = 'auth0management'; - icon = 'file:icons/Auth0.svg'; + icon = { light: 'file:icons/Auth0.svg', dark: 'file:icons/Auth0.dark.svg' } as const; httpRequestNode = { name: 'Auth0', diff --git a/packages/nodes-base/credentials/Aws.credentials.ts b/packages/nodes-base/credentials/Aws.credentials.ts index 9178faf7c3d2b..9170657a4f078 100644 --- a/packages/nodes-base/credentials/Aws.credentials.ts +++ b/packages/nodes-base/credentials/Aws.credentials.ts @@ -156,7 +156,7 @@ export class Aws implements ICredentialType { documentationUrl = 'aws'; - icon = 'file:icons/AWS.svg'; + icon = { light: 'file:icons/AWS.svg', dark: 'file:icons/AWS.dark.svg' } as const; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/CarbonBlackApi.credentials.ts b/packages/nodes-base/credentials/CarbonBlackApi.credentials.ts index 48c5f5650ab3e..70119d362e142 100644 --- a/packages/nodes-base/credentials/CarbonBlackApi.credentials.ts +++ b/packages/nodes-base/credentials/CarbonBlackApi.credentials.ts @@ -5,7 +5,7 @@ export class CarbonBlackApi implements ICredentialType { displayName = 'Carbon Black API'; - icon = 'file:icons/vmware.svg'; + icon = { light: 'file:icons/vmware.svg', dark: 'file:icons/vmware.dark.svg' } as const; documentationUrl = 'carbonblack'; diff --git a/packages/nodes-base/credentials/CiscoMerakiApi.credentials.ts b/packages/nodes-base/credentials/CiscoMerakiApi.credentials.ts index e02519b64df84..24346845badf3 100644 --- a/packages/nodes-base/credentials/CiscoMerakiApi.credentials.ts +++ b/packages/nodes-base/credentials/CiscoMerakiApi.credentials.ts @@ -7,7 +7,7 @@ export class CiscoMerakiApi implements ICredentialType { documentationUrl = 'ciscomeraki'; - icon = 'file:icons/Cisco.svg'; + icon = { light: 'file:icons/Cisco.svg', dark: 'file:icons/Cisco.dark.svg' } as const; httpRequestNode = { name: 'Cisco Meraki', diff --git a/packages/nodes-base/credentials/CiscoSecureEndpointApi.credentials.ts b/packages/nodes-base/credentials/CiscoSecureEndpointApi.credentials.ts index 81a3a6fb70279..7ffac617797a2 100644 --- a/packages/nodes-base/credentials/CiscoSecureEndpointApi.credentials.ts +++ b/packages/nodes-base/credentials/CiscoSecureEndpointApi.credentials.ts @@ -15,7 +15,7 @@ export class CiscoSecureEndpointApi implements ICredentialType { documentationUrl = 'ciscosecureendpoint'; - icon = 'file:icons/Cisco.svg'; + icon = { light: 'file:icons/Cisco.svg', dark: 'file:icons/Cisco.dark.svg' } as const; httpRequestNode = { name: 'Cisco Secure Endpoint', diff --git a/packages/nodes-base/credentials/CiscoUmbrellaApi.credentials.ts b/packages/nodes-base/credentials/CiscoUmbrellaApi.credentials.ts index 2a3120ab4033e..f2bca5986039f 100644 --- a/packages/nodes-base/credentials/CiscoUmbrellaApi.credentials.ts +++ b/packages/nodes-base/credentials/CiscoUmbrellaApi.credentials.ts @@ -14,7 +14,7 @@ export class CiscoUmbrellaApi implements ICredentialType { documentationUrl = 'ciscoumbrella'; - icon = 'file:icons/Cisco.svg'; + icon = { light: 'file:icons/Cisco.svg', dark: 'file:icons/Cisco.dark.svg' } as const; httpRequestNode = { name: 'Cisco Umbrella', diff --git a/packages/nodes-base/credentials/CiscoWebexOAuth2Api.credentials.ts b/packages/nodes-base/credentials/CiscoWebexOAuth2Api.credentials.ts index 3784f7f6aa063..9de1ff62f8fcf 100644 --- a/packages/nodes-base/credentials/CiscoWebexOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/CiscoWebexOAuth2Api.credentials.ts @@ -9,7 +9,7 @@ export class CiscoWebexOAuth2Api implements ICredentialType { documentationUrl = 'ciscowebex'; - icon = 'file:icons/Cisco.svg'; + icon = { light: 'file:icons/Cisco.svg', dark: 'file:icons/Cisco.dark.svg' } as const; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/CrowdStrikeOAuth2Api.credentials.ts b/packages/nodes-base/credentials/CrowdStrikeOAuth2Api.credentials.ts index ccf20224477a2..de69b0d5db1e5 100644 --- a/packages/nodes-base/credentials/CrowdStrikeOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/CrowdStrikeOAuth2Api.credentials.ts @@ -14,7 +14,7 @@ export class CrowdStrikeOAuth2Api implements ICredentialType { documentationUrl = 'crowdstrike'; - icon = 'file:icons/CrowdStrike.svg'; + icon = { light: 'file:icons/CrowdStrike.svg', dark: 'file:icons/CrowdStrike.dark.svg' } as const; httpRequestNode = { name: 'CrowdStrike', diff --git a/packages/nodes-base/credentials/F5BigIpApi.credentials.ts b/packages/nodes-base/credentials/F5BigIpApi.credentials.ts index a3204ae8b2235..85245b7179c13 100644 --- a/packages/nodes-base/credentials/F5BigIpApi.credentials.ts +++ b/packages/nodes-base/credentials/F5BigIpApi.credentials.ts @@ -1,4 +1,4 @@ -import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { IAuthenticateGeneric, ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class F5BigIpApi implements ICredentialType { name = 'f5BigIpApi'; @@ -7,7 +7,7 @@ export class F5BigIpApi implements ICredentialType { documentationUrl = 'f5bigip'; - icon = 'file:icons/F5.svg'; + icon: Icon = 'file:icons/F5.svg'; httpRequestNode = { name: 'F5 Big-IP', diff --git a/packages/nodes-base/credentials/FortiGateApi.credentials.ts b/packages/nodes-base/credentials/FortiGateApi.credentials.ts index 30655d651ff88..9f7febf53cfaf 100644 --- a/packages/nodes-base/credentials/FortiGateApi.credentials.ts +++ b/packages/nodes-base/credentials/FortiGateApi.credentials.ts @@ -1,4 +1,4 @@ -import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { IAuthenticateGeneric, ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class FortiGateApi implements ICredentialType { name = 'fortiGateApi'; @@ -7,7 +7,7 @@ export class FortiGateApi implements ICredentialType { documentationUrl = 'fortigate'; - icon = 'file:icons/Fortinet.svg'; + icon: Icon = 'file:icons/Fortinet.svg'; httpRequestNode = { name: 'Fortinet FortiGate', diff --git a/packages/nodes-base/credentials/GoogleApi.credentials.ts b/packages/nodes-base/credentials/GoogleApi.credentials.ts index 90db20c9df9bb..96fa9e5f40711 100644 --- a/packages/nodes-base/credentials/GoogleApi.credentials.ts +++ b/packages/nodes-base/credentials/GoogleApi.credentials.ts @@ -3,6 +3,7 @@ import type { ICredentialType, IHttpRequestOptions, INodeProperties, + Icon, } from 'n8n-workflow'; import moment from 'moment-timezone'; @@ -20,7 +21,7 @@ export class GoogleApi implements ICredentialType { documentationUrl = 'google/service-account'; - icon = 'file:icons/Google.svg'; + icon: Icon = 'file:icons/Google.svg'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/GoogleOAuth2Api.credentials.ts b/packages/nodes-base/credentials/GoogleOAuth2Api.credentials.ts index 821bf6e770ab3..4af21afdd70d2 100644 --- a/packages/nodes-base/credentials/GoogleOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/GoogleOAuth2Api.credentials.ts @@ -1,4 +1,4 @@ -import type { ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class GoogleOAuth2Api implements ICredentialType { name = 'googleOAuth2Api'; @@ -9,7 +9,7 @@ export class GoogleOAuth2Api implements ICredentialType { documentationUrl = 'google/oauth-generic'; - icon = 'file:icons/Google.svg'; + icon: Icon = 'file:icons/Google.svg'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/HighLevelOAuth2Api.credentials.ts b/packages/nodes-base/credentials/HighLevelOAuth2Api.credentials.ts index 3325c5e72beac..656cfcc0fb2b8 100644 --- a/packages/nodes-base/credentials/HighLevelOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/HighLevelOAuth2Api.credentials.ts @@ -1,4 +1,4 @@ -import type { ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class HighLevelOAuth2Api implements ICredentialType { name = 'highLevelOAuth2Api'; @@ -9,7 +9,7 @@ export class HighLevelOAuth2Api implements ICredentialType { documentationUrl = 'highLevel'; - icon = 'file:icons/highLevel.svg'; + icon: Icon = 'file:icons/highLevel.svg'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/HttpBasicAuth.credentials.ts b/packages/nodes-base/credentials/HttpBasicAuth.credentials.ts index ad8f16b1663ac..3d92244ba54c9 100644 --- a/packages/nodes-base/credentials/HttpBasicAuth.credentials.ts +++ b/packages/nodes-base/credentials/HttpBasicAuth.credentials.ts @@ -1,4 +1,4 @@ -import type { ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class HttpBasicAuth implements ICredentialType { name = 'httpBasicAuth'; @@ -9,7 +9,7 @@ export class HttpBasicAuth implements ICredentialType { genericAuth = true; - icon = 'node:n8n-nodes-base.httpRequest'; + icon: Icon = 'node:n8n-nodes-base.httpRequest'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/HttpCustomAuth.credentials.ts b/packages/nodes-base/credentials/HttpCustomAuth.credentials.ts index 405d7b7cdf3ee..2b23865e18abd 100644 --- a/packages/nodes-base/credentials/HttpCustomAuth.credentials.ts +++ b/packages/nodes-base/credentials/HttpCustomAuth.credentials.ts @@ -1,6 +1,6 @@ /* eslint-disable n8n-nodes-base/cred-class-field-name-unsuffixed */ /* eslint-disable n8n-nodes-base/cred-class-name-unsuffixed */ -import type { ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class HttpCustomAuth implements ICredentialType { name = 'httpCustomAuth'; @@ -11,7 +11,7 @@ export class HttpCustomAuth implements ICredentialType { genericAuth = true; - icon = 'node:n8n-nodes-base.httpRequest'; + icon: Icon = 'node:n8n-nodes-base.httpRequest'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/HttpDigestAuth.credentials.ts b/packages/nodes-base/credentials/HttpDigestAuth.credentials.ts index 234e299bce3e8..e3dd31704d749 100644 --- a/packages/nodes-base/credentials/HttpDigestAuth.credentials.ts +++ b/packages/nodes-base/credentials/HttpDigestAuth.credentials.ts @@ -1,4 +1,4 @@ -import type { ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class HttpDigestAuth implements ICredentialType { name = 'httpDigestAuth'; @@ -9,7 +9,7 @@ export class HttpDigestAuth implements ICredentialType { genericAuth = true; - icon = 'node:n8n-nodes-base.httpRequest'; + icon: Icon = 'node:n8n-nodes-base.httpRequest'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/HttpHeaderAuth.credentials.ts b/packages/nodes-base/credentials/HttpHeaderAuth.credentials.ts index 304b44d7fcc2b..a689e1bcfd331 100644 --- a/packages/nodes-base/credentials/HttpHeaderAuth.credentials.ts +++ b/packages/nodes-base/credentials/HttpHeaderAuth.credentials.ts @@ -1,4 +1,4 @@ -import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { IAuthenticateGeneric, ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class HttpHeaderAuth implements ICredentialType { name = 'httpHeaderAuth'; @@ -9,7 +9,7 @@ export class HttpHeaderAuth implements ICredentialType { genericAuth = true; - icon = 'node:n8n-nodes-base.httpRequest'; + icon: Icon = 'node:n8n-nodes-base.httpRequest'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/HttpQueryAuth.credentials.ts b/packages/nodes-base/credentials/HttpQueryAuth.credentials.ts index c2ae9c474138b..71055a713bb72 100644 --- a/packages/nodes-base/credentials/HttpQueryAuth.credentials.ts +++ b/packages/nodes-base/credentials/HttpQueryAuth.credentials.ts @@ -1,4 +1,4 @@ -import type { ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class HttpQueryAuth implements ICredentialType { name = 'httpQueryAuth'; @@ -9,7 +9,7 @@ export class HttpQueryAuth implements ICredentialType { genericAuth = true; - icon = 'node:n8n-nodes-base.httpRequest'; + icon: Icon = 'node:n8n-nodes-base.httpRequest'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/HttpSslAuth.credentials.ts b/packages/nodes-base/credentials/HttpSslAuth.credentials.ts index 06be6d4dd74e5..541306de4c9d2 100644 --- a/packages/nodes-base/credentials/HttpSslAuth.credentials.ts +++ b/packages/nodes-base/credentials/HttpSslAuth.credentials.ts @@ -1,6 +1,6 @@ /* eslint-disable n8n-nodes-base/cred-class-name-unsuffixed */ /* eslint-disable n8n-nodes-base/cred-class-field-name-unsuffixed */ -import type { ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class HttpSslAuth implements ICredentialType { name = 'httpSslAuth'; @@ -9,7 +9,7 @@ export class HttpSslAuth implements ICredentialType { documentationUrl = 'httpRequest'; - icon = 'node:n8n-nodes-base.httpRequest'; + icon: Icon = 'node:n8n-nodes-base.httpRequest'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/HybridAnalysisApi.credentials.ts b/packages/nodes-base/credentials/HybridAnalysisApi.credentials.ts index a7c06463dad98..a0c6dd6eee2a0 100644 --- a/packages/nodes-base/credentials/HybridAnalysisApi.credentials.ts +++ b/packages/nodes-base/credentials/HybridAnalysisApi.credentials.ts @@ -1,4 +1,4 @@ -import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { IAuthenticateGeneric, ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class HybridAnalysisApi implements ICredentialType { name = 'hybridAnalysisApi'; @@ -7,7 +7,7 @@ export class HybridAnalysisApi implements ICredentialType { documentationUrl = 'hybridanalysis'; - icon = 'file:icons/Hybrid.png'; + icon: Icon = 'file:icons/Hybrid.png'; httpRequestNode = { name: 'Hybrid Analysis', diff --git a/packages/nodes-base/credentials/ImpervaWafApi.credentials.ts b/packages/nodes-base/credentials/ImpervaWafApi.credentials.ts index 2046f428a400f..b37b3e7d34349 100644 --- a/packages/nodes-base/credentials/ImpervaWafApi.credentials.ts +++ b/packages/nodes-base/credentials/ImpervaWafApi.credentials.ts @@ -7,7 +7,7 @@ export class ImpervaWafApi implements ICredentialType { documentationUrl = 'impervawaf'; - icon = 'file:icons/Imperva.svg'; + icon = { light: 'file:icons/Imperva.svg', dark: 'file:icons/Imperva.dark.svg' } as const; httpRequestNode = { name: 'Imperva WAF', diff --git a/packages/nodes-base/credentials/JwtAuth.credentials.ts b/packages/nodes-base/credentials/JwtAuth.credentials.ts index 5dbf5ec7a1d2e..9f74c83bfc599 100644 --- a/packages/nodes-base/credentials/JwtAuth.credentials.ts +++ b/packages/nodes-base/credentials/JwtAuth.credentials.ts @@ -1,4 +1,4 @@ -import type { ICredentialType, INodeProperties, INodePropertyOptions } from 'n8n-workflow'; +import type { ICredentialType, INodeProperties, INodePropertyOptions, Icon } from 'n8n-workflow'; const algorithms: INodePropertyOptions[] = [ { @@ -64,7 +64,7 @@ export class JwtAuth implements ICredentialType { documentationUrl = 'jwt'; - icon = 'file:icons/jwt.svg'; + icon: Icon = 'file:icons/jwt.svg'; properties: INodeProperties[] = [ { diff --git a/packages/nodes-base/credentials/KibanaApi.credentials.ts b/packages/nodes-base/credentials/KibanaApi.credentials.ts index 432b53cb4e66a..88ec55a96f009 100644 --- a/packages/nodes-base/credentials/KibanaApi.credentials.ts +++ b/packages/nodes-base/credentials/KibanaApi.credentials.ts @@ -3,6 +3,7 @@ import type { ICredentialTestRequest, ICredentialType, INodeProperties, + Icon, } from 'n8n-workflow'; export class KibanaApi implements ICredentialType { @@ -12,7 +13,7 @@ export class KibanaApi implements ICredentialType { documentationUrl = 'kibana'; - icon = 'file:icons/Kibana.svg'; + icon: Icon = 'file:icons/Kibana.svg'; httpRequestNode = { name: 'Kibana', diff --git a/packages/nodes-base/credentials/MicrosoftEntraOAuth2Api.credentials.ts b/packages/nodes-base/credentials/MicrosoftEntraOAuth2Api.credentials.ts index 14a46dd7621f4..c1c77edb41717 100644 --- a/packages/nodes-base/credentials/MicrosoftEntraOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/MicrosoftEntraOAuth2Api.credentials.ts @@ -1,4 +1,4 @@ -import type { ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class MicrosoftEntraOAuth2Api implements ICredentialType { name = 'microsoftEntraOAuth2Api'; @@ -7,7 +7,7 @@ export class MicrosoftEntraOAuth2Api implements ICredentialType { extends = ['microsoftOAuth2Api']; - icon = 'file:icons/Azure.svg'; + icon: Icon = 'file:icons/Azure.svg'; documentationUrl = 'microsoftentra'; diff --git a/packages/nodes-base/credentials/MicrosoftOAuth2Api.credentials.ts b/packages/nodes-base/credentials/MicrosoftOAuth2Api.credentials.ts index 58425dbe3946d..9a6b77efb9013 100644 --- a/packages/nodes-base/credentials/MicrosoftOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/MicrosoftOAuth2Api.credentials.ts @@ -1,11 +1,11 @@ -import type { ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class MicrosoftOAuth2Api implements ICredentialType { name = 'microsoftOAuth2Api'; extends = ['oAuth2Api']; - icon = 'file:icons/Microsoft.svg'; + icon: Icon = 'file:icons/Microsoft.svg'; displayName = 'Microsoft OAuth2 API'; diff --git a/packages/nodes-base/credentials/MistApi.credentials.ts b/packages/nodes-base/credentials/MistApi.credentials.ts index d74fe8a64bcba..d619b0461b1d3 100644 --- a/packages/nodes-base/credentials/MistApi.credentials.ts +++ b/packages/nodes-base/credentials/MistApi.credentials.ts @@ -3,6 +3,7 @@ import type { ICredentialTestRequest, ICredentialType, INodeProperties, + Icon, } from 'n8n-workflow'; export class MistApi implements ICredentialType { @@ -10,7 +11,7 @@ export class MistApi implements ICredentialType { displayName = 'Mist API'; - icon = 'file:icons/Mist.svg'; + icon: Icon = 'file:icons/Mist.svg'; documentationUrl = 'mist'; diff --git a/packages/nodes-base/credentials/OktaApi.credentials.ts b/packages/nodes-base/credentials/OktaApi.credentials.ts index fdbeb2defc8e6..c5b925c0718d8 100644 --- a/packages/nodes-base/credentials/OktaApi.credentials.ts +++ b/packages/nodes-base/credentials/OktaApi.credentials.ts @@ -12,7 +12,7 @@ export class OktaApi implements ICredentialType { documentationUrl = 'okta'; - icon = 'file:icons/Okta.svg'; + icon = { light: 'file:icons/Okta.svg', dark: 'file:icons/Okta.dark.svg' } as const; httpRequestNode = { name: 'Okta', diff --git a/packages/nodes-base/credentials/OpenCTIApi.credentials.ts b/packages/nodes-base/credentials/OpenCTIApi.credentials.ts index dde51838ed0a3..f92dab00aae6f 100644 --- a/packages/nodes-base/credentials/OpenCTIApi.credentials.ts +++ b/packages/nodes-base/credentials/OpenCTIApi.credentials.ts @@ -1,4 +1,4 @@ -import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { IAuthenticateGeneric, ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class OpenCTIApi implements ICredentialType { name = 'openCtiApi'; @@ -7,7 +7,7 @@ export class OpenCTIApi implements ICredentialType { documentationUrl = 'opencti'; - icon = 'file:icons/OpenCTI.png'; + icon: Icon = 'file:icons/OpenCTI.png'; httpRequestNode = { name: 'OpenCTI', diff --git a/packages/nodes-base/credentials/QRadarApi.credentials.ts b/packages/nodes-base/credentials/QRadarApi.credentials.ts index 5da8eaab3765e..6eb8c3a46ed97 100644 --- a/packages/nodes-base/credentials/QRadarApi.credentials.ts +++ b/packages/nodes-base/credentials/QRadarApi.credentials.ts @@ -5,7 +5,7 @@ export class QRadarApi implements ICredentialType { displayName = 'QRadar API'; - icon = 'file:icons/IBM.svg'; + icon = { light: 'file:icons/IBM.svg', dark: 'file:icons/IBM.dark.svg' } as const; documentationUrl = 'qradar'; diff --git a/packages/nodes-base/credentials/QualysApi.credentials.ts b/packages/nodes-base/credentials/QualysApi.credentials.ts index 5f54b9dc5382b..1e56f3aacba41 100644 --- a/packages/nodes-base/credentials/QualysApi.credentials.ts +++ b/packages/nodes-base/credentials/QualysApi.credentials.ts @@ -5,7 +5,7 @@ export class QualysApi implements ICredentialType { displayName = 'Qualys API'; - icon = 'file:icons/Qualys.svg'; + icon = 'file:icons/Qualys.svg' as const; documentationUrl = 'qualys'; diff --git a/packages/nodes-base/credentials/RecordedFutureApi.credentials.ts b/packages/nodes-base/credentials/RecordedFutureApi.credentials.ts index 2a19b4a8ebab6..f07f7ba878344 100644 --- a/packages/nodes-base/credentials/RecordedFutureApi.credentials.ts +++ b/packages/nodes-base/credentials/RecordedFutureApi.credentials.ts @@ -7,7 +7,10 @@ export class RecordedFutureApi implements ICredentialType { documentationUrl = 'recordedfuture'; - icon = 'file:icons/RecordedFuture.svg'; + icon = { + light: 'file:icons/RecordedFuture.svg', + dark: 'file:icons/RecordedFuture.dark.svg', + } as const; httpRequestNode = { name: 'Recorded Future', diff --git a/packages/nodes-base/credentials/SekoiaApi.credentials.ts b/packages/nodes-base/credentials/SekoiaApi.credentials.ts index e9bee6dbcda64..394f8b1d81906 100644 --- a/packages/nodes-base/credentials/SekoiaApi.credentials.ts +++ b/packages/nodes-base/credentials/SekoiaApi.credentials.ts @@ -1,11 +1,11 @@ -import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { IAuthenticateGeneric, ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class SekoiaApi implements ICredentialType { name = 'sekoiaApi'; displayName = 'Sekoia API'; - icon = 'file:icons/Sekoia.svg'; + icon: Icon = 'file:icons/Sekoia.svg'; documentationUrl = 'sekoia'; diff --git a/packages/nodes-base/credentials/ShufflerApi.credentials.ts b/packages/nodes-base/credentials/ShufflerApi.credentials.ts index ce5995df6bb6b..e86dda6631b4a 100644 --- a/packages/nodes-base/credentials/ShufflerApi.credentials.ts +++ b/packages/nodes-base/credentials/ShufflerApi.credentials.ts @@ -3,6 +3,7 @@ import type { ICredentialTestRequest, ICredentialType, INodeProperties, + Icon, } from 'n8n-workflow'; export class ShufflerApi implements ICredentialType { @@ -10,7 +11,7 @@ export class ShufflerApi implements ICredentialType { displayName = 'Shuffler API'; - icon = 'file:icons/Shuffler.svg'; + icon: Icon = 'file:icons/Shuffler.svg'; documentationUrl = 'shuffler'; diff --git a/packages/nodes-base/credentials/TrellixEpoApi.credentials.ts b/packages/nodes-base/credentials/TrellixEpoApi.credentials.ts index c4fbab9bdfe78..b5d9cc2c2f503 100644 --- a/packages/nodes-base/credentials/TrellixEpoApi.credentials.ts +++ b/packages/nodes-base/credentials/TrellixEpoApi.credentials.ts @@ -1,4 +1,4 @@ -import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { IAuthenticateGeneric, ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class TrellixEpoApi implements ICredentialType { name = 'trellixEpoApi'; @@ -7,7 +7,7 @@ export class TrellixEpoApi implements ICredentialType { documentationUrl = 'trellixepo'; - icon = 'file:icons/Trellix.svg'; + icon: Icon = 'file:icons/Trellix.svg'; httpRequestNode = { name: 'Trellix (McAfee) ePolicy Orchestrator', diff --git a/packages/nodes-base/credentials/TwakeServerApi.credentials.ts b/packages/nodes-base/credentials/TwakeServerApi.credentials.ts index 2738465069d7b..0125cb14a2fc2 100644 --- a/packages/nodes-base/credentials/TwakeServerApi.credentials.ts +++ b/packages/nodes-base/credentials/TwakeServerApi.credentials.ts @@ -1,11 +1,11 @@ -import type { ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; export class TwakeServerApi implements ICredentialType { name = 'twakeServerApi'; displayName = 'Twake Server API'; - icon = 'file:icons/Twake.png'; + icon: Icon = 'file:icons/Twake.png'; documentationUrl = 'twake'; diff --git a/packages/nodes-base/credentials/VirusTotalApi.credentials.ts b/packages/nodes-base/credentials/VirusTotalApi.credentials.ts index 3a69d520f9ade..5aeb949ccdd89 100644 --- a/packages/nodes-base/credentials/VirusTotalApi.credentials.ts +++ b/packages/nodes-base/credentials/VirusTotalApi.credentials.ts @@ -3,6 +3,7 @@ import type { ICredentialTestRequest, ICredentialType, INodeProperties, + Icon, } from 'n8n-workflow'; export class VirusTotalApi implements ICredentialType { @@ -12,7 +13,7 @@ export class VirusTotalApi implements ICredentialType { documentationUrl = 'virustotal'; - icon = 'file:icons/VirusTotal.svg'; + icon: Icon = 'file:icons/VirusTotal.svg'; httpRequestNode = { name: 'VirusTotal', diff --git a/packages/nodes-base/credentials/YouTubeOAuth2Api.credentials.ts b/packages/nodes-base/credentials/YouTubeOAuth2Api.credentials.ts index 0fd023362fdb3..0611d9d65d57b 100644 --- a/packages/nodes-base/credentials/YouTubeOAuth2Api.credentials.ts +++ b/packages/nodes-base/credentials/YouTubeOAuth2Api.credentials.ts @@ -1,4 +1,4 @@ -import type { ICredentialType, INodeProperties } from 'n8n-workflow'; +import type { ICredentialType, INodeProperties, Icon } from 'n8n-workflow'; //https://developers.google.com/youtube/v3/guides/auth/client-side-web-apps#identify-access-scopes const scopes = [ @@ -12,7 +12,7 @@ const scopes = [ export class YouTubeOAuth2Api implements ICredentialType { name = 'youTubeOAuth2Api'; - icon = 'node:n8n-nodes-base.youTube'; + icon: Icon = 'node:n8n-nodes-base.youTube'; extends = ['googleOAuth2Api']; diff --git a/packages/nodes-base/credentials/ZscalerZiaApi.credentials.ts b/packages/nodes-base/credentials/ZscalerZiaApi.credentials.ts index bd3260442b643..80d41ac657a5d 100644 --- a/packages/nodes-base/credentials/ZscalerZiaApi.credentials.ts +++ b/packages/nodes-base/credentials/ZscalerZiaApi.credentials.ts @@ -6,6 +6,7 @@ import type { ICredentialType, IHttpRequestHelper, INodeProperties, + Icon, } from 'n8n-workflow'; export class ZscalerZiaApi implements ICredentialType { @@ -15,7 +16,7 @@ export class ZscalerZiaApi implements ICredentialType { documentationUrl = 'zscalerzia'; - icon = 'file:icons/Zscaler.svg'; + icon: Icon = 'file:icons/Zscaler.svg'; httpRequestNode = { name: 'Zscaler ZIA', diff --git a/packages/nodes-base/credentials/icons/AWS.dark.svg b/packages/nodes-base/credentials/icons/AWS.dark.svg new file mode 100644 index 0000000000000..b4d02869ec81a --- /dev/null +++ b/packages/nodes-base/credentials/icons/AWS.dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/credentials/icons/AWS.svg b/packages/nodes-base/credentials/icons/AWS.svg index 760c2530f4568..2e6cea9b0454c 100644 --- a/packages/nodes-base/credentials/icons/AWS.svg +++ b/packages/nodes-base/credentials/icons/AWS.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + + + diff --git a/packages/nodes-base/credentials/icons/Auth0.dark.svg b/packages/nodes-base/credentials/icons/Auth0.dark.svg new file mode 100644 index 0000000000000..548a8866db9b7 --- /dev/null +++ b/packages/nodes-base/credentials/icons/Auth0.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/credentials/icons/Auth0.svg b/packages/nodes-base/credentials/icons/Auth0.svg index 75ee017e1a036..040a94154c6dc 100644 --- a/packages/nodes-base/credentials/icons/Auth0.svg +++ b/packages/nodes-base/credentials/icons/Auth0.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/credentials/icons/Cisco.dark.svg b/packages/nodes-base/credentials/icons/Cisco.dark.svg new file mode 100644 index 0000000000000..9122bd2a4bf3b --- /dev/null +++ b/packages/nodes-base/credentials/icons/Cisco.dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/nodes-base/credentials/icons/Cisco.svg b/packages/nodes-base/credentials/icons/Cisco.svg index 66a600af2cedf..3ef365fbb6497 100644 --- a/packages/nodes-base/credentials/icons/Cisco.svg +++ b/packages/nodes-base/credentials/icons/Cisco.svg @@ -1 +1,9 @@ - \ No newline at end of file + + + + + + + + + diff --git a/packages/nodes-base/credentials/icons/CrowdStrike.dark.svg b/packages/nodes-base/credentials/icons/CrowdStrike.dark.svg new file mode 100644 index 0000000000000..7cf9f3e8cc1f9 --- /dev/null +++ b/packages/nodes-base/credentials/icons/CrowdStrike.dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/packages/nodes-base/credentials/icons/CrowdStrike.svg b/packages/nodes-base/credentials/icons/CrowdStrike.svg index 8db5558b7bd33..9c83667d35af0 100644 --- a/packages/nodes-base/credentials/icons/CrowdStrike.svg +++ b/packages/nodes-base/credentials/icons/CrowdStrike.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + diff --git a/packages/nodes-base/credentials/icons/IBM.dark.svg b/packages/nodes-base/credentials/icons/IBM.dark.svg new file mode 100644 index 0000000000000..eeb1d176ecfb7 --- /dev/null +++ b/packages/nodes-base/credentials/icons/IBM.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/credentials/icons/IBM.svg b/packages/nodes-base/credentials/icons/IBM.svg index 0e5ac9ec259ed..fc9472d3ef51f 100644 --- a/packages/nodes-base/credentials/icons/IBM.svg +++ b/packages/nodes-base/credentials/icons/IBM.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/credentials/icons/Imperva.dark.svg b/packages/nodes-base/credentials/icons/Imperva.dark.svg new file mode 100644 index 0000000000000..a19a28a31aa46 --- /dev/null +++ b/packages/nodes-base/credentials/icons/Imperva.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/credentials/icons/Imperva.svg b/packages/nodes-base/credentials/icons/Imperva.svg index f8521cb9be7a9..730c87b9e501a 100644 --- a/packages/nodes-base/credentials/icons/Imperva.svg +++ b/packages/nodes-base/credentials/icons/Imperva.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/packages/nodes-base/credentials/icons/Okta.dark.svg b/packages/nodes-base/credentials/icons/Okta.dark.svg new file mode 100644 index 0000000000000..b6f1fd7e2b477 --- /dev/null +++ b/packages/nodes-base/credentials/icons/Okta.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/credentials/icons/Okta.svg b/packages/nodes-base/credentials/icons/Okta.svg index a7f2ff4ca8703..4ba579621f863 100644 --- a/packages/nodes-base/credentials/icons/Okta.svg +++ b/packages/nodes-base/credentials/icons/Okta.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/credentials/icons/RecordedFuture.dark.svg b/packages/nodes-base/credentials/icons/RecordedFuture.dark.svg new file mode 100644 index 0000000000000..2ee6c9e50358a --- /dev/null +++ b/packages/nodes-base/credentials/icons/RecordedFuture.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/credentials/icons/RecordedFuture.svg b/packages/nodes-base/credentials/icons/RecordedFuture.svg index 6e8e317fc3691..5bf4851764ea9 100644 --- a/packages/nodes-base/credentials/icons/RecordedFuture.svg +++ b/packages/nodes-base/credentials/icons/RecordedFuture.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/credentials/icons/Sekoia.svg b/packages/nodes-base/credentials/icons/Sekoia.svg index a60aa68d6aad0..8ee51e1789c60 100644 --- a/packages/nodes-base/credentials/icons/Sekoia.svg +++ b/packages/nodes-base/credentials/icons/Sekoia.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/credentials/icons/highLevel.svg b/packages/nodes-base/credentials/icons/highLevel.svg index 3df6e466f0bfa..407b6798f0a9f 100644 --- a/packages/nodes-base/credentials/icons/highLevel.svg +++ b/packages/nodes-base/credentials/icons/highLevel.svg @@ -1 +1,11 @@ - \ No newline at end of file + + + + + + + + + + + diff --git a/packages/nodes-base/credentials/icons/vmware.dark.svg b/packages/nodes-base/credentials/icons/vmware.dark.svg new file mode 100644 index 0000000000000..9291d339b37b3 --- /dev/null +++ b/packages/nodes-base/credentials/icons/vmware.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/credentials/icons/vmware.svg b/packages/nodes-base/credentials/icons/vmware.svg index 20b525da40d86..5c8d1c34ba970 100644 --- a/packages/nodes-base/credentials/icons/vmware.svg +++ b/packages/nodes-base/credentials/icons/vmware.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/ActiveCampaign/ActiveCampaign.node.ts b/packages/nodes-base/nodes/ActiveCampaign/ActiveCampaign.node.ts index cc931d2feceed..e961b4df7ce79 100644 --- a/packages/nodes-base/nodes/ActiveCampaign/ActiveCampaign.node.ts +++ b/packages/nodes-base/nodes/ActiveCampaign/ActiveCampaign.node.ts @@ -82,7 +82,7 @@ export class ActiveCampaign implements INodeType { displayName: 'ActiveCampaign', name: 'activeCampaign', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:activeCampaign.png', + icon: { light: 'file:activeCampaign.svg', dark: 'file:activeCampaign.dark.svg' }, group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/ActiveCampaign/activeCampaign.dark.svg b/packages/nodes-base/nodes/ActiveCampaign/activeCampaign.dark.svg new file mode 100644 index 0000000000000..7b2338f91c2db --- /dev/null +++ b/packages/nodes-base/nodes/ActiveCampaign/activeCampaign.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/ActiveCampaign/activeCampaign.png b/packages/nodes-base/nodes/ActiveCampaign/activeCampaign.png deleted file mode 100644 index 0e638d8a10871..0000000000000 Binary files a/packages/nodes-base/nodes/ActiveCampaign/activeCampaign.png and /dev/null differ diff --git a/packages/nodes-base/nodes/ActiveCampaign/activeCampaign.svg b/packages/nodes-base/nodes/ActiveCampaign/activeCampaign.svg new file mode 100644 index 0000000000000..345175516a3a1 --- /dev/null +++ b/packages/nodes-base/nodes/ActiveCampaign/activeCampaign.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/Affinity/Affinity.node.ts b/packages/nodes-base/nodes/Affinity/Affinity.node.ts index 21c8eb123aded..f80a7312a8d2e 100644 --- a/packages/nodes-base/nodes/Affinity/Affinity.node.ts +++ b/packages/nodes-base/nodes/Affinity/Affinity.node.ts @@ -27,7 +27,7 @@ export class Affinity implements INodeType { displayName: 'Affinity', name: 'affinity', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:affinity.png', + icon: { light: 'file:affinity.svg', dark: 'file:affinity.dark.svg' }, group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Affinity/affinity.dark.svg b/packages/nodes-base/nodes/Affinity/affinity.dark.svg new file mode 100644 index 0000000000000..54b415375709e --- /dev/null +++ b/packages/nodes-base/nodes/Affinity/affinity.dark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/packages/nodes-base/nodes/Affinity/affinity.png b/packages/nodes-base/nodes/Affinity/affinity.png deleted file mode 100644 index 7045900c56703..0000000000000 Binary files a/packages/nodes-base/nodes/Affinity/affinity.png and /dev/null differ diff --git a/packages/nodes-base/nodes/Affinity/affinity.svg b/packages/nodes-base/nodes/Affinity/affinity.svg new file mode 100644 index 0000000000000..2f843f433742e --- /dev/null +++ b/packages/nodes-base/nodes/Affinity/affinity.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/nodes-base/nodes/Amqp/Amqp.node.ts b/packages/nodes-base/nodes/Amqp/Amqp.node.ts index 5a7bb808b9f4a..f917547d6b1c9 100644 --- a/packages/nodes-base/nodes/Amqp/Amqp.node.ts +++ b/packages/nodes-base/nodes/Amqp/Amqp.node.ts @@ -19,7 +19,7 @@ export class Amqp implements INodeType { displayName: 'AMQP Sender', name: 'amqp', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:amqp.png', + icon: 'file:amqp.svg', group: ['transform'], version: 1, description: 'Sends a raw-message via AMQP 1.0, executed once per item', diff --git a/packages/nodes-base/nodes/Amqp/amqp.png b/packages/nodes-base/nodes/Amqp/amqp.png deleted file mode 100644 index 0f0345078c916..0000000000000 Binary files a/packages/nodes-base/nodes/Amqp/amqp.png and /dev/null differ diff --git a/packages/nodes-base/nodes/Amqp/amqp.svg b/packages/nodes-base/nodes/Amqp/amqp.svg new file mode 100644 index 0000000000000..1b334302976cd --- /dev/null +++ b/packages/nodes-base/nodes/Amqp/amqp.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/nodes-base/nodes/Bubble/Bubble.node.ts b/packages/nodes-base/nodes/Bubble/Bubble.node.ts index 4bc11de82156f..ea8b74b8f2c8a 100644 --- a/packages/nodes-base/nodes/Bubble/Bubble.node.ts +++ b/packages/nodes-base/nodes/Bubble/Bubble.node.ts @@ -15,7 +15,7 @@ export class Bubble implements INodeType { description: INodeTypeDescription = { displayName: 'Bubble', name: 'bubble', - icon: 'file:bubble.svg', + icon: { light: 'file:bubble.svg', dark: 'file:bubble.dark.svg' }, group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Bubble/bubble.dark.svg b/packages/nodes-base/nodes/Bubble/bubble.dark.svg new file mode 100644 index 0000000000000..002f4278bce32 --- /dev/null +++ b/packages/nodes-base/nodes/Bubble/bubble.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/Bubble/bubble.svg b/packages/nodes-base/nodes/Bubble/bubble.svg index 1c41d3fe7efcd..c28005678a217 100644 --- a/packages/nodes-base/nodes/Bubble/bubble.svg +++ b/packages/nodes-base/nodes/Bubble/bubble.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/packages/nodes-base/nodes/Cal/CalTrigger.node.ts b/packages/nodes-base/nodes/Cal/CalTrigger.node.ts index 340797cec3bfb..8d2b6c3d176f8 100644 --- a/packages/nodes-base/nodes/Cal/CalTrigger.node.ts +++ b/packages/nodes-base/nodes/Cal/CalTrigger.node.ts @@ -15,7 +15,7 @@ export class CalTrigger implements INodeType { description: INodeTypeDescription = { displayName: 'Cal Trigger', name: 'calTrigger', - icon: 'file:cal.svg', + icon: { light: 'file:cal.svg', dark: 'file:cal.dark.svg' }, group: ['trigger'], version: [1, 2], subtitle: '=Events: {{$parameter["events"].join(", ")}}', diff --git a/packages/nodes-base/nodes/Cal/cal.dark.svg b/packages/nodes-base/nodes/Cal/cal.dark.svg new file mode 100644 index 0000000000000..032277d65a944 --- /dev/null +++ b/packages/nodes-base/nodes/Cal/cal.dark.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/nodes-base/nodes/Cal/cal.svg b/packages/nodes-base/nodes/Cal/cal.svg index 618835733710a..f74af491081af 100644 --- a/packages/nodes-base/nodes/Cal/cal.svg +++ b/packages/nodes-base/nodes/Cal/cal.svg @@ -1 +1,9 @@ - + + + + + + + + + diff --git a/packages/nodes-base/nodes/CircleCi/CircleCi.node.ts b/packages/nodes-base/nodes/CircleCi/CircleCi.node.ts index 8d0316fe7e9fc..9cca3546b82ed 100644 --- a/packages/nodes-base/nodes/CircleCi/CircleCi.node.ts +++ b/packages/nodes-base/nodes/CircleCi/CircleCi.node.ts @@ -15,7 +15,7 @@ export class CircleCi implements INodeType { displayName: 'CircleCI', name: 'circleCi', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:circleCi.png', + icon: { light: 'file:circleCi.svg', dark: 'file:circleCi.dark.svg' }, group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/CircleCi/circleCi.dark.svg b/packages/nodes-base/nodes/CircleCi/circleCi.dark.svg new file mode 100644 index 0000000000000..b4a20b84bc801 --- /dev/null +++ b/packages/nodes-base/nodes/CircleCi/circleCi.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/CircleCi/circleCi.png b/packages/nodes-base/nodes/CircleCi/circleCi.png deleted file mode 100644 index 7b8a5a4766891..0000000000000 Binary files a/packages/nodes-base/nodes/CircleCi/circleCi.png and /dev/null differ diff --git a/packages/nodes-base/nodes/CircleCi/circleCi.svg b/packages/nodes-base/nodes/CircleCi/circleCi.svg new file mode 100644 index 0000000000000..73ef3bae05a5d --- /dev/null +++ b/packages/nodes-base/nodes/CircleCi/circleCi.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Citrix/ADC/CitrixAdc.node.ts b/packages/nodes-base/nodes/Citrix/ADC/CitrixAdc.node.ts index 121409ece0070..be4ab4c01a10c 100644 --- a/packages/nodes-base/nodes/Citrix/ADC/CitrixAdc.node.ts +++ b/packages/nodes-base/nodes/Citrix/ADC/CitrixAdc.node.ts @@ -17,7 +17,7 @@ export class CitrixAdc implements INodeType { description: INodeTypeDescription = { displayName: 'Citrix ADC', name: 'citrixAdc', - icon: 'file:citrix.svg', + icon: { light: 'file:citrix.svg', dark: 'file:citrix.dark.svg' }, group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Citrix/ADC/citrix.dark.svg b/packages/nodes-base/nodes/Citrix/ADC/citrix.dark.svg new file mode 100644 index 0000000000000..690c357531682 --- /dev/null +++ b/packages/nodes-base/nodes/Citrix/ADC/citrix.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Citrix/ADC/citrix.svg b/packages/nodes-base/nodes/Citrix/ADC/citrix.svg index 19e9d9673fcbd..c4c9cdbdf3470 100644 --- a/packages/nodes-base/nodes/Citrix/ADC/citrix.svg +++ b/packages/nodes-base/nodes/Citrix/ADC/citrix.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/Clockify/Clockify.node.ts b/packages/nodes-base/nodes/Clockify/Clockify.node.ts index 17793feda67be..a78999bbdbf5b 100644 --- a/packages/nodes-base/nodes/Clockify/Clockify.node.ts +++ b/packages/nodes-base/nodes/Clockify/Clockify.node.ts @@ -35,7 +35,7 @@ export class Clockify implements INodeType { description: INodeTypeDescription = { displayName: 'Clockify', name: 'clockify', - icon: 'file:clockify.svg', + icon: { light: 'file:clockify.svg', dark: 'file:clockify.dark.svg' }, group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Clockify/clockify.dark.svg b/packages/nodes-base/nodes/Clockify/clockify.dark.svg new file mode 100644 index 0000000000000..33527e4611954 --- /dev/null +++ b/packages/nodes-base/nodes/Clockify/clockify.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/Clockify/clockify.svg b/packages/nodes-base/nodes/Clockify/clockify.svg index 1750886588623..27fc2670ff84b 100644 --- a/packages/nodes-base/nodes/Clockify/clockify.svg +++ b/packages/nodes-base/nodes/Clockify/clockify.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/packages/nodes-base/nodes/Cockpit/Cockpit.node.ts b/packages/nodes-base/nodes/Cockpit/Cockpit.node.ts index ba88d62fbbade..058569b6e7843 100644 --- a/packages/nodes-base/nodes/Cockpit/Cockpit.node.ts +++ b/packages/nodes-base/nodes/Cockpit/Cockpit.node.ts @@ -24,7 +24,7 @@ export class Cockpit implements INodeType { displayName: 'Cockpit', name: 'cockpit', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:cockpit.png', + icon: { light: 'file:cockpit.svg', dark: 'file:cockpit.dark.svg' }, group: ['output'], version: 1, subtitle: '={{ $parameter["operation"] + ": " + $parameter["resource"] }}', diff --git a/packages/nodes-base/nodes/Cockpit/cockpit.dark.svg b/packages/nodes-base/nodes/Cockpit/cockpit.dark.svg new file mode 100644 index 0000000000000..357b546b26aa9 --- /dev/null +++ b/packages/nodes-base/nodes/Cockpit/cockpit.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Cockpit/cockpit.png b/packages/nodes-base/nodes/Cockpit/cockpit.png deleted file mode 100644 index ddbe6ead67664..0000000000000 Binary files a/packages/nodes-base/nodes/Cockpit/cockpit.png and /dev/null differ diff --git a/packages/nodes-base/nodes/Cockpit/cockpit.svg b/packages/nodes-base/nodes/Cockpit/cockpit.svg new file mode 100644 index 0000000000000..134bb96ea843b --- /dev/null +++ b/packages/nodes-base/nodes/Cockpit/cockpit.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Compression/Compression.node.ts b/packages/nodes-base/nodes/Compression/Compression.node.ts index a26a99657bc9b..506b239ffed2c 100644 --- a/packages/nodes-base/nodes/Compression/Compression.node.ts +++ b/packages/nodes-base/nodes/Compression/Compression.node.ts @@ -48,6 +48,7 @@ export class Compression implements INodeType { displayName: 'Compression', name: 'compression', icon: 'fa:file-archive', + iconColor: 'green', group: ['transform'], subtitle: '={{$parameter["operation"]}}', version: [1, 1.1], diff --git a/packages/nodes-base/nodes/Copper/copper.svg b/packages/nodes-base/nodes/Copper/copper.svg index 34114d9b916fe..90e88bfaf08cc 100644 --- a/packages/nodes-base/nodes/Copper/copper.svg +++ b/packages/nodes-base/nodes/Copper/copper.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/packages/nodes-base/nodes/CrowdDev/CrowdDev.node.ts b/packages/nodes-base/nodes/CrowdDev/CrowdDev.node.ts index 76cd06d60a569..b245e79a57282 100644 --- a/packages/nodes-base/nodes/CrowdDev/CrowdDev.node.ts +++ b/packages/nodes-base/nodes/CrowdDev/CrowdDev.node.ts @@ -5,7 +5,7 @@ export class CrowdDev implements INodeType { description: INodeTypeDescription = { displayName: 'crowd.dev', name: 'crowdDev', - icon: 'file:crowdDev.svg', + icon: { light: 'file:crowdDev.svg', dark: 'file:crowdDev.dark.svg' }, group: ['transform'], version: 1, subtitle: '={{ $parameter["operation"] + ": " + $parameter["resource"] }}', diff --git a/packages/nodes-base/nodes/CrowdDev/crowdDev.dark.svg b/packages/nodes-base/nodes/CrowdDev/crowdDev.dark.svg new file mode 100644 index 0000000000000..d991be4a1579c --- /dev/null +++ b/packages/nodes-base/nodes/CrowdDev/crowdDev.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/CrowdDev/crowdDev.svg b/packages/nodes-base/nodes/CrowdDev/crowdDev.svg index c131b92df97ac..80971d75732d1 100644 --- a/packages/nodes-base/nodes/CrowdDev/crowdDev.svg +++ b/packages/nodes-base/nodes/CrowdDev/crowdDev.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/packages/nodes-base/nodes/Crypto/Crypto.node.ts b/packages/nodes-base/nodes/Crypto/Crypto.node.ts index fc6416349c5a9..131946f63526b 100644 --- a/packages/nodes-base/nodes/Crypto/Crypto.node.ts +++ b/packages/nodes-base/nodes/Crypto/Crypto.node.ts @@ -30,6 +30,7 @@ export class Crypto implements INodeType { displayName: 'Crypto', name: 'crypto', icon: 'fa:key', + iconColor: 'green', group: ['transform'], version: 1, subtitle: '={{$parameter["action"]}}', diff --git a/packages/nodes-base/nodes/CustomerIo/CustomerIo.node.ts b/packages/nodes-base/nodes/CustomerIo/CustomerIo.node.ts index d9526152e628a..6b82c4aab0628 100644 --- a/packages/nodes-base/nodes/CustomerIo/CustomerIo.node.ts +++ b/packages/nodes-base/nodes/CustomerIo/CustomerIo.node.ts @@ -16,7 +16,7 @@ export class CustomerIo implements INodeType { description: INodeTypeDescription = { displayName: 'Customer.io', name: 'customerIo', - icon: 'file:customerio.svg', + icon: { light: 'file:customerio.svg', dark: 'file:customerio.dark.svg' }, group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/CustomerIo/customerio.dark.svg b/packages/nodes-base/nodes/CustomerIo/customerio.dark.svg new file mode 100644 index 0000000000000..524e5f06e6833 --- /dev/null +++ b/packages/nodes-base/nodes/CustomerIo/customerio.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/CustomerIo/customerio.svg b/packages/nodes-base/nodes/CustomerIo/customerio.svg index 6230b5741ac9d..a26581f23f8db 100644 --- a/packages/nodes-base/nodes/CustomerIo/customerio.svg +++ b/packages/nodes-base/nodes/CustomerIo/customerio.svg @@ -1 +1,3 @@ - + + + diff --git a/packages/nodes-base/nodes/DateTime/DateTime.node.ts b/packages/nodes-base/nodes/DateTime/DateTime.node.ts index daffa817c0466..b5960c11c0478 100644 --- a/packages/nodes-base/nodes/DateTime/DateTime.node.ts +++ b/packages/nodes-base/nodes/DateTime/DateTime.node.ts @@ -10,6 +10,7 @@ export class DateTime extends VersionedNodeType { displayName: 'Date & Time', name: 'dateTime', icon: 'fa:clock', + iconColor: 'green', group: ['transform'], defaultVersion: 2, description: 'Allows you to manipulate date and time values', diff --git a/packages/nodes-base/nodes/DebugHelper/DebugHelper.dark.svg b/packages/nodes-base/nodes/DebugHelper/DebugHelper.dark.svg new file mode 100644 index 0000000000000..86a929a1b73fd --- /dev/null +++ b/packages/nodes-base/nodes/DebugHelper/DebugHelper.dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/nodes/DebugHelper/DebugHelper.node.ts b/packages/nodes-base/nodes/DebugHelper/DebugHelper.node.ts index 6d657f66451d3..b8a80d110f73c 100644 --- a/packages/nodes-base/nodes/DebugHelper/DebugHelper.node.ts +++ b/packages/nodes-base/nodes/DebugHelper/DebugHelper.node.ts @@ -26,7 +26,7 @@ export class DebugHelper implements INodeType { description: INodeTypeDescription = { displayName: 'DebugHelper', name: 'debugHelper', - icon: 'file:DebugHelper.svg', + icon: { light: 'file:DebugHelper.svg', dark: 'file:DebugHelper.dark.svg' }, group: ['output'], subtitle: '={{$parameter["category"]}}', description: 'Causes problems intentionally and generates useful data for debugging', diff --git a/packages/nodes-base/nodes/DebugHelper/DebugHelper.svg b/packages/nodes-base/nodes/DebugHelper/DebugHelper.svg index b1a62f59e0379..e6940bec13044 100644 --- a/packages/nodes-base/nodes/DebugHelper/DebugHelper.svg +++ b/packages/nodes-base/nodes/DebugHelper/DebugHelper.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + + + diff --git a/packages/nodes-base/nodes/DeepL/DeepL.node.ts b/packages/nodes-base/nodes/DeepL/DeepL.node.ts index 1dee0443a833b..926f1be909a1e 100644 --- a/packages/nodes-base/nodes/DeepL/DeepL.node.ts +++ b/packages/nodes-base/nodes/DeepL/DeepL.node.ts @@ -16,7 +16,7 @@ export class DeepL implements INodeType { description: INodeTypeDescription = { displayName: 'DeepL', name: 'deepL', - icon: 'file:deepl.svg', + icon: { light: 'file:deepl.svg', dark: 'file:deepl.dark.svg' }, group: ['input', 'output'], version: 1, description: 'Translate data using DeepL', diff --git a/packages/nodes-base/nodes/DeepL/deepL.dark.svg b/packages/nodes-base/nodes/DeepL/deepL.dark.svg new file mode 100644 index 0000000000000..6edfd447fa74a --- /dev/null +++ b/packages/nodes-base/nodes/DeepL/deepL.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/DeepL/deepl.svg b/packages/nodes-base/nodes/DeepL/deepl.svg index 889cf28b77717..121c2a270b5b4 100644 --- a/packages/nodes-base/nodes/DeepL/deepl.svg +++ b/packages/nodes-base/nodes/DeepL/deepl.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/packages/nodes-base/nodes/Drift/Drift.node.ts b/packages/nodes-base/nodes/Drift/Drift.node.ts index 2cf3770747fd7..ef385d573de20 100644 --- a/packages/nodes-base/nodes/Drift/Drift.node.ts +++ b/packages/nodes-base/nodes/Drift/Drift.node.ts @@ -14,7 +14,7 @@ export class Drift implements INodeType { displayName: 'Drift', name: 'drift', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:drift.png', + icon: { light: 'file:drift.svg', dark: 'file:drift.dark.svg' }, group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Drift/drift.dark.svg b/packages/nodes-base/nodes/Drift/drift.dark.svg new file mode 100644 index 0000000000000..5de7e7e2cda18 --- /dev/null +++ b/packages/nodes-base/nodes/Drift/drift.dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/packages/nodes-base/nodes/Drift/drift.png b/packages/nodes-base/nodes/Drift/drift.png deleted file mode 100644 index 98d008983c0e3..0000000000000 Binary files a/packages/nodes-base/nodes/Drift/drift.png and /dev/null differ diff --git a/packages/nodes-base/nodes/Drift/drift.svg b/packages/nodes-base/nodes/Drift/drift.svg new file mode 100644 index 0000000000000..6894deeeb5113 --- /dev/null +++ b/packages/nodes-base/nodes/Drift/drift.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/packages/nodes-base/nodes/EditImage/EditImage.node.ts b/packages/nodes-base/nodes/EditImage/EditImage.node.ts index 04b8e3dc9149a..098c75c67ae17 100644 --- a/packages/nodes-base/nodes/EditImage/EditImage.node.ts +++ b/packages/nodes-base/nodes/EditImage/EditImage.node.ts @@ -757,6 +757,7 @@ export class EditImage implements INodeType { displayName: 'Edit Image', name: 'editImage', icon: 'fa:image', + iconColor: 'purple', group: ['transform'], version: 1, description: 'Edits an image like blur, resize or adding border and text', diff --git a/packages/nodes-base/nodes/Egoi/Egoi.node.ts b/packages/nodes-base/nodes/Egoi/Egoi.node.ts index acffe03e97db7..f50136afee82a 100644 --- a/packages/nodes-base/nodes/Egoi/Egoi.node.ts +++ b/packages/nodes-base/nodes/Egoi/Egoi.node.ts @@ -18,7 +18,7 @@ export class Egoi implements INodeType { displayName: 'E-goi', name: 'egoi', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:egoi.png', + icon: 'file:egoi.svg', group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Egoi/egoi.png b/packages/nodes-base/nodes/Egoi/egoi.png deleted file mode 100644 index c1c02a89f6429..0000000000000 Binary files a/packages/nodes-base/nodes/Egoi/egoi.png and /dev/null differ diff --git a/packages/nodes-base/nodes/Egoi/egoi.svg b/packages/nodes-base/nodes/Egoi/egoi.svg new file mode 100644 index 0000000000000..50661a57794a9 --- /dev/null +++ b/packages/nodes-base/nodes/Egoi/egoi.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/nodes/ErrorTrigger/ErrorTrigger.node.ts b/packages/nodes-base/nodes/ErrorTrigger/ErrorTrigger.node.ts index 21cae5777be54..a3f30516cc699 100644 --- a/packages/nodes-base/nodes/ErrorTrigger/ErrorTrigger.node.ts +++ b/packages/nodes-base/nodes/ErrorTrigger/ErrorTrigger.node.ts @@ -10,6 +10,7 @@ export class ErrorTrigger implements INodeType { displayName: 'Error Trigger', name: 'errorTrigger', icon: 'fa:bug', + iconColor: 'blue', group: ['trigger'], version: 1, description: 'Triggers the workflow when another workflow has an error', diff --git a/packages/nodes-base/nodes/ExecuteCommand/ExecuteCommand.node.ts b/packages/nodes-base/nodes/ExecuteCommand/ExecuteCommand.node.ts index 5250270038c3f..b5e0b0f702daa 100644 --- a/packages/nodes-base/nodes/ExecuteCommand/ExecuteCommand.node.ts +++ b/packages/nodes-base/nodes/ExecuteCommand/ExecuteCommand.node.ts @@ -47,6 +47,7 @@ export class ExecuteCommand implements INodeType { displayName: 'Execute Command', name: 'executeCommand', icon: 'fa:terminal', + iconColor: 'crimson', group: ['transform'], version: 1, description: 'Executes a command on the host', diff --git a/packages/nodes-base/nodes/ExecuteWorkflow/ExecuteWorkflow.node.ts b/packages/nodes-base/nodes/ExecuteWorkflow/ExecuteWorkflow.node.ts index 55f8c90338064..d75b3098eb6b8 100644 --- a/packages/nodes-base/nodes/ExecuteWorkflow/ExecuteWorkflow.node.ts +++ b/packages/nodes-base/nodes/ExecuteWorkflow/ExecuteWorkflow.node.ts @@ -14,6 +14,7 @@ export class ExecuteWorkflow implements INodeType { displayName: 'Execute Workflow', name: 'executeWorkflow', icon: 'fa:sign-in-alt', + iconColor: 'orange-red', group: ['transform'], version: 1, subtitle: '={{"Workflow: " + $parameter["workflowId"]}}', diff --git a/packages/nodes-base/nodes/ExecutionData/ExecutionData.node.ts b/packages/nodes-base/nodes/ExecutionData/ExecutionData.node.ts index 0dd3097e13518..9bba0a7c700cb 100644 --- a/packages/nodes-base/nodes/ExecutionData/ExecutionData.node.ts +++ b/packages/nodes-base/nodes/ExecutionData/ExecutionData.node.ts @@ -12,6 +12,7 @@ export class ExecutionData implements INodeType { name: 'executionData', icon: 'fa:tasks', group: ['input'], + iconColor: 'light-green', version: 1, description: 'Add execution data for search', defaults: { diff --git a/packages/nodes-base/nodes/Files/ConvertToFile/ConvertToFile.node.ts b/packages/nodes-base/nodes/Files/ConvertToFile/ConvertToFile.node.ts index a89beebb51277..b30aa7cb5dbd9 100644 --- a/packages/nodes-base/nodes/Files/ConvertToFile/ConvertToFile.node.ts +++ b/packages/nodes-base/nodes/Files/ConvertToFile/ConvertToFile.node.ts @@ -16,7 +16,7 @@ export class ConvertToFile implements INodeType { description: INodeTypeDescription = { displayName: 'Convert to File', name: 'convertToFile', - icon: 'file:convertToFile.svg', + icon: { light: 'file:convertToFile.svg', dark: 'file:convertToFile.dark.svg' }, group: ['input'], version: [1, 1.1], description: 'Convert JSON data to binary data', diff --git a/packages/nodes-base/nodes/Files/ConvertToFile/convertToFile.dark.svg b/packages/nodes-base/nodes/Files/ConvertToFile/convertToFile.dark.svg new file mode 100644 index 0000000000000..8c53600475f96 --- /dev/null +++ b/packages/nodes-base/nodes/Files/ConvertToFile/convertToFile.dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/nodes/Files/ConvertToFile/convertToFile.svg b/packages/nodes-base/nodes/Files/ConvertToFile/convertToFile.svg index 60ca4a415a137..ec23c0abc3ba9 100644 --- a/packages/nodes-base/nodes/Files/ConvertToFile/convertToFile.svg +++ b/packages/nodes-base/nodes/Files/ConvertToFile/convertToFile.svg @@ -1,12 +1,5 @@ - - - - - - - - - - - + + + + diff --git a/packages/nodes-base/nodes/Files/ExtractFromFile/ExtractFromFile.node.ts b/packages/nodes-base/nodes/Files/ExtractFromFile/ExtractFromFile.node.ts index 156988eefa3fc..cec7211989a98 100644 --- a/packages/nodes-base/nodes/Files/ExtractFromFile/ExtractFromFile.node.ts +++ b/packages/nodes-base/nodes/Files/ExtractFromFile/ExtractFromFile.node.ts @@ -14,7 +14,7 @@ export class ExtractFromFile implements INodeType { description: INodeTypeDescription = { displayName: 'Extract from File', name: 'extractFromFile', - icon: 'file:extractFromFile.svg', + icon: { light: 'file:extractFromFile.svg', dark: 'file:extractFromFile.dark.svg' }, group: ['input'], version: 1, description: 'Convert binary data to JSON', diff --git a/packages/nodes-base/nodes/Files/ExtractFromFile/extractFromFile.dark.svg b/packages/nodes-base/nodes/Files/ExtractFromFile/extractFromFile.dark.svg new file mode 100644 index 0000000000000..0b85f112c1b36 --- /dev/null +++ b/packages/nodes-base/nodes/Files/ExtractFromFile/extractFromFile.dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/nodes/Files/ExtractFromFile/extractFromFile.svg b/packages/nodes-base/nodes/Files/ExtractFromFile/extractFromFile.svg index 2c235b7a2d9d8..90ae4db326836 100644 --- a/packages/nodes-base/nodes/Files/ExtractFromFile/extractFromFile.svg +++ b/packages/nodes-base/nodes/Files/ExtractFromFile/extractFromFile.svg @@ -1,5 +1,5 @@ - - - - + + + + diff --git a/packages/nodes-base/nodes/Filter/Filter.node.ts b/packages/nodes-base/nodes/Filter/Filter.node.ts index 880542c4880d4..69a46d4a4f807 100644 --- a/packages/nodes-base/nodes/Filter/Filter.node.ts +++ b/packages/nodes-base/nodes/Filter/Filter.node.ts @@ -10,6 +10,7 @@ export class Filter extends VersionedNodeType { displayName: 'Filter', name: 'filter', icon: 'fa:filter', + iconColor: 'light-blue', group: ['transform'], description: 'Remove items matching a condition', }; diff --git a/packages/nodes-base/nodes/Flow/Flow.node.ts b/packages/nodes-base/nodes/Flow/Flow.node.ts index c39a37d7987d4..0220fc9ed1648 100644 --- a/packages/nodes-base/nodes/Flow/Flow.node.ts +++ b/packages/nodes-base/nodes/Flow/Flow.node.ts @@ -16,7 +16,7 @@ export class Flow implements INodeType { displayName: 'Flow', name: 'flow', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:flow.png', + icon: 'file:flow.svg', group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Flow/flow.png b/packages/nodes-base/nodes/Flow/flow.png deleted file mode 100644 index 2918f8573e97b..0000000000000 Binary files a/packages/nodes-base/nodes/Flow/flow.png and /dev/null differ diff --git a/packages/nodes-base/nodes/Flow/flow.svg b/packages/nodes-base/nodes/Flow/flow.svg new file mode 100644 index 0000000000000..8caf7f5f185a2 --- /dev/null +++ b/packages/nodes-base/nodes/Flow/flow.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/Form/utils.ts b/packages/nodes-base/nodes/Form/utils.ts index f5adc84e11cf4..3b402303d2edf 100644 --- a/packages/nodes-base/nodes/Form/utils.ts +++ b/packages/nodes-base/nodes/Form/utils.ts @@ -1,4 +1,9 @@ -import { jsonParse, type IDataObject, type IWebhookFunctions } from 'n8n-workflow'; +import { + NodeOperationError, + jsonParse, + type IDataObject, + type IWebhookFunctions, +} from 'n8n-workflow'; import type { FormField, FormTriggerData, FormTriggerInput } from './interfaces'; export const prepareFormData = ( @@ -77,11 +82,44 @@ export const prepareFormData = ( return formData; }; +const checkResponseModeConfiguration = (context: IWebhookFunctions) => { + const responseMode = context.getNodeParameter('responseMode', 'onReceived') as string; + const connectedNodes = context.getChildNodes(context.getNode().name); + + const isRespondToWebhookConnected = connectedNodes.some( + (node) => node.type === 'n8n-nodes-base.respondToWebhook', + ); + + if (!isRespondToWebhookConnected && responseMode === 'responseNode') { + throw new NodeOperationError( + context.getNode(), + new Error('No Respond to Webhook node found in the workflow'), + { + description: + 'Insert a Respond to Webhook node to your workflow to respond to the form submission or choose another option for the “Respond When” parameter', + }, + ); + } + + if (isRespondToWebhookConnected && responseMode !== 'responseNode') { + throw new NodeOperationError( + context.getNode(), + new Error(`${context.getNode().name} node not correctly configured`), + { + description: + 'Set the “Respond When” parameter to “Using Respond to Webhook Node” or remove the Respond to Webhook node', + }, + ); + } +}; + export async function formWebhook(context: IWebhookFunctions) { const mode = context.getMode() === 'manual' ? 'test' : 'production'; const formFields = context.getNodeParameter('formFields.values', []) as FormField[]; const method = context.getRequestObject().method; + checkResponseModeConfiguration(context); + //Show the form on GET request if (method === 'GET') { const formTitle = context.getNodeParameter('formTitle', '') as string; diff --git a/packages/nodes-base/nodes/Freshdesk/Freshdesk.node.ts b/packages/nodes-base/nodes/Freshdesk/Freshdesk.node.ts index d368fd060e5f2..9b12a4723ef3d 100644 --- a/packages/nodes-base/nodes/Freshdesk/Freshdesk.node.ts +++ b/packages/nodes-base/nodes/Freshdesk/Freshdesk.node.ts @@ -75,7 +75,7 @@ export class Freshdesk implements INodeType { displayName: 'Freshdesk', name: 'freshdesk', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:freshdesk.png', + icon: 'file:freshdesk.svg', group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Freshdesk/freshdesk.png b/packages/nodes-base/nodes/Freshdesk/freshdesk.png deleted file mode 100644 index 3b1244f5e5ace..0000000000000 Binary files a/packages/nodes-base/nodes/Freshdesk/freshdesk.png and /dev/null differ diff --git a/packages/nodes-base/nodes/Freshdesk/freshdesk.svg b/packages/nodes-base/nodes/Freshdesk/freshdesk.svg new file mode 100644 index 0000000000000..8b93780da6d6e --- /dev/null +++ b/packages/nodes-base/nodes/Freshdesk/freshdesk.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/Ftp/Ftp.node.ts b/packages/nodes-base/nodes/Ftp/Ftp.node.ts index 850c9eae54402..5306d928ff930 100644 --- a/packages/nodes-base/nodes/Ftp/Ftp.node.ts +++ b/packages/nodes-base/nodes/Ftp/Ftp.node.ts @@ -113,6 +113,7 @@ export class Ftp implements INodeType { displayName: 'FTP', name: 'ftp', icon: 'fa:server', + iconColor: 'dark-blue', group: ['input'], version: 1, subtitle: '={{$parameter["protocol"] + ": " + $parameter["operation"]}}', diff --git a/packages/nodes-base/nodes/Github/Github.node.ts b/packages/nodes-base/nodes/Github/Github.node.ts index dcfa2ef9a5fc1..888d6b2cebad9 100644 --- a/packages/nodes-base/nodes/Github/Github.node.ts +++ b/packages/nodes-base/nodes/Github/Github.node.ts @@ -17,7 +17,7 @@ export class Github implements INodeType { description: INodeTypeDescription = { displayName: 'GitHub', name: 'github', - icon: 'file:github.svg', + icon: { light: 'file:github.svg', dark: 'file:github.dark.svg' }, group: ['input'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Github/github.dark.svg b/packages/nodes-base/nodes/Github/github.dark.svg new file mode 100644 index 0000000000000..0366b08a3dd1f --- /dev/null +++ b/packages/nodes-base/nodes/Github/github.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Github/github.svg b/packages/nodes-base/nodes/Github/github.svg index cefbcec946a0d..fe1ac05178b83 100644 --- a/packages/nodes-base/nodes/Github/github.svg +++ b/packages/nodes-base/nodes/Github/github.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/Google/Perspective/GooglePerspective.node.ts b/packages/nodes-base/nodes/Google/Perspective/GooglePerspective.node.ts index 74de6a53ee7b4..86d1ddaee6726 100644 --- a/packages/nodes-base/nodes/Google/Perspective/GooglePerspective.node.ts +++ b/packages/nodes-base/nodes/Google/Perspective/GooglePerspective.node.ts @@ -23,7 +23,7 @@ export class GooglePerspective implements INodeType { description: INodeTypeDescription = { displayName: 'Google Perspective', name: 'googlePerspective', - icon: 'file:perspective.svg', + icon: { light: 'file:googlePerspective.svg', dark: 'file:googlePerspective.dark.svg' }, group: ['transform'], version: 1, description: 'Consume Google Perspective API', diff --git a/packages/nodes-base/nodes/Google/Perspective/googlePerspective.dark.svg b/packages/nodes-base/nodes/Google/Perspective/googlePerspective.dark.svg new file mode 100644 index 0000000000000..6c584708cdaad --- /dev/null +++ b/packages/nodes-base/nodes/Google/Perspective/googlePerspective.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Google/Perspective/googlePerspective.svg b/packages/nodes-base/nodes/Google/Perspective/googlePerspective.svg new file mode 100644 index 0000000000000..bfed121b4a469 --- /dev/null +++ b/packages/nodes-base/nodes/Google/Perspective/googlePerspective.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Google/Perspective/perspective.svg b/packages/nodes-base/nodes/Google/Perspective/perspective.svg deleted file mode 100644 index 428a6647bc8b3..0000000000000 --- a/packages/nodes-base/nodes/Google/Perspective/perspective.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/nodes-base/nodes/Google/Task/GoogleTasks.node.ts b/packages/nodes-base/nodes/Google/Task/GoogleTasks.node.ts index 880b2a707cd09..5b6926e389213 100644 --- a/packages/nodes-base/nodes/Google/Task/GoogleTasks.node.ts +++ b/packages/nodes-base/nodes/Google/Task/GoogleTasks.node.ts @@ -17,7 +17,7 @@ export class GoogleTasks implements INodeType { displayName: 'Google Tasks', name: 'googleTasks', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:googleTasks.png', + icon: 'file:googleTasks.svg', group: ['input'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Google/Task/googleTasks.png b/packages/nodes-base/nodes/Google/Task/googleTasks.png deleted file mode 100644 index 77d9a08356da4..0000000000000 Binary files a/packages/nodes-base/nodes/Google/Task/googleTasks.png and /dev/null differ diff --git a/packages/nodes-base/nodes/Google/Task/googleTasks.svg b/packages/nodes-base/nodes/Google/Task/googleTasks.svg new file mode 100644 index 0000000000000..d34dc039e6314 --- /dev/null +++ b/packages/nodes-base/nodes/Google/Task/googleTasks.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/Gotify/GenericFunctions.ts b/packages/nodes-base/nodes/Gotify/GenericFunctions.ts index 8aa00f4ace6c3..3b63797197279 100644 --- a/packages/nodes-base/nodes/Gotify/GenericFunctions.ts +++ b/packages/nodes-base/nodes/Gotify/GenericFunctions.ts @@ -30,7 +30,7 @@ export async function gotifyApiRequest( qs, uri: uri || `${credentials.url}${path}`, json: true, - rejectUnauthorized: credentials.ignoreSSLIssues as boolean, + rejectUnauthorized: !credentials.ignoreSSLIssues as boolean, }; try { if (Object.keys(body as IDataObject).length === 0) { diff --git a/packages/nodes-base/nodes/HighLevel/highLevel.svg b/packages/nodes-base/nodes/HighLevel/highLevel.svg index 3df6e466f0bfa..407b6798f0a9f 100644 --- a/packages/nodes-base/nodes/HighLevel/highLevel.svg +++ b/packages/nodes-base/nodes/HighLevel/highLevel.svg @@ -1 +1,11 @@ - \ No newline at end of file + + + + + + + + + + + diff --git a/packages/nodes-base/nodes/Html/Html.node.ts b/packages/nodes-base/nodes/Html/Html.node.ts index a181575269671..d4df15e547086 100644 --- a/packages/nodes-base/nodes/Html/Html.node.ts +++ b/packages/nodes-base/nodes/Html/Html.node.ts @@ -125,7 +125,7 @@ export class Html implements INodeType { description: INodeTypeDescription = { displayName: 'HTML', name: 'html', - icon: 'file:html.svg', + icon: { light: 'file:html.svg', dark: 'file:html.dark.svg' }, group: ['transform'], version: [1, 1.1, 1.2], subtitle: '={{ $parameter["operation"] }}', diff --git a/packages/nodes-base/nodes/Html/html.dark.svg b/packages/nodes-base/nodes/Html/html.dark.svg new file mode 100644 index 0000000000000..40e2c2fb65dfa --- /dev/null +++ b/packages/nodes-base/nodes/Html/html.dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/packages/nodes-base/nodes/Html/html.svg b/packages/nodes-base/nodes/Html/html.svg index 816043b8872ea..dc8fcad033158 100644 --- a/packages/nodes-base/nodes/Html/html.svg +++ b/packages/nodes-base/nodes/Html/html.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + diff --git a/packages/nodes-base/nodes/HttpRequest/HttpRequest.node.ts b/packages/nodes-base/nodes/HttpRequest/HttpRequest.node.ts index a8317a289ae8f..b125a1630a97b 100644 --- a/packages/nodes-base/nodes/HttpRequest/HttpRequest.node.ts +++ b/packages/nodes-base/nodes/HttpRequest/HttpRequest.node.ts @@ -10,7 +10,7 @@ export class HttpRequest extends VersionedNodeType { const baseDescription: INodeTypeBaseDescription = { displayName: 'HTTP Request', name: 'httpRequest', - icon: 'file:httprequest.svg', + icon: { light: 'file:httprequest.svg', dark: 'file:httprequest.dark.svg' }, group: ['output'], subtitle: '={{$parameter["requestMethod"] + ": " + $parameter["url"]}}', description: 'Makes an HTTP request and returns the response data', diff --git a/packages/nodes-base/nodes/HttpRequest/httprequest.dark.svg b/packages/nodes-base/nodes/HttpRequest/httprequest.dark.svg new file mode 100644 index 0000000000000..41d0b3204c1c7 --- /dev/null +++ b/packages/nodes-base/nodes/HttpRequest/httprequest.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/HttpRequest/httprequest.svg b/packages/nodes-base/nodes/HttpRequest/httprequest.svg index 955eb3940194a..5300c5953e554 100644 --- a/packages/nodes-base/nodes/HttpRequest/httprequest.svg +++ b/packages/nodes-base/nodes/HttpRequest/httprequest.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/HumanticAI/HumanticAi.node.ts b/packages/nodes-base/nodes/HumanticAI/HumanticAi.node.ts index 0c8a99a1e0135..e74d9a6ee2bfd 100644 --- a/packages/nodes-base/nodes/HumanticAI/HumanticAi.node.ts +++ b/packages/nodes-base/nodes/HumanticAI/HumanticAi.node.ts @@ -15,7 +15,7 @@ export class HumanticAi implements INodeType { displayName: 'Humantic AI', name: 'humanticAi', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:humanticai.png', + icon: 'file:humanticai.svg', group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/HumanticAI/humanticai.png b/packages/nodes-base/nodes/HumanticAI/humanticai.png deleted file mode 100644 index efdfbdbe7f6bc..0000000000000 Binary files a/packages/nodes-base/nodes/HumanticAI/humanticai.png and /dev/null differ diff --git a/packages/nodes-base/nodes/HumanticAI/humanticai.svg b/packages/nodes-base/nodes/HumanticAI/humanticai.svg new file mode 100644 index 0000000000000..bcd352fe1c3b7 --- /dev/null +++ b/packages/nodes-base/nodes/HumanticAI/humanticai.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/nodes-base/nodes/If/If.node.ts b/packages/nodes-base/nodes/If/If.node.ts index 0e0f55f21f37e..7bc1d459ca8e4 100644 --- a/packages/nodes-base/nodes/If/If.node.ts +++ b/packages/nodes-base/nodes/If/If.node.ts @@ -10,6 +10,7 @@ export class If extends VersionedNodeType { displayName: 'If', name: 'if', icon: 'fa:map-signs', + iconColor: 'green', group: ['transform'], description: 'Route items to different branches (true/false)', defaultVersion: 2, diff --git a/packages/nodes-base/nodes/Intercom/Intercom.node.ts b/packages/nodes-base/nodes/Intercom/Intercom.node.ts index ba16a6422726a..82d2fcabdafe8 100644 --- a/packages/nodes-base/nodes/Intercom/Intercom.node.ts +++ b/packages/nodes-base/nodes/Intercom/Intercom.node.ts @@ -22,7 +22,7 @@ export class Intercom implements INodeType { displayName: 'Intercom', name: 'intercom', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:intercom.png', + icon: 'file:intercom.svg', group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Intercom/intercom.png b/packages/nodes-base/nodes/Intercom/intercom.png deleted file mode 100644 index 50225c561191a..0000000000000 Binary files a/packages/nodes-base/nodes/Intercom/intercom.png and /dev/null differ diff --git a/packages/nodes-base/nodes/Intercom/intercom.svg b/packages/nodes-base/nodes/Intercom/intercom.svg new file mode 100644 index 0000000000000..ac70304597c13 --- /dev/null +++ b/packages/nodes-base/nodes/Intercom/intercom.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/InvoiceNinja/invoiceNinja.svg b/packages/nodes-base/nodes/InvoiceNinja/invoiceNinja.svg index fb0d71c694683..af34f552f65c3 100644 --- a/packages/nodes-base/nodes/InvoiceNinja/invoiceNinja.svg +++ b/packages/nodes-base/nodes/InvoiceNinja/invoiceNinja.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/packages/nodes-base/nodes/Jenkins/jenkins.svg b/packages/nodes-base/nodes/Jenkins/jenkins.svg index 59187b8c5701b..6fba06f467a1a 100644 --- a/packages/nodes-base/nodes/Jenkins/jenkins.svg +++ b/packages/nodes-base/nodes/Jenkins/jenkins.svg @@ -1 +1,60 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/nodes-base/nodes/Kafka/Kafka.node.ts b/packages/nodes-base/nodes/Kafka/Kafka.node.ts index 331333fd63375..027b17131cd66 100644 --- a/packages/nodes-base/nodes/Kafka/Kafka.node.ts +++ b/packages/nodes-base/nodes/Kafka/Kafka.node.ts @@ -21,7 +21,7 @@ export class Kafka implements INodeType { description: INodeTypeDescription = { displayName: 'Kafka', name: 'kafka', - icon: 'file:kafka.svg', + icon: { light: 'file:kafka.svg', dark: 'file:kafka.dark.svg' }, group: ['transform'], version: 1, description: 'Sends messages to a Kafka topic', diff --git a/packages/nodes-base/nodes/Kafka/kafka.dark.svg b/packages/nodes-base/nodes/Kafka/kafka.dark.svg new file mode 100644 index 0000000000000..b322611c7042c --- /dev/null +++ b/packages/nodes-base/nodes/Kafka/kafka.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Kafka/kafka.svg b/packages/nodes-base/nodes/Kafka/kafka.svg index 9ef827e234dbd..978a747202ece 100644 --- a/packages/nodes-base/nodes/Kafka/kafka.svg +++ b/packages/nodes-base/nodes/Kafka/kafka.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/Kitemaker/Kitemaker.node.ts b/packages/nodes-base/nodes/Kitemaker/Kitemaker.node.ts index 0f6bb768b9545..c29dbfd9e9b96 100644 --- a/packages/nodes-base/nodes/Kitemaker/Kitemaker.node.ts +++ b/packages/nodes-base/nodes/Kitemaker/Kitemaker.node.ts @@ -40,7 +40,7 @@ export class Kitemaker implements INodeType { description: INodeTypeDescription = { displayName: 'Kitemaker', name: 'kitemaker', - icon: 'file:kitemaker.svg', + icon: { light: 'file:kitemaker.svg', dark: 'file:kitemaker.dark.svg' }, group: ['input'], version: 1, subtitle: '={{$parameter["resource"] + ": " + $parameter["operation"]}}', diff --git a/packages/nodes-base/nodes/Kitemaker/kitemaker.dark.svg b/packages/nodes-base/nodes/Kitemaker/kitemaker.dark.svg new file mode 100644 index 0000000000000..d8f4392dcec72 --- /dev/null +++ b/packages/nodes-base/nodes/Kitemaker/kitemaker.dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/nodes/Kitemaker/kitemaker.svg b/packages/nodes-base/nodes/Kitemaker/kitemaker.svg index db36157041079..21479787596ea 100644 --- a/packages/nodes-base/nodes/Kitemaker/kitemaker.svg +++ b/packages/nodes-base/nodes/Kitemaker/kitemaker.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + + + diff --git a/packages/nodes-base/nodes/Ldap/Ldap.node.ts b/packages/nodes-base/nodes/Ldap/Ldap.node.ts index 3f62afa729e40..e581a986c0c44 100644 --- a/packages/nodes-base/nodes/Ldap/Ldap.node.ts +++ b/packages/nodes-base/nodes/Ldap/Ldap.node.ts @@ -20,7 +20,7 @@ export class Ldap implements INodeType { description: INodeTypeDescription = { displayName: 'Ldap', name: 'ldap', - icon: 'file:ldap.svg', + icon: { light: 'file:ldap.svg', dark: 'file:ldap.dark.svg' }, group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Ldap/ldap.dark.svg b/packages/nodes-base/nodes/Ldap/ldap.dark.svg new file mode 100644 index 0000000000000..93cdb23caa3d3 --- /dev/null +++ b/packages/nodes-base/nodes/Ldap/ldap.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/Ldap/ldap.svg b/packages/nodes-base/nodes/Ldap/ldap.svg index 116934012edbc..3b1e9e9ff1ba9 100644 --- a/packages/nodes-base/nodes/Ldap/ldap.svg +++ b/packages/nodes-base/nodes/Ldap/ldap.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/packages/nodes-base/nodes/Lemlist/lemlist.svg b/packages/nodes-base/nodes/Lemlist/lemlist.svg index 990519775060f..12a5d3efff77c 100644 --- a/packages/nodes-base/nodes/Lemlist/lemlist.svg +++ b/packages/nodes-base/nodes/Lemlist/lemlist.svg @@ -1 +1,6 @@ - \ No newline at end of file + + + + + + diff --git a/packages/nodes-base/nodes/LocalFileTrigger/LocalFileTrigger.node.ts b/packages/nodes-base/nodes/LocalFileTrigger/LocalFileTrigger.node.ts index 1acb8d4c475ae..fa8322a73cabb 100644 --- a/packages/nodes-base/nodes/LocalFileTrigger/LocalFileTrigger.node.ts +++ b/packages/nodes-base/nodes/LocalFileTrigger/LocalFileTrigger.node.ts @@ -13,6 +13,7 @@ export class LocalFileTrigger implements INodeType { displayName: 'Local File Trigger', name: 'localFileTrigger', icon: 'fa:folder-open', + iconColor: 'black', group: ['trigger'], version: 1, subtitle: '=Path: {{$parameter["path"]}}', diff --git a/packages/nodes-base/nodes/LoneScale/LoneScale.node.ts b/packages/nodes-base/nodes/LoneScale/LoneScale.node.ts index 713d3bb84abe2..0b66ff0348058 100644 --- a/packages/nodes-base/nodes/LoneScale/LoneScale.node.ts +++ b/packages/nodes-base/nodes/LoneScale/LoneScale.node.ts @@ -15,7 +15,7 @@ export class LoneScale implements INodeType { displayName: 'LoneScale', name: 'loneScale', group: ['transform'], - icon: 'file:lonescale-logo.svg', + icon: { light: 'file:loneScale.svg', dark: 'file:loneScale.dark.svg' }, version: 1, description: 'Create List, add / delete items', subtitle: '={{$parameter["resource"] + ": " + $parameter["operation"]}}', diff --git a/packages/nodes-base/nodes/LoneScale/loneScale.dark.svg b/packages/nodes-base/nodes/LoneScale/loneScale.dark.svg new file mode 100644 index 0000000000000..f4922cd38c308 --- /dev/null +++ b/packages/nodes-base/nodes/LoneScale/loneScale.dark.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/packages/nodes-base/nodes/LoneScale/loneScale.svg b/packages/nodes-base/nodes/LoneScale/loneScale.svg new file mode 100644 index 0000000000000..11e0f506e0743 --- /dev/null +++ b/packages/nodes-base/nodes/LoneScale/loneScale.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/packages/nodes-base/nodes/LoneScale/lonescale-logo.svg b/packages/nodes-base/nodes/LoneScale/lonescale-logo.svg deleted file mode 100644 index b8a15e626094a..0000000000000 --- a/packages/nodes-base/nodes/LoneScale/lonescale-logo.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/nodes-base/nodes/Mailchimp/Mailchimp.node.ts b/packages/nodes-base/nodes/Mailchimp/Mailchimp.node.ts index 07d8345826c8d..229f4626e5af2 100644 --- a/packages/nodes-base/nodes/Mailchimp/Mailchimp.node.ts +++ b/packages/nodes-base/nodes/Mailchimp/Mailchimp.node.ts @@ -50,7 +50,7 @@ export class Mailchimp implements INodeType { description: INodeTypeDescription = { displayName: 'Mailchimp', name: 'mailchimp', - icon: 'file:mailchimp.svg', + icon: { light: 'file:mailchimp.svg', dark: 'file:mailchimp.dark.svg' }, group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Mailchimp/mailchimp.dark.svg b/packages/nodes-base/nodes/Mailchimp/mailchimp.dark.svg new file mode 100644 index 0000000000000..9561abcf6b03d --- /dev/null +++ b/packages/nodes-base/nodes/Mailchimp/mailchimp.dark.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/nodes-base/nodes/Mailchimp/mailchimp.svg b/packages/nodes-base/nodes/Mailchimp/mailchimp.svg index 959a3d2a1b3d5..758d9b54586ac 100644 --- a/packages/nodes-base/nodes/Mailchimp/mailchimp.svg +++ b/packages/nodes-base/nodes/Mailchimp/mailchimp.svg @@ -1 +1,16 @@ - \ No newline at end of file + + + + + + + + + + + + + + + + diff --git a/packages/nodes-base/nodes/Markdown/Markdown.node.ts b/packages/nodes-base/nodes/Markdown/Markdown.node.ts index e3b7fc79ada4f..82272a44e5187 100644 --- a/packages/nodes-base/nodes/Markdown/Markdown.node.ts +++ b/packages/nodes-base/nodes/Markdown/Markdown.node.ts @@ -19,7 +19,7 @@ export class Markdown implements INodeType { description: INodeTypeDescription = { displayName: 'Markdown', name: 'markdown', - icon: 'file:markdown.svg', + icon: { light: 'file:markdown.svg', dark: 'file:markdown.dark.svg' }, group: ['output'], version: 1, subtitle: diff --git a/packages/nodes-base/nodes/Markdown/markdown.dark.svg b/packages/nodes-base/nodes/Markdown/markdown.dark.svg new file mode 100644 index 0000000000000..fc6232ce5d7ee --- /dev/null +++ b/packages/nodes-base/nodes/Markdown/markdown.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Markdown/markdown.svg b/packages/nodes-base/nodes/Markdown/markdown.svg index 98de0464e12e6..44ebca8dc6f64 100644 --- a/packages/nodes-base/nodes/Markdown/markdown.svg +++ b/packages/nodes-base/nodes/Markdown/markdown.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/Marketstack/Marketstack.node.ts b/packages/nodes-base/nodes/Marketstack/Marketstack.node.ts index 1a4b87a877c50..b59da5ffdb8a6 100644 --- a/packages/nodes-base/nodes/Marketstack/Marketstack.node.ts +++ b/packages/nodes-base/nodes/Marketstack/Marketstack.node.ts @@ -30,7 +30,7 @@ export class Marketstack implements INodeType { displayName: 'Marketstack', name: 'marketstack', subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', - icon: 'file:marketstack.svg', + icon: { light: 'file:marketstack.svg', dark: 'file:marketstack.dark.svg' }, group: ['transform'], version: 1, description: 'Consume Marketstack API', diff --git a/packages/nodes-base/nodes/Marketstack/marketstack.dark.svg b/packages/nodes-base/nodes/Marketstack/marketstack.dark.svg new file mode 100644 index 0000000000000..6060cc0745bd8 --- /dev/null +++ b/packages/nodes-base/nodes/Marketstack/marketstack.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Marketstack/marketstack.svg b/packages/nodes-base/nodes/Marketstack/marketstack.svg index 8e55325a3df1e..054c6ea752604 100644 --- a/packages/nodes-base/nodes/Marketstack/marketstack.svg +++ b/packages/nodes-base/nodes/Marketstack/marketstack.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.ts b/packages/nodes-base/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.ts index 37f39b04984bd..101002eae8788 100644 --- a/packages/nodes-base/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.ts +++ b/packages/nodes-base/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.ts @@ -24,7 +24,7 @@ export class MicrosoftDynamicsCrm implements INodeType { description: INodeTypeDescription = { displayName: 'Microsoft Dynamics CRM', name: 'microsoftDynamicsCrm', - icon: 'file:dynamicsCrm.svg', + icon: { light: 'file:microsoftDynamicsCrm.svg', dark: 'file:microsoftDynamicsCrm.dark.svg' }, group: ['input'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Microsoft/Dynamics/dynamicsCrm.svg b/packages/nodes-base/nodes/Microsoft/Dynamics/dynamicsCrm.svg deleted file mode 100644 index 03652f8c9ba12..0000000000000 --- a/packages/nodes-base/nodes/Microsoft/Dynamics/dynamicsCrm.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/nodes-base/nodes/Microsoft/Dynamics/microsoftDynamicsCrm.dark.svg b/packages/nodes-base/nodes/Microsoft/Dynamics/microsoftDynamicsCrm.dark.svg new file mode 100644 index 0000000000000..5f629263e35b1 --- /dev/null +++ b/packages/nodes-base/nodes/Microsoft/Dynamics/microsoftDynamicsCrm.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Microsoft/Dynamics/microsoftDynamicsCrm.svg b/packages/nodes-base/nodes/Microsoft/Dynamics/microsoftDynamicsCrm.svg new file mode 100644 index 0000000000000..573707de4c7bc --- /dev/null +++ b/packages/nodes-base/nodes/Microsoft/Dynamics/microsoftDynamicsCrm.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Mocean/Mocean.node.ts b/packages/nodes-base/nodes/Mocean/Mocean.node.ts index 137b47385cb72..e0b0521ec9397 100644 --- a/packages/nodes-base/nodes/Mocean/Mocean.node.ts +++ b/packages/nodes-base/nodes/Mocean/Mocean.node.ts @@ -19,7 +19,7 @@ export class Mocean implements INodeType { displayName: 'Mocean', name: 'mocean', subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', - icon: 'file:mocean.svg', + icon: { light: 'file:mocean.svg', dark: 'file:mocean.dark.svg' }, group: ['transform'], version: 1, description: 'Send SMS and voice messages via Mocean', diff --git a/packages/nodes-base/nodes/Mocean/mocean.dark.svg b/packages/nodes-base/nodes/Mocean/mocean.dark.svg new file mode 100644 index 0000000000000..0957234f22864 --- /dev/null +++ b/packages/nodes-base/nodes/Mocean/mocean.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Mocean/mocean.svg b/packages/nodes-base/nodes/Mocean/mocean.svg index 406a00e517a0b..6ba14bdc84637 100644 --- a/packages/nodes-base/nodes/Mocean/mocean.svg +++ b/packages/nodes-base/nodes/Mocean/mocean.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/Msg91/Msg91.node.ts b/packages/nodes-base/nodes/Msg91/Msg91.node.ts index 6f62c5eec1d04..b3e6d68352f60 100644 --- a/packages/nodes-base/nodes/Msg91/Msg91.node.ts +++ b/packages/nodes-base/nodes/Msg91/Msg91.node.ts @@ -15,7 +15,7 @@ export class Msg91 implements INodeType { displayName: 'MSG91', name: 'msg91', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:msg91.png', + icon: { light: 'file:msg91.svg', dark: 'file:msg91.dark.svg' }, group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Msg91/msg91.dark.svg b/packages/nodes-base/nodes/Msg91/msg91.dark.svg new file mode 100644 index 0000000000000..5f6bb824e2e86 --- /dev/null +++ b/packages/nodes-base/nodes/Msg91/msg91.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Msg91/msg91.png b/packages/nodes-base/nodes/Msg91/msg91.png deleted file mode 100644 index e3dcfb6605f9a..0000000000000 Binary files a/packages/nodes-base/nodes/Msg91/msg91.png and /dev/null differ diff --git a/packages/nodes-base/nodes/Msg91/msg91.svg b/packages/nodes-base/nodes/Msg91/msg91.svg new file mode 100644 index 0000000000000..b208338075f78 --- /dev/null +++ b/packages/nodes-base/nodes/Msg91/msg91.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/MySql/MySql.node.ts b/packages/nodes-base/nodes/MySql/MySql.node.ts index 30cbbaada0b12..426c1bff47cbb 100644 --- a/packages/nodes-base/nodes/MySql/MySql.node.ts +++ b/packages/nodes-base/nodes/MySql/MySql.node.ts @@ -9,7 +9,7 @@ export class MySql extends VersionedNodeType { const baseDescription: INodeTypeBaseDescription = { displayName: 'MySQL', name: 'mySql', - icon: 'file:mysql.svg', + icon: { light: 'file:mysql.svg', dark: 'file:mysql.dark.svg' }, group: ['input'], defaultVersion: 2.4, description: 'Get, add and update data in MySQL', diff --git a/packages/nodes-base/nodes/MySql/mysql.dark.svg b/packages/nodes-base/nodes/MySql/mysql.dark.svg new file mode 100644 index 0000000000000..14e86ad18a708 --- /dev/null +++ b/packages/nodes-base/nodes/MySql/mysql.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/MySql/mysql.svg b/packages/nodes-base/nodes/MySql/mysql.svg index 165fd30c82abd..ca3b2693c4a41 100644 --- a/packages/nodes-base/nodes/MySql/mysql.svg +++ b/packages/nodes-base/nodes/MySql/mysql.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/MySql/v2/actions/versionDescription.ts b/packages/nodes-base/nodes/MySql/v2/actions/versionDescription.ts index 2c1b7b3e7db70..ad8e170691d77 100644 --- a/packages/nodes-base/nodes/MySql/v2/actions/versionDescription.ts +++ b/packages/nodes-base/nodes/MySql/v2/actions/versionDescription.ts @@ -6,7 +6,7 @@ import * as database from './database/Database.resource'; export const versionDescription: INodeTypeDescription = { displayName: 'MySQL', name: 'mySql', - icon: 'file:mysql.svg', + icon: { light: 'file:mysql.svg', dark: 'file:mysql.dark.svg' }, group: ['input'], version: [2, 2.1, 2.2, 2.3, 2.4], subtitle: '={{ $parameter["operation"] }}', diff --git a/packages/nodes-base/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.ts b/packages/nodes-base/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.ts index a5fd20b0e94a1..c7807afcd3beb 100644 --- a/packages/nodes-base/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.ts +++ b/packages/nodes-base/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.ts @@ -52,7 +52,10 @@ export class N8nTrainingCustomerDatastore implements INodeType { description: INodeTypeDescription = { displayName: 'Customer Datastore (n8n training)', name: 'n8nTrainingCustomerDatastore', - icon: 'file:n8nTrainingCustomerDatastore.svg', + icon: { + light: 'file:n8nTrainingCustomerDatastore.svg', + dark: 'file:n8nTrainingCustomerDatastore.dark.svg', + }, group: ['transform'], version: 1, subtitle: '={{$parameter["operation"]}}', diff --git a/packages/nodes-base/nodes/N8nTrainingCustomerDatastore/n8nTrainingCustomerDatastore.dark.svg b/packages/nodes-base/nodes/N8nTrainingCustomerDatastore/n8nTrainingCustomerDatastore.dark.svg new file mode 100644 index 0000000000000..297a88a2e0704 --- /dev/null +++ b/packages/nodes-base/nodes/N8nTrainingCustomerDatastore/n8nTrainingCustomerDatastore.dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/nodes/N8nTrainingCustomerDatastore/n8nTrainingCustomerDatastore.svg b/packages/nodes-base/nodes/N8nTrainingCustomerDatastore/n8nTrainingCustomerDatastore.svg index 3e20ed4539712..bff65776b6c02 100644 --- a/packages/nodes-base/nodes/N8nTrainingCustomerDatastore/n8nTrainingCustomerDatastore.svg +++ b/packages/nodes-base/nodes/N8nTrainingCustomerDatastore/n8nTrainingCustomerDatastore.svg @@ -1 +1,5 @@ - \ No newline at end of file + + + + + diff --git a/packages/nodes-base/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.ts b/packages/nodes-base/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.ts index 975cd570394be..403af6d683745 100644 --- a/packages/nodes-base/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.ts +++ b/packages/nodes-base/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.ts @@ -9,7 +9,10 @@ export class N8nTrainingCustomerMessenger implements INodeType { description: INodeTypeDescription = { displayName: 'Customer Messenger (n8n training)', name: 'n8nTrainingCustomerMessenger', - icon: 'file:n8nTrainingCustomerMessenger.svg', + icon: { + light: 'file:n8nTrainingCustomerMessenger.svg', + dark: 'file:n8nTrainingCustomerMessenger.dark.svg', + }, group: ['transform'], version: 1, description: 'Dummy node used for n8n training', diff --git a/packages/nodes-base/nodes/N8nTrainingCustomerMessenger/n8nTrainingCustomerMessenger.dark.svg b/packages/nodes-base/nodes/N8nTrainingCustomerMessenger/n8nTrainingCustomerMessenger.dark.svg new file mode 100644 index 0000000000000..05f01d14acccd --- /dev/null +++ b/packages/nodes-base/nodes/N8nTrainingCustomerMessenger/n8nTrainingCustomerMessenger.dark.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/N8nTrainingCustomerMessenger/n8nTrainingCustomerMessenger.svg b/packages/nodes-base/nodes/N8nTrainingCustomerMessenger/n8nTrainingCustomerMessenger.svg index 800416c3b54b5..ee3b8accd8cd0 100644 --- a/packages/nodes-base/nodes/N8nTrainingCustomerMessenger/n8nTrainingCustomerMessenger.svg +++ b/packages/nodes-base/nodes/N8nTrainingCustomerMessenger/n8nTrainingCustomerMessenger.svg @@ -1 +1,4 @@ - \ No newline at end of file + + + + diff --git a/packages/nodes-base/nodes/NoOp/NoOp.node.ts b/packages/nodes-base/nodes/NoOp/NoOp.node.ts index f6de989c1ffb5..4116a3a52f454 100644 --- a/packages/nodes-base/nodes/NoOp/NoOp.node.ts +++ b/packages/nodes-base/nodes/NoOp/NoOp.node.ts @@ -10,6 +10,7 @@ export class NoOp implements INodeType { displayName: 'No Operation, do nothing', name: 'noOp', icon: 'fa:arrow-right', + iconColor: 'gray', group: ['organization'], version: 1, description: 'No Operation', diff --git a/packages/nodes-base/nodes/Notion/Notion.node.ts b/packages/nodes-base/nodes/Notion/Notion.node.ts index 7601a89867e68..953c4233ef4cc 100644 --- a/packages/nodes-base/nodes/Notion/Notion.node.ts +++ b/packages/nodes-base/nodes/Notion/Notion.node.ts @@ -9,7 +9,7 @@ export class Notion extends VersionedNodeType { const baseDescription: INodeTypeBaseDescription = { displayName: 'Notion', name: 'notion', - icon: 'file:notion.svg', + icon: { light: 'file:notion.svg', dark: 'file:notion.dark.svg' }, group: ['output'], subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Consume Notion API', diff --git a/packages/nodes-base/nodes/Notion/NotionTrigger.node.ts b/packages/nodes-base/nodes/Notion/NotionTrigger.node.ts index ca6c69aa86852..537fbfa43d636 100644 --- a/packages/nodes-base/nodes/Notion/NotionTrigger.node.ts +++ b/packages/nodes-base/nodes/Notion/NotionTrigger.node.ts @@ -15,7 +15,7 @@ export class NotionTrigger implements INodeType { description: INodeTypeDescription = { displayName: 'Notion Trigger', name: 'notionTrigger', - icon: 'file:notion.svg', + icon: { light: 'file:notion.svg', dark: 'file:notion.dark.svg' }, group: ['trigger'], version: 1, description: 'Starts the workflow when Notion events occur', diff --git a/packages/nodes-base/nodes/Notion/notion.dark.svg b/packages/nodes-base/nodes/Notion/notion.dark.svg new file mode 100644 index 0000000000000..06d94f49736d4 --- /dev/null +++ b/packages/nodes-base/nodes/Notion/notion.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Notion/notion.svg b/packages/nodes-base/nodes/Notion/notion.svg index f2af3da9b223a..d41d03330277f 100644 --- a/packages/nodes-base/nodes/Notion/notion.svg +++ b/packages/nodes-base/nodes/Notion/notion.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/Notion/v2/VersionDescription.ts b/packages/nodes-base/nodes/Notion/v2/VersionDescription.ts index 0cdd0995738ab..934152fa26c6d 100644 --- a/packages/nodes-base/nodes/Notion/v2/VersionDescription.ts +++ b/packages/nodes-base/nodes/Notion/v2/VersionDescription.ts @@ -16,7 +16,7 @@ import { export const versionDescription: INodeTypeDescription = { displayName: 'Notion', name: 'notion', - icon: 'file:notion.svg', + icon: { light: 'file:notion.svg', dark: 'file:notion.dark.svg' }, group: ['output'], version: [2, 2.1, 2.2], subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/OpenAi/OpenAi.node.ts b/packages/nodes-base/nodes/OpenAi/OpenAi.node.ts index d4ed1e429d092..c7db40837a6c9 100644 --- a/packages/nodes-base/nodes/OpenAi/OpenAi.node.ts +++ b/packages/nodes-base/nodes/OpenAi/OpenAi.node.ts @@ -9,7 +9,7 @@ export class OpenAi implements INodeType { displayName: 'OpenAI', name: 'openAi', hidden: true, - icon: 'file:openAi.svg', + icon: { light: 'file:openAi.svg', dark: 'file:openAi.dark.svg' }, group: ['transform'], version: [1, 1.1], subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/OpenAi/openAi.dark.svg b/packages/nodes-base/nodes/OpenAi/openAi.dark.svg new file mode 100644 index 0000000000000..437cc59672e16 --- /dev/null +++ b/packages/nodes-base/nodes/OpenAi/openAi.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/OpenWeatherMap/OpenWeatherMap.node.ts b/packages/nodes-base/nodes/OpenWeatherMap/OpenWeatherMap.node.ts index f1f40ffc32990..3b9e4e6ff85d8 100644 --- a/packages/nodes-base/nodes/OpenWeatherMap/OpenWeatherMap.node.ts +++ b/packages/nodes-base/nodes/OpenWeatherMap/OpenWeatherMap.node.ts @@ -13,13 +13,12 @@ export class OpenWeatherMap implements INodeType { description: INodeTypeDescription = { displayName: 'OpenWeatherMap', name: 'openWeatherMap', - icon: 'fa:sun', + icon: 'file:openWeatherMap.svg', group: ['input'], version: 1, description: 'Gets current and future weather information', defaults: { name: 'OpenWeatherMap', - color: '#554455', }, inputs: ['main'], outputs: ['main'], diff --git a/packages/nodes-base/nodes/OpenWeatherMap/openWeatherMap.svg b/packages/nodes-base/nodes/OpenWeatherMap/openWeatherMap.svg new file mode 100644 index 0000000000000..41244f3893d99 --- /dev/null +++ b/packages/nodes-base/nodes/OpenWeatherMap/openWeatherMap.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/nodes/Orbit/Orbit.node.ts b/packages/nodes-base/nodes/Orbit/Orbit.node.ts index f5faa28220614..48069d20369c1 100644 --- a/packages/nodes-base/nodes/Orbit/Orbit.node.ts +++ b/packages/nodes-base/nodes/Orbit/Orbit.node.ts @@ -25,7 +25,7 @@ export class Orbit implements INodeType { description: INodeTypeDescription = { displayName: 'Orbit', name: 'orbit', - icon: 'file:orbit.svg', + icon: { light: 'file:orbit.svg', dark: 'file:orbit.dark.svg' }, group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Orbit/orbit.dark.svg b/packages/nodes-base/nodes/Orbit/orbit.dark.svg new file mode 100644 index 0000000000000..7782c9dfeca5f --- /dev/null +++ b/packages/nodes-base/nodes/Orbit/orbit.dark.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/packages/nodes-base/nodes/Orbit/orbit.svg b/packages/nodes-base/nodes/Orbit/orbit.svg index a52b999c6b931..fd3687c272725 100644 --- a/packages/nodes-base/nodes/Orbit/orbit.svg +++ b/packages/nodes-base/nodes/Orbit/orbit.svg @@ -1 +1,7 @@ - \ No newline at end of file + + + + + + + diff --git a/packages/nodes-base/nodes/Oura/Oura.node.ts b/packages/nodes-base/nodes/Oura/Oura.node.ts index ecadcb9fcc53d..bf57b489da9b3 100644 --- a/packages/nodes-base/nodes/Oura/Oura.node.ts +++ b/packages/nodes-base/nodes/Oura/Oura.node.ts @@ -17,7 +17,7 @@ export class Oura implements INodeType { description: INodeTypeDescription = { displayName: 'Oura', name: 'oura', - icon: 'file:oura.svg', + icon: { light: 'file:oura.svg', dark: 'file:oura.dark.svg' }, group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Oura/oura.dark.svg b/packages/nodes-base/nodes/Oura/oura.dark.svg new file mode 100644 index 0000000000000..6aa47774cf42e --- /dev/null +++ b/packages/nodes-base/nodes/Oura/oura.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Oura/oura.svg b/packages/nodes-base/nodes/Oura/oura.svg index 85ddf3fd2975e..ac24a91213970 100644 --- a/packages/nodes-base/nodes/Oura/oura.svg +++ b/packages/nodes-base/nodes/Oura/oura.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/ProfitWell/ProfitWell.node.ts b/packages/nodes-base/nodes/ProfitWell/ProfitWell.node.ts index d5a834024c215..a153607cf9bfa 100644 --- a/packages/nodes-base/nodes/ProfitWell/ProfitWell.node.ts +++ b/packages/nodes-base/nodes/ProfitWell/ProfitWell.node.ts @@ -24,7 +24,7 @@ export class ProfitWell implements INodeType { displayName: 'ProfitWell', name: 'profitWell', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:profitwell.png', + icon: { light: 'file:profitwell.svg', dark: 'file:profitwell.dark.svg' }, group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/ProfitWell/profitwell.dark.svg b/packages/nodes-base/nodes/ProfitWell/profitwell.dark.svg new file mode 100644 index 0000000000000..9cec2b4cecde0 --- /dev/null +++ b/packages/nodes-base/nodes/ProfitWell/profitwell.dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/nodes/ProfitWell/profitwell.png b/packages/nodes-base/nodes/ProfitWell/profitwell.png deleted file mode 100644 index 78b9c0afc0749..0000000000000 Binary files a/packages/nodes-base/nodes/ProfitWell/profitwell.png and /dev/null differ diff --git a/packages/nodes-base/nodes/ProfitWell/profitwell.svg b/packages/nodes-base/nodes/ProfitWell/profitwell.svg new file mode 100644 index 0000000000000..438d3202484e1 --- /dev/null +++ b/packages/nodes-base/nodes/ProfitWell/profitwell.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/nodes/RabbitMQ/RabbitMQ.node.ts b/packages/nodes-base/nodes/RabbitMQ/RabbitMQ.node.ts index 85017cbdcd937..f64ff61cc94e0 100644 --- a/packages/nodes-base/nodes/RabbitMQ/RabbitMQ.node.ts +++ b/packages/nodes-base/nodes/RabbitMQ/RabbitMQ.node.ts @@ -21,7 +21,7 @@ export class RabbitMQ implements INodeType { displayName: 'RabbitMQ', name: 'rabbitmq', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:rabbitmq.png', + icon: 'file:rabbitmq.svg', group: ['transform'], version: [1, 1.1], description: 'Sends messages to a RabbitMQ topic', diff --git a/packages/nodes-base/nodes/RabbitMQ/rabbitmq.png b/packages/nodes-base/nodes/RabbitMQ/rabbitmq.png deleted file mode 100644 index d37a2a0fbeeb2..0000000000000 Binary files a/packages/nodes-base/nodes/RabbitMQ/rabbitmq.png and /dev/null differ diff --git a/packages/nodes-base/nodes/RabbitMQ/rabbitmq.svg b/packages/nodes-base/nodes/RabbitMQ/rabbitmq.svg new file mode 100644 index 0000000000000..7208ecb5d8cf9 --- /dev/null +++ b/packages/nodes-base/nodes/RabbitMQ/rabbitmq.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/RenameKeys/RenameKeys.node.ts b/packages/nodes-base/nodes/RenameKeys/RenameKeys.node.ts index d3a8d1ba71916..940bb04d171a8 100644 --- a/packages/nodes-base/nodes/RenameKeys/RenameKeys.node.ts +++ b/packages/nodes-base/nodes/RenameKeys/RenameKeys.node.ts @@ -21,6 +21,7 @@ export class RenameKeys implements INodeType { displayName: 'Rename Keys', name: 'renameKeys', icon: 'fa:edit', + iconColor: 'crimson', group: ['transform'], version: 1, description: 'Update item field names', diff --git a/packages/nodes-base/nodes/RespondToWebhook/RespondToWebhook.node.ts b/packages/nodes-base/nodes/RespondToWebhook/RespondToWebhook.node.ts index c3a8c8ce0052e..1b6e3b48224d5 100644 --- a/packages/nodes-base/nodes/RespondToWebhook/RespondToWebhook.node.ts +++ b/packages/nodes-base/nodes/RespondToWebhook/RespondToWebhook.node.ts @@ -16,7 +16,7 @@ import { formatPrivateKey, generatePairedItemData } from '../../utils/utilities' export class RespondToWebhook implements INodeType { description: INodeTypeDescription = { displayName: 'Respond to Webhook', - icon: 'file:webhook.svg', + icon: { light: 'file:webhook.svg', dark: 'file:webhook.dark.svg' }, name: 'respondToWebhook', group: ['transform'], version: [1, 1.1], diff --git a/packages/nodes-base/nodes/RespondToWebhook/webhook.dark.svg b/packages/nodes-base/nodes/RespondToWebhook/webhook.dark.svg new file mode 100644 index 0000000000000..dc3754621e664 --- /dev/null +++ b/packages/nodes-base/nodes/RespondToWebhook/webhook.dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/nodes/RssFeedRead/RssFeedRead.node.ts b/packages/nodes-base/nodes/RssFeedRead/RssFeedRead.node.ts index e16db2fb1c374..5eb9dc47aaefe 100644 --- a/packages/nodes-base/nodes/RssFeedRead/RssFeedRead.node.ts +++ b/packages/nodes-base/nodes/RssFeedRead/RssFeedRead.node.ts @@ -27,6 +27,7 @@ export class RssFeedRead implements INodeType { displayName: 'RSS Read', name: 'rssFeedRead', icon: 'fa:rss', + iconColor: 'orange-red', group: ['input'], version: [1, 1.1], description: 'Reads data from an RSS Feed', diff --git a/packages/nodes-base/nodes/SentryIo/SentryIo.node.ts b/packages/nodes-base/nodes/SentryIo/SentryIo.node.ts index 5133f74fe8077..0e0d54ddf8341 100644 --- a/packages/nodes-base/nodes/SentryIo/SentryIo.node.ts +++ b/packages/nodes-base/nodes/SentryIo/SentryIo.node.ts @@ -28,7 +28,7 @@ export class SentryIo implements INodeType { description: INodeTypeDescription = { displayName: 'Sentry.io', name: 'sentryIo', - icon: 'file:sentryio.svg', + icon: { light: 'file:sentryio.svg', dark: 'file:sentryio.dark.svg' }, group: ['output'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/SentryIo/sentryio.dark.svg b/packages/nodes-base/nodes/SentryIo/sentryio.dark.svg new file mode 100644 index 0000000000000..0436a2d5ddcdd --- /dev/null +++ b/packages/nodes-base/nodes/SentryIo/sentryio.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/SentryIo/sentryio.svg b/packages/nodes-base/nodes/SentryIo/sentryio.svg index 1988b93ff0166..29339cf49f356 100644 --- a/packages/nodes-base/nodes/SentryIo/sentryio.svg +++ b/packages/nodes-base/nodes/SentryIo/sentryio.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/Set/v2/SetV2.node.ts b/packages/nodes-base/nodes/Set/v2/SetV2.node.ts index 41cc4a2f337d2..89ace04c7d9cb 100644 --- a/packages/nodes-base/nodes/Set/v2/SetV2.node.ts +++ b/packages/nodes-base/nodes/Set/v2/SetV2.node.ts @@ -19,14 +19,13 @@ type Mode = 'manual' | 'raw'; const versionDescription: INodeTypeDescription = { displayName: 'Edit Fields (Set)', name: 'set', - icon: 'fa:pen', + iconColor: 'blue', group: ['input'], version: [3, 3.1, 3.2, 3.3], description: 'Modify, add, or remove item fields', subtitle: '={{$parameter["mode"]}}', defaults: { name: 'Edit Fields', - color: '#0000FF', }, inputs: ['main'], outputs: ['main'], diff --git a/packages/nodes-base/nodes/SplitInBatches/SplitInBatches.node.ts b/packages/nodes-base/nodes/SplitInBatches/SplitInBatches.node.ts index befc773106020..8bb3a2da45a2a 100644 --- a/packages/nodes-base/nodes/SplitInBatches/SplitInBatches.node.ts +++ b/packages/nodes-base/nodes/SplitInBatches/SplitInBatches.node.ts @@ -11,6 +11,7 @@ export class SplitInBatches extends VersionedNodeType { displayName: 'Split In Batches', name: 'splitInBatches', icon: 'fa:th-large', + iconColor: 'dark-green', group: ['organization'], description: 'Split data into batches and iterate over each batch', defaultVersion: 3, diff --git a/packages/nodes-base/nodes/SplitInBatches/v3/SplitInBatchesV3.node.ts b/packages/nodes-base/nodes/SplitInBatches/v3/SplitInBatchesV3.node.ts index 6e1e416ad3dfc..0581c3d1bc906 100644 --- a/packages/nodes-base/nodes/SplitInBatches/v3/SplitInBatchesV3.node.ts +++ b/packages/nodes-base/nodes/SplitInBatches/v3/SplitInBatchesV3.node.ts @@ -13,6 +13,7 @@ export class SplitInBatchesV3 implements INodeType { displayName: 'Loop Over Items (Split in Batches)', name: 'splitInBatches', icon: 'fa:sync', + iconColor: 'dark-green', group: ['organization'], version: 3, description: 'Split data into batches and iterate over each batch', diff --git a/packages/nodes-base/nodes/SseTrigger/SseTrigger.node.ts b/packages/nodes-base/nodes/SseTrigger/SseTrigger.node.ts index 16d696817d8bc..48324668a6604 100644 --- a/packages/nodes-base/nodes/SseTrigger/SseTrigger.node.ts +++ b/packages/nodes-base/nodes/SseTrigger/SseTrigger.node.ts @@ -13,6 +13,7 @@ export class SseTrigger implements INodeType { displayName: 'SSE Trigger', name: 'sseTrigger', icon: 'fa:cloud-download-alt', + iconColor: 'dark-blue', group: ['trigger'], version: 1, description: 'Triggers the workflow when Server-Sent Events occur', diff --git a/packages/nodes-base/nodes/Ssh/Ssh.node.ts b/packages/nodes-base/nodes/Ssh/Ssh.node.ts index 7625289797609..a43a20f243203 100644 --- a/packages/nodes-base/nodes/Ssh/Ssh.node.ts +++ b/packages/nodes-base/nodes/Ssh/Ssh.node.ts @@ -52,6 +52,7 @@ export class Ssh implements INodeType { displayName: 'SSH', name: 'ssh', icon: 'fa:terminal', + iconColor: 'black', group: ['input'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/StopAndError/StopAndError.node.ts b/packages/nodes-base/nodes/StopAndError/StopAndError.node.ts index 3378c73699ea9..addd4c0cf9f21 100644 --- a/packages/nodes-base/nodes/StopAndError/StopAndError.node.ts +++ b/packages/nodes-base/nodes/StopAndError/StopAndError.node.ts @@ -17,6 +17,7 @@ export class StopAndError implements INodeType { displayName: 'Stop and Error', name: 'stopAndError', icon: 'fa:exclamation-triangle', + iconColor: 'red', group: ['input'], version: 1, description: 'Throw an error in the workflow', diff --git a/packages/nodes-base/nodes/Switch/Switch.node.ts b/packages/nodes-base/nodes/Switch/Switch.node.ts index 9b6de4015f8f4..c54f5b55da624 100644 --- a/packages/nodes-base/nodes/Switch/Switch.node.ts +++ b/packages/nodes-base/nodes/Switch/Switch.node.ts @@ -11,6 +11,7 @@ export class Switch extends VersionedNodeType { displayName: 'Switch', name: 'switch', icon: 'fa:map-signs', + iconColor: 'light-blue', group: ['transform'], description: 'Route items depending on defined expression or rules', defaultVersion: 3, diff --git a/packages/nodes-base/nodes/TimescaleDb/TimescaleDb.node.ts b/packages/nodes-base/nodes/TimescaleDb/TimescaleDb.node.ts index e287be8edec91..eb49ea8963b9a 100644 --- a/packages/nodes-base/nodes/TimescaleDb/TimescaleDb.node.ts +++ b/packages/nodes-base/nodes/TimescaleDb/TimescaleDb.node.ts @@ -13,7 +13,7 @@ export class TimescaleDb implements INodeType { description: INodeTypeDescription = { displayName: 'TimescaleDB', name: 'timescaleDb', - icon: 'file:timescale.svg', + icon: { light: 'file:timescaleDb.svg', dark: 'file:timescaleDb.dark.svg' }, group: ['input'], version: 1, description: 'Add and update data in TimescaleDB', diff --git a/packages/nodes-base/nodes/TimescaleDb/timescale.svg b/packages/nodes-base/nodes/TimescaleDb/timescale.svg deleted file mode 100644 index e0f4d6e2e60f8..0000000000000 --- a/packages/nodes-base/nodes/TimescaleDb/timescale.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/packages/nodes-base/nodes/TimescaleDb/timescaleDb.dark.svg b/packages/nodes-base/nodes/TimescaleDb/timescaleDb.dark.svg new file mode 100644 index 0000000000000..1aba89babe215 --- /dev/null +++ b/packages/nodes-base/nodes/TimescaleDb/timescaleDb.dark.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/packages/nodes-base/nodes/TimescaleDb/timescaleDb.svg b/packages/nodes-base/nodes/TimescaleDb/timescaleDb.svg new file mode 100644 index 0000000000000..42274c0217367 --- /dev/null +++ b/packages/nodes-base/nodes/TimescaleDb/timescaleDb.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/packages/nodes-base/nodes/Twitter/Twitter.node.ts b/packages/nodes-base/nodes/Twitter/Twitter.node.ts index 922b29f4a220e..0cfb9b296b394 100644 --- a/packages/nodes-base/nodes/Twitter/Twitter.node.ts +++ b/packages/nodes-base/nodes/Twitter/Twitter.node.ts @@ -10,7 +10,7 @@ export class Twitter extends VersionedNodeType { const baseDescription: INodeTypeBaseDescription = { displayName: 'X (Formerly Twitter)', name: 'twitter', - icon: 'file:x.svg', + icon: { light: 'file:x.svg', dark: 'file:x.dark.svg' }, group: ['output'], subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', description: 'Consume the X API', diff --git a/packages/nodes-base/nodes/Twitter/x.dark.svg b/packages/nodes-base/nodes/Twitter/x.dark.svg new file mode 100644 index 0000000000000..df3ffb0e6b34a --- /dev/null +++ b/packages/nodes-base/nodes/Twitter/x.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Twitter/x.svg b/packages/nodes-base/nodes/Twitter/x.svg index 95d7fc2f51382..3a72554876c77 100644 --- a/packages/nodes-base/nodes/Twitter/x.svg +++ b/packages/nodes-base/nodes/Twitter/x.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/Typeform/TypeformTrigger.node.ts b/packages/nodes-base/nodes/Typeform/TypeformTrigger.node.ts index 5b85262a6e2c9..52aa072dae5c3 100644 --- a/packages/nodes-base/nodes/Typeform/TypeformTrigger.node.ts +++ b/packages/nodes-base/nodes/Typeform/TypeformTrigger.node.ts @@ -23,7 +23,7 @@ export class TypeformTrigger implements INodeType { description: INodeTypeDescription = { displayName: 'Typeform Trigger', name: 'typeformTrigger', - icon: 'file:typeform.svg', + icon: { light: 'file:typeform.svg', dark: 'file:typeform.dark.svg' }, group: ['trigger'], version: [1, 1.1], subtitle: '=Form ID: {{$parameter["formId"]}}', diff --git a/packages/nodes-base/nodes/Typeform/typeform.dark.svg b/packages/nodes-base/nodes/Typeform/typeform.dark.svg new file mode 100644 index 0000000000000..020fa91565ef7 --- /dev/null +++ b/packages/nodes-base/nodes/Typeform/typeform.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Typeform/typeform.svg b/packages/nodes-base/nodes/Typeform/typeform.svg index 4720d1190061a..578ff3ef8a557 100644 --- a/packages/nodes-base/nodes/Typeform/typeform.svg +++ b/packages/nodes-base/nodes/Typeform/typeform.svg @@ -1 +1,3 @@ - \ No newline at end of file + + + diff --git a/packages/nodes-base/nodes/Vonage/Vonage.node.ts b/packages/nodes-base/nodes/Vonage/Vonage.node.ts index b6944f4f1a2f7..14793158c1017 100644 --- a/packages/nodes-base/nodes/Vonage/Vonage.node.ts +++ b/packages/nodes-base/nodes/Vonage/Vonage.node.ts @@ -13,7 +13,7 @@ export class Vonage implements INodeType { displayName: 'Vonage', name: 'vonage', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:vonage.png', + icon: { light: 'file:vonage.svg', dark: 'file:vonage.dark.svg' }, group: ['input'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Vonage/vonage.dark.svg b/packages/nodes-base/nodes/Vonage/vonage.dark.svg new file mode 100644 index 0000000000000..223f61e095e9b --- /dev/null +++ b/packages/nodes-base/nodes/Vonage/vonage.dark.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Vonage/vonage.png b/packages/nodes-base/nodes/Vonage/vonage.png deleted file mode 100644 index f4b8b02565079..0000000000000 Binary files a/packages/nodes-base/nodes/Vonage/vonage.png and /dev/null differ diff --git a/packages/nodes-base/nodes/Vonage/vonage.svg b/packages/nodes-base/nodes/Vonage/vonage.svg new file mode 100644 index 0000000000000..e1064cf3173a9 --- /dev/null +++ b/packages/nodes-base/nodes/Vonage/vonage.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/nodes-base/nodes/Wait/Wait.node.ts b/packages/nodes-base/nodes/Wait/Wait.node.ts index f30b006a08c64..d796bbadc2bae 100644 --- a/packages/nodes-base/nodes/Wait/Wait.node.ts +++ b/packages/nodes-base/nodes/Wait/Wait.node.ts @@ -226,6 +226,7 @@ export class Wait extends Webhook { displayName: 'Wait', name: 'wait', icon: 'fa:pause-circle', + iconColor: 'crimson', group: ['organization'], version: [1, 1.1], description: 'Wait before continue with execution', diff --git a/packages/nodes-base/nodes/Webhook/Webhook.node.ts b/packages/nodes-base/nodes/Webhook/Webhook.node.ts index 98b699962ac04..3fe4460cd8d09 100644 --- a/packages/nodes-base/nodes/Webhook/Webhook.node.ts +++ b/packages/nodes-base/nodes/Webhook/Webhook.node.ts @@ -46,7 +46,7 @@ export class Webhook extends Node { description: INodeTypeDescription = { displayName: 'Webhook', - icon: 'file:webhook.svg', + icon: { light: 'file:webhook.svg', dark: 'file:webhook.dark.svg' }, name: 'webhook', group: ['trigger'], version: [1, 1.1, 2], diff --git a/packages/nodes-base/nodes/Webhook/webhook.dark.svg b/packages/nodes-base/nodes/Webhook/webhook.dark.svg new file mode 100644 index 0000000000000..dc3754621e664 --- /dev/null +++ b/packages/nodes-base/nodes/Webhook/webhook.dark.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/nodes-base/nodes/Wekan/Wekan.node.ts b/packages/nodes-base/nodes/Wekan/Wekan.node.ts index b3a8501f47bb3..0f64e67132de2 100644 --- a/packages/nodes-base/nodes/Wekan/Wekan.node.ts +++ b/packages/nodes-base/nodes/Wekan/Wekan.node.ts @@ -32,7 +32,7 @@ export class Wekan implements INodeType { displayName: 'Wekan', name: 'wekan', // eslint-disable-next-line n8n-nodes-base/node-class-description-icon-not-svg - icon: 'file:wekan.png', + icon: 'file:wekan.svg', group: ['transform'], version: 1, subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', diff --git a/packages/nodes-base/nodes/Wekan/wekan.png b/packages/nodes-base/nodes/Wekan/wekan.png deleted file mode 100644 index 8849da129cd9e..0000000000000 Binary files a/packages/nodes-base/nodes/Wekan/wekan.png and /dev/null differ diff --git a/packages/nodes-base/nodes/Wekan/wekan.svg b/packages/nodes-base/nodes/Wekan/wekan.svg new file mode 100644 index 0000000000000..c0ab906f4a561 --- /dev/null +++ b/packages/nodes-base/nodes/Wekan/wekan.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/nodes-base/nodes/WorkflowTrigger/WorkflowTrigger.node.ts b/packages/nodes-base/nodes/WorkflowTrigger/WorkflowTrigger.node.ts index a78e1f6b8ce80..d3ccad98bb7e1 100644 --- a/packages/nodes-base/nodes/WorkflowTrigger/WorkflowTrigger.node.ts +++ b/packages/nodes-base/nodes/WorkflowTrigger/WorkflowTrigger.node.ts @@ -13,6 +13,7 @@ export class WorkflowTrigger implements INodeType { displayName: 'Workflow Trigger', name: 'workflowTrigger', icon: 'fa:network-wired', + iconColor: 'orange-red', group: ['trigger'], version: 1, description: 'Triggers based on various lifecycle events, like when a workflow is activated', diff --git a/packages/nodes-base/nodes/Xml/Xml.node.ts b/packages/nodes-base/nodes/Xml/Xml.node.ts index efb3518a3414a..b29e80faf3cbd 100644 --- a/packages/nodes-base/nodes/Xml/Xml.node.ts +++ b/packages/nodes-base/nodes/Xml/Xml.node.ts @@ -12,6 +12,7 @@ export class Xml implements INodeType { displayName: 'XML', name: 'xml', icon: 'fa:file-code', + iconColor: 'purple', group: ['transform'], version: 1, subtitle: '={{$parameter["mode"]==="jsonToxml" ? "JSON to XML" : "XML to JSON"}}', diff --git a/packages/workflow/src/Interfaces.ts b/packages/workflow/src/Interfaces.ts index 01ac6d1b58dfe..1e356d0d136c5 100644 --- a/packages/workflow/src/Interfaces.ts +++ b/packages/workflow/src/Interfaces.ts @@ -309,8 +309,8 @@ type ICredentialHttpRequestNode = { export interface ICredentialType { name: string; displayName: string; - icon?: string; - iconUrl?: string; + icon?: Themed; + iconUrl?: Themed; extends?: string[]; properties: INodeProperties[]; documentationUrl?: string; @@ -1546,11 +1546,31 @@ export interface IWorkflowIssues { [key: string]: INodeIssues; } +export type NodeIconColor = + | 'gray' + | 'black' + | 'blue' + | 'light-blue' + | 'dark-blue' + | 'orange' + | 'orange-red' + | 'pink-red' + | 'red' + | 'light-green' + | 'green' + | 'dark-green' + | 'azure' + | 'purple' + | 'crimson'; +export type Icon = `fa:${string}` | `file:${string}` | `node:${string}`; +export type Themed = T | { light: T; dark: T }; + export interface INodeTypeBaseDescription { displayName: string; name: string; - icon?: string; - iconUrl?: string; + icon?: Themed; + iconColor?: NodeIconColor; + iconUrl?: Themed; badgeIconUrl?: string; group: string[]; description: string;