Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[number-field] Consider using input type="text" for number and integer fields #3102

Open
sissbruecker opened this issue Nov 24, 2021 · 1 comment
Labels
enhancement New feature or request epic Big feature that has subtasks needs discussion No decision yet, discussion needed vaadin-number-field

Comments

@sissbruecker
Copy link
Contributor

Describe your motivation

Currently vaadin-number-input internally uses an input type="number" element. That comes with a lot of benefits, such as supporting localized number formats out of the box, preventing entering non-numeric characters, stepper controls, or displaying an appropriate on-screen keyboard layout on mobile devices. However the approach also has downsides, in that all the above points do not work consistently between browsers, devices, and locales. Another issue is that a number type input does not allow much flexibility, for example when it comes the presentation number format, or when dealing with the stepper buttons. Other component libraries have chosen to implement their number field component using an input type="text" instead, by reimplementing some or all of the native behaviour of the native number type input. We can consider doing the same for our vaadin-number-input. This ticket is about collecting the benefits that we would gain from such a change, and also about noting down which behaviour we would have to replicate from the native number input if we decide to move ahead with this.

What could we gain from it

What behaviour would we have to reimplement, what do we need to look out for

  • A default, locale-based, number parsing mechanism would have to be reimplemented from scratch. This is not a trivial task, and we would need to spend a lot of effort to make sure we do not degrade the UX for specific locales.
  • Our component would need to differentiate between the presentation value, which is what the user entered and sees in the input in their locale number format, and the internal value (observable from the value property), which should be a numeric value that can be processed by a program, for example with parseFloat(value)
  • Validation, such as required, min and max, would have to be reimplemented
  • Preventing entering invalid characters would have to be reimplemented. This very likely also depends on the locale, as not all locales use just ,, . or -.
  • Steps logic would have to be reimplemented. This also ties into validation, as using the stepper controls should always result in a valid value.
  • Native number inputs have some additional ways of controlling them, for example scrolling up/down, or using the arrow keys triggers the stepper controls, and increases or decreases the value.
  • We would need to ensure a reasonable numeric on-screen keyboard layout is used for mobile devices
  • ...Feel free to add more points here

Additional context

We should take a look at existing component libraries, which have implemented such an approach, and have worked out most of the kinks. Some notable examples:

@sissbruecker sissbruecker added the enhancement New feature or request label Nov 24, 2021
@web-padawan web-padawan added the needs discussion No decision yet, discussion needed label Nov 24, 2021
@web-padawan web-padawan added the epic Big feature that has subtasks label Nov 24, 2021
@web-padawan web-padawan changed the title Consider changing vaadin-number-input to use input type="text" [number-field] Consider using input type="text" for number and integer fields Nov 24, 2021
@yuriy-fix yuriy-fix changed the title [number-field] Consider using input type="text" for number and integer fields [number-field] Consider using input type="text" for number and integer fields [3 days] Sep 25, 2023
@web-padawan web-padawan self-assigned this Oct 4, 2023
@web-padawan web-padawan removed their assignment Oct 9, 2023
@jorgheymans
Copy link

If you need more weight to put this on your roadmap: Vaadin puts itself mostly in the niche of business applications. Such applications very often deal with amounts, so i think Vaadin could have built-in first class support for entering, displaying, and binding such data in all aspects.

@juuso-vaadin juuso-vaadin changed the title [number-field] Consider using input type="text" for number and integer fields [3 days] [number-field] Consider using input type="text" for number and integer fields Jun 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request epic Big feature that has subtasks needs discussion No decision yet, discussion needed vaadin-number-field
Projects
None yet
Development

No branches or pull requests

3 participants