feat(gen): add component structure