Skip to content

Conversation

@nikhil-304
Copy link
Contributor

@nikhil-304 nikhil-304 commented Oct 23, 2025

Closes #5840

📝 Description

This PR fixes the Firefox Autocomplete input reset issue where typing after navigating into the input field using the Tab key caused the text to reset or get overwritten.
The problem occurred only in Firefox and only when focusing via keyboard - clicking into the field worked fine.

The fix ensures that the Autocomplete input now correctly handles focus events in Firefox, maintaining the input state regardless of how the field is focused.

⛳️ Current behavior (updates)

  • In Firefox, tabbing into the Autocomplete input causes the value to reset or overwrite after typing 1–2 characters.
  • The issue is reproducible both on the HeroUI website and in Storybook environments.
  • Works normally on Chrome and Edge.

📹 Before videos:
https://github.com/user-attachments/assets/1137923c-6b03-46ac-a93d-07c8a7295a94
https://github.com/user-attachments/assets/76cf2edf-8add-4e22-b8c3-b0d1f2a2100e

🚀 New behavior

  • Autocomplete input now behaves correctly in Firefox when focused using Tab.
  • Typing continues normally without resetting or losing characters.
  • The fix is verified to work consistently across all browsers (Firefox, Chrome, Edge).

📹 After video:
https://github.com/user-attachments/assets/54b31896-c4d1-4273-826a-2fa47b54bb0e

💣 Is this a breaking change (Yes/No):

No

📝 Additional Information

  • Tested on Firefox (Windows).
  • No API or behavior changes - only internal focus handling logic updated.

Summary by CodeRabbit

  • Bug Fixes

    • Fixes input selection behavior: Tab-committed selections now highlight text, mouse commits place the cursor at the end, and Firefox focus issues are resolved.
  • New Features

    • Adds virtualization for large dropdowns (enabled for lists over ~50 items) to improve performance.

@vercel
Copy link

vercel bot commented Oct 23, 2025

@nikhil-304 is attempting to deploy a commit to the HeroUI Inc Team on Vercel.

A member of the Team first needs to authorize it.

@changeset-bot
Copy link

changeset-bot bot commented Oct 23, 2025

🦋 Changeset detected

Latest commit: 3917a39

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 2 packages
Name Type
@heroui/autocomplete Patch
@heroui/react Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Oct 23, 2025

Walkthrough

Added Tab-key tracking and focus selection logic to the autocomplete hook to distinguish keyboard (Tab) vs mouse selection behaviors, updated listbox virtualization activation, and added tests plus a changeset documenting the fixes.

Changes

Cohort / File(s) Summary
Autocomplete hook
packages/components/autocomplete/src/use-autocomplete.ts
Added useState/useRef to track Tab presses (lastKeyRef, shouldSkipSelect), record Tab in onKeyDown, update onSelectionChange to consider last key, enhance inputProps.onFocus to conditionally select text or place cursor at end, and compute shouldVirtualize (virtualize if isVirtualized ?? state.collection.size > 50) with virtualization config (maxListboxHeight, itemHeight).
Tests
packages/components/autocomplete/__tests__/autocomplete.test.tsx
Added tests covering mouse-selection (cursor at end, no selection) and Tab-key selection (text selected) behaviors.
Release metadata
.changeset/fix-text-selection.md
New changeset declaring a patch release for @heroui/autocomplete describing Tab-selection and cursor-on-click fixes.

Sequence Diagram(s)

