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([