fix: implement d event delegation