@ApiStatus.Internal
  @SuppressWarnings("UnusedReturnValue")
  public static @Nullable FileEditor openWhatsNewPage(@NotNull Project project,
                                                      @NotNull String url,
                                                      boolean includePlatformData,
                                                      @Nullable HTMLEditorProvider.JsQueryHandler queryHandler) {
    if (!JBCefApp.isSupported()) {
      throw new IllegalStateException("JCEF is not supported on this system");
    }

    var darkTheme = StartupUiUtil.INSTANCE.isDarkTheme();
    var parameters = getRequestParameters(includePlatformData);
    var request = HTMLEditorProvider.Request.url(Urls.newFromEncoded(url).addParameters(parameters).toExternalForm());

    try (var stream = WhatsNewAction.class.getResourceAsStream("whatsNewTimeoutText.html")) {
      if (stream != null) {
        request.withTimeoutHtml(new String(stream.readAllBytes(), StandardCharsets.UTF_8)
                                  .replace("__THEME__", darkTheme ? "theme-dark" : "")
                                  .replace("__TITLE__", IdeBundle.message("whats.new.timeout.title"))
                                  .replace("__MESSAGE__", IdeBundle.message("whats.new.timeout.message"))
                                  .replace("__ACTION__", IdeBundle.message("whats.new.timeout.action", url)));
      }
    }
    catch (IOException e) {
      Logger.getInstance(WhatsNewAction.class).error(e);
    }

    request.withQueryHandler(queryHandler);

    var title = IdeBundle.message("update.whats.new", ApplicationNamesInfo.getInstance().getFullProductName());
    return HTMLEditorProvider.openEditor(project, title, request);
  }
@ApiStatus.Internal
  @SuppressWarnings("UnusedReturnValue")
  public static @Nullable FileEditor openWhatsNewPage(@NotNull Project project,
                                                      @NotNull String url,
                                                      boolean includePlatformData,
                                                      @Nullable HTMLEditorProvider.JsQueryHandler queryHandler)