use system abstraction to unify UI components