From 6902e38e6a7576174800f8488b1e144255f99360 Mon Sep 17 00:00:00 2001 From: pythongosssss <125205205+pythongosssss@users.noreply.github.com> Date: Fri, 20 Feb 2026 09:10:03 +0000 Subject: [PATCH] V2 Node Search (+ hidden Node Library changes) (#8987) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Summary Redesigned node search with categories ## Changes - **What**: Adds a v2 search component, leaving the existing implementation untouched - It also brings onboard the incomplete node library & preview changes, disabled and behind a hidden setting - **Breaking**: Changes the 'default' value of the node search setting to v2, adding v1 (legacy) as an option ## Screenshots (if applicable) https://github.com/user-attachments/assets/2ab797df-58f0-48e8-8b20-2a1809e3735f ┆Issue is synchronized with this [Notion page](https://www.notion.so/PR-8987-V2-Node-Search-hidden-Node-Library-changes-30c6d73d36508160902bcb92553f147c) by [Unito](https://www.unito.io) --------- Co-authored-by: Yourz Co-authored-by: Amp Co-authored-by: github-actions Co-authored-by: GitHub Action Co-authored-by: Christian Byrne --- .stylelintrc.json | 3 +- browser_tests/fixtures/ComfyPage.ts | 3 + .../components/ComfyNodeSearchBoxV2.ts | 29 + browser_tests/tests/dialog.spec.ts | 2 +- browser_tests/tests/groupNode.spec.ts | 1 + browser_tests/tests/nodeSearchBox.spec.ts | 25 +- browser_tests/tests/nodeSearchBoxV2.spec.ts | 149 ++++ browser_tests/tests/recordAudio.spec.ts | 1 + browser_tests/tests/remoteWidgets.spec.ts | 4 + ...ck-node-collapsed-badge-chromium-linux.png | Bin 97001 -> 91448 bytes browser_tests/tests/subgraph.spec.ts | 4 + .../tests/subgraphSearchAliases.spec.ts | 5 +- .../links/linkInteraction.spec.ts | 15 +- packages/design-system/src/css/style.css | 6 + packages/design-system/src/icons/bfl.svg | 10 + packages/design-system/src/icons/bria.svg | 18 + .../design-system/src/icons/bytedance.svg | 13 + packages/design-system/src/icons/canny.svg | 10 + .../src/icons/canny_to_image.svg | 5 + .../src/icons/clip-text-encode.svg | 3 + .../src/icons/compare_images.svg | 5 + .../src/icons/compare_videos.svg | 5 + packages/design-system/src/icons/credits.svg | 3 + .../design-system/src/icons/crop_video.svg | 4 + .../src/icons/depth_to_image.svg | 12 + .../src/icons/depth_to_video.svg | 12 + .../design-system/src/icons/edit_image.svg | 3 + .../design-system/src/icons/edit_video.svg | 4 + packages/design-system/src/icons/enhance.svg | 3 + .../src/icons/enhance_3dmodel.svg | 4 + .../design-system/src/icons/enhance_video.svg | 4 + packages/design-system/src/icons/gemini.svg | 25 + .../src/icons/get-video-components.svg | 3 + packages/design-system/src/icons/grok.svg | 10 + packages/design-system/src/icons/hitpaw.svg | 10 + packages/design-system/src/icons/ideogram.svg | 3 + .../design-system/src/icons/image-batch.svg | 3 + .../design-system/src/icons/image-blur.svg | 11 + .../design-system/src/icons/image-crop.svg | 3 + .../design-system/src/icons/image-invert.svg | 4 + .../design-system/src/icons/image-rotate.svg | 4 + .../design-system/src/icons/image-scale.svg | 3 + .../src/icons/image_captioning.svg | 3 + .../src/icons/image_color_adjust.svg | 3 + .../src/icons/image_compositor.svg | 3 + .../design-system/src/icons/image_depth.svg | 15 + .../src/icons/image_iterator.svg | 3 + .../src/icons/image_normalmap.svg | 21 + .../design-system/src/icons/image_pose.svg | 10 + .../design-system/src/icons/image_shader.svg | 5 + .../src/icons/image_to_image.svg | 4 + .../src/icons/image_to_layers.svg | 6 + .../src/icons/image_to_video.svg | 4 + .../design-system/src/icons/inpaint_image.svg | 4 + .../design-system/src/icons/inpaint_video.svg | 4 + .../kling-lip-sync-audio-to-video-node.svg | 3 + packages/design-system/src/icons/kling.svg | 38 + .../src/icons/layers_to_image.svg | 6 + packages/design-system/src/icons/load-3-d.svg | 3 + .../design-system/src/icons/load-audio.svg | 4 + .../design-system/src/icons/load-image.svg | 3 + .../design-system/src/icons/load-video.svg | 3 + .../design-system/src/icons/lora-loader.svg | 5 + packages/design-system/src/icons/ltxv.svg | 10 + packages/design-system/src/icons/luma.svg | 35 + packages/design-system/src/icons/magnific.svg | 14 + packages/design-system/src/icons/meshy.svg | 33 + packages/design-system/src/icons/minimax.svg | 14 + .../src/icons/moonvalley-marey.svg | 18 + .../src/icons/music_generation.svg | 6 + .../src/icons/open-ai-chat-node.svg | 3 + packages/design-system/src/icons/openai.svg | 10 + .../src/icons/outpaint_image.svg | 5 + packages/design-system/src/icons/painter.svg | 3 + packages/design-system/src/icons/pixverse.svg | 15 + .../design-system/src/icons/pose_to_image.svg | 5 + .../src/icons/prompt_enhance.svg | 3 + .../icons/recraft-remove-background-node.svg | 10 + packages/design-system/src/icons/recraft.svg | 11 + .../design-system/src/icons/resize_video.svg | 11 + packages/design-system/src/icons/rodin.svg | 18 + .../design-system/src/icons/rotate_video.svg | 17 + packages/design-system/src/icons/runway.svg | 10 + .../design-system/src/icons/save-audio.svg | 4 + packages/design-system/src/icons/save-glb.svg | 3 + .../design-system/src/icons/save-image.svg | 3 + .../design-system/src/icons/save-video.svg | 3 + .../design-system/src/icons/select_object.svg | 10 + packages/design-system/src/icons/sora.svg | 9 + .../design-system/src/icons/stability-ai.svg | 15 + .../src/icons/stability-text-to-audio.svg | 5 + .../design-system/src/icons/stitch_videos.svg | 3 + ...graph-blueprint-canny-to-video-ltx-2-0.svg | 5 + ...bgraph-blueprint-pose-to-video-ltx-2-0.svg | 5 + .../src/icons/tencent-image-to-model-node.svg | 4 + .../src/icons/tencent-text-to-model-node.svg | 5 + packages/design-system/src/icons/tencent.svg | 23 + .../design-system/src/icons/text_iterator.svg | 3 + .../design-system/src/icons/text_to_image.svg | 5 + .../design-system/src/icons/text_to_video.svg | 5 + packages/design-system/src/icons/topaz.svg | 10 + .../design-system/src/icons/trim_video.svg | 5 + packages/design-system/src/icons/tripo.svg | 16 + .../design-system/src/icons/vectorize.svg | 3 + packages/design-system/src/icons/veo.svg | 13 + .../design-system/src/icons/video_canny.svg | 11 + .../src/icons/video_captioning.svg | 3 + .../src/icons/video_compositor.svg | 4 + .../design-system/src/icons/video_depth.svg | 15 + .../src/icons/video_normal_map.svg | 23 + .../design-system/src/icons/video_shaders.svg | 6 + packages/design-system/src/icons/vidu.svg | 24 + .../design-system/src/icons/voice_clone.svg | 3 + packages/design-system/src/icons/wan.svg | 13 + .../design-system/src/icons/wavespeed.svg | 12 + packages/shared-frontend-utils/package.json | 3 +- .../src/formatUtil.test.ts | 44 +- .../shared-frontend-utils/src/formatUtil.ts | 10 +- pnpm-lock.yaml | 72 ++ pnpm-workspace.yaml | 1 + src/components/common/BadgePill.test.ts | 89 +++ src/components/common/BadgePill.vue | 54 ++ src/components/common/SearchBoxV2.test.ts | 90 +++ src/components/common/SearchBoxV2.vue | 117 +++ src/components/common/TextTicker.test.ts | 122 +++ src/components/common/TextTicker.vue | 69 ++ src/components/common/TreeExplorerV2.vue | 113 +++ .../common/TreeExplorerV2Node.test.ts | 321 ++++++++ src/components/common/TreeExplorerV2Node.vue | 141 ++++ src/components/node/NodePreviewCard.vue | 143 ++++ src/components/node/NodePricingBadge.vue | 43 ++ src/components/node/NodeProviderBadge.vue | 26 + src/components/searchbox/NodeSearchBox.vue | 12 +- .../searchbox/NodeSearchBoxPopover.vue | 60 +- .../v2/NodeSearchCategorySidebar.test.ts | 260 +++++++ .../v2/NodeSearchCategorySidebar.vue | 132 ++++ .../v2/NodeSearchCategoryTreeNode.vue | 70 ++ .../searchbox/v2/NodeSearchContent.test.ts | 729 ++++++++++++++++++ .../searchbox/v2/NodeSearchContent.vue | 291 +++++++ .../searchbox/v2/NodeSearchFilterBar.test.ts | 80 ++ .../searchbox/v2/NodeSearchFilterBar.vue | 72 ++ .../searchbox/v2/NodeSearchFilterPanel.vue | 90 +++ .../searchbox/v2/NodeSearchInput.test.ts | 161 ++++ .../searchbox/v2/NodeSearchInput.vue | 145 ++++ .../searchbox/v2/NodeSearchListItem.vue | 135 ++++ .../searchbox/v2/__test__/testUtils.ts | 52 ++ .../tabs/NodeLibrarySidebarTabV2.test.ts | 132 ++++ .../sidebar/tabs/NodeLibrarySidebarTabV2.vue | 348 +++++++++ .../sidebar/tabs/SidebarTabTemplate.vue | 12 + .../tabs/nodeLibrary/AllNodesPanel.vue | 77 ++ .../tabs/nodeLibrary/CustomNodesPanel.vue | 63 ++ .../nodeLibrary/EssentialNodeCard.test.ts | 204 +++++ .../tabs/nodeLibrary/EssentialNodeCard.vue | 81 ++ .../nodeLibrary/EssentialNodesPanel.test.ts | 207 +++++ .../tabs/nodeLibrary/EssentialNodesPanel.vue | 109 +++ .../tabs/nodeLibrary/NodeDragPreview.vue | 69 ++ .../node/useNodeDragToCanvas.test.ts | 342 ++++++++ src/composables/node/useNodeDragToCanvas.ts | 116 +++ .../node/useNodePreviewAndDrag.test.ts | 179 +++++ src/composables/node/useNodePreviewAndDrag.ts | 149 ++++ src/composables/node/useNodePricing.test.ts | 379 ++++++++- src/composables/node/useNodePricing.ts | 230 ++++-- .../sidebarTabs/useNodeLibrarySidebarTab.ts | 21 +- src/lib/litegraph/src/LGraph.ts | 2 +- src/lib/litegraph/src/LGraphCanvas.ts | 3 + src/lib/litegraph/src/litegraph.ts | 3 +- src/locales/en/main.json | 17 + .../settings/constants/coreSettings.ts | 15 +- src/schemas/apiSchema.ts | 7 +- src/schemas/nodeDefSchema.ts | 5 +- src/scripts/api.ts | 1 + src/services/litegraphService.ts | 10 +- src/services/nodeOrganizationService.ts | 104 ++- src/stores/nodeDefStore.ts | 21 +- src/stores/workspace/searchBoxStore.test.ts | 4 +- src/stores/workspace/searchBoxStore.ts | 7 +- src/types/nodeOrganizationTypes.ts | 12 + src/types/nodeSource.test.ts | 46 ++ src/types/nodeSource.ts | 76 +- src/types/treeExplorerTypes.ts | 14 +- src/utils/categoryUtil.test.ts | 87 +++ src/utils/categoryUtil.ts | 73 ++ src/utils/litegraphUtil.ts | 11 +- 183 files changed, 7972 insertions(+), 127 deletions(-) create mode 100644 browser_tests/fixtures/components/ComfyNodeSearchBoxV2.ts create mode 100644 browser_tests/tests/nodeSearchBoxV2.spec.ts create mode 100644 packages/design-system/src/icons/bfl.svg create mode 100644 packages/design-system/src/icons/bria.svg create mode 100644 packages/design-system/src/icons/bytedance.svg create mode 100644 packages/design-system/src/icons/canny.svg create mode 100644 packages/design-system/src/icons/canny_to_image.svg create mode 100644 packages/design-system/src/icons/clip-text-encode.svg create mode 100644 packages/design-system/src/icons/compare_images.svg create mode 100644 packages/design-system/src/icons/compare_videos.svg create mode 100644 packages/design-system/src/icons/credits.svg create mode 100644 packages/design-system/src/icons/crop_video.svg create mode 100644 packages/design-system/src/icons/depth_to_image.svg create mode 100644 packages/design-system/src/icons/depth_to_video.svg create mode 100644 packages/design-system/src/icons/edit_image.svg create mode 100644 packages/design-system/src/icons/edit_video.svg create mode 100644 packages/design-system/src/icons/enhance.svg create mode 100644 packages/design-system/src/icons/enhance_3dmodel.svg create mode 100644 packages/design-system/src/icons/enhance_video.svg create mode 100644 packages/design-system/src/icons/gemini.svg create mode 100644 packages/design-system/src/icons/get-video-components.svg create mode 100644 packages/design-system/src/icons/grok.svg create mode 100644 packages/design-system/src/icons/hitpaw.svg create mode 100644 packages/design-system/src/icons/ideogram.svg create mode 100644 packages/design-system/src/icons/image-batch.svg create mode 100644 packages/design-system/src/icons/image-blur.svg create mode 100644 packages/design-system/src/icons/image-crop.svg create mode 100644 packages/design-system/src/icons/image-invert.svg create mode 100644 packages/design-system/src/icons/image-rotate.svg create mode 100644 packages/design-system/src/icons/image-scale.svg create mode 100644 packages/design-system/src/icons/image_captioning.svg create mode 100644 packages/design-system/src/icons/image_color_adjust.svg create mode 100644 packages/design-system/src/icons/image_compositor.svg create mode 100644 packages/design-system/src/icons/image_depth.svg create mode 100644 packages/design-system/src/icons/image_iterator.svg create mode 100644 packages/design-system/src/icons/image_normalmap.svg create mode 100644 packages/design-system/src/icons/image_pose.svg create mode 100644 packages/design-system/src/icons/image_shader.svg create mode 100644 packages/design-system/src/icons/image_to_image.svg create mode 100644 packages/design-system/src/icons/image_to_layers.svg create mode 100644 packages/design-system/src/icons/image_to_video.svg create mode 100644 packages/design-system/src/icons/inpaint_image.svg create mode 100644 packages/design-system/src/icons/inpaint_video.svg create mode 100644 packages/design-system/src/icons/kling-lip-sync-audio-to-video-node.svg create mode 100644 packages/design-system/src/icons/kling.svg create mode 100644 packages/design-system/src/icons/layers_to_image.svg create mode 100644 packages/design-system/src/icons/load-3-d.svg create mode 100644 packages/design-system/src/icons/load-audio.svg create mode 100644 packages/design-system/src/icons/load-image.svg create mode 100644 packages/design-system/src/icons/load-video.svg create mode 100644 packages/design-system/src/icons/lora-loader.svg create mode 100644 packages/design-system/src/icons/ltxv.svg create mode 100644 packages/design-system/src/icons/luma.svg create mode 100644 packages/design-system/src/icons/magnific.svg create mode 100644 packages/design-system/src/icons/meshy.svg create mode 100644 packages/design-system/src/icons/minimax.svg create mode 100644 packages/design-system/src/icons/moonvalley-marey.svg create mode 100644 packages/design-system/src/icons/music_generation.svg create mode 100644 packages/design-system/src/icons/open-ai-chat-node.svg create mode 100644 packages/design-system/src/icons/openai.svg create mode 100644 packages/design-system/src/icons/outpaint_image.svg create mode 100644 packages/design-system/src/icons/painter.svg create mode 100644 packages/design-system/src/icons/pixverse.svg create mode 100644 packages/design-system/src/icons/pose_to_image.svg create mode 100644 packages/design-system/src/icons/prompt_enhance.svg create mode 100644 packages/design-system/src/icons/recraft-remove-background-node.svg create mode 100644 packages/design-system/src/icons/recraft.svg create mode 100644 packages/design-system/src/icons/resize_video.svg create mode 100644 packages/design-system/src/icons/rodin.svg create mode 100644 packages/design-system/src/icons/rotate_video.svg create mode 100644 packages/design-system/src/icons/runway.svg create mode 100644 packages/design-system/src/icons/save-audio.svg create mode 100644 packages/design-system/src/icons/save-glb.svg create mode 100644 packages/design-system/src/icons/save-image.svg create mode 100644 packages/design-system/src/icons/save-video.svg create mode 100644 packages/design-system/src/icons/select_object.svg create mode 100644 packages/design-system/src/icons/sora.svg create mode 100644 packages/design-system/src/icons/stability-ai.svg create mode 100644 packages/design-system/src/icons/stability-text-to-audio.svg create mode 100644 packages/design-system/src/icons/stitch_videos.svg create mode 100644 packages/design-system/src/icons/subgraph-blueprint-canny-to-video-ltx-2-0.svg create mode 100644 packages/design-system/src/icons/subgraph-blueprint-pose-to-video-ltx-2-0.svg create mode 100644 packages/design-system/src/icons/tencent-image-to-model-node.svg create mode 100644 packages/design-system/src/icons/tencent-text-to-model-node.svg create mode 100644 packages/design-system/src/icons/tencent.svg create mode 100644 packages/design-system/src/icons/text_iterator.svg create mode 100644 packages/design-system/src/icons/text_to_image.svg create mode 100644 packages/design-system/src/icons/text_to_video.svg create mode 100644 packages/design-system/src/icons/topaz.svg create mode 100644 packages/design-system/src/icons/trim_video.svg create mode 100644 packages/design-system/src/icons/tripo.svg create mode 100644 packages/design-system/src/icons/vectorize.svg create mode 100644 packages/design-system/src/icons/veo.svg create mode 100644 packages/design-system/src/icons/video_canny.svg create mode 100644 packages/design-system/src/icons/video_captioning.svg create mode 100644 packages/design-system/src/icons/video_compositor.svg create mode 100644 packages/design-system/src/icons/video_depth.svg create mode 100644 packages/design-system/src/icons/video_normal_map.svg create mode 100644 packages/design-system/src/icons/video_shaders.svg create mode 100644 packages/design-system/src/icons/vidu.svg create mode 100644 packages/design-system/src/icons/voice_clone.svg create mode 100644 packages/design-system/src/icons/wan.svg create mode 100644 packages/design-system/src/icons/wavespeed.svg create mode 100644 src/components/common/BadgePill.test.ts create mode 100644 src/components/common/BadgePill.vue create mode 100644 src/components/common/SearchBoxV2.test.ts create mode 100644 src/components/common/SearchBoxV2.vue create mode 100644 src/components/common/TextTicker.test.ts create mode 100644 src/components/common/TextTicker.vue create mode 100644 src/components/common/TreeExplorerV2.vue create mode 100644 src/components/common/TreeExplorerV2Node.test.ts create mode 100644 src/components/common/TreeExplorerV2Node.vue create mode 100644 src/components/node/NodePreviewCard.vue create mode 100644 src/components/node/NodePricingBadge.vue create mode 100644 src/components/node/NodeProviderBadge.vue create mode 100644 src/components/searchbox/v2/NodeSearchCategorySidebar.test.ts create mode 100644 src/components/searchbox/v2/NodeSearchCategorySidebar.vue create mode 100644 src/components/searchbox/v2/NodeSearchCategoryTreeNode.vue create mode 100644 src/components/searchbox/v2/NodeSearchContent.test.ts create mode 100644 src/components/searchbox/v2/NodeSearchContent.vue create mode 100644 src/components/searchbox/v2/NodeSearchFilterBar.test.ts create mode 100644 src/components/searchbox/v2/NodeSearchFilterBar.vue create mode 100644 src/components/searchbox/v2/NodeSearchFilterPanel.vue create mode 100644 src/components/searchbox/v2/NodeSearchInput.test.ts create mode 100644 src/components/searchbox/v2/NodeSearchInput.vue create mode 100644 src/components/searchbox/v2/NodeSearchListItem.vue create mode 100644 src/components/searchbox/v2/__test__/testUtils.ts create mode 100644 src/components/sidebar/tabs/NodeLibrarySidebarTabV2.test.ts create mode 100644 src/components/sidebar/tabs/NodeLibrarySidebarTabV2.vue create mode 100644 src/components/sidebar/tabs/nodeLibrary/AllNodesPanel.vue create mode 100644 src/components/sidebar/tabs/nodeLibrary/CustomNodesPanel.vue create mode 100644 src/components/sidebar/tabs/nodeLibrary/EssentialNodeCard.test.ts create mode 100644 src/components/sidebar/tabs/nodeLibrary/EssentialNodeCard.vue create mode 100644 src/components/sidebar/tabs/nodeLibrary/EssentialNodesPanel.test.ts create mode 100644 src/components/sidebar/tabs/nodeLibrary/EssentialNodesPanel.vue create mode 100644 src/components/sidebar/tabs/nodeLibrary/NodeDragPreview.vue create mode 100644 src/composables/node/useNodeDragToCanvas.test.ts create mode 100644 src/composables/node/useNodeDragToCanvas.ts create mode 100644 src/composables/node/useNodePreviewAndDrag.test.ts create mode 100644 src/composables/node/useNodePreviewAndDrag.ts create mode 100644 src/utils/categoryUtil.test.ts diff --git a/.stylelintrc.json b/.stylelintrc.json index 71a1311ae5..26ce840f1e 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -52,7 +52,8 @@ "reference", "plugin", "custom-variant", - "utility" + "utility", + "source" ] } ], diff --git a/browser_tests/fixtures/ComfyPage.ts b/browser_tests/fixtures/ComfyPage.ts index 6439071639..9bd03386b4 100644 --- a/browser_tests/fixtures/ComfyPage.ts +++ b/browser_tests/fixtures/ComfyPage.ts @@ -14,6 +14,7 @@ import { ComfyTemplates } from '../helpers/templates' import { ComfyMouse } from './ComfyMouse' import { VueNodeHelpers } from './VueNodeHelpers' import { ComfyNodeSearchBox } from './components/ComfyNodeSearchBox' +import { ComfyNodeSearchBoxV2 } from './components/ComfyNodeSearchBoxV2' import { ContextMenu } from './components/ContextMenu' import { SettingDialog } from './components/SettingDialog' import { BottomPanel } from './components/BottomPanel' @@ -166,6 +167,7 @@ export class ComfyPage { // Components public readonly searchBox: ComfyNodeSearchBox + public readonly searchBoxV2: ComfyNodeSearchBoxV2 public readonly menu: ComfyMenu public readonly actionbar: ComfyActionbar public readonly templates: ComfyTemplates @@ -210,6 +212,7 @@ export class ComfyPage { this.workflowUploadInput = page.locator('#comfy-file-input') this.searchBox = new ComfyNodeSearchBox(page) + this.searchBoxV2 = new ComfyNodeSearchBoxV2(page) this.menu = new ComfyMenu(page) this.actionbar = new ComfyActionbar(page) this.templates = new ComfyTemplates(page) diff --git a/browser_tests/fixtures/components/ComfyNodeSearchBoxV2.ts b/browser_tests/fixtures/components/ComfyNodeSearchBoxV2.ts new file mode 100644 index 0000000000..64f6b9cebb --- /dev/null +++ b/browser_tests/fixtures/components/ComfyNodeSearchBoxV2.ts @@ -0,0 +1,29 @@ +import type { Locator, Page } from '@playwright/test' + +import type { ComfyPage } from '../ComfyPage' + +export class ComfyNodeSearchBoxV2 { + readonly dialog: Locator + readonly input: Locator + readonly results: Locator + readonly filterOptions: Locator + + constructor(readonly page: Page) { + this.dialog = page.getByRole('search') + this.input = this.dialog.locator('input[type="text"]') + this.results = this.dialog.getByTestId('result-item') + this.filterOptions = this.dialog.getByTestId('filter-option') + } + + categoryButton(categoryId: string): Locator { + return this.dialog.getByTestId(`category-${categoryId}`) + } + + filterBarButton(name: string): Locator { + return this.dialog.getByRole('button', { name }) + } + + async reload(comfyPage: ComfyPage) { + await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'default') + } +} diff --git a/browser_tests/tests/dialog.spec.ts b/browser_tests/tests/dialog.spec.ts index eed31cc354..f70a527e3d 100644 --- a/browser_tests/tests/dialog.spec.ts +++ b/browser_tests/tests/dialog.spec.ts @@ -37,7 +37,7 @@ test.describe('Load workflow warning', { tag: '@ui' }, () => { }) test('Does not report warning on undo/redo', async ({ comfyPage }) => { - await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'default') + await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'v1 (legacy)') await comfyPage.workflow.loadWorkflow('missing/missing_nodes') await comfyPage.page diff --git a/browser_tests/tests/groupNode.spec.ts b/browser_tests/tests/groupNode.spec.ts index 6af103c8fb..90234e110d 100644 --- a/browser_tests/tests/groupNode.spec.ts +++ b/browser_tests/tests/groupNode.spec.ts @@ -10,6 +10,7 @@ import type { NodeReference } from '../fixtures/utils/litegraphUtils' test.beforeEach(async ({ comfyPage }) => { await comfyPage.settings.setSetting('Comfy.UseNewMenu', 'Disabled') + await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'v1 (legacy)') }) test.describe('Group Node', { tag: '@node' }, () => { diff --git a/browser_tests/tests/nodeSearchBox.spec.ts b/browser_tests/tests/nodeSearchBox.spec.ts index 4b50ee3ca3..fc6d3ccb4f 100644 --- a/browser_tests/tests/nodeSearchBox.spec.ts +++ b/browser_tests/tests/nodeSearchBox.spec.ts @@ -18,7 +18,10 @@ test.describe('Node search box', { tag: '@node' }, () => { 'Comfy.LinkRelease.ActionShift', 'search box' ) - await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'default') + await comfyPage.settings.setSetting( + 'Comfy.NodeSearchBoxImpl', + 'v1 (legacy)' + ) }) test(`Can trigger on empty canvas double click`, async ({ comfyPage }) => { @@ -45,7 +48,10 @@ test.describe('Node search box', { tag: '@node' }, () => { await comfyPage.setup({ clearStorage: true }) // Simulate new user with 1.24.1+ installed version await comfyPage.settings.setSetting('Comfy.InstalledVersion', '1.24.1') - await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'default') + await comfyPage.settings.setSetting( + 'Comfy.NodeSearchBoxImpl', + 'v1 (legacy)' + ) // Don't set LinkRelease settings explicitly to test versioned defaults await comfyPage.canvasOps.disconnectEdge() @@ -285,7 +291,10 @@ test.describe('Release context menu', { tag: '@node' }, () => { 'Comfy.LinkRelease.ActionShift', 'search box' ) - await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'default') + await comfyPage.settings.setSetting( + 'Comfy.NodeSearchBoxImpl', + 'v1 (legacy)' + ) }) test( @@ -329,7 +338,10 @@ test.describe('Release context menu', { tag: '@node' }, () => { await comfyPage.setup({ clearStorage: true }) // Simulate existing user with pre-1.24.1 version await comfyPage.settings.setSetting('Comfy.InstalledVersion', '1.23.0') - await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'default') + await comfyPage.settings.setSetting( + 'Comfy.NodeSearchBoxImpl', + 'v1 (legacy)' + ) // Don't set LinkRelease settings explicitly to test versioned defaults await comfyPage.canvasOps.disconnectEdge() @@ -350,7 +362,10 @@ test.describe('Release context menu', { tag: '@node' }, () => { 'Comfy.LinkRelease.Action', 'context menu' ) - await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'default') + await comfyPage.settings.setSetting( + 'Comfy.NodeSearchBoxImpl', + 'v1 (legacy)' + ) await comfyPage.canvasOps.disconnectEdge() // Context menu should appear due to explicit setting, not search box diff --git a/browser_tests/tests/nodeSearchBoxV2.spec.ts b/browser_tests/tests/nodeSearchBoxV2.spec.ts new file mode 100644 index 0000000000..0c91963eed --- /dev/null +++ b/browser_tests/tests/nodeSearchBoxV2.spec.ts @@ -0,0 +1,149 @@ +import { + comfyExpect as expect, + comfyPageFixture as test +} from '../fixtures/ComfyPage' + +test.describe('Node search box V2', { tag: '@node' }, () => { + test.beforeEach(async ({ comfyPage }) => { + await comfyPage.settings.setSetting('Comfy.UseNewMenu', 'Disabled') + await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'default') + await comfyPage.settings.setSetting( + 'Comfy.LinkRelease.Action', + 'search box' + ) + await comfyPage.settings.setSetting( + 'Comfy.LinkRelease.ActionShift', + 'search box' + ) + await comfyPage.searchBoxV2.reload(comfyPage) + }) + + test('Can open search and add node', async ({ comfyPage }) => { + const { searchBoxV2 } = comfyPage + const initialCount = await comfyPage.nodeOps.getGraphNodesCount() + + await comfyPage.canvasOps.doubleClick() + await expect(searchBoxV2.input).toBeVisible() + + await searchBoxV2.input.fill('KSampler') + await expect(searchBoxV2.results.first()).toBeVisible() + + await comfyPage.page.keyboard.press('Enter') + await expect(searchBoxV2.input).not.toBeVisible() + + const newCount = await comfyPage.nodeOps.getGraphNodesCount() + expect(newCount).toBe(initialCount + 1) + }) + + test('Can add first default result with Enter', async ({ comfyPage }) => { + const { searchBoxV2 } = comfyPage + const initialCount = await comfyPage.nodeOps.getGraphNodesCount() + + await comfyPage.canvasOps.doubleClick() + await expect(searchBoxV2.input).toBeVisible() + + // Default results should be visible without typing + await expect(searchBoxV2.results.first()).toBeVisible() + + // Enter should add the first (selected) result + await comfyPage.page.keyboard.press('Enter') + await expect(searchBoxV2.input).not.toBeVisible() + + const newCount = await comfyPage.nodeOps.getGraphNodesCount() + expect(newCount).toBe(initialCount + 1) + }) + + test.describe('Category navigation', () => { + test('Favorites shows only bookmarked nodes', async ({ comfyPage }) => { + const { searchBoxV2 } = comfyPage + await comfyPage.settings.setSetting('Comfy.NodeLibrary.Bookmarks.V2', [ + 'KSampler' + ]) + await searchBoxV2.reload(comfyPage) + + await comfyPage.canvasOps.doubleClick() + await expect(searchBoxV2.input).toBeVisible() + + await searchBoxV2.categoryButton('favorites').click() + + await expect(searchBoxV2.results).toHaveCount(1) + await expect(searchBoxV2.results.first()).toContainText('KSampler') + }) + + test('Category filters results to matching nodes', async ({ + comfyPage + }) => { + const { searchBoxV2 } = comfyPage + + await comfyPage.canvasOps.doubleClick() + await expect(searchBoxV2.input).toBeVisible() + + await searchBoxV2.categoryButton('sampling').click() + + await expect(searchBoxV2.results.first()).toBeVisible() + const count = await searchBoxV2.results.count() + expect(count).toBeGreaterThan(0) + }) + }) + + test.describe('Filter workflow', () => { + test('Can filter by input type via filter bar', async ({ comfyPage }) => { + const { searchBoxV2 } = comfyPage + + await comfyPage.canvasOps.doubleClick() + await expect(searchBoxV2.input).toBeVisible() + + // Click "Input" filter chip in the filter bar + await searchBoxV2.filterBarButton('Input').click() + + // Filter options should appear + await expect(searchBoxV2.filterOptions.first()).toBeVisible() + + // Type to narrow and select MODEL + await searchBoxV2.input.fill('MODEL') + await searchBoxV2.filterOptions + .filter({ hasText: 'MODEL' }) + .first() + .click() + + // Filter chip should appear and results should be filtered + await expect( + searchBoxV2.dialog.getByText('Input:', { exact: false }).locator('..') + ).toContainText('MODEL') + await expect(searchBoxV2.results.first()).toBeVisible() + }) + }) + + test.describe('Keyboard navigation', () => { + test('Can navigate and select with keyboard', async ({ comfyPage }) => { + const { searchBoxV2 } = comfyPage + const initialCount = await comfyPage.nodeOps.getGraphNodesCount() + + await comfyPage.canvasOps.doubleClick() + await expect(searchBoxV2.input).toBeVisible() + + await searchBoxV2.input.fill('KSampler') + const results = searchBoxV2.results + await expect(results.first()).toBeVisible() + + // First result selected by default + await expect(results.first()).toHaveAttribute('aria-selected', 'true') + + // ArrowDown moves selection + await comfyPage.page.keyboard.press('ArrowDown') + await expect(results.nth(1)).toHaveAttribute('aria-selected', 'true') + await expect(results.first()).toHaveAttribute('aria-selected', 'false') + + // ArrowUp moves back + await comfyPage.page.keyboard.press('ArrowUp') + await expect(results.first()).toHaveAttribute('aria-selected', 'true') + + // Enter selects and adds node + await comfyPage.page.keyboard.press('Enter') + await expect(searchBoxV2.input).not.toBeVisible() + + const newCount = await comfyPage.nodeOps.getGraphNodesCount() + expect(newCount).toBe(initialCount + 1) + }) + }) +}) diff --git a/browser_tests/tests/recordAudio.spec.ts b/browser_tests/tests/recordAudio.spec.ts index 07d9c48081..c46a5168e6 100644 --- a/browser_tests/tests/recordAudio.spec.ts +++ b/browser_tests/tests/recordAudio.spec.ts @@ -4,6 +4,7 @@ import { comfyPageFixture as test } from '../fixtures/ComfyPage' test.beforeEach(async ({ comfyPage }) => { await comfyPage.settings.setSetting('Comfy.UseNewMenu', 'Disabled') + await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'v1 (legacy)') }) test.describe('Record Audio Node', { tag: '@screenshot' }, () => { diff --git a/browser_tests/tests/remoteWidgets.spec.ts b/browser_tests/tests/remoteWidgets.spec.ts index b09421bc68..e29f46ea2d 100644 --- a/browser_tests/tests/remoteWidgets.spec.ts +++ b/browser_tests/tests/remoteWidgets.spec.ts @@ -53,6 +53,10 @@ test.describe('Remote COMBO Widget', { tag: '@widget' }, () => { test.beforeEach(async ({ comfyPage }) => { await comfyPage.settings.setSetting('Comfy.UseNewMenu', 'Top') + await comfyPage.settings.setSetting( + 'Comfy.NodeSearchBoxImpl', + 'v1 (legacy)' + ) }) test.describe('Loading options', () => { diff --git a/browser_tests/tests/rightClickMenu.spec.ts-snapshots/right-click-node-collapsed-badge-chromium-linux.png b/browser_tests/tests/rightClickMenu.spec.ts-snapshots/right-click-node-collapsed-badge-chromium-linux.png index 97144d48273116e0b4111a5a7433ba07e89b1683..37ceaa2a90cb37fa34c2e1ba5e90c2175e1f7817 100644 GIT binary patch literal 91448 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%0D&H1A^WeRW zeL6*68I;YxV8kJ-%(FHPZ--S(1kJuqc)R|G3jm=lgirm*jfH_wdPRjF=IY(1p9Tif zEbhSCCDYqt$oJ`|WF)d;Sbzb8V1yGsqq z9b%#*Rsb;I#)rZa$0%$AS+;JqlTL&L{0E*66)|s~k^4~INT1B`hJIf7Oah$w?yZoM z+Ek&`g0G_oRgQd~+E#Z1GDn-Ar+5YtkOXQX?5Y3$^)oimB8>$RWM{$>;CZVOK3y#p zX_(d!u04V(9Q=?)zOd~OO^GN4c^t=r88TY23h)aEm5t39ZfA#<+J#`VTxEa<*cO=m zLck>rT`a5@aKk8YU$1{8@;1Di5QRX9xo#K32e`2tcD|AR4{@+zWMOn^c8&{;2An=- zF5iynwmnwOZVoG@VTzrB&~(Y&5PWi61Zq=xp6-3ToYQr5rA1jejV-&Yiy@K5z#ms& zBkUG+GdpbaN0~^9d@1M2|53VlzX#2L0Y}*N1g_4dp^Q15GT34cGM5Z^tN^(BO5Lt* z-NMUjcKUROUl;&fT*0Zj3y7bElI9#(4Pde0+PfALqkQQ*o2cqt-!3|ju zynA?E>cbpTm2cTuE2Eit_---jx%dRWcC8A)n%|cV#V>G%@m(8XYVJNQ{jv4W8v{M3 z*)gSO=zO>s12}fZYEFK?Obas$9C58nx3|5v(oih%4m#-OY?=@Ih%ap`aD>Uvh{YvHg$G&gxow|4r>@%-7L51?;6Yk=zJbZl z4p16KLXarHL~YOL_v>{*!pH7jXZhmlbAaK0M&Hj#zMthk-SXcC5cELs!s#%JJRfuG z)mxDp$kJ43$FCP&(J<@2njf=6@ELjU6+(xm^p{Rb&88_q;@E-tkGO1)-Bk>a%IGO} zm}t*z#WTRIiP_*eDNbacNW^O9tv>0RfJON%+&o3uB0vIvdg>{X6;Xc6g4)_Lhgspy zojY-75>r78lOPgI^Zii@V@+(ka~-mhlE>2DgP3+Gx9j%Jn{v&?^)Bf92;m~GTAXk1 z4qlVB@18*knG1cuU^PUP7oolZ%wUk!QEXASWy=}G|bfshCLpwMMmlY9JsIG{qg27QCscFsVCQoGe`hllx1?pqsaNj#Bo zYeF53<4$(KZ_|r^VjzEzb{Og^KxEQR5Z}3Lmszp>7Hd9`Vpd>b<*nF{bur*Gk&XIf z6(0h#JX`_w6iSc@5J?~y9Aggm0bCLcreH8y$+LgefOZCFf}OoR#DhK{E2T!>j*Ek~ z2Yj?6M|AZE<?P8wXrL@{b z8`_pZUN^=p2DhS9q7F(FFCvk5PQw<)M?1MTX{k*^>H;k>H8ytq>&;iMglARt^%D#% zDL>!s?l$yu9{*q^Tvx4!3pb{&RK>S}e3IwYxqM_4g7NI|0on5w(ussRg1V;|{w&Yd zo{J-Gv*m)@T;mQ_E%;*1{f5j>wv5d+&e=w0Ev?cw#xcEY6HS1%hErpL#HWJ4(cAbv zz8u!%wr3^RqOB3+S79ZWxw(rm!|GGJW3hX=M32OzlZ7X}DV=}YN#33AJ+rWro{{8D0+vd%xB!&@rZb8e7fBW(%E(qnw z4#8kLt+lJW`&y;|Ig41Zq-W^G>R4u%QjPPjgom=Zlj64kCc0%_>0ur z$b;^ZGOdU~EbxoP$N zh39aBSj1`B3eGHtrH1*wK{~+m?0vW9dtKO&xN1gngD&ljoQv`Vr)#Le-u;`obw8)j_&S-m6bee zM~>QS0TTBp#~=IL)06&}nMTC~-d%@D5%piHNp}Pr?Xv?5>VgvawN7l04XudP@aABA z0=t0X;@?j-o9WrZ!L4X+W(Y+g_hDil&WvuR0xXB2$j&%1lyiG%DE7_%gIp>k749LL zof&Nuip*gunHd>ZdUaV2m23xT9qR_T9bNAmsb<{Qk2bEHD+zyawrm^+G-1^XY8V9t z?g11H0%~u@-J_$UiRzV773%lwGta3HTY>zCQPj9QaDp*w6;LqX^Q5$UH=sK(7YdPw z?j$K8fplF=k)i3wGD4%k*!yE{38qr81dQg{Kl2-V5^qnQI~uxUUyghc& zjPR$sXr{j(j8=VeN@4ETi22>;JyY-9=MS!51>VV&c0w1-0{JKLB{3sKpB?4eY=PS0 zlqfJj{HizR4ATOp$IWed<~Mj8#ImfDir+ORTy2_E8x!oGytvKlNB-Xkc*IxqO?eE9 z?8ako-v3S{AvJZ%wNx|i)t*F`fQv&ZSXAbH7^oaSdDuqQBDzpNi}B1hZW8^a8J|kE zmv)NP#+uin7GC-I`Xa5du85cSESJ?u3aMqe=wWZOtnIf>u<{>TUR0&m1}@-Ki()YT z!sWXAPJ>c6&Zy|IQ7VFm)(ODjm-|Y`>Ll6rVebIvHZORc*?5GJI7uv?YRq}N~ z%yFpQap?P|{4FoH&lH;F%GP?xXPnp&|F+sMtUNIH{c_;d9_q@HW!W%UoWroU5B*CX zANCS69qd%h5wo(gUcTgwDFSrZW?KXU)|M7HUg2y4oDWNS?DbWgap03@!==5YWiMA0 z(sD<O7k zZJavKNm)$_lB4@h_L^*_S07#84k003zg0Z{5Bz@I4QOz)VLg?bd#oF11i1YOQyChg zFh{xbP5Uju01<4&Ngkd>c9N|K_zw*8(cwYrb0_x#z+tVpQ&}BqGr8|=nlH?~nu6=8 zvvZr{3mV6U_;{BR&Y_c(uxo_fE2R0|5=kEP25Do;Pc+guDg@(}F1Zq`6?YUCPfwnc z?xZ=BD#ZKN$R9i0h+bN>E;Zr(;Ut)3b~aYC5Lhc3fdzchGtXa-yZ>HTP@bu#K=cY4 ztY=8v(bdh#&W5Ma;sD+Ojx^*waB*@Xg69i3%Pu96o+9Gn_O`Yk#@+EZ0f#rBI2#K8 zk)8|B;c+?g_3I=cdhqfWZ(t7f{FCBtb@E*uY{aG z`*`S~HWiXq9*Hy?l79Be@%)7aw;vWTR(4r{Q$ZUsoE}SM#ir#|W zvk%RKM!FttK338N5)7>B-j^!N8~bu3Z6f1EEAxKPz>l+&QN4w&%_btWawL*PSZ z>1RXqQp>Np@;EreHuBi!xSlD*G80pV08cYRL$5AVPdGbJI!GcU&$b93TR#h8Pji%k zUcOdV88^nnYBOmq^9?6Ge9g@IZzhSD_&-ptgQuMH1o-7R&*`>QT{e=2WZmkF;Vf0N z^(yb67@4!3ANgSTP6lj06rT7c#50GI2xU3$QQX+DZ0u`qhmR_8<)L3LEG~vL22Q{< z(^`6`a5SAfiSU8|c-#QW0@j7Mq0S#krmhF9T^=VO%!%=z>fu~BB#K-ANXAdJb2x=@ z#%&Hiv{;CMLpTG2$WNR2NmZP^tFsez>&v-!`*99pFxZ}DT#`jW8lfY??!N30p(<=Y zaQ4vvoF(B5k*a(3@~-5TFt@)NZqNE00~h){F>ih0(6g^1A|nO=mqpjWa@8x{NVARw!`@|E&gi7b3kQ#HAVw&QwI7-UP%kOWc zX|`TmaMO9IeA@V66~|#aH`ClIxdeb6#4`M8VsHi;O8HOj0P%d1C-ciZw`{bxY{Eu znB4Nad|+jlGrdkbpk9Dxh+#UHKR8qaL<1uGjlbpn{}j&PIsb*_*D<3kmEh&);$o+Q z9*u(|D=8pw`O$dw{VEw9n7)*&o~}*JCp`7eoqJ%ii~0Lb#-*J?wje-@iD@4@Cd(DI z@w3DjMOfCcLC0Wkn=N4*>@73fy=MkhQ71_!l5dNqFqYoEd$*X_1j=3pgB_$1?$$Y+ z)gpzq;mRZ>x5iC#r0yw?V;s7c z?!LP7yS{sr*Xa~o6JqGJEy9`d2cRV*HFmO{kB<+YYW=wy3Tt$k4{|rCA;$Cz;5lL1 z2hW~O;wP{bFZ}-9@7g2*^^d*%(e1G?{NDyJlB-VkkpXcHU3kq%;?w<0=3L@ugVB-Z zt>W$@vy1FDSvE)RXFrfMt#(kyP&RJE5hf?k5?aLt@f?S}c4Sh9H{et%Ag;tv?WYkZ z_@fVJIBY}|kHvkxM70|5?)d?;lr`@U`)6+cc%azYGv$G2?8vV5RjQkq)z4!4;hsZ< z1&i`C;t61rE5bTbH}mA3AQr~xVOCbwm#g!+O_tK>@4I_@#edEERQ976aYm{K(^UbC zj{r}5l>2iXsKz~#LacKCr?;s|uUKMHaR>{Bir<~18S_3Jkrr_;`@zmD#St&v$zE)J zrxVyT|I+iWn?R`2pX+7I%MdK!M?LZ!vH2V^x)eSu zy1nhg)RQBJXjkf{b#l`RPO@d360J*BEs4~>Wb32vL!py+a5IN%mgZdprO8)bsqF=lWmIxxUx+EjjBm-tYT<-LGM! ze+S?1$8H_wxSj!<{QiQg)rkJ+8!)!~+8-hzm^=+jyJH z2m=wOK7lL+5Fun-dzUP}#C#{9L%O1w)e)q?tB}2Y(_JD(IRipguIA)h zyb9i@mGptC9B_;?kKS|&1v~{A*)26SLPSgZG6Ki@(T|&wj_N)@PBilGniE4=XfJr; z?4P(0uAGF8v9$tQ1PXc}*YLd&z8UZoW<>lfaGJCn{ysTQ+Qty|`JyWG}|AW$9n*c{xZP*2p>*e{%bAJhmkNy6pzI)jpE?9pNVsBao!$tKodi6bzqa|21{r(49kspG5RU5iEYeSNP&Ne%`hh*Yf zLvVefa+v6eZvS3-nys+&m73J<6 zU3a+a&osp>rATolMmnR~t!0{1nhc*FL$})TL@yG>k3aa_FEggWzMkwka^Jo41pbGp zC%X$VbZz!ie^Z@nvpL8S_ON`2nwWQTgr*u4=gIi(M#T-u6lCP+XuVE{%=*65xO&L_ zYOOY055o)0)a<^%1YZBLS=}|4A-ToirnnY6=4tBCDB&4n*Dtij6%4t zQzG1$NIPvDIKX}xx(TmYr2NP>oX>S(TRvo+kvzlmlWc5|q~DJU`mV+IODJ^0<2z@Z zAk1wzHkK*~5;@gQVYgwMb38b|XT9dJSMl>lA8$&DF#5T(V_LnRCg1X;s`P|JzplAZ zqiH)SsW#|cdBYw7p)}uP*{qk(8fcL)O`Q1d0$s4oR5Id~bBWj+ZjEL?qIxo@r|MtA z^&Z!r+5KEJkK>(!0?LN2#S-F@zzhM>Y+^IJJVC5(M}v$N*dASc61JaU=_kKyxNjENE2k|P zvY`$dW+-E80DFhd5lZfpDF)2*vY{z0U4)7W)DT))$&r!h^TB`>!`#a^WXts!W(!ce zLJ-;7PSt9yo1We{Y*{VBFqnYS^cZU{%n3e7C^R^r^YLLffF@Dw3r|POfxt&KU+0o? zAOviK&Z644SwCSk6MPVse6hp4(~2#$oSf;m!BHCGdwfWGc-Z&GOg zKyL&?pC(~d6_r!Bx0^PD{`Q#v=@BEs!kRxc+&2fuZ(#RS?+h;5X`i!J*&wWkrgoVA zTnN?EYoArN{;m$3t)==Jv4#WqS3=8P4w1DN33NefRe7mOtHU`2%m>a(`_b3&H9~3 zuM98bT<5D7>cdC}W$mcT5zJW*y&xd;z&d{SnVwa%L+%^E*??suh`?s)AXN7Vml`xAXnYA&7<}B9FR{6dDZgQ~ z2*$_R+1H=GTNfAT0;a#kXf;1K5}u`ctIodF1E?C3%%_j4Aw>kUDU7+bZk^i2%l&6i zE0N~2hnz~!ErtXH*9$mT?k*#~F z4W5^{Ew~{@m5h3CpK0OSt)xEsF=lmvu3nz7hZpF z(f3aNMg<%PT;Y5z&ioG_>M=0=NNr<26D)q-_T}TF@{tu-$=`+nss}dc5k(Apz*52& zfyD=V96{?;R|oNE5A946vt+LJLN|D!ys*5SuizOOhPvfhs9%`Km^ivCL!LGLBM>u8 z@!K!sAd_Dh5SG2hZku}{x(Il2_bwRFfEBjcty?yMDGg+DHE3RtwuHZYi5h8z$=<|l zyA54nhVHNm?8QbqXhi+z^F$Kfw>JzTm9L-eSOG_Ez{o9Ywtu1GARq0V?d|669`aox zms#MagBSDLFvdt$HVK>0*PP?mF>fx!U8}Pl0{v<+-SH&itpDZ)9RUcZg}DVPK;H<~JN5ph{u3uFdV8n)bDvV;?viI{_SYmIQNc!Hw_{>24HW2p+)$?wH4=UiZ@8{PJ$Mk{Fe zB7puxKF(lFGh$h$n&YvUTLzst5VZiTT{j;E25!@Ywck<%47Y%yK9M5mMo01xY{THK zY-;CW6#@>#p!uCB<|;@V{SL#AApn{n@N{jhV8A?OOW+3{aXs$e@{{xG7SeJB0sNM4 zV;JMG8XeIC`V^b__jA#h1?oo`8U!B!zk+@jO9z4K=cnm5yc-sQvu3&o+siSqiOKO5 zG&Nm;o%s6&4?;x=;y+OE4_Q_%gO6dcIy;E0zu#M>V_=vAVojDl0R866VR&?40hI*Z~7m*et1q@})B?_h*yb zTwO&;_@yL&C0ugvJ}FIqybxRDr|ZF!_%4c)BXu^h@&*K~K(gsg0S(^ddTu`JdtI9# zn1WH<^%w~GIg&0cF5XnDJBZQAXSi^op-eZfeY@jU7wX|Lpl@F>*i=OrUv9e!HgbQF zmVl|0g@py6h5)Cwvi|!0o6jcZBaDCU47>Q`p=OhSs}1B6<2*B*JXLHxJBdqJPrDt1 z{C*(b+9Oc2S*67pYZy(wAD3cnrLh>HP-8!TjIBeBCO}5)1^_rX;zG`gLar*njsc6O z$N4zX=m{9N#WwKShWfo=38Gu-FV7cfCyYTT5LsLHO-94Rux{Rg0h`<;9t?|8$1X8aOCMhM= zK&~lD)ip;~T&x>1)(&l&(rF7yj|EW+w)eelMN7eB_tdCtP-$mLuYWI7l+KKrDo-e* zY_S1&VyfI+aJOH#@^sO$$aVsO>6l#Rw|A5i-^m~(R~T}fZ3NFhPLmhdXk`)x8xL^$ z;GlX`J}roNeN1P)E+{y%U@uEY{8&L5E_rZ+C>QQ1|8-q9E{j$AeJ?E1r@phL(1WkZ zFtc&|DcXE@p({}A0jNySM(A_N@1LN-&auWqJ z`e{!)(NN>*{HjWBS{l}s!L{Z^9ve6&B(}LnvPn6>}Cc)D6Au1Zn}8QEX7SmO8lpx zzC0w&d_I!-TDo&J33nG$jxV#6C}Sji0vI1JZbvb@XkT-iSEEm$04wi~CJs`zNRLC?v(p76T!bR%`Or>IhBLRUf>Y2jTlP~@m zx>KmanWqw|;I0X_I3eQc>Q@HfSaP3*GzpfAN~{zxF8$^|g9Nd&B476><|-A(O;2GP zw=sYSUxcdB-Z36y2x>k2Nzc`hEDR<#DO-0c3VeP+`vv_n{Ui^*c$V z@H`DNg$YDx9$#c`z(tzqPc)@vNS1I?6bRTs>A$(Zb#3@z-R5MtVHLTBoAT&ANkuHA zW_(^74}pi51TGd4Dx~JYcWt_vfy6(hNzA&Uf5KI_Wt6#&LPt=KY)6EY(ubt8Laspc zbPqg7-~Td7;KW6TLxVU^2OW6-VpxIwt#}e_ul@IRt_s$(w@;d<*X^sxNueXiHuiti z2*2_i5Qozi*N#3og?Q~V0S7LpZ<1O4PSV*P5#M-J0=`)u+o^x6(BDJMykD36AnPJB z^|20>W;H6YTG3aBJC`BX9`13C5ha=?U*BqsMSpDV>^y{YA^5gsDq*qG>(mwQ#!T+B z&a!6sdHUETO`nU8DE7)y$m__85zFwYJPsqzbuo-6ZGJ7=!RFH&-?>hAa{=UqrKSC& zru@D1BmYv21Tl2u)A=1ZDW=uZy`Q`0q95(|r|v|&%`rpoV#;W+a(pA>8eKRhe;rVA zbNv-Q!k6n}KyDF}TSlNHLJKGcuOIxQuNXX87vN%Upr!qH+wgIR&th+zhOWA!NEY5V z4^bM+^C>ONLa}6_Qa+bOQ}A_pzqA2Zmo~{4Zm59`R%qa&6AP~jo?Q{_dj!5S&?Dd9 zI)jv7$KEUa2Q&e}uWGFdV_>Uzp2Pa+FP!|!LL!Q}Yx4`)e4!0g)ex>6W$@bA@$MUD zsg>c5rH?!LD~Fw)(WGJEN)31bsznrF2=!#Z#>JjNCSy6mmw0bYc{Lrz9dnx!w>B!? zy~Ao~pvogHYXmnlAfP>YGW7a7nK+n50eAv~+{(s@_%;^=IYS9ZiJoPFz+z@K-Q=tD zXg?Z?*_djSOC;}-MmpEbIVjv^8AC9-g0fvfWIgZqQqvzlQv%WQwyQ>L-&LEg<6_~k zZ&nz&qxCsPKcFa|FAIT7Hogd`6~OpyJskg029~88mcZiATDb7b*xmgI8028Z6aZ#D z?8jKYHtU}b!<+3 z86YIU$;^U=5QKNjj;Rp*J7bIXV-2~^#s>bcw`jv)A?A!b1KF^vPr=~|eg@SeM4`dJ zr1e%ynhJt!(h5l9at}E-xk;^ldQhhZy53jBkBV$+PNxvWX0OW;B>iEm-?N!s;pmvX zPK9o=nNJdqyd@+GZWrQf-$@W;_8iQEE#KMv!?K`??~+*A8v(Wm*oNP`dlv-K(0luZ z0cjLA956hF#+*VTxOoy9s3gnEk3f_MMHT$exeEY=T&;=?cpi|PNCnosz^d16Qr!uf zf5)mCfO|iG-bysfg9@7O^Jzp+$M?MyVw4oIwk~cy`*A~nD^f}-Z#|wT+^S8t>u3cS~+iS*1!={Tb0su_{X_y!a zK4s?-Gj_RyID0KMbi5X4*?_so#SFT&mt^07`6nxT(rNXganl{LYRl@5EwDZv0g4~p zfg4XI3RBXt{qIgtoj<-BtrZS;vgML*vo3jy_GsgDYz;9%W%gPso-r7g5Dti zIp>r)!_yijI+dDN@7cADe-4btZ$7s!^D`K4{1cBSBA^%Ic$PVQ>Ukn`SjL#??hofg zKeXQ$*uF>f;%lP+(;-+zjG`Z8K(ThN#}clT2|itLDewR{a_A$#x*>e(YfH;|*~|V# znEpU>2b8HV$P&y8pwU1h5XSw#2b<<*W@lVxEB1yFuL^wFU5Ys$)9sFr5?&%{dE)7^ zSccggVmLmGV4tF@_E_Y2g4yaxy)#m{;NH0ZR*d;(n>5G4Y|%uh?VmBhq8m9$=N0-5 zSznY7n=t++@NG3o6+NXtBaJMP7ITqCD*(EVp3OQvCfIl4gim@*K_Cpc=+TU06!-fD0v*N})`SbVMF1|RLB!ALlG$D<6`FAcm20lq7 z32cBx(8|)1#K~DsP7Y{+kO8%_*ZKWBco^>NK&LmkK6*ab0D2f0!=p(7;E|D)H21rIoXiajn}a$uyS%7=Rq8v z9N5`ZccK__4}UUdUn8bw=hxXVhZ1ciP4;K54<*DtUH@HB^HRuTknF$%(D@GD|DGIj zp0l4G)r)9>xqC5a(ULkJL>Z{5QR@(`f>v@EQq3ACfKdi^_U}e4NeA$jwp~dt-Bs4s zmg)Vh`0)sc?*MlC3H~+ufGJ|Z&@#+Xt!lPa|Fg!y*zo+!ytvn43Cs&|EGTi9p7Q-+ z^C(`-*YzBl9fFQR(XRRdTJ4ig#lbPtDrU()HJ4pue=sy(#WL?`snvMwpv6jt4mVd> z@`ZEQbQLZ2>2D4aZ)xMEBUNoX{+!kz{CH2uBO8VGgBl5%jxlS>xlL4BcFo4@qjy@I z5o?F{dx4<(=w|sr*@*r*QIz0beovVxAS47NR-v=IF#W+A!2iZ!X^?($Si`XN}h99xP&mSZ!(<6qDikX9D%=sLi27)b^rQ?9O*~; zL~G^vQ^}{=%oyBkA5AIA^^FVmmI|ypYjn!#rmcExtaF%<6gT!b%+FAdS*Td-H;}Ge z<7!plKM3rI?ade1mVR@kVkvJ`u&DUHKb>}47R z%0uf>n?H@E8^h>2xz2$^){i%5WW@9;uk#m?DVqr1rGpS6MFsztA_9}=M6`%}T*S!)bgyOIzS$gqd&^tDkWV%>Zq6lT zPAW<(Y9haDoLeHwPkd6>-FdQ*uBDLuQPi~6i^+!W)nL1y_a0th25q#8Uirn&Rh4lk z1N^MsF5zFUJB2J|JVM*zVMJ)ZCW(6t1DyO@O}u6ur*;MQcXf4px0e=pb*!8>(g;gG z{McCvi1Qqrw@)9>xH`xEIZ>r~AiL|;gNT5Dp3};+s=kdAd|Ms7x_8v$r%NIPE9{mR z-V1$jIXFD~gx)j#(`-vuO6g_4S4B&sfp;`d)_(JL^~{h8?$>|+m0H^~FD{v`*ll&P zckedA19sW#82X!i)y}MQk!}lWDOSH-tO{r4)%w-Ch7Y`h_x~v9KPVvqJBM{V;ok|z z1Dj;WxCPuWWT4�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 { test.beforeEach(async ({ comfyPage }) => { await comfyPage.settings.setSetting('Comfy.UseNewMenu', 'Disabled') + await comfyPage.settings.setSetting( + 'Comfy.NodeSearchBoxImpl', + 'v1 (legacy)' + ) }) // Helper to get subgraph slot count diff --git a/browser_tests/tests/subgraphSearchAliases.spec.ts b/browser_tests/tests/subgraphSearchAliases.spec.ts index a17e56dfd3..ee1bbbb488 100644 --- a/browser_tests/tests/subgraphSearchAliases.spec.ts +++ b/browser_tests/tests/subgraphSearchAliases.spec.ts @@ -54,7 +54,10 @@ async function searchAndExpectResult( test.describe('Subgraph Search Aliases', { tag: ['@subgraph'] }, () => { test.beforeEach(async ({ comfyPage }) => { await comfyPage.settings.setSetting('Comfy.UseNewMenu', 'Top') - await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'default') + await comfyPage.settings.setSetting( + 'Comfy.NodeSearchBoxImpl', + 'v1 (legacy)' + ) }) test('Can set search aliases on subgraph and find via search', async ({ diff --git a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts index ab41c27858..1819edde34 100644 --- a/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts +++ b/browser_tests/tests/vueNodes/interactions/links/linkInteraction.spec.ts @@ -102,6 +102,7 @@ test.describe('Vue Node Link Interaction', { tag: '@screenshot' }, () => { test.beforeEach(async ({ comfyPage }) => { await comfyPage.settings.setSetting('Comfy.UseNewMenu', 'Top') await comfyPage.settings.setSetting('Comfy.VueNodes.Enabled', true) + await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'default') // await comfyPage.setup() await comfyPage.workflow.loadWorkflow('vueNodes/simple-triple') await comfyPage.vueNodes.waitForNodes() @@ -928,7 +929,10 @@ test.describe('Vue Node Link Interaction', { tag: '@screenshot' }, () => { 'Comfy.LinkRelease.ActionShift', 'context menu' ) - await comfyPage.settings.setSetting('Comfy.NodeSearchBoxImpl', 'default') + await comfyPage.settings.setSetting( + 'Comfy.NodeSearchBoxImpl', + 'v1 (legacy)' + ) const samplerNode = ( await comfyPage.nodeOps.getNodeRefsByType('KSampler') @@ -994,6 +998,10 @@ test.describe('Vue Node Link Interaction', { tag: '@screenshot' }, () => { 'Comfy.LinkRelease.ActionShift', 'search box' ) + await comfyPage.settings.setSetting( + 'Comfy.NodeSearchBoxImpl', + 'v1 (legacy)' + ) const samplerNode = ( await comfyPage.nodeOps.getNodeRefsByType('KSampler') @@ -1048,6 +1056,11 @@ test.describe('Vue Node Link Interaction', { tag: '@screenshot' }, () => { comfyPage, comfyMouse }) => { + await comfyPage.settings.setSetting( + 'Comfy.NodeSearchBoxImpl', + 'v1 (legacy)' + ) + // Setup workflow with a KSampler node await comfyPage.command.executeCommand('Comfy.NewBlankWorkflow') await comfyPage.nodeOps.waitForGraphNodes(0) diff --git a/packages/design-system/src/css/style.css b/packages/design-system/src/css/style.css index 88487f0a18..08ee3570c7 100644 --- a/packages/design-system/src/css/style.css +++ b/packages/design-system/src/css/style.css @@ -12,6 +12,12 @@ icon-sets: from-folder(comfy, './packages/design-system/src/icons'); } +/* Safelist dynamic comfy icons for node library folders */ +@source inline("icon-[comfy--{ai-model,bfl,bria,bytedance,credits,extensions-blocks,file-output,gemini,grok,hitpaw,ideogram,image-ai-edit,kling,ltxv,luma,magnific,mask,meshy,minimax,moonvalley-marey,node,openai,pin,pixverse,play,recraft,rodin,runway,sora,stability-ai,template,tencent,topaz,tripo,veo,vidu,wan,wavespeed,workflow}]"); + +/* Safelist dynamic comfy icons for essential nodes (kebab-case of node names) */ +@source inline("icon-[comfy--{load-image,save-image,load-video,save-video,load-3-d,save-glb,image-batch,image-crop,image-scale,image-rotate,image-blur,image-invert,canny,recraft-remove-background-node,kling-lip-sync-audio-to-video-node,load-audio,save-audio,stability-text-to-audio,lora-loader,clip-text-encode,get-video-components,tencent-text-to-model-node,tencent-image-to-model-node,open-ai-chat-node,subgraph-blueprint-canny-to-video-ltx-2-0,subgraph-blueprint-pose-to-video-ltx-2-0}]"); + @custom-variant touch (@media (hover: none)); @theme { diff --git a/packages/design-system/src/icons/bfl.svg b/packages/design-system/src/icons/bfl.svg new file mode 100644 index 0000000000..74ce48cc94 --- /dev/null +++ b/packages/design-system/src/icons/bfl.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/design-system/src/icons/bria.svg b/packages/design-system/src/icons/bria.svg new file mode 100644 index 0000000000..20d6e66aa8 --- /dev/null +++ b/packages/design-system/src/icons/bria.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/bytedance.svg b/packages/design-system/src/icons/bytedance.svg new file mode 100644 index 0000000000..54309f7ccd --- /dev/null +++ b/packages/design-system/src/icons/bytedance.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/canny.svg b/packages/design-system/src/icons/canny.svg new file mode 100644 index 0000000000..6bae945a26 --- /dev/null +++ b/packages/design-system/src/icons/canny.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/design-system/src/icons/canny_to_image.svg b/packages/design-system/src/icons/canny_to_image.svg new file mode 100644 index 0000000000..aaeb32d051 --- /dev/null +++ b/packages/design-system/src/icons/canny_to_image.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/clip-text-encode.svg b/packages/design-system/src/icons/clip-text-encode.svg new file mode 100644 index 0000000000..ea6fb966b2 --- /dev/null +++ b/packages/design-system/src/icons/clip-text-encode.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/compare_images.svg b/packages/design-system/src/icons/compare_images.svg new file mode 100644 index 0000000000..a1d8ad0e5a --- /dev/null +++ b/packages/design-system/src/icons/compare_images.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/compare_videos.svg b/packages/design-system/src/icons/compare_videos.svg new file mode 100644 index 0000000000..75ca914356 --- /dev/null +++ b/packages/design-system/src/icons/compare_videos.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/credits.svg b/packages/design-system/src/icons/credits.svg new file mode 100644 index 0000000000..f806cddeed --- /dev/null +++ b/packages/design-system/src/icons/credits.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/crop_video.svg b/packages/design-system/src/icons/crop_video.svg new file mode 100644 index 0000000000..d2d5508a01 --- /dev/null +++ b/packages/design-system/src/icons/crop_video.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/depth_to_image.svg b/packages/design-system/src/icons/depth_to_image.svg new file mode 100644 index 0000000000..d46ea269db --- /dev/null +++ b/packages/design-system/src/icons/depth_to_image.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/depth_to_video.svg b/packages/design-system/src/icons/depth_to_video.svg new file mode 100644 index 0000000000..9edb63ecc2 --- /dev/null +++ b/packages/design-system/src/icons/depth_to_video.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/edit_image.svg b/packages/design-system/src/icons/edit_image.svg new file mode 100644 index 0000000000..6ccc96753e --- /dev/null +++ b/packages/design-system/src/icons/edit_image.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/edit_video.svg b/packages/design-system/src/icons/edit_video.svg new file mode 100644 index 0000000000..ecb0acb01e --- /dev/null +++ b/packages/design-system/src/icons/edit_video.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/enhance.svg b/packages/design-system/src/icons/enhance.svg new file mode 100644 index 0000000000..3a3534c2bd --- /dev/null +++ b/packages/design-system/src/icons/enhance.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/enhance_3dmodel.svg b/packages/design-system/src/icons/enhance_3dmodel.svg new file mode 100644 index 0000000000..e5d03491c3 --- /dev/null +++ b/packages/design-system/src/icons/enhance_3dmodel.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/enhance_video.svg b/packages/design-system/src/icons/enhance_video.svg new file mode 100644 index 0000000000..93ccad2cfa --- /dev/null +++ b/packages/design-system/src/icons/enhance_video.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/gemini.svg b/packages/design-system/src/icons/gemini.svg new file mode 100644 index 0000000000..d2f0fc7928 --- /dev/null +++ b/packages/design-system/src/icons/gemini.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/get-video-components.svg b/packages/design-system/src/icons/get-video-components.svg new file mode 100644 index 0000000000..7bca20f5cd --- /dev/null +++ b/packages/design-system/src/icons/get-video-components.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/grok.svg b/packages/design-system/src/icons/grok.svg new file mode 100644 index 0000000000..ac0e596fb9 --- /dev/null +++ b/packages/design-system/src/icons/grok.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/design-system/src/icons/hitpaw.svg b/packages/design-system/src/icons/hitpaw.svg new file mode 100644 index 0000000000..7785527403 --- /dev/null +++ b/packages/design-system/src/icons/hitpaw.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/design-system/src/icons/ideogram.svg b/packages/design-system/src/icons/ideogram.svg new file mode 100644 index 0000000000..a4b77cb475 --- /dev/null +++ b/packages/design-system/src/icons/ideogram.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/image-batch.svg b/packages/design-system/src/icons/image-batch.svg new file mode 100644 index 0000000000..6c2c3913ba --- /dev/null +++ b/packages/design-system/src/icons/image-batch.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/image-blur.svg b/packages/design-system/src/icons/image-blur.svg new file mode 100644 index 0000000000..a59f889931 --- /dev/null +++ b/packages/design-system/src/icons/image-blur.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/design-system/src/icons/image-crop.svg b/packages/design-system/src/icons/image-crop.svg new file mode 100644 index 0000000000..d0cddd2399 --- /dev/null +++ b/packages/design-system/src/icons/image-crop.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/image-invert.svg b/packages/design-system/src/icons/image-invert.svg new file mode 100644 index 0000000000..98087cac3d --- /dev/null +++ b/packages/design-system/src/icons/image-invert.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/image-rotate.svg b/packages/design-system/src/icons/image-rotate.svg new file mode 100644 index 0000000000..d565dc6403 --- /dev/null +++ b/packages/design-system/src/icons/image-rotate.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/image-scale.svg b/packages/design-system/src/icons/image-scale.svg new file mode 100644 index 0000000000..09160d715f --- /dev/null +++ b/packages/design-system/src/icons/image-scale.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/image_captioning.svg b/packages/design-system/src/icons/image_captioning.svg new file mode 100644 index 0000000000..38892dac13 --- /dev/null +++ b/packages/design-system/src/icons/image_captioning.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/image_color_adjust.svg b/packages/design-system/src/icons/image_color_adjust.svg new file mode 100644 index 0000000000..4ba7fa877e --- /dev/null +++ b/packages/design-system/src/icons/image_color_adjust.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/image_compositor.svg b/packages/design-system/src/icons/image_compositor.svg new file mode 100644 index 0000000000..8d06c0427b --- /dev/null +++ b/packages/design-system/src/icons/image_compositor.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/image_depth.svg b/packages/design-system/src/icons/image_depth.svg new file mode 100644 index 0000000000..076915dd87 --- /dev/null +++ b/packages/design-system/src/icons/image_depth.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/image_iterator.svg b/packages/design-system/src/icons/image_iterator.svg new file mode 100644 index 0000000000..6b53161d64 --- /dev/null +++ b/packages/design-system/src/icons/image_iterator.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/image_normalmap.svg b/packages/design-system/src/icons/image_normalmap.svg new file mode 100644 index 0000000000..177107bdc2 --- /dev/null +++ b/packages/design-system/src/icons/image_normalmap.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/image_pose.svg b/packages/design-system/src/icons/image_pose.svg new file mode 100644 index 0000000000..bdf23df3b0 --- /dev/null +++ b/packages/design-system/src/icons/image_pose.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/design-system/src/icons/image_shader.svg b/packages/design-system/src/icons/image_shader.svg new file mode 100644 index 0000000000..10d623411c --- /dev/null +++ b/packages/design-system/src/icons/image_shader.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/image_to_image.svg b/packages/design-system/src/icons/image_to_image.svg new file mode 100644 index 0000000000..6491f5362b --- /dev/null +++ b/packages/design-system/src/icons/image_to_image.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/image_to_layers.svg b/packages/design-system/src/icons/image_to_layers.svg new file mode 100644 index 0000000000..43d9d2ac02 --- /dev/null +++ b/packages/design-system/src/icons/image_to_layers.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/design-system/src/icons/image_to_video.svg b/packages/design-system/src/icons/image_to_video.svg new file mode 100644 index 0000000000..0052f1d308 --- /dev/null +++ b/packages/design-system/src/icons/image_to_video.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/inpaint_image.svg b/packages/design-system/src/icons/inpaint_image.svg new file mode 100644 index 0000000000..b3959fa2b3 --- /dev/null +++ b/packages/design-system/src/icons/inpaint_image.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/inpaint_video.svg b/packages/design-system/src/icons/inpaint_video.svg new file mode 100644 index 0000000000..965bb3fcbd --- /dev/null +++ b/packages/design-system/src/icons/inpaint_video.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/kling-lip-sync-audio-to-video-node.svg b/packages/design-system/src/icons/kling-lip-sync-audio-to-video-node.svg new file mode 100644 index 0000000000..4a74ae4845 --- /dev/null +++ b/packages/design-system/src/icons/kling-lip-sync-audio-to-video-node.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/kling.svg b/packages/design-system/src/icons/kling.svg new file mode 100644 index 0000000000..32dc0f806e --- /dev/null +++ b/packages/design-system/src/icons/kling.svg @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/layers_to_image.svg b/packages/design-system/src/icons/layers_to_image.svg new file mode 100644 index 0000000000..3e9dfb3a4b --- /dev/null +++ b/packages/design-system/src/icons/layers_to_image.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/design-system/src/icons/load-3-d.svg b/packages/design-system/src/icons/load-3-d.svg new file mode 100644 index 0000000000..2c6ea830e0 --- /dev/null +++ b/packages/design-system/src/icons/load-3-d.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/load-audio.svg b/packages/design-system/src/icons/load-audio.svg new file mode 100644 index 0000000000..8276d1a80f --- /dev/null +++ b/packages/design-system/src/icons/load-audio.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/load-image.svg b/packages/design-system/src/icons/load-image.svg new file mode 100644 index 0000000000..8da07a860d --- /dev/null +++ b/packages/design-system/src/icons/load-image.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/load-video.svg b/packages/design-system/src/icons/load-video.svg new file mode 100644 index 0000000000..17cfbc6c13 --- /dev/null +++ b/packages/design-system/src/icons/load-video.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/lora-loader.svg b/packages/design-system/src/icons/lora-loader.svg new file mode 100644 index 0000000000..d96f7d7a6e --- /dev/null +++ b/packages/design-system/src/icons/lora-loader.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/ltxv.svg b/packages/design-system/src/icons/ltxv.svg new file mode 100644 index 0000000000..0f2db5f5e1 --- /dev/null +++ b/packages/design-system/src/icons/ltxv.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/design-system/src/icons/luma.svg b/packages/design-system/src/icons/luma.svg new file mode 100644 index 0000000000..a124becca8 --- /dev/null +++ b/packages/design-system/src/icons/luma.svg @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/magnific.svg b/packages/design-system/src/icons/magnific.svg new file mode 100644 index 0000000000..67d06535d6 --- /dev/null +++ b/packages/design-system/src/icons/magnific.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/meshy.svg b/packages/design-system/src/icons/meshy.svg new file mode 100644 index 0000000000..e0bdc68ff1 --- /dev/null +++ b/packages/design-system/src/icons/meshy.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/minimax.svg b/packages/design-system/src/icons/minimax.svg new file mode 100644 index 0000000000..a72b1c52a6 --- /dev/null +++ b/packages/design-system/src/icons/minimax.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/moonvalley-marey.svg b/packages/design-system/src/icons/moonvalley-marey.svg new file mode 100644 index 0000000000..f8201735f8 --- /dev/null +++ b/packages/design-system/src/icons/moonvalley-marey.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/music_generation.svg b/packages/design-system/src/icons/music_generation.svg new file mode 100644 index 0000000000..9df20c85f8 --- /dev/null +++ b/packages/design-system/src/icons/music_generation.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/design-system/src/icons/open-ai-chat-node.svg b/packages/design-system/src/icons/open-ai-chat-node.svg new file mode 100644 index 0000000000..48b44236ab --- /dev/null +++ b/packages/design-system/src/icons/open-ai-chat-node.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/openai.svg b/packages/design-system/src/icons/openai.svg new file mode 100644 index 0000000000..ec77e07300 --- /dev/null +++ b/packages/design-system/src/icons/openai.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/design-system/src/icons/outpaint_image.svg b/packages/design-system/src/icons/outpaint_image.svg new file mode 100644 index 0000000000..03e603f506 --- /dev/null +++ b/packages/design-system/src/icons/outpaint_image.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/painter.svg b/packages/design-system/src/icons/painter.svg new file mode 100644 index 0000000000..2557a7d85e --- /dev/null +++ b/packages/design-system/src/icons/painter.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/pixverse.svg b/packages/design-system/src/icons/pixverse.svg new file mode 100644 index 0000000000..5fcad5cd88 --- /dev/null +++ b/packages/design-system/src/icons/pixverse.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/pose_to_image.svg b/packages/design-system/src/icons/pose_to_image.svg new file mode 100644 index 0000000000..05dc681f7d --- /dev/null +++ b/packages/design-system/src/icons/pose_to_image.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/prompt_enhance.svg b/packages/design-system/src/icons/prompt_enhance.svg new file mode 100644 index 0000000000..e1265b9347 --- /dev/null +++ b/packages/design-system/src/icons/prompt_enhance.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/recraft-remove-background-node.svg b/packages/design-system/src/icons/recraft-remove-background-node.svg new file mode 100644 index 0000000000..51497b57c9 --- /dev/null +++ b/packages/design-system/src/icons/recraft-remove-background-node.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/design-system/src/icons/recraft.svg b/packages/design-system/src/icons/recraft.svg new file mode 100644 index 0000000000..ff93cb8403 --- /dev/null +++ b/packages/design-system/src/icons/recraft.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/design-system/src/icons/resize_video.svg b/packages/design-system/src/icons/resize_video.svg new file mode 100644 index 0000000000..fe2b45be98 --- /dev/null +++ b/packages/design-system/src/icons/resize_video.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/design-system/src/icons/rodin.svg b/packages/design-system/src/icons/rodin.svg new file mode 100644 index 0000000000..f628f41bfe --- /dev/null +++ b/packages/design-system/src/icons/rodin.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/rotate_video.svg b/packages/design-system/src/icons/rotate_video.svg new file mode 100644 index 0000000000..8c257ac9e2 --- /dev/null +++ b/packages/design-system/src/icons/rotate_video.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/runway.svg b/packages/design-system/src/icons/runway.svg new file mode 100644 index 0000000000..6cc20d7498 --- /dev/null +++ b/packages/design-system/src/icons/runway.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/design-system/src/icons/save-audio.svg b/packages/design-system/src/icons/save-audio.svg new file mode 100644 index 0000000000..07360f8ab5 --- /dev/null +++ b/packages/design-system/src/icons/save-audio.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/save-glb.svg b/packages/design-system/src/icons/save-glb.svg new file mode 100644 index 0000000000..aa25867173 --- /dev/null +++ b/packages/design-system/src/icons/save-glb.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/save-image.svg b/packages/design-system/src/icons/save-image.svg new file mode 100644 index 0000000000..f137b72425 --- /dev/null +++ b/packages/design-system/src/icons/save-image.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/save-video.svg b/packages/design-system/src/icons/save-video.svg new file mode 100644 index 0000000000..edf324add6 --- /dev/null +++ b/packages/design-system/src/icons/save-video.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/select_object.svg b/packages/design-system/src/icons/select_object.svg new file mode 100644 index 0000000000..6f9532bcec --- /dev/null +++ b/packages/design-system/src/icons/select_object.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/design-system/src/icons/sora.svg b/packages/design-system/src/icons/sora.svg new file mode 100644 index 0000000000..5d2c8b4967 --- /dev/null +++ b/packages/design-system/src/icons/sora.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/packages/design-system/src/icons/stability-ai.svg b/packages/design-system/src/icons/stability-ai.svg new file mode 100644 index 0000000000..c84cae68ed --- /dev/null +++ b/packages/design-system/src/icons/stability-ai.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/stability-text-to-audio.svg b/packages/design-system/src/icons/stability-text-to-audio.svg new file mode 100644 index 0000000000..d642ece211 --- /dev/null +++ b/packages/design-system/src/icons/stability-text-to-audio.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/stitch_videos.svg b/packages/design-system/src/icons/stitch_videos.svg new file mode 100644 index 0000000000..0396bb1f6c --- /dev/null +++ b/packages/design-system/src/icons/stitch_videos.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/subgraph-blueprint-canny-to-video-ltx-2-0.svg b/packages/design-system/src/icons/subgraph-blueprint-canny-to-video-ltx-2-0.svg new file mode 100644 index 0000000000..f3f654b75b --- /dev/null +++ b/packages/design-system/src/icons/subgraph-blueprint-canny-to-video-ltx-2-0.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/subgraph-blueprint-pose-to-video-ltx-2-0.svg b/packages/design-system/src/icons/subgraph-blueprint-pose-to-video-ltx-2-0.svg new file mode 100644 index 0000000000..cfdaa8630e --- /dev/null +++ b/packages/design-system/src/icons/subgraph-blueprint-pose-to-video-ltx-2-0.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/tencent-image-to-model-node.svg b/packages/design-system/src/icons/tencent-image-to-model-node.svg new file mode 100644 index 0000000000..d723246bf7 --- /dev/null +++ b/packages/design-system/src/icons/tencent-image-to-model-node.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/tencent-text-to-model-node.svg b/packages/design-system/src/icons/tencent-text-to-model-node.svg new file mode 100644 index 0000000000..43fa9f0b25 --- /dev/null +++ b/packages/design-system/src/icons/tencent-text-to-model-node.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/tencent.svg b/packages/design-system/src/icons/tencent.svg new file mode 100644 index 0000000000..7eaa231218 --- /dev/null +++ b/packages/design-system/src/icons/tencent.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/text_iterator.svg b/packages/design-system/src/icons/text_iterator.svg new file mode 100644 index 0000000000..4b835d17cd --- /dev/null +++ b/packages/design-system/src/icons/text_iterator.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/text_to_image.svg b/packages/design-system/src/icons/text_to_image.svg new file mode 100644 index 0000000000..d4c61c765f --- /dev/null +++ b/packages/design-system/src/icons/text_to_image.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/text_to_video.svg b/packages/design-system/src/icons/text_to_video.svg new file mode 100644 index 0000000000..88ccdb9d18 --- /dev/null +++ b/packages/design-system/src/icons/text_to_video.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/topaz.svg b/packages/design-system/src/icons/topaz.svg new file mode 100644 index 0000000000..f83e03ebcd --- /dev/null +++ b/packages/design-system/src/icons/topaz.svg @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/packages/design-system/src/icons/trim_video.svg b/packages/design-system/src/icons/trim_video.svg new file mode 100644 index 0000000000..b8d842251e --- /dev/null +++ b/packages/design-system/src/icons/trim_video.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/packages/design-system/src/icons/tripo.svg b/packages/design-system/src/icons/tripo.svg new file mode 100644 index 0000000000..8de6a38c4f --- /dev/null +++ b/packages/design-system/src/icons/tripo.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/vectorize.svg b/packages/design-system/src/icons/vectorize.svg new file mode 100644 index 0000000000..33fe18a847 --- /dev/null +++ b/packages/design-system/src/icons/vectorize.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/veo.svg b/packages/design-system/src/icons/veo.svg new file mode 100644 index 0000000000..c92e4c632b --- /dev/null +++ b/packages/design-system/src/icons/veo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/video_canny.svg b/packages/design-system/src/icons/video_canny.svg new file mode 100644 index 0000000000..4ecc9cc066 --- /dev/null +++ b/packages/design-system/src/icons/video_canny.svg @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/packages/design-system/src/icons/video_captioning.svg b/packages/design-system/src/icons/video_captioning.svg new file mode 100644 index 0000000000..ce63fe0774 --- /dev/null +++ b/packages/design-system/src/icons/video_captioning.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/video_compositor.svg b/packages/design-system/src/icons/video_compositor.svg new file mode 100644 index 0000000000..7b2bc2659b --- /dev/null +++ b/packages/design-system/src/icons/video_compositor.svg @@ -0,0 +1,4 @@ + + + + diff --git a/packages/design-system/src/icons/video_depth.svg b/packages/design-system/src/icons/video_depth.svg new file mode 100644 index 0000000000..c169d21654 --- /dev/null +++ b/packages/design-system/src/icons/video_depth.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/video_normal_map.svg b/packages/design-system/src/icons/video_normal_map.svg new file mode 100644 index 0000000000..5fc4283699 --- /dev/null +++ b/packages/design-system/src/icons/video_normal_map.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/video_shaders.svg b/packages/design-system/src/icons/video_shaders.svg new file mode 100644 index 0000000000..8d8d7bc1de --- /dev/null +++ b/packages/design-system/src/icons/video_shaders.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/packages/design-system/src/icons/vidu.svg b/packages/design-system/src/icons/vidu.svg new file mode 100644 index 0000000000..3000b25bf7 --- /dev/null +++ b/packages/design-system/src/icons/vidu.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/voice_clone.svg b/packages/design-system/src/icons/voice_clone.svg new file mode 100644 index 0000000000..83b8062884 --- /dev/null +++ b/packages/design-system/src/icons/voice_clone.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/design-system/src/icons/wan.svg b/packages/design-system/src/icons/wan.svg new file mode 100644 index 0000000000..ed9b8c6d2a --- /dev/null +++ b/packages/design-system/src/icons/wan.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/packages/design-system/src/icons/wavespeed.svg b/packages/design-system/src/icons/wavespeed.svg new file mode 100644 index 0000000000..d04d8365b5 --- /dev/null +++ b/packages/design-system/src/icons/wavespeed.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/packages/shared-frontend-utils/package.json b/packages/shared-frontend-utils/package.json index 0a9d947abb..aa18c7a940 100644 --- a/packages/shared-frontend-utils/package.json +++ b/packages/shared-frontend-utils/package.json @@ -13,7 +13,8 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "axios": "catalog:" + "axios": "catalog:", + "dompurify": "catalog:" }, "devDependencies": { "typescript": "catalog:" diff --git a/packages/shared-frontend-utils/src/formatUtil.test.ts b/packages/shared-frontend-utils/src/formatUtil.test.ts index 75d8b8db23..9b793fe910 100644 --- a/packages/shared-frontend-utils/src/formatUtil.test.ts +++ b/packages/shared-frontend-utils/src/formatUtil.test.ts @@ -1,6 +1,10 @@ import { describe, expect, it } from 'vitest' -import { getMediaTypeFromFilename, truncateFilename } from './formatUtil' +import { + getMediaTypeFromFilename, + highlightQuery, + truncateFilename +} from './formatUtil' describe('formatUtil', () => { describe('truncateFilename', () => { @@ -142,4 +146,42 @@ describe('formatUtil', () => { }) }) }) + + describe('highlightQuery', () => { + it('should return text unchanged when query is empty', () => { + expect(highlightQuery('Hello World', '')).toBe('Hello World') + }) + + it('should wrap matching text in highlight span', () => { + const result = highlightQuery('Hello World', 'World') + expect(result).toBe('Hello World') + }) + + it('should be case-insensitive', () => { + const result = highlightQuery('Hello World', 'hello') + expect(result).toBe('Hello World') + }) + + it('should sanitize text by default', () => { + const result = highlightQuery('', 'alert') + expect(result).not.toContain(' diff --git a/src/components/common/SearchBoxV2.test.ts b/src/components/common/SearchBoxV2.test.ts new file mode 100644 index 0000000000..dfb2feaaf9 --- /dev/null +++ b/src/components/common/SearchBoxV2.test.ts @@ -0,0 +1,90 @@ +import { mount } from '@vue/test-utils' +import { describe, expect, it, vi } from 'vitest' +import { createI18n } from 'vue-i18n' + +import SearchBoxV2 from './SearchBoxV2.vue' + +vi.mock('@vueuse/core', () => ({ + watchDebounced: vi.fn(() => vi.fn()) +})) + +describe('SearchBoxV2', () => { + const i18n = createI18n({ + legacy: false, + locale: 'en', + messages: { + en: { + g: { + clear: 'Clear', + searchPlaceholder: 'Search...' + } + } + } + }) + + function mountComponent(props = {}) { + return mount(SearchBoxV2, { + global: { + plugins: [i18n], + stubs: { + ComboboxRoot: { + template: '
' + }, + ComboboxAnchor: { + template: '
' + }, + ComboboxInput: { + template: + '', + props: ['placeholder', 'modelValue', 'autoFocus'] + } + } + }, + props: { + modelValue: '', + ...props + } + }) + } + + it('uses i18n placeholder when no placeholder prop provided', () => { + const wrapper = mountComponent() + const input = wrapper.find('input') + expect(input.attributes('placeholder')).toBe('Search...') + }) + + it('uses custom placeholder when provided', () => { + const wrapper = mountComponent({ + placeholder: 'Custom placeholder' + }) + const input = wrapper.find('input') + expect(input.attributes('placeholder')).toBe('Custom placeholder') + }) + + it('shows search icon when search term is empty', () => { + const wrapper = mountComponent({ modelValue: '' }) + expect(wrapper.find('i.icon-\\[lucide--search\\]').exists()).toBe(true) + }) + + it('shows clear button when search term is not empty', () => { + const wrapper = mountComponent({ modelValue: 'test' }) + expect(wrapper.find('button').exists()).toBe(true) + }) + + it('clears search term when clear button is clicked', async () => { + const wrapper = mountComponent({ modelValue: 'test' }) + const clearButton = wrapper.find('button') + await clearButton.trigger('click') + expect(wrapper.emitted('update:modelValue')?.[0]).toEqual(['']) + }) + + it('applies large size classes when size is lg', () => { + const wrapper = mountComponent({ size: 'lg' }) + expect(wrapper.html()).toContain('size-5') + }) + + it('applies medium size classes when size is md', () => { + const wrapper = mountComponent({ size: 'md' }) + expect(wrapper.html()).toContain('size-4') + }) +}) diff --git a/src/components/common/SearchBoxV2.vue b/src/components/common/SearchBoxV2.vue new file mode 100644 index 0000000000..82998501d3 --- /dev/null +++ b/src/components/common/SearchBoxV2.vue @@ -0,0 +1,117 @@ + + + diff --git a/src/components/common/TextTicker.test.ts b/src/components/common/TextTicker.test.ts new file mode 100644 index 0000000000..0d94b84b40 --- /dev/null +++ b/src/components/common/TextTicker.test.ts @@ -0,0 +1,122 @@ +import { mount } from '@vue/test-utils' +import { nextTick } from 'vue' +import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest' + +import TextTicker from './TextTicker.vue' + +function mockScrollWidth(el: HTMLElement, scrollWidth: number) { + Object.defineProperty(el, 'scrollWidth', { + value: scrollWidth, + configurable: true + }) +} + +describe(TextTicker, () => { + let rafCallbacks: ((time: number) => void)[] + let wrapper: ReturnType + + beforeEach(() => { + vi.useFakeTimers() + rafCallbacks = [] + vi.spyOn(window, 'requestAnimationFrame').mockImplementation((cb) => { + rafCallbacks.push(cb) + return rafCallbacks.length + }) + vi.spyOn(window, 'cancelAnimationFrame').mockImplementation(() => {}) + }) + + afterEach(() => { + wrapper?.unmount() + vi.useRealTimers() + vi.restoreAllMocks() + }) + + it('renders slot content', () => { + wrapper = mount(TextTicker, { + slots: { default: 'Hello World' } + }) + expect(wrapper.text()).toBe('Hello World') + }) + + it('scrolls on hover after delay', async () => { + wrapper = mount(TextTicker, { + slots: { default: 'Very long text that overflows' }, + props: { speed: 100 } + }) + + const el = wrapper.element as HTMLElement + mockScrollWidth(el, 300) + + await nextTick() + await wrapper.trigger('mouseenter') + await nextTick() + + expect(rafCallbacks.length).toBe(0) + + vi.advanceTimersByTime(350) + await nextTick() + expect(rafCallbacks.length).toBeGreaterThan(0) + + rafCallbacks[0](performance.now() + 500) + expect(el.scrollLeft).toBeGreaterThan(0) + }) + + it('cancels delayed scroll on mouse leave before delay elapses', async () => { + wrapper = mount(TextTicker, { + slots: { default: 'Very long text that overflows' }, + props: { speed: 100 } + }) + + mockScrollWidth(wrapper.element as HTMLElement, 300) + + await nextTick() + await wrapper.trigger('mouseenter') + await nextTick() + + vi.advanceTimersByTime(200) + await wrapper.trigger('mouseleave') + await nextTick() + + vi.advanceTimersByTime(350) + await nextTick() + expect(rafCallbacks.length).toBe(0) + }) + + it('resets scroll position on mouse leave', async () => { + wrapper = mount(TextTicker, { + slots: { default: 'Very long text that overflows' }, + props: { speed: 100 } + }) + + const el = wrapper.element as HTMLElement + mockScrollWidth(el, 300) + + await nextTick() + await wrapper.trigger('mouseenter') + await nextTick() + vi.advanceTimersByTime(350) + await nextTick() + + rafCallbacks[0](performance.now() + 500) + expect(el.scrollLeft).toBeGreaterThan(0) + + await wrapper.trigger('mouseleave') + await nextTick() + + expect(el.scrollLeft).toBe(0) + }) + + it('does not scroll when content fits', async () => { + wrapper = mount(TextTicker, { + slots: { default: 'Short' } + }) + + await nextTick() + await wrapper.trigger('mouseenter') + await nextTick() + vi.advanceTimersByTime(350) + await nextTick() + + expect(rafCallbacks.length).toBe(0) + }) +}) diff --git a/src/components/common/TextTicker.vue b/src/components/common/TextTicker.vue new file mode 100644 index 0000000000..057a910667 --- /dev/null +++ b/src/components/common/TextTicker.vue @@ -0,0 +1,69 @@ + + + diff --git a/src/components/common/TreeExplorerV2.vue b/src/components/common/TreeExplorerV2.vue new file mode 100644 index 0000000000..6350f02b57 --- /dev/null +++ b/src/components/common/TreeExplorerV2.vue @@ -0,0 +1,113 @@ + + + diff --git a/src/components/common/TreeExplorerV2Node.test.ts b/src/components/common/TreeExplorerV2Node.test.ts new file mode 100644 index 0000000000..3ef9c7bd33 --- /dev/null +++ b/src/components/common/TreeExplorerV2Node.test.ts @@ -0,0 +1,321 @@ +import { mount } from '@vue/test-utils' +import type { FlattenedItem } from 'reka-ui' +import { ref } from 'vue' +import { describe, expect, it, vi } from 'vitest' + +import type { ComfyNodeDefImpl } from '@/stores/nodeDefStore' +import type { RenderedTreeExplorerNode } from '@/types/treeExplorerTypes' +import { InjectKeyContextMenuNode } from '@/types/treeExplorerTypes' + +import TreeExplorerV2Node from './TreeExplorerV2Node.vue' + +vi.mock('@/platform/settings/settingStore', () => ({ + useSettingStore: () => ({ + get: vi.fn().mockReturnValue('left') + }) +})) + +vi.mock('@/components/node/NodePreviewCard.vue', () => ({ + default: { template: '
' } +})) + +const mockStartDrag = vi.fn() +const mockHandleNativeDrop = vi.fn() + +vi.mock('@/composables/node/useNodeDragToCanvas', () => ({ + useNodeDragToCanvas: () => ({ + startDrag: mockStartDrag, + handleNativeDrop: mockHandleNativeDrop + }) +})) + +describe('TreeExplorerV2Node', () => { + function createMockItem( + type: 'node' | 'folder', + overrides: Record = {} + ): FlattenedItem> { + const value = { + key: 'test-key', + label: 'Test Label', + type, + icon: 'pi pi-folder', + totalLeaves: 5, + ...overrides + } as RenderedTreeExplorerNode + return { + _id: 'test-id', + index: 0, + value, + level: 1, + hasChildren: type === 'folder', + bind: { value, level: 1 } + } + } + + function createTreeItemStub() { + const handleToggle = vi.fn() + const handleSelect = vi.fn() + return { + handleToggle, + handleSelect, + stub: { + template: `
`, + setup() { + return { handleToggle, handleSelect } + } + } + } + } + + function mountComponent( + props: Record = {}, + options: { + provide?: Record + treeItemStub?: ReturnType + } = {} + ) { + const treeItemStub = options.treeItemStub ?? createTreeItemStub() + return { + wrapper: mount(TreeExplorerV2Node, { + global: { + stubs: { + TreeItem: treeItemStub.stub, + ContextMenuTrigger: { + name: 'ContextMenuTrigger', + template: '
' + }, + Teleport: { template: '
' } + }, + provide: { + ...options.provide + } + }, + props: { + item: createMockItem('node'), + ...props + } + }), + treeItemStub + } + } + + describe('handleClick', () => { + it('emits nodeClick event when clicked', async () => { + const { wrapper } = mountComponent({ + item: createMockItem('node') + }) + + const nodeDiv = wrapper.find('div.group\\/tree-node') + await nodeDiv.trigger('click') + + expect(wrapper.emitted('nodeClick')).toBeTruthy() + expect(wrapper.emitted('nodeClick')?.[0]?.[0]).toMatchObject({ + type: 'node', + label: 'Test Label' + }) + }) + + it('calls handleToggle for folder items', async () => { + const treeItemStub = createTreeItemStub() + const { wrapper } = mountComponent( + { item: createMockItem('folder') }, + { treeItemStub } + ) + + const folderDiv = wrapper.find('div.group\\/tree-node') + await folderDiv.trigger('click') + + expect(wrapper.emitted('nodeClick')).toBeTruthy() + expect(treeItemStub.handleToggle).toHaveBeenCalled() + }) + + it('does not call handleToggle for node items', async () => { + const treeItemStub = createTreeItemStub() + const { wrapper } = mountComponent( + { item: createMockItem('node') }, + { treeItemStub } + ) + + const nodeDiv = wrapper.find('div.group\\/tree-node') + await nodeDiv.trigger('click') + + expect(wrapper.emitted('nodeClick')).toBeTruthy() + expect(treeItemStub.handleToggle).not.toHaveBeenCalled() + }) + }) + + describe('context menu', () => { + it('renders ContextMenuTrigger when showContextMenu is true for nodes', () => { + const { wrapper } = mountComponent({ + item: createMockItem('node'), + showContextMenu: true + }) + + expect( + wrapper.find('[data-testid="context-menu-trigger"]').exists() + ).toBe(true) + }) + + it('does not render ContextMenuTrigger for folder items', () => { + const { wrapper } = mountComponent({ + item: createMockItem('folder') + }) + + expect( + wrapper.find('[data-testid="context-menu-trigger"]').exists() + ).toBe(false) + }) + + it('sets contextMenuNode when contextmenu event is triggered', async () => { + const contextMenuNode = ref(null) + const nodeItem = createMockItem('node') + + const { wrapper } = mountComponent( + { + item: nodeItem, + showContextMenu: true + }, + { + provide: { + [InjectKeyContextMenuNode as symbol]: contextMenuNode + } + } + ) + + const nodeDiv = wrapper.find('div.group\\/tree-node') + await nodeDiv.trigger('contextmenu') + + expect(contextMenuNode.value).toEqual(nodeItem.value) + }) + }) + + describe('rendering', () => { + it('renders node icon for node type', () => { + const { wrapper } = mountComponent({ + item: createMockItem('node') + }) + + expect(wrapper.find('i.icon-\\[comfy--node\\]').exists()).toBe(true) + }) + + it('renders folder icon for folder type', () => { + const { wrapper } = mountComponent({ + item: createMockItem('folder', { icon: 'icon-[lucide--folder]' }) + }) + + expect(wrapper.find('i.icon-\\[lucide--folder\\]').exists()).toBe(true) + }) + + it('renders label text', () => { + const { wrapper } = mountComponent({ + item: createMockItem('node', { label: 'My Node' }) + }) + + expect(wrapper.text()).toContain('My Node') + }) + + it('renders chevron for folder with children', () => { + const { wrapper } = mountComponent({ + item: { + ...createMockItem('folder'), + hasChildren: true + } + }) + + expect(wrapper.find('i.icon-\\[lucide--chevron-down\\]').exists()).toBe( + true + ) + }) + }) + + describe('drag and drop', () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + it('sets draggable attribute on node items', () => { + const { wrapper } = mountComponent({ + item: createMockItem('node') + }) + + const nodeDiv = wrapper.find('div.group\\/tree-node') + expect(nodeDiv.attributes('draggable')).toBe('true') + }) + + it('does not set draggable on folder items', () => { + const { wrapper } = mountComponent({ + item: createMockItem('folder') + }) + + const folderDiv = wrapper.find('div.group\\/tree-node') + expect(folderDiv.attributes('draggable')).toBeUndefined() + }) + + it('calls startDrag with native mode on dragstart', async () => { + const mockData = { name: 'TestNode' } + const { wrapper } = mountComponent({ + item: createMockItem('node', { data: mockData }) + }) + + const nodeDiv = wrapper.find('div.group\\/tree-node') + await nodeDiv.trigger('dragstart') + + expect(mockStartDrag).toHaveBeenCalledWith(mockData, 'native') + }) + + it('does not call startDrag for folder items on dragstart', async () => { + const { wrapper } = mountComponent({ + item: createMockItem('folder') + }) + + const folderDiv = wrapper.find('div.group\\/tree-node') + await folderDiv.trigger('dragstart') + + expect(mockStartDrag).not.toHaveBeenCalled() + }) + + it('calls handleNativeDrop on dragend with drop coordinates', async () => { + const mockData = { name: 'TestNode' } + const { wrapper } = mountComponent({ + item: createMockItem('node', { data: mockData }) + }) + + const nodeDiv = wrapper.find('div.group\\/tree-node') + + await nodeDiv.trigger('dragstart') + + const dragEndEvent = new DragEvent('dragend', { bubbles: true }) + Object.defineProperty(dragEndEvent, 'clientX', { value: 100 }) + Object.defineProperty(dragEndEvent, 'clientY', { value: 200 }) + + await nodeDiv.element.dispatchEvent(dragEndEvent) + await wrapper.vm.$nextTick() + + expect(mockHandleNativeDrop).toHaveBeenCalledWith(100, 200) + }) + + it('calls handleNativeDrop regardless of dropEffect', async () => { + const mockData = { name: 'TestNode' } + const { wrapper } = mountComponent({ + item: createMockItem('node', { data: mockData }) + }) + + const nodeDiv = wrapper.find('div.group\\/tree-node') + + await nodeDiv.trigger('dragstart') + mockHandleNativeDrop.mockClear() + + const dragEndEvent = new DragEvent('dragend', { bubbles: true }) + Object.defineProperty(dragEndEvent, 'clientX', { value: 300 }) + Object.defineProperty(dragEndEvent, 'clientY', { value: 400 }) + Object.defineProperty(dragEndEvent, 'dataTransfer', { + value: { dropEffect: 'none' } + }) + + await nodeDiv.element.dispatchEvent(dragEndEvent) + await wrapper.vm.$nextTick() + + expect(mockHandleNativeDrop).toHaveBeenCalledWith(300, 400) + }) + }) +}) diff --git a/src/components/common/TreeExplorerV2Node.vue b/src/components/common/TreeExplorerV2Node.vue new file mode 100644 index 0000000000..6291a4b2f6 --- /dev/null +++ b/src/components/common/TreeExplorerV2Node.vue @@ -0,0 +1,141 @@ + + + diff --git a/src/components/node/NodePreviewCard.vue b/src/components/node/NodePreviewCard.vue new file mode 100644 index 0000000000..437803ab24 --- /dev/null +++ b/src/components/node/NodePreviewCard.vue @@ -0,0 +1,143 @@ + + + diff --git a/src/components/node/NodePricingBadge.vue b/src/components/node/NodePricingBadge.vue new file mode 100644 index 0000000000..74f63499d3 --- /dev/null +++ b/src/components/node/NodePricingBadge.vue @@ -0,0 +1,43 @@ + + + diff --git a/src/components/node/NodeProviderBadge.vue b/src/components/node/NodeProviderBadge.vue new file mode 100644 index 0000000000..fa8fe19894 --- /dev/null +++ b/src/components/node/NodeProviderBadge.vue @@ -0,0 +1,26 @@ + + + diff --git a/src/components/searchbox/NodeSearchBox.vue b/src/components/searchbox/NodeSearchBox.vue index fcf63b1eb0..747f829cc0 100644 --- a/src/components/searchbox/NodeSearchBox.vue +++ b/src/components/searchbox/NodeSearchBox.vue @@ -5,7 +5,7 @@
{ debouncedTrackSearch(query) } -const emit = defineEmits(['addFilter', 'removeFilter', 'addNode']) +const emit = defineEmits<{ + addFilter: [filter: FuseFilterWithValue] + removeFilter: [filter: FuseFilterWithValue] + addNode: [nodeDef: ComfyNodeDefImpl, dragEvent?: MouseEvent] +}>() // Track node selection and emit addNode event -const onAddNode = (nodeDef: ComfyNodeDefImpl) => { +function onAddNode(nodeDef: ComfyNodeDefImpl, event?: MouseEvent) { telemetry?.trackNodeSearchResultSelected({ node_type: nodeDef.name, last_query: currentQuery.value }) - emit('addNode', nodeDef) + emit('addNode', nodeDef, event) } let inputElement: HTMLInputElement | null = null diff --git a/src/components/searchbox/NodeSearchBoxPopover.vue b/src/components/searchbox/NodeSearchBoxPopover.vue index d043d78364..20f0fa97f7 100644 --- a/src/components/searchbox/NodeSearchBoxPopover.vue +++ b/src/components/searchbox/NodeSearchBoxPopover.vue @@ -6,10 +6,13 @@ :dismissable-mask="dismissable" :pt="{ root: { - class: 'invisible-dialog-root', - role: 'search' + class: useSearchBoxV2 + ? 'w-4/5 min-w-[32rem] max-w-[56rem] border-0 bg-transparent mt-[10vh] max-md:w-[95%] max-md:min-w-0 overflow-visible' + : 'invisible-dialog-root' + }, + mask: { + class: useSearchBoxV2 ? 'items-start' : 'node-search-box-dialog-mask' }, - mask: { class: 'node-search-box-dialog-mask' }, transition: { enterFromClass: 'opacity-0 scale-75', // 100ms is the duration of the transition in the dialog component @@ -21,7 +24,24 @@ @hide="clearFilters" >