shared/action_row_layout library

ONE source of truth for "the trailing element can no longer share this row" (duplicates are bugs). Four sites carried their own copy of this rule before #409 R3 — two of them written as scale(100) > 140, which probes the WRONG font size (see walletTextScaleForcesStack).

The rule is deliberately layout-only: it decides GEOMETRY, never what is shown. Nothing money-bearing is ever hidden by a stack — the point is the opposite, that the copy and the figures keep the full row width when the trailing widget would otherwise starve them.

NOT exported from zec_wallet_ui.dart, unlike the rest of lib/shared/. The other files there are widgets a host composes with; this is internal layout policy whose constants are measured against THIS package's own surfaces, and publishing it would freeze them as API. (A host can still import the path directly — the package has no lib/src/ — so treat that as unsupported rather than prevented.)

Constants

kWalletStackRowWidth → const double
Below this row width the same starvation happens at EVERY text scale, so width alone forces the stack.
kWalletStackTextScale → const double
Past this multiple of the body text size, a low-vision user's chosen size must WIN the row: the trailing action moves onto its own line rather than squeezing the text it sits beside.

Functions

walletRowStacksAction(BuildContext context, double availableWidth) → bool
Whether a row that carries text plus its trailing action(s) must move them under the text. (One action on the notices, two on the parked-send and in-flight-swap rows — the more actions, the earlier the row starves.)
walletTextScaleForcesStack(BuildContext context) → bool
Whether the OS text scale alone forces the trailing element onto its own line.