Skip to content

Conversation

@Rajdeepc
Copy link
Contributor

@Rajdeepc Rajdeepc commented Sep 16, 2025

Description

Fixes MenuItem focus stealing from input elements on mouseover

Solution

  • Added isInputElement() method that detects all input types
  • Uses getRootNode().activeElement for reliable focus detection across shadow boundaries
  • Handles both document and shadow root contexts
  • Avoids expensive DOM queries and property enumeration
  • Uses ARIA roles (textbox, searchbox, combobox, spinbutton, slider) for generic detection
  • Regex pattern matching for Spectrum Web Components (/^(SP-SEARCH|SP-TEXTFIELD|SP-NUMBER-FIELD|SP-COMBOBOX|SP-COLOR-FIELD)$/)

No Breaking Changes

  • Existing menu functionality preserved
  • Menu items still receive focus when appropriate
  • No API changes
  • Backward compatible

Technical Details

Before

handleMouseover(event: MouseEvent): void {
    const target = event.target as HTMLElement;
    if (target === this) {
        this.focus(); // Always stole focus
        this.focused = false;
    }
}

After

handleMouseover(event: MouseEvent): void {
    const target = event.target as HTMLElement;
    if (target === this) {
        const rootNode = this.getRootNode() as Document | ShadowRoot;
        const activeElement = rootNode.activeElement as HTMLElement;
        
        // Only focus if no input element is currently active
        if (!activeElement || !this.isInputElement(activeElement)) {
            this.focus();
        }
        this.focused = false;
    }
}

Motivation and context

MenuItem was stealing focus from input elements (searchboxes, textfields, etc.) when users hovered over menu items while typing. This created a poor user experience where:

  • Users typing in search boxes would lose focus when hovering over menu items
  • Input was interrupted mid-typing, forcing users to click back into the input
  • This affected all Spectrum Web Components input types (sp-search, sp-textfield, sp-number-field, sp-combobox, sp-color-field)
  • Native HTML inputs (input, textarea, select) were also affected
  • Contenteditable elements experienced the same issue

Related issue(s)

Screenshots (if appropriate)


Author's checklist

  • I have read the CONTRIBUTING and PULL_REQUESTS documents.
  • I have reviewed at the Accessibility Practices for this feature, see: Aria Practices
  • I have added automated tests to cover my changes.
  • I have included a well-written changeset if my change needs to be published.
  • I have included updated documentation if my change required it.

Reviewer's checklist

  • Includes a Github Issue with appropriate flag or Jira ticket number without a link
  • Includes thoughtfully written changeset if changes suggested include patch, minor, or major features
  • Automated tests cover all use cases and follow best practices for writing
  • Validated on all supported browsers
  • All VRTs are approved before the author can update Golden Hash

Manual review test cases

  • Descriptive Test Statement

    1. Go here
    2. Click in any input field (search, textfield, number-field, etc.)
    3. Start typing
    4. Hover over menu items while continuing to type
    5. Verify that focus remains in the input field and typing continues uninterrupted

Device review

  • Did it pass in Desktop?
  • Did it pass in (emulated) Mobile?
  • Did it pass in (emulated) iPad?

@changeset-bot
Copy link

changeset-bot bot commented Sep 16, 2025

🦋 Changeset detected

Latest commit: 74f9dfc

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

