• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

coreui / coreui-pro / 34788785910
94%

Build:
DEFAULT BRANCH: main
Ran 13 Sep 2026 11:09PM UTC
Jobs 1
Files 47
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

13 Sep 2026 11:07PM UTC coverage: 93.87% (+0.003%) from 93.867%
34788785910

push

github

web-flow
fix(Autocomplete,MultiSelect): tear down the listeners on the child elements (#1275)

* fix(Autocomplete,MultiSelect): tear down the listeners on the child elements

Both controls build their UI as children of the host element and hang listeners
on those children. `BaseComponent.dispose()` clears
`EventHandler.off(this._element, EVENT_KEY)` — the host only — so everything on
the generated menu, toggler, indicator, text input, options list and cleaner
outlived the instance. Autocomplete's `dispose()` destroyed the Popper and
stopped there, which is why a disposed control still toggled on the indicator
and still selected options.

MultiSelect already tore its children down on dispose, but `update()` rebuilt
the control by removing the menu and unwrapping the host without clearing
anything first. That left the previous menu, wrapper and their listeners
registered — the registry holds a reference, so the detached nodes stayed alive
too — and an open control also leaked its Popper.

The teardown moves into `_destroySelect()`, which both `dispose()` and
`update()` now call. It also clears the host element, because `update()` calls
`_addEventListeners()` again: the keydown listener that opens the control from
the native select was being stacked, so after two updates one ArrowDown called
`show()` three times.

Tests: a disposed autocomplete ignores clicks on its indicator, options list and
cleaner; a native-select keystroke reaches `show()` once after two `update()`
calls. Both verified red beforehand. Full suite green — 46 files, 3046 tests.

* refactor(Autocomplete): move the teardown into _destroyAutocomplete

The same cleanup arrived in two shapes in one change: MultiSelect got a
`_destroySelect()` that both `dispose()` and `update()` call, while Autocomplete
kept the element loop inline in `dispose()`. Autocomplete now follows the same
convention — a private teardown named after the create method it undoes, sitting
directly above it, with `dispose()` red... (continued)

3924 of 4361 branches covered (89.98%)

Branch coverage included in aggregate %.

18 of 18 new or added lines in 2 files covered. (100.0%)

7269 of 7563 relevant lines covered (96.11%)

679.45 hits per line

Jobs
ID Job ID Ran Files Coverage
1 34788785910.1 13 Sep 2026 11:09PM UTC 47
93.87
GitHub Action Run
Source Files on build 34788785910
  • Tree
  • List 47
  • Changed 2
  • Source Changed 2
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #34788785910
  • bdff6b13 on github
  • Prev Build on main (#34786695599)
  • Next Build on main (#34790619290)
  • Delete
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc