+ {componentData && (
+
+
+
+ {`${totalCount} ${intl.formatMessage(messages.componentTotal)}`}
+
+
+ )}
+ {componentData && Object.keys(componentData).map((blockType) => (
+
+ ))}
+
+ );
+};
diff --git a/src/generic/block-type-utils/messages.ts b/src/generic/block-type-utils/messages.ts
new file mode 100644
index 0000000000..ee6d3b319d
--- /dev/null
+++ b/src/generic/block-type-utils/messages.ts
@@ -0,0 +1,11 @@
+import { defineMessages } from '@edx/frontend-platform/i18n';
+
+const messages = defineMessages({
+ componentTotal: {
+ id: 'course-authoring.block-type-utils.component-total',
+ defaultMessage: 'Total',
+ description: 'Total number of components',
+ },
+});
+
+export default messages;
diff --git a/src/generic/sidebar/SidebarContent.tsx b/src/generic/sidebar/SidebarContent.tsx
new file mode 100644
index 0000000000..b8b6f9998f
--- /dev/null
+++ b/src/generic/sidebar/SidebarContent.tsx
@@ -0,0 +1,18 @@
+import React from 'react';
+import { Stack } from '@openedx/paragon';
+
+interface SidebarContentProps {
+ children: React.ReactNode[];
+}
+
+export const SidebarContent = ({ children } : SidebarContentProps) => (
+