+
+
+ {image && }
+
+
+ {children}
+
+
+ {(tagsExists || truncated) && (
+
+ )}
+
+ );
+}
+
+export default ChangelogItem;
diff --git a/src/plugins/changelog/theme/ChangelogItem/styles.module.css b/src/plugins/changelog/theme/ChangelogItem/styles.module.css
new file mode 100644
index 00000000..33fa6c8f
--- /dev/null
+++ b/src/plugins/changelog/theme/ChangelogItem/styles.module.css
@@ -0,0 +1,10 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+.changelogItemContainer {
+ margin-bottom: 1rem;
+}
diff --git a/src/plugins/changelog/theme/ChangelogList/index.tsx b/src/plugins/changelog/theme/ChangelogList/index.tsx
new file mode 100644
index 00000000..2e5a7b24
--- /dev/null
+++ b/src/plugins/changelog/theme/ChangelogList/index.tsx
@@ -0,0 +1,85 @@
+/**
+ * Copyright (c) Facebook, Inc. and its affiliates.
+ *
+ * This source code is licensed under the MIT license found in the
+ * LICENSE file in the root directory of this source tree.
+ */
+
+import { ThemeClassNames } from '@docusaurus/theme-common';
+import useDocusaurusContext from '@docusaurus/useDocusaurusContext';
+import ApiSidebar from '@site/src/components/ApiSidebar';
+import BlogLayout from '@theme/BlogLayout';
+import type { Props } from '@theme/BlogListPage';
+import BlogListPaginator from '@theme/BlogListPaginator';
+import BlogPostItem from '@theme/BlogPostItem';
+import Layout from '@theme/Layout';
+import React from 'react';
+
+import styles from './styles.module.css';
+
+function ChangelogList(props: Props): JSX.Element {
+ const { metadata, items, sidebar } = props;
+ const {
+ siteConfig: { title: siteTitle },
+ } = useDocusaurusContext();
+ const { blogDescription, blogTitle, permalink } = metadata;
+ const isBlogOnlyMode = permalink === '/';
+ const title = isBlogOnlyMode ? siteTitle : blogTitle;
+
+ return (
+