Unify `loading-spinner` helper, add conditional support via component