sequenceDiagram
  participant User
  participant Input as AutocompleteInput
  participant Hook as useAutocomplete
  participant List as ListBox

  rect rgba(200,230,255,0.3)
  User->>Input: Tab focus (keyboard)
  Note right of Input: onKeyDown records Tab -> lastKeyRef = 'Tab'
  Input->>Hook: onFocus event
  Hook->>Hook: sees lastKeyRef == 'Tab' -> shouldSkipSelect = true
  Hook->>Input: set selection (select all text)
  end

  rect rgba(230,255,210,0.3)
  User->>Input: Click (mouse)
  Input->>Hook: onFocus event
  Hook->>Hook: shouldSkipSelect false -> place cursor at end / preserve cursor
  end

  alt listbox large
    Hook->>List: getListBoxProps -> enable virtualization (size > 50)
  else small list
    Hook->>List: getListBoxProps -> no virtualization
  end
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

  • Pay attention to focus/cursor handling in inputProps.onFocus (edge cases, cross-browser behavior).
  • Verify lastKeyRef lifecycle and reset points (race conditions between key events and selection).
  • Confirm virtualization threshold and config usage align with surrounding listbox rendering code.
  • Review new tests for flakiness (timing/browser-specific behavior).

Possibly related PRs

Suggested reviewers

  • jrgarciadev
  • wingkwong

Pre-merge checks and finishing touches

