Skip to content

Conversation

@waleedlatif1
Copy link
Collaborator

Summary

  • Fixed cursor misalignment between textarea and overlay in MessagesInput
  • Added proper auto-resize (min 80px, max 320px) with manual resize override
  • Fixed scroll sync between textarea and overlay
  • Added zero-width space handling for trailing newlines
  • Matched CSS classes between textarea and overlay for pixel-perfect alignment

Type of Change

  • Bug fix

Testing

Tested manually

Checklist

  • Code follows project style guidelines
  • Self-reviewed my changes
  • Tests added/updated and passing
  • No new warnings introduced
  • I confirm that I have read and agree to the terms outlined in the Contributor License Agreement (CLA)

@vercel
Copy link

vercel bot commented Jan 21, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Review Updated (UTC)
docs Skipped Skipped Jan 21, 2026 11:15pm

Request Review

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 21, 2026

Greptile Summary

This PR fixes cursor alignment and auto-resize issues in the MessagesInput component by synchronizing the textarea and overlay elements.

  • Added syncOverlay function to synchronize width and scroll positions between textarea and overlay
  • Replaced useEffect with useLayoutEffect for auto-resize to ensure DOM updates happen before paint
  • Added ResizeObserver to dynamically update overlay width when textarea width changes
  • Matched CSS classes between textarea and overlay for pixel-perfect text alignment (font-sans, leading-[1.5], py-[8px])
  • Added zero-width space (\u200B) handling for trailing newlines to maintain cursor position accuracy
  • Added proper z-index layering for textarea, overlay, and resize handle
  • Reset user resize flag when content is cleared to allow auto-resize to resume

Confidence Score: 5/5

  • This PR is safe to merge with minimal risk - it contains focused bug fixes with proper cleanup patterns.
  • The changes are well-contained to a single component, addressing specific visual bugs. The code follows established patterns in the codebase, properly cleans up ResizeObservers, and uses appropriate React hooks for the task.
  • No files require special attention.

Important Files Changed

Filename Overview
apps/sim/app/workspace/[workspaceId]/w/[workflowId]/components/panel/components/editor/components/sub-block/components/messages-input/messages-input.tsx Fixed cursor/overlay alignment by synchronizing CSS classes, added ResizeObserver for width sync, improved scroll sync during resize, and added zero-width space handling for trailing newlines.

Sequence Diagram

sequenceDiagram
    participant User
    participant Textarea
    participant syncOverlay
    participant autoResizeTextarea
    participant useLayoutEffect
    participant ResizeObserver
    participant Overlay

    User->>Textarea: Types content
    Textarea->>Textarea: fieldHandlers.onChange
    Textarea->>Textarea: updateMessageContent
    Note over Textarea: localMessages state updates
    Textarea->>useLayoutEffect: currentMessages changes
    useLayoutEffect->>autoResizeTextarea: Called for each message
    autoResizeTextarea->>Textarea: Set height (auto → calculated)
    autoResizeTextarea->>Overlay: Set height to match
    autoResizeTextarea->>syncOverlay: Sync width and scroll
    syncOverlay->>Overlay: Update width, scrollTop, scrollLeft

    User->>Textarea: Scrolls
    Textarea->>Overlay: onScroll syncs scrollTop/scrollLeft

    User->>Textarea: Resizes via handle
    Textarea->>Textarea: handleResizeStart
    Note over Textarea: Sets userResizedRef[fieldId] = true
    Textarea->>Overlay: Sync height during resize
    
    ResizeObserver->>Textarea: Width changed
    ResizeObserver->>Overlay: Update overlay width
Loading

cursor[bot]

This comment was marked as outdated.

@waleedlatif1
Copy link
Collaborator Author

@greptile

Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

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

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

@waleedlatif1 waleedlatif1 merged commit 004e058 into staging Jan 21, 2026
11 checks passed
@waleedlatif1 waleedlatif1 deleted the fix/scrollbar branch January 21, 2026 23:30
waleedlatif1 added a commit that referenced this pull request Jan 22, 2026
* fix(zustand): updated to useShallow from deprecated createWithEqualityFn (#2919)

* fix(logger): use direct env access for webpack inlining (#2920)

* fix(notifications): text overflow with line-clamp (#2921)

* chore(helm): add env vars for Vertex AI, orgs, and telemetry (#2922)

* fix(auth): improve reset password flow and consolidate brand detection (#2924)

* fix(auth): improve reset password flow and consolidate brand detection

* fix(auth): set errorHandled for EMAIL_NOT_VERIFIED to prevent duplicate error

* fix(auth): clear success message on login errors

* chore(auth): fix import order per lint

* fix(action-bar): duplicate subflows with children (#2923)

* fix(action-bar): duplicate subflows with children

* fix(action-bar): add validateTriggerPaste for subflow duplicate

* fix(resolver): agent response format, input formats, root level (#2925)

* fix(resolvers): agent response format, input formats, root level

* fix response block initial seeding

* fix tests

* fix(messages-input): fix cursor alignment and auto-resize with overlay (#2926)

* fix(messages-input): fix cursor alignment and auto-resize with overlay

* fixed remaining zustand warnings

* fix(stores): remove dead code causing log spam on startup (#2927)

* fix(stores): remove dead code causing log spam on startup

* fix(stores): replace custom tools zustand store with react query cache

* improvement(ui): use BrandedButton and BrandedLink components (#2930)

- Refactor auth forms to use BrandedButton component
- Add BrandedLink component for changelog page
- Reduce code duplication in login, signup, reset-password forms
- Update star count default value

* fix(custom-tools): remove unsafe title fallback in getCustomTool (#2929)

* fix(custom-tools): remove unsafe title fallback in getCustomTool

* fix(custom-tools): restore title fallback in getCustomTool lookup

Custom tools are referenced by title (custom_${title}), not database ID.
The title fallback is required for client-side tool resolution to work.

* fix(null-bodies): empty bodies handling (#2931)

* fix(null-statuses): empty bodies handling

* address bugbot comment

* fix(token-refresh): microsoft, notion, x, linear (#2933)

* fix(microsoft): proactive refresh needed

* fix(x): missing token refresh flag

* notion and linear missing flag too

* address bugbot comment

* fix(auth): handle EMAIL_NOT_VERIFIED in onError callback (#2932)

* fix(auth): handle EMAIL_NOT_VERIFIED in onError callback

* refactor(auth): extract redirectToVerify helper to reduce duplication

* fix(workflow-selector): use dedicated selector for workflow dropdown (#2934)

* feat(workflow-block): preview (#2935)

* improvement(copilot): tool configs to show nested props (#2936)

* fix(auth): add genericOAuth providers to trustedProviders (#2937)

---------

Co-authored-by: Vikhyath Mondreti <vikhyathvikku@gmail.com>
Co-authored-by: Emir Karabeg <78010029+emir-karabeg@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants