Set/clear a tooth's keratinized gingiva width (mm) on the active chart.
mm === null explicitly clears it (not charted).
Any other value is clamped to an integer 0-15 via clampKg.
A non-finite number (e.g. NaN from a bad keystroke) is a silent no-op
— it must NOT clear an existing value, unlike an explicit null.
Fires notifyStateChange whenever it actually mutates state; never
on a rejected/no-op call — toothEditGate's applyFn returns false for
a no-op so the gate protocol never marks/mirrors a tooth that didn't change.
Set/clear a tooth's keratinized gingiva width (mm) on the active chart.
mm === nullexplicitly clears it (not charted).clampKg.NaNfrom a bad keystroke) is a silent no-op — it must NOT clear an existing value, unlike an explicitnull.Fires
notifyStateChangewhenever it actually mutates state; never on a rejected/no-op call —toothEditGate'sapplyFnreturnsfalsefor a no-op so the gate protocol never marks/mirrors a tooth that didn't change.