Skip to content

refactor(frontend): extract shared primitives and remove duplicated ui clones#14042

Open
tarciorodrigues wants to merge 8 commits into
release-1.11.0from
refactor/le-1735-wp1
Open

refactor(frontend): extract shared primitives and remove duplicated ui clones#14042
tarciorodrigues wants to merge 8 commits into
release-1.11.0from
refactor/le-1735-wp1

Conversation

@tarciorodrigues

@tarciorodrigues tarciorodrigues commented Jul 13, 2026

Copy link
Copy Markdown
Member

Why

LE-1735 Tier A componentization — work package 1. The frontend accumulated exact and near-miss clones of UI primitives and state logic: a full copy of the select primitive, a minimal dialog clone, three hand-rolled empty states, repeated copy-to-clipboard state, and a global-variable delete confirmation living under a misleading generic path. This PR removes that duplication with behavior-preserving moves only — one concern per commit, each trivially revertible.

What

  • Rename the delete-confirmation wrapper to GlobalVariableDeleteConfirmation and relocate it to components/core/globalVariableDeleteConfirmation/; both prod consumers and the jest mock repointed.
  • Add shared/hooks/use-copy-to-clipboard.ts as the canonical copy/isCopied hook and adopt it in useMcpServer. The remaining call sites with the same inline pattern are left for a follow-up to keep this PR mechanical.
  • Add components/ui/empty-state.tsx as a compound component and recompose the three existing empty states on it, keeping their exact classes. Deviation from the ticket letter: compound API for upstream shadcn parity instead of the flat-props shape.
  • Merge select-custom.tsx into select.tsx: variant="plain" on SelectTrigger/SelectItem, SelectContentWithoutPortal moved verbatim, spacing compensated at the 4 call sites, clone deleted; 7 prod consumers and 2 test mocks repointed.
  • Merge dialog-with-no-close.tsx into dialog.tsx as DialogContentPlain. Deviation from the ticket letter: the suggested boolean-prop merge was not possible — dialog.tsx already ships hideCloseButton, and the clone is a structurally different minimal dialog whose prop-merge would repaint baseModal app-wide; moved verbatim instead and aliased at the 2 consumers.

Net effect: about 255 LOC of clones deleted; no exported symbol renamed without its consumers repointed.

Tests

  • make format_frontend and make test_frontend green — 444 suites / 5361 tests.
  • Targeted suites on every touched surface green after mock repointing: inputGlobalComponent 13/13, select consumers 53/53, dialog consumers 72/72, useMcpServer 8/8, KnowledgeBaseEmptyState 6/6.
  • Dead-export check: git grep of every removed or moved symbol returns zero hits.
  • Manual smoke in dark and light: global-variable delete confirmation from a node secret field, folder options menu with keyboard navigation and ESC, node toolbar menu via the moved SelectContentWithoutPortal, playground session menu, plain dialogs including baseModal, MCP Server JSON copy. Console compared base vs branch on the identical click path: the same 6 pre-existing errors, zero new ones.
  • Before/after screenshots in light and dark below.

Note

Knowledge-base empty state, Deployments page and Assistant panel are covered by unit tests only — not reachable in a dev session without destroying user data or enabling feature flags.

Refs LE-1735

Screenshots

Global variable delete confirmation

Light

Before

before-globalvar-delete-dialog-light

After

after-globalvar-delete-dialog-light

Dark

Before

before-globalvar-delete-dialog-dark

After

after-globalvar-delete-dialog-dark

Node toolbar select

Light

Before

before-node-toolbar-select-light

After

after-node-toolbar-select-light

Dark

Before

before-node-toolbar-select-dark

After

after-node-toolbar-select-dark

Folder options menu

Light

Before

before-folder-select-light

After

after-folder-select-light

Dark

Before

before-folder-select-dark

After

after-folder-select-dark

MCP Server JSON copy

Light

Before

