+
+ Content Readiness
+
+
+ File type coverage matrix · {contentItems.length} topics across{' '}
+ {grouped.length} groups · {fileTypeColumns.length} deliverable types
+
+
+
+ setActiveGroup(null)}
+ >
+ All ({grouped.length})
+
+ {grouped.map((g) => (
+
+ setActiveGroup(activeGroup === g.group.key ? null : g.group.key)
+ }
+ >
+ {g.group.label} ({g.items.length})
+
+ ))}
+
+
+
+
+
+
+ Topic
+ {fileTypeColumns.map((ft) => (
+
+ {ft.label}
+
+ ))}
+
+
+
+ {filteredGroups.map((g) => {
+ const pct =
+ g.total > 0 ? Math.round((g.completed / g.total) * 100) : 0;
+
+ return (
+
+ );
+ })}
+
+
+
+
+ );
+}
+
+interface GroupRowsProps {
+ group: GroupedItems;
+ pct: number;
+ fileTypeColumns: ContentFileTypeMeta[];
+}
+
+function GroupRows({ group, pct, fileTypeColumns }: GroupRowsProps): JSX.Element {
+ return (
+ <>
+