feat(js): tab navigation with directive