Skip to content

Sealed Input 0.4.0

Choose a tag to compare

@skfd skfd released this 10 Sep 03:04
· 16 commits to main since this release

A model-driven app field control for typing a sensitive number by hand — a bank account number, a Social Insurance Number — with nothing pasteable and nothing readable on screen.

  • Sealed Input makes a person type a sensitive number twice, masking every character and blocking the clipboard. The character just typed stays readable for a second, then turns into a dot. Paste, drop, cut, autofill and password managers are shut off at the field.
  • The column is written only once both entries agree and pass validation, so a half-typed number never reaches Dataverse. Digits only by default, optionally checked as a Canadian SIN (nine digits, Luhn), with a length cap for everything else. A stored value shows a fixed eight dots, which say nothing about the real length.
  • The two fields borrow the form's own label placement, side by side in a wide cell and stacked in a narrow one. The control reads the section's label column out of the DOM so its inputs line up with the stock fields beside them. Nothing about labels is configurable.

Install

Import xrm-sealed-input-0.4.0-managed.zip (or the unmanaged zip) into your environment, then add Sealed Input to a text column on a form. docs/usage.md has the maker-side steps, the screenshots, and the full list of interaction rules.

Vendor instead

The control is five files in one folder. xrm-sealed-input-0.4.0-source.zip holds them with VENDORING.md, or fetch straight from the repo:

npx degit comentality/xrm-sealed-input/SealedInput/SealedInput   SealedInput/SealedInput

sealedInput.ts holds the rules with no React or DOM in them — the file to edit for another country's checksum or a different character filter.

Requirements and caveats

  • Bound to a SingleLine.Text column. Platform libraries React 16.14.0 and Fluent 9.46.2 (newer Fluent versions are rejected on import).
  • The control governs entry, not storage. Protecting the column itself is Dataverse column security's job.
  • A half-finished entry cannot block the form's save: standard controls have no field notification API.
  • Read-only and disabled rendering is untested — the harness has no disabled switch.
  • First public release. The numbers below 0.4.0 were test-environment pushes, never published.
  • Public domain, CC0 1.0. No attribution required.