❌ Failed checks (1 warning, 1 inconclusive)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
Out of Scope Changes Check ❓ Inconclusive The raw summary indicates that ListBox virtualization behavior changes were introduced (including virtualization configuration with maxListboxHeight and itemHeight settings), which are not mentioned in the PR description, objectives, or linked issue #5840. The PR description explicitly states "only internal focus handling logic updated," and the linked issue focuses solely on fixing the Tab key focus problem. These virtualization-related changes appear to fall outside the stated scope of fixing the Firefox focus reset issue and require clarification as to their necessity and relationship to the primary objective.
✅ Passed checks (3 passed)
Check name Status Explanation
Title Check ✅ Passed The title "fix(autocomplete): resolve Firefox focus reset issue" directly and specifically addresses the primary problem described in the linked issue #5840. It uses the conventional commit format with type "fix" and scope "autocomplete", and clearly communicates the main objective of the changeset. The title is concise and relevant, allowing reviewers scanning the commit history to immediately understand that this addresses a Firefox-specific focus handling bug in the autocomplete component.
Linked Issues Check ✅ Passed The code changes directly address the linked issue #5840 requirements: Tab key tracking was implemented via lastKeyRef to detect keyboard navigation, Firefox-specific focus handling logic was added to conditionally manage text selection, and new test cases validate both mouse selection and Tab-based selection behaviors. The changes include focus state management, selection flow integration, and test coverage for the reported issue, demonstrating that the fix ensures text entry works correctly when the autocomplete field is focused via Tab in Firefox.
Description Check ✅ Passed The pull request description comprehensively follows the provided template structure with all required sections completed: it includes the issue closure (#5840), a clear description of the Firefox focus reset problem, detailed current behavior with video links, new behavior after the fix, confirmation that it's not a breaking change, and additional testing information. The description is thorough and provides context about browser compatibility and testing scope, fulfilling the template requirements effectively.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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 and usage tips.

@pkg-pr-new
Copy link

pkg-pr-new bot commented Oct 23, 2025

Open in StackBlitz

@heroui/accordion

npm i https://pkg.pr.new/@heroui/accordion@5842

@heroui/alert

npm i https://pkg.pr.new/@heroui/alert@5842

@heroui/autocomplete

npm i https://pkg.pr.new/@heroui/autocomplete@5842

@heroui/avatar

npm i https://pkg.pr.new/@heroui/avatar@5842

@heroui/badge

npm i https://pkg.pr.new/@heroui/badge@5842

@heroui/breadcrumbs

npm i https://pkg.pr.new/@heroui/breadcrumbs@5842

@heroui/button

npm i https://pkg.pr.new/@heroui/button@5842

@heroui/calendar

npm i https://pkg.pr.new/@heroui/calendar@5842

@heroui/card

npm i https://pkg.pr.new/@heroui/card@5842

@heroui/checkbox

npm i https://pkg.pr.new/@heroui/checkbox@5842

@heroui/chip

npm i https://pkg.pr.new/@heroui/chip@5842

@heroui/code

npm i https://pkg.pr.new/@heroui/code@5842

@heroui/date-input

npm i https://pkg.pr.new/@heroui/date-input@5842

@heroui/date-picker

npm i https://pkg.pr.new/@heroui/date-picker@5842

@heroui/divider

npm i https://pkg.pr.new/@heroui/divider@5842

@heroui/drawer

npm i https://pkg.pr.new/@heroui/drawer@5842

@heroui/dropdown

npm i https://pkg.pr.new/@heroui/dropdown@5842

@heroui/form

npm i https://pkg.pr.new/@heroui/form@5842

@heroui/image

npm i https://pkg.pr.new/@heroui/image@5842

@heroui/input

npm i https://pkg.pr.new/@heroui/input@5842

@heroui/input-otp

npm i https://pkg.pr.new/@heroui/input-otp@5842

@heroui/kbd

npm i https://pkg.pr.new/@heroui/kbd@5842

@heroui/link

npm i https://pkg.pr.new/@heroui/link@5842

@heroui/listbox

npm i https://pkg.pr.new/@heroui/listbox@5842

@heroui/menu

npm i https://pkg.pr.new/@heroui/menu@5842

@heroui/modal

npm i https://pkg.pr.new/@heroui/modal@5842

@heroui/navbar

npm i https://pkg.pr.new/@heroui/navbar@5842

@heroui/number-input

npm i https://pkg.pr.new/@heroui/number-input@5842

@heroui/pagination

npm i https://pkg.pr.new/@heroui/pagination@5842

@heroui/popover

npm i https://pkg.pr.new/@heroui/popover@5842

@heroui/progress

npm i https://pkg.pr.new/@heroui/progress@5842

@heroui/radio

npm i https://pkg.pr.new/@heroui/radio@5842

@heroui/ripple

npm i https://pkg.pr.new/@heroui/ripple@5842

@heroui/scroll-shadow

npm i https://pkg.pr.new/@heroui/scroll-shadow@5842

@heroui/select

npm i https://pkg.pr.new/@heroui/select@5842

@heroui/skeleton

npm i https://pkg.pr.new/@heroui/skeleton@5842

@heroui/slider

npm i https://pkg.pr.new/@heroui/slider@5842

@heroui/snippet

npm i https://pkg.pr.new/@heroui/snippet@5842

@heroui/spacer

npm i https://pkg.pr.new/@heroui/spacer@5842

@heroui/spinner

npm i https://pkg.pr.new/@heroui/spinner@5842

@heroui/switch

npm i https://pkg.pr.new/@heroui/switch@5842

@heroui/table

npm i https://pkg.pr.new/@heroui/table@5842

@heroui/tabs

npm i https://pkg.pr.new/@heroui/tabs@5842

@heroui/toast

npm i https://pkg.pr.new/@heroui/toast@5842

@heroui/tooltip

npm i https://pkg.pr.new/@heroui/tooltip@5842

@heroui/user

npm i https://pkg.pr.new/@heroui/user@5842

@heroui/react

npm i https://pkg.pr.new/@heroui/react@5842

@heroui/system

npm i https://pkg.pr.new/@heroui/system@5842

@heroui/system-rsc

npm i https://pkg.pr.new/@heroui/system-rsc@5842

@heroui/theme

npm i https://pkg.pr.new/@heroui/theme@5842

@heroui/use-aria-accordion

npm i https://pkg.pr.new/@heroui/use-aria-accordion@5842

@heroui/use-aria-accordion-item

npm i https://pkg.pr.new/@heroui/use-aria-accordion-item@5842

@heroui/use-aria-button

npm i https://pkg.pr.new/@heroui/use-aria-button@5842

@heroui/use-aria-link

npm i https://pkg.pr.new/@heroui/use-aria-link@5842

@heroui/use-aria-modal-overlay

npm i https://pkg.pr.new/@heroui/use-aria-modal-overlay@5842

@heroui/use-aria-multiselect

npm i https://pkg.pr.new/@heroui/use-aria-multiselect@5842

@heroui/use-aria-overlay

npm i https://pkg.pr.new/@heroui/use-aria-overlay@5842

@heroui/use-callback-ref

npm i https://pkg.pr.new/@heroui/use-callback-ref@5842

@heroui/use-clipboard

npm i https://pkg.pr.new/@heroui/use-clipboard@5842

@heroui/use-data-scroll-overflow

npm i https://pkg.pr.new/@heroui/use-data-scroll-overflow@5842

@heroui/use-disclosure

npm i https://pkg.pr.new/@heroui/use-disclosure@5842

@heroui/use-draggable

npm i https://pkg.pr.new/@heroui/use-draggable@5842

@heroui/use-form-reset

npm i https://pkg.pr.new/@heroui/use-form-reset@5842

@heroui/use-image

npm i https://pkg.pr.new/@heroui/use-image@5842

@heroui/use-infinite-scroll

npm i https://pkg.pr.new/@heroui/use-infinite-scroll@5842

@heroui/use-intersection-observer

npm i https://pkg.pr.new/@heroui/use-intersection-observer@5842

@heroui/use-is-mobile

npm i https://pkg.pr.new/@heroui/use-is-mobile@5842

@heroui/use-is-mounted

npm i https://pkg.pr.new/@heroui/use-is-mounted@5842

@heroui/use-measure

npm i https://pkg.pr.new/@heroui/use-measure@5842

@heroui/use-pagination

npm i https://pkg.pr.new/@heroui/use-pagination@5842

@heroui/use-real-shape

npm i https://pkg.pr.new/@heroui/use-real-shape@5842

@heroui/use-ref-state

npm i https://pkg.pr.new/@heroui/use-ref-state@5842

@heroui/use-resize

npm i https://pkg.pr.new/@heroui/use-resize@5842

@heroui/use-safe-layout-effect

npm i https://pkg.pr.new/@heroui/use-safe-layout-effect@5842

@heroui/use-scroll-position

npm i https://pkg.pr.new/@heroui/use-scroll-position@5842

@heroui/use-ssr

npm i https://pkg.pr.new/@heroui/use-ssr@5842

@heroui/use-theme

npm i https://pkg.pr.new/@heroui/use-theme@5842

@heroui/use-update-effect

npm i https://pkg.pr.new/@heroui/use-update-effect@5842

@heroui/use-viewport-size

npm i https://pkg.pr.new/@heroui/use-viewport-size@5842

@heroui/aria-utils

npm i https://pkg.pr.new/@heroui/aria-utils@5842

@heroui/dom-animation

npm i https://pkg.pr.new/@heroui/dom-animation@5842

@heroui/framer-utils

npm i https://pkg.pr.new/@heroui/framer-utils@5842

@heroui/react-rsc-utils

npm i https://pkg.pr.new/@heroui/react-rsc-utils@5842

@heroui/react-utils

npm i https://pkg.pr.new/@heroui/react-utils@5842

@heroui/shared-icons

npm i https://pkg.pr.new/@heroui/shared-icons@5842

@heroui/shared-utils

npm i https://pkg.pr.new/@heroui/shared-utils@5842

@heroui/stories-utils

npm i https://pkg.pr.new/@heroui/stories-utils@5842

@heroui/test-utils

npm i https://pkg.pr.new/@heroui/test-utils@5842

commit: 3917a39

@nikhil-304
Copy link
Contributor Author

Hey @jrgarciadev 👋
Just following up on this PR - it fixes the Firefox autocomplete focus reset issue (#5840) and I’ve tested it with before/after videos (storybook + website).
Would love your review whenever you get a chance. Thanks again for maintaining HeroUI - really appreciate your time! 🙏

@vercel
Copy link

vercel bot commented Oct 28, 2025

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

Project Deployment Preview Comments Updated (UTC)
heroui Ready Ready Preview Comment Oct 28, 2025 3:51pm
heroui-sb Ready Ready Preview Comment Oct 28, 2025 3:51pm

@wingkwong wingkwong changed the title fix(autocomplete): resolve Firefox focus reset issue (#5840) fix(autocomplete): resolve Firefox focus reset issue Oct 28, 2025
@wingkwong wingkwong self-assigned this Oct 28, 2025
Copy link
Member

@wingkwong wingkwong left a comment

Choose a reason for hiding this comment

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

  1. please add changeset
  2. please include a test case
  3. your change will alter the existing behaviour. If there is a value in autocomplete, when you tab it to focus, the expected behavior is the whole text got selected and users can type without producing the incorrect input after 1-2 characters (referring to the linked issue). You can also see this behaviour in other components like input.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

🧹 Nitpick comments (3)
packages/components/autocomplete/src/use-autocomplete.ts (2)

149-152: Variable naming could be clearer.

The variable shouldSkipSelect is confusing because when it's false, text selection actually occurs, and when it's true, selection is skipped. Consider renaming to something more intuitive like shouldPlaceCursorAtEnd or inverting the logic with shouldSelectText to improve code readability.


513-537: Consider simplifying the onFocus logic.

The onFocus handler has multiple conditional branches that could be refactored for better readability. Consider extracting this logic into a separate helper function with clear documentation explaining each case:

  1. When to place cursor at end (mouse selection)
  2. When to select all text (Tab selection with matching value)
  3. Default fallback behavior

Apply this refactor if you want to improve readability:

+const handleTextSelection = (
+  target: HTMLInputElement,
+  shouldSkipSelect: boolean,
+  selectedItem: any,
+) => {
+  if (!target.value) return;
+
+  const length = target.value.length;
+
+  // Place cursor at end if mouse selection
+  if (shouldSkipSelect) {
+    target.setSelectionRange(length, length);
+    return;
+  }
+
+  // Select text if Tab selection with matching value
+  if (selectedItem && target.value === selectedItem.textValue) {
+    target.select();
+    return;
+  }
+
+  // Default: place cursor at end
+  target.setSelectionRange(length, length);
+};

 onFocus: chain(
   inputProps.onFocus,
   otherProps.onFocus,
   (e: React.FocusEvent<HTMLInputElement>) => {
-    if (shouldSkipSelect) {
-      if (e.target.value) {
-        const length = e.target.value.length;
-        e.target.setSelectionRange(length, length);
-      }
-    } else if (
-      e.target.value &&
-      state.selectedItem &&
-      e.target.value === state.selectedItem.textValue
-    ) {
-      e.target.select();
-    } else if (e.target.value) {
-      const length = e.target.value.length;
-      e.target.setSelectionRange(length, length);
-    }
+    handleTextSelection(e.target, shouldSkipSelect, state.selectedItem);
     setShouldSkipSelect(false);
   },
 ),
packages/components/autocomplete/__tests__/autocomplete.test.tsx (1)

1092-1142: Consider adding edge case tests.

While the current tests cover the primary scenarios, consider adding tests for edge cases:

  1. Clicking into the field after a previous selection (does it preserve cursor position?)
  2. Tab selection followed by blur and re-focus (is selection preserved/reset correctly?)
  3. Rapid switching between mouse and keyboard selection methods

These additional tests would provide more confidence in the robustness of the fix, especially for the Firefox-specific focus behavior.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between c60b080 and 3917a39.

📒 Files selected for processing (3)
  • .changeset/fix-text-selection.md (1 hunks)
  • packages/components/autocomplete/__tests__/autocomplete.test.tsx (1 hunks)
  • packages/components/autocomplete/src/use-autocomplete.ts (5 hunks)
🧰 Additional context used
🧠 Learnings (4)
📚 Learning: 2025-10-27T21:48:35.308Z
Learnt from: adbjo
Repo: heroui-inc/heroui PR: 5846
File: packages/components/tabs/src/tabs.tsx:76-101
Timestamp: 2025-10-27T21:48:35.308Z
Learning: In packages/components/tabs/src/tabs.tsx, the updateCursorPosition useCallback dependency array intentionally includes `cursorRef.current` to handle the case where the cursor span element is unmounted and remounted (e.g., when `disableAnimation` or `disableCursorAnimation` toggles). This ensures the callback is recreated when the ref points to a new element, triggering a dependency chain that re-establishes the ResizeObserver and initializes the new cursor element with the data-initialized attribute.
</learning]

Applied to files:

  • packages/components/autocomplete/src/use-autocomplete.ts
📚 Learning: 2025-10-25T17:11:59.338Z
Learnt from: adbjo
Repo: heroui-inc/heroui PR: 5846
File: packages/components/tabs/src/tabs.tsx:155-155
Timestamp: 2025-10-25T17:11:59.338Z
Learning: In packages/components/tabs/src/tabs.tsx, the renderTabs useMemo dependency array intentionally includes both `domRef` and `cursorRef` to maintain consistency in how ref objects are handled in dependency arrays, even though ref objects have stable identity across renders.

Applied to files:

  • packages/components/autocomplete/src/use-autocomplete.ts
📚 Learning: 2025-10-27T21:52:33.324Z
Learnt from: adbjo
Repo: heroui-inc/heroui PR: 5846
File: packages/components/tabs/src/tabs.tsx:115-125
Timestamp: 2025-10-27T21:52:33.324Z
Learning: In packages/components/tabs/src/tabs.tsx, the useEffect dependency array at line 125 intentionally uses `domRef.current` rather than `domRef` because domRef.current can change between renders (when React sets it during the commit phase), whereas domRef itself has stable identity and won't change.

Applied to files:

  • packages/components/autocomplete/src/use-autocomplete.ts
📚 Learning: 2025-10-25T17:08:46.283Z
Learnt from: adbjo
Repo: heroui-inc/heroui PR: 5846
File: packages/components/tabs/src/tabs.tsx:156-157
Timestamp: 2025-10-25T17:08:46.283Z
Learning: In packages/components/tabs/src/tabs.tsx, the renderTabs useMemo dependency array intentionally includes `variant` and `isVertical` to prevent potential side-effects, even though they might appear redundant based on static analysis.

Applied to files:

  • packages/components/autocomplete/src/use-autocomplete.ts
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
  • GitHub Check: Continuous Release
  • GitHub Check: TypeScript
  • GitHub Check: Build
  • GitHub Check: ESLint
🔇 Additional comments (6)
packages/components/autocomplete/src/use-autocomplete.ts (3)

218-227: Text selection logic works correctly.

The logic correctly handles the two selection paths:

  • Mouse selection: sets shouldSkipSelect = true → cursor placed at end on next focus
  • Tab selection: sets shouldSkipSelect = false → text selected on next focus

This addresses the Firefox focus reset issue by ensuring proper text selection behavior based on interaction method.


431-434: Tab key tracking implementation is correct.

Tracking the Tab key press in onKeyDown allows the component to differentiate between keyboard and mouse-based selections. The lastKeyRef is appropriately reset in onSelectionChange after being consumed.


540-559: The virtualization logic predates the Firefox focus fix—it was not introduced by those changes.

The virtualization feature (isVirtualized prop with auto-enable threshold at 50 items) already existed before the Firefox focus fix commit (c60b080). The Firefox fix specifically added only the onFocus handler to manage text selection behavior during focus events. These are separate, unrelated features. The virtualization logic is a performance optimization for large lists and has no connection to the Firefox focus reset issue, which involves keyboard/selection behavior management.

Likely an incorrect or invalid review comment.

packages/components/autocomplete/__tests__/autocomplete.test.tsx (2)

1092-1117: Mouse selection test validates cursor positioning correctly.

The test confirms that selecting an item via mouse click places the cursor at the end of the value without selecting text. This is the expected behavior for mouse-based interactions.


1119-1142: Tab selection test validates text selection correctly.

The test confirms that committing a selection via Tab key fully selects the text (selectionStart = 0, selectionEnd = length). This addresses the Firefox focus reset issue by ensuring the text is in a selected state, allowing immediate typing to replace the value.

.changeset/fix-text-selection.md (1)

1-5: Changeset documentation is clear and appropriate.

The changeset correctly documents the fix as a patch release and clearly describes the two behavioral changes: text selection on Tab key and cursor positioning on mouse click. This aligns well with the changes implemented in the code.

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

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] - Tabbing into autocomplete on firefox causes input to constantly reset

2 participants