Module-specific components built from shared App* primitives (00-shared/03).
Props, states, animation, a11y, tokens, Flutter mapping. Reuse over new — only
components that don't exist in the shared library are defined here.
Props: value (any), onChanged, onSave, saving, compact.
Dispatches by runtime type → AppTextField (string), numeric field (number),
AppSwitch row (boolean), AppJsonEditor (object/array/unknown). Compact mode = single
line for list rows; expanded = detail pane.
AppSwitch in a ListTile; instant-save on toggle (optimistic, rollback on error —
00-shared/06 §3.5); saving disables switch; subtitle shows last save status.
Bottom bar in selection mode: "Save all (N)" FilledButton full width + "Cancel" TextButton;
counts only dirty rows; on save → per-row status (✓ saved / ✗ failed, tap row retries).
a11y: bar announced; result via snackbar "Saved 4 of 5 settings".