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

coreui / coreui-pro / 30938685324
93%
main: 94%

Build:
Build:
LAST BUILD BRANCH: v6-dev
DEFAULT BRANCH: main
Ran 04 Aug 2026 06:29PM UTC
Jobs 1
Files 61
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

04 Aug 2026 06:27PM UTC coverage: 92.949% (-0.1%) from 93.074%
30938685324

push

github

web-flow
feat(NumberInput): a stepper you can actually hit (#694)

* feat(NumberInput): a stepper you can actually hit

The browser's own spinner is a few pixels wide, appears only on hover in
Chromium, and does not exist at all on iOS. This replaces it with two
buttons sized like every other adornment in a form-control-group.

The component is thin because the frame and the native input do the work:
min, max and step stay the browser's, stepping is stepUp()/stepDown(), and
the buttons are .form-control-action, so sizing, disabled and validation
come from the group. What is left is the boundary state - a button that
cannot move the value is disabled rather than silently inert - repeat on
hold, and starting from min when the field is empty, because stepUp()
throws on a value the browser considers invalid.

The buttons stay out of the tab order: a number field already steps with
the arrow keys, so adding them would cost two tab stops per field for an
affordance the keyboard already has. They keep their labels.

Hiding the native spinner needs both mechanisms, measured rather than
assumed: Chromium answers only to ::-webkit-*-spin-button (and paints the
spinner on hover, not at rest), Firefox has no such pseudo-element and
answers only to appearance: textfield. Neither rule covers the other
engine.

* feat(NumberInput): build the frame too, not just the buttons

The buttons are the component's, so the wrapper that lays them out can be
as well. An input on its own gets one, which makes the markup a plain form
control:

  <input type="number" class="form-control" data-coreui-toggle="number-input">

A size written on the input moves onto that wrapper, since sizing belongs
to the frame. An input already inside a group is left where the author put
it - the group may hold more than this field - and only a wrapper the
component created is removed on dispose.

Drops the split layout that briefly landed here: on a full-width field it
spreads the value between two distant ... (continued)

4270 of 4823 branches covered (88.53%)

Branch coverage included in aggregate %.

100 of 117 new or added lines in 2 files covered. (85.47%)

8266 of 8664 relevant lines covered (95.41%)

362.26 hits per line

Uncovered Changes

Lines Coverage ∆ File
17
81.76
js/src/number-input.ts
Jobs
ID Job ID Ran Files Coverage
1 30938685324.1 04 Aug 2026 06:29PM UTC 61
92.95
GitHub Action Run
Source Files on build 30938685324
  • Tree
  • List 61
  • Changed 2
  • Source Changed 1
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #30938685324
  • d595be27 on github
  • Prev Build on v6-dev (#30922893000)
  • Next Build on v6-dev (#30944146876)
  • 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