Cookbooks / Dialog + form
DialogService.open renders a standalone dialog. Controls inside use ngModel / CVA. Inject DialogContext and close(result) so the caller receives a typed payload.
this.dialog.open(ProjectDialogComponent).subscribe((project) => {
if (project) this.toast.success('Created ' + project.name);
});