(feat) add d3 directive