before-mcp-json-light

After

after-mcp-json-light

Dark

Before

before-mcp-json-dark

After

after-mcp-json-dark

Summary by CodeRabbit

  • New Features

    • Added consistent plain styling for dropdown menus across the application.
    • Added reusable empty-state layouts for assistant, deployments, and knowledge-base screens.
    • Added a shared clipboard-copy interaction with temporary success feedback.
    • Added a streamlined dialog layout for confirmation and modal interactions.
  • Bug Fixes

    • Improved global-variable deletion confirmations with clearer naming and consistent behavior.

…er to GlobalVariableDeleteConfirmation

The shared/components/delete-confirmation-modal.tsx sounds generic but is
a global-variables-specific wrapper around modals/deleteConfirmationModal.
Rename it honestly and relocate it next to the global-variables feature
under components/core/globalVariableDeleteConfirmation. No behavior
change; both consumers and the jest mock repointed.
The copyToClipboard + isCopied + reset-timeout pattern is reimplemented
across several components. Extract it to shared/hooks/use-copy-to-clipboard
(canonical copy/isCopied shape, resetDelay defaulting to the current 1s)
and adopt it in useMcpServer first; other call sites migrate opportunistically.
Extract the icon + title + description + CTA shape reimplemented by
KnowledgeBaseEmptyState, DeploymentsEmptyState and AssistantEmptyState
into components/ui/empty-state.tsx. Compound anatomy (Empty/EmptyHeader/
EmptyMedia/EmptyTitle/EmptyDescription/EmptyContent) mirroring upstream
shadcn/ui Empty instead of flat props: the three call sites differ in
sizes, spacing and button variants, and slots with className passthrough
keep each render pixel-identical.
select-custom.tsx cloned select.tsx with three deltas: an unstyled
chevron-less trigger, a cursor-pointer indicator-less item, and a
SelectContentWithoutPortal variant. Express the first two as
variant="plain" on SelectTrigger/SelectItem, move
SelectContentWithoutPortal to select.tsx verbatim, compensate the
min-w-[11.5rem] base at the repointed SelectContent call sites, and
delete the clone. Consumers and test mocks repointed.
dialog-with-no-close.tsx is not a close-button-less clone: dialog.tsx
already has hideCloseButton, and the file is a structurally different
minimal dialog (self-centered content, overlayShow/contentShow
animations, p-3/gap-3 grid, raw portal, no a11y title injection). Only
two of its exports are consumed (Dialog, which is identical, and its
DialogContent). Move that content verbatim into dialog.tsx as
DialogContentPlain (with its private plain overlay), alias it at the two
consumers (baseModal, ListSelectionComponent), delete the file. A
boolean-prop merge would have changed baseModal rendering app-wide.
@coderabbitai

coderabbitai Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Important

Review skipped

Auto incremental reviews are disabled on this repository.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: af0ef138-5d6b-4d64-9037-bbb1a6412ccb

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Walkthrough

Changes

The frontend replaces custom select and dialog modules with shared plain variants, introduces reusable empty-state primitives, renames the global-variable delete confirmation component, and centralizes clipboard state in a shared hook.

Shared UI migration

