Token amount input and display with SI suffix formatting.
-- Amount input with inline symbol label:
Web3.Ui.Amount.amountInput []
{ value = model.amountStr
, onInput = AmountChanged
, decimals = 18
, symbol = "PLS"
, valid = True
}
-- Format a Wei value as human-readable (caller appends symbol):
Web3.Ui.Amount.formatWei 18 weiAmount ++ " PLS"
--> "1.23M PLS"Format a Wei BigInt as a human-readable string with SI suffix.
The symbol is not appended -- concatenate it yourself so the caller controls spacing and placement.
formatWei 18 onePls --> "1"
formatWei 18 largePls --> "1.23M"
formatWei 6 oneUsdc --> "1"SI suffixes: K (10^3), M (10^6), B (10^9), T (10^12).
Values below 1000 are shown with up to 2 decimal places, trailing zeros trimmed.
A nonzero value under 0.01 (which a flat 2dp would render as "0.00") instead
shows its first two significant fractional digits (e.g. "0.0000019") so real
sub-cent balances never vanish.
All formatting stays in integer/string space -- the amount is never routed
through Float, so neither very small nor very large values lose precision.
A row of balance-percentage chips -- 25% / 50% / 75% / MAX -- the
companion every amountInput deserves. Emits the chosen
percentage (100 = MAX); the app computes the actual amount from the live
balance, so the chips never display a stale number.
Web3.Ui.Amount.presetRow [] { onPick = FillPercent }
-- FillPercent 100 -> set input to formatUnits decimals balanceCSS classes: web3-amount-presets, web3-amount-presets__chip,
web3-amount-presets__chip--max.
Like formatWei, with the dust convention: a nonzero
amount that would display as zero (below 0.0001 of the unit) renders as
"<0.0001" instead -- "0" must mean zero, never "too small to show".
Numeric text input for a token amount.
valueis a plain decimal string (e.g."1000.5"). No parsing is done here -- callWeb3.Units.parseUnitsin yourupdateto convert to Wei.Adds
web3-amount-input--invalidwhenvalidisFalse.CSS classes:
web3-amount-wrapper(outer div),web3-amount-input(input),web3-amount-symbol(symbol label)