public JComponent createPanel(
    @NotNull Project project,
    @NotNull TerminalOptionsProvider provider,
    @NotNull TerminalProjectOptionsProvider projectOptionsProvider,
    @NotNull BlockTerminalOptions blockTerminalOptions
  ) {
    myProject = project;
    myOptionsProvider = provider;
    myProjectOptionsProvider = projectOptionsProvider;
    myBlockTerminalOptions = blockTerminalOptions;

    myNewUiSettingsPanel.setVisible(ExperimentalUI.isNewUI());
    myBetaLabel.setIcon(AllIcons.General.Beta);
    myNewUiChildSettingsPanel.setBorder(JBUI.Borders.emptyLeft(28));
    myNewUiCheckbox.setSelected(Registry.is(LocalBlockTerminalRunner.BLOCK_TERMINAL_REGISTRY));
    // Show child New Terminal settings as disabled if New Terminal is not selected
    updateNewUiPanelState();
    myNewUiCheckbox.addChangeListener(__ -> updateNewUiPanelState());

    myPromptStyleButtonsPanel.setBorder(JBUI.Borders.empty(4, 20, 0, 0));
    // UI Designer is unable to create a ContextHelpLabel, because it doesn't have a default constructor.
    // So, I have to create and add it manually.
    var shellPromptDescription = ContextHelpLabel.create(TerminalBundle.message("settings.shell.prompt.description"));
    shellPromptDescription.setBorder(JBUI.Borders.emptyLeft(6));
    myShellPromptButtonPanel.add(shellPromptDescription);

    var buttonGroup = new ButtonGroup();
    buttonGroup.add(mySingleLineButton);
    buttonGroup.add(myDoubleLineButton);
    buttonGroup.add(myShellPromptButton);

    myProjectSettingsPanel.setBorder(IdeBorderFactory.createTitledBorder(TerminalBundle.message("settings.terminal.project.settings")));
    myGlobalSettingsPanel.setBorder(IdeBorderFactory.createTitledBorder(TerminalBundle.message("settings.terminal.application.settings")));

    configureShellPathField();
    configureStartDirectoryField();

    List<Component> customComponents = new ArrayList<>();
    for (LocalTerminalCustomizer c : LocalTerminalCustomizer.EP_NAME.getExtensions()) {
      UnnamedConfigurable configurable = c.getConfigurable(projectOptionsProvider.getProject());
      if (configurable != null) {
        myConfigurables.add(configurable);
        JComponent component = configurable.createComponent();
        if (component != null) {
          customComponents.add(component);
        }
      }
    }
    if (!customComponents.isEmpty()) {
      myConfigurablesPanel.setLayout(new GridLayoutManager(customComponents.size(), 1));
      int i = 0;
      for (Component component : customComponents) {
        myConfigurablesPanel.add(component, new GridConstraints(
          i++, 0, 1, 1, GridConstraints.ANCHOR_WEST, GridConstraints.FILL_NONE, 0, 0,
          new Dimension(-1, -1),
          new Dimension(-1, -1),
          new Dimension(-1, -1),
          0, false
        ));
      }
    }

    myUseOptionAsMetaKey.getParent().setVisible(SystemInfo.isMac);

    return myWholePanel;
  }
public JComponent createPanel(
    @NotNull Project project,
    @NotNull TerminalOptionsProvider provider,
    @NotNull TerminalProjectOptionsProvider projectOptionsProvider,
    @NotNull BlockTerminalOptions blockTerminalOptions
  )