diff --git a/servers/nextjs/app/(presentation-generator)/outline/components/OutlineItem.tsx b/servers/nextjs/app/(presentation-generator)/outline/components/OutlineItem.tsx
index d9283452..f137ec7a 100644
--- a/servers/nextjs/app/(presentation-generator)/outline/components/OutlineItem.tsx
+++ b/servers/nextjs/app/(presentation-generator)/outline/components/OutlineItem.tsx
@@ -6,6 +6,7 @@ import { useDispatch, useSelector } from "react-redux"
import { deleteSlideOutline, setOutlines, SlideOutline } from "@/store/slices/presentationGeneration"
import ToolTip from "@/components/ToolTip"
import MarkdownEditor from "../../components/MarkdownEditor"
+import { useEffect } from "react"
interface OutlineItemProps {
@@ -24,6 +25,19 @@ export function OutlineItem({
} = useSelector((state: RootState) => state.presentationGeneration);
const dispatch = useDispatch()
+ useEffect(() => {
+ if (isStreaming && slideOutline.body) {
+ const outlineItem = document.getElementById(`outline-item-${index}`);
+ if (outlineItem) {
+ outlineItem.scrollIntoView({
+ behavior: "smooth",
+ block: "center",
+ inline: "nearest",
+ });
+ }
+ }
+ }, [outlines.length]);
+
const handleSlideChange = (newOutline: SlideOutline) => {
if (isStreaming) return;
const newData = outlines?.map((each, idx) => {
@@ -60,6 +74,8 @@ export function OutlineItem({
}
+
+
return (
{/* Main Title Row */}
@@ -84,7 +100,7 @@ export function OutlineItem({
{/* Main Title Input - Add onFocus handler */}
-
+
{
if (!presentation_id) {
return (
-
+
No Presentation ID Found
-
Please start a new presentation.
+
Please start a new presentation.
+
diff --git a/servers/nextjs/app/(presentation-generator)/presentation/components/SlideContent.tsx b/servers/nextjs/app/(presentation-generator)/presentation/components/SlideContent.tsx
index 15f05784..aa8a1e8b 100644
--- a/servers/nextjs/app/(presentation-generator)/presentation/components/SlideContent.tsx
+++ b/servers/nextjs/app/(presentation-generator)/presentation/components/SlideContent.tsx
@@ -18,7 +18,6 @@ import NewSlide from "../../components/slide_layouts/NewSlide";
import { getEmptySlideContent } from "../../utils/NewSlideContent";
import useLayoutSchema from "../../hooks/useLayoutSchema";
import dynamic from "next/dynamic";
-import FirstSlideLayout from "@/components/layouts/FirstSlideLayout";
interface SlideContentProps {
slide: Slide;
@@ -117,7 +116,7 @@ const SlideContent = ({
const renderLayout = (slide: any) => {
const layoutName = idMapFileNames[slide.layoutId];
- const Layout = dynamic(() => import(`@/components/layouts/${layoutName}.tsx`));
+ const Layout = dynamic(() => import(`@/components/layouts/${layoutName}`)) as React.ComponentType<{ data: any }>;
return
};
diff --git a/servers/nextjs/components/layouts/BulletPointSlideLayout.tsx b/servers/nextjs/components/layouts/BulletPointSlideLayout.tsx
index 22ecf543..b5f5e660 100644
--- a/servers/nextjs/components/layouts/BulletPointSlideLayout.tsx
+++ b/servers/nextjs/components/layouts/BulletPointSlideLayout.tsx
@@ -39,7 +39,6 @@ const bulletPointSlideSchema = z.object({
})
export const Schema = bulletPointSlideSchema
-console.log(z.toJSONSchema(Schema))
export type BulletPointSlideData = z.infer
diff --git a/servers/nextjs/components/layouts/ConclusionSlideLayout.tsx b/servers/nextjs/components/layouts/ConclusionSlideLayout.tsx
index a095f015..a817dde7 100644
--- a/servers/nextjs/components/layouts/ConclusionSlideLayout.tsx
+++ b/servers/nextjs/components/layouts/ConclusionSlideLayout.tsx
@@ -24,7 +24,7 @@ const conclusionSlideSchema = z.object({
description: "Optional call to action or next steps",
}),
contactInfo: z.object({
- email: z.string().email().optional().meta({
+ email: z.email().optional().meta({
description: "Contact email",
}),
phone: z.string().min(5).max(50).optional().meta({
diff --git a/servers/nextjs/components/layouts/TeamSlideLayout.tsx b/servers/nextjs/components/layouts/TeamSlideLayout.tsx
index cfcc52e3..64eb6cef 100644
--- a/servers/nextjs/components/layouts/TeamSlideLayout.tsx
+++ b/servers/nextjs/components/layouts/TeamSlideLayout.tsx
@@ -25,10 +25,10 @@ const teamSlideSchema = z.object({
bio: z.string().min(10).max(300).optional().meta({
description: "Brief biography or description",
}),
- email: z.email().optional().meta({
+ email: z.string().email().optional().meta({
description: "Contact email",
}),
- linkedin: z.url().optional().meta({
+ linkedin: z.string().url().optional().meta({
description: "LinkedIn profile URL",
})
})).min(1).max(6).default([