Layer / File(s) Summary
Select primitive variants
src/frontend/src/components/ui/select.tsx, src/frontend/src/components/ui/select-custom.tsx
Adds plain Select trigger/item behavior and non-portal content, then removes the custom Select module.
Select consumer migration
src/frontend/src/CustomNodes/..., src/frontend/src/components/core/..., src/frontend/src/pages/..., src/frontend/src/modals/...
Updates dropdown consumers and related test mocks to use shared Select exports with variant="plain".
Plain dialog adoption
src/frontend/src/components/ui/dialog.tsx, src/frontend/src/modals/baseModal/index.tsx, src/frontend/src/CustomNodes/...
Adds plain dialog primitives and wires them into modal consumers.
Global variable deletion confirmation
src/frontend/src/components/core/globalVariableDeleteConfirmation/*, src/frontend/src/components/core/parameterRenderComponent/..., src/frontend/src/modals/...
Renames the confirmation component and updates its consumers and test mock.
Reusable empty-state layouts
src/frontend/src/components/ui/empty-state.tsx, src/frontend/src/components/core/assistantPanel/..., src/frontend/src/pages/MainPage/...
Introduces shared empty-state primitives and applies them to three empty-state views.
Shared clipboard state
src/frontend/src/shared/hooks/use-copy-to-clipboard.ts, src/frontend/src/pages/MainPage/pages/homePage/hooks/useMcpServer.ts
Centralizes clipboard copying and copied-state reset behavior in a reusable hook.

Estimated code review effort: 4 (Complex) | ~45 minutes

Possibly related PRs

Suggested reviewers: ramgopalsrikar, cristhianzl, viktoravelino, erichare, wallgau


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 2 warnings)

Check name Status Explanation Resolution
Test Coverage For New Implementations ❌ Error No direct tests cover the new hook/variant APIs; searches found no useCopyToClipboard, DialogContentPlain, or SelectContentWithoutPortal assertions, only consumer mocks. Add dedicated *.test.tsx coverage for useCopyToClipboard, DialogContentPlain, and SelectContentWithoutPortal/plain variants, with assertions beyond import mocks.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Test Quality And Coverage ⚠️ Warning The new clipboard hook has no direct tests, and the existing consumer test only checks writeText was called; new empty-state/plain-variant UI changes also lack direct behavioral tests. Add direct behavior tests for useCopyToClipboard (copy, reset, cleanup/rapid copies) and coverage for the new empty-state and plain select/dialog variants, not just mocks.
✅ Passed checks (6 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the frontend refactor to shared primitives and removal of duplicated UI implementations.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Test File Naming And Structure ✅ Passed Touched frontend tests are correctly named (*.test.tsx), use clear describe/it blocks with setup/reset mocks, and include positive/negative coverage; no backend or integration tests changed.
Excessive Mock Usage Warning ✅ Passed Touched tests mostly repoint existing jest mocks for external UI/store deps; they still exercise component behavior and don’t replace core logic wholesale.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch refactor/le-1735-wp1

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions github-actions Bot added the refactor Maintenance tasks and housekeeping label Jul 13, 2026
@github-actions

Copy link
Copy Markdown
Contributor

✅ Test Coverage Advisor

No source changes detected without accompanying tests. Thanks for keeping coverage up! 🎉

Advisory check only — never blocks merge.

@github-actions github-actions Bot added refactor Maintenance tasks and housekeeping and removed refactor Maintenance tasks and housekeeping labels Jul 13, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (3)
src/frontend/src/components/ui/select.tsx (2)

38-39: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Replace empty SelectPrimitive.Icon with null for clarity.

The plain branch renders <SelectPrimitive.Icon asChild></SelectPrimitive.Icon> with no children — a no-op since Radix's Slot returns nothing without a child. Using null is clearer and avoids the non-standard asChild-without-children pattern.

♻️ Proposed refactor
       {children}
-      {variant === "plain" ? (
-        <SelectPrimitive.Icon asChild></SelectPrimitive.Icon>
-      ) : (
+      {variant === "plain" ? null : (
         <SelectPrimitive.Icon asChild>
           {direction === "up" ? (
             <ChevronUp className="h-4 w-4" />
           ) : (
             <ChevronDown className="h-4 w-4" />
           )}
         </SelectPrimitive.Icon>
       )}
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/frontend/src/components/ui/select.tsx` around lines 38 - 39, In the plain
variant branch of the select component, replace the empty SelectPrimitive.Icon
element with null. Preserve the existing alternate branch and all other
SelectPrimitive behavior.

84-111: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Extract shared class constants to reduce duplication between SelectContent and SelectContentWithoutPortal.

Both components share identical animation, side-position, and viewport class strings — differing only in min-w and the portal wrapper. Extracting shared constants prevents class-string drift and reduces maintenance burden.

♻️ Proposed refactor
+const selectContentBaseClass =
+  "relative z-50 overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2";
+const selectContentPopperClass =
+  "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1";
+const selectViewportPopperClass =
+  "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]";

 const SelectContent = React.forwardRef<...>(({ className, children, position = "popper", ...props }, ref) => (
   <SelectPrimitive.Portal>
     <SelectPrimitive.Content
       ref={ref}
       className={cn(
-        "relative z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+        selectContentBaseClass,
+        "min-w-[8rem]",
-        position === "popper" &&
-          "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
+        position === "popper" && selectContentPopperClass,
         className,
       )}
       ...
     >
       <SelectPrimitive.Viewport
         className={cn(
           "p-1",
-          position === "popper" &&
-            "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]",
+          position === "popper" && selectViewportPopperClass,
         )}
       >
         {children}
       </SelectPrimitive.Viewport>
     </SelectPrimitive.Content>
   </SelectPrimitive.Portal>
 ));

 const SelectContentWithoutPortal = React.forwardRef<...>(({ className, children, position = "popper", ...props }, ref) => (
   <SelectPrimitive.Content
     ref={ref}
     className={cn(
-      "relative z-50 min-w-[11.5rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",
+      selectContentBaseClass,
+      "min-w-[11.5rem]",
-      position === "popper" &&
-        "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
+      position === "popper" && selectContentPopperClass,
       className,
     )}
     ...
   >
     <SelectPrimitive.Viewport
       className={cn(
         "p-1",
-        position === "popper" &&
-          "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]",
+        position === "popper" && selectViewportPopperClass,
       )}
     >
       {children}
     </SelectPrimitive.Viewport>
   </SelectPrimitive.Content>
 ));
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/frontend/src/components/ui/select.tsx` around lines 84 - 111, Extract the
identical content animation/position classes and viewport classes into shared
constants, then reuse them in both SelectContent and SelectContentWithoutPortal.
Preserve each component’s existing differences, including the portal wrapper and
min-width behavior, while eliminating duplicated class strings.
src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/__tests__/sidebarDraggableComponent.test.tsx (1)

115-197: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Cover the shared Select migration with a real integration test.

Both suites replace @/components/ui/select with inert mocks, so they cannot validate the actual Radix composition or the new plain variants.

  • src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/__tests__/sidebarDraggableComponent.test.tsx#L115-L197: retain only if needed for isolation, and add real Select coverage for menu rendering and selection.
  • src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/__tests__/config-transition.test.tsx#L147-L160: keep configuration-transition isolation, but move Select contract coverage to an integration test using the real shared primitive.

As per coding guidelines, frontend tests should avoid excessive mocks and verify meaningful behavior rather than only smoke-testing it.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In
`@src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/__tests__/sidebarDraggableComponent.test.tsx`
around lines 115 - 197, Replace the inert Select mock in
sidebarDraggableComponent.test.tsx (lines 115-197) with integration coverage
using the real shared Select primitive, verifying menu rendering and item
selection; retain the mock only if required for unrelated isolation. In
config-transition.test.tsx (lines 147-160), keep Select mocking solely for
configuration-transition isolation and move Select contract assertions to the
integration test, including behavior of the new plain variants.

Source: Coding guidelines

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/frontend/src/shared/hooks/use-copy-to-clipboard.ts`:
- Around line 12-23: Update the use-copy-to-clipboard hook’s copy callback to
store the reset timeout in a useRef, clearing any existing timeout before
scheduling a new one so rapid copies keep isCopied true for the full resetDelay.
Add unmount cleanup to clear the pending timeout, and preserve the existing
clipboard success behavior.

---

Nitpick comments:
In `@src/frontend/src/components/ui/select.tsx`:
- Around line 38-39: In the plain variant branch of the select component,
replace the empty SelectPrimitive.Icon element with null. Preserve the existing
alternate branch and all other SelectPrimitive behavior.
- Around line 84-111: Extract the identical content animation/position classes
and viewport classes into shared constants, then reuse them in both
SelectContent and SelectContentWithoutPortal. Preserve each component’s existing
differences, including the portal wrapper and min-width behavior, while
eliminating duplicated class strings.

In
`@src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/__tests__/sidebarDraggableComponent.test.tsx`:
- Around line 115-197: Replace the inert Select mock in
sidebarDraggableComponent.test.tsx (lines 115-197) with integration coverage
using the real shared Select primitive, verifying menu rendering and item
selection; retain the mock only if required for unrelated isolation. In
config-transition.test.tsx (lines 147-160), keep Select mocking solely for
configuration-transition isolation and move Select contract assertions to the
integration test, including behavior of the new plain variants.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: a5698e69-860b-4368-9a93-d0a544a0984c

📥 Commits

Reviewing files that changed from the base of the PR and between 01d1c68 and 895ef93.

📒 Files selected for processing (25)
  • src/frontend/src/CustomNodes/GenericNode/components/ListSelectionComponent/index.tsx
  • src/frontend/src/CustomNodes/NoteNode/NoteToolbarComponent/index.tsx
  • src/frontend/src/CustomNodes/NoteNode/components/select-items.tsx
  • src/frontend/src/components/core/assistantPanel/components/assistant-empty-state.tsx
  • src/frontend/src/components/core/folderSidebarComponent/components/sideBarFolderButtons/components/select-options.tsx
  • src/frontend/src/components/core/globalVariableDeleteConfirmation/index.tsx
  • src/frontend/src/components/core/parameterRenderComponent/components/inputGlobalComponent/__tests__/index.test.tsx
  • src/frontend/src/components/core/parameterRenderComponent/components/inputGlobalComponent/index.tsx
  • src/frontend/src/components/core/playgroundComponent/chat-view/chat-header/components/session-more-menu.tsx
  • src/frontend/src/components/ui/dialog-with-no-close.tsx
  • src/frontend/src/components/ui/dialog.tsx
  • src/frontend/src/components/ui/empty-state.tsx
  • src/frontend/src/components/ui/select-custom.tsx
  • src/frontend/src/components/ui/select.tsx
  • src/frontend/src/modals/IOModal/components/IOFieldView/components/session-selector.tsx
  • src/frontend/src/modals/IOModal/components/chatView/chatInput/components/voice-assistant/components/audio-settings/audio-settings-dialog.tsx
  • src/frontend/src/modals/baseModal/index.tsx
  • src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/__tests__/sidebarDraggableComponent.test.tsx
  • src/frontend/src/pages/FlowPage/components/flowSidebarComponent/components/sidebarDraggableComponent.tsx
  • src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/__tests__/config-transition.test.tsx
  • src/frontend/src/pages/FlowPage/components/nodeToolbarComponent/index.tsx
  • src/frontend/src/pages/MainPage/pages/deploymentsPage/components/deployments-empty-state.tsx
  • src/frontend/src/pages/MainPage/pages/homePage/hooks/useMcpServer.ts
  • src/frontend/src/pages/MainPage/pages/knowledgePage/components/KnowledgeBaseEmptyState.tsx
  • src/frontend/src/shared/hooks/use-copy-to-clipboard.ts
💤 Files with no reviewable changes (2)
  • src/frontend/src/components/ui/dialog-with-no-close.tsx
  • src/frontend/src/components/ui/select-custom.tsx

Comment thread src/frontend/src/shared/hooks/use-copy-to-clipboard.ts

@Cristhianzl Cristhianzl left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm

@github-actions github-actions Bot added the lgtm This PR has been approved by a maintainer label Jul 13, 2026
@github-actions

github-actions Bot commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Frontend Unit Test Coverage Report

Coverage Summary

Lines Statements Branches Functions
Coverage: 46%
46.02% (63821/138675) 69.93% (8727/12479) 44.14% (1437/3255)

Unit Test Results

Tests Skipped Failures Errors Time
5281 0 💤 0 ❌ 0 🔥 18m 21s ⏱️

@github-actions github-actions Bot added refactor Maintenance tasks and housekeeping and removed refactor Maintenance tasks and housekeeping labels Jul 13, 2026
@github-actions github-actions Bot added refactor Maintenance tasks and housekeeping and removed refactor Maintenance tasks and housekeeping labels Jul 13, 2026
@codecov

codecov Bot commented Jul 13, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 68.03519% with 109 lines in your changes missing coverage. Please review.
✅ Project coverage is 60.31%. Comparing base (6450159) to head (b67775f).
⚠️ Report is 3 commits behind head on release-1.11.0.

Files with missing lines Patch % Lines
src/frontend/src/components/ui/dialog.tsx 47.22% 19 Missing ⚠️
...ssistantPanel/components/assistant-empty-state.tsx 0.00% 14 Missing ⚠️
src/frontend/src/components/ui/select.tsx 82.05% 14 Missing ⚠️
...sideBarFolderButtons/components/select-options.tsx 0.00% 11 Missing ⚠️
...onents/IOFieldView/components/session-selector.tsx 0.00% 10 Missing ⚠️
...c/CustomNodes/NoteNode/components/select-items.tsx 0.00% 9 Missing ⚠️
...oymentsPage/components/deployments-empty-state.tsx 18.18% 9 Missing ⚠️
...-view/chat-header/components/session-more-menu.tsx 14.28% 6 Missing ⚠️
...icNode/components/ListSelectionComponent/index.tsx 0.00% 4 Missing ⚠️
src/frontend/src/components/ui/empty-state.tsx 95.23% 4 Missing ⚠️
... and 3 more
Additional details and impacted files

Impacted file tree graph

@@                Coverage Diff                 @@
##           release-1.11.0   #14042      +/-   ##
==================================================
+ Coverage           60.16%   60.31%   +0.15%     
==================================================
  Files                2333     2334       +1     
  Lines              228353   228835     +482     
  Branches            32038    34132    +2094     
==================================================
+ Hits               137386   138021     +635     
+ Misses              89351    89198     -153     
  Partials             1616     1616              
Flag Coverage Δ
frontend 59.43% <68.03%> (+0.39%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

Files with missing lines Coverage Δ
...ts/core/globalVariableDeleteConfirmation/index.tsx 55.67% <100.00%> (ø)
...omponent/components/inputGlobalComponent/index.tsx 93.92% <100.00%> (-0.47%) ⬇️
src/frontend/src/modals/baseModal/index.tsx 91.42% <100.00%> (+0.73%) ⬆️
...Component/components/sidebarDraggableComponent.tsx 93.53% <100.00%> (+0.06%) ⬆️
...ages/MainPage/pages/homePage/hooks/useMcpServer.ts 72.89% <100.00%> (-0.72%) ⬇️
...owledgePage/components/KnowledgeBaseEmptyState.tsx 87.50% <100.00%> (+1.42%) ⬆️
...frontend/src/shared/hooks/use-copy-to-clipboard.ts 100.00% <100.00%> (ø)
...ustomNodes/NoteNode/NoteToolbarComponent/index.tsx 22.05% <0.00%> (ø)
...omponents/audio-settings/audio-settings-dialog.tsx 0.00% <0.00%> (ø)
...icNode/components/ListSelectionComponent/index.tsx 37.41% <0.00%> (+0.31%) ⬆️
... and 10 more

... and 149 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

lgtm This PR has been approved by a maintainer refactor Maintenance tasks and housekeeping

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants