Final integration. The page shell is now a thin composition of useConfig + the previously-extracted children: - Config.tsx: 989 -> 131 LOC. Page owns only the activeTab state (and the "drop the users tab if the server didn't send users" effect). Every form lives inside its tab; toast wiring lives in AppearanceTab; window.alert calls live inside UsersTab. - Tabs receive their `onSave* / onAddUser / ...` callbacks directly from the hook — no intermediate wrapper handlers. Coverage floor bumped after the split: lines 14 -> 17 functions 13 -> 15 branches 11 -> 13 statements 13 -> 16 Phase 4 final scoreboard: 34 test files, 156 tests, all green.
2.1 KiB
2.1 KiB