This PR includes changesets to release 84 packages
Name Type
@spectrum-web-components/menu Minor
@spectrum-web-components/breadcrumbs Minor
@spectrum-web-components/combobox Minor
@spectrum-web-components/picker Minor
@spectrum-web-components/custom-vars-viewer Minor
example-project-rollup Patch
example-project-webpack Patch
@spectrum-web-components/story-decorator Minor
@spectrum-web-components/bundle Minor
@spectrum-web-components/action-menu Minor
documentation Patch
@spectrum-web-components/eslint-plugin Minor
@spectrum-web-components/accordion Minor
@spectrum-web-components/action-bar Minor
@spectrum-web-components/action-button Minor
@spectrum-web-components/action-group Minor
@spectrum-web-components/alert-banner Minor
@spectrum-web-components/alert-dialog Minor
@spectrum-web-components/asset Minor
@spectrum-web-components/avatar Minor
@spectrum-web-components/badge Minor
@spectrum-web-components/button-group Minor
@spectrum-web-components/button Minor
@spectrum-web-components/card Minor
@spectrum-web-components/checkbox Minor
@spectrum-web-components/clear-button Minor
@spectrum-web-components/close-button Minor
@spectrum-web-components/coachmark Minor
@spectrum-web-components/color-area Minor
@spectrum-web-components/color-field Minor
@spectrum-web-components/color-handle Minor
@spectrum-web-components/color-loupe Minor
@spectrum-web-components/color-slider Minor
@spectrum-web-components/color-wheel Minor
@spectrum-web-components/contextual-help Minor
@spectrum-web-components/dialog Minor
@spectrum-web-components/divider Minor
@spectrum-web-components/dropzone Minor
@spectrum-web-components/field-group Minor
@spectrum-web-components/field-label Minor
@spectrum-web-components/help-text Minor
@spectrum-web-components/icon Minor
@spectrum-web-components/icons-ui Minor
@spectrum-web-components/icons-workflow Minor
@spectrum-web-components/icons Minor
@spectrum-web-components/iconset Minor
@spectrum-web-components/illustrated-message Minor
@spectrum-web-components/infield-button Minor
@spectrum-web-components/link Minor
@spectrum-web-components/meter Minor
@spectrum-web-components/modal Minor
@spectrum-web-components/number-field Minor
@spectrum-web-components/overlay Minor
@spectrum-web-components/picker-button Minor
@spectrum-web-components/popover Minor
@spectrum-web-components/progress-bar Minor
@spectrum-web-components/progress-circle Minor
@spectrum-web-components/radio Minor
@spectrum-web-components/search Minor
@spectrum-web-components/sidenav Minor
@spectrum-web-components/slider Minor
@spectrum-web-components/split-view Minor
@spectrum-web-components/status-light Minor
@spectrum-web-components/swatch Minor
@spectrum-web-components/switch Minor
@spectrum-web-components/table Minor
@spectrum-web-components/tabs Minor
@spectrum-web-components/tags Minor
@spectrum-web-components/textfield Minor
@spectrum-web-components/thumbnail Minor
@spectrum-web-components/toast Minor
@spectrum-web-components/tooltip Minor
@spectrum-web-components/top-nav Minor
@spectrum-web-components/tray Minor
@spectrum-web-components/underlay Minor
@spectrum-web-components/vrt-compare Minor
@spectrum-web-components/base Minor
@spectrum-web-components/grid Minor
@spectrum-web-components/opacity-checkerboard Minor
@spectrum-web-components/reactive-controllers Minor
@spectrum-web-components/shared Minor
@spectrum-web-components/styles Minor
@spectrum-web-components/theme Minor
@spectrum-web-components/truncated Minor

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

@Rajdeepc Rajdeepc added bug Something isn't working Component: Menu SEV 1 Critical design/func issue that breaks design system or prevents task completion for all users labels Sep 16, 2025
@Rajdeepc Rajdeepc self-assigned this Sep 16, 2025
@github-actions
Copy link
Contributor

github-actions bot commented Sep 16, 2025

📚 Branch Preview

🔍 Visual Regression Test Results

When a visual regression test fails (or has previously failed while working on this branch), its results can be found in the following URLs:

Deployed to Azure Blob Storage: pr-5732

If the changes are expected, update the current_golden_images_cache hash in the circleci config to accept the new images. Instructions are included in that file.
If the changes are unexpected, you can investigate the cause of the differences and update the code accordingly.

@Rajdeepc Rajdeepc changed the title Rajdeep/jira 1027 fix(menu): MenuItem focus stealing from input elements on mouseover Sep 16, 2025
@Rajdeepc Rajdeepc marked this pull request as ready for review September 16, 2025 12:01
@Rajdeepc Rajdeepc requested a review from a team as a code owner September 16, 2025 12:01
Copy link
Contributor

@castastrophe castastrophe left a comment

Choose a reason for hiding this comment

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

A quick first pass review; I'll validate once the test case is written up!

`;
};

export const InputsWithMenu = (): TemplateResult => {
Copy link
Contributor

Choose a reason for hiding this comment

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

This is a great test case but I don't think we need a new story for it. If you wanted to replicate the behavior in a story, we could probably use the play functionality.

Copy link
Contributor Author

Choose a reason for hiding this comment

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

There's already a comprehensive test coverage for the focus behavior in packages/menu/test/menu.test.ts (lines 848-984) with the test 'does not steal focus from input elements on mouseover' that validates all the same input types and scenarios. Let me know if I am missing something here?

Copy link
Contributor

Choose a reason for hiding this comment

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

My main thought with not adding this as a story is that it's a lot of manual instructions for the viewer of the page to complete to get the experience you're demonstrating. Maybe we defer adding any new stories until we have a chance to talk about Storybook docs more as a team?

@Rajdeepc Rajdeepc added the Status: Ready for review PR ready for review or re-review. label Sep 18, 2025
* Regular expression pattern to match Spectrum Web Components input elements.
* Used to identify components that should maintain focus during menu interactions.
*/
export const INPUT_COMPONENT_PATTERN =
Copy link
Contributor

Choose a reason for hiding this comment

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

@rubencarvalho Let me know what you think about this! I dig it since we do reuse this logic and it feels like a more global concept to have updated in one place.

Copy link
Contributor

@castastrophe castastrophe left a comment

Choose a reason for hiding this comment

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

If you can add a manual test case to the PR description so I can do that last bit of validation, the rest of this looks really great.

@Rajdeepc
Copy link
Contributor Author

If you can add a manual test case to the PR description so I can do that last bit of validation, the rest of this looks really great.

@castastrophe I’ve already added a manual test case to verify this behavior with multiple input elements. Could you let me know if you’re looking to validate something different?

@blunteshwar
Copy link
Contributor

Can you update the Image Hash for this.

@github-actions
Copy link
Contributor

github-actions bot commented Sep 24, 2025

Tachometer results

Chrome

menu permalink

test-basic

Version Bytes Avg Time vs remote vs branch
npm latest 534 kB 163.92ms - 166.01ms - faster ✔
3% - 4%
4.33ms - 7.26ms
branch 510 kB 169.73ms - 171.78ms slower ❌
3% - 4%
4.33ms - 7.26ms
-
Firefox

menu permalink

test-basic

Version Bytes Avg Time vs remote vs branch
npm latest 534 kB 336.88ms - 345.44ms - faster ✔
3% - 6%
9.12ms - 22.04ms
branch 510 kB 351.90ms - 361.58ms slower ❌
3% - 6%
9.12ms - 22.04ms
-

@castastrophe
Copy link
Contributor

@castastrophe I’ve already added a manual test case to verify this behavior with multiple input elements. Could you let me know if you’re looking to validate something different?

@Rajdeepc Oh I see it now! The title was the template language so I thought it hadn't been updated. I validated and it looks great!

@Rajdeepc Rajdeepc added Status: Ready for merge PR has 2 approvals, all tests pass, and is ready to merge and removed Status: Ready for review PR ready for review or re-review. labels Oct 9, 2025
@Rajdeepc
Copy link
Contributor Author

Rajdeepc commented Oct 9, 2025

This PR introduces a targeted hotfix to address the immediate issue while the broader, permanent solution is being tracked in #5753

@coveralls
Copy link
Collaborator

coveralls commented Oct 9, 2025

Pull Request Test Coverage Report for Build 18379049563

Details

  • 109 of 121 (90.08%) changed or added relevant lines in 3 files are covered.
  • No unchanged relevant lines lost coverage.
  • Overall coverage decreased (-0.03%) to 97.955%

Changes Missing Coverage Covered Lines Changed/Added Lines %
packages/menu/src/MenuItem.ts 78 90 86.67%
Totals Coverage Status
Change from base Build 18316087539: -0.03%
Covered Lines: 34182
Relevant Lines: 34716

💛 - Coveralls

Copy link
Contributor

@rubencarvalho rubencarvalho left a comment

Choose a reason for hiding this comment

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

Approving to unblock customers - we agreed to follow up with the removal of the focus steal on the MenuItem.

@Rajdeepc Rajdeepc merged commit 4880da4 into main Oct 10, 2025
27 checks passed
@Rajdeepc Rajdeepc deleted the rajdeep/JIRA-1027 branch October 10, 2025 13:08
nikkimk pushed a commit that referenced this pull request Oct 10, 2025
…5732)

* fix(menu): added check to find focused element within root context

* fix(menu): added story

* fix(menu): added test

* chore(menu): added changeset

* fix(menu): added global const for component input pattern

* fix(menu): remove delimiter from the regexp constructor

* chore: skipped prod and vrt tests on the new story

* chore: fix tests helpers

* fix: check for cross root boundary

* fix: code comments

---------

Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Rajdeep Chandra <[email protected]>
nikkimk added a commit that referenced this pull request Nov 5, 2025
* feat(label): init field label mixin

feat(label): init field label mixin

* feat(textfield): updated textfiled docs to use label mixin

* feat(field-label): added mixin to package exports

* feat(field-label): added optional slot name for rendering label slot

* docs(textfield): implemented label mixin in stories

* test(textfield): added test for slotted label

* feat(textfield): added default slot observer for label changes

* test(textfield): added tests for slotted label

* docs(number-field): updated number field docs based on text field label changes

* docs(number-field): updated stories with slotted label

* docs(color-field): updated docs with slotted label

* feat(field-label): updated interface to include optional slot name for label

* feat(combobox): added label slot to combobox

* docs(combobox): added slotted label to docs

* test(combobox): updates tests with slotted label

* fix(combobox): fixed combobox field id for label

* feat(field-label): added label slot change handler to mixin

* feat(combobox): added slot change handlers

* feat(field-label): hide field label if not used

* feat(textfield): use field label mixin to observe slot

* feat(combobox): use field label mixin to observe slot

* feat(combobox): added placeholder

* fix(textfield): fixed issue with detecting slot content

* fix(field-label): fixed issue with slot content detection in text field

* test(textfield): removed unneccessary id attribute

* fix(fieldl-label): fixed mixin to allow slot naming

* feat(combobox): updated combobox, stories and tests for field label mixin

* fix(field-label): corrected linting issues

* fix(menu): MenuItem focus stealing from input elements on mouseover (#5732)

* fix(menu): added check to find focused element within root context

* fix(menu): added story

* fix(menu): added test

* chore(menu): added changeset

* fix(menu): added global const for component input pattern

* fix(menu): remove delimiter from the regexp constructor

* chore: skipped prod and vrt tests on the new story

* chore: fix tests helpers

* fix: check for cross root boundary

* fix: code comments

---------

Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Rajdeep Chandra <[email protected]>

* fix(field-label): made field id optional for picker

* fix(field-label): made field id optional for picker

* feat(picker): added field label mixin to pciker and picker stories

* fix(textfiled): fixed element name in warning

* fix(combobox): fixed element name in warning

* docs(picker): updated stories

* feat(picker): added field label mizin to picker without affecting pickerBase

* docs(textfield): documented default label slot

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* docs(textfield): updated docs with label examples

* docs(textfield): fixed issue with tabs

* test(textfield): updated test warning text to match revised warning text

* docs(combobox): added label and placeholder sections to docs

* docs(textfield): changed tabs label

* docs(number-field): updated docs with a label section

* chore(changeset): added changsets

* docs(field-label): added field-label-mixin docs

* Apply suggestion from @nikkimk

* feat(picker): revert changes

* feat(picker): revert changes

* chore: updated changesets

* docs(color-field): added label docs

* chore: updated changesets

* docs(combobox): fixed typo

Co-authored-by: Casey Eickhoff <[email protected]>

* docs(field-label): added JS Docs to mixin

* chore: linting fixes

* docs(combobox): fixed typo

Co-authored-by: Casey Eickhoff <[email protected]>

* chore: dropped changeset

* docs(color-field): fixed typo

Co-authored-by: Marissa Huysentruyt <[email protected]>

* chore(combobox): fixed typo

* docs(combobox): added side-aligned to story

* docs(combobox): fixed typo

Co-authored-by: Marissa Huysentruyt <[email protected]>

* docs(combobox): fixed typo

Co-authored-by: Marissa Huysentruyt <[email protected]>

* docs(field-label): added links to mixin docs

* docs(field-label): added code type in mixin docs

Co-authored-by: Marissa Huysentruyt <[email protected]>

* docs(field-label): added code type in mixin docs

Co-authored-by: Marissa Huysentruyt <[email protected]>

* fix(textfield): simiplified styles getter

* fix(textfield): simplified attribute

Co-authored-by: Rúben Carvalho <[email protected]>

* fix(textfield): simplified attribute

* docs(field-label): added more detail to mixin docs

Co-authored-by: Rúben Carvalho <[email protected]>

* docs(field-label): added more detail to field label mixin docs

Co-authored-by: Rúben Carvalho <[email protected]>

* fix(field-label): fixed inherited styles in mixin

Co-authored-by: Rúben Carvalho <[email protected]>

* fix(field-label): set side-aligned property to optional

Co-authored-by: Rúben Carvalho <[email protected]>

* fix(field-label): added override to styles getter

Co-authored-by: Rúben Carvalho <[email protected]>

* fix(field-label): field id should be required

* fix(field-label): reverted styles changes to mixin

* fix(textfield): fixed styles array

* fix(textfield): ensure super styles are CSSResultArray

---------

Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Casey Eickhoff <[email protected]>
Co-authored-by: Marissa Huysentruyt <[email protected]>
Co-authored-by: Rúben Carvalho <[email protected]>
nikkimk added a commit that referenced this pull request Nov 6, 2025
* feat(label): init field label mixin

feat(label): init field label mixin

* feat(textfield): updated textfiled docs to use label mixin

* feat(field-label): added mixin to package exports

* feat(field-label): added optional slot name for rendering label slot

* docs(textfield): implemented label mixin in stories

* test(textfield): added test for slotted label

* feat(textfield): added default slot observer for label changes

* test(textfield): added tests for slotted label

* docs(number-field): updated number field docs based on text field label changes

* docs(number-field): updated stories with slotted label

* docs(color-field): updated docs with slotted label

* feat(field-label): updated interface to include optional slot name for label

* feat(combobox): added label slot to combobox

* docs(combobox): added slotted label to docs

* test(combobox): updates tests with slotted label

* fix(combobox): fixed combobox field id for label

* feat(field-label): added label slot change handler to mixin

* feat(combobox): added slot change handlers

* feat(field-label): hide field label if not used

* feat(textfield): use field label mixin to observe slot

* feat(combobox): use field label mixin to observe slot

* feat(combobox): added placeholder

* fix(textfield): fixed issue with detecting slot content

* fix(field-label): fixed issue with slot content detection in text field

* test(textfield): removed unneccessary id attribute

* fix(fieldl-label): fixed mixin to allow slot naming

* feat(combobox): updated combobox, stories and tests for field label mixin

* fix(field-label): corrected linting issues

* fix(menu): MenuItem focus stealing from input elements on mouseover (#5732)

* fix(menu): added check to find focused element within root context

* fix(menu): added story

* fix(menu): added test

* chore(menu): added changeset

* fix(menu): added global const for component input pattern

* fix(menu): remove delimiter from the regexp constructor

* chore: skipped prod and vrt tests on the new story

* chore: fix tests helpers

* fix: check for cross root boundary

* fix: code comments

---------

Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Rajdeep Chandra <[email protected]>

* fix(field-label): made field id optional for picker

* fix(field-label): made field id optional for picker

* feat(picker): added field label mixin to pciker and picker stories

* fix(textfiled): fixed element name in warning

* fix(combobox): fixed element name in warning

* docs(picker): updated stories

* feat(picker): added field label mizin to picker without affecting pickerBase

* docs(textfield): documented default label slot

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* feat(picker): reverting changes until picker is refactored

* docs(textfield): updated docs with label examples

* docs(textfield): fixed issue with tabs

* test(textfield): updated test warning text to match revised warning text

* docs(combobox): added label and placeholder sections to docs

* docs(textfield): changed tabs label

* docs(number-field): updated docs with a label section

* chore(changeset): added changsets

* docs(field-label): added field-label-mixin docs

* Apply suggestion from @nikkimk

* feat(picker): revert changes

* feat(picker): revert changes

* chore: updated changesets

* docs(color-field): added label docs

* chore: updated changesets

* docs(combobox): fixed typo

Co-authored-by: Casey Eickhoff <[email protected]>

* docs(field-label): added JS Docs to mixin

* chore: linting fixes

* docs(combobox): fixed typo

Co-authored-by: Casey Eickhoff <[email protected]>

* chore: dropped changeset

* docs(color-field): fixed typo

Co-authored-by: Marissa Huysentruyt <[email protected]>

* chore(combobox): fixed typo

* docs(combobox): added side-aligned to story

* docs(combobox): fixed typo

Co-authored-by: Marissa Huysentruyt <[email protected]>

* docs(combobox): fixed typo

Co-authored-by: Marissa Huysentruyt <[email protected]>

* docs(field-label): added links to mixin docs

* docs(field-label): added code type in mixin docs

Co-authored-by: Marissa Huysentruyt <[email protected]>

* docs(field-label): added code type in mixin docs

Co-authored-by: Marissa Huysentruyt <[email protected]>

* fix(textfield): simiplified styles getter

* fix(textfield): simplified attribute

Co-authored-by: Rúben Carvalho <[email protected]>

* fix(textfield): simplified attribute

* docs(field-label): added more detail to mixin docs

Co-authored-by: Rúben Carvalho <[email protected]>

* docs(field-label): added more detail to field label mixin docs

Co-authored-by: Rúben Carvalho <[email protected]>

* fix(field-label): fixed inherited styles in mixin

Co-authored-by: Rúben Carvalho <[email protected]>

* fix(field-label): set side-aligned property to optional

Co-authored-by: Rúben Carvalho <[email protected]>

* fix(field-label): added override to styles getter

Co-authored-by: Rúben Carvalho <[email protected]>

* fix(field-label): field id should be required

* fix(field-label): reverted styles changes to mixin

* fix(textfield): fixed styles array

* fix(textfield): ensure super styles are CSSResultArray

---------

Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Rajdeep Chandra <[email protected]>
Co-authored-by: Casey Eickhoff <[email protected]>
Co-authored-by: Marissa Huysentruyt <[email protected]>
Co-authored-by: Rúben Carvalho <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working Component: Menu SEV 1 Critical design/func issue that breaks design system or prevents task completion for all users Status: Ready for merge PR has 2 approvals, all tests pass, and is ready to merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants