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 — gateToothEdit's applyFn returns false for
a no-op so the DS-1 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).NaNfrom a bad keystroke) is a silent no-op — it must NOT clear an existing value, unlike an explicitnull.Fires notifyStateChange whenever it actually mutates state; never on a rejected/no-op call —
gateToothEdit'sapplyFnreturnsfalsefor a no-op so the DS-1 protocol never marks/mirrors a tooth that didn't change.