Repository navigation
Sealed Input 0.4.0
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.Textcolumn. 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.