Skip to content
Devix Open Source

Changelog

Every release of Masked Input, newest first. Breaking changes are flagged.

v1.0.0

15 Sep 2026

First release.

Added

  • A caret that does not jump. The state is the raw string you typed and the field's text is derived from it, so the caret can be stored as "after the nth raw character" and re-rendering cannot move it. Typing into the middle, deleting across a separator and pasting over a selection all keep their position, and the tests assert each one.
  • The raw value posted for you: the field's name moves to a hidden input carrying the unmasked characters, so a plain form submit sends clean data with no JavaScript of yours involved. postRaw: false turns it off, rawName posts both.
  • Nothing rewritten while a mobile keyboard is composing, so Android and iOS keyboards keep their own buffer intact.
  • One routine for typing and pasting, so a value copied in already formatted — or formatted differently — lands correctly.
  • Tokens as a map of regular expressions rather than three fixed classes, so HH:HH:HH:HH:HH:HH with { H: /[0-9A-Fa-f]/ } is a MAC address.
  • Presets for CNIC, NTN, Emirates ID, UAE TRN, Saudi ID, Saudi VAT, Qatar ID, Bahrain CPR, PAN, GSTIN, cards and Amex cards, expiry, CVC, IBAN, dates, times, MAC addresses and hex colours — taking their lengths from the same table Devix Validators checks.
  • onChange and onComplete that do not fire on mount, because a value you passed in is not a change — and a controlled field whose handler runs during its own construction is how a render loop starts.
  • setMask(), which regroups what is already typed instead of emptying the field.
  • Lazy rendering by default, so an empty field is empty; lazy: false with a placeholderChar shows the shape up front.
  • A DOM-free core — createMask, apply, accept, caretAfter, rawBefore — that runs on a server, for formatting a stored value into a table or a PDF.
  • React, Vue, Svelte, <dx-masked-input> and a CDN build over one core.
  • 2.3 kB gzip, zero